{"version":3,"file":"use-combotree.mjs","sources":["../../../../../../packages/components/combo-tree/src/use-combotree.ts"],"sourcesContent":["import { ref, computed, watch, toRaw, nextTick, unref, onMounted, onBeforeUnmount } from 'vue'\nimport { map, union, castArray, isEmpty } from 'lodash'\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\nimport { getNodesByKey } from './util'\nimport { SgTooltip } from '@sgui-plus/components/tooltip'\nimport { SgTree } from '@sgui-plus/components/tree'\nimport { SgInput } from '@sgui-plus/components/input'\nimport SgMultipleTags from '@sgui-plus/components/select/src/multiple-tags.vue'\nimport { useSize } from '@sgui-plus/hooks/use-common-props'\nimport { isNumber } from '@sgui-plus/utils/util'\nimport { addResizeListener, removeResizeListener } from '@sgui-plus/utils/resize-event'\nimport { useFormItem } from '@sgui-plus/hooks/use-form-item'\n\nexport const useComboTree = (props, emits?) => {\n  // Ref\n  const combotreeRef = ref<HTMLElement | null>(null)\n  const tagsRef = ref<HTMLInputElement | null>(null)\n  const multipleTagsRef = ref<InstanceType<typeof SgMultipleTags> | null>(null)\n  const inputRef = ref<HTMLInputElement | null>(null)\n  const reference = ref<InstanceType<typeof SgInput> | null>(null)\n  const treeRef = ref<InstanceType<typeof SgTree> | null>(null)\n  const tooltipRef = ref<InstanceType<typeof SgTooltip> | null>(null)\n\n  // Data\n  const visible = ref(false)\n  const inputHovering = ref(false)\n  const selected = ref<any>([])\n  const selectedLabel = ref('')\n  const inputLength = ref(20)\n  const inputWidth = ref(0)\n  const initialInputHeight = ref(0)\n\n  // Inject\n  const { form } = useFormItem()\n\n  const size = useSize()\n\n  // Computed\n  const treeNodekey = computed(() => props.nodeKey || props.props.value || 'value')\n\n  const tagsStyle = computed(() => ({\n    maxWidth: `${unref(inputWidth) - 32}px`,\n    width: '100%',\n    height: props.fixedHeight ? '28px' : '',\n    overflow: props.fixedHeight ? 'auto' : ''\n  }))\n\n  const dropMenuWidth = computed(() => {\n    const width = isNumber(props.dropWidth) ? `${props.dropWidth}px` : props.dropWidth\n    return  width || inputWidth.value + 'px'\n  })\n\n  const dropMenuHeight = computed(() =>\n    isNumber(props.dropHeight) ? `${props.dropHeight}px` : props.dropHeight\n  )\n\n  const dropMenuVisible = computed({\n    get() {\n      return visible.value && isEditable.value\n    },\n    set(val: boolean) {\n      visible.value = val\n    }\n  })\n\n  const isDisabled = computed(() => props.disabled || form?.disabled)\n\n  const isEditable = computed(() => !isDisabled.value && !props.readonly)\n\n  const showClose = computed(() => {\n    const hasValue = props.multiple\n      ? Array.isArray(props.modelValue) && props.modelValue.length > 0\n      : props.modelValue !== undefined &&\n        props.modelValue !== null &&\n        props.modelValue !== ''\n\n    const criteria =\n      props.clearable &&\n      isEditable.value &&\n      inputHovering.value &&\n      hasValue\n\n    return criteria\n  })\n\n  // 更新value值\n  const updateValue = computed({\n    get() {\n      return props.modelValue\n    },\n    set(val) {\n      emits(UPDATE_MODEL_EVENT, val)\n    }\n  })\n\n  /**\n   * 关闭面板\n   */\n  const handleClose = () => {\n    visible.value = false\n  }\n\n  /**\n   * 打开面板\n   */\n  const handleOpen = () => {\n    visible.value = true\n  }\n\n  const handleToggle = () => {\n    if (visible.value) {\n      handleClose()\n    } else {\n      handleOpen()\n    }\n  }\n\n  /**\n   * 设置展示值\n   */\n  const setSelectedLabel = () => {\n    const modelValues = props.modelValue ? castArray(toRaw(props.modelValue)) : []\n    const treeNodes = getNodesByKey(props.data, modelValues, treeNodekey.value)\n\n    if (props.multiple) {\n      selected.value = modelValues.reduce((res, value) => {\n        const node = treeNodes.find(item => item[treeNodekey.value] === value)\n\n        if (node) {\n          res.push(toRaw(node))\n        } else if (props.allowCreate) {\n          // 格式化手动输入的内容，以便于展示\n          res.push({ [props.props.label]: value, [treeNodekey.value]: value })\n        }\n\n        return res\n      }, [])\n    } else {\n      const currentNode = toRaw(treeNodes[0])\n      selectedLabel.value = currentNode ? currentNode[props.props.label] : props.allowCreate ? props.modelValue : ''\n    }\n  }\n\n  // 删除标签\n  const deleteTag = (tag: string) => {\n    const index = selected.value.indexOf(tag)\n    if (index > -1 && isEditable.value) {\n      const value = props.modelValue.slice()\n      const deletedKeys = value.splice(index, 1)\n      setValue(value)\n      resetInputHeight()\n      treeRef.value?.setCheckedNodes(deletedKeys, false)\n      emits('onRemove', tag)\n    }\n  }\n\n  // 创建标签\n  const createTag = (value) => {\n    if (props.allowCreate) {\n      // 运行手动创建标签\n      if (props.multiple) {\n        setValue([...props.modelValue, value])\n        // 重置单选的输入内容\n        selectedLabel.value = ''\n        // 重置输入内容\n        inputRef.value!.value = ''\n      } else {\n        setValue(value)\n      }\n      treeRef.value?.setChecked(value)\n    }\n  }\n\n  // 清空选中数据\n  const clearSelected = (e) => {\n    e.stopPropagation()\n    setValue('')\n    emits('onClear')\n  }\n\n  // 重置输入框宽度\n  const resetInputWidth = () => {\n    inputWidth.value = reference.value?.$el.getBoundingClientRect().width\n  }\n\n  const resetInputState = (event) => {\n    inputLength.value = inputRef.value!.value.length * 15 + 20\n    resetInputHeight()\n  }\n\n  // 重置输入框高度\n  const resetInputHeight = () => {\n    // 多标签省略不需要调整高度\n    if ((props.collapseTags || props.ellipsisTag)) {\n      return\n    }\n\n    nextTick(() => {\n      if (!reference.value) {\n        return\n      }\n\n      const inputChildNodes = reference.value.$el.childNodes\n      const input = Array.from(inputChildNodes).filter(\n        (item) => (item as HTMLElement).tagName === 'INPUT'\n      )[0] as HTMLInputElement\n      const sizeInMap = initialInputHeight.value || 40\n      input.style.height =\n        selected.value.length === 0\n          ? `${sizeInMap}px`\n          : `${Math.max(\n              tagsRef.value\n                ? tagsRef.value.clientHeight + (tagsRef.value.clientHeight > sizeInMap ? 6 : 0)\n                : 0,\n              sizeInMap\n            )}px`\n\n      if (visible.value) {\n        tooltipRef.value?.updatePopper?.()\n      }\n    })\n  }\n\n  const handleResize = () => {\n    if (props.multiple) {\n      multipleTagsRef.value?.calculateTags(props.modelValue)\n    }\n    resetInputWidth()\n    resetInputHeight()\n    tooltipRef.value?.updatePopper?.()\n  }\n\n  const handleNodeClick = (node) => {\n    // 只选择子节点，点击父节点时进行展开\n    if (props.justChildNodes && node.isParent) {\n      treeRef.value?.expandNode(node[treeNodekey.value])\n      return\n    }\n\n    // 只选择父节点，点击自己点时不进行响应\n    if (props.justParentNodes && !node.isParent) {\n      return\n    }\n\n    if (!props.multiple) {\n      setValue(node[treeNodekey.value])\n    }\n\n    emits('onNodeClick', node)\n  }\n\n  const handleCheckChange = (node, checked) => {\n    let checkedNodes = treeRef.value?.getCheckedNodes()\n\n    // 只选择父节点\n    if (props.justParentNodes) {\n      checkedNodes = checkedNodes.filter((item) => !checkedNodes.some(o => o.tId === item.parentTId))\n    }\n\n    const modelValues = props.modelValue ? castArray(toRaw(props.modelValue)) : []\n    const retainValues = modelValues.filter(value => {\n      const node = treeRef.value?.getNode(value)\n      // 手动创建项和不显示的选中项仍需保留\n      return isEmpty(node) || node.isHidden\n    })\n\n    const checkedValues = union(map(checkedNodes, treeNodekey.value), retainValues)\n\n    setValue(checkedValues)\n    emits('onCheckChange', node, checked)\n  }\n\n  const handleFocus = () => {\n    const _input = inputRef.value || reference.value\n    if (_input) {\n      _input?.focus()\n    }\n  }\n\n  const setValue = (value) => {\n    updateValue.value = value\n    // 值更改时需更新popperpane的位置\n    tooltipRef.value?.updatePopper?.()\n  }\n\n  // 数据控制值\n  watch(\n    () => props.modelValue,\n    (val) => {\n      emits('onChange', val)\n\n      setSelectedLabel()\n      handleResize()\n      if (!props.multiple) {\n        handleClose()\n      }\n    },\n    {\n      flush: 'post',\n      deep: true\n    }\n  )\n\n  watch(\n    () => visible.value,\n    (val) => {\n      emits('onVisibleChange', val)\n    }\n  )\n\n  onMounted(() => {\n    addResizeListener(combotreeRef.value as any, handleResize)\n\n    if (reference.value && reference.value.$el) {\n      const sizeMap = {\n        large: 36,\n        default: 32,\n        small: 28,\n      }\n      const input = reference.value.input as HTMLInputElement\n      initialInputHeight.value = input.getBoundingClientRect().height || sizeMap[size.value]\n    }\n\n    setSelectedLabel()\n  })\n\n  onBeforeUnmount(() => {\n    removeResizeListener(combotreeRef.value as any, handleResize)\n  })\n\n  return {\n    combotreeRef,\n    tagsRef,\n    inputRef,\n    reference,\n    treeRef,\n    tooltipRef,\n\n    visible,\n    selected,\n    selectedLabel,\n    isDisabled,\n    isEditable,\n    tagsStyle,\n    showClose,\n    inputHovering,\n    inputLength,\n    inputWidth,\n    dropMenuVisible,\n    dropMenuWidth,\n    dropMenuHeight,\n    treeNodekey,\n    handleClose,\n    handleToggle,\n    handleNodeClick,\n    handleCheckChange,\n    handleFocus,\n    deleteTag,\n    createTag,\n    clearSelected,\n    resetInputState,\n    resetInputHeight\n  }\n}\n"],"names":[],"mappings":"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"}