From a81bb0e1e87475cc643eed35d86e7fbfa5d2768a Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 27 Jun 2022 11:29:01 +0200 Subject: [PATCH] Add new edit page for room entries Also use slug instead of id to identify room entries --- client/src/components/rooms/RoomEntry.vue | 2 +- .../src/components/rooms/RoomEntryActions.vue | 24 ++-- .../rooms/room-entries/NewRoomEntryWizard.vue | 92 --------------- client/src/pages/rooms/editRoomEntry.vue | 110 ++++++++++++++++++ client/src/pages/rooms/newRoomEntry.vue | 2 +- client/src/router/room.names.js | 1 + client/src/router/room.routes.js | 4 +- server/rooms/inputs.py | 4 +- server/rooms/mutations.py | 10 +- server/schema.graphql | 2 +- 10 files changed, 140 insertions(+), 111 deletions(-) delete mode 100644 client/src/components/rooms/room-entries/NewRoomEntryWizard.vue create mode 100644 client/src/pages/rooms/editRoomEntry.vue diff --git a/client/src/components/rooms/RoomEntry.vue b/client/src/components/rooms/RoomEntry.vue index f45fb7e5..7aed49bc 100644 --- a/client/src/components/rooms/RoomEntry.vue +++ b/client/src/components/rooms/RoomEntry.vue @@ -34,8 +34,8 @@ diff --git a/client/src/components/rooms/RoomEntryActions.vue b/client/src/components/rooms/RoomEntryActions.vue index 16549cb0..0c4364f7 100644 --- a/client/src/components/rooms/RoomEntryActions.vue +++ b/client/src/components/rooms/RoomEntryActions.vue @@ -3,13 +3,13 @@ @@ -19,10 +19,11 @@ import MoreActions from '@/components/rooms/MoreActions'; import DELETE_ROOM_ENTRY_MUTATION from 'gql/mutations/rooms/deleteRoomEntry'; import ROOM_ENTRIES_QUERY from 'gql/queries/roomEntriesQuery'; + import {UPDATE_ROOM_ENTRY_PAGE} from '@/router/room.names'; export default { props: { - id: { + slug: { type: String, default: '', }, @@ -40,12 +41,12 @@ }, methods: { - deleteRoomEntry(id) { + deleteRoomEntry(slug) { this.$apollo.mutate({ mutation: DELETE_ROOM_ENTRY_MUTATION, variables: { input: { - id, + slug, }, }, update(store, {data: {deleteRoomEntry: {success, roomSlug}}}) { @@ -54,15 +55,22 @@ const variables = {slug: roomSlug}; const data = store.readQuery({query, variables}); if (data) { - data.room.roomEntries.edges.splice(data.room.roomEntries.edges.findIndex(edge => edge.node.id === id), 1); + // todo: make immutable + data.room.roomEntries.edges.splice(data.room.roomEntries.edges.findIndex(edge => edge.node.slug === slug), 1); store.writeQuery({query, data, variables}); } } }, }); }, - editRoomEntry(id) { - this.$store.dispatch('editRoomEntry', id); + editRoomEntry(slug) { + this.$router.push({ + name: UPDATE_ROOM_ENTRY_PAGE, + params: { + slug: this.$route.params.slug, + entrySlug: slug + } + }); }, }, }; diff --git a/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue b/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue deleted file mode 100644 index 06aebd61..00000000 --- a/client/src/components/rooms/room-entries/NewRoomEntryWizard.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - diff --git a/client/src/pages/rooms/editRoomEntry.vue b/client/src/pages/rooms/editRoomEntry.vue new file mode 100644 index 00000000..ad630a8c --- /dev/null +++ b/client/src/pages/rooms/editRoomEntry.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/client/src/pages/rooms/newRoomEntry.vue b/client/src/pages/rooms/newRoomEntry.vue index 124998ed..04c46636 100644 --- a/client/src/pages/rooms/newRoomEntry.vue +++ b/client/src/pages/rooms/newRoomEntry.vue @@ -52,7 +52,7 @@ const entry = { title, contents, - slug: this.slug + roomSlug: this.slug }; this.$apollo.mutate({ mutation: NEW_ROOM_ENTRY_MUTATION, diff --git a/client/src/router/room.names.js b/client/src/router/room.names.js index f99a3a30..6edd6e8a 100644 --- a/client/src/router/room.names.js +++ b/client/src/router/room.names.js @@ -2,3 +2,4 @@ export const NEW_ROOM_PAGE = 'new-room'; export const ROOMS_PAGE = 'rooms'; export const ROOM_PAGE = 'room'; export const ADD_ROOM_ENTRY_PAGE = 'add-room-entry'; +export const UPDATE_ROOM_ENTRY_PAGE = 'update-room-entry'; diff --git a/client/src/router/room.routes.js b/client/src/router/room.routes.js index d1e4e0e0..c1f15b50 100644 --- a/client/src/router/room.routes.js +++ b/client/src/router/room.routes.js @@ -1,10 +1,11 @@ -import {NEW_ROOM_PAGE, ROOMS_PAGE, ADD_ROOM_ENTRY_PAGE, ROOM_PAGE} from '@/router/room.names'; +import {NEW_ROOM_PAGE, ROOMS_PAGE, ADD_ROOM_ENTRY_PAGE, ROOM_PAGE, UPDATE_ROOM_ENTRY_PAGE} from '@/router/room.names'; const rooms = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/rooms'); const newRoom = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/newRoom'); const editRoom = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/editRoom'); const room = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/room'); const newRoomEntry = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/newRoomEntry'); +const editRoomEntry = () => import(/* webpackChunkName: "rooms" */'@/pages/rooms/editRoomEntry'); const moduleRoom = () => import(/* webpackChunkName: "rooms" */'@/pages/module/moduleRoom'); export default [ @@ -13,6 +14,7 @@ export default [ {path: '/edit-room/:id', name: 'edit-room', component: editRoom, props: true}, {path: '/room/:slug', name: ROOM_PAGE, component: room, props: true}, {path: '/room/:slug/add', name: ADD_ROOM_ENTRY_PAGE, component: newRoomEntry, props: true}, + {path: '/room/:slug/edit/:entrySlug', name: UPDATE_ROOM_ENTRY_PAGE, component: editRoomEntry, props: true}, { path: '/module-room/:slug', name: 'moduleRoom', diff --git a/server/rooms/inputs.py b/server/rooms/inputs.py index 499468ca..6e7a2d8d 100644 --- a/server/rooms/inputs.py +++ b/server/rooms/inputs.py @@ -26,8 +26,8 @@ class RoomEntryArgument(InputObjectType): class AddRoomEntryArgument(RoomEntryArgument): - slug = graphene.String(required=True) + room_slug = graphene.String(required=True) class UpdateRoomEntryArgument(RoomEntryArgument): - id = graphene.ID(required=True) + slug = graphene.String(required=True) diff --git a/server/rooms/mutations.py b/server/rooms/mutations.py index 74606e9b..a4a033b5 100644 --- a/server/rooms/mutations.py +++ b/server/rooms/mutations.py @@ -86,13 +86,13 @@ class MutateRoomEntry(relay.ClientIDMutation): def mutate_and_get_payload(cls, root, info, **kwargs): room_entry_data = kwargs.get('room_entry') room = None - slug = room_entry_data.get('slug') + room_slug = room_entry_data.get('room_slug') - if slug is not None: - room = Room.objects.get(slug=slug) + if room_slug is not None: + room = Room.objects.get(slug=room_slug) room_entry_data['room'] = room.id - if room_entry_data.get('id') is not None: + if room_entry_data.get('slug') is not None: serializer = cls.update_room_entry(info, room_entry_data) else: serializer = cls.add_room_entry(info, room_entry_data, room) @@ -106,7 +106,7 @@ class MutateRoomEntry(relay.ClientIDMutation): @classmethod def update_room_entry(cls, info, room_entry_data): - instance = get_object(RoomEntry, room_entry_data.get('id')) + instance = RoomEntry.objects.get(slug=room_entry_data.get('slug')) if not instance.room.school_class.is_user_in_schoolclass(info.context.user): raise Exception('You are in the wrong class') diff --git a/server/schema.graphql b/server/schema.graphql index 6eea61e0..93b685fc 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -118,7 +118,7 @@ input AddRoomArgument { input AddRoomEntryArgument { title: String! contents: [ContentElementInput] - slug: String! + roomSlug: String! } input AddRoomEntryInput {