xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 6.65 kB
Source Map (JSON)
{"version":3,"file":"tabs.mjs","sources":["../../src/tabs/tabs.tsx"],"sourcesContent":["import { ComponentPublicInstance, defineComponent, provide, Ref, toRefs } from 'vue';\nimport TTabPanel from './tab-panel';\nimport TTabNav from './tab-nav';\nimport { TabValue, TdTabsProps } from './type';\nimport props from './props';\n\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport isArray from 'lodash/isArray';\n\nexport interface InjectTabs {\n value: Ref<TabValue>;\n}\n\nexport default defineComponent({\n name: 'XTabs',\n\n props,\n\n setup(props) {\n const COMPONENT_NAME = usePrefixClass('tabs');\n const classPrefix = usePrefixClass();\n const renderTNodeJSX = useTNodeJSX();\n\n const { value, modelValue } = toRefs(props);\n const [tabValue, setTabValue] = useVModel(value, modelValue, props.defaultValue || '', props.onChange);\n\n provide<InjectTabs>('tabs', { value: tabValue });\n\n // methods\n const onTabAdd = (context: { e: MouseEvent }) => {\n props.onAdd?.({ e: context.e });\n };\n const onTabChange = (value: TabValue) => {\n setTabValue(value);\n };\n const onTabRemove = ({ e, value, index }: Parameters<TdTabsProps['onRemove']>[0]) => {\n props.onRemove({ value, index, e });\n };\n\n // render\n const getSlotPanels = () => {\n let content = renderTNodeJSX('default');\n if (!content) return [];\n content = content\n .map((item: ComponentPublicInstance) => {\n if (item.children && isArray(item.children)) return item.children;\n return item;\n })\n .flat()\n .filter((item: ComponentPublicInstance) => {\n return item.type.name === 'XTabPanel';\n });\n\n return content;\n };\n const renderHeader = () => {\n const panels = (props.list?.length ? props.list : getSlotPanels()) || [];\n const panelsData = panels.map((item: ComponentPublicInstance) => {\n const selfItem = item;\n\n if (item.props) {\n Object.keys(item.props).forEach((key) => {\n selfItem[key] = item.props[key];\n });\n }\n\n return selfItem;\n });\n const tabNavProps = {\n theme: props.theme,\n value: tabValue.value,\n size: props.size,\n disabled: props.disabled,\n placement: props.placement,\n addable: props.addable,\n panels: panelsData,\n dragSort: props.dragSort,\n };\n return (\n <div\n class={{\n [`${classPrefix.value}-tabs__header`]: true,\n [`${classPrefix.value}-is-${props.placement}`]: true,\n }}\n >\n <TTabNav\n {...tabNavProps}\n onDragSort={props.onDragSort}\n onChange={onTabChange}\n onAdd={onTabAdd}\n onRemove={onTabRemove}\n />\n </div>\n );\n };\n const renderContent = () => {\n const panels = getSlotPanels();\n if (props.list?.length) {\n return props.list.map((item) => <TTabPanel {...item} onRemove={onTabRemove} />);\n }\n if (panels && panels.length) {\n return <div class={[`${classPrefix.value}-tabs__content`]}>{panels}</div>;\n }\n };\n\n return () => {\n return (\n <div class={[COMPONENT_NAME.value]}>\n {props.placement !== 'bottom' ? [renderHeader(), renderContent()] : [renderContent(), renderHeader()]}\n </div>\n );\n };\n },\n});\n"],"names":["name","props","tabValue","setTabValue","value","index","e","content","isArray","Object","panels","_createVNode","_mergeProps","TTabPanel"],"mappings":"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"}