Skip to content

Commit c5ee382

Browse files
committed
CSF: Fix play-fn tag for methods
1 parent e9a2317 commit c5ee382

File tree

2 files changed

+90
-23
lines changed

2 files changed

+90
-23
lines changed

code/core/src/csf-tools/CsfFile.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,67 @@ describe('CsfFile', () => {
17881788
`);
17891789
});
17901790

1791+
it('play method', () => {
1792+
expect(
1793+
parse(
1794+
dedent`
1795+
export default { title: 'foo/bar' };
1796+
export const A = {
1797+
play({ context }) {},
1798+
};
1799+
`
1800+
)
1801+
).toMatchInlineSnapshot(`
1802+
meta:
1803+
title: foo/bar
1804+
stories:
1805+
- id: foo-bar--a
1806+
name: A
1807+
__stats:
1808+
factory: false
1809+
play: true
1810+
render: false
1811+
loaders: false
1812+
beforeEach: false
1813+
globals: false
1814+
tags: false
1815+
storyFn: false
1816+
mount: false
1817+
moduleMock: false
1818+
tags:
1819+
- play-fn
1820+
`);
1821+
});
1822+
1823+
it('meta play method', () => {
1824+
expect(
1825+
parse(
1826+
dedent`
1827+
export default { title: 'foo/bar', play({ context }) {} };
1828+
export const A = {};`
1829+
)
1830+
).toMatchInlineSnapshot(`
1831+
meta:
1832+
title: foo/bar
1833+
tags:
1834+
- play-fn
1835+
stories:
1836+
- id: foo-bar--a
1837+
name: A
1838+
__stats:
1839+
factory: false
1840+
play: true
1841+
render: false
1842+
loaders: false
1843+
beforeEach: false
1844+
globals: false
1845+
tags: false
1846+
storyFn: false
1847+
mount: false
1848+
moduleMock: false
1849+
`);
1850+
});
1851+
17911852
it('mount', () => {
17921853
expect(
17931854
parse(

code/core/src/csf-tools/CsfFile.ts

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,8 @@ export class CsfFile {
348348
const meta: StaticMeta = {};
349349
(declaration.properties as t.ObjectProperty[]).forEach((p) => {
350350
if (t.isIdentifier(p.key)) {
351-
this._metaAnnotations[p.key.name] = p.value;
351+
const value = t.isObjectMethod(p) ? p : p.value;
352+
this._metaAnnotations[p.key.name] = value;
352353

353354
if (p.key.name === 'title') {
354355
meta.title = this._parseTitle(p.value);
@@ -598,30 +599,35 @@ export class CsfFile {
598599
// CSF3 object export
599600
(storyNode.properties as t.ObjectProperty[]).forEach((p) => {
600601
if (t.isIdentifier(p.key)) {
601-
if (p.key.name === 'render') {
602-
parameters.__isArgsStory = isArgsStory(
603-
p.value as t.Expression,
604-
parent,
605-
self
606-
);
607-
} else if (p.key.name === 'name' && t.isStringLiteral(p.value)) {
608-
name = p.value.value;
609-
} else if (p.key.name === 'storyName' && t.isStringLiteral(p.value)) {
610-
logger.warn(
611-
`Unexpected usage of "storyName" in "${exportName}". Please use "name" instead.`
612-
);
613-
} else if (p.key.name === 'parameters' && t.isObjectExpression(p.value)) {
614-
const idProperty = p.value.properties.find(
615-
(property) =>
616-
t.isObjectProperty(property) &&
617-
t.isIdentifier(property.key) &&
618-
property.key.name === '__id'
619-
) as t.ObjectProperty | undefined;
620-
if (idProperty) {
621-
parameters.__id = (idProperty.value as t.StringLiteral).value;
602+
const key = p.key.name;
603+
if (t.isObjectMethod(p)) {
604+
self._storyAnnotations[exportName][key] = p;
605+
} else {
606+
if (p.key.name === 'render') {
607+
parameters.__isArgsStory = isArgsStory(
608+
p.value as t.Expression,
609+
parent,
610+
self
611+
);
612+
} else if (p.key.name === 'name' && t.isStringLiteral(p.value)) {
613+
name = p.value.value;
614+
} else if (p.key.name === 'storyName' && t.isStringLiteral(p.value)) {
615+
logger.warn(
616+
`Unexpected usage of "storyName" in "${exportName}". Please use "name" instead.`
617+
);
618+
} else if (p.key.name === 'parameters' && t.isObjectExpression(p.value)) {
619+
const idProperty = p.value.properties.find(
620+
(property) =>
621+
t.isObjectProperty(property) &&
622+
t.isIdentifier(property.key) &&
623+
property.key.name === '__id'
624+
) as t.ObjectProperty | undefined;
625+
if (idProperty) {
626+
parameters.__id = (idProperty.value as t.StringLiteral).value;
627+
}
622628
}
629+
self._storyAnnotations[exportName][p.key.name] = p.value;
623630
}
624-
self._storyAnnotations[exportName][p.key.name] = p.value;
625631
}
626632
});
627633
} else {

0 commit comments

Comments
 (0)