{"version":3,"file":"useOption.mjs","sources":["../../../../../../packages/components/select/src/useOption.ts"],"sourcesContent":["// @ts-nocheck\nimport { computed, getCurrentInstance, inject, toRaw, unref, watch } from 'vue'\nimport { get } from 'lodash-unified'\nimport { escapeStringRegexp } from '@bigin/utils'\nimport { selectGroupKey, selectKey } from './token'\n\nimport type { Ref } from 'vue'\nimport type { QueryChangeCtx } from './token'\n\nexport function useOption(props, states) {\n  // inject\n  const select = inject(selectKey)\n  const selectGroup = inject(selectGroupKey, { disabled: false })\n\n  // computed\n  const isObject = computed(() => {\n    return (\n      Object.prototype.toString.call(props.value).toLowerCase() ===\n      '[object object]'\n    )\n  })\n\n  const itemSelected = computed(() => {\n    if (!select.props.multiple) {\n      return isEqual(props.value, select.props.modelValue)\n    } else {\n      return contains(select.props.modelValue as unknown[], props.value)\n    }\n  })\n\n  const limitReached = computed(() => {\n    if (select.props.multiple) {\n      const modelValue = (select.props.modelValue || []) as unknown[]\n      return (\n        !itemSelected.value &&\n        modelValue.length >= select.props.multipleLimit &&\n        select.props.multipleLimit > 0\n      )\n    } else {\n      return false\n    }\n  })\n\n  const currentLabel = computed(() => {\n    return props.label || (isObject.value ? '' : props.value)\n  })\n\n  const currentValue = computed(() => {\n    return props.value || props.label || ''\n  })\n\n  const isDisabled = computed(() => {\n    return props.disabled || states.groupDisabled || limitReached.value\n  })\n\n  const instance = getCurrentInstance()\n\n  const contains = (arr = [], target) => {\n    if (!isObject.value) {\n      return arr && arr.includes(target)\n    } else {\n      const valueKey = select.props.valueKey\n      return (\n        arr &&\n        arr.some((item) => {\n          return get(item, valueKey) === get(target, valueKey)\n        })\n      )\n    }\n  }\n\n  const isEqual = (a: unknown, b: unknown) => {\n    if (!isObject.value) {\n      return a === b\n    } else {\n      const { valueKey } = select.props\n      return get(a, valueKey) === get(b, valueKey)\n    }\n  }\n\n  const hoverItem = () => {\n    if (!props.disabled && !selectGroup.disabled) {\n      select.hoverIndex = select.optionsArray.indexOf(instance.proxy)\n    }\n  }\n\n  watch(\n    () => currentLabel.value,\n    () => {\n      if (!props.created && !select.props.remote) select.setSelected()\n    }\n  )\n\n  watch(\n    () => props.value,\n    (val, oldVal) => {\n      const { remote, valueKey } = select.props\n      if (!props.created && !remote) {\n        if (\n          valueKey &&\n          typeof val === 'object' &&\n          typeof oldVal === 'object' &&\n          val[valueKey] === oldVal[valueKey]\n        ) {\n          return\n        }\n        select.setSelected()\n      }\n    }\n  )\n\n  watch(\n    () => selectGroup.disabled,\n    () => {\n      states.groupDisabled = selectGroup.disabled\n    },\n    { immediate: true }\n  )\n\n  const { queryChange } = toRaw(select)\n  watch(queryChange, (changes: Ref<QueryChangeCtx>) => {\n    const { query } = unref(changes)\n\n    const regexp = new RegExp(escapeStringRegexp(query), 'i')\n    states.visible = regexp.test(currentLabel.value) || props.created\n    if (!states.visible) {\n      select.filteredOptionsCount--\n    }\n  })\n\n  return {\n    select,\n    currentLabel,\n    currentValue,\n    itemSelected,\n    isDisabled,\n    hoverItem,\n  }\n}\n"],"names":[],"mappings":"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"}