11import * as React from 'react' ;
2-
32import { 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
1017import 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+
1742const 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
135131ColSize . 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
140153WithBackground . 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+ } ;
0 commit comments