diff --git a/ui/app/components/clients/page-header.hbs b/ui/app/components/clients/page-header.hbs index 6a852880c8..5d17dd1c67 100644 --- a/ui/app/components/clients/page-header.hbs +++ b/ui/app/components/clients/page-header.hbs @@ -3,13 +3,9 @@ SPDX-License-Identifier: BUSL-1.1 }} - - - Client Usage - - - {{#if @activityTimestamp}} - + + <:subtitle> + {{#if @activityTimestamp}} Dashboard last updated: {{date-format @activityTimestamp "MMM d yyyy, h:mm:ss aaa" withTimeZone=true}} - - {{/if}} - + {{/if}} + + <:description> {{#if (and this.version.isEnterprise @billingStartTime)}} {{! Enterprise should always have a @billingStartTime but as a fallback allow the user to query dates manually. }} {{! A dropdown renders in Clients::DateRange to query specific dates if we have a @billingStartTime }} @@ -55,12 +51,11 @@ {{/if}} - - - + + <:actions> {{#if this.showExportButton}} - - - + + {{#if this.showExportModal}} diff --git a/ui/app/components/recovery/page/header.hbs b/ui/app/components/recovery/page/header.hbs index 4ce37ec039..5b78b4b196 100644 --- a/ui/app/components/recovery/page/header.hbs +++ b/ui/app/components/recovery/page/header.hbs @@ -3,26 +3,19 @@ SPDX-License-Identifier: BUSL-1.1 }} - - {{#if @breadcrumbs}} - + + <:breadcrumbs> + {{#if @breadcrumbs}} - - {{/if}} - - - {{@title}} + {{/if}} + + <:badges> {{#if this.version.isCommunity}} {{/if}} - - - - {{@subtitle}} - - - {{#if @action}} - + + <:actions> + {{#if @action}} - - {{/if}} - \ No newline at end of file + {{/if}} + + \ No newline at end of file diff --git a/ui/app/components/secret-engine/list.hbs b/ui/app/components/secret-engine/list.hbs index 4eedd1c6b5..edfcf16924 100644 --- a/ui/app/components/secret-engine/list.hbs +++ b/ui/app/components/secret-engine/list.hbs @@ -3,26 +3,18 @@ SPDX-License-Identifier: BUSL-1.1 }} - - - - - - - - - - Secrets engines - Secrets engines available in the - {{this.namespace.currentNamespace}} - namespace of the - {{this.version.clusterName}} - cluster. - - + + <:breadcrumbs> + + + <:actions> - - + + {{! Filters section }} diff --git a/ui/app/components/secret-engine/list.ts b/ui/app/components/secret-engine/list.ts index 8316a6aad5..bcf75386df 100644 --- a/ui/app/components/secret-engine/list.ts +++ b/ui/app/components/secret-engine/list.ts @@ -86,6 +86,19 @@ export default class SecretEngineList extends Component { }, ]; + get breadcrumbs() { + return [ + { + label: 'Vault', + route: 'vault.cluster.dashboard', + icon: 'vault', + }, + { + label: 'Secrets engines', + }, + ]; + } + get displayableBackends() { return this.args.secretEngines.filter((backend) => backend.shouldIncludeInList); } diff --git a/ui/app/components/secret-engines/catalog.hbs b/ui/app/components/secret-engines/catalog.hbs index 5b1c412709..b620b6f2bd 100644 --- a/ui/app/components/secret-engines/catalog.hbs +++ b/ui/app/components/secret-engines/catalog.hbs @@ -3,14 +3,11 @@ SPDX-License-Identifier: BUSL-1.1 }} - - - - - - - - + + <:breadcrumbs> + + + {{#if @pluginCatalogError}}
diff --git a/ui/app/components/secret-engines/catalog.ts b/ui/app/components/secret-engines/catalog.ts index 736c5a22ae..e70718b436 100644 --- a/ui/app/components/secret-engines/catalog.ts +++ b/ui/app/components/secret-engines/catalog.ts @@ -43,6 +43,18 @@ export default class SecretEnginesCatalogComponent extends Component { @tracked flyoutPlugin: unknown = null; @tracked flyoutPluginType: string | null = null; + get breadcrumbs() { + return [ + { + label: 'Secrets engines', + route: 'vault.cluster.secrets.backends', + }, + { + label: 'Enable secrets engine', + }, + ]; + } + get secretEngines() { // If an enterprise license is present, return all secret engines; // otherwise, return only the secret engines supported in OSS. diff --git a/ui/lib/core/addon/components/page-header.hbs b/ui/lib/core/addon/components/page-header.hbs deleted file mode 100644 index ffaf839301..0000000000 --- a/ui/lib/core/addon/components/page-header.hbs +++ /dev/null @@ -1,17 +0,0 @@ -{{! - Copyright IBM Corp. 2016, 2025 - SPDX-License-Identifier: BUSL-1.1 -}} - -{{! DEPRECATED: Use instead. uses the new Hds page header and should be preferred over this component. }} - \ No newline at end of file diff --git a/ui/lib/core/addon/components/page/header.hbs b/ui/lib/core/addon/components/page/header.hbs index 163e0bc7be..1f9621c41b 100644 --- a/ui/lib/core/addon/components/page/header.hbs +++ b/ui/lib/core/addon/components/page/header.hbs @@ -18,7 +18,9 @@ {{yield to="badges"}} {{/if}} - {{#if @subtitle}} + {{#if (has-block "subtitle")}} + {{yield to="subtitle"}} + {{else if @subtitle}} {{@subtitle}} {{/if}} {{#if (has-block "description")}} diff --git a/ui/lib/core/app/components/page-header.js b/ui/lib/core/app/components/page-header.js deleted file mode 100644 index 13e222d028..0000000000 --- a/ui/lib/core/app/components/page-header.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Copyright IBM Corp. 2016, 2025 - * SPDX-License-Identifier: BUSL-1.1 - */ - -export { default } from 'core/components/page-header'; diff --git a/ui/tests/acceptance/clients/counts-test.js b/ui/tests/acceptance/clients/counts-test.js index 2895ecf652..6c61ecd56f 100644 --- a/ui/tests/acceptance/clients/counts-test.js +++ b/ui/tests/acceptance/clients/counts-test.js @@ -151,7 +151,7 @@ module('Acceptance | clients | counts', function (hooks) { await click(CLIENT_COUNT.dateRange.edit); await click(CLIENT_COUNT.dateRange.dropdownOption(1)); assert - .dom(CLIENT_COUNT.activityTimestamp) + .dom(GENERAL.hdsPageHeaderSubtitle) .hasTextContaining(`Dashboard last updated: ${format(STATIC_NOW, 'MMM d yyyy')}`); // Save URL with query params before clicking refresh const url = currentURL(); @@ -163,7 +163,7 @@ module('Acceptance | clients | counts', function (hooks) { assert.true(this.refreshSpy.calledOnce, 'router.refresh() is called once'); assert.strictEqual(currentURL(), url, 'url is the same after clicking refresh'); assert - .dom(CLIENT_COUNT.activityTimestamp) + .dom(GENERAL.hdsPageHeaderSubtitle) .hasTextContaining(`Dashboard last updated: ${format(fakeUpdatedNow, 'MMM d yyyy')}`); }); @@ -178,7 +178,7 @@ module('Acceptance | clients | counts', function (hooks) { await click(CLIENT_COUNT.dateRange.edit); await click(CLIENT_COUNT.dateRange.dropdownOption(1)); assert - .dom(CLIENT_COUNT.activityTimestamp) + .dom(GENERAL.hdsPageHeaderSubtitle) .hasTextContaining(`Dashboard last updated: ${format(STATIC_NOW, 'MMM d yyyy')}`); // Save URL with query params before clicking refresh const url = currentURL(); @@ -190,7 +190,7 @@ module('Acceptance | clients | counts', function (hooks) { assert.true(this.refreshSpy.calledOnce, 'router.refresh() is called once'); assert.strictEqual(currentURL(), url, 'url is the same after clicking refresh'); assert - .dom(CLIENT_COUNT.activityTimestamp) + .dom(GENERAL.hdsPageHeaderSubtitle) .hasTextContaining(`Dashboard last updated: ${format(fakeUpdatedNow, 'MMM d yyyy')}`); }); }); diff --git a/ui/tests/helpers/clients/client-count-selectors.ts b/ui/tests/helpers/clients/client-count-selectors.ts index ff90ef57ce..4746069330 100644 --- a/ui/tests/helpers/clients/client-count-selectors.ts +++ b/ui/tests/helpers/clients/client-count-selectors.ts @@ -7,7 +7,6 @@ import { camelize } from '@ember/string'; // TODO: separate nested into distinct exported consts export const CLIENT_COUNT = { - activityTimestamp: '[data-test-activity-timestamp]', card: (name: string) => `[data-test-card="${name}"]`, counts: { description: '[data-test-counts-description]',