From 52fa06875e0b46b5f898fe23c7d4055c3d288ef2 Mon Sep 17 00:00:00 2001 From: Hellgren Heikki Date: Tue, 14 Oct 2025 12:36:28 +0300 Subject: [PATCH] feat(user-settings): add storage api blueprint for nfs Signed-off-by: Hellgren Heikki --- .changeset/sweet-laws-lead.md | 5 +++ plugins/user-settings/report-alpha.api.md | 18 +++++++++++ plugins/user-settings/src/alpha.tsx | 37 +++++++++++++++++++++-- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 .changeset/sweet-laws-lead.md diff --git a/.changeset/sweet-laws-lead.md b/.changeset/sweet-laws-lead.md new file mode 100644 index 0000000000..1d8339d4d5 --- /dev/null +++ b/.changeset/sweet-laws-lead.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +Added user settings storage API blueprint diff --git a/plugins/user-settings/report-alpha.api.md b/plugins/user-settings/report-alpha.api.md index 1c8e844d05..04169de4ac 100644 --- a/plugins/user-settings/report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -3,8 +3,11 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AnyApiFactory } from '@backstage/frontend-plugin-api'; import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; +import { ApiFactory } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; +import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; @@ -21,6 +24,21 @@ const _default: OverridableFrontendPlugin< }, {}, { + 'api:user-settings/storage': ExtensionDefinition<{ + kind: 'api'; + name: 'storage'; + config: {}; + configInput: {}; + output: ExtensionDataRef; + inputs: {}; + params: < + TApi, + TImpl extends TApi, + TDeps extends { [name in string]: unknown }, + >( + params: ApiFactory, + ) => ExtensionBlueprintParams; + }>; 'nav-item:user-settings': ExtensionDefinition<{ kind: 'nav-item'; name: undefined; diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index e71c61febc..060bf4a2b8 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -14,22 +14,53 @@ * limitations under the License. */ import { + ApiBlueprint, coreExtensionData, createExtensionInput, createFrontendPlugin, - PageBlueprint, + discoveryApiRef, + errorApiRef, + fetchApiRef, + identityApiRef, NavItemBlueprint, + PageBlueprint, + storageApiRef, } from '@backstage/frontend-plugin-api'; import { + compatWrapper, convertLegacyRouteRef, convertLegacyRouteRefs, - compatWrapper, } from '@backstage/core-compat-api'; import SettingsIcon from '@material-ui/icons/Settings'; import { settingsRouteRef } from './plugin'; +import { UserSettingsStorage } from './apis'; +import { signalApiRef } from '@backstage/plugin-signals-react'; export * from './translation'; +const userSettingsStorageApi = ApiBlueprint.make({ + name: 'storage', + params: defineParams => + defineParams({ + api: storageApiRef, + deps: { + fetchApi: fetchApiRef, + discoveryApi: discoveryApiRef, + errorApi: errorApiRef, + identityApi: identityApiRef, + signalApi: signalApiRef, + }, + factory: ({ fetchApi, discoveryApi, errorApi, identityApi, signalApi }) => + UserSettingsStorage.create({ + fetchApi, + discoveryApi, + errorApi, + identityApi, + signalApi, + }), + }), +}); + const userSettingsPage = PageBlueprint.makeWithOverrides({ inputs: { providerSettings: createExtensionInput([coreExtensionData.reactElement], { @@ -70,7 +101,7 @@ export const settingsNavItem = NavItemBlueprint.make({ export default createFrontendPlugin({ pluginId: 'user-settings', info: { packageJson: () => import('../package.json') }, - extensions: [userSettingsPage, settingsNavItem], + extensions: [userSettingsStorageApi, userSettingsPage, settingsNavItem], routes: convertLegacyRouteRefs({ root: settingsRouteRef, }),