18219: Unifies collection/project create/update properties handling actions.
[arvados-workbench2.git] / src / store / resources / resources-actions.ts
index 8e6d16f928aed6d54e2f807861a81c6bfb732c1d..1d1355a8ae457e5ba6fb95e87cc357589d4210a6 100644 (file)
@@ -12,6 +12,8 @@ import { addProperty, deleteProperty } from 'lib/resource-properties';
 import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions';
 import { getResource } from './resources';
 import { TagProperty } from 'models/tag';
+import { change, formValueSelector } from 'redux-form';
+import { ResourcePropertiesFormData } from 'views-components/resource-properties-form/resource-properties-form';
 
 export const resourcesActions = unionize({
     SET_RESOURCES: ofType<Resource[]>(),
@@ -93,3 +95,23 @@ export const createResourceProperty = (data: TagProperty) =>
             dispatch(snackbarActions.OPEN_SNACKBAR({ message: errorMsg, hideDuration: 2000, kind: SnackbarKind.ERROR }));
         }
     };
+
+export const addPropertyToResourceForm = (data: ResourcePropertiesFormData, formName: string) =>
+    (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const properties = { ...formValueSelector(formName)(getState(), 'properties') };
+        const key = data.keyID || data.key;
+        const value =  data.valueID || data.value;
+        dispatch(change(
+            formName,
+            'properties',
+            addProperty(properties, key, value)));
+    };
+
+export const removePropertyFromResourceForm = (key: string, value: string, formName: string) =>
+    (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const properties = { ...formValueSelector(formName)(getState(), 'properties') };
+        dispatch(change(
+            formName,
+            'properties',
+            deleteProperty(properties, key, value)));
+    };