From 373d4fbedaa10a2aca164235a228518b0ef3f080 Mon Sep 17 00:00:00 2001 From: Md Afiq Iskandar Date: Mon, 26 May 2025 17:21:26 +0800 Subject: [PATCH] Enhance RsTab Component with New Props and Improved Slot Handling - Added support for tabs to be passed as props, allowing for a more flexible tab configuration. - Implemented a watch on modelValue to synchronize selected tab changes. - Enhanced slot handling to accommodate both named slots and default slots for better usability. - Refactored tab selection logic to utilize helper functions for improved readability and maintainability. --- components/RsTab.vue | 128 +++++++++++++++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 30 deletions(-) diff --git a/components/RsTab.vue b/components/RsTab.vue index cf9fc3b..37024dd 100644 --- a/components/RsTab.vue +++ b/components/RsTab.vue @@ -1,4 +1,6 @@ @@ -69,10 +127,10 @@ provide("selectedTitle", selectedTitle); border: type === 'border', 'border-horizontal': type === 'border' && !vertical, 'border-horizontal-active': - selectedTitle === val.title && type === 'border' && !vertical, + selectedTitle === getTabKey(val) && type === 'border' && !vertical, 'border-vertical': type === 'border' && vertical, 'border-vertical-active': - selectedTitle === val.title && type === 'border' && vertical, + selectedTitle === getTabKey(val) && type === 'border' && vertical, // Variant Color for Border Type 'border-hover-primary': type === 'border' && variant == 'primary', @@ -85,34 +143,34 @@ provide("selectedTitle", selectedTitle); // Variant Color for Border Type Active 'border-active-primary': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'primary', 'border-active-secondary': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'secondary', 'border-active-info': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'info', 'border-active-success': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'success', 'border-active-warning': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'warning', 'border-active-danger': - selectedTitle === val.title && + selectedTitle === getTabKey(val) && type === 'border' && variant == 'danger', }" role="presentation" v-for="(val, index) in tabs" :key="index" - @click="selectedTitle = val.title" + @click="selectedTitle = getTabKey(val)" > {{ val.title }}{{ getTabLabel(val) }} @@ -223,7 +281,17 @@ provide("selectedTitle", selectedTitle); 'content-border-danger': type === 'border' && variant === 'danger', }" > - + + + + +