diff options
Diffstat (limited to 'packages/studip-ui/src/composables')
| -rw-r--r-- | packages/studip-ui/src/composables/index.js | 2 | ||||
| -rw-r--r-- | packages/studip-ui/src/composables/useSlotFilter.js | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/packages/studip-ui/src/composables/index.js b/packages/studip-ui/src/composables/index.js index cb0ff5c..7ad2d99 100644 --- a/packages/studip-ui/src/composables/index.js +++ b/packages/studip-ui/src/composables/index.js @@ -1 +1 @@ -export {}; +export { useSlotFilter } from './useSlotFilter.js';
\ No newline at end of file diff --git a/packages/studip-ui/src/composables/useSlotFilter.js b/packages/studip-ui/src/composables/useSlotFilter.js new file mode 100644 index 0000000..5b512d9 --- /dev/null +++ b/packages/studip-ui/src/composables/useSlotFilter.js @@ -0,0 +1,25 @@ +// useSlotFilter.js +import { isVNode, Comment } from 'vue'; + +export function useSlotFilter(slots) { + const getValidChildren = (componentName) => { + const rawNodes = slots.default ? slots.default() : []; + + return rawNodes.filter(vnode => { + if (!isVNode(vnode) || vnode.type === Comment) return false; + + const isCorrectComponent = vnode.type?.name === componentName || + vnode.type?.__name === componentName; + + if (!isCorrectComponent) { + if (vnode.type !== Symbol.for('v-fgt')) { + console.warn(`[UI Kit] ButtonGroup: Element vom Typ "${vnode.type?.name || vnode.type}" wurde entfernt.`); + } + return false; + } + return true; + }); + }; + + return { getValidChildren }; +}
\ No newline at end of file |
