tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 3.96 kB
Source Map (JSON)
{"version":3,"file":"slot.mjs","sources":["../../../components/hooks/slot.ts"],"sourcesContent":["import {\n Slots,\n VNode,\n Component,\n getCurrentInstance,\n Fragment,\n Comment,\n RendererNode,\n VNodeArrayChildren,\n RendererElement,\n VNodeChild,\n} from 'vue';\nimport { isArray } from 'lodash-es';\nimport { getChildren } from '../utils/render-tnode';\n\n/**\n * 渲染default slot,获取子组件VNode。处理多种子组件创建场景\n * 使用场景:<t-steps> <t-steps-item /> </t-steps>, <t-steps> <t-steps-item v-for=\"(item, index)\" :key=\"index\" /> </t-steps>\n * @returns {function(childComponentName: string, slots: Slots): VNode[]}\n * @param childComponentName\n * @param slots\n * @example const getChildByName = useChildComponentSlots()\n * @example getChildComponentByName('TStepItem')\n */\nexport function useChildComponentSlots() {\n const instance = getCurrentInstance();\n return (childComponentName: string, slots?: Slots): VNode[] => {\n if (!slots) {\n slots = instance.slots;\n }\n const content = slots?.default?.() || [];\n\n return getChildren(content).filter((item: VNode) =>\n (item.type as Component).name?.endsWith(childComponentName),\n ) as VNode[];\n };\n}\n\n/**\n * 渲染default slot,获取slot child\n * @param childComponentName\n * @param slots\n * @example const getChildSlots = useChildSlots()\n * @example getChildSlots()\n */\nexport function useChildSlots(): () => (\n | VNode<\n RendererNode,\n RendererElement,\n {\n [key: string]: any;\n }\n >\n | VNodeArrayChildren\n | VNodeChild\n)[] {\n const instance = getCurrentInstance();\n return () => {\n const { slots } = instance;\n const content = slots?.default?.() || [];\n\n return content\n .filter((item) => {\n if (typeof item.type === 'symbol' && !item.children) {\n return false;\n }\n return item.type !== Comment;\n })\n .map((item) => {\n if (item.children && isArray(item.children) && item.type === Fragment) return item.children;\n return item;\n })\n .flat();\n };\n}\n"],"names":["useChildComponentSlots","instance","getCurrentInstance","childComponentName","slots","_slots","_slots$default","content","call","getChildren","filter","item","_item$type$name","type","name","endsWith","useChildSlots","_slots$default2","_typeof","children","Comment","map","isArray","Fragment","flat"],"mappings":";;;;;;;;;;;AAwBO,SAASA,sBAAyBA,GAAA;AACvC,EAAA,IAAMC,WAAWC,kBAAmB,EAAA,CAAA;AAC7B,EAAA,OAAA,UAACC,oBAA4BC,KAA2B,EAAA;IAAA,IAAAC,MAAA,EAAAC,cAAA,CAAA;IAC7D,IAAI,CAACF,KAAO,EAAA;MACVA,KAAA,GAAQH,QAAS,CAAAG,KAAA,CAAA;AACnB,KAAA;IACA,IAAMG,OAAU,GAAA,CAAAF,CAAAA,MAAA,GAAAD,KAAA,MAAA,IAAA,IAAAC,MAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,cAAA,GAAAD,MAAA,CAAiB,SAAA,CAAA,MAAA,IAAA,IAAAC,cAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAjBA,cAAA,CAAAE,IAAA,CAAAH,MAAiB,CAAA,KAAK,EAAC,CAAA;IAEhC,OAAAI,WAAA,CAAYF,OAAO,CAAE,CAAAG,MAAA,CAAO,UAACC,IACjC,EAAA;AAAA,MAAA,IAAAC,eAAA,CAAA;AAAA,MAAA,OAAA,CAAAA,eAAA,GAAAD,IAAA,CAAKE,IAAmB,CAAAC,IAAA,MAAAF,IAAAA,IAAAA,eAAA,uBAAxBA,eAAA,CAA8BG,SAASZ,kBAAkB,CAAA,CAAA;AAAA,KAC5D,CAAA,CAAA;GACF,CAAA;AACF,CAAA;AASO,SAASa,aAUZA,GAAA;AACF,EAAA,IAAMf,WAAWC,kBAAmB,EAAA,CAAA;AACpC,EAAA,OAAO,YAAM;AAAA,IAAA,IAAAe,eAAA,CAAA;AACL,IAAA,IAAEb,QAAUH,QAAA,CAAVG;IACR,IAAMG,OAAU,GAAA,CAAAH,KAAA,aAAAA,KAAA,KAAA,KAAA,CAAA,IAAA,CAAAa,eAAA,GAAAb,KAAA,WAAiB,MAAAa,IAAAA,IAAAA,eAAA,uBAAjBA,eAAA,CAAAT,IAAA,CAAAJ,KAAiB,CAAA,KAAK,EAAC,CAAA;AAEhC,IAAA,OAAAG,OAAA,CACJG,MAAO,CAAA,UAACC,IAAS,EAAA;AAChB,MAAA,IAAIO,OAAA,CAAOP,IAAK,CAAAE,IAAA,CAAA,KAAS,QAAY,IAAA,CAACF,KAAKQ,QAAU,EAAA;AAC5C,QAAA,OAAA,KAAA,CAAA;AACT,OAAA;AACA,MAAA,OAAOR,KAAKE,IAAS,KAAAO,OAAA,CAAA;AACvB,KAAC,CAAA,CACAC,GAAI,CAAA,UAACV,IAAS,EAAA;MACb,IAAIA,KAAKQ,QAAY,IAAAG,OAAA,CAAQX,KAAKQ,QAAQ,CAAA,IAAKR,KAAKE,IAAS,KAAAU,QAAA,EAAU,OAAOZ,IAAK,CAAAQ,QAAA,CAAA;AAC5E,MAAA,OAAAR,IAAA,CAAA;AACT,KAAC,EACAa,IAAK,EAAA,CAAA;GACV,CAAA;AACF;;;;"}