Skip to content

Commit c4057f6

Browse files
Automigration: Enhance viewport story transformation to support member expression references for defaultViewport
1 parent 2fcd2be commit c4057f6

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

code/lib/cli-storybook/src/automigrate/fixes/addon-globals-api.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,5 +854,38 @@ describe('addon-globals-api', () => {
854854
expect(transformFn).toBeDefined();
855855
expect(transformFn!('story.js', storyContent)).toBe(expectedContent);
856856
});
857+
858+
it('should transform member expression references in viewport stories', async () => {
859+
const { transformFn } = await runMigrationAndGetTransformFn(defaultPreview);
860+
const storyContent = dedent`
861+
import { MINIMAL_VIEWPORTS } from 'storybook/viewport';
862+
import Button from './Button';
863+
export default { component: Button };
864+
export const Mobile = {
865+
parameters: {
866+
viewport: {
867+
defaultViewport: MINIMAL_VIEWPORTS.mobile2
868+
},
869+
},
870+
};
871+
`;
872+
const expectedContent = dedent`
873+
import { MINIMAL_VIEWPORTS } from 'storybook/viewport';
874+
import Button from './Button';
875+
export default {
876+
component: Button
877+
};
878+
export const Mobile = {
879+
globals: {
880+
viewport: {
881+
value: MINIMAL_VIEWPORTS.mobile2,
882+
isRotated: false
883+
}
884+
}
885+
};
886+
`;
887+
expect(transformFn).toBeDefined();
888+
expect(transformFn!('story.js', storyContent)).toBe(expectedContent);
889+
});
857890
});
858891
});

code/lib/cli-storybook/src/automigrate/fixes/addon-globals-api.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,19 @@ function transformStoryFile(
312312
const defaultViewport = getObjectProperty(viewportParams, 'defaultViewport');
313313
const defaultOrientation = getObjectProperty(viewportParams, 'defaultOrientation');
314314
const disableViewport = getObjectProperty(viewportParams, 'disable');
315-
if (defaultViewport && t.isStringLiteral(defaultViewport)) {
315+
316+
// Handle both string literals and member expressions for defaultViewport
317+
let viewportValue: t.StringLiteral | t.MemberExpression | null = null;
318+
if (defaultViewport) {
319+
if (t.isStringLiteral(defaultViewport)) {
320+
viewportValue = defaultViewport;
321+
} else if (t.isMemberExpression(defaultViewport)) {
322+
// Preserve the member expression as-is
323+
viewportValue = defaultViewport;
324+
}
325+
}
326+
327+
if (viewportValue) {
316328
// Create globals.viewport
317329
if (!newGlobals) {
318330
newGlobals = t.objectExpression([]);
@@ -328,7 +340,7 @@ function transformStoryFile(
328340
t.objectProperty(
329341
t.identifier('viewport'),
330342
t.objectExpression([
331-
t.objectProperty(t.identifier('value'), t.stringLiteral(defaultViewport.value)),
343+
t.objectProperty(t.identifier('value'), viewportValue),
332344
t.objectProperty(t.identifier('isRotated'), t.booleanLiteral(isRotated)),
333345
])
334346
)

0 commit comments

Comments
 (0)