diff --git a/src/extensions/registries/page-registry.ts b/src/extensions/registries/page-registry.ts index aa788681d5..996f62e346 100644 --- a/src/extensions/registries/page-registry.ts +++ b/src/extensions/registries/page-registry.ts @@ -26,6 +26,7 @@ import { observer } from "mobx-react"; import { BaseRegistry } from "./base-registry"; import { LensExtension, LensExtensionId, sanitizeExtensionName } from "../lens-extension"; import { createPageParam, PageParam, PageParamInit, searchParamsOptions } from "../../renderer/navigation"; +import { computed, observable } from "mobx"; export interface PageRegistration { /** @@ -92,6 +93,8 @@ export function getExtensionPageUrl(target: PageTarget): string { } class PageRegistry extends BaseRegistry { + protected knownUrls = observable.set(); + protected getRegisteredItem(page: PageRegistration, ext: LensExtension): RegisteredPage { const { id: pageId } = page; const extensionId = ext.name; @@ -99,6 +102,8 @@ class PageRegistry extends BaseRegistry { const components = this.normalizeComponents(page.components, params); const url = getExtensionPageUrl({ extensionId, pageId }); + this.knownUrls.add(url); + return { id: pageId, extensionId, params, components, url, }; @@ -135,10 +140,7 @@ class PageRegistry extends BaseRegistry { ); if (notAStringValue && !(parse || stringify)) { - throw new Error( - `PageRegistry: param's "${paramName}" initialization has failed: - paramInit.parse() and paramInit.stringify() are required for non string | string[] "defaultValue"`, - ); + throw new Error(`PageRegistry: param's "${paramName}" initialization has failed: paramInit.parse() and paramInit.stringify() are required for non string | string[] "defaultValue"`); } paramInit.defaultValue = value; @@ -152,6 +154,13 @@ class PageRegistry extends BaseRegistry { return normalizedParams; } + /** + * Get the list of all known URLS that have been registered with this registry. + */ + @computed get redirectEntries() { + return [...this.knownUrls]; + } + getByPageTarget(target: PageTarget): RegisteredPage | null { return this.getItems().find(page => page.extensionId === target.extensionId && page.id === target.pageId) || null; } diff --git a/src/renderer/cluster-frame.tsx b/src/renderer/cluster-frame.tsx index 0786ca18a5..49c5e0d118 100755 --- a/src/renderer/cluster-frame.tsx +++ b/src/renderer/cluster-frame.tsx @@ -211,6 +211,12 @@ export class ClusterFrame extends React.Component { {this.renderExtensionTabLayoutRoutes()} {this.renderExtensionRoutes()} + { + ClusterPageRegistry + .getInstance() + .redirectEntries + .map(url => ) + }