Create addGroupMembers action
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Sun, 16 Dec 2018 19:16:35 +0000 (20:16 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Sun, 16 Dec 2018 19:16:35 +0000 (20:16 +0100)
Feature #14505

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/store/group-details-panel/group-details-panel-actions.ts
src/views-components/dialog-forms/add-group-member-dialog.tsx

index e908e8e80f1663bb2d084f9cb01deff901214715..75132a1544ef0a09d6efe2244bd024a68889a149 100644 (file)
@@ -8,14 +8,18 @@ import { propertiesActions } from '~/store/properties/properties-actions';
 import { getProperty } from '~/store/properties/properties';
 import { Person } from '~/views-components/sharing-dialog/people-select';
 import { dialogActions } from '~/store/dialog/dialog-actions';
-import { reset } from 'redux-form';
+import { reset, startSubmit } from 'redux-form';
+import { addGroupMember } from '~/store/groups-panel/groups-panel-actions';
+import { getResource } from '~/store/resources/resources';
+import { GroupResource } from '~/models/group';
+import { RootState } from '~/store/store';
+import { ServiceRepository } from '~/services/services';
 
 export const GROUP_DETAILS_PANEL_ID = 'groupDetailsPanel';
 export const ADD_GROUP_MEMBERS_DIALOG = 'addGrupMembers';
 export const ADD_GROUP_MEMBERS_FORM = 'addGrupMembers';
 export const ADD_GROUP_MEMBERS_USERS_FIELD_NAME = 'users';
 
-
 export const GroupDetailsPanelActions = bindDataExplorerActions(GROUP_DETAILS_PANEL_ID);
 
 export const loadGroupDetailsPanel = (groupUuid: string) =>
@@ -35,3 +39,35 @@ export const openAddGroupMembersDialog = () =>
         dispatch(dialogActions.OPEN_DIALOG({ id: ADD_GROUP_MEMBERS_DIALOG, data: {} }));
         dispatch(reset(ADD_GROUP_MEMBERS_FORM));
     };
+
+export const addGroupMembers = ({ users }: AddGroupMembersFormData) =>
+
+    async (dispatch: Dispatch, getState: () => RootState, { permissionService }: ServiceRepository) => {
+
+        const groupUuid = getCurrentGroupDetailsPanelUuid(getState().properties);
+
+        if (groupUuid) {
+
+            dispatch(startSubmit(ADD_GROUP_MEMBERS_FORM));
+
+            const group = getResource<GroupResource>(groupUuid)(getState().resources);
+
+            for (const user of users) {
+
+                await addGroupMember({
+                    user,
+                    group: {
+                        uuid: groupUuid,
+                        name: group ? group.name : groupUuid,
+                    },
+                    dispatch,
+                    permissionService,
+                });
+
+            }
+
+            dispatch(dialogActions.CLOSE_DIALOG({ id: ADD_GROUP_MEMBERS_FORM }));
+            dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+
+        }
+    };
index 3840ecd4d6b520cdc72aab6b77d1a5efe3a9562a..3012a4db0f412efed5fd8016511ce4b9374a0130 100644 (file)
@@ -8,13 +8,16 @@ import { reduxForm, InjectedFormProps, WrappedFieldArrayProps, FieldArray } from
 import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog";
 import { FormDialog } from '~/components/form-dialog/form-dialog';
 import { PeopleSelect, Person } from '~/views-components/sharing-dialog/people-select';
-import { ADD_GROUP_MEMBERS_DIALOG, ADD_GROUP_MEMBERS_FORM, AddGroupMembersFormData, ADD_GROUP_MEMBERS_USERS_FIELD_NAME } from '~/store/group-details-panel/group-details-panel-actions';
+import { ADD_GROUP_MEMBERS_DIALOG, ADD_GROUP_MEMBERS_FORM, AddGroupMembersFormData, ADD_GROUP_MEMBERS_USERS_FIELD_NAME, addGroupMembers } from '~/store/group-details-panel/group-details-panel-actions';
 import { minLength } from '~/validators/min-length';
 
 export const AddGroupMembersDialog = compose(
     withDialog(ADD_GROUP_MEMBERS_DIALOG),
     reduxForm<AddGroupMembersFormData>({
         form: ADD_GROUP_MEMBERS_FORM,
+        onSubmit: (data, dispatch) => {
+            dispatch(addGroupMembers(data));
+        },
     })
 )(
     (props: AddGroupMembersDialogProps) =>