* Copyright (c) 2022 - present TinyVue Authors.
* Copyright (c) 2022 - 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 { mapTree } from '../grid/static'
import { copyArray } from '@opentiny/utils'
export const dialogTitle =
({ constants, props, t }) =>
() =>
props.title || t(constants.DIALOG_TITLE)
export const showDialog = (state) => () => (state.boxVisibility = true)
export const hideDialog =
({ api, state, vm, props }) =>
() => {
if (!props.keepSelectedNodes) {
state.currentCheckNode.forEach((item) => {
const isNode = state.listItem.filter((data) => data.id === item.id)
if (isNode.length) {
vm.$refs.tree.setChecked(item, true, true)
if (item.disabled !== undefined) {
item.disabled = false
}
} else {
vm.$refs.tree.setChecked(item, false, true)
}
})
state.getNodeValue = copyArray(state.listItem)
if (state.getNodeValue.length === props.maxItem) {
api.disabledTreeNode(state.getNodeValue, true)
} else if (state.getNodeValue.length < props.maxItem) {
api.disabledTreeNode(state.getNodeValue, false)
}
state.currentCheckNode = []
}
state.boxVisibility = false
}
export const sureNodevalue = (state) => () => {
state.listItem = state.getNodeValue.slice()
state.currentCheckNode = []
state.boxVisibility = false
}
export const filterNode = () => (value, data) => data.label.includes(value)
export const getValue =
({ api, props, state }) =>
(value) => {
if (!props.keepSelectedNodes) {
state.currentCheckNode.push(value)
}
let index = -1
state.getNodeValue.forEach((data, indexx) => {
if (data.id === value.id) {
index = indexx
}
})
index !== -1 ? state.getNodeValue.splice(index, 1) : state.getNodeValue.push(value)
if (state.getNodeValue.length === props.maxItem) {
api.disabledTreeNode(state.getNodeValue, true)
} else if (state.getNodeValue.length < props.maxItem) {
api.disabledTreeNode(state.getNodeValue, false)
}
}
export const disabledTreeNode = (state) => (arr, isDisabled) => {
state.datas.forEach((item) => {
if (!item.children) {
const index = arr.filter((data) => data.id === item.id)
if (!index.length) {
item.disabled = isDisabled
}
} else {
item.children.forEach((item) => {
const index = arr.filter((data) => data.id === item.id)
if (!index.length) {
item.disabled = isDisabled
}
})
}
})
}
export const initData =
({ state, props, service, api }) =>
() => {
let data = props.data
if (!data && typeof service.getMenuDataSync === 'function') {
const menuData = service.getMenuDataSync()
data = api.setMenuKey({ newData: [], menuData })
}
state.datas = mapTree(data || [], (item) => ({ ...item, disabled: false }))
}
export const disabledParentNode = (state) => () => {
state.datas.forEach((item) => {
if (item.children) {
item.disabled = true
}
})
}
export const initService = ({ props, service }) => {
const $service = service || { base: {} }
return {
getMenuDataSync: props.getMenuDataSync || $service.base.getMenuDataSync
}
}