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

View File

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

View File

@ -3,8 +3,15 @@ from graphene import InputObjectType
class RoomInput(InputObjectType): class RoomInput(InputObjectType):
id = graphene.ID()
title = graphene.String() title = graphene.String()
description = graphene.String() description = graphene.String()
user_group = graphene.ID() 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 graphene import relay
from api.utils import get_object from api.utils import get_object
from rooms.inputs import RoomInput from rooms.inputs import RoomChangeInput, RoomAddInput
from rooms.schema import RoomNode from rooms.schema import RoomNode
from rooms.serializers import RoomSerializer from rooms.serializers import RoomSerializer
from user.models import UserGroup from user.models import UserGroup
class AddRoom(relay.ClientIDMutation): class MutateRoom(relay.ClientIDMutation):
class Input:
room = graphene.Argument(RoomInput)
errors = graphene.List(graphene.String) errors = graphene.List(graphene.String)
room = graphene.Field(RoomNode) 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()]) 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: class RoomMutations:
mutate_room = MutateRoom.Field() change_room = ChangeRoom.Field()
add_room = AddRoom.Field() add_room = AddRoom.Field()