UNPKG

tdesign-vue-next

Version:
1 lines 12.9 kB
{"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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"}