Skip to content

Commit

Permalink
Add support for beforeAll hook to projectAnnotations
Browse files Browse the repository at this point in the history
  • Loading branch information
ghengeveld committed Jun 17, 2024
1 parent 9412e07 commit 1f6c183
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 8 deletions.
31 changes: 23 additions & 8 deletions code/lib/preview-api/src/modules/preview-web/Preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ export class Preview<TRenderer extends Renderer> {
// project annotations. Once the index loads, it is stored on the store and this will get unset.
private projectAnnotationsBeforeInitialization?: ProjectAnnotations<TRenderer>;

private beforeAllCleanup?: (() => MaybePromise<void>) | void;

protected storeInitializationPromise: Promise<void>;

protected resolveStoreInitializationPromise!: () => void;
Expand Down Expand Up @@ -160,9 +162,23 @@ export class Preview<TRenderer extends Renderer> {
}

// If initialization gets as far as project annotations, this function runs.
async initializeWithProjectAnnotations(projectAnnotations: ProjectAnnotations<TRenderer>) {
this.projectAnnotationsBeforeInitialization = projectAnnotations;
async initializeWithProjectAnnotations(
projectAnnotations: ProjectAnnotations<TRenderer>,
storyStore?: StoryStore<TRenderer>
) {
try {
await this.beforeAllCleanup?.();
this.beforeAllCleanup = await projectAnnotations.beforeAll?.();
} catch (err) {
this.renderPreviewEntryError('Error in beforeAll hook:', err as Error);
throw err;
}

// Don't reinitialize story store if it's already been set.
if (storyStore) return;

try {
this.projectAnnotationsBeforeInitialization = projectAnnotations;
const storyIndex = await this.getStoryIndexFromServer();
return this.initializeWithStoryIndex(storyIndex);
} catch (err) {
Expand Down Expand Up @@ -226,13 +242,12 @@ export class Preview<TRenderer extends Renderer> {
this.getProjectAnnotations = getProjectAnnotations;

const projectAnnotations = await this.getProjectAnnotationsOrRenderError();
if (!this.storyStoreValue) {
await this.initializeWithProjectAnnotations(projectAnnotations);
return;
}
await this.initializeWithProjectAnnotations(projectAnnotations, this.storyStoreValue);

this.storyStoreValue.setProjectAnnotations(projectAnnotations);
this.emitGlobals();
if (this.storyStoreValue) {
this.storyStoreValue.setProjectAnnotations(projectAnnotations);
this.emitGlobals();
}
}

async onStoryIndexChanged() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ export function composeConfigs<TRenderer extends Renderer>(
initialGlobals: getObjectField(moduleExportList, 'initialGlobals'),
globalTypes: getObjectField(moduleExportList, 'globalTypes'),
loaders: getArrayField(moduleExportList, 'loaders'),
beforeAll: getSingletonField(moduleExportList, 'beforeAll'),
beforeEach: getArrayField(moduleExportList, 'beforeEach'),
render: getSingletonField(moduleExportList, 'render'),
renderToCanvas: getSingletonField(moduleExportList, 'renderToCanvas'),
Expand Down
2 changes: 2 additions & 0 deletions code/lib/types/src/modules/story.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ export type ProjectAnnotations<TRenderer extends Renderer> = CsfProjectAnnotatio

/* @deprecated use renderToCanvas */
renderToDOM?: RenderToCanvas<TRenderer>;

beforeAll?: () => MaybePromise<void | (() => MaybePromise<void>)>;
};

type NamedExportsOrDefault<TExport> = TExport | { default: TExport };
Expand Down

0 comments on commit 1f6c183

Please sign in to comment.