{"version":3,"file":"select-panel.mjs","sources":["../../../components/select/select-panel.tsx"],"sourcesContent":["import { computed, defineComponent, inject, Slots, ref } from 'vue';\nimport { omit } from 'lodash-es';\nimport { Styles } from '../common';\n\nimport { SelectOption, SelectOptionGroup, TdOptionProps } from './type';\nimport Option from './option';\nimport OptionGroup from './option-group';\nimport TdSelectProps from './props';\n\nimport { useTNodeJSX, useTNodeDefault } from '../hooks/tnode';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { usePanelVirtualScroll } from './hooks/usePanelVirtualScroll';\nimport { selectInjectKey } from './consts';\n\nexport default defineComponent({\n  name: 'TSelectPanel',\n  props: {\n    inputValue: TdSelectProps.inputValue,\n    panelTopContent: TdSelectProps.panelTopContent,\n    panelBottomContent: TdSelectProps.panelBottomContent,\n    empty: TdSelectProps.empty,\n    creatable: TdSelectProps.creatable,\n    loading: TdSelectProps.loading,\n    loadingText: TdSelectProps.loadingText,\n    multiple: TdSelectProps.multiple,\n    filterable: TdSelectProps.filterable,\n    filter: TdSelectProps.filter,\n    scroll: TdSelectProps.scroll,\n    size: TdSelectProps.size,\n  },\n  setup(props, { expose }) {\n    const COMPONENT_NAME = usePrefixClass('select');\n    const renderTNodeJSX = useTNodeJSX();\n    const renderDefaultTNode = useTNodeDefault();\n    const { t, globalConfig } = useConfig('select');\n    const tSelect = inject(selectInjectKey);\n    const innerRef = ref<HTMLElement>(null);\n\n    const popupContentRef = computed(() => tSelect.value.popupContentRef.value);\n    const showCreateOption = computed(() => props.creatable && props.filterable && props.inputValue);\n    const displayOptions = computed(() => tSelect.value.displayOptions);\n\n    const { trs, visibleData, handleRowMounted, isVirtual, panelStyle, cursorStyle } = usePanelVirtualScroll({\n      scroll: props.scroll,\n      popupContentRef,\n      options: displayOptions,\n    });\n\n    const isEmpty = computed(() => !displayOptions.value.length);\n\n    const renderCreateOption = () => (\n      <ul class={[`${COMPONENT_NAME.value}__create-option`, `${COMPONENT_NAME.value}__list`]}>\n        <Option\n          value={props.inputValue}\n          label={`${props.inputValue}`}\n          createAble={true}\n          class={`${COMPONENT_NAME.value}__create-option--special`}\n        />\n      </ul>\n    );\n\n    // 递归render options\n    const renderOptionsContent = (options: SelectOption[]) => {\n      return (\n        <ul class={`${COMPONENT_NAME.value}__list`}>\n          {options.map((item: SelectOptionGroup & TdOptionProps & { slots: Slots } & { $index: number }, index) => {\n            if (item.children) {\n              return (\n                <OptionGroup label={item.group} divider={item.divider}>\n                  {renderOptionsContent(item.children)}\n                </OptionGroup>\n              );\n            }\n            return (\n              <Option\n                {...omit(item, 'index', '$index', 'className', 'tagName')}\n                {...(isVirtual.value\n                  ? {\n                      rowIndex: item.$index,\n                      trs,\n                      scrollType: props.scroll?.type,\n                      isVirtual: isVirtual.value,\n                      bufferSize: props.scroll?.bufferSize,\n                      key: `${item.$index || ''}_${index}_${item.value}`,\n                    }\n                  : {\n                      key: `${index}_${item.value}`,\n                    })}\n                index={index}\n                multiple={props.multiple}\n                v-slots={item.slots}\n                onRowMounted={handleRowMounted}\n              />\n            );\n          })}\n        </ul>\n      );\n    };\n    const dropdownInnerSize = computed(() => {\n      return {\n        small: 's',\n        medium: 'm',\n        large: 'l',\n      }[tSelect.value.size];\n    });\n\n    expose({\n      innerRef,\n      visibleData, // 虚拟滚动的展示数据\n      isVirtual,\n      displayOptions, // 非虚拟滚动的展示数据\n    });\n\n    const renderPanel = (options: SelectOption[], extraStyle?: Styles) => (\n      <div\n        ref={innerRef}\n        class={[\n          `${COMPONENT_NAME.value}__dropdown-inner`,\n          `${COMPONENT_NAME.value}__dropdown-inner--size-${dropdownInnerSize.value}`,\n        ]}\n        style={extraStyle}\n      >\n        {/* create option */}\n        {showCreateOption.value && renderCreateOption()}\n        {/* loading状态 */}\n        {props.loading &&\n          renderDefaultTNode('loadingText', {\n            defaultNode: <div class={`${COMPONENT_NAME.value}__loading-tips`}>{t(globalConfig.value.loadingText)}</div>,\n          })}\n        {/* 空状态 */}\n        {!props.loading && isEmpty.value && !showCreateOption.value && (\n          <div class={`${COMPONENT_NAME.value}__empty`}>{renderTNodeJSX('empty') || t(globalConfig.value.empty)}</div>\n        )}\n        {!isEmpty.value && renderOptionsContent(options)}\n      </div>\n    );\n    return {\n      renderPanel,\n      panelStyle,\n      cursorStyle,\n      isVirtual,\n      displayOptions,\n      visibleData,\n      renderTNodeJSX,\n    };\n  },\n  render() {\n    return this.isVirtual ? (\n      <>\n        {this.renderTNodeJSX('panelTopContent')}\n        <div>\n          <div style={this.cursorStyle}></div>\n          {this.renderPanel(this.visibleData, this.panelStyle)}\n        </div>\n        {this.renderTNodeJSX('panelBottomContent')}\n      </>\n    ) : (\n      <>\n        {this.renderTNodeJSX('panelTopContent')}\n        {this.renderPanel(this.displayOptions)}\n        {this.renderTNodeJSX('panelBottomContent')}\n      </>\n    );\n  },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","inputValue","TdSelectProps","panelTopContent","panelBottomContent","empty","creatable","loading","loadingText","multiple","filterable","filter","scroll","size","setup","_ref","expose","COMPONENT_NAME","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderDefaultTNode","useTNodeDefault","_useConfig","useConfig","t","globalConfig","tSelect","inject","selectInjectKey","innerRef","ref","popupContentRef","computed","value","showCreateOption","displayOptions","_usePanelVirtualScrol","usePanelVirtualScroll","options","trs","visibleData","handleRowMounted","isVirtual","panelStyle","cursorStyle","isEmpty","length","renderCreateOption","_createVNode","concat","Option","renderOptionsContent","map","item","index","_props$scroll","_props$scroll2","children","_slot","OptionGroup","group","divider","_default","_mergeProps","omit","rowIndex","$index","scrollType","type","bufferSize","key","slots","dropdownInnerSize","small","medium","large","renderPanel","extraStyle","defaultNode","render","_Fragment"],"mappings":"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"}