From d8b658dbacdce293aef40268af4278fa7b2fd4d0 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Thu, 14 Jul 2022 17:15:55 +1000 Subject: [PATCH 1/2] Add a story to demonstrate #18477 --- .../addon-docs/container-override.stories.mdx | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/examples/official-storybook/stories/addon-docs/container-override.stories.mdx b/examples/official-storybook/stories/addon-docs/container-override.stories.mdx index d02730244613..cefd2c593f8e 100644 --- a/examples/official-storybook/stories/addon-docs/container-override.stories.mdx +++ b/examples/official-storybook/stories/addon-docs/container-override.stories.mdx @@ -1,19 +1,38 @@ -import { Meta, DocsContainer, Story } from '@storybook/addon-docs'; +import { useRef } from 'react'; +import { Meta, DocsContainer, Story, ArgsTable } from '@storybook/addon-docs'; ( - -
{children}
-
- ), + container: ({ children, context }) => { + const countRef = useRef(); + countRef.current = (countRef.current || 0) + 1; + return ( + +
{children}
+

Container rendered {countRef.current} times

+

Try changing:

+ +
+ ); + }, }, }} /> +export const Component = () => { + const countRef = useRef(); + countRef.current = (countRef.current || 0) + 1; + return
Story rendered {countRef.current} times
; +}; + -
some content
+
+ + From 47c51cce5c59191f0303c69e671074e9451a313c Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Thu, 14 Jul 2022 17:19:59 +1000 Subject: [PATCH 2/2] Ensure we always re-render docs when globals change --- lib/preview-web/src/DocsRender.ts | 4 ++-- lib/preview-web/src/PreviewWeb.test.ts | 24 ++++++++++++++++++++++-- lib/preview-web/src/PreviewWeb.tsx | 4 ++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/preview-web/src/DocsRender.ts b/lib/preview-web/src/DocsRender.ts index d386611584e6..6eabc49f9092 100644 --- a/lib/preview-web/src/DocsRender.ts +++ b/lib/preview-web/src/DocsRender.ts @@ -72,12 +72,12 @@ export class DocsRender implements Render { expect(mockChannel.emit).toHaveBeenCalledWith(STORY_RENDERED, 'component-one--a'); }); - describe('in docs mode', () => { + describe('in docs mode, legacy inline render', () => { + it('re-renders the docs container', async () => { + document.location.search = '?id=component-one--a&viewMode=docs'; + + await createAndRenderPreview(); + + mockChannel.emit.mockClear(); + emitter.emit(UPDATE_GLOBALS, { globals: { foo: 'bar' } }); + await waitForRender(); + + expect(ReactDOM.render).toHaveBeenCalledTimes(2); + }); + }); + + describe('in docs mode, modern inline render', () => { + beforeEach(() => { + global.FEATURES.modernInlineRender = true; + }); + afterEach(() => { + global.FEATURES.modernInlineRender = false; + }); it('re-renders the docs container', async () => { document.location.search = '?id=component-one--a&viewMode=docs'; @@ -982,7 +1002,7 @@ describe('PreviewWeb', () => { global.FEATURES.modernInlineRender = true; }); afterEach(() => { - global.FEATURES.modernInlineRender = true; + global.FEATURES.modernInlineRender = false; }); it('does not re-render the docs container', async () => { document.location.search = '?id=component-one--a&viewMode=docs'; diff --git a/lib/preview-web/src/PreviewWeb.tsx b/lib/preview-web/src/PreviewWeb.tsx index 6c455bd2e93b..891eb1dd5337 100644 --- a/lib/preview-web/src/PreviewWeb.tsx +++ b/lib/preview-web/src/PreviewWeb.tsx @@ -212,7 +212,7 @@ export class PreviewWeb extends Preview extends Preview