{"version":3,"file":"useOption.mjs","sources":["../../../../../../packages/components/select/src/useOption.ts"],"sourcesContent":["import { inject, computed, getCurrentInstance, watch, toRaw, unref } from 'vue'\r\nimport { getValueByPath, escapeRegexpString } from '@sgui-plus/utils/util'\r\nimport { SelectContextKey, SelectGroupContextKey, SelectContext } from './token'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { QueryChangeCtx } from './token'\r\n\r\nexport function useOption(props, states) {\r\n  // inject\r\n  const select = inject(SelectContextKey) as SelectContext\r\n  const selectGroup = inject(SelectGroupContextKey, { disabled: false })\r\n\r\n  // computed\r\n  const isObject = computed(() => {\r\n    return (\r\n      Object.prototype.toString.call(props.value).toLowerCase() ===\r\n      '[object object]'\r\n    )\r\n  })\r\n\r\n  const itemSelected = computed(() => {\r\n    if (!select.props.multiple) {\r\n      return isEqual(props.value, select.props.modelValue)\r\n    } else {\r\n      return contains(select.props.modelValue as never[], props.value)\r\n    }\r\n  })\r\n\r\n  const limitReached = computed(() => {\r\n    if (select.props.multiple) {\r\n      const modelValue = (select.props.modelValue || []) as unknown[]\r\n      return (\r\n        !itemSelected.value &&\r\n        modelValue.length >= select.props.multipleLimit &&\r\n        select.props.multipleLimit > 0\r\n      )\r\n    } else {\r\n      return false\r\n    }\r\n  })\r\n  const highlightCurrentLabel = computed(() => {\r\n    // @ts-ignore\r\n    return props.label.replace(new RegExp(select.queryChange.query, 'g'),`<font style='color:var(--sg-color-primary)'>${select.queryChange.query}</font>`)\r\n  })\r\n  const currentLabel = computed(() => {\r\n    return props.label || (isObject.value ? '' : props.value)\r\n  })\r\n\r\n  const currentValue = computed(() => {\r\n    return props.value || props.label || ''\r\n  })\r\n\r\n  const isDisabled = computed(() => {\r\n    return props.disabled || states.groupDisabled || limitReached.value\r\n  })\r\n\r\n  const instance = getCurrentInstance()\r\n\r\n  const contains = (arr = [], target) => {\r\n    if (!isObject.value) {\r\n      return arr && arr.indexOf(target as never) > -1\r\n    } else {\r\n      const valueKey = select.props.valueKey\r\n      return (\r\n        arr &&\r\n        arr.some((item) => {\r\n          return (\r\n            getValueByPath(item, valueKey) === getValueByPath(target, valueKey)\r\n          )\r\n        })\r\n      )\r\n    }\r\n  }\r\n\r\n  const isEqual = (a: unknown, b: unknown) => {\r\n    if (!isObject.value) {\r\n      return a === b\r\n    } else {\r\n      const { valueKey } = select.props\r\n      return getValueByPath(a, valueKey) === getValueByPath(b, valueKey)\r\n    }\r\n  }\r\n\r\n  const hoverItem = () => {\r\n    if (!props.disabled && !selectGroup.disabled && instance) {\r\n      select.hoverIndex = select.optionsArray.indexOf(instance.proxy)\r\n    }\r\n  }\r\n\r\n  watch(\r\n    () => currentLabel.value,\r\n    () => {\r\n      if (!props.isCreated && !select.props.remote) select.setSelected()\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => props.value,\r\n    (val, oldVal) => {\r\n      const { remote, valueKey } = select.props\r\n      if (!props.isCreated && !remote) {\r\n        if (\r\n          valueKey &&\r\n          typeof val === 'object' &&\r\n          typeof oldVal === 'object' &&\r\n          val[valueKey] === oldVal[valueKey]\r\n        ) {\r\n          return\r\n        }\r\n        select.setSelected()\r\n      }\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => selectGroup.disabled,\r\n    () => {\r\n      states.groupDisabled = selectGroup.disabled\r\n    },\r\n    { immediate: true }\r\n  )\r\n\r\n  const { queryChange } = toRaw(select)\r\n  watch(queryChange, (changes: Ref<QueryChangeCtx>) => {\r\n    const { query } = unref(changes)\r\n    const regexp = new RegExp(escapeRegexpString(query), 'i')\r\n    states.visible = regexp.test(currentLabel.value) || props.isCreated\r\n    if (!states.visible) {\r\n      select.filteredOptionsCount--\r\n    }\r\n  })\r\n\r\n  return {\r\n    highlightCurrentLabel,\r\n    select,\r\n    currentLabel,\r\n    currentValue,\r\n    itemSelected,\r\n    isDisabled,\r\n    hoverItem,\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}