+// 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
it("#list", async () => {
axiosMock
- .onGet("/resource")
+ .onGet("/resource/")
.reply(200, {
kind: "kind",
offset: 2,
}
export interface ListArguments {
- limit: number;
- offset: number;
+ limit?: number;
+ offset?: number;
filters?: FilterBuilder;
order?: OrderBuilder;
select?: string[];
this.resourceType = '/' + resourceType + '/';
}
- create() {
- throw new Error("Not implemented");
+ create(data: Partial<T>) {
+ return this.serverApi
+ .post<T>(this.resourceType, data)
+ .then(CommonResourceService.mapResponseKeys);
}
delete(uuid: string): Promise<T> {
.then(CommonResourceService.mapResponseKeys);
}
- list(args: ListArguments): Promise<ListResults<T>> {
+ list(args: ListArguments = {}): Promise<ListResults<T>> {
const { filters, order, ...other } = args;
const params = {
...other,
it("#contents", async () => {
axiosMock
- .onGet("/groups/1/contents")
+ .onGet("/groups/1/contents/")
.reply(200, {
kind: "kind",
offset: 2,
+++ /dev/null
-// 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<Project[]> => {
- if (parentUuid) {
- const fb = new FilterBuilder();
- fb.addLike(FilterField.OWNER_UUID, parentUuid);
- return serverApi.get<GroupsResponse>('/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([]);
- }
- }
-}
// 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);
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<Project>(),
tag: 'type',
value: 'payload'
});
-
-export const getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise<Project[]> => {
- 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<typeof actions>;
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"
};