[ARVADOS-WORKBENCH2] updated: 1.1.4-227-g2851aa5
Git user
git at public.curoverse.com
Fri Jul 6 10:42:23 EDT 2018
Summary of changes:
src/index.tsx | 9 +++--
src/models/group.ts | 6 +++-
src/models/project.ts | 4 +--
src/services/groups-service/groups-service.ts | 6 ++--
.../project-service/project-service.test.ts | 39 ++++++++++++++++++++++
src/services/project-service/project-service.ts | 36 ++++++++++++++++++++
src/services/services.ts | 2 ++
src/store/project/project-action.ts | 29 +++++++++-------
8 files changed, 108 insertions(+), 23 deletions(-)
create mode 100644 src/services/project-service/project-service.test.ts
create mode 100644 src/services/project-service/project-service.ts
via 2851aa591c073750ad9826bb28cba36f1a8cc15a (commit)
via 447c26c2467f32ac67dbbc9bcb7cbbd0a6471917 (commit)
via 8c8a3d8d646f99dce6a1cdbf515745d6f84bb814 (commit)
from b2fd743a3acb8d301adab2d1bf2cb0eca573f31a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 2851aa591c073750ad9826bb28cba36f1a8cc15a
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date: Fri Jul 6 16:42:04 2018 +0200
Fix filters used to obtain uer's projects
Feature #13747
Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
diff --git a/src/index.tsx b/src/index.tsx
index 21ecdab..be01e0a 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -23,22 +23,21 @@ const history = createBrowserHistory();
const store = configureStore(history);
store.dispatch(authActions.INIT());
-const rootUuid = authService.getRootUuid();
-store.dispatch<any>(getProjectList(rootUuid));
+store.dispatch<any>(getProjectList(authService.getUuid()));
const App = () =>
<MuiThemeProvider theme={CustomTheme}>
<Provider store={store}>
<ConnectedRouter history={history}>
<div>
- <Route path="/" component={Workbench}/>
- <Route path="/token" component={ApiToken}/>
+ <Route path="/" component={Workbench} />
+ <Route path="/token" component={ApiToken} />
</div>
</ConnectedRouter>
</Provider>
</MuiThemeProvider>;
ReactDOM.render(
- <App/>,
+ <App />,
document.getElementById('root') as HTMLElement
);
diff --git a/src/store/project/project-action.ts b/src/store/project/project-action.ts
index 4cc2197..5169349 100644
--- a/src/store/project/project-action.ts
+++ b/src/store/project/project-action.ts
@@ -3,10 +3,11 @@
// SPDX-License-Identifier: AGPL-3.0
import { default as unionize, ofType, UnionOf } from "unionize";
-import { Project } from "../../models/project";
-import { groupsService } from "../../services/services";
+import { Project, 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";
const actions = unionize({
CREATE_PROJECT: ofType<Project>(),
@@ -20,17 +21,21 @@ const actions = unionize({
tag: 'type',
value: 'payload'
});
-
+
export const getProjectList = (parentUuid: string = '') => (dispatch: Dispatch) => {
- dispatch(actions.PROJECTS_REQUEST(parentUuid));
- 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;
- });
+ dispatch(actions.PROJECTS_REQUEST(parentUuid));
+ return projectService.list({
+ filters: FilterBuilder
+ .create<ProjectResource>()
+ .addEqual("ownerUuid", parentUuid)
+ }).then(listResults => {
+ const projects = listResults.items.map(item => ({
+ ...item,
+ kind: getResourceKind(item.kind)
+ }));
+ dispatch(actions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid }));
+ return projects;
+ });
};
export type ProjectAction = UnionOf<typeof actions>;
commit 447c26c2467f32ac67dbbc9bcb7cbbd0a6471917
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date: Fri Jul 6 16:34:44 2018 +0200
Fix typo
Feature #13747
Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
diff --git a/src/services/groups-service/groups-service.ts b/src/services/groups-service/groups-service.ts
index 1e6dff8..2a5a51a 100644
--- a/src/services/groups-service/groups-service.ts
+++ b/src/services/groups-service/groups-service.ts
@@ -12,7 +12,7 @@ import { CollectionResource } from "../../models/collection";
import { ProjectResource } from "../../models/project";
import { ProcessResource } from "../../models/process";
-export interface ContensArguments {
+export interface ContentsArguments {
limit?: number;
offset?: number;
order?: OrderBuilder;
@@ -31,7 +31,7 @@ export default class GroupsService<T extends GroupResource = GroupResource> exte
super(serverApi, "groups");
}
- contents(uuid: string, args: ContensArguments = {}): Promise<ListResults<GroupContentsResource>> {
+ contents(uuid: string, args: ContentsArguments = {}): Promise<ListResults<GroupContentsResource>> {
const { filters, order, ...other } = args;
const params = {
...other,
diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts
index 5fac2b2..9ce9e21 100644
--- a/src/services/project-service/project-service.ts
+++ b/src/services/project-service/project-service.ts
@@ -2,7 +2,7 @@
//
// SPDX-License-Identifier: AGPL-3.0
-import GroupsService, { ContensArguments } from "../groups-service/groups-service";
+import GroupsService, { ContentsArguments } from "../groups-service/groups-service";
import { ProjectResource } from "../../models/project";
import { GroupClass } from "../../models/group";
import { ListArguments } from "../../common/api/common-resource-service";
commit 8c8a3d8d646f99dce6a1cdbf515745d6f84bb814
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date: Fri Jul 6 16:34:13 2018 +0200
Create projects service
Feature #13747
Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
diff --git a/src/models/group.ts b/src/models/group.ts
index dae516b..4bb9a7f 100644
--- a/src/models/group.ts
+++ b/src/models/group.ts
@@ -8,11 +8,15 @@ import { ResourceKind } from "./kinds";
export interface GroupResource extends Resource {
kind: ResourceKind.Group;
name: string;
- groupClass: string;
+ groupClass: GroupClass | null;
description: string;
properties: string;
writeableBy: string[];
trashAt: string;
deleteAt: string;
isTrashed: boolean;
+}
+
+export enum GroupClass {
+ Project = "project"
}
\ No newline at end of file
diff --git a/src/models/project.ts b/src/models/project.ts
index beb9810..c44c8cc 100644
--- a/src/models/project.ts
+++ b/src/models/project.ts
@@ -3,11 +3,11 @@
// SPDX-License-Identifier: AGPL-3.0
import { Resource as R } from "./resource";
-import { GroupResource } from "./group";
+import { GroupResource, GroupClass } from "./group";
export interface Project extends R {
}
export interface ProjectResource extends GroupResource {
- groupClass: "project";
+ groupClass: GroupClass.Project;
}
diff --git a/src/services/groups-service/groups-service.ts b/src/services/groups-service/groups-service.ts
index ed61297..1e6dff8 100644
--- a/src/services/groups-service/groups-service.ts
+++ b/src/services/groups-service/groups-service.ts
@@ -12,7 +12,7 @@ import { CollectionResource } from "../../models/collection";
import { ProjectResource } from "../../models/project";
import { ProcessResource } from "../../models/process";
-interface ContensArguments {
+export interface ContensArguments {
limit?: number;
offset?: number;
order?: OrderBuilder;
@@ -25,7 +25,7 @@ export type GroupContentsResource =
ProjectResource |
ProcessResource;
-export default class GroupsService extends CommonResourceService<GroupResource> {
+export default class GroupsService<T extends GroupResource = GroupResource> extends CommonResourceService<T> {
constructor(serverApi: AxiosInstance) {
super(serverApi, "groups");
diff --git a/src/services/project-service/project-service.test.ts b/src/services/project-service/project-service.test.ts
new file mode 100644
index 0000000..68df245
--- /dev/null
+++ b/src/services/project-service/project-service.test.ts
@@ -0,0 +1,39 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import axios from "axios";
+import MockAdapter from "axios-mock-adapter";
+import ProjectService from "./project-service";
+import FilterBuilder from "../../common/api/filter-builder";
+import { ProjectResource } from "../../models/project";
+
+describe("CommonResourceService", () => {
+ const axiosInstance = axios.create();
+
+ it(`#create has groupClass set to "project"`, async () => {
+ axiosInstance.post = jest.fn(() => Promise.resolve({ data: {} }));
+ const projectService = new ProjectService(axiosInstance);
+ const resource = await projectService.create({ name: "nameValue" });
+ expect(axiosInstance.post).toHaveBeenCalledWith("/groups/", {
+ name: "nameValue",
+ group_class: "project"
+ });
+ });
+
+
+ it("#list has groupClass filter set by default", async () => {
+ axiosInstance.get = jest.fn(() => Promise.resolve({ data: {} }));
+ const projectService = new ProjectService(axiosInstance);
+ const resource = await projectService.list();
+ expect(axiosInstance.get).toHaveBeenCalledWith("/groups/", {
+ params: {
+ filters: FilterBuilder
+ .create<ProjectResource>()
+ .addEqual("groupClass", "project")
+ .serialize()
+ }
+ });
+ });
+
+});
diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts
new file mode 100644
index 0000000..5fac2b2
--- /dev/null
+++ b/src/services/project-service/project-service.ts
@@ -0,0 +1,36 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import GroupsService, { ContensArguments } from "../groups-service/groups-service";
+import { ProjectResource } from "../../models/project";
+import { GroupClass } from "../../models/group";
+import { ListArguments } from "../../common/api/common-resource-service";
+import FilterBuilder from "../../common/api/filter-builder";
+
+export default class ProjectService extends GroupsService<ProjectResource> {
+
+ create(data: Partial<ProjectResource>) {
+ const projectData = { ...data, groupClass: GroupClass.Project };
+ return super.create(projectData);
+ }
+
+ list(args: ListArguments = {}) {
+ return super.list({
+ ...args,
+ filters: this.addProjectFilter(args.filters)
+ });
+ }
+
+ private addProjectFilter(filters?: FilterBuilder) {
+ return FilterBuilder
+ .create()
+ .concat(filters
+ ? filters
+ : FilterBuilder.create())
+ .concat(FilterBuilder
+ .create<ProjectResource>()
+ .addEqual("groupClass", GroupClass.Project));
+ }
+
+}
\ No newline at end of file
diff --git a/src/services/services.ts b/src/services/services.ts
index 51d2b76..1e9a74d 100644
--- a/src/services/services.ts
+++ b/src/services/services.ts
@@ -6,7 +6,9 @@ import AuthService from "./auth-service/auth-service";
import CollectionService from "./collection-service/collection-service";
import GroupsService from "./groups-service/groups-service";
import { serverApi } from "../common/api/server-api";
+import ProjectService from "./project-service/project-service";
export const authService = new AuthService();
export const collectionService = new CollectionService();
export const groupsService = new GroupsService(serverApi);
+export const projectService = new ProjectService(serverApi);
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list