UNPKG

tdesign-vue-next

Version:
1 lines 13.5 kB
{"version":3,"file":"select-panel.mjs","sources":["../../../../components/select/components/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 { useConfig, useTNodeJSX, usePrefixClass, useTNodeDefault } from '@tdesign/shared-hooks';\n\nimport { usePanelVirtualScroll } from '../hooks';\nimport { selectInjectKey } from '../consts';\nimport type { TdSelectProps as SelectProps } from '../type';\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 keys: TdSelectProps.keys,\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 const keys = computed(() => props.keys as SelectProps['keys']);\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\n const defaultOmit = ['index', '$index', 'className', 'tagName'];\n\n const { value, label, disabled } = keys.value || {};\n // 如果 keys 中刚好有 content,则移除 content 渲染 https://github.com/Tencent/tdesign-vue-next/issues/5088\n const shouldOmitContent = [value, label, disabled].includes('content');\n const option = omit(item, defaultOmit.concat(shouldOmitContent ? 'content' : []));\n\n return (\n <Option\n {...option}\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\n return () => {\n return isVirtual.value ? (\n <>\n {renderTNodeJSX('panelTopContent')}\n <div>\n <div style={cursorStyle.value}></div>\n {renderPanel(visibleData.value, panelStyle.value)}\n </div>\n {renderTNodeJSX('panelBottomContent')}\n </>\n ) : (\n <>\n {renderTNodeJSX('panelTopContent')}\n {renderPanel(displayOptions.value)}\n {renderTNodeJSX('panelBottomContent')}\n </>\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","keys","setup","_ref","expose","COMPONENT_NAME","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderDefaultTNode","useTNodeDefault","_useConfig","useConfig","t","globalConfig","tSelect","inject","selectInjectKey","innerRef","ref","computed","popupContentRef","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","defaultOmit","_ref2","label","disabled","shouldOmitContent","includes","option","omit","_mergeProps","rowIndex","$index","scrollType","type","bufferSize","key","slots","dropdownInnerSize","small","medium","large","size","renderPanel","extraStyle","defaultNode","_Fragment"],"mappings":"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"}