UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 13.1 kB
{"version":3,"file":"hooks.mjs","sources":["../../node_modules/lodash/isEqual.js","../../src/cascader/hooks.ts"],"sourcesContent":["var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","import { Ref, reactive, computed, toRefs, watch, nextTick } from 'vue';\nimport isEqual from 'lodash/isEqual';\nimport isFunction from 'lodash/isFunction';\nimport isString from 'lodash/isString';\n\nimport TreeStore from '../_common/js/tree/tree-store';\nimport { useFormDisabled } from '../form/hooks';\nimport useVModel from '../hooks/useVModel';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport { getTreeValue, getCascaderValue, isEmptyValues, isValueInvalid } from './core/helper';\nimport { treeNodesEffect, treeStoreExpendEffect } from './core/effect';\n\nimport {\n TreeNode,\n TreeNodeValue,\n TdCascaderProps,\n TreeNodeModel,\n CascaderChangeSource,\n CascaderValue,\n} from './interface';\n\n// 全局状态\nexport const useContext = (\n props: TdCascaderProps,\n setInnerValue: TdCascaderProps['onChange'],\n innerPopupVisible: Ref<TdCascaderProps['popupVisible']>,\n setPopupVisible: TdCascaderProps['onPopupVisibleChange'],\n) => {\n const statusContext = reactive({\n treeStore: null,\n inputVal: null,\n scopeVal: undefined,\n treeNodes: [],\n expend: [],\n });\n\n return {\n statusContext,\n cascaderContext: computed(() => {\n const {\n size,\n checkStrictly,\n lazy,\n multiple,\n filterable,\n clearable,\n checkProps,\n max,\n disabled,\n showAllLevels,\n minCollapsedNum,\n valueType,\n } = props;\n return {\n value: statusContext.scopeVal,\n size,\n checkStrictly,\n lazy,\n multiple,\n filterable,\n clearable,\n checkProps,\n max,\n disabled,\n showAllLevels,\n minCollapsedNum,\n valueType,\n visible: innerPopupVisible.value,\n ...statusContext,\n setTreeNodes: (nodes: TreeNode[]) => {\n statusContext.treeNodes = nodes;\n },\n setValue: (val: CascaderValue, source: CascaderChangeSource, node?: TreeNodeModel) => {\n if (isEqual(val, statusContext.scopeVal)) return;\n setInnerValue(val, { source, node });\n },\n setVisible: setPopupVisible,\n setInputVal: (val: string) => {\n statusContext.inputVal = val;\n },\n setExpend: (val: TreeNodeValue[]) => {\n statusContext.expend = val;\n },\n };\n }),\n };\n};\n\n// 内聚组件核心的副作用与状态处理\nexport const useCascaderContext = (props: TdCascaderProps) => {\n const disabled = useFormDisabled();\n const { value, modelValue, popupVisible } = toRefs(props);\n const [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const [innerPopupVisible, setPopupVisible] = useDefaultValue(\n popupVisible,\n false,\n props.onPopupVisibleChange,\n 'popupVisible',\n );\n const { cascaderContext, statusContext } = useContext(props, setInnerValue, innerPopupVisible, setPopupVisible);\n\n const isFilterable = computed(() => {\n return Boolean(props.filterable || isFunction(props.filter));\n });\n\n // 更新treeNodes\n const updatedTreeNodes = () => {\n const { inputVal, treeStore, setTreeNodes } = cascaderContext.value;\n treeNodesEffect(inputVal, treeStore, setTreeNodes, props.filter);\n };\n\n // 更新节点展开状态\n const updateExpend = () => {\n const { value, treeStore } = cascaderContext.value;\n const { expend } = statusContext;\n treeStoreExpendEffect(treeStore, value, expend);\n treeStore.replaceChecked(getTreeValue(value));\n };\n\n watch(\n () => props.options,\n () => {\n const { options, keys = {}, checkStrictly, lazy, load, valueMode } = props;\n const { treeStore } = statusContext;\n\n if (!options.length && !treeStore) return;\n\n if (!treeStore) {\n const store = new TreeStore({\n keys: {\n ...keys,\n children: isString(keys.children) ? keys.children : 'children',\n },\n checkable: true,\n expandMutex: true,\n expandParent: true,\n lazy,\n load,\n valueMode,\n checkStrictly,\n onLoad: () => {\n nextTick(() => {\n store.refreshNodes();\n updatedTreeNodes();\n });\n },\n });\n store.append(options);\n statusContext.treeStore = store;\n } else {\n treeStore.reload(options);\n treeStore.refreshNodes();\n }\n updateExpend();\n updatedTreeNodes();\n },\n { immediate: true, deep: true },\n );\n\n // tree插件配置变化\n watch(\n () => {\n const { checkStrictly, lazy, load, valueMode } = props;\n return JSON.stringify({\n valueMode,\n checkStrictly,\n lazy,\n load,\n });\n },\n () => {\n const { treeStore } = statusContext;\n if (!treeStore) return;\n const { checkStrictly, lazy, load, valueMode } = props;\n const treeProps = {\n checkStrictly,\n disabled,\n load,\n lazy,\n valueMode,\n };\n treeStore.setConfig(treeProps);\n },\n { immediate: true },\n );\n\n watch(\n innerValue,\n () => {\n // 初始化判断 value 逻辑\n const { setValue, multiple, valueType } = cascaderContext.value;\n\n if (isValueInvalid(innerValue.value, cascaderContext.value)) {\n setValue(multiple ? [] : '', 'invalid-value');\n } else {\n statusContext.scopeVal = multiple ? [] : '';\n }\n\n if (!isEmptyValues(innerValue)) {\n statusContext.scopeVal = getCascaderValue(innerValue.value, valueType, multiple);\n }\n\n if (!statusContext.treeStore) return;\n updateExpend();\n updatedTreeNodes();\n },\n { immediate: true },\n );\n\n watch(\n () => innerPopupVisible.value && isFilterable.value,\n (visible) => {\n const { setInputVal } = cascaderContext.value;\n if (visible) {\n setInputVal('');\n }\n },\n );\n\n watch(\n () => statusContext.inputVal,\n () => {\n updatedTreeNodes();\n },\n );\n\n return {\n cascaderContext,\n isFilterable,\n };\n};\n"],"names":["baseIsEqual","require$$0","isEqual","value","other","isEqual_1","treeStore","inputVal","treeNodes","expend","statusContext","size","checkStrictly","lazy","multiple","filterable","clearable","checkProps","max","disabled","showAllLevels","minCollapsedNum","valueType","setTreeNodes","source","node","setVisible","setInputVal","setExpend","innerValue","setInnerValue","innerPopupVisible","setPopupVisible","isFunction","treeStoreExpendEffect","watch","keys","checkable","expandMutex","expandParent","load","valueMode","nextTick","updatedTreeNodes","store","updateExpend","immediate","deep","cascaderContext","isFilterable"],"mappings":"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"}