From: Pawel Kowalczyk Date: Wed, 4 Jul 2018 07:43:29 +0000 (+0200) Subject: added-functionality-for-creating-projects X-Git-Tag: 1.2.0~61^2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/bb6014754664dd6365a2b6592e97e23fc36b1f21 added-functionality-for-creating-projects Feature #13684 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk Feature #13684 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- diff --git a/.gitignore b/.gitignore index 280ad3f0..c18f27f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,15 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + # See https://help.github.com/ignore-files/ for more about ignoring files. # dependencies /node_modules +# vscode +/.vs + # testing /coverage diff --git a/src/common/api/common-resource-service.test.ts b/src/common/api/common-resource-service.test.ts index a07655e5..d28abc45 100644 --- a/src/common/api/common-resource-service.test.ts +++ b/src/common/api/common-resource-service.test.ts @@ -36,7 +36,7 @@ describe("CommonResourceService", () => { it("#list", async () => { axiosMock - .onGet("/resource") + .onGet("/resource/") .reply(200, { kind: "kind", offset: 2, diff --git a/src/common/api/common-resource-service.ts b/src/common/api/common-resource-service.ts index 93fc000e..3e147b22 100644 --- a/src/common/api/common-resource-service.ts +++ b/src/common/api/common-resource-service.ts @@ -20,8 +20,8 @@ export interface Resource { } export interface ListArguments { - limit: number; - offset: number; + limit?: number; + offset?: number; filters?: FilterBuilder; order?: OrderBuilder; select?: string[]; @@ -68,8 +68,10 @@ export default class CommonResourceService { this.resourceType = '/' + resourceType + '/'; } - create() { - throw new Error("Not implemented"); + create(data: Partial) { + return this.serverApi + .post(this.resourceType, data) + .then(CommonResourceService.mapResponseKeys); } delete(uuid: string): Promise { @@ -84,7 +86,7 @@ export default class CommonResourceService { .then(CommonResourceService.mapResponseKeys); } - list(args: ListArguments): Promise> { + list(args: ListArguments = {}): Promise> { const { filters, order, ...other } = args; const params = { ...other, diff --git a/src/services/groups-service/groups-service.test.ts b/src/services/groups-service/groups-service.test.ts index 2ace2f50..2562a595 100644 --- a/src/services/groups-service/groups-service.test.ts +++ b/src/services/groups-service/groups-service.test.ts @@ -16,7 +16,7 @@ describe("GroupsService", () => { it("#contents", async () => { axiosMock - .onGet("/groups/1/contents") + .onGet("/groups/1/contents/") .reply(200, { kind: "kind", offset: 2, diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts deleted file mode 100644 index 5bfa5449..00000000 --- a/src/services/project-service/project-service.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) The Arvados Authors. All rights reserved. -// -// SPDX-License-Identifier: AGPL-3.0 - -import { serverApi } from "../../common/api/server-api"; -import { Dispatch } from "redux"; -import { Project } from "../../models/project"; -import FilterBuilder, { FilterField } from "../../common/api/filter-builder"; -import { ArvadosResource } from "../response"; -import { getResourceKind } from "../../models/resource"; - -interface GroupResource extends ArvadosResource { - name: string; - group_class: string; - description: string; - writable_by: string[]; - delete_at: string; - trash_at: string; - is_trashed: boolean; -} - -interface GroupsResponse { - offset: number; - limit: number; - items: GroupResource[]; -} - -export default class ProjectService { - public getProjectList = (parentUuid?: string): Promise => { - if (parentUuid) { - const fb = new FilterBuilder(); - fb.addLike(FilterField.OWNER_UUID, parentUuid); - return serverApi.get('/groups', { params: { - filters: fb.get() - }}).then(resp => { - const projects = resp.data.items.map(g => ({ - name: g.name, - createdAt: g.created_at, - modifiedAt: g.modified_at, - href: g.href, - uuid: g.uuid, - ownerUuid: g.owner_uuid, - kind: getResourceKind(g.kind) - } as Project)); - return projects; - }); - } else { - return Promise.resolve([]); - } - } -} diff --git a/src/services/services.ts b/src/services/services.ts index 7ad2ff7d..51d2b760 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3,12 +3,10 @@ // SPDX-License-Identifier: AGPL-3.0 import AuthService from "./auth-service/auth-service"; -import ProjectService from "./project-service/project-service"; import CollectionService from "./collection-service/collection-service"; import GroupsService from "./groups-service/groups-service"; import { serverApi } from "../common/api/server-api"; export const authService = new AuthService(); -export const projectService = new ProjectService(); export const collectionService = new CollectionService(); export const groupsService = new GroupsService(serverApi); diff --git a/src/store/project/project-action.ts b/src/store/project/project-action.ts index 35ff445e..4cc21979 100644 --- a/src/store/project/project-action.ts +++ b/src/store/project/project-action.ts @@ -4,8 +4,9 @@ import { default as unionize, ofType, UnionOf } from "unionize"; import { Project } from "../../models/project"; -import { projectService } from "../../services/services"; +import { groupsService } from "../../services/services"; import { Dispatch } from "redux"; +import { getResourceKind } from "../../models/resource"; const actions = unionize({ CREATE_PROJECT: ofType(), @@ -19,15 +20,17 @@ const actions = unionize({ tag: 'type', value: 'payload' }); - -export const getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise => { - if (parentUuid) { + +export const getProjectList = (parentUuid: string = '') => (dispatch: Dispatch) => { dispatch(actions.PROJECTS_REQUEST(parentUuid)); - return projectService.getProjectList(parentUuid).then(projects => { + return groupsService.list().then(listResults => { + const projects = listResults.items.map(item => ({ + ...item, + kind: getResourceKind(item.kind) + })); dispatch(actions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid })); return projects; }); - } return Promise.resolve([]); }; export type ProjectAction = UnionOf; diff --git a/src/store/project/project-reducer.test.ts b/src/store/project/project-reducer.test.ts index f4301040..c80f18c8 100644 --- a/src/store/project/project-reducer.test.ts +++ b/src/store/project/project-reducer.test.ts @@ -129,12 +129,13 @@ describe('project-reducer', () => { modifiedAt: '2018-01-01', ownerUuid: 'owner-test123', uuid: 'test123', - kind: ResourceKind.PROJECT + kind: ResourceKind.PROJECT, }, id: "1", open: true, active: true, - status: 1 + status: 1, + toggled: true }], currentItemId: "1" };