diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 985c3d68b..e59e5a121 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -10,6 +10,7 @@ - [VM Import] Make the `Description` field optional (PR [#5258](https://github.com/vatesfr/xen-orchestra/pull/5258)) - [New VM] Hide missing ISOs in selector [#5222](https://github.com/vatesfr/xen-orchestra/issues/5222) - [Dashboard/Health] Show VMs that have too many snapshots [#5238](https://github.com/vatesfr/xen-orchestra/pull/5238) +- [Groups] Ability to delete multiple groups at once (PR [#5264](https://github.com/vatesfr/xen-orchestra/pull/5264)) ### Bug fixes diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index d97185c7d..9f1a623d3 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -656,6 +656,10 @@ const messages = { createGroupButton: 'Create', deleteGroup: 'Delete group', deleteGroupConfirm: 'Are you sure you want to delete this group?', + deleteSelectedGroups: 'Delete selected groups', + deleteGroupsModalTitle: 'Delete group{nGroups, plural, one {} other {s}}', + deleteGroupsModalMessage: + 'Are you sure you want to delete {nGroups, number} group{nGroups, plural, one {} other {s}}?', removeUserFromGroup: 'Remove user from group', deleteUserConfirm: 'Are you sure you want to delete this user?', deleteUser: 'Delete user', diff --git a/packages/xo-web/src/common/xo/index.js b/packages/xo-web/src/common/xo/index.js index 622e04272..e869e3828 100644 --- a/packages/xo-web/src/common/xo/index.js +++ b/packages/xo-web/src/common/xo/index.js @@ -2732,6 +2732,20 @@ export const deleteGroup = group => noop ) +export const deleteGroups = groups => + confirm({ + title: _('deleteGroupsModalTitle', { nGroups: groups.length }), + body:

{_('deleteGroupsModalMessage', { nGroups: groups.length })}

, + }).then( + () => + Promise.all( + groups.map(({ id }) => _call('group.delete', { id })) + )::tap(subscribeGroups.forceRefresh, err => + error(_('deleteGroup'), err.message || String(err)) + ), + noop + ) + export const removeUserFromGroup = (user, group) => _call( 'group.removeUser', diff --git a/packages/xo-web/src/xo-app/settings/groups/index.js b/packages/xo-web/src/xo-app/settings/groups/index.js index 494b392c7..439f3f11d 100644 --- a/packages/xo-web/src/xo-app/settings/groups/index.js +++ b/packages/xo-web/src/xo-app/settings/groups/index.js @@ -18,6 +18,7 @@ import { addUserToGroup, createGroup, deleteGroup, + deleteGroups, removeUserFromGroup, setGroupName, subscribeGroups, @@ -125,16 +126,16 @@ const GROUP_COLUMNS = [ /> ), }, +] + +const ACTIONS = [ { - name: '', - itemRenderer: group => ( - - ), + handler: deleteGroups, + icon: 'delete', + individualHandler: deleteGroup, + individualLabel: _('deleteGroup'), + label: _('deleteSelectedGroups'), + level: 'danger', }, ] @@ -185,6 +186,7 @@ export default class Groups extends Component {

) : (