Skip to content

Commit 13a9a21

Browse files
authored
Refactor accordion stories (#3432)
1 parent 89e069d commit 13a9a21

File tree

1 file changed

+40
-85
lines changed

1 file changed

+40
-85
lines changed

@navikt/core/react/src/accordion/accordion.stories.tsx

+40-85
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,21 @@
1-
import { StoryObj } from "@storybook/react";
1+
import { Meta, StoryObj } from "@storybook/react";
22
import React, { useState } from "react";
33
import { Accordion, AccordionProps } from ".";
4-
import AccordionContent from "./AccordionContent";
5-
import AccordionHeader from "./AccordionHeader";
6-
import AccordionItem from "./AccordionItem";
74

85
export default {
96
title: "ds-react/Accordion",
107
component: Accordion,
11-
subcomponents: {
12-
AccordionItem,
13-
AccordionContent,
14-
AccordionHeader,
15-
},
168
parameters: {
179
chromatic: { disable: true },
1810
},
1911
decorators: [
2012
(Story) => (
21-
<div
22-
style={{
23-
width: "600px",
24-
minHeight: "100vh",
25-
display: "flex",
26-
flexDirection: "column",
27-
gap: "1rem",
28-
}}
29-
>
13+
<div style={{ width: "500px", minHeight: "100vh" }}>
3014
<Story />
3115
</div>
3216
),
3317
],
34-
};
18+
} satisfies Meta<typeof Accordion>;
3519

3620
type Story = StoryObj<typeof Accordion>;
3721

@@ -60,46 +44,21 @@ const SmallContent = () => (
6044
</Accordion.Content>
6145
);
6246

63-
const Item = (props) => {
64-
const [open, setOpen] = useState(false);
65-
66-
if (props.defaultOpen) {
67-
return (
68-
<Accordion.Item
69-
defaultOpen={props.defaultOpen}
70-
onOpenChange={console.log}
71-
>
72-
<Accordion.Header>Accordion header text</Accordion.Header>
73-
<SmallContent />
74-
</Accordion.Item>
75-
);
76-
}
77-
78-
return props.controlled ? (
79-
<Accordion.Item open={open} onOpenChange={console.log}>
80-
<Accordion.Header onClick={() => setOpen(!open)}>
81-
Accordion header text
82-
</Accordion.Header>
83-
<Content />
84-
</Accordion.Item>
85-
) : (
86-
<Accordion.Item onOpenChange={console.log}>
87-
<Accordion.Header>Accordion header text</Accordion.Header>
88-
<Content />
89-
</Accordion.Item>
90-
);
91-
};
47+
const Item = ({ defaultOpen = false }) => (
48+
<Accordion.Item defaultOpen={defaultOpen} onOpenChange={console.log}>
49+
<Accordion.Header>Accordion header text</Accordion.Header>
50+
{defaultOpen ? <SmallContent /> : <Content />}
51+
</Accordion.Item>
52+
);
9253

9354
export const Controls: Story = {
94-
render: ({ ...props }) => {
55+
render: (props) => {
9556
return (
96-
<div style={{ width: 500 }}>
97-
<Accordion {...props}>
98-
{[...Array(4)].map((_, y) => (
99-
<Item key={y} {...props} />
100-
))}
101-
</Accordion>
102-
</div>
57+
<Accordion {...props}>
58+
{[...Array(4)].map((_, y) => (
59+
<Item key={y} />
60+
))}
61+
</Accordion>
10362
);
10463
},
10564
argTypes: {
@@ -128,21 +87,19 @@ export const Controls: Story = {
12887
export const DefaultOpen: Story = {
12988
render: () => {
13089
return (
131-
<div style={{ width: 500 }}>
132-
<Accordion>
133-
{[...Array(4)].map((_, y) => (
134-
<Item key={y} defaultOpen={y === 2} />
135-
))}
136-
</Accordion>
137-
</div>
90+
<Accordion>
91+
{[...Array(4)].map((_, y) => (
92+
<Item key={y} defaultOpen={y === 2} />
93+
))}
94+
</Accordion>
13895
);
13996
},
14097
};
14198

14299
export const Variants: Story = {
143100
render: () => {
144101
return (
145-
<div style={{ width: 500 }} className="colgap">
102+
<div className="colgap">
146103
<h3>Default</h3>
147104
<Accordion>
148105
{[...Array(2)].map((_, y) => (
@@ -166,22 +123,20 @@ export const ControlledState: Story = {
166123
const [open2, setOpen2] = useState(false);
167124

168125
return (
169-
<div style={{ width: 500 }}>
170-
<Accordion>
171-
<Accordion.Item open={open}>
172-
<Accordion.Header onClick={() => setOpen(!open)}>
173-
Accordion header text
174-
</Accordion.Header>
175-
<Content />
176-
</Accordion.Item>
177-
<Accordion.Item open={open2}>
178-
<Accordion.Header onClick={() => setOpen2(!open2)}>
179-
Accordion header text
180-
</Accordion.Header>
181-
<Content />
182-
</Accordion.Item>
183-
</Accordion>
184-
</div>
126+
<Accordion>
127+
<Accordion.Item open={open}>
128+
<Accordion.Header onClick={() => setOpen(!open)}>
129+
Accordion header text
130+
</Accordion.Header>
131+
<Content />
132+
</Accordion.Item>
133+
<Accordion.Item open={open2}>
134+
<Accordion.Header onClick={() => setOpen2(!open2)}>
135+
Accordion header text
136+
</Accordion.Header>
137+
<Content />
138+
</Accordion.Item>
139+
</Accordion>
185140
);
186141
},
187142
};
@@ -216,7 +171,7 @@ const headingSizes: AccordionProps["headingSize"][] = [
216171

217172
export const Size: Story = {
218173
render: () => (
219-
<div style={{ width: 500 }} className="colgap">
174+
<div className="colgap">
220175
{sizes.map((size) => (
221176
<SingleHeaderAccordion key={size} size={size} />
222177
))}
@@ -226,7 +181,7 @@ export const Size: Story = {
226181

227182
export const HeadingSize: Story = {
228183
render: () => (
229-
<div style={{ width: 500 }} className="colgap">
184+
<div className="colgap">
230185
{headingSizes.map((size) => (
231186
<SingleHeaderAccordion key={size} headingSize={size} />
232187
))}
@@ -237,14 +192,14 @@ export const HeadingSize: Story = {
237192
export const Indent: Story = {
238193
render: () => {
239194
return (
240-
<div style={{ width: 500 }} className="colgap">
241-
<h3>No indent</h3>
195+
<div className="colgap">
196+
<h3>Indent</h3>
242197
<Accordion indent>
243198
{[...Array(2)].map((_, y) => (
244199
<Item key={y} defaultOpen />
245200
))}
246201
</Accordion>
247-
<h3>Indent</h3>
202+
<h3>No indent</h3>
248203
<Accordion indent={false}>
249204
{[...Array(2)].map((_, y) => (
250205
<Item key={y} defaultOpen />

0 commit comments

Comments
 (0)