From d78ccde5eb8ec18f236422557e8e6274b2af810e Mon Sep 17 00:00:00 2001 From: Jim Ehrismann Date: Wed, 25 Nov 2020 18:28:25 -0500 Subject: [PATCH] [WIP] adding params object to page registration Signed-off-by: Jim Ehrismann --- src/extensions/registries/page-registry.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/extensions/registries/page-registry.ts b/src/extensions/registries/page-registry.ts index 6eb2194205..14c23610d7 100644 --- a/src/extensions/registries/page-registry.ts +++ b/src/extensions/registries/page-registry.ts @@ -16,6 +16,8 @@ export interface PageRegistration { * When not provided, first registered page without "id" would be used for page-menus without target.pageId for same extension */ id?: string; + + params?: object; /** * Strict route matching to provided page-id, read also: https://reactrouter.com/web/api/NavLink/exact-bool * In case when more than one page registered at same extension "pageId" is required to identify different pages, @@ -34,6 +36,7 @@ export interface PageRegistration { export interface RegisteredPage extends PageRegistration { extensionId: string; // required for compiling registered page to url with page-menu-target to compare routePath: string; // full route-path to registered extension page + params?: object; // default values of page parameters, empty value could mean optional?? } export interface PageComponents { @@ -57,11 +60,18 @@ export class PageRegistry extends BaseRegistry { const itemArray = recitfy(items); let registeredPages: RegisteredPage[] = []; try { - registeredPages = itemArray.map(page => ({ - ...page, - extensionId: ext.name, - routePath: getExtensionPageUrl({ extensionId: ext.name, pageId: page.id }), - })); + registeredPages = itemArray.map(page => { + let idPath: string = page.id; + if (page.params) { + // build the route path with :params + idPath = [idPath, ...Object.keys(page.params)].join("/:"); + } + return { + ...page, + extensionId: ext.name, + routePath: getExtensionPageUrl({ extensionId: ext.name, pageId: idPath }), + }; + }); } catch (err) { logger.error(`[EXTENSION]: page-registration failed`, { items,