* Copyright (c) 2023 - present TinyEngine Authors.
* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.
*
* Use of this source code is governed by an MIT-style license.
*
* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/
import { reactive, ref } from 'vue'
import { extend, isEqual } from '@opentiny/vue-renderless/common/object'
const DEFAULT_PAGE = {
app: '',
name: '',
route: '',
page_content: {
componentName: 'Page',
css: '',
props: {},
lifeCycles: {},
children: [],
dataSource: {
list: []
},
state: {},
methods: {},
utils: [],
bridge: [],
inputs: [],
outputs: []
},
isHome: false,
parentId: 'none',
isBody: false,
group: 'staticPages'
}
const selectedTemplateCard = ref(null)
const pageSettingState = reactive({
currentPageDataCopy: {},
currentPageData: {},
pages: [],
oldParentId: null,
pageTreeKey: 0,
isNew: false,
ROOT_ID: '0',
updateTreeData: null,
treeDataMapping: {}
})
const isTemporaryPage = reactive({
saved: false
})
const isCurrentDataSame = () => {
const data = pageSettingState.currentPageData || {}
const dataCopy = pageSettingState.currentPageDataCopy || {}
let isEqual = true
Object.keys(dataCopy).some((item) => {
if (['children', 'label', 'createdBy', 'assets', 'occupier'].includes(item)) {
return false
} else if (item === 'page_content') {
const obj = {
inputs: dataCopy[item].inputs,
outputs: dataCopy[item].outputs,
lifeCycles: dataCopy[item].lifeCycles
}
const objCopy = {
inputs: data[item].inputs,
outputs: data[item].outputs,
lifeCycles: data[item].lifeCycles
}
if (JSON.stringify(obj) !== JSON.stringify(objCopy)) {
isEqual = false
}
} else {
if (dataCopy[item] !== data[item]) {
isEqual = false
}
}
return !isEqual
})
return isEqual
}
const changeTreeData = (newParentId, oldParentId) => {
if (newParentId && oldParentId && newParentId !== oldParentId) {
const folderData = pageSettingState.treeDataMapping[newParentId]
const parentData = pageSettingState.treeDataMapping[oldParentId]
const currentPageDataId = pageSettingState.currentPageData.id
const curDataIndex = parentData.children?.findIndex?.(({ id }) => id === currentPageDataId)
if (curDataIndex > -1) {
parentData.children.splice(curDataIndex, 1)
if (!folderData.children) {
folderData.children = []
}
folderData.children.unshift(pageSettingState.currentPageData)
pageSettingState.pageTreeKey++
}
}
}
const getPageContent = () => {
return pageSettingState.currentPageData.page_content || {}
}
const initCurrentPageData = (pageDetail) => {
pageSettingState.currentPageData = pageDetail
pageSettingState.currentPageDataCopy = extend(true, {}, pageDetail)
pageSettingState.oldParentId = pageDetail.parentId
}
const resetPageData = () => {
pageSettingState.currentPageData = {}
pageSettingState.currentPageDataCopy = {}
pageSettingState.oldParentId = null
}
const isChangePageData = () => !isEqual(pageSettingState.currentPageData, pageSettingState.currentPageDataCopy)
const STATIC_PAGE_GROUP_ID = 0
const COMMON_PAGE_GROUP_ID = 1
export default () => {
return {
DEFAULT_PAGE,
selectedTemplateCard,
pageSettingState,
isTemporaryPage,
isCurrentDataSame,
changeTreeData,
getPageContent,
resetPageData,
initCurrentPageData,
isChangePageData,
STATIC_PAGE_GROUP_ID,
COMMON_PAGE_GROUP_ID
}
}