Shadcn Mount-unmount tabs
Unanswered
African Slender-snouted Crocodil… posted this in #help-forum
African Slender-snouted CrocodileOP
I have a scenario in which i want to display 2 components in differents Tabs using shadcn
since there is a lot of code, I will display only the important parts
this tab is inside a GeneralModal :
since there is a lot of code, I will display only the important parts
<Tabs
defaultValue='static'
className='w-full mt-4'
onValueChange={(value) => {
setShowTab(value);
}}
>
<TabsList>
<TabsTrigger value='static'>Static Overlays</TabsTrigger>
<TabsTrigger value='dynamic'>Dynamic Overlays</TabsTrigger>
</TabsList>
<TabsContent
value='static'
forceMount
className={`${showTab !== "static" ? "hidden" : ""}`}
>
<UserOverlayTab
setOverlayModal={setOverlayModal}
selectedLanguage={selectedLanguage}
selectedOverlays={selectedOverlays}
setSelectedOverlays={setSelectedOverlays}
setSelectedLanguage={setSelectedLanguage}
setQuery={setQuery}
mutate={mutate}
setVideoModal={setVideoModal}
overlays={overlays}
setLoading={setLoading}
/>
</TabsContent>
<TabsContent
value='dynamic'
forceMount
className={`${showTab !== "static" ? "" : "hidden"}`}
>
<DynamicOverlayTab
setSelectedOverlays={setSelectedOverlays}
selectedOverlays={selectedOverlays}
overlays={overlays.filter((item) => item.type === "customizable")}
mutate={mutate}
setVideoModal={setVideoModal}
setLoading={setLoading}
/>
</TabsContent>
</Tabs>this tab is inside a GeneralModal :
10 Replies
African Slender-snouted CrocodileOP
<Modal isOpen={!!modal} onClose={handleClose}>
{modal === "hooks" && (
<HooksTable selectedHooks={state.hooks} setSelectedHooks={setState} />
)}
{modal === "bodies" && (
<BodiesTable
selectedBodies={state.bodies}
setSelectedBodies={setState}
/>
)}
{modal === "ctas" && (
<CtaTable
selectedCtas={state.ctas}
setSelectedCtas={setState}
setSelectedLanguage={setSelectedLanguage}
selectedLanguage={selectedLanguage}
/>
)}
{modal === "overlays" && (
<OverlaysTable
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
selectedOverlays={state.overlays}
setSelectedOverlays={setState}
/>
)}
{modal === "voices" && (
<VideoSettings
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
selectedVoices={state.voices}
setSelectedVoices={setState}
/>
)}
{modal === "audios" && (
<BackgroundMusic
selectedAudios={state.audios}
setSelectedAudios={setState}
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
/>
)}
</Modal> this is the modalthe issue is that, everytime i change the tab in the tablist, the generalModal closes ... as well
from what I've understood, it's because of the way mounting works around the tabs in shadcn, but is there any way I can make it not reset the state everytime i change the tab so it doesnt call a re-render? 🤔
@Arinji Maybe u know shadcn? 👀 😂
sorry dont use shadcn much.. also no need to ping me, if its something ik i will join it
@African Slender-snouted Crocodile ts
<Modal isOpen={!!modal} onClose={handleClose}>
{modal === "hooks" && (
<HooksTable selectedHooks={state.hooks} setSelectedHooks={setState} />
)}
{modal === "bodies" && (
<BodiesTable
selectedBodies={state.bodies}
setSelectedBodies={setState}
/>
)}
{modal === "ctas" && (
<CtaTable
selectedCtas={state.ctas}
setSelectedCtas={setState}
setSelectedLanguage={setSelectedLanguage}
selectedLanguage={selectedLanguage}
/>
)}
{modal === "overlays" && (
<OverlaysTable
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
selectedOverlays={state.overlays}
setSelectedOverlays={setState}
/>
)}
{modal === "voices" && (
<VideoSettings
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
selectedVoices={state.voices}
setSelectedVoices={setState}
/>
)}
{modal === "audios" && (
<BackgroundMusic
selectedAudios={state.audios}
setSelectedAudios={setState}
selectedLanguage={selectedLanguage}
setSelectedLanguage={setSelectedLanguage}
/>
)}
</Modal>
this is the modal
im afraid your code doesn't make it much clear what you're trying to do. do you have a modal trigger inside each tab, or is the tab trigger also the modal trigger, or is the tab inside the modal?
African Slender-snouted CrocodileOP
no so, the tab component is inside a modal, and each tab renders another component, the issue is that when i change the tab, the modal closes
the way i see it, your modal is controlled, then all you need to do is to assure the
modal state is truthy – so just log or display the value of the modal state and see if it changesradix modals don't close by themselves once controlled unless you click on a Dialog.Close or outside the modal or similar
Korat
Hi @African Slender-snouted Crocodile, you can add
https://www.radix-ui.com/primitives/docs/components/tabs
forceMount prop to the tab content and do hide logic using hidden prop.https://www.radix-ui.com/primitives/docs/components/tabs