Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9408d0f

Browse files
authored
Merge pull request #30565 from storybookjs/kasper/empty-render
Core: Allow empty render functions in CSF factories
2 parents 89cc1c9 + b5aa1f2 commit 9408d0f

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

code/core/src/csf/csf-factories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export interface Meta<TRenderer extends Renderer, TArgs extends Args = Args> {
4646
composed: NormalizedComponentAnnotations<TRenderer>;
4747
preview: Preview<TRenderer>;
4848

49-
story(input: ComponentAnnotations<TRenderer, TArgs>): Story<TRenderer, TArgs>;
49+
story(input: StoryAnnotations<TRenderer, TArgs>): Story<TRenderer, TArgs>;
5050
}
5151

5252
export function isMeta(input: unknown): input is Meta<Renderer> {

code/renderers/react/src/csf-factories.test.tsx

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ describe('Args can be provided in multiple ways', () => {
6565
it('❌ The combined shape of meta args and story args must match the required args.', () => {
6666
{
6767
const meta = preview.meta({ component: Button });
68+
// @ts-expect-error disabled not provided ❌
6869
const Basic = meta.story({
69-
// @ts-expect-error disabled not provided ❌
7070
args: { label: 'good' },
7171
});
7272
}
@@ -80,12 +80,37 @@ describe('Args can be provided in multiple ways', () => {
8080
}
8181
{
8282
const meta = preview.meta({ component: Button });
83+
// @ts-expect-error disabled not provided ❌
8384
const Basic = meta.story({
84-
// @ts-expect-error disabled not provided ❌
8585
args: { label: 'good' },
8686
});
8787
}
8888
});
89+
90+
it("✅ Required args don't need to be provided when the user uses an empty render", () => {
91+
const meta = preview.meta({
92+
component: Button,
93+
args: { label: 'good' },
94+
});
95+
const Basic = meta.story({
96+
args: {},
97+
render: () => <div>Hello world</div>,
98+
});
99+
});
100+
101+
it('❌ Required args need to be provided when the user uses a non-empty render', () => {
102+
const meta = preview.meta({
103+
component: Button,
104+
args: { label: 'good' },
105+
});
106+
// @ts-expect-error disabled not provided ❌
107+
const Basic = meta.story({
108+
args: {
109+
label: 'good',
110+
},
111+
render: (args) => <div>Hello world</div>,
112+
});
113+
});
89114
});
90115

91116
it('✅ Void functions are not changed', () => {

code/renderers/react/src/preview.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ interface ReactMeta<
5555
Context extends { args: Args },
5656
MetaInput extends ComponentAnnotations<ReactRenderer>,
5757
> extends Meta<ReactRenderer, Context['args']> {
58+
story<
59+
TInput extends StoryAnnotations<ReactRenderer, Context['args']> & {
60+
render: () => ReactRenderer['storyResult'];
61+
},
62+
>(
63+
story: TInput
64+
): ReactStory;
65+
5866
story<
5967
const TInput extends Simplify<
6068
StoryAnnotations<

0 commit comments

Comments
 (0)