{"version":3,"file":"tree.mjs","sources":["../../../../../../packages/components/tree-select/src/tree.ts"],"sourcesContent":["import { computed, nextTick, toRefs, watch } from 'vue'\nimport { isEqual, pick } from 'lodash-unified'\nimport { UPDATE_MODEL_EVENT } from '@bigin/constants'\nimport { isFunction } from '@bigin/utils'\nimport BTree from '@bigin/components/tree'\nimport TreeSelectOption from './tree-select-option'\nimport { isValidArray, isValidValue, toValidArray, treeFind } from './utils'\nimport type { Ref } from 'vue'\nimport type BSelect from '@bigin/components/select'\nimport type Node from '@bigin/components/tree/src/model/node'\nimport type { TreeNodeData } from '@bigin/components/tree/src/tree.type'\n\nexport const useTree = (\n  props,\n  { attrs, slots, emit },\n  {\n    select,\n    tree,\n    key,\n  }: {\n    select: Ref<InstanceType<typeof BSelect> | undefined>\n    tree: Ref<InstanceType<typeof BTree> | undefined>\n    key: Ref<string>\n  }\n) => {\n  watch(\n    () => props.modelValue,\n    () => {\n      if (props.showCheckbox) {\n        nextTick(() => {\n          const treeInstance = tree.value\n          if (\n            treeInstance &&\n            !isEqual(\n              treeInstance.getCheckedKeys(),\n              toValidArray(props.modelValue)\n            )\n          ) {\n            treeInstance.setCheckedKeys(toValidArray(props.modelValue))\n          }\n        })\n      }\n    },\n    {\n      immediate: true,\n      deep: true,\n    }\n  )\n\n  const propsMap = computed(() => ({\n    value: key.value,\n    ...props.props,\n  }))\n\n  const getNodeValByProp = (\n    prop: 'value' | 'label' | 'children' | 'disabled' | 'isLeaf',\n    data: TreeNodeData\n  ) => {\n    const propVal = propsMap.value[prop]\n    if (isFunction(propVal)) {\n      return propVal(\n        data,\n        tree.value?.getNode(getNodeValByProp('value', data)) as Node\n      )\n    } else {\n      return data[propVal as string]\n    }\n  }\n\n  const defaultExpandedParentKeys = toValidArray(props.modelValue)\n    .map((value) => {\n      return treeFind(\n        props.data || [],\n        (data) => getNodeValByProp('value', data) === value,\n        (data) => getNodeValByProp('children', data),\n        (data, index, array, parent) =>\n          parent && getNodeValByProp('value', parent)\n      )\n    })\n    .filter((item) => isValidValue(item))\n\n  return {\n    ...pick(toRefs(props), Object.keys(BTree.props)),\n    ...attrs,\n    nodeKey: key,\n\n    // only expand on click node when the `check-strictly` is false\n    expandOnClickNode: computed(() => {\n      return !props.checkStrictly && props.expandOnClickNode\n    }),\n\n    // show current selected node only first time,\n    // fix the problem of expanding multiple nodes when checking multiple nodes\n    defaultExpandedKeys: computed(() => {\n      return props.defaultExpandedKeys\n        ? props.defaultExpandedKeys.concat(defaultExpandedParentKeys)\n        : defaultExpandedParentKeys\n    }),\n\n    renderContent: (h, { node, data, store }) => {\n      return h(\n        TreeSelectOption,\n        {\n          value: getNodeValByProp('value', data),\n          label: getNodeValByProp('label', data),\n          disabled: getNodeValByProp('disabled', data),\n        },\n        props.renderContent\n          ? () => props.renderContent(h, { node, data, store })\n          : slots.default\n          ? () => slots.default({ node, data, store })\n          : undefined\n      )\n    },\n    filterNodeMethod: (value, data, node) => {\n      if (props.filterNodeMethod)\n        return props.filterNodeMethod(value, data, node)\n      if (!value) return true\n      return getNodeValByProp('label', data)?.includes(value)\n    },\n    onNodeClick: (data, node, e) => {\n      attrs.onNodeClick?.(data, node, e)\n\n      // `onCheck` is trigger when `checkOnClickNode`\n      if (props.showCheckbox && props.checkOnClickNode) return\n\n      // now `checkOnClickNode` is false, only no checkbox and `checkStrictly` or `isLeaf`\n      if (!props.showCheckbox && (props.checkStrictly || node.isLeaf)) {\n        if (!getNodeValByProp('disabled', data)) {\n          const option = select.value?.options.get(\n            getNodeValByProp('value', data)\n          )\n          select.value?.handleOptionSelect(option, true)\n        }\n      } else if (props.expandOnClickNode) {\n        e.proxy.handleExpandIconClick()\n      }\n    },\n    onCheck: (data, params) => {\n      attrs.onCheck?.(data, params)\n\n      const dataValue = getNodeValByProp('value', data)\n      if (props.checkStrictly) {\n        emit(\n          UPDATE_MODEL_EVENT,\n          // Checking for changes may come from `check-on-node-click`\n          props.multiple\n            ? params.checkedKeys\n            : params.checkedKeys.includes(dataValue)\n            ? dataValue\n            : undefined\n        )\n      }\n      // only can select leaf node\n      else {\n        if (props.multiple) {\n          emit(\n            UPDATE_MODEL_EVENT,\n            (tree.value as InstanceType<typeof BTree>).getCheckedKeys(true)\n          )\n        } else {\n          // select first leaf node when check parent\n          const firstLeaf = treeFind(\n            [data],\n            (data) =>\n              !isValidArray(getNodeValByProp('children', data)) &&\n              !getNodeValByProp('disabled', data),\n            (data) => getNodeValByProp('children', data)\n          )\n          const firstLeafKey = firstLeaf\n            ? getNodeValByProp('value', firstLeaf)\n            : undefined\n\n          // unselect when any child checked\n          const hasCheckedChild =\n            isValidValue(props.modelValue) &&\n            !!treeFind(\n              [data],\n              (data) => getNodeValByProp('value', data) === props.modelValue,\n              (data) => getNodeValByProp('children', data)\n            )\n\n          emit(\n            UPDATE_MODEL_EVENT,\n            firstLeafKey === props.modelValue || hasCheckedChild\n              ? undefined\n              : firstLeafKey\n          )\n        }\n      }\n    },\n  }\n}\n"],"names":["BTree","TreeSelectOption","data"],"mappings":"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"}