From f7bc228aa9eebba2bc11e0aa63571800f54515e8 Mon Sep 17 00:00:00 2001 From: mario ma Date: Wed, 3 Dec 2025 11:59:59 +0800 Subject: [PATCH] feat: Support to set defaultLanguage and availableLanguages in new frontend system Signed-off-by: mario ma --- .changeset/gentle-singers-love.md | 5 ++++ packages/app-next/app-config.yaml | 5 ++++ plugins/app/report.api.md | 22 +++++++++++++--- plugins/app/src/extensions/AppLanguageApi.ts | 27 +++++++++++++++----- 4 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 .changeset/gentle-singers-love.md diff --git a/.changeset/gentle-singers-love.md b/.changeset/gentle-singers-love.md new file mode 100644 index 0000000000..0fb2dbc047 --- /dev/null +++ b/.changeset/gentle-singers-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app': patch +--- + +Support to set defaultLanguage and availableLanguages in new frontend system diff --git a/packages/app-next/app-config.yaml b/packages/app-next/app-config.yaml index dcaddfb9bf..1121cfc0d5 100644 --- a/packages/app-next/app-config.yaml +++ b/packages/app-next/app-config.yaml @@ -21,6 +21,11 @@ app: ownerEntityRefs: [cubic-belugas] extensions: + # set availableLanguages example + - api:app/app-language: + config: + availableLanguages: ['en', 'es', 'fr', 'de', 'ja'] + defaultLanguage: 'en' - entity-card:org/members-list: config: showAggregateMembersToggle: true diff --git a/plugins/app/report.api.md b/plugins/app/report.api.md index 313d09cfee..c9aa1cf9f7 100644 --- a/plugins/app/report.api.md +++ b/plugins/app/report.api.md @@ -232,12 +232,26 @@ const appPlugin: OverridableFrontendPlugin< ) => ExtensionBlueprintParams; }>; 'api:app/app-language': OverridableExtensionDefinition<{ + config: { + defaultLanguage: string | undefined; + availableLanguages: string[] | undefined; + }; + configInput: { + defaultLanguage?: string | undefined; + availableLanguages?: string[] | undefined; + }; + output: ExtensionDataRef; + inputs: { + [x: string]: ExtensionInput< + ExtensionDataRef, + { + singleton: boolean; + optional: boolean; + } + >; + }; kind: 'api'; name: 'app-language'; - config: {}; - configInput: {}; - output: ExtensionDataRef; - inputs: {}; params: < TApi, TImpl extends TApi, diff --git a/plugins/app/src/extensions/AppLanguageApi.ts b/plugins/app/src/extensions/AppLanguageApi.ts index 325dffa2fd..4f605aa30f 100644 --- a/plugins/app/src/extensions/AppLanguageApi.ts +++ b/plugins/app/src/extensions/AppLanguageApi.ts @@ -19,12 +19,25 @@ import { AppLanguageSelector } from '../../../../packages/core-app-api/src/apis/ import { appLanguageApiRef } from '@backstage/core-plugin-api/alpha'; import { ApiBlueprint } from '@backstage/frontend-plugin-api'; -export const AppLanguageApi = ApiBlueprint.make({ +export const AppLanguageApi = ApiBlueprint.makeWithOverrides({ name: 'app-language', - params: defineParams => - defineParams({ - api: appLanguageApiRef, - deps: {}, - factory: () => AppLanguageSelector.createWithStorage(), - }), + config: { + schema: { + defaultLanguage: z => z.string().optional(), + availableLanguages: z => z.array(z.string()).optional(), + }, + }, + factory(originalFactory, { config }) { + return originalFactory(defineParams => + defineParams({ + api: appLanguageApiRef, + deps: {}, + factory: () => + AppLanguageSelector.createWithStorage({ + defaultLanguage: config.defaultLanguage, + availableLanguages: config.availableLanguages, + }), + }), + ); + }, });