From 6ce00694d7454fba26785ee69c611def452ce13b Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Wed, 26 Jan 2022 22:34:02 +0100 Subject: [PATCH] Remove edges from rooms query --- .../frontend/read-only/rooms.spec.js | 30 ++++++++----------- .../frontend/rooms/room-page.spec.js | 4 +-- .../frontend/rooms/rooms-page.spec.js | 24 +++++---------- client/src/components/rooms/RoomActions.vue | 13 ++++++-- .../rooms/room-entries/NewRoomEntryWizard.vue | 23 ++++++++++---- client/src/graphql/gql/queries/roomsQuery.gql | 6 +--- client/src/pages/newRoom.vue | 15 ++++++---- client/src/pages/rooms.vue | 3 -- server/rooms/schema.py | 2 +- server/schema.graphql | 12 +------- 10 files changed, 60 insertions(+), 72 deletions(-) diff --git a/client/cypress/integration/frontend/read-only/rooms.spec.js b/client/cypress/integration/frontend/read-only/rooms.spec.js index 6acdd060..988f4299 100644 --- a/client/cypress/integration/frontend/read-only/rooms.spec.js +++ b/client/cypress/integration/frontend/read-only/rooms.spec.js @@ -13,24 +13,18 @@ describe('Room Team Management - Read only', () => { }, }, RoomsQuery: { - rooms: { - edges: [ - { - node: { - id: '', - slug: '', - title: 'some room', - entryCount: 3, - appearance: 'red', - description: 'some description', - schoolClass: { - id: SELECTED_CLASS_ID, - name: 'bla', - }, - }, - }, - ], - }, + rooms: [{ + id: '', + slug: '', + title: 'some room', + entryCount: 3, + appearance: 'red', + description: 'some description', + schoolClass: { + id: SELECTED_CLASS_ID, + name: 'bla', + }, + }], }, }); diff --git a/client/cypress/integration/frontend/rooms/room-page.spec.js b/client/cypress/integration/frontend/rooms/room-page.spec.js index 3a8460c8..134abe67 100644 --- a/client/cypress/integration/frontend/rooms/room-page.spec.js +++ b/client/cypress/integration/frontend/rooms/room-page.spec.js @@ -156,9 +156,7 @@ describe('The Room Page', () => { MeQuery, RoomsQuery() { return { - rooms: { - edges: rooms.map(room => ({node: room})), - }, + rooms }; }, RoomEntriesQuery: { diff --git a/client/cypress/integration/frontend/rooms/rooms-page.spec.js b/client/cypress/integration/frontend/rooms/rooms-page.spec.js index 3b160a02..a83dc9a5 100644 --- a/client/cypress/integration/frontend/rooms/rooms-page.spec.js +++ b/client/cypress/integration/frontend/rooms/rooms-page.spec.js @@ -4,17 +4,11 @@ describe('The Rooms Page', () => { const getOperations = (isTeacher) => ({ MeQuery: getMinimalMe({isTeacher}), RoomsQuery: { - rooms: { - edges: [ - { - node: { - schoolClass: { - id: btoa('SchoolClassNode:selectedClassId'), - }, - }, - }, - ], - }, + rooms: [{ + schoolClass: { + id: btoa('SchoolClassNode:selectedClassId'), + }, + }], }, }); @@ -23,9 +17,7 @@ describe('The Rooms Page', () => { return { ...operations, RoomsQuery: { - rooms: { - edges: [], - }, + rooms: [], }, }; }; @@ -105,9 +97,7 @@ describe('The Rooms Page', () => { MeQuery, RoomsQuery() { return { - rooms: { - edges: rooms.map(room => ({node: room})), - }, + rooms }; }, AddRoom({input: {room: {title, appearance, description}}}) { diff --git a/client/src/components/rooms/RoomActions.vue b/client/src/components/rooms/RoomActions.vue index cafb6022..c3780dd4 100644 --- a/client/src/components/rooms/RoomActions.vue +++ b/client/src/components/rooms/RoomActions.vue @@ -59,9 +59,16 @@ }, update: (store, {data: {deleteRoom: {success}}}) => { if (success) { - const data = store.readQuery({query: ROOMS_QUERY}); - if (data) { - data.rooms.edges.splice(data.rooms.edges.findIndex(edge => edge.node.id === this.id), 1); + const {rooms} = store.readQuery({query: ROOMS_QUERY}); + if (rooms) { + const index = rooms.findIndex(edge => edge.node.id === this.id); + const slicedRooms = [ + rooms.slice(0, index), + rooms.slice(index+1) + ]; + const data = { + rooms: slicedRooms + }; store.writeQuery({query: ROOMS_QUERY, data}); } } diff --git a/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue b/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue index 11321e3a..216278a9 100644 --- a/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue +++ b/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue @@ -53,12 +53,25 @@ try { const query = ROOM_ENTRIES_QUERY; const variables = {slug: this.room.slug}; - const data = store.readQuery({query, variables}); - if (data.room && data.room.roomEntries) { - data.room.roomEntries.edges.unshift({ + const {room} = store.readQuery({query, variables}); + if (room && room.roomEntries) { + const newEdge ={ node: roomEntry, - __typename: 'RoomEntryNode' - }); + __typename: 'RoomEntryNodeEdge' + }; + const edges = [ + newEdge, + ...room.roomEntries.edges + ]; + const data = { + room: { + ...room, + roomEntries: { + ...room.roomEntries, + edges + } + } + }; store.writeQuery({query, variables, data}); } } catch (e) { diff --git a/client/src/graphql/gql/queries/roomsQuery.gql b/client/src/graphql/gql/queries/roomsQuery.gql index d98d8902..92c71b66 100644 --- a/client/src/graphql/gql/queries/roomsQuery.gql +++ b/client/src/graphql/gql/queries/roomsQuery.gql @@ -1,10 +1,6 @@ #import "../fragments/roomParts.gql" query RoomsQuery { rooms { - edges { - node { - ...RoomParts - } - } + ...RoomParts } } diff --git a/client/src/pages/newRoom.vue b/client/src/pages/newRoom.vue index 1ff8bd2e..6380693b 100644 --- a/client/src/pages/newRoom.vue +++ b/client/src/pages/newRoom.vue @@ -40,12 +40,15 @@ }, update: (store, {data: {addRoom: {room}}}) => { try { - const data = store.readQuery({query: ROOMS_QUERY}); - if (data.rooms) { - data.rooms.edges.push({ - node: room, - __typename: 'RoomNodeEdge' - }); + const {rooms} = store.readQuery({query: ROOMS_QUERY}); + if (rooms) { + const expandedRooms = [ + ...rooms, + room + ]; + const data = { + rooms: expandedRooms + }; store.writeQuery({query: ROOMS_QUERY, data}); } } catch (e) { diff --git a/client/src/pages/rooms.vue b/client/src/pages/rooms.vue index 929398aa..a1e51fd0 100644 --- a/client/src/pages/rooms.vue +++ b/client/src/pages/rooms.vue @@ -69,9 +69,6 @@ apollo: { rooms: { query: ROOMS_QUERY, - update(data) { - return this.$getRidOfEdges(data).rooms; - }, pollInterval: 5000, }, me: { diff --git a/server/rooms/schema.py b/server/rooms/schema.py index aef280cf..73969a91 100644 --- a/server/rooms/schema.py +++ b/server/rooms/schema.py @@ -67,7 +67,7 @@ class RoomsQuery(object): room_entry = graphene.Field(RoomEntryNode, id=graphene.ID(), slug=graphene.String()) room = graphene.Field(RoomNode, slug=graphene.String(), id=graphene.ID(), appearance=graphene.String()) - rooms = DjangoFilterConnectionField(RoomNode) + rooms = graphene.List(RoomNode) all_room_entries = DjangoFilterConnectionField(RoomEntryNode) def resolve_rooms(self, info, **kwargs): diff --git a/server/schema.graphql b/server/schema.graphql index def4a6c6..ff394e82 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -474,7 +474,7 @@ type CustomQuery { objectiveGroups(offset: Int, before: String, after: String, first: Int, last: Int, title: String, module_Slug: String): ObjectiveGroupNodeConnection roomEntry(id: ID, slug: String): RoomEntryNode room(slug: String, id: ID, appearance: String): RoomNode - rooms(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, appearance: String): RoomNodeConnection + rooms: [RoomNode] allRoomEntries(offset: Int, before: String, after: String, first: Int, last: Int, slug: String): RoomEntryNodeConnection moduleRoom(slug: String, classId: ID): RoomNode me: PrivateUserNode @@ -933,16 +933,6 @@ type RoomNode implements Node { entryCount: Int } -type RoomNodeConnection { - pageInfo: PageInfo! - edges: [RoomNodeEdge]! -} - -type RoomNodeEdge { - node: RoomNode - cursor: String! -} - input SchoolClassInput { id: ID name: String