added-attributes-dialog-and-init-creating-repos
[arvados-workbench2.git] / src / store / repositories / repositories-actions.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { Dispatch } from "redux";
6 import { bindDataExplorerActions } from '~/store/data-explorer/data-explorer-action';
7 import { RootState } from '~/store/store';
8 import { ServiceRepository } from "~/services/services";
9 import { navigateToRepositories } from "~/store/navigation/navigation-action";
10 import { unionize, ofType, UnionOf } from "~/common/unionize";
11 import { dialogActions } from '~/store/dialog/dialog-actions';
12 import { RepositoryResource } from "~/models/repositories";
13
14 export const repositoriesActions = unionize({
15     SET_REPOSITORIES: ofType<any>(),
16 });
17
18 export type RepositoriesActions = UnionOf<typeof repositoriesActions>;
19
20 export const REPOSITORIES_PANEL = 'repositoriesPanel';
21 export const REPOSITORIES_SAMPLE_GIT_DIALOG = 'repositoriesSampleGitDialog';
22 export const REPOSITORY_ATTRIBUTES_DIALOG = 'repositoryAttributesDialog';
23 export const REPOSITORY_CREATE_FORM_NAME = 'repositoryCreateFormName';
24
25 export const openRepositoriesSampleGitDialog = () =>
26     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
27         const uuidPrefix = getState().properties.uuidPrefix;
28         dispatch(dialogActions.OPEN_DIALOG({ id: REPOSITORIES_SAMPLE_GIT_DIALOG, data: { uuidPrefix } }));
29     };
30
31 export const openRepositoryAttributes = (index: number) =>
32     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
33         const repositoryData = getState().repositories.items[index];
34         dispatch(dialogActions.OPEN_DIALOG({ id: REPOSITORY_ATTRIBUTES_DIALOG, data: { repositoryData } }));
35     };
36
37 export const openRepositoryCreateDialog = () =>
38     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
39         dispatch(dialogActions.OPEN_DIALOG({ id: REPOSITORY_CREATE_FORM_NAME, data: {} }));
40     };
41
42 export const createRepository = (repository: RepositoryResource) =>
43     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
44         const userUuid = await services.authService.getUuid();
45         const user = await services.userService.get(userUuid!);
46         await services.repositoriesService.create({ name: `${user.username}/${repository.name}` });
47     };
48
49 const repositoriesBindedActions = bindDataExplorerActions(REPOSITORIES_PANEL);
50
51 export const openRepositoriesPanel = () =>
52     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
53         dispatch<any>(navigateToRepositories);
54     };
55
56 export const loadRepositoriesData = () =>
57     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
58         const repositories = await services.repositoriesService.list();
59         dispatch(repositoriesActions.SET_REPOSITORIES(repositories.items));
60     };
61
62 export const loadRepositoriesPanel = () =>
63     (dispatch: Dispatch) => {
64         dispatch(repositoriesBindedActions.REQUEST_ITEMS());
65     };