From 3ae77d1fa27ebf6ad43c37e604f56db150068680 Mon Sep 17 00:00:00 2001 From: Ze Ye Date: Mon, 28 Sep 2020 13:49:27 +0800 Subject: [PATCH 1/4] filter $kinds not in sdk.schema from menu config --- .../extension-client/src/hooks/useMenuConfig.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts index 0d41ffbb26..1a86138823 100644 --- a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts +++ b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts @@ -8,7 +8,20 @@ import { EditorExtensionContext } from '../EditorExtensionContext'; import { MenuUISchema } from '../types'; export function useMenuConfig(): MenuUISchema { - const { plugins } = useContext(EditorExtensionContext); + const { plugins, shellData } = useContext(EditorExtensionContext); + const uiSchema = plugins.uiSchema || {}; + const sdkSchema = shellData.schemas?.sdk; + const sdkDefinitions = sdkSchema?.content?.definitions || {}; - return useMemo(() => mapValues(plugins.uiSchema, 'menu'), [plugins.uiSchema]); + return useMemo(() => { + const menuSchema = mapValues(uiSchema, 'menu') as MenuUISchema; + const implementedMenuSchema = Object.entries(menuSchema).reduce((result, [$kind, menuOpt]) => { + // Filter out those $kinds implemented in both sdk.schema and uischema + if (sdkDefinitions[$kind] && menuOpt) { + result[$kind] = menuOpt; + } + return result; + }, {} as MenuUISchema); + return implementedMenuSchema; + }, [plugins.uiSchema, sdkSchema]); } From e1a6ee1c4ae488baec1427da4f76e2d588db6313 Mon Sep 17 00:00:00 2001 From: Ze Ye Date: Mon, 28 Sep 2020 14:10:36 +0800 Subject: [PATCH 2/4] update comment --- Composer/packages/extension-client/src/hooks/useMenuConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts index 1a86138823..55b8e51714 100644 --- a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts +++ b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts @@ -16,7 +16,7 @@ export function useMenuConfig(): MenuUISchema { return useMemo(() => { const menuSchema = mapValues(uiSchema, 'menu') as MenuUISchema; const implementedMenuSchema = Object.entries(menuSchema).reduce((result, [$kind, menuOpt]) => { - // Filter out those $kinds implemented in both sdk.schema and uischema + // Take those $kinds implemented in both sdk.schema and uischema if (sdkDefinitions[$kind] && menuOpt) { result[$kind] = menuOpt; } From 3ea05a6e4879aa1282bbfc3063cc9e1aea8b43fd Mon Sep 17 00:00:00 2001 From: Ze Ye Date: Wed, 30 Sep 2020 10:54:22 +0800 Subject: [PATCH 3/4] use forEach instead of reduce --- .../extension-client/src/hooks/useMenuConfig.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts index 55b8e51714..f51c4909b8 100644 --- a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts +++ b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts @@ -15,13 +15,15 @@ export function useMenuConfig(): MenuUISchema { return useMemo(() => { const menuSchema = mapValues(uiSchema, 'menu') as MenuUISchema; - const implementedMenuSchema = Object.entries(menuSchema).reduce((result, [$kind, menuOpt]) => { - // Take those $kinds implemented in both sdk.schema and uischema - if (sdkDefinitions[$kind] && menuOpt) { - result[$kind] = menuOpt; + const implementedMenuSchema = {} as MenuUISchema; + + // Keep those $kinds implemented in both sdk.schema and uischema + Object.entries(menuSchema).forEach(([$kind, menuOpt]) => { + if (menuOpt && sdkDefinitions[$kind]) { + implementedMenuSchema[$kind] = menuOpt; } - return result; - }, {} as MenuUISchema); + }); + return implementedMenuSchema; }, [plugins.uiSchema, sdkSchema]); } From ca6fa62169ff92e9d7ea46516c1dd8834054f7ee Mon Sep 17 00:00:00 2001 From: Ze Ye Date: Wed, 30 Sep 2020 10:58:35 +0800 Subject: [PATCH 4/4] fix UT --- .../src/hooks/__tests__/useMenuConfig.test.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx b/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx index 9fa50c6f35..96fb9b543d 100644 --- a/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx +++ b/Composer/packages/extension-client/src/hooks/__tests__/useMenuConfig.test.tsx @@ -20,9 +20,22 @@ const plugins = { }, }; +const shellData = { + schemas: { + sdk: { + content: { + definitions: { + foo: 'foo', + bar: 'bar', + }, + }, + }, + }, +}; + const wrapper: React.FC = ({ children }) => ( // @ts-expect-error - {children} + {children} ); describe('useMenuConfig', () => {