Ensure that ensureControls runs in the second pass

This commit is contained in:
Tom Coleman 2021-08-04 16:53:49 +10:00
parent ee341ec5d2
commit 95d3fed76f
4 changed files with 18 additions and 3 deletions

View File

@ -75,4 +75,6 @@ const inferControls: ArgTypesEnhancer = (context) => {
return combineParameters(withControls, filteredArgTypes);
};
inferControls.secondPass = true;
export const argTypesEnhancers = [inferControls];

View File

@ -63,7 +63,11 @@ export type RenderContext<StoryFnReturnType> = RenderContextWithoutStoryContext
};
export type ArgTypesEnhancer = (context: StoryContextForEnhancers) => ArgTypes;
export type ArgsEnhancer = (context: StoryContextForEnhancers) => Args;
export type ArgsEnhancer = (
context: StoryContextForEnhancers
) => Args & {
secondPass?: boolean;
};
export type Meta<StoryFnReturnType> = {
decorators?: DecoratorFunction<StoryFnReturnType>[];

View File

@ -29,7 +29,11 @@ export interface StoryMetadata {
decorators?: DecoratorFunction[];
loaders?: LoaderFunction[];
}
export type ArgTypesEnhancer = (context: StoryContext) => ArgTypes;
export type ArgTypesEnhancer = (
context: StoryContext
) => ArgTypes & {
secondPass?: boolean;
};
export type ArgsEnhancer = (context: StoryContext) => Args;
export type StorySpecifier = StoryId | { name: StoryName; kind: StoryKind } | '*';

View File

@ -20,13 +20,18 @@ function getSingletonField(moduleExportList: ModuleExports[], field: string): an
export function composeConfigs<StoryFnReturnType>(
moduleExportList: ModuleExports[]
): WebGlobalMeta<StoryFnReturnType> {
const allArgTypeEnhancers = getArrayField(moduleExportList, 'argTypesEnhancers');
return {
parameters: combineParameters(...getField(moduleExportList, 'parameters')),
decorators: getArrayField(moduleExportList, 'decorators'),
args: getObjectField(moduleExportList, 'args'),
argsEnhancers: getArrayField(moduleExportList, 'argsEnhancers'),
argTypes: getObjectField(moduleExportList, 'argTypes'),
argTypesEnhancers: getArrayField(moduleExportList, 'argTypesEnhancers'),
argTypesEnhancers: [
...allArgTypeEnhancers.filter((e) => !e.secondPass),
...allArgTypeEnhancers.filter((e) => e.secondPass),
],
globals: getObjectField(moduleExportList, 'globals'),
globalTypes: getObjectField(moduleExportList, 'globalTypes'),
loaders: getArrayField(moduleExportList, 'loaders'),