{"version":3,"file":"select.vue2.mjs","sources":["../../../../../../packages/components/select/src/select.vue"],"sourcesContent":["<script lang=\"ts\">\n  import {\n    computed,\n    defineComponent,\n    ref,\n    provide,\n    reactive,\n    watch,\n    nextTick,\n    onUnmounted\n  } from 'vue'\n  import type { VNode, ComponentPublicInstance } from 'vue'\n  import { getComponentNamespace, getNamespace } from '../../../utils/global-config'\n  import Trigger from '../../trigger/src/trigger'\n  import { BnIconLoading, BnIconEmpty } from '../../icon'\n  import SelectTrigger from '../../common/select-trigger.vue'\n  import { Scrollbar } from '../../scrollbar'\n  import type { ScrollbarInstance } from '../../scrollbar'\n\n  // 表单\n  import { useFormItem } from '../../form/src/hooks/use-form-item'\n\n  import { NOOP } from '../../../shared/utils'\n  import { isArray, isComponentInstance, isFunction } from '../../../utils/is'\n  import { debounce } from '../../../utils/throttle-debounce'\n  import { Empty } from '../../empty'\n  import SelectMenu from './menu.vue'\n  import { selectInjectKey } from './context'\n  import { selectProps } from './props'\n\n  import OptionsExtract from './options-extract'\n  import OptionsRender from './options-render'\n\n  import type { OptVmProxy } from './types'\n\n  export default defineComponent({\n    name: getComponentNamespace('Select'),\n    components: {\n      Trigger,\n      SelectMenu,\n      Scrollbar,\n      BnIconLoading,\n      SelectTrigger,\n      OptionsExtract,\n      OptionsRender,\n      Empty,\n      BnIconEmpty\n    },\n    props: selectProps,\n    emits: ['update:modelValue', 'change'],\n    setup(props, { emit }) {\n      const ns = getNamespace('select')\n      // TODO 从表单合并 disabled 属性\n      const mergeDisabled = computed(() => props.disabled)\n      const mergeSize = computed(() => props.size)\n\n      const cls = computed(() => [ns, mergeDisabled.value && 'is-disabled'])\n\n      const optionsVns = ref<VNode[]>([])\n      const optionValues = computed(() => optionsVns.value.map((opt) => opt.props?.value))\n      const popupVisible = ref(false)\n      const selectedLabelOnlySingle = ref('')\n      const multipleTags = ref<{ label: string; key: string }[]>([])\n      const currentSelected = ref<OptVmProxy | OptVmProxy[]>(props.multiple ? [] : ({} as any))\n      const cachedOptionsVmProxies = ref(new Map())\n      const selectTriggerRef = ref()\n      const scrollbarRef = ref<ScrollbarInstance>()\n      const popupRef = ref()\n\n      // 缓存的cachedOptionsVmProxies  Array\n      const cachedOptionsVmProxiesToArray = computed(() =>\n        Array.from<OptVmProxy>(cachedOptionsVmProxies.value.values())\n      )\n\n      const isEmpty = computed(() => {\n        const renderOptions = cachedOptionsVmProxiesToArray.value.filter((opt) =>\n          optionValues.value.includes(opt.value)\n        )\n        return !renderOptions.some((s) => s.visible)\n      })\n\n      const getOptionByValue = (value: any): OptVmProxy | undefined => {\n        const option = cachedOptionsVmProxiesToArray.value.find((opt) => opt.currentValue === value)\n        return option\n      }\n      const handleClear = () => {\n        const value = props.multiple ? [] : ''\n        emit('update:modelValue', value)\n        emit('change', value)\n\n        if (!props.multiple && props.remote) {\n          selectedLabelOnlySingle.value = ''\n        }\n\n        if (props.multiple && props.remote) {\n          multipleTags.value = []\n        }\n\n        handleClosePopup()\n      }\n\n      const emitSelectValue = (selected: OptVmProxy | OptVmProxy[]) => {\n        if (props.multiple) {\n          const values = (selected as OptVmProxy[]).map((opt) => opt.currentValue)\n          emit('update:modelValue', values)\n          emit('change', values)\n          return\n        }\n        const value = (selected as OptVmProxy).currentValue\n        emit('update:modelValue', value)\n        emit('change', value)\n        handleClosePopup()\n      }\n\n      const handleClosePopup = () => {\n        popupVisible.value = false\n      }\n\n      const handleShowPopup = () => {\n        popupVisible.value = true\n      }\n\n      const optionItemCreate = (optVmProxy: any) => {\n        cachedOptionsVmProxies.value.set(optVmProxy.value, optVmProxy)\n      }\n\n      const optionItemDestroy = (optVmProxy: OptVmProxy) => {\n        // 当前为远程多选搜索模式时，缓存的optVmProxy不要清除，为了后面状态同步。\n        if (props.remote && props.multiple) return\n        const key = optVmProxy.currentValue\n        if (cachedOptionsVmProxies.value.get(key)) {\n          cachedOptionsVmProxies.value.delete(key)\n        }\n      }\n\n      const optionItemSelect = (optVmProxy: OptVmProxy) => {\n        if (!props.multiple) {\n          if (currentSelected.value !== optVmProxy) {\n            emitSelectValue(optVmProxy)\n            if (props.remote) {\n              selectedLabelOnlySingle.value = optVmProxy.currentLabel ?? ''\n            }\n          } else {\n            handleClosePopup()\n            if (props.filterable) {\n              selectTriggerRef.value?.resetQuery()\n            }\n          }\n          return\n        }\n        const origin = (currentSelected.value as OptVmProxy[]).slice()\n        const index = origin.findIndex((opt) => opt === optVmProxy)\n        if (index > -1) {\n          // 删除\n          origin.splice(index, 1)\n        } else {\n          // 新增\n          origin.push(optVmProxy)\n        }\n        emitSelectValue(origin)\n      }\n\n      const optionItemHoverChange = (optProxy: OptVmProxy) => {\n        cachedOptionsVmProxiesToArray.value.forEach((opt) => {\n          opt.isHover = opt === optProxy\n        })\n      }\n      const getMultipleTags = (selected: OptVmProxy[]) => {\n        return selected.map((opt) => {\n          opt.isSelected = true\n          return {\n            key: opt.currentValue as string,\n            label: opt.currentLabel\n          }\n        })\n      }\n\n      // 维护内部当前选中的item状态\n      watch(\n        () => currentSelected.value,\n        (selected: OptVmProxy | OptVmProxy[]) => {\n          cachedOptionsVmProxiesToArray.value.forEach((opt) => {\n            opt.isSelected = false\n          })\n          if (props.multiple && isArray(selected)) {\n            multipleTags.value = getMultipleTags(selected as OptVmProxy[])\n          } else {\n            const _selected = selected as OptVmProxy\n            if (isComponentInstance(_selected)) {\n              _selected.isSelected = true\n            }\n            if (!props.remote) {\n              // 重置选中的label\n              selectedLabelOnlySingle.value = _selected.currentLabel ?? ''\n            }\n          }\n        }\n      )\n      // 多选 删除标签\n      const handleTagClose = (tag: { label: string; key: string }) => {\n        const key = tag.key\n        const origin = (currentSelected.value as OptVmProxy[]).slice()\n        const index = origin.findIndex((opt) => opt.currentValue === key)\n        if (index > -1) {\n          origin.splice(index, 1)\n        }\n        emitSelectValue(origin)\n      }\n\n      // 当插槽发生变化时，重新更新\n      const onUpdateOptionsVns = (vns: VNode[]) => {\n        optionsVns.value = vns\n      }\n\n      const whetherResetOptionVns = () => {\n        if (props.remote) {\n          onUpdateOptionsVns([])\n        }\n      }\n\n      const setSelected = async () => {\n        await nextTick()\n        if (!props.multiple) {\n          const option = getOptionByValue(props.modelValue)\n          if (!option) {\n            currentSelected.value = {} as any\n            return\n          }\n          currentSelected.value = option\n          return\n        }\n        const modelValue = isArray(props.modelValue) ? props.modelValue : [props.modelValue]\n        const optVmProxies = modelValue.map((value) => getOptionByValue(value))\n        currentSelected.value = (optVmProxies as OptVmProxy[]).filter(Boolean)\n      }\n\n      // 搜索过滤\n      const handleFilter = debounce(\n        (query: string) => {\n          if (props.remote) {\n            onUpdateOptionsVns([])\n            nextTick(() => {\n              if (isFunction(props.remoteMethod)) {\n                props.remoteMethod(query)\n              }\n            })\n          } else {\n            cachedOptionsVmProxiesToArray.value.forEach((optVmProxy) => {\n              let visible = false\n              if (!query) {\n                visible = true\n              } else if (isFunction(props.filterMethod)) {\n                visible = props.filterMethod(optVmProxy, query)\n              } else {\n                visible = new RegExp(`${query}`, 'i').test(optVmProxy.currentLabel)\n              }\n              optVmProxy.visible = visible\n            })\n          }\n        },\n        props.remote ? props.filterDebounce : 0,\n        true\n      )\n\n      // 让选中的optionItem出现在可视区 多选的话就以第一个为准\n      const updateOptionItemToVisible = () => {\n        const _currentSelected = currentSelected.value as unknown as ComponentPublicInstance\n        const el = (\n          isArray(_currentSelected) ? _currentSelected[0]?.$el : _currentSelected.$el\n        ) as HTMLElement\n        if (!el) return\n        const visibleHeight = scrollbarRef.value?.containerRef?.getBoundingClientRect()\n          .height as number\n        const offsetTop = el.offsetTop\n        const elHeight = el.getBoundingClientRect().height\n        const top = offsetTop + elHeight - visibleHeight\n        if (top > 0) {\n          scrollbarRef.value?.scrollTop(top)\n        }\n      }\n\n      // 表单验证\n      const { formItem } = useFormItem()\n\n      // option插槽数据变化\n      watch(\n        () => optionsVns.value,\n        (vns) => {\n          if (vns.length === 0) return\n          setSelected()\n        }\n      )\n\n      // 数据发生变化,进行表单验证\n      watch(\n        () => props.modelValue,\n        () => {\n          setSelected()\n          // 触发表单验证\n          if (props.validateEvent) {\n            formItem?.validate('change').catch(NOOP)\n          }\n        },\n        {\n          deep: true\n        }\n      )\n\n      onUnmounted(() => {\n        cachedOptionsVmProxies.value.clear()\n      })\n\n      provide(\n        selectInjectKey,\n        reactive({\n          multiple: props.multiple,\n          popupClass: props.popupClass,\n          compact: props.compact,\n          optionItemCreate,\n          optionItemDestroy,\n          optionItemSelect,\n          optionItemHoverChange\n        })\n      )\n\n      return {\n        ns,\n        cls,\n        popupVisible,\n        isEmpty,\n        onUpdateOptionsVns,\n        mergeDisabled,\n        mergeSize,\n        handleClosePopup,\n        scrollbarRef,\n        popupRef,\n        handleClear,\n        optionsVns,\n        selectedLabelOnlySingle,\n        multipleTags,\n        handleTagClose,\n        handleFilter,\n        updateOptionItemToVisible,\n        handleShowPopup,\n        whetherResetOptionVns,\n        selectTriggerRef\n      }\n    }\n  })\n</script>\n\n<template>\n  <div :class=\"cls\">\n    <Trigger\n      v-model:popup-visible=\"popupVisible\"\n      position=\"bl\"\n      trigger=\"click\"\n      :unmount-on-close=\"false\"\n      animation-name=\"bn-slide-dynamic-origin\"\n      auto-fit-popup-min-width\n      :popup-offset=\"8\"\n      :disabled=\"mergeDisabled\"\n      @show=\"updateOptionItemToVisible\"\n      @hide=\"whetherResetOptionVns\"\n    >\n      <template #default>\n        <SelectTrigger\n          ref=\"selectTriggerRef\"\n          :input-value=\"selectedLabelOnlySingle\"\n          :disabled=\"mergeDisabled\"\n          :size=\"mergeSize\"\n          :placeholder=\"placeholder\"\n          :clearable=\"clearable\"\n          :popup-visible=\"popupVisible\"\n          :multiple=\"multiple\"\n          :multiple-tags=\"multipleTags\"\n          :filterable=\"filterable\"\n          :popup-ref=\"popupRef\"\n          :card=\"card\"\n          @clear=\"handleClear\"\n          @tag-close=\"handleTagClose\"\n          @filter=\"handleFilter\"\n          @show=\"handleShowPopup\"\n        />\n      </template>\n\n      <template #content>\n        <SelectMenu ref=\"popupRef\">\n          <Scrollbar ref=\"scrollbarRef\" style=\"max-height: 224px\">\n            <OptionsRender :options-vns=\"optionsVns\" />\n\n            <template v-if=\"isEmpty && !loading\">\n              <p :class=\"[`${ns}__empty`]\" @click=\"handleClosePopup\">\n                <slot name=\"empty\">\n                  <Empty :description=\"noDataText\">\n                    <template #image>\n                      <BnIconEmpty size=\"38\" />\n                    </template>\n                  </Empty>\n                </slot>\n              </p>\n            </template>\n            <template v-if=\"isEmpty && loading\">\n              <p :class=\"[`${ns}__empty`]\" @click=\"handleClosePopup\">\n                <BnIconLoading />\n                <span style=\"margin-left: 4px\">{{ loadingText }}</span>\n              </p>\n            </template>\n          </Scrollbar>\n        </SelectMenu>\n      </template>\n    </Trigger>\n\n    <OptionsExtract @update-options=\"onUpdateOptionsVns\">\n      <slot></slot>\n    </OptionsExtract>\n  </div>\n</template>\n"],"names":[],"mappings":"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"}