import { computed } from 'vue'
import { storeToRefs } from 'pinia'
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
interface DatasetField {
type?: string
innerType?: string
title: string
id: string
tableId: string
}
const dvMainStore = dvMainStoreWithOut()
const { componentData, canvasViewInfo } = storeToRefs(dvMainStore)
export const comInfo = () => {
const dfsComponentData = () => {
let arr = componentData.value.filter(
com => !['VQuery', 'DeTabs'].includes(com.innerType) && com.component !== 'Group'
)
componentData.value.forEach(ele => {
if (ele.innerType === 'DeTabs') {
ele.propValue.forEach(itx => {
arr = [
...arr,
...itx.componentData.filter(
com => !['VQuery', 'DeTabs'].includes(com.innerType) && com.component !== 'Group'
)
]
itx.componentData.forEach(element => {
if (element.component === 'Group') {
arr = [
...arr,
element.propValue.filter(
coms =>
!['VQuery', 'DeTabs'].includes(coms.innerType) && coms.component !== 'Group'
)
]
}
})
})
} else if (ele.component === 'Group') {
arr = [
...arr,
ele.propValue.filter(
com => !['VQuery', 'DeTabs'].includes(com.innerType) && com.component !== 'Group'
)
]
ele.propValue.forEach(element => {
if (element.innerType === 'DeTabs') {
element.propValue.forEach(itx => {
arr = [
...arr,
...itx.componentData.filter(
com => !['VQuery', 'DeTabs'].includes(com.innerType) && com.component !== 'Group'
)
]
})
}
})
}
})
return arr.flat()
}
const datasetFieldList = computed(() => {
return dfsComponentData()
.map(ele => {
const obj = canvasViewInfo.value[ele.id]
if (!obj) return null
const { id, title, tableId, type } = obj as DatasetField
return !!id && !!tableId
? {
id,
type,
title,
tableId
}
: null
})
.filter(ele => !!ele)
})
return {
datasetFieldList
}
}