Move Resource interface to models, unify ResourceKind enum
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 12 Jul 2018 13:15:56 +0000 (15:15 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 12 Jul 2018 13:15:56 +0000 (15:15 +0200)
Feature #13798

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

22 files changed:
src/common/api/common-resource-service.ts
src/common/api/filter-builder.ts
src/common/api/order-builder.ts
src/components/details-panel-factory/details-panel-factory.tsx
src/components/details-panel-factory/items/abstract-item.tsx
src/components/details-panel-factory/items/collection-item.tsx
src/components/details-panel-factory/items/empty-item.tsx
src/components/details-panel-factory/items/process-item.tsx
src/components/details-panel-factory/items/project-item.tsx
src/models/collection.ts
src/models/container-request.ts
src/models/empty.ts
src/models/group.ts
src/models/resource.ts
src/models/test-utils.ts
src/models/workflow.ts
src/services/groups-service/groups-service.ts
src/store/details-panel/details-panel-action.ts
src/store/details-panel/details-panel-reducer.ts
src/store/navigation/navigation-action.ts
src/store/project/project-action.ts
src/views-components/details-panel/details-panel.tsx

index 8df179cd65d2d8d3f369bbc6aa1dc1ef246a8c52..4c05392389b3288a5f28f7cd5d8a9c5a30d72578 100644 (file)
@@ -6,18 +6,7 @@ import * as _ from "lodash";
 import FilterBuilder from "./filter-builder";
 import OrderBuilder from "./order-builder";
 import { AxiosInstance } from "axios";
-
-export interface Resource {
-    uuid: string;
-    ownerUuid: string;
-    createdAt: string;
-    modifiedByClientUuid: string;
-    modifiedByUserUuid: string;
-    modifiedAt: string;
-    href: string;
-    kind: string;
-    etag: string;
-}
+import { Resource } from "../../models/resource";
 
 export interface ListArguments {
     limit?: number;
index 47772e2475baa8c325d112d73804096f0a02e1de..38c4fee8bf167a2bc29854eb9e8a0b4916e5f74f 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as _ from "lodash";
-import { Resource } from "./common-resource-service";
+import { Resource } from "../../models/resource";
 
 export default class FilterBuilder<T extends Resource = Resource> {
 
index 316379145eceed2e11f62541fa258544d4f7c1ef..b5a2e807a0b5cf2538ee91cdceaa5d08ab1beab4 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as _ from "lodash";
-import { Resource } from "./common-resource-service";
+import { Resource } from "../../models/resource";
 
 export default class OrderBuilder<T extends Resource = Resource> {
 
index a9e5a212221a1413dc08b1b72cc1c85de2703931..4383e79df5b9c5d533aa77c74341f39c86018446 100644 (file)
@@ -9,6 +9,7 @@ import ProcessItem from './items/process-item';
 import AbstractItem from './items/abstract-item';
 import EmptyItem from './items/empty-item';
 import { DetailsPanelResource } from '../../views-components/details-panel/details-panel';
+import { EmptyResource } from '../../models/empty';
 
 export default class DetailsPanelFactory {
     static createItem(res: DetailsPanelResource): AbstractItem {
@@ -20,7 +21,7 @@ export default class DetailsPanelFactory {
             case ResourceKind.Process:
                 return new ProcessItem(res);
             default:
-                return new EmptyItem(res);
+                return new EmptyItem(res as EmptyResource);
         }
     }
 }
\ No newline at end of file
index fb30e84990bc1eac89990d9042e3a1808b8ff291..6a0094bedb9d5f3c906bfb3308970f98e5986337 100644 (file)
@@ -6,12 +6,9 @@ import * as React from 'react';
 import { IconTypes } from '../../icon/icon';
 import { DetailsPanelResource } from '../../../views-components/details-panel/details-panel';
 
-export default abstract class AbstractItem {
-    protected item: DetailsPanelResource;
+export default abstract class AbstractItem<T extends DetailsPanelResource = DetailsPanelResource> {
 
-    constructor(item: DetailsPanelResource) {
-        this.item = item;
-    }
+    constructor(protected item: T) {}
 
     getTitle(): string {
         return this.item.name;
index 448eebbf5dab15ed73386bcddb2c7e072e503830..362bd31f5e31534c2bf84f2e1476bbc284c4d537 100644 (file)
@@ -8,11 +8,7 @@ import Attribute from '../../attribute/attribute';
 import AbstractItem from './abstract-item';
 import { CollectionResource } from '../../../models/collection';
 
-export default class CollectionItem extends AbstractItem {
-    
-    constructor(item: CollectionResource) {
-        super(item);
-    }
+export default class CollectionItem extends AbstractItem<CollectionResource> {
 
     getIcon(): IconTypes {
         return IconTypes.COLLECTION;
index 5d6e3d4304eddc1234821f5d2c6cc83dd274f6ca..16394c89538623b44e7cd2b7c41ad00b1cfdd844 100644 (file)
@@ -8,12 +8,8 @@ import AbstractItem from './abstract-item';
 import EmptyState from '../../empty-state/empty-state';
 import { EmptyResource } from '../../../models/empty';
 
-export default class EmptyItem extends AbstractItem {
-
-    constructor(item: EmptyResource) {
-        super(item);
-    }
-
+export default class EmptyItem extends AbstractItem<EmptyResource> {
+    
     getIcon(): IconTypes {
         return IconTypes.FOLDER;
     }
index c8eab0a7bc4a3364d93d14daea91934d86d1fef9..369e931ffae6975e8a29bd08dac7a8a1caac61c9 100644 (file)
@@ -8,11 +8,7 @@ import Attribute from '../../attribute/attribute';
 import AbstractItem from './abstract-item';
 import { ProcessResource } from '../../../models/process';
 
-export default class ProcessItem extends AbstractItem {
-    
-    constructor(item: ProcessResource) {
-        super(item);
-    }
+export default class ProcessItem extends AbstractItem<ProcessResource> {
 
     getIcon(): IconTypes {
         return IconTypes.PROCESS;
index 10402ed5ff176c91e8f65b88e95ab81fa83a6c35..c4ccd2add7410db389f6f9c331cc967b23b79baa 100644 (file)
@@ -8,11 +8,7 @@ import Attribute from '../../attribute/attribute';
 import AbstractItem from './abstract-item';
 import { ProjectResource } from '../../../models/project';
 
-export default class ProjectItem extends AbstractItem {
-
-    constructor(item: ProjectResource) {
-        super(item);
-    }
+export default class ProjectItem extends AbstractItem<ProjectResource> {
 
     getIcon(): IconTypes {
         return IconTypes.PROJECT;
index 8effd8ee6448b1dfd2e7dfc60acb574bd2a91f3c..2a92594473cac819263e0af8ece34044475ba37f 100644 (file)
@@ -2,8 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "../common/api/common-resource-service";
-import { ResourceKind } from "./kinds";
+import { Resource, ResourceKind } from "./resource";
 
 export interface CollectionResource extends Resource {
     kind: ResourceKind.Collection;
index 4a10414dcd25aa98eabc0f83193bac9d3857ea4f..162e0f57e454879d693dc5882545643503625369 100644 (file)
@@ -2,8 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "../common/api/common-resource-service";
-import { ResourceKind } from "./kinds";
+import { Resource, ResourceKind } from "./resource";
 
 export enum ContainerRequestState {
     Uncommitted = "Uncommitted",
index 76b42b44121dbe99693160d1d02d946db0ae00d0..9731207f0e725b3d979e046b606b39af8b95c57e 100644 (file)
@@ -6,5 +6,5 @@ import { ResourceKind } from "./resource";
 
 export interface EmptyResource {
     name: string;
-    kind: ResourceKind;
+    kind: undefined;
 }
\ No newline at end of file
index 4bb9a7fd661eba4c836f7a735f0b8674ec6ff5af..d8efae267118b9274754fd9b92155e6a87ec3066 100644 (file)
@@ -2,8 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "../common/api/common-resource-service";
-import { ResourceKind } from "./kinds";
+import { Resource, ResourceKind } from "./resource";
 
 export interface GroupResource extends Resource {
     kind: ResourceKind.Group;
index 1dd5979b521a005af1ff94fbf219f6dee3138de8..2d72fbcd82631482e524110da02f723875c6d1f8 100644 (file)
@@ -3,32 +3,22 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 export interface Resource {
-    name: string;
-    createdAt: string;
-    modifiedAt: string;
     uuid: string;
     ownerUuid: string;
+    createdAt: string;
+    modifiedByClientUuid: string;
+    modifiedByUserUuid: string;
+    modifiedAt: string;
     href: string;
-    kind: ResourceKind;
+    kind: string;
+    etag: string;
 }
 
 export enum ResourceKind {
-    PROJECT = "project",
-    COLLECTION = "collection",
-    PIPELINE = "pipeline",
-    UNKNOWN = "unknown"
-}
-
-export function getResourceKind(itemKind: string) {
-    switch (itemKind) {
-        case "arvados#project":
-        case "arvados#group":
-            return ResourceKind.PROJECT;
-        case "arvados#collection":
-            return ResourceKind.COLLECTION;
-        case "arvados#pipeline":
-            return ResourceKind.PIPELINE;
-        default:
-            return ResourceKind.UNKNOWN;
-    }
+    Collection = "arvados#collection",
+    ContainerRequest = "arvados#containerRequest",
+    Group = "arvados#group",
+    Process = "arvados#containerRequest",
+    Project = "arvados#group",
+    Workflow = "arvados#workflow"
 }
index aa8d96b36ae391b1a49186d055cb656e074894e6..4d75b1064a00505ba0b8aa2cf949e37dde6ad8ff 100644 (file)
@@ -2,9 +2,8 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { GroupClass, GroupResource } from "./group";
-import { ResourceKind } from "./kinds";
-import { Resource } from "../common/api/common-resource-service";
+import { GroupResource } from "./group";
+import { Resource, ResourceKind } from "./resource";
 
 type ResourceUnion = GroupResource;
 
index 2054550dc09f662730e086551a1ab1847438996f..e0a5df4381c2dd8c4ed9c04fddd8b083559ffec3 100644 (file)
@@ -2,8 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "../common/api/common-resource-service";
-import { ResourceKind } from "./kinds";
+import { Resource, ResourceKind } from "./resource";
 
 export interface WorkflowResource extends Resource {
     kind: ResourceKind.Workflow;
index 2a5a51a851b8e48a0741e085164dbaff9f6c7e8c..1318dace83226f305cf01f1099fd41470a72cad8 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as _ from "lodash";
-import CommonResourceService, { Resource, ListResults } from "../../common/api/common-resource-service";
+import CommonResourceService, { ListResults } from "../../common/api/common-resource-service";
 import FilterBuilder from "../../common/api/filter-builder";
 import OrderBuilder from "../../common/api/order-builder";
 import { AxiosInstance } from "axios";
index ffa66b69a402807a15a9c9adc3967284d339d471..647e24f8e67e436457271e994db3e0527c71d319 100644 (file)
@@ -3,11 +3,12 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { unionize, ofType, UnionOf } from "unionize";
-import CommonResourceService, { Resource } from "../../common/api/common-resource-service";
+import CommonResourceService from "../../common/api/common-resource-service";
 import { ResourceKind } from "../../models/kinds";
 import { Dispatch } from "redux";
 import { groupsService } from "../../services/services";
 import { serverApi } from "../../common/api/server-api";
+import { Resource } from "../../models/resource";
 
 const actions = unionize({
     TOGGLE_DETAILS_PANEL: ofType<{}>(),
index 73fc604d93dd8f5ebd366db56e0f7e65115b26a3..f57b9f1c709ba49bb77cb3cc036692bfcf2ad1bd 100644 (file)
@@ -2,8 +2,8 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "../../common/api/common-resource-service";
 import actions, { DetailsPanelAction } from "./details-panel-action";
+import { Resource } from "../../models/resource";
 
 export interface DetailsPanelState {
     item: Resource | null;
index 25cc0034deff7732ba2e190777db993bed2fb258..89ae7279f8df98686fd0ce94fec31170c0f7ff5d 100644 (file)
@@ -10,8 +10,8 @@ import { findTreeItem } from "../project/project-reducer";
 import dataExplorerActions from "../data-explorer/data-explorer-action";
 import { PROJECT_PANEL_ID } from "../../views/project-panel/project-panel";
 import { RootState } from "../store";
-import { Resource } from "../../common/api/common-resource-service";
 import { ResourceKind } from "../../models/kinds";
+import { Resource } from "../../models/resource";
 
 export const getResourceUrl = <T extends Resource>(resource: T): string => {
     switch (resource.kind) {
index 3acf091b3fd8e8f88d1b57e5bdc65f9648fc9b71..f7708ebe89295eea73f849929097a0a7c386e424 100644 (file)
@@ -6,9 +6,7 @@ import { default as unionize, ofType, UnionOf } from "unionize";
 import { ProjectResource } from "../../models/project";
 import { projectService } from "../../services/services";
 import { Dispatch } from "redux";
-import { getResourceKind } from "../../models/resource";
 import FilterBuilder from "../../common/api/filter-builder";
-import { ThunkAction } from "../../../node_modules/redux-thunk";
 import { RootState } from "../store";
 
 const actions = unionize({
index 15ca8f3643c76103b52b5a3804277b66717e7350..99c4063b00b6e7aa7682a7e2ddbb4ec03d3785c5 100644 (file)
@@ -21,7 +21,6 @@ import IconBase, { IconTypes } from '../../components/icon/icon';
 import { ProcessResource } from '../../models/process';
 import DetailsPanelFactory from '../../components/details-panel-factory/details-panel-factory';
 import AbstractItem from '../../components/details-panel-factory/items/abstract-item';
-import { ResourceKind } from '../../models/resource';
 import { EmptyResource } from '../../models/empty';
 
 export interface DetailsPanelDataProps {
@@ -119,7 +118,7 @@ const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
     }
 });
 
-// TODO: move to models
+
 export type DetailsPanelResource = ProjectResource | CollectionResource | ProcessResource | EmptyResource;
 
 const getItem = (res: DetailsPanelResource) => {
@@ -127,7 +126,7 @@ const getItem = (res: DetailsPanelResource) => {
 };
 
 const getDefaultItem = () => {
-    return DetailsPanelFactory.createItem({ kind: ResourceKind.UNKNOWN, name: 'Projects'});
+    return DetailsPanelFactory.createItem({ kind: undefined, name: 'Projects' });
 };
 
 const mapStateToProps = ({ detailsPanel }: RootState) => {