diff --git a/packages/app-experiments/src/Experiment1.tsx b/packages/app-experiments/src/Experiment1.tsx index c5a4bc660b..b086af215c 100644 --- a/packages/app-experiments/src/Experiment1.tsx +++ b/packages/app-experiments/src/Experiment1.tsx @@ -29,40 +29,39 @@ App structure: // import { redExtensionPointRef } from 'wherever'; -type Extension = { +type Extension = { factory(instanceOptions: { id: string; config: TInstanceConfig }): TOutput; }; -type ExtensionInstanceConfig = { +type ExtensionInstanceConfig = { id: string; config: TInstanceConfig; // what should point be for root point?: string; - extension: Extension; + extension: Extension; }; -type ExtensionInstance = { +type ExtensionInstance = { id: string; // what should point be for root point?: string; - output: ComponentType; + output: TOutput; }; const BackstageAppContext = createContext<{ - extensionInstances: ExtensionInstance[]; + extensionInstances: ExtensionInstance[]; }>({ extensionInstances: [] }); const container = { - createExtension(extensionOptions: { - render: (options: { id: string; config: TInstanceConfig }) => JSX.Element; - }): Extension { + createExtension(extensionOptions: { + render: (options: { id: string; config: TInstanceConfig }) => TOutput; + }): Extension { return { factory(instanceOptions) { - return () => - extensionOptions.render({ - id: instanceOptions.id, - config: instanceOptions.config, - }); + return extensionOptions.render({ + id: instanceOptions.id, + config: instanceOptions.config, + }); }, }; }, @@ -78,7 +77,8 @@ const ExtensionInstanceDerp = (props: { id: string }) => { throw new Error(`No extension instance found with id ${id}`); } - const { output: ComponentInstance } = value; + // TODO: Validation? + const ComponentInstance = value.output as React.ComponentType; return ; }; @@ -115,8 +115,8 @@ const Box = container.createExtension({ }); function createExtensionInstances( - instanceConfigs: ExtensionInstanceConfig[], -): ExtensionInstance[] { + instanceConfigs: ExtensionInstanceConfig[], +): ExtensionInstance[] { return instanceConfigs.map(instanceConfig => ({ id: instanceConfig.id, point: instanceConfig.point,