Merge branch 'master' into 13864-Virtual-machines
[arvados-workbench2.git] / src / store / virtual-machines / virtual-machines-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 { RootState } from '~/store/store';
7 import { ServiceRepository } from "~/services/services";
8 import { navigateToVirtualMachines } from "../navigation/navigation-action";
9 import { bindDataExplorerActions } from '~/store/data-explorer/data-explorer-action';
10 import { formatDate } from "~/common/formatters";
11 import { unionize, ofType, UnionOf } from "~/common/unionize";
12 import { VirtualMachinesLoginsResource } from '~/models/virtual-machines';
13 import { FilterBuilder } from "~/services/api/filter-builder";
14 import { ListResults } from "~/services/common-service/common-resource-service";
15
16 export const virtualMachinesActions = unionize({
17     SET_REQUESTED_DATE: ofType<string>(),
18     SET_VIRTUAL_MACHINES: ofType<ListResults<any>>(),
19     SET_LOGINS: ofType<VirtualMachinesLoginsResource[]>(),
20     SET_LINKS: ofType<ListResults<any>>()
21 });
22
23 export type VirtualMachineActions = UnionOf<typeof virtualMachinesActions>;
24
25 export const VIRTUAL_MACHINES_PANEL = 'virtualMachinesPanel';
26
27 export const openVirtualMachines = () =>
28     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
29         dispatch<any>(navigateToVirtualMachines);
30     };
31
32 const loadRequestedDate = () =>
33     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
34         const date = services.virtualMachineService.getRequestedDate();
35         dispatch(virtualMachinesActions.SET_REQUESTED_DATE(date));
36     };
37
38
39 export const loadVirtualMachinesData = () =>
40     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
41         dispatch<any>(loadRequestedDate());
42         const virtualMachines = await services.virtualMachineService.list();
43         const virtualMachinesUuids = virtualMachines.items.map(it => it.uuid);
44         const links = await services.linkService.list({
45             filters: new FilterBuilder()
46                 .addIn("headUuid", virtualMachinesUuids)
47                 .getFilters()
48         });
49         dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines));
50         dispatch(virtualMachinesActions.SET_LINKS(links));
51         // const logins = await services.virtualMachineService.logins(virtualMachines.items[0].uuid);
52         // console.log(logins);
53         // const getAllLogins = await services.virtualMachineService.getAllLogins();
54         // console.log(getAllLogins);  
55         // dispatch(virtualMachinesActions.SET_LOGINS(getAllLogins));
56     };
57
58 export const saveRequestedDate = () =>
59     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
60         const date = formatDate((new Date).toISOString());
61         services.virtualMachineService.saveRequestedDate(date);
62         dispatch<any>(loadRequestedDate());
63     };
64
65 const virtualMachinesBindedActions = bindDataExplorerActions(VIRTUAL_MACHINES_PANEL);
66
67 export const loadVirtualMachinesPanel = () =>
68     (dispatch: Dispatch) => {
69         dispatch(virtualMachinesBindedActions.REQUEST_ITEMS());
70     };