From 9900b42f07aa20b7d0427c9e3bd9420cc2897636 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 5 Jun 2023 19:25:00 +0200 Subject: [PATCH] app-experiments: WIP non-react extensions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: Johan Haals Co-authored-by: Patrik Oldsberg Co-authored-by: MT Lewis Signed-off-by: Patrik Oldsberg --- packages/app-experiments/src/Experiment1.tsx | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) 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,