Skip to content

Commit 2854522

Browse files
authored
chore(CardLayout): fix storybook (#1244)
* chore(CardLayout): fix storybook
1 parent 75a4c58 commit 2854522

11 files changed

+165
-111
lines changed
Loading
Loading
-247 Bytes
Loading
-1.01 KB
Loading
Loading
-448 KB
Loading
Loading
Loading
Lines changed: 152 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import * as React from 'react';
2-
32
import {Meta, StoryFn} from '@storybook/react';
43

5-
import {yfmTransformInline} from '../../../../.storybook/utils';
6-
import {PageConstructor} from '../../../containers/PageConstructor';
7-
import {CardLayoutBlockModel, CardLayoutBlockProps, SubBlockModels} from '../../../models';
8-
import CardLayout from '../CardLayout';
4+
import {blockTransform} from '../../../../.storybook/utils';
5+
import {
6+
BackgroundCardProps,
7+
BasicCardProps,
8+
CardLayoutBlockModel,
9+
ImageCardProps,
10+
LayoutItemProps,
11+
PriceCardProps,
12+
SubBlockModels,
13+
} from '../../../models';
14+
import {BackgroundCard, BasicCard, ImageCard, LayoutItem, PriceCard} from '../../../sub-blocks';
15+
import CardLayout, {CardLayoutBlockProps} from '../CardLayout';
916

1017
import data from './data.json';
1118

@@ -14,129 +21,165 @@ export default {
1421
component: CardLayout,
1522
} as Meta;
1623

24+
const renderChild = (childArgs: SubBlockModels, index?: number) => {
25+
const childProps = blockTransform(childArgs);
26+
switch (childArgs.type) {
27+
case 'basic-card':
28+
return <BasicCard key={index} {...(childProps as BasicCardProps)} />;
29+
case 'layout-item':
30+
return <LayoutItem key={index} {...(childProps as LayoutItemProps)} />;
31+
case 'background-card':
32+
return <BackgroundCard key={index} {...(childProps as BackgroundCardProps)} />;
33+
case 'price-card':
34+
return <PriceCard key={index} {...(childProps as PriceCardProps)} />;
35+
case 'image-card':
36+
return <ImageCard key={index} {...(childProps as ImageCardProps)} />;
37+
default:
38+
return null;
39+
}
40+
};
41+
1742
const createCardArray: (
1843
count: number,
1944
shared: Omit<SubBlockModels, 'type'> & {type: string},
2045
) => SubBlockModels[] = (count, shared) =>
2146
Array.from({length: count}, () => ({...shared}) as SubBlockModels);
2247

23-
const DefaultTemplate: StoryFn<CardLayoutBlockModel> = (args) => (
24-
<PageConstructor
25-
content={{
26-
blocks: [
27-
{
28-
...args,
29-
children: createCardArray(6, data.cards.basicCard),
30-
},
31-
{
32-
...args,
33-
title: 'Card layout with layout items',
34-
children: createCardArray(3, data.cards.layoutItem),
35-
},
36-
{
37-
...args,
38-
title: 'Card layout with background cards',
39-
children: createCardArray(3, data.cards.backgroundCard),
40-
},
41-
{
42-
...args,
43-
title: 'Card layout with price cards',
44-
children: [
45-
{
46-
...data.cards.priceCard,
47-
title: yfmTransformInline(data.cards.priceCard.title),
48-
buttons: [data.buttons.outlined],
49-
},
50-
{
51-
...data.cards.priceCard,
52-
title: yfmTransformInline(data.cards.priceCard.title),
53-
buttons: [data.buttons.action],
54-
},
55-
{
56-
...data.cards.priceCard,
57-
title: yfmTransformInline(data.cards.priceCard.title),
58-
buttons: [data.buttons.monochrome],
59-
},
60-
],
61-
},
62-
{
63-
...args,
64-
title: 'Card layout with image cards',
65-
children: createCardArray(3, data.cards.imageCard),
66-
},
67-
],
68-
}}
69-
/>
70-
);
48+
const DefaultTemplate: StoryFn<CardLayoutBlockModel> = ({children = [], ...args}) => {
49+
return (
50+
<div style={{padding: '48px'}}>
51+
<CardLayout {...(blockTransform(args) as CardLayoutBlockProps)} animated={false}>
52+
{children.map(renderChild)}
53+
</CardLayout>
54+
</div>
55+
);
56+
};
7157

72-
const ColSizeTemplate: StoryFn<CardLayoutBlockModel> = (args) => (
58+
const MultipleTemplate: StoryFn<{blocks: CardLayoutBlockModel[]}> = ({blocks}) => (
7359
<React.Fragment>
74-
<PageConstructor
75-
content={{
76-
blocks: [
77-
{
78-
...args,
79-
description: data.colSizes.four.description,
80-
colSizes: data.colSizes.four.colSizes,
81-
},
82-
{
83-
...args,
84-
description: data.colSizes.two.description,
85-
colSizes: data.colSizes.two.colSizes,
86-
children: createCardArray(8, data.colSizes.two.card) as SubBlockModels[],
87-
},
88-
],
89-
}}
90-
/>
60+
{blocks.map(({children = [], ...itemArgs}, index) => (
61+
<div key={index} style={{padding: '48px'}}>
62+
<CardLayout
63+
{...(itemArgs as CardLayoutBlockProps)}
64+
animated={false}
65+
className="card-layout-stories"
66+
>
67+
{children.map(renderChild)}
68+
</CardLayout>
69+
</div>
70+
))}
9171
</React.Fragment>
9272
);
9373

94-
const WithBackgroundTemplate: StoryFn<CardLayoutBlockModel> = (args) => (
95-
<PageConstructor
96-
content={{
97-
blocks: [
98-
{
99-
...args,
100-
background: data.backgrounds.image,
101-
children: createCardArray(8, data.cards.basicCard),
102-
},
74+
export const Default = DefaultTemplate.bind({});
75+
export const ChildrenCardOptions = MultipleTemplate.bind({});
76+
export const ColSize = MultipleTemplate.bind({});
77+
export const WithBackground = MultipleTemplate.bind({});
78+
79+
Default.args = {
80+
...data.default.content,
81+
children: createCardArray(6, data.cards.basicCard),
82+
} as CardLayoutBlockModel;
83+
84+
ChildrenCardOptions.args = {
85+
blocks: [
86+
{
87+
...data.default.content,
88+
children: createCardArray(6, data.cards.basicCard),
89+
},
90+
{
91+
...data.default.content,
92+
title: 'Card layout with layout items',
93+
children: createCardArray(3, data.cards.layoutItem),
94+
},
95+
{
96+
...data.default.content,
97+
title: 'Card layout with background cards',
98+
children: createCardArray(3, data.cards.backgroundCard),
99+
},
100+
{
101+
...data.default.content,
102+
title: 'Card layout with price cards',
103+
children: [
103104
{
104-
...args,
105-
title: 'Card layout with background color (basic cards)',
106-
background: data.backgrounds.backgroundColor,
107-
children: createCardArray(4, data.cards.basicCard),
105+
...data.cards.priceCard,
106+
buttons: [data.buttons.outlined],
108107
},
109108
{
110-
...args,
111-
background: data.backgrounds.backgroundColorAndShadow,
112-
title: 'Card layout with background color and shadow (layout items)',
113-
...data.colSizes.threeOne,
114-
children: createCardArray(3, data.cards.layoutItem),
109+
...data.cards.priceCard,
110+
buttons: [data.buttons.action],
115111
},
116112
{
117-
...args,
118-
title: 'Card layout with background image (price cards)',
119-
background: data.backgrounds.image,
120-
children: createCardArray(4, data.cards.priceCard),
113+
...data.cards.priceCard,
114+
buttons: [data.buttons.monochrome],
121115
},
122116
],
123-
}}
124-
/>
125-
);
126-
127-
export const Default = DefaultTemplate.bind({});
128-
export const ColSize = ColSizeTemplate.bind({});
129-
export const WithBackground = WithBackgroundTemplate.bind({});
130-
131-
Default.args = {
132-
...data.default.content,
133-
} as CardLayoutBlockProps;
117+
},
118+
{
119+
...data.default.content,
120+
title: 'Card layout with image cards',
121+
children: createCardArray(3, data.cards.imageCard),
122+
},
123+
],
124+
} as {blocks: CardLayoutBlockModel[]};
125+
ChildrenCardOptions.parameters = {
126+
controls: {
127+
include: ['blocks'],
128+
},
129+
};
134130

135131
ColSize.args = {
136-
...data.default.content,
137-
children: createCardArray(8, data.colSizes.four.card),
138-
} as CardLayoutBlockProps;
132+
blocks: [
133+
{
134+
...data.default.content,
135+
children: createCardArray(8, data.colSizes.four.card),
136+
description: data.colSizes.four.description,
137+
colSizes: data.colSizes.four.colSizes,
138+
},
139+
{
140+
...data.default.content,
141+
description: data.colSizes.two.description,
142+
colSizes: data.colSizes.two.colSizes,
143+
children: createCardArray(8, data.colSizes.two.card),
144+
},
145+
] as CardLayoutBlockModel[],
146+
};
147+
ColSize.parameters = {
148+
controls: {
149+
include: ['blocks'],
150+
},
151+
};
139152

140153
WithBackground.args = {
141-
...data.withBackground.content,
142-
} as CardLayoutBlockProps;
154+
blocks: [
155+
{
156+
...data.withBackground.content,
157+
background: data.backgrounds.image,
158+
children: createCardArray(8, data.cards.basicCard),
159+
},
160+
{
161+
...data.withBackground.content,
162+
title: 'Card layout with background color (basic cards)',
163+
background: data.backgrounds.backgroundColor,
164+
children: createCardArray(4, data.cards.basicCard),
165+
},
166+
{
167+
...data.withBackground.content,
168+
background: data.backgrounds.backgroundColorAndShadow,
169+
title: 'Card layout with background color and shadow (layout items)',
170+
...data.colSizes.threeOne,
171+
children: createCardArray(3, data.cards.layoutItem),
172+
},
173+
{
174+
...data.withBackground.content,
175+
title: 'Card layout with background image (price cards)',
176+
background: data.backgrounds.image,
177+
children: createCardArray(4, data.cards.priceCard),
178+
},
179+
] as CardLayoutBlockModel[],
180+
};
181+
WithBackground.parameters = {
182+
controls: {
183+
include: ['blocks'],
184+
},
185+
};

src/blocks/CardLayout/__tests__/CardLayout.visual.test.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {test} from '../../../../playwright/core/index';
22

3-
import {ColSize, Default, WithBackground} from './helpers';
3+
import {ChildrenCardOptions, ColSize, Default, WithBackground} from './helpers';
44

55
test.describe('CardLayout', () => {
66
test('render stories <Default>', async ({mount, expectScreenshot, defaultDelay}) => {
@@ -9,6 +9,16 @@ test.describe('CardLayout', () => {
99
await expectScreenshot({skipTheme: 'dark'});
1010
});
1111

12+
test('render stories <ChildrenCardOptions>', async ({
13+
mount,
14+
expectScreenshot,
15+
defaultDelay,
16+
}) => {
17+
await mount(<ChildrenCardOptions />);
18+
await defaultDelay();
19+
await expectScreenshot({skipTheme: 'dark'});
20+
});
21+
1222
test('render stories <ColSize>', async ({mount, expectScreenshot, defaultDelay}) => {
1323
await mount(<ColSize />);
1424
await defaultDelay();

0 commit comments

Comments
 (0)