UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 10.7 kB
{"version":3,"file":"effect.mjs","sources":["../../../src/cascader/core/effect.ts"],"sourcesContent":["import isNumber from 'lodash/isNumber';\nimport isFunction from 'lodash/isFunction';\nimport isArray from 'lodash/isArray';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { TreeNode, CascaderContextType, TdCascaderProps, TreeNodeValue, TreeNodeModel } from '../interface';\nimport { getFullPathLabel, getTreeValue } from './helper';\n\n/**\n * 点击item的副作用\n * @param propsTrigger\n * @param trigger\n * @param node\n * @param cascaderContext\n */\nexport function expendClickEffect(\n propsTrigger: TdCascaderProps['trigger'],\n trigger: TdCascaderProps['trigger'],\n node: TreeNode,\n cascaderContext: CascaderContextType,\n) {\n const { checkStrictly, multiple, treeStore, setVisible, setValue, setTreeNodes, setExpend, value, max, valueType } =\n cascaderContext;\n\n const isDisabled = node.disabled || (multiple && (value as TreeNodeValue[]).length >= max && max !== 0);\n\n if (isDisabled) return;\n // 点击展开节点,设置展开状态\n if (propsTrigger === trigger && !node.isLeaf()) {\n const expanded = node.setExpanded(true);\n treeStore.refreshNodes();\n treeStore.replaceExpanded(expanded);\n const nodes = treeStore.getNodes().filter((node: TreeNode) => node.visible);\n setTreeNodes(nodes);\n\n // 多选条件下手动维护expend\n if (multiple) {\n setExpend(expanded);\n }\n }\n\n if (!multiple && (node.isLeaf() || checkStrictly) && trigger === 'click') {\n treeStore.resetChecked();\n const checked = node.setChecked(!node.checked);\n const [value] = checked;\n\n // 非受控状态下更新状态\n setValue(valueType === 'single' ? value : node.getPath().map((item) => item.value), 'check', node.getModel());\n\n if (!checkStrictly) {\n setVisible(false, {});\n }\n }\n}\n\n/**\n * 多选状态下选中状态数据变化的副作用\n * @param node\n * @param cascaderContext\n * @returns\n */\nexport function valueChangeEffect(node: TreeNode, cascaderContext: CascaderContextType) {\n const { disabled, max, inputVal, multiple, setVisible, setValue, treeNodes, treeStore, valueType } = cascaderContext;\n\n if (!node || disabled || node.disabled) {\n return;\n }\n const checked = node.setChecked(!node.isChecked());\n\n if (isNumber(max) && max < 0) {\n console.warn('TDesign Warn:', 'max should > 0');\n }\n\n if (checked.length > max && isNumber(max) && max > 0) {\n return;\n }\n\n if (checked.length === 0) {\n const expanded = treeStore.getExpanded();\n setTimeout(() => {\n treeStore.replaceExpanded(expanded);\n treeStore.refreshNodes();\n }, 0);\n }\n\n if (!multiple) {\n setVisible(false, {});\n }\n\n const isSelectAll = treeNodes.every((item) => checked.indexOf(item.value) > -1);\n\n if (inputVal && isSelectAll) {\n setVisible(false, {});\n }\n\n // 处理不同数据类型\n const resValue =\n valueType === 'single'\n ? checked\n : checked.map((val) =>\n treeStore\n .getNode(val)\n .getPath()\n .map((item) => item.value),\n );\n\n setValue(resValue, 'check', node.getModel());\n}\n\n/**\n * closeIcon点击副作用\n * @param cascaderContext\n */\nexport function closeIconClickEffect(cascaderContext: CascaderContextType) {\n const { setVisible, multiple, setExpend, setValue } = cascaderContext;\n\n setVisible(false, {});\n\n // 手动设置的展开需要去除\n if (multiple) {\n setExpend([]);\n }\n\n setValue(multiple ? [] : '', 'clear');\n}\n\n/**\n * tag 关闭按钮点击副作用\n * @param cascaderContext\n */\nexport function handleRemoveTagEffect(\n cascaderContext: CascaderContextType,\n index: number,\n onRemove: TdCascaderProps['onRemove'],\n) {\n const { disabled, setValue, value, valueType, treeStore } = cascaderContext;\n\n if (disabled) return;\n const newValue = cloneDeep(value) as [];\n const res = newValue.splice(index, 1);\n const node = treeStore.getNodes(res[0])[0];\n\n setValue(newValue, 'uncheck', node.getModel());\n\n const checked = node.setChecked(!node.isChecked());\n // 处理不同数据类型\n const resValue =\n valueType === 'single'\n ? checked\n : checked.map((val) =>\n treeStore\n .getNode(val)\n .getPath()\n .map((item) => item.value),\n );\n\n setValue(resValue, 'uncheck', node.getModel());\n if (isFunction(onRemove)) {\n onRemove({ value: checked, node: node as any });\n }\n}\n\n/**\n * input和treeStore变化的副作用\n * @param inputVal\n * @param treeStore\n * @param setTreeNodes\n * @returns\n */\nexport const treeNodesEffect = (\n inputVal: CascaderContextType['inputVal'],\n treeStore: CascaderContextType['treeStore'],\n setTreeNodes: CascaderContextType['setTreeNodes'],\n filter: CascaderContextType['filter'],\n) => {\n if (!treeStore) return;\n let nodes = [];\n if (inputVal) {\n const filterMethods = (node: TreeNode) => {\n if (!node.isLeaf()) return;\n if (isFunction(filter)) {\n return filter(`${inputVal}`, node as TreeNodeModel & TreeNode);\n }\n const fullPathLabel = getFullPathLabel(node, '');\n return fullPathLabel.indexOf(`${inputVal}`) > -1;\n };\n\n nodes = treeStore.nodes.filter(filterMethods);\n } else {\n nodes = treeStore.getNodes().filter((node: TreeNode) => node.visible);\n }\n setTreeNodes(nodes);\n};\n\n/**\n * 初始化展开阶段与展开状态副作用\n * @param treeStore\n * @param treeValue\n * @param expend\n */\nexport const treeStoreExpendEffect = (\n treeStore: CascaderContextType['treeStore'],\n value: CascaderContextType['value'],\n expend: TreeNodeValue[],\n) => {\n const treeValue = getTreeValue(value);\n\n if (!treeStore) return;\n // init expanded, 无expend状态时设置\n if (isArray(treeValue) && expend.length === 0) {\n const expandedMap = new Map();\n const [val] = treeValue;\n if (val) {\n expandedMap.set(val, true);\n const node = treeStore.getNode(val);\n if (!node) {\n treeStore.refreshNodes();\n return;\n }\n node.getParents().forEach((tn: TreeNode) => {\n expandedMap.set(tn.value, true);\n });\n const expandedArr = Array.from(expandedMap.keys());\n treeStore.replaceExpanded(expandedArr);\n } else {\n treeStore.resetExpanded();\n }\n }\n // 本地维护 expend,更加可控,不需要依赖于 tree 的状态\n if (treeStore.getExpanded() && expend.length) {\n treeStore.replaceExpanded(expend);\n }\n treeStore.refreshNodes();\n};\n"],"names":["treeStore","value","setValue","setVisible","console","isNumber","setTimeout","cloneDeep","isFunction","onRemove","node","val","expandedMap"],"mappings":"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"}