UI: Ember 5 deprecation stragglers (#26666)

* use router for transitions within replication engine

* fix inverse value on group-alias belongsTo relationship

* Always call super.willDestroy after custom hooks

* fix deprecation ember-engines.deprecation-camelized-engine-names

* graceful fallback on message-error if adapterError does not include errors

* use router.replaceWith during tests on logout

* fix more links
This commit is contained in:
Chelsea Shaw
2024-04-30 11:22:08 -05:00
committed by GitHub
parent b6beaab156
commit aa95f003a8
15 changed files with 37 additions and 18 deletions

View File

@@ -15,7 +15,7 @@ export default class App extends Application {
engines = {
'config-ui': {
dependencies: {
services: ['auth', 'flash-messages', 'namespace', 'router', 'store', 'version', 'customMessages'],
services: ['auth', 'flash-messages', 'namespace', 'router', 'store', 'version', 'custom-messages'],
},
},
'open-api-explorer': {

View File

@@ -99,7 +99,7 @@ export function tabsForAuthSection([authMethodModel, sectionType = 'authSettings
tabs.push({
label: 'Method Options',
route: 'vault.cluster.settings.auth.configure.section',
routeParams: ['options'],
routeParams: [authMethodModel.id, 'options'],
});
return tabs;
}

View File

@@ -14,7 +14,7 @@ export default IdentityModel.extend({
formFields: computed(function () {
return ['name', 'mountAccessor'];
}),
group: belongsTo('identity/group', { readOnly: true, async: false }),
group: belongsTo('identity/group', { readOnly: true, async: false, inverse: 'alias' }),
name: attr('string'),
canonicalId: attr('string'),

View File

@@ -45,9 +45,8 @@ export default Route.extend(ModelBoundaryRoute, {
queryParams.namespace = ns;
}
if (Ember.testing) {
// TODO: cleanup this replaceWith instance. Using router.replaceWith causes test failures
// Don't redirect on the test
this.replaceWith('vault.cluster.auth', { queryParams });
this.router.replaceWith('vault.cluster.auth', { queryParams });
} else {
const { cluster_name } = this.paramsFor('vault.cluster');
location.assign(this.router.urlFor('vault.cluster.auth', cluster_name, { queryParams }));

View File

@@ -37,12 +37,12 @@ export default class MessagesList extends Component {
@tracked userConfirmation = '';
willDestroy() {
super.willDestroy();
const noTeardown = this.store && !this.store.isDestroying;
const { model } = this;
if (noTeardown && model && model.isDirty && !model.isDestroyed && !model.isDestroying) {
model.rollbackAttributes();
}
super.willDestroy();
}
validate() {

View File

@@ -16,7 +16,7 @@ export default class ConfigUiEngine extends Engine {
modulePrefix = modulePrefix;
Resolver = Resolver;
dependencies = {
services: ['auth', 'store', 'flash-messages', 'namespace', 'router', 'version', 'customMessages'],
services: ['auth', 'store', 'flash-messages', 'namespace', 'router', 'version', 'custom-messages'],
};
}

View File

@@ -39,7 +39,7 @@ class MessageError extends Component {
if (!adapterError) {
return null;
}
if (adapterError.errors.length > 0) {
if (adapterError.errors?.length > 0) {
return adapterError.errors.map((e) => {
if (typeof e === 'object') return e.title || e.message || JSON.stringify(e);
return e;

View File

@@ -39,7 +39,7 @@
<ul>
{{#if options.hasOverview}}
<li>
<LinkTo @route="vault.cluster.secrets.backend.overview" data-test-tab="overview">
<LinkTo @route="vault.cluster.secrets.backend.overview" @model={{@model.id}} data-test-tab="overview">
Overview
</LinkTo>
</li>
@@ -56,7 +56,11 @@
</li>
{{/each}}
<li>
<LinkTo @route="vault.cluster.secrets.backend.configuration" data-test-configuration-tab={{true}}>
<LinkTo
@route="vault.cluster.secrets.backend.configuration"
@model={{@model.id}}
data-test-configuration-tab={{true}}
>
Configuration
</LinkTo>
</li>
@@ -72,6 +76,7 @@
<li>
<LinkTo
@route="vault.cluster.secrets.backend.list-root"
@model={{@model.id}}
@current-when="vault.cluster.secrets.backend.list-root vault.cluster.secrets.backend.list"
>
{{capitalize (pluralize options.item)}}
@@ -79,7 +84,11 @@
</li>
{{/if}}
<li>
<LinkTo @route="vault.cluster.secrets.backend.configuration" data-test-configuration-tab={{true}}>
<LinkTo
@route="vault.cluster.secrets.backend.configuration"
@model={{@model.id}}
data-test-configuration-tab={{true}}
>
Configuration
</LinkTo>
</li>

View File

@@ -5,8 +5,12 @@
<KvPageHeader @breadcrumbs={{this.breadcrumbs}} @mountName={{this.mountName}}>
<:tabLinks>
<li><LinkTo @route="list" data-test-secrets-tab="Secrets">Secrets</LinkTo></li>
<li><LinkTo @route="configuration" data-test-secrets-tab="Configuration">Configuration</LinkTo></li>
<li><LinkTo @route="list" @model={{this.mountName}} data-test-secrets-tab="Secrets">Secrets</LinkTo></li>
<li><LinkTo
@route="configuration"
@model={{this.mountName}}
data-test-secrets-tab="Configuration"
>Configuration</LinkTo></li>
</:tabLinks>
</KvPageHeader>

View File

@@ -19,7 +19,8 @@ export default Base.extend({
.findRecord('path-filter-config', id)
.then(() => {
// if we find a record, transition to the edit view
return this.transitionTo('mode.secondaries.config-edit', id)
return this.router
.transitionTo('vault.cluster.replication.mode.secondaries.config-edit', id)
.followRedirects()
.then(() => {
flash.info(

View File

@@ -25,7 +25,7 @@ export default Base.extend({
!cluster[replicationMode].isPrimary ||
!cluster.canAddSecondary
) {
return this.transitionTo('mode', replicationMode);
return this.router.transitionTo('vault.cluster.replication.mode', replicationMode);
}
},
});

View File

@@ -31,7 +31,7 @@ export default Base.extend({
replicationMode !== 'performance' ||
!cluster[replicationMode].isPrimary
) {
return this.transitionTo('mode', cluster.name, replicationMode);
return this.router.transitionTo('vault.cluster.replication.mode', cluster.name, replicationMode);
}
},
});

View File

@@ -13,7 +13,7 @@ export default Base.extend({
redirect(model) {
const replicationMode = this.replicationMode;
if (!model[replicationMode].isPrimary || !model.canRevokeSecondary) {
return this.transitionTo('index');
return this.router.transitionTo('vault.cluster.replication.index');
}
},

View File

@@ -41,8 +41,8 @@ export default class SyncSecretsDestinationsPageComponent extends Component<Args
}
willDestroy(): void {
super.willDestroy();
this.router.off('routeDidChange', this.focusNameFilter);
super.willDestroy();
}
focusNameFilter(transition?: Transition) {

View File

@@ -68,6 +68,8 @@ module('Acceptance | secrets/secret/create, read, delete', function (hooks) {
assert
.dom(PAGE.infoRowValue('Automate secret deletion'))
.hasText('1 second', 'displays the delete version after set when configuring the secret-engine');
// [BANDAID] avoid error from missing param for links in SecretEdit > KeyValueHeader
await visit('/vault/secrets');
await deleteEngine(enginePath, assert);
});
@@ -77,6 +79,8 @@ module('Acceptance | secrets/secret/create, read, delete', function (hooks) {
await runCmd(['vault write sys/mounts/test type=kv', 'refresh', 'vault write test/a keys=a keys=b']);
await showPage.visit({ backend: 'test', id: 'a' });
assert.ok(showPage.editIsPresent, 'renders the page properly');
// [BANDAID] avoid error from missing param for links in SecretEdit > KeyValueHeader
await visit('/vault/secrets');
await deleteEngine('test', assert);
});
});
@@ -246,6 +250,8 @@ module('Acceptance | secrets/secret/create, read, delete', function (hooks) {
`${path}: show page renders correctly`
);
}
// [BANDAID] avoid error from missing param for links in SecretEdit > KeyValueHeader
await visit('/vault/secrets');
await deleteEngine(backend, assert);
});