aboutsummaryrefslogtreecommitdiff
path: root/packages/studip-ui/src/composables
diff options
context:
space:
mode:
Diffstat (limited to 'packages/studip-ui/src/composables')
-rw-r--r--packages/studip-ui/src/composables/index.js2
-rw-r--r--packages/studip-ui/src/composables/useSlotFilter.js25
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