From 87a12c25b1ea1bfba8e52e311881e7b7eefc083d Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Fri, 5 Feb 2021 09:46:16 -0800 Subject: [PATCH] Complete public map filtering --- packages/webapp/src/client/index.ts | 6 ++-- .../webapp/src/client/mock-client/index.ts | 32 ++++++++++--------- .../webapp/src/client/rest-client/index.ts | 16 +++++++--- .../components/maps-page/maps-list/index.tsx | 15 ++++----- 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/packages/webapp/src/client/index.ts b/packages/webapp/src/client/index.ts index df8e0cb2..622f2115 100644 --- a/packages/webapp/src/client/index.ts +++ b/packages/webapp/src/client/index.ts @@ -22,6 +22,7 @@ export type MapInfo = { modified: string; description: string; isPublic: boolean; + role: 'owner' | 'editor' | 'viewer' } export type HistoryChange = { @@ -47,7 +48,7 @@ export type ErrorInfo = { interface Client { - createMap(map: BasicMapInfo): Promise; + createMap(map: BasicMapInfo): Promise; deleteMap(id: number): Promise; renameMap(id: number, basicInfo: BasicMapInfo): Promise; fetchAllMaps(): Promise; @@ -56,7 +57,8 @@ interface Client { changeStarred(id: number, starred: boolean): Promise; fetchLabels(): Promise; - deleteLabel(id: number): Promise; + // createLabel(label: Label): Promise; + deleteLabel(id: number): Promise; registerNewUser(user: NewUser): Promise; resetPassword(email: string): Promise; diff --git a/packages/webapp/src/client/mock-client/index.ts b/packages/webapp/src/client/mock-client/index.ts index 522793ea..6be49f56 100644 --- a/packages/webapp/src/client/mock-client/index.ts +++ b/packages/webapp/src/client/mock-client/index.ts @@ -15,23 +15,24 @@ class MockClient implements Client { creator: string, modified: string, description: string, - isPublic: boolean + isPublic: boolean, + role: 'owner' | 'viewer' | 'editor' ): MapInfo { - return { id, title, labels, creator, modified, starred, description, isPublic }; + return { id, title, labels, creator, modified, starred, description, isPublic, role }; } this.maps = [ - createMapInfo(1, true, "El Mapa", [], "Paulo", "2008-06-02T00:00:00Z", "", true), - createMapInfo(2, false, "El Mapa2", [], "Paulo2", "2008-06-02T00:00:00Z", "", false), - createMapInfo(3, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(4, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(5, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(6, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(7, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(8, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(9, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(10, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(11, false, "El Mapa3", [1, 2, 3], "Paulo3", "2008-06-02T00:00:00Z", "", false), - createMapInfo(12, false, "El Mapa3", [1, 2, 3], "Paulo3", "2008-06-02T00:00:00Z", "", false) + createMapInfo(1, true, "El Mapa", [], "Paulo", "2008-06-02T00:00:00Z", "", true, 'owner'), + createMapInfo(2, false, "El Mapa2", [], "Paulo2", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(3, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(4, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(5, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(6, false, "/El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(7, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(8, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(9, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(10, false, "El Mapa3", [], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(11, false, "El Mapa3", [1, 2, 3], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor'), + createMapInfo(12, false, "El Mapa3", [1, 2, 3], "Paulo3", "2008-06-02T00:00:00Z", "", false, 'editor') ]; this.labels = [ @@ -104,7 +105,8 @@ class MockClient implements Client { creator: "current user", labels: [], modified: "2008-06-02T00:00:00Z", - isPublic: false + isPublic: false, + role: 'owner' }; this.maps.push(newMap); return Promise.resolve(newMap.id); diff --git a/packages/webapp/src/client/rest-client/index.ts b/packages/webapp/src/client/rest-client/index.ts index be8a760a..c310aef5 100644 --- a/packages/webapp/src/client/rest-client/index.ts +++ b/packages/webapp/src/client/rest-client/index.ts @@ -98,11 +98,12 @@ export default class RestClient implements Client { id: m.id, starred: Boolean(m.starred), title: m.title, - labels: [], + labels: m.labels, creator: m.creator, modified: m.lastModificationTime, description: m.description, - isPublic: false + isPublic: m['public'], + role: m.role } }) success(maps); @@ -233,8 +234,15 @@ export default class RestClient implements Client { } deleteLabel(id: number): Promise { - console.log("Fetching labels from server") - return Promise.resolve(); + const handler = (success: () => void, reject: (error: ErrorInfo) => void) => { + axios.delete(this.baseUrl + `/c/restful/label/${id}`).then(response => { + success(); + }).catch(error => { + const errorInfo = this.parseResponseOnError(error.response); + reject(errorInfo); + }); + } + return new Promise(handler); } } diff --git a/packages/webapp/src/components/maps-page/maps-list/index.tsx b/packages/webapp/src/components/maps-page/maps-list/index.tsx index 1ba32f8c..6af426f5 100644 --- a/packages/webapp/src/components/maps-page/maps-list/index.tsx +++ b/packages/webapp/src/components/maps-page/maps-list/index.tsx @@ -75,7 +75,7 @@ const headCells: HeadCell[] = [ { id: 'title', numeric: false, label: 'Name' }, { id: 'labels', numeric: false }, { id: 'creator', numeric: false, label: 'Creator', style: { width: '60px' } }, - { id: 'modified', numeric: true, label: 'Modified', style: { width: '30px' } } + { id: 'modified', numeric: true, label: 'Last Update', style: { width: '30px' } } ]; interface EnhancedTableProps { @@ -156,24 +156,21 @@ const mapsFilter = (filter: Filter, search: string): ((mapInfo: MapInfo) => bool case 'all': result = true; break; - case 'public': - result = mapInfo.isPublic; - break; case 'starred': result = mapInfo.starred; break; case 'owned': - //@todo: complete ... - - result = mapInfo.starred; + result = mapInfo.role == 'owner'; break; case 'shared': - //@todo: complete ... - result = mapInfo.starred; + result = mapInfo.role != 'owner'; break; case 'label': result = !mapInfo.labels || mapInfo.labels.includes((filter as LabelFilter).label.id) break; + case 'public': + result = mapInfo.isPublic; + break; default: result = false; }