diff --git a/ui/admin/app/components/groups/group/actions/index.hbs b/ui/admin/app/components/groups/group/actions/index.hbs index a875d15b6..82ef51298 100644 --- a/ui/admin/app/components/groups/group/actions/index.hbs +++ b/ui/admin/app/components/groups/group/actions/index.hbs @@ -18,7 +18,7 @@ {{t 'resources.group.actions.delete'}} diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js b/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js index d156d0cc8..a29c047e8 100644 --- a/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js +++ b/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js @@ -4,10 +4,16 @@ */ import Controller from '@ember/controller'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; +import { loading } from 'ember-loading'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeGroupsGroupAddMembersController extends Controller { // =services + @service router; + // =attributes /** @@ -26,4 +32,29 @@ export default class ScopesScopeGroupsGroupAddMembersController extends Controll const sorted = [global, ...orgsAndProjects].flat(); return sorted; } + + // =actions + + /** + * Adds members to the group and saves, replaces with the members index + * route, and notifies the user of success or error. + * @param {GroupModel} group + * @param {[string]} userIDs + */ + @action + @loading + @notifyError(({ message }) => message, { catch: true }) + @notifySuccess('notifications.add-success') + async addMembers(group, userIDs) { + await group.addMembers(userIDs); + await this.router.replaceWith('scopes.scope.groups.group.members'); + } + + /** + * Redirect to group members as if nothing ever happened. + */ + @action + async cancel() { + await this.router.replaceWith('scopes.scope.groups.group.members'); + } } diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/index.js b/ui/admin/app/controllers/scopes/scope/groups/group/index.js new file mode 100644 index 000000000..b08c3500c --- /dev/null +++ b/ui/admin/app/controllers/scopes/scope/groups/group/index.js @@ -0,0 +1,5 @@ +import Controller, { inject as controller } from '@ember/controller'; + +export default class ScopesScopeGroupsGroupIndexController extends Controller { + @controller('scopes/scope/groups/index') groups; +} diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/members.js b/ui/admin/app/controllers/scopes/scope/groups/group/members.js new file mode 100644 index 000000000..7e46c3fd5 --- /dev/null +++ b/ui/admin/app/controllers/scopes/scope/groups/group/members.js @@ -0,0 +1,5 @@ +import Controller, { inject as controller } from '@ember/controller'; + +export default class ScopesScopeGroupsGroupMembersController extends Controller { + @controller('scopes/scope/groups/index') groups; +} diff --git a/ui/admin/app/controllers/scopes/scope/groups/index.js b/ui/admin/app/controllers/scopes/scope/groups/index.js new file mode 100644 index 000000000..30c54d2d3 --- /dev/null +++ b/ui/admin/app/controllers/scopes/scope/groups/index.js @@ -0,0 +1,75 @@ +import Controller from '@ember/controller'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; +import { loading } from 'ember-loading'; +import { confirm } from 'core/decorators/confirm'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; + +export default class ScopesScopeGroupsIndexController extends Controller { + // =services + @service can; + @service router; + + // =actions + + /** + * Rollback changes on a group. + * @param {GroupModel} group + */ + @action + async cancel(group) { + const { isNew } = group; + group.rollbackAttributes(); + if (isNew) await this.router.transitionTo('scopes.scope.groups'); + } + + /** + * Save a group in current scope. + * @param {GroupModel} group + */ + @action + @loading + @notifyError(({ message }) => message) + @notifySuccess(({ isNew }) => + isNew ? 'notifications.create-success' : 'notifications.save-success', + ) + async save(group) { + await group.save(); + if (this.can.can('read model', group)) { + await this.router.transitionTo('scopes.scope.groups.group', group); + } else { + await this.router.transitionTo('scopes.scope.groups'); + } + await this.router.refresh(); + } + + /** + * Delete a group in current scope and redirect to index + * @param {GroupModel} group + */ + @action + @loading + @confirm('questions.delete-confirm') + @notifyError(({ message }) => message, { catch: true }) + @notifySuccess('notifications.delete-success') + async delete(group) { + await group.destroyRecord(); + await this.router.replaceWith('scopes.scope.groups'); + await this.router.refresh(); + } + + /** + * Remove a member from the current role and redirect to members index. + * @param {GroupModel} group + * @param {UserModel} member + */ + @action + @loading + @confirm('questions.remove-confirm') + @notifyError(({ message }) => message, { catch: true }) + @notifySuccess('notifications.remove-success') + async removeMember(group, member) { + await group.removeMember(member.id); + await this.router.refresh(); + } +} diff --git a/ui/admin/app/controllers/scopes/scope/groups/new.js b/ui/admin/app/controllers/scopes/scope/groups/new.js new file mode 100644 index 000000000..a2f5081ff --- /dev/null +++ b/ui/admin/app/controllers/scopes/scope/groups/new.js @@ -0,0 +1,5 @@ +import Controller, { inject as controller } from '@ember/controller'; + +export default class ScopesScopeGroupsNewController extends Controller { + @controller('scopes/scope/groups/index') groups; +} diff --git a/ui/admin/app/routes/scopes/scope/groups.js b/ui/admin/app/routes/scopes/scope/groups.js index 1034a7b1a..bdb217d02 100644 --- a/ui/admin/app/routes/scopes/scope/groups.js +++ b/ui/admin/app/routes/scopes/scope/groups.js @@ -5,16 +5,11 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; -import { action } from '@ember/object'; -import { loading } from 'ember-loading'; -import { confirm } from 'core/decorators/confirm'; -import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeGroupsRoute extends Route { // =services @service store; - @service intl; @service session; @service can; @service router; @@ -39,51 +34,4 @@ export default class ScopesScopeGroupsRoute extends Route { return this.store.query('group', { scope_id }); } } - - // =actions - /** - * Rollback changes on a group. - * @param {GroupModel} group - */ - @action - cancel(group) { - const { isNew } = group; - group.rollbackAttributes(); - if (isNew) this.router.transitionTo('scopes.scope.groups'); - } - - /** - * Save a group in current scope. - * @param {GroupModel} group - */ - @action - @loading - @notifyError(({ message }) => message) - @notifySuccess(({ isNew }) => - isNew ? 'notifications.create-success' : 'notifications.save-success', - ) - async save(group) { - await group.save(); - if (this.can.can('read model', group)) { - await this.router.transitionTo('scopes.scope.groups.group', group); - } else { - await this.router.transitionTo('scopes.scope.groups'); - } - this.refresh(); - } - - /** - * Delete a group in current scope and redirect to index - * @param {GroupModel} group - */ - @action - @loading - @confirm('questions.delete-confirm') - @notifyError(({ message }) => message, { catch: true }) - @notifySuccess('notifications.delete-success') - async delete(group) { - await group.destroyRecord(); - await this.router.replaceWith('scopes.scope.groups'); - this.refresh(); - } } diff --git a/ui/admin/app/routes/scopes/scope/groups/group/add-members.js b/ui/admin/app/routes/scopes/scope/groups/group/add-members.js index 6164bc6c7..a04bcdc7b 100644 --- a/ui/admin/app/routes/scopes/scope/groups/group/add-members.js +++ b/ui/admin/app/routes/scopes/scope/groups/group/add-members.js @@ -7,8 +7,6 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { hash } from 'rsvp'; -import { loading } from 'ember-loading'; -import { notifySuccess, notifyError } from 'core/decorators/notify'; import { resourceFilter } from 'core/decorators/resource-filter'; export default class ScopesScopeGroupsGroupAddMembersRoute extends Route { @@ -67,29 +65,6 @@ export default class ScopesScopeGroupsGroupAddMembersRoute extends Route { // =actions - /** - * Adds members to the group and saves, replaces with the members index - * route, and notifies the user of success or error. - * @param {GroupModel} group - * @param {[string]} userIDs - */ - @action - @loading - @notifyError(({ message }) => message, { catch: true }) - @notifySuccess('notifications.add-success') - async addMembers(group, userIDs) { - await group.addMembers(userIDs); - await this.router.replaceWith('scopes.scope.groups.group.members'); - } - - /** - * Redirect to group members as if nothing ever happened. - */ - @action - cancel() { - this.router.replaceWith('scopes.scope.groups.group.members'); - } - /** * Sets the specified resource filter field to the specified value. * @param {string} field diff --git a/ui/admin/app/routes/scopes/scope/groups/group/members.js b/ui/admin/app/routes/scopes/scope/groups/group/members.js index 2c66cb3cd..37711ed81 100644 --- a/ui/admin/app/routes/scopes/scope/groups/group/members.js +++ b/ui/admin/app/routes/scopes/scope/groups/group/members.js @@ -4,12 +4,8 @@ */ import Route from '@ember/routing/route'; -import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import { hash } from 'rsvp'; -import { loading } from 'ember-loading'; -import { confirm } from 'core/decorators/confirm'; -import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeGroupsGroupMembersRoute extends Route { // =services @@ -37,21 +33,4 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route { : [], }); } - - // =actions - - /** - * Remove a member from the current role and redirect to members index. - * @param {GroupModel} group - * @param {UserModel} member - */ - @action - @loading - @confirm('questions.remove-confirm') - @notifyError(({ message }) => message, { catch: true }) - @notifySuccess('notifications.remove-success') - async removeMember(group, member) { - await group.removeMember(member.id); - this.refresh(); - } } diff --git a/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs b/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs index 6bfecabfc..99839c463 100644 --- a/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs +++ b/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs @@ -86,8 +86,8 @@ diff --git a/ui/admin/app/templates/scopes/scope/groups/group/index.hbs b/ui/admin/app/templates/scopes/scope/groups/group/index.hbs index 372d09462..dcc2a2744 100644 --- a/ui/admin/app/templates/scopes/scope/groups/group/index.hbs +++ b/ui/admin/app/templates/scopes/scope/groups/group/index.hbs @@ -18,14 +18,17 @@ - + diff --git a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs index cee9590d1..2a6d2171d 100644 --- a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs +++ b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs @@ -24,7 +24,10 @@ - + @@ -75,7 +78,7 @@ @text={{t 'actions.remove'}} {{on 'click' - (route-action 'removeMember' @model.group B.data) + (fn this.groups.removeMember @model.group B.data) }} /> diff --git a/ui/admin/app/templates/scopes/scope/groups/new.hbs b/ui/admin/app/templates/scopes/scope/groups/new.hbs index 295502bb0..3d19784fe 100644 --- a/ui/admin/app/templates/scopes/scope/groups/new.hbs +++ b/ui/admin/app/templates/scopes/scope/groups/new.hbs @@ -26,8 +26,8 @@ diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js index 4d86aff7f..b506a97a7 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js @@ -4,7 +4,7 @@ */ import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; +import { setupTest } from 'admin/tests/helpers'; module('Unit | Controller | scopes/scope/auth-methods/index', function (hooks) { setupTest(hooks); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js index 4fbac6fc1..e399fc1b3 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js @@ -4,7 +4,7 @@ */ import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; +import { setupTest } from 'admin/tests/helpers'; module('Unit | Controller | scopes/scope/auth-methods/new', function (hooks) { setupTest(hooks); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js index 56cdde398..5c1925c17 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js @@ -4,7 +4,7 @@ */ import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; +import { setupTest } from 'admin/tests/helpers'; module( 'Unit | Controller | scopes/scope/groups/group/add-members', diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js new file mode 100644 index 000000000..5b1a1327b --- /dev/null +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js @@ -0,0 +1,13 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'admin/tests/helpers'; + +module('Unit | Controller | scopes/scope/groups/group/index', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/groups/group/index', + ); + assert.ok(controller); + }); +}); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js new file mode 100644 index 000000000..9adbb4c10 --- /dev/null +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js @@ -0,0 +1,16 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'admin/tests/helpers'; + +module( + 'Unit | Controller | scopes/scope/groups/group/members', + function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/groups/group/members', + ); + assert.ok(controller); + }); + }, +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js new file mode 100644 index 000000000..1d9a3b14e --- /dev/null +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js @@ -0,0 +1,11 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'admin/tests/helpers'; + +module('Unit | Controller | scopes/scope/groups/index', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let controller = this.owner.lookup('controller:scopes/scope/groups/index'); + assert.ok(controller); + }); +}); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js new file mode 100644 index 000000000..964e7f709 --- /dev/null +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js @@ -0,0 +1,11 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'admin/tests/helpers'; + +module('Unit | Controller | scopes/scope/groups/new', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let controller = this.owner.lookup('controller:scopes/scope/groups/new'); + assert.ok(controller); + }); +});