diff --git a/apps/aurora-portal/scripts/extensions/install.ts b/apps/aurora-portal/scripts/extensions/install.ts index 9b3985b..add1b09 100644 --- a/apps/aurora-portal/scripts/extensions/install.ts +++ b/apps/aurora-portal/scripts/extensions/install.ts @@ -21,8 +21,11 @@ type Error = { const generateExtensionsImportFiles = (extensionImports: ExtensionImports[] = []): void => { const clientImports: string[] = [] const serverImports: string[] = [] - const clientExports = [`export const clientExtensions = [`] - const serverExports = [`export const extensionRouters = {`] + const clientExports: string[] = [] + const serverExports: string[] = [] + + clientExports.push(`export const clientExtensions = [`) + serverExports.push(`export const extensionRouters = {`) for (const imports of extensionImports) { if (imports?.clientImports?.length) { diff --git a/apps/aurora-portal/src/client/Shell/AppContent.tsx b/apps/aurora-portal/src/client/Shell/AppContent.tsx index 3e5a614..bd3d263 100644 --- a/apps/aurora-portal/src/client/Shell/AppContent.tsx +++ b/apps/aurora-portal/src/client/Shell/AppContent.tsx @@ -1,4 +1,4 @@ -import { Suspense } from "react" +import React, { Suspense } from "react" import { Breadcrumb } from "./Breadcrumb" import { Home } from "./Home" @@ -11,23 +11,32 @@ import { Route, Switch } from "wouter" import { MainNavigation } from "./Navigation/MainNavigation" import { useAuth } from "./AuthProvider" import { ErrorBoundary } from "react-error-boundary" - -type RouterScopes = keyof typeof trpcClient -import { lazy, ReactNode } from "react" +import { lazy } from "react" import { TrpcClient } from "../trpcClient" import { clientExtensions } from "../generated/extensions" +type RouterScopes = keyof typeof trpcClient + interface ExtensionProps { - client: TrpcClient + client: TrpcClient[RouterScopes] getTokenFunc: () => string } -type Extension = (props: ExtensionProps) => ReactNode +interface Extension { + id: string + name: string + navigation: { + label: string + scope: string[] + } + App: Promise<{ default: React.ComponentType }> + Logo?: Promise<{ default: React.ComponentType }> +} -const extensions = clientExtensions.map((ext) => ({ +const extensions = clientExtensions.map((ext: Extension) => ({ ...ext, - App: lazy(() => ext.App) as Extension, - Logo: ext.Logo ? lazy(() => ext.Logo) : null, + App: lazy(() => ext.App), + Logo: lazy(() => ext.Logo || Promise.resolve({ default: () => null })), })) export function AppContent() { diff --git a/apps/aurora-portal/src/server/routers.ts b/apps/aurora-portal/src/server/routers.ts index 94e0ca1..69ea1fe 100644 --- a/apps/aurora-portal/src/server/routers.ts +++ b/apps/aurora-portal/src/server/routers.ts @@ -1,6 +1,7 @@ import { identityRouters } from "./Identity/routers" import { computeRouters } from "./Compute/routers" import { extensionRouters } from "./generated/extensions" + import { auroraRouter, mergeRouters } from "./trpc" const coreRouter = mergeRouters(auroraRouter(identityRouters), auroraRouter(computeRouters))