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', () => { diff --git a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts index 0d41ffbb26..f51c4909b8 100644 --- a/Composer/packages/extension-client/src/hooks/useMenuConfig.ts +++ b/Composer/packages/extension-client/src/hooks/useMenuConfig.ts @@ -8,7 +8,22 @@ 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 = {} 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 implementedMenuSchema; + }, [plugins.uiSchema, sdkSchema]); }