Skip to content

Commit c775e09

Browse files
committed
minor changes rad-ui#1 to improve collapsible component rad-ui#528
1 parent a18703d commit c775e09

4 files changed

Lines changed: 22 additions & 27 deletions

File tree

src/components/ui/Collapsible/Collapsible.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export type CollapsibleProps = {
3333

3434
const Collapsible = ({ children, items, ...props }: CollapsibleProps) => {
3535
//State values if not provided by the user
36-
const [open, onOpenChange] = useState(props.open ?? true);
36+
const [open, onOpenChange] = useState(props.open ?? false);
3737

3838

3939
// Disable or enable collapse
@@ -56,9 +56,8 @@ const Collapsible = ({ children, items, ...props }: CollapsibleProps) => {
5656
<CollapsibleHeader title={title}>
5757
{/* Button */}
5858

59-
<CollapsibleTrigger asChild >
59+
<CollapsibleTrigger asChild>
6060
{props.trigger && props.trigger}
61-
6261
</CollapsibleTrigger>
6362

6463
</CollapsibleHeader>

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

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import clsx from 'clsx'
22
import React, { useContext } from 'react'
3-
import ButtonPrimitive from '~/core/primitives/Button'
3+
import Primitive from '~/core/primitives/Primitive'
44
import { CollapsibleContext } from '../contexts/CollapsibleContext'
55

66

77
type CollapsibleTriggerProps = {
8-
children: React.ReactNode
8+
children?: React.ReactNode
99
asChild?: boolean
10+
className?: string
11+
id?: string
12+
key?: string
13+
style?: React.CSSProperties
14+
index?: number
1015
}
1116

1217
// Icons
@@ -46,15 +51,14 @@ type CollapsibleTriggerProps = {
4651

4752

4853

49-
const CollapsibleTrigger = ({children, asChild=false}: CollapsibleTriggerProps) => {
54+
const CollapsibleTrigger = ({children,className, ...props}: CollapsibleTriggerProps) => {
5055
const {rootClass,open,onOpenChange,disabled} = useContext(CollapsibleContext)
51-
const toggleCollapse = () => onOpenChange && !disabled && onOpenChange((p) => (!p))
52-
5356

57+
const toggleCollapse = () => onOpenChange && !disabled && onOpenChange((p) => (!p))
5458
return (
55-
<div
56-
className={clsx(`${rootClass}-trigger`)}
57-
role="button"
59+
<Primitive.button
60+
className={clsx(`${rootClass}-trigger`, className)}
61+
role={"button"}
5862
tabIndex={0}
5963
onKeyDown={(e) => {
6064
if (e.key === "Enter" || e.key === " ") {
@@ -63,19 +67,12 @@ const CollapsibleTrigger = ({children, asChild=false}: CollapsibleTriggerProps)
6367
}
6468
}}
6569
aria-expanded={open}
66-
onClick={
67-
68-
toggleCollapse
69-
}
70+
onClick={toggleCollapse}
71+
{...props}
72+
7073
>
71-
{asChild ? (
72-
children
73-
) : (
74-
<ButtonPrimitive>
75-
{open ? <CollapseIcon /> : <ExpandIcon />}
76-
</ButtonPrimitive>
77-
)}
78-
</div>
74+
{children}
75+
</Primitive.button>
7976
);
8077
}
8178

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ export const ExternalTrigger = () => {
5959
title="Quote"
6060
items={Items}
6161
defaultOpen={Items[0]}
62-
disabled={true}
6362
trigger={
6463
<Button style={{ margin: "0" }}>
6564
{open ? "CLOSE" : "OPEN"}

src/components/ui/Collapsible/tests/Collapsible.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import CollapsibleTrigger from "../fragments/CollapsibleTrigger";
1010
describe("Collapsible Component", () => {
1111
it("renders without crashing", () => {
1212
const { getByText } = render(
13-
<Collapsible items={[{ content: "Item 1" }]} />
13+
<Collapsible items={[{ content: "Item 1" }]} open={true}/>
1414
);
1515
expect(getByText("Item 1")).toBeInTheDocument();
1616
});
@@ -35,9 +35,9 @@ describe("Collapsible Component", () => {
3535
);
3636
const trigger = getByText("Toggle");
3737
fireEvent.click(trigger);
38-
expect(queryByText("Item 1")).not.toBeInTheDocument();
39-
fireEvent.click(trigger);
4038
expect(queryByText("Item 1")).toBeInTheDocument();
39+
fireEvent.click(trigger);
40+
expect(queryByText("Item 1")).not.toBeInTheDocument();
4141
});
4242

4343
it("disables collapsible when disabled prop is true", () => {

0 commit comments

Comments
 (0)