Skip to content

Commit 7e2ed5a

Browse files
committed
changes to the component calls to improve collapsible component #528
1 parent 8e68c62 commit 7e2ed5a

File tree

5 files changed

+48
-31
lines changed

5 files changed

+48
-31
lines changed

src/components/ui/Collapsible/Collapsible.tsx

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@ import React, {
55
SetStateAction,
66
useState,
77
} from "react";
8-
import CollapsibleContent from "./fragments/CollapsibleContent";
9-
import CollapsibleHeader from "./fragments/CollapsibleHeader";
10-
import CollapsibleItem from "./fragments/CollapsibleItem";
11-
import CollapsibleRoot from "./fragments/CollapsibleRoot";
12-
import CollapsibleTrigger from "./fragments/CollapsibleTrigger";
8+
9+
import CollapsibleComponent from ".";
1310

1411
/*
1512
* CHECKLIST
@@ -50,44 +47,52 @@ const Collapsible = ({ children, items, ...props }: CollapsibleProps) => {
5047
// Onclick Handler
5148

5249
return (
53-
<CollapsibleRoot
50+
<CollapsibleComponent.Root
5451
open={props.open ?? open}
5552
onOpenChange={props.onOpenChange ?? onOpenChange}
5653
disabled={disabled}
5754
>
58-
<CollapsibleHeader title={title}>
55+
<CollapsibleComponent.Header title={title}>
5956
{/* Button */}
6057

61-
<CollapsibleTrigger asChild>
58+
<CollapsibleComponent.Trigger asChild>
6259
{props.trigger && props.trigger}
63-
</CollapsibleTrigger>
60+
</CollapsibleComponent.Trigger>
6461

65-
</CollapsibleHeader>
62+
</CollapsibleComponent.Header>
6663

6764
{/* Conditonal Loop */}
6865
{disabled ? (
6966
// loops through all the items with no conditions
7067
items.map((item, index) => (
71-
<CollapsibleItem key={index}>{item.content}</CollapsibleItem>
68+
<CollapsibleComponent.Item key={index}>{item.content}</CollapsibleComponent.Item>
7269
))
7370
) : (
7471
<>
7572
{/* Default value to be shown */}
7673
{defaultPos!=undefined ? items[defaultPos] && (
77-
<CollapsibleItem>{items[defaultPos].content}</CollapsibleItem>
74+
<CollapsibleComponent.Item>{items[defaultPos].content}</CollapsibleComponent.Item>
7875
) : null}
7976
{/* Collapsable Content */}
80-
<CollapsibleContent>
77+
<CollapsibleComponent.Content>
8178
{items.map((item, index) => (
8279
defaultPos!=undefined? item !== items[defaultPos] && (
83-
<CollapsibleItem key={index}>{item.content}</CollapsibleItem>
84-
) : <CollapsibleItem key={index}>{item.content}</CollapsibleItem>
80+
<CollapsibleComponent.Item key={index}>{item.content}</CollapsibleComponent.Item>
81+
) : <CollapsibleComponent.Item key={index}>{item.content}</CollapsibleComponent.Item>
8582
))}
86-
</CollapsibleContent>
83+
</CollapsibleComponent.Content>
8784
</>
8885
)}
89-
</CollapsibleRoot>
86+
</CollapsibleComponent.Root>
9087
);
9188
};
9289

90+
91+
92+
Collapsible.Root = CollapsibleComponent.Root;
93+
Collapsible.Header = CollapsibleComponent.Header;
94+
Collapsible.Trigger = CollapsibleComponent.Trigger;
95+
Collapsible.Content = CollapsibleComponent.Content;
96+
Collapsible.Item = CollapsibleComponent.Item;
97+
9398
export default Collapsible;

src/components/ui/Collapsible/fragments/CollapsibleContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type CollapsibleContentProps = {
88

99
}
1010

11-
const CollapsibleContent: React.FC<CollapsibleContentProps> = ({children,className=''}:CollapsibleContentProps) => {
11+
const CollapsibleContent = ({children,className=''}:CollapsibleContentProps) => {
1212

1313
const {rootClass,open} = useContext(CollapsibleContext)
1414

src/components/ui/Collapsible/fragments/CollapsibleItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type CollapsibleItemProps = {
88

99
};
1010

11-
const CollapsibleItem: React.FC<CollapsibleItemProps> = ({
11+
const CollapsibleItem = ({
1212
children,
1313
className = "",
1414

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import CollapsibleContent from "./fragments/CollapsibleContent";
2+
import CollapsibleHeader from "./fragments/CollapsibleHeader";
3+
import CollapsibleItem from "./fragments/CollapsibleItem";
4+
import CollapsibleRoot from "./fragments/CollapsibleRoot";
5+
import CollapsibleTrigger from "./fragments/CollapsibleTrigger";
6+
7+
8+
const CollapsibleComponent = {
9+
Root: CollapsibleRoot,
10+
Header: CollapsibleHeader,
11+
Trigger: CollapsibleTrigger,
12+
Content: CollapsibleContent,
13+
Item: CollapsibleItem,
14+
} as const;
15+
16+
export default CollapsibleComponent;

src/components/ui/Collapsible/stories/Collapsible.stories.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import React, { useState } from "react";
33
import SandboxEditor from "~/components/tools/SandboxEditor/SandboxEditor";
44
import Collapsible from "~/components/ui/Collapsible/Collapsible";
55
import Button from "../../Button/Button";
6-
import CollapsibleContent from "../fragments/CollapsibleContent";
7-
import CollapsibleHeader from "../fragments/CollapsibleHeader";
86
import CollapsibleItem from "../fragments/CollapsibleItem";
9-
import CollapsibleRoot from "../fragments/CollapsibleRoot";
10-
import CollapsibleTrigger from "../fragments/CollapsibleTrigger";
117

128
const Items = [
139
{
@@ -82,15 +78,15 @@ export const CustomTrigger = () => {
8278
return (
8379
<section>
8480
<SandboxEditor className="">
85-
<CollapsibleRoot open={open} onOpenChange={setOpen}>
86-
<CollapsibleHeader title="Composable">
87-
<CollapsibleTrigger>
81+
<Collapsible.Root open={open} onOpenChange={setOpen}>
82+
<Collapsible.Header title="Composable">
83+
<Collapsible.Trigger>
8884
<Button style={{ margin: "0" }}>{open ? "CLOSE" : "OPEN"}</Button>
89-
</CollapsibleTrigger>
90-
</CollapsibleHeader>
91-
<CollapsibleItem>{Items[0].content}</CollapsibleItem>
92-
<CollapsibleContent>{Items.map((item) => item != Items[0] && <CollapsibleItem>{item.content}</CollapsibleItem>)}</CollapsibleContent>
93-
</CollapsibleRoot>
85+
</Collapsible.Trigger>
86+
</Collapsible.Header>
87+
<Collapsible.Item>{Items[0].content}</Collapsible.Item>
88+
<Collapsible.Content>{Items.map((item) => item != Items[0] && <CollapsibleItem>{item.content}</CollapsibleItem>)}</Collapsible.Content>
89+
</Collapsible.Root>
9490
</SandboxEditor>
9591
</section>
9692
);

0 commit comments

Comments
 (0)