X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e5b901f7d6f87b56f43d3dbe002c9c90a3d41349..70bf37e9881a433b740cc70376d4b6680a582910:/src/services/project-service/project-service.ts diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts index bc340818..d6003471 100644 --- a/src/services/project-service/project-service.ts +++ b/src/services/project-service/project-service.ts @@ -2,49 +2,52 @@ // // 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 { GroupsService } from "../groups-service/groups-service"; +import { ProjectResource } from "~/models/project"; +import { GroupClass } from "~/models/group"; +import { ListArguments } from "~/services/common-service/common-resource-service"; +import { FilterBuilder, joinFilters } from "~/services/api/filter-builder"; +import { TrashableResourceService } from '~/services/common-service/trashable-resource-service'; +import { snakeCase } from 'lodash'; +export class ProjectService extends GroupsService { -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[]; -} + create(data: Partial) { + const projectData = { ...data, groupClass: GroupClass.PROJECT }; + return super.create(projectData); + } -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: g.kind - } as Project)); - return projects; - }); - } else { - return Promise.resolve([]); + update(uuid: string, data: Partial) { + if (uuid && data && data.properties) { + const { properties } = data; + const mappedData = { + ...TrashableResourceService.mapKeys(snakeCase)(data), + properties, + }; + return TrashableResourceService + .defaultResponse( + this.serverApi + .put(this.resourceType + uuid, mappedData), + this.actions, + false + ); } + return TrashableResourceService + .defaultResponse( + this.serverApi + .put(this.resourceType + uuid, data && TrashableResourceService.mapKeys(snakeCase)(data)), + this.actions + ); + } + + list(args: ListArguments = {}) { + return super.list({ + ...args, + filters: joinFilters( + args.filters, + new FilterBuilder() + .addEqual("groupClass", GroupClass.PROJECT) + .getFilters() + ) + }); } }