1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { default as unionize, ofType, UnionOf } from "unionize";
6 import { Dispatch } from "redux";
8 import { RootState } from "../../store";
9 import { ServiceRepository } from "~/services/services";
10 import { CollectionResource } from '~/models/collection';
11 import { initialize } from 'redux-form';
12 import { collectionPanelActions } from "../../collection-panel/collection-panel-action";
13 import { ContextMenuResource } from "../../context-menu/context-menu-reducer";
14 import { updateDetails } from "~/store/details-panel/details-panel-action";
16 export const collectionUpdaterActions = unionize({
17 OPEN_COLLECTION_UPDATER: ofType<{ uuid: string }>(),
18 CLOSE_COLLECTION_UPDATER: ofType<{}>(),
19 UPDATE_COLLECTION_SUCCESS: ofType<{}>(),
26 export const COLLECTION_FORM_NAME = 'collectionEditDialog';
28 export const openUpdater = (item: ContextMenuResource) =>
29 (dispatch: Dispatch, getState: () => RootState) => {
31 dispatch(collectionUpdaterActions.OPEN_COLLECTION_UPDATER({ uuid: item.uuid }));
32 dispatch(initialize(COLLECTION_FORM_NAME, { name: item.name, description: item.description }));
36 export const updateCollection = (collection: Partial<CollectionResource>) =>
37 (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
38 const { uuid } = getState().collections.updater;
39 return services.collectionService
40 .update(uuid, collection)
42 dispatch(collectionPanelActions.LOAD_COLLECTION_SUCCESS({ item: collection as CollectionResource }));
43 dispatch(collectionUpdaterActions.UPDATE_COLLECTION_SUCCESS());
44 dispatch<any>(updateDetails(collection));
49 export type CollectionUpdaterAction = UnionOf<typeof collectionUpdaterActions>;