5c2a08de6d
* Update browserslist * Add browserslistrc * ember-cli-update --to 3.26, fix conflicts * Run codemodes that start with ember-* * More codemods - before cp* * More codemods (curly data-test-*) * WIP ember-basic-dropdown template errors * updates ember-basic-dropdown and related deps to fix build issues * updates basic dropdown instances to new version API * updates more deps -- ember-template-lint is working again * runs no-implicit-this codemod * creates and runs no-quoteless-attributes codemod * runs angle brackets codemod * updates lint:hbs globs to only touch hbs files * removes yield only templates * creates and runs deprecated args transform * supresses lint error for invokeAction on LinkTo component * resolves remaining ambiguous path lint errors * resolves simple-unless lint errors * adds warnings for deprecated tagName arg on LinkTo components * adds warnings for remaining curly component invocation * updates global template lint rules * resolves remaining template lint errors * disables some ember specfic lint rules that target pre octane patterns * js lint fix run * resolves remaining js lint errors * fixes test run * adds npm-run-all dep * fixes test attribute issues * fixes console acceptance tests * fixes tests * adds yield only wizard/tutorial-active template * fixes more tests * attempts to fix more flaky tests * removes commented out settled in transit test * updates deprecations workflow and adds initializer to filter by version * updates flaky policies acl old test * updates to flaky transit test * bumps ember deps down to LTS version * runs linters after main merge * fixes client count tests after bad merge conflict fixes * fixes client count history test * more updates to lint config * another round of hbs lint fixes after extending stylistic rule * updates lint-staged commands * removes indent eslint rule since it seems to break things * fixes bad attribute in transform-edit-form template * test fixes * fixes enterprise tests * adds changelog * removes deprecated ember-concurrency-test-waiters dep and adds @ember/test-waiters * flaky test fix Co-authored-by: hashishaw <cshaw@hashicorp.com>
118 lines
4 KiB
JavaScript
118 lines
4 KiB
JavaScript
import TransformBase, { addToList, removeFromList } from './transform-edit-base';
|
||
|
||
export default TransformBase.extend({
|
||
initialTransformations: null,
|
||
|
||
init() {
|
||
this._super(...arguments);
|
||
this.set('initialTransformations', this.model.transformations);
|
||
},
|
||
|
||
handleUpdateTransformations(updateTransformations, roleId, type = 'update') {
|
||
if (!updateTransformations) return;
|
||
const backend = this.model.backend;
|
||
const promises = updateTransformations.map((transform) => {
|
||
return this.store
|
||
.queryRecord('transform', {
|
||
backend,
|
||
id: transform.id,
|
||
})
|
||
.then(function (transformation) {
|
||
let roles = transformation.allowed_roles;
|
||
if (transform.action === 'ADD') {
|
||
roles = addToList(roles, roleId);
|
||
} else if (transform.action === 'REMOVE') {
|
||
roles = removeFromList(roles, roleId);
|
||
}
|
||
|
||
transformation.setProperties({
|
||
backend,
|
||
allowed_roles: roles,
|
||
});
|
||
|
||
return transformation.save().catch((e) => {
|
||
return { errorStatus: e.httpStatus, ...transform };
|
||
});
|
||
});
|
||
});
|
||
|
||
Promise.all(promises).then((res) => {
|
||
let hasError = res.find((r) => !!r.errorStatus);
|
||
if (hasError) {
|
||
let errorAdding = res.find((r) => r.errorStatus === 403 && r.action === 'ADD');
|
||
let errorRemoving = res.find((r) => r.errorStatus === 403 && r.action === 'REMOVE');
|
||
|
||
let message =
|
||
'The edits to this role were successful, but allowed_roles for its transformations was not edited due to a lack of permissions.';
|
||
if (type === 'create') {
|
||
message =
|
||
'Transformations have been attached to this role, but the role was not added to those transformations’ allowed_roles due to a lack of permissions.';
|
||
} else if (errorAdding && errorRemoving) {
|
||
message =
|
||
'This role was edited to both add and remove transformations; however, this role was not added or removed from those transformations’ allowed_roles due to a lack of permissions.';
|
||
} else if (errorAdding) {
|
||
message =
|
||
'This role was edited to include new transformations, but this role was not added to those transformations’ allowed_roles due to a lack of permissions.';
|
||
} else if (errorRemoving) {
|
||
message =
|
||
'This role was edited to remove transformations, but this role was not removed from those transformations’ allowed_roles due to a lack of permissions.';
|
||
}
|
||
this.flashMessages.stickyInfo(message);
|
||
}
|
||
});
|
||
},
|
||
|
||
actions: {
|
||
createOrUpdate(type, event) {
|
||
event.preventDefault();
|
||
|
||
this.applyChanges('save', () => {
|
||
const roleId = this.model.id;
|
||
const newModelTransformations = this.model.transformations;
|
||
|
||
if (!this.initialTransformations) {
|
||
this.handleUpdateTransformations(
|
||
newModelTransformations.map((t) => ({
|
||
id: t,
|
||
action: 'ADD',
|
||
})),
|
||
roleId,
|
||
type
|
||
);
|
||
return;
|
||
}
|
||
|
||
const updateTransformations = [...newModelTransformations, ...this.initialTransformations]
|
||
.map((t) => {
|
||
if (this.initialTransformations.indexOf(t) < 0) {
|
||
return {
|
||
id: t,
|
||
action: 'ADD',
|
||
};
|
||
}
|
||
if (newModelTransformations.indexOf(t) < 0) {
|
||
return {
|
||
id: t,
|
||
action: 'REMOVE',
|
||
};
|
||
}
|
||
return null;
|
||
})
|
||
.filter((t) => !!t);
|
||
this.handleUpdateTransformations(updateTransformations, roleId);
|
||
});
|
||
},
|
||
|
||
delete() {
|
||
const roleId = this.model?.id;
|
||
const roleTransformations = this.model?.transformations || [];
|
||
const updateTransformations = roleTransformations.map((t) => ({
|
||
id: t,
|
||
action: 'REMOVE',
|
||
}));
|
||
this.handleUpdateTransformations(updateTransformations, roleId);
|
||
this.applyDelete();
|
||
},
|
||
},
|
||
});
|