Skip to content

Commit 5d1c0c5

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

File tree

2 files changed

+89
-23
lines changed

2 files changed

+89
-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: 28 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,34 @@ 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+
if (t.isObjectMethod(p)) {
603+
self._storyAnnotations[exportName][p.key.name] = p;
604+
} else {
605+
if (p.key.name === 'render') {
606+
parameters.__isArgsStory = isArgsStory(
607+
p.value as t.Expression,
608+
parent,
609+
self
610+
);
611+
} else if (p.key.name === 'name' && t.isStringLiteral(p.value)) {
612+
name = p.value.value;
613+
} else if (p.key.name === 'storyName' && t.isStringLiteral(p.value)) {
614+
logger.warn(
615+
`Unexpected usage of "storyName" in "${exportName}". Please use "name" instead.`
616+
);
617+
} else if (p.key.name === 'parameters' && t.isObjectExpression(p.value)) {
618+
const idProperty = p.value.properties.find(
619+
(property) =>
620+
t.isObjectProperty(property) &&
621+
t.isIdentifier(property.key) &&
622+
property.key.name === '__id'
623+
) as t.ObjectProperty | undefined;
624+
if (idProperty) {
625+
parameters.__id = (idProperty.value as t.StringLiteral).value;
626+
}
622627
}
628+
self._storyAnnotations[exportName][p.key.name] = p.value;
623629
}
624-
self._storyAnnotations[exportName][p.key.name] = p.value;
625630
}
626631
});
627632
} else {

0 commit comments

Comments
 (0)