Create store for processes
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Wed, 29 Aug 2018 12:06:15 +0000 (14:06 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Wed, 29 Aug 2018 12:06:15 +0000 (14:06 +0200)
Feature #14099

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

src/store/processes/process.ts [new file with mode: 0644]
src/store/processes/processes-actions.ts [new file with mode: 0644]

diff --git a/src/store/processes/process.ts b/src/store/processes/process.ts
new file mode 100644 (file)
index 0000000..17ad695
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { ContainerRequestResource } from '../../models/container-request';
+import { ContainerResource } from '../../models/container';
+import { ResourcesState, getResource } from '~/store/resources/resources';
+
+export interface Process {
+    containerRequest: ContainerRequestResource;
+    container?: ContainerResource;
+}
+
+export const getProcess = (uuid: string) => (resources: ResourcesState): Process | undefined => {
+    const containerRequest = getResource<ContainerRequestResource>(uuid)(resources);
+    if (containerRequest) {
+        if (containerRequest.containerUuid) {
+            const container = getResource<ContainerResource>(containerRequest.containerUuid)(resources);
+            if (container) {
+                return { containerRequest, container };
+            }
+        }
+        return { containerRequest };
+    }
+    return;
+};
diff --git a/src/store/processes/processes-actions.ts b/src/store/processes/processes-actions.ts
new file mode 100644 (file)
index 0000000..d667517
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { Dispatch } from "redux";
+import { RootState } from '~/store/store';
+import { ServiceRepository } from '~/services/services';
+import { updateResources } from '~/store/resources/resources-actions';
+import { FilterBuilder } from '~/common/api/filter-builder';
+import { ContainerRequestResource } from '../../models/container-request';
+
+export const loadProcess = (uuid: string) =>
+    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const containerRequest = await services.containerRequestService.get(uuid);
+        dispatch<any>(updateResources([containerRequest]));
+        if (containerRequest.containerUuid) {
+            const container = await services.containerService.get(containerRequest.containerUuid);
+            dispatch<any>(updateResources([container]));
+        }
+    };
+
+export const loadSubprocesses = (uuid: string) =>
+    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const containerRequests = await dispatch<any>(loadContainerRequests(
+            new FilterBuilder().addEqual('requestingContainerUuid', uuid).getFilters()
+        )) as ContainerRequestResource[];
+
+        const containerUuids: string[] = containerRequests.reduce((uuids, { containerUuid }) =>
+            containerUuid
+                ? [...uuids, containerUuid]
+                : uuids, []);
+
+        if (containerUuids.length > 0) {
+            await dispatch<any>(loadContainers(
+                new FilterBuilder().addIn('uuid', containerUuids).getFilters()
+            ));
+        }
+    };
+
+export const loadContainerRequests = (filters: string) =>
+    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const { items } = await services.containerRequestService.list({ filters });
+        dispatch<any>(updateResources(items));
+        return items;
+    };
+
+export const loadContainers = (filters: string) =>
+    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        const { items } = await services.containerService.list({ filters });
+        dispatch<any>(updateResources(items));
+        return items;
+    };