Split up add and change mutations for rooms

This commit is contained in:
Ramon Wenger 2018-09-20 16:21:36 +02:00
parent 66ad787779
commit b37038f74d
4 changed files with 38 additions and 20 deletions

View File

@ -28,7 +28,7 @@
<script>
import RoomColors from '@/components/rooms/RoomColors';
import ROOM_MUTATION from '@/graphql/gql/mutations/mutateRoom.gql';
import ADD_ROOM_MUTATION from '@/graphql/gql/mutations/addRoom.gql';
import ROOMS_QUERY from '@/graphql/gql/roomsQuery.gql';
const defaultColor = 'blue';
@ -56,20 +56,24 @@
},
mutateRoom(room) {
this.$apollo.mutate({
mutation: ROOM_MUTATION,
mutation: ADD_ROOM_MUTATION,
variables: {
input: {
room: room
}
},
update: (store, {data: {mutateRoom: {room}}}) => {
const data = store.readQuery({query: ROOMS_QUERY});
if (data.allRooms) {
data.allRooms.edges.push({
node: room,
__typename: 'RoomNode'
});
store.writeQuery({query: ROOMS_QUERY, data});
update: (store, {data: {addRoom: {room}}}) => {
try {
const data = store.readQuery({query: ROOMS_QUERY});
if (data.allRooms) {
data.allRooms.edges.push({
node: room,
__typename: 'RoomNode'
});
store.writeQuery({query: ROOMS_QUERY, data});
}
} catch (e) {
// Query did not exist in the cache, and apollo throws a generic Error. Do nothing
}
}
}).then(() => {

View File

@ -1,6 +1,6 @@
#import "../fragments/roomParts.gql"
mutation MutateRoom($input: MutateRoomInput!){
mutateRoom(input: $input) {
mutation AddRoom($input: AddRoomInput!){
addRoom(input: $input) {
room {
...RoomParts
},

View File

@ -3,8 +3,15 @@ from graphene import InputObjectType
class RoomInput(InputObjectType):
id = graphene.ID()
title = graphene.String()
description = graphene.String()
user_group = graphene.ID()
appearance = graphene.String()
appearance = graphene.String()
class RoomAddInput(RoomInput):
pass
class RoomChangeInput(RoomInput):
id = graphene.ID(required=True)

View File

@ -2,16 +2,13 @@ import graphene
from graphene import relay
from api.utils import get_object
from rooms.inputs import RoomInput
from rooms.inputs import RoomChangeInput, RoomAddInput
from rooms.schema import RoomNode
from rooms.serializers import RoomSerializer
from user.models import UserGroup
class AddRoom(relay.ClientIDMutation):
class Input:
room = graphene.Argument(RoomInput)
class MutateRoom(relay.ClientIDMutation):
errors = graphene.List(graphene.String)
room = graphene.Field(RoomNode)
@ -28,6 +25,16 @@ class AddRoom(relay.ClientIDMutation):
return cls(room=None, errors=['{}: {}'.format(key, value) for key, value in serializer.errors.items()])
class AddRoom(MutateRoom):
class Input:
room = graphene.Argument(RoomAddInput) # NB: can't be named AddRoomInput, otherwise graphene complains
class ChangeRoom(MutateRoom):
class Input:
room = graphene.Argument(RoomChangeInput) # NB: can't be named ChangeRoomInput, otherwise graphene complains
class RoomMutations:
mutate_room = MutateRoom.Field()
change_room = ChangeRoom.Field()
add_room = AddRoom.Field()