Add room entry edit mask
This commit is contained in:
parent
c536a04122
commit
5b50e497c9
|
|
@ -13,6 +13,7 @@
|
|||
import NewContentBlockWizard from '@/components/content-block-form/NewContentBlockWizard';
|
||||
import EditContentBlockWizard from '@/components/content-block-form/EditContentBlockWizard';
|
||||
import NewRoomEntryWizard from '@/components/rooms/room-entries/NewRoomEntryWizard';
|
||||
import EditRoomEntryWizard from '@/components/rooms/room-entries/EditRoomEntryWizard';
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
|
|
@ -24,7 +25,8 @@
|
|||
Modal,
|
||||
NewContentBlockWizard,
|
||||
EditContentBlockWizard,
|
||||
NewRoomEntryWizard
|
||||
NewRoomEntryWizard,
|
||||
EditRoomEntryWizard
|
||||
},
|
||||
|
||||
computed: {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
</a>
|
||||
<widget-popover entity="Eintrag"
|
||||
@delete="deleteRoomEntry"
|
||||
@edit="editRoomEntry"
|
||||
@hide-me="showMenu = false"
|
||||
:id="id"
|
||||
class="room-entry__popover"
|
||||
|
|
@ -67,7 +68,7 @@
|
|||
}
|
||||
})
|
||||
},
|
||||
editRoomEntry(id){
|
||||
editRoomEntry(id) {
|
||||
this.$store.dispatch('editRoomEntry', id);
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
<template>
|
||||
<contents-form
|
||||
v-if="entry.id"
|
||||
:content-block="entry"
|
||||
:show-task-selection="false"
|
||||
@save="saveEntry"
|
||||
block-type="RoomEntry"
|
||||
@hide="hideModal"
|
||||
></contents-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import UPDATE_ROOM_ENTRY_MUTATION from '@/graphql/gql/mutations/updateRoomEntry.gql';
|
||||
import ROOM_ENTRY_QUERY from '@/graphql/gql/roomEntryByIdQuery.gql';
|
||||
|
||||
import ContentsForm from '@/components/content-block-form/ContentsForm';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ContentsForm
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
entry: {}
|
||||
}
|
||||
},
|
||||
|
||||
apollo: {
|
||||
entry() {
|
||||
return {
|
||||
query: ROOM_ENTRY_QUERY,
|
||||
variables: {
|
||||
id: this.$store.state.currentRoomEntry
|
||||
},
|
||||
update(data) {
|
||||
return data.roomEntry;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
computed: {},
|
||||
|
||||
methods: {
|
||||
saveEntry(entry) {
|
||||
this.$apollo.mutate({
|
||||
mutation: UPDATE_ROOM_ENTRY_MUTATION,
|
||||
variables: {
|
||||
input: {
|
||||
roomEntry: entry
|
||||
}
|
||||
}
|
||||
}).then(() => {
|
||||
this.hideModal();
|
||||
});
|
||||
},
|
||||
hideModal() {
|
||||
this.$store.dispatch('hideModal');
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
#import "../fragments/roomEntryParts.gql"
|
||||
mutation UpdateRoomEntry($input: UpdateRoomEntryInput!){
|
||||
updateRoomEntry(input: $input) {
|
||||
roomEntry {
|
||||
...RoomEntryParts
|
||||
}
|
||||
errors
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#import "./fragments/roomEntryParts.gql"
|
||||
query RoomEntryQuery($id: ID!) {
|
||||
roomEntry(id: $id) {
|
||||
...RoomEntryParts
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ export default new Vuex.Store({
|
|||
scrollPosition: 0,
|
||||
filterForSchoolClass: '',
|
||||
currentContentBlock: '',
|
||||
currentRoomEntry: '',
|
||||
parentRoom: null
|
||||
},
|
||||
|
||||
|
|
@ -44,6 +45,10 @@ export default new Vuex.Store({
|
|||
commit('setParentRoom', payload);
|
||||
dispatch('showModal', 'new-room-entry-wizard');
|
||||
},
|
||||
editRoomEntry({commit, dispatch}, payload) {
|
||||
commit('setCurrentRoomEntry', payload);
|
||||
dispatch('showModal', 'edit-room-entry-wizard');
|
||||
},
|
||||
showModal({commit}, payload) {
|
||||
document.body.classList.add('no-scroll'); // won't get at the body any other way
|
||||
commit('setModal', payload);
|
||||
|
|
@ -77,6 +82,9 @@ export default new Vuex.Store({
|
|||
},
|
||||
setParentRoom(state, payload) {
|
||||
state.parentRoom = payload;
|
||||
},
|
||||
setCurrentRoomEntry(state, payload) {
|
||||
state.currentRoomEntry = payload;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -20,8 +20,15 @@ class UpdateRoomArgument(RoomInput):
|
|||
id = graphene.ID(required=True)
|
||||
|
||||
|
||||
class AddRoomEntryArgument(InputObjectType):
|
||||
class RoomEntryArgument(InputObjectType):
|
||||
title = graphene.String(required=True)
|
||||
subtitle = graphene.String()
|
||||
contents = graphene.List(ContentElementInput)
|
||||
|
||||
|
||||
class AddRoomEntryArgument(RoomEntryArgument):
|
||||
room = graphene.ID(required=True)
|
||||
|
||||
|
||||
class UpdateRoomEntryArgument(RoomEntryArgument):
|
||||
id = graphene.ID(required=True)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import graphene
|
||||
from graphene import relay
|
||||
from graphql_relay import to_global_id
|
||||
from graphql_relay import to_global_id, from_global_id
|
||||
|
||||
from api.utils import get_object
|
||||
from rooms.inputs import UpdateRoomArgument, AddRoomArgument, AddRoomEntryArgument
|
||||
from rooms.inputs import UpdateRoomArgument, AddRoomArgument, AddRoomEntryArgument, UpdateRoomEntryArgument
|
||||
from rooms.models import Room, RoomEntry
|
||||
from rooms.schema import RoomNode, RoomEntryNode
|
||||
from rooms.serializers import RoomSerializer, RoomEntrySerializer
|
||||
|
|
@ -71,20 +71,22 @@ class DeleteRoom(relay.ClientIDMutation):
|
|||
return cls(success=True)
|
||||
|
||||
|
||||
class AddRoomEntry(relay.ClientIDMutation):
|
||||
class Input:
|
||||
room_entry = graphene.Argument(AddRoomEntryArgument)
|
||||
|
||||
class MutateRoomEntry(relay.ClientIDMutation):
|
||||
room_entry = graphene.Field(RoomEntryNode)
|
||||
errors = graphene.List(graphene.String)
|
||||
|
||||
@classmethod
|
||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||
room_entry_data = kwargs.get('room_entry')
|
||||
room_entry_data['room'] = get_object(Room, room_entry_data.get('room')).id
|
||||
if room_entry_data.get('room') is not None:
|
||||
room_entry_data['room'] = get_object(Room, room_entry_data.get('room')).id
|
||||
room_entry_data['author'] = info.context.user.pk
|
||||
|
||||
serializer = RoomEntrySerializer(data=room_entry_data)
|
||||
if room_entry_data.get('id') is not None:
|
||||
instance = get_object(RoomEntry, room_entry_data.get('id'))
|
||||
serializer = RoomEntrySerializer(instance, data=room_entry_data, partial=True)
|
||||
else:
|
||||
serializer = RoomEntrySerializer(data=room_entry_data)
|
||||
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
|
|
@ -94,6 +96,16 @@ class AddRoomEntry(relay.ClientIDMutation):
|
|||
return cls(room_entry=None, errors=['{}: {}'.format(key, value) for key, value in serializer.errors.items()])
|
||||
|
||||
|
||||
class AddRoomEntry(MutateRoomEntry):
|
||||
class Input:
|
||||
room_entry = graphene.Argument(AddRoomEntryArgument)
|
||||
|
||||
|
||||
class UpdateRoomEntry(MutateRoomEntry):
|
||||
class Input:
|
||||
room_entry = graphene.Argument(UpdateRoomEntryArgument)
|
||||
|
||||
|
||||
class DeleteRoomEntry(relay.ClientIDMutation):
|
||||
class Input:
|
||||
id = graphene.ID(required=True)
|
||||
|
|
@ -121,3 +133,4 @@ class RoomMutations:
|
|||
delete_room = DeleteRoom.Field()
|
||||
add_room_entry = AddRoomEntry.Field()
|
||||
delete_room_entry = DeleteRoomEntry.Field()
|
||||
update_room_entry = UpdateRoomEntry.Field()
|
||||
|
|
|
|||
Loading…
Reference in New Issue