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 NewContentBlockWizard from '@/components/content-block-form/NewContentBlockWizard';
|
||||||
import EditContentBlockWizard from '@/components/content-block-form/EditContentBlockWizard';
|
import EditContentBlockWizard from '@/components/content-block-form/EditContentBlockWizard';
|
||||||
import NewRoomEntryWizard from '@/components/rooms/room-entries/NewRoomEntryWizard';
|
import NewRoomEntryWizard from '@/components/rooms/room-entries/NewRoomEntryWizard';
|
||||||
|
import EditRoomEntryWizard from '@/components/rooms/room-entries/EditRoomEntryWizard';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'App',
|
name: 'App',
|
||||||
|
|
@ -24,7 +25,8 @@
|
||||||
Modal,
|
Modal,
|
||||||
NewContentBlockWizard,
|
NewContentBlockWizard,
|
||||||
EditContentBlockWizard,
|
EditContentBlockWizard,
|
||||||
NewRoomEntryWizard
|
NewRoomEntryWizard,
|
||||||
|
EditRoomEntryWizard
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
</a>
|
</a>
|
||||||
<widget-popover entity="Eintrag"
|
<widget-popover entity="Eintrag"
|
||||||
@delete="deleteRoomEntry"
|
@delete="deleteRoomEntry"
|
||||||
|
@edit="editRoomEntry"
|
||||||
@hide-me="showMenu = false"
|
@hide-me="showMenu = false"
|
||||||
:id="id"
|
:id="id"
|
||||||
class="room-entry__popover"
|
class="room-entry__popover"
|
||||||
|
|
@ -67,7 +68,7 @@
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
editRoomEntry(id){
|
editRoomEntry(id) {
|
||||||
this.$store.dispatch('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,
|
scrollPosition: 0,
|
||||||
filterForSchoolClass: '',
|
filterForSchoolClass: '',
|
||||||
currentContentBlock: '',
|
currentContentBlock: '',
|
||||||
|
currentRoomEntry: '',
|
||||||
parentRoom: null
|
parentRoom: null
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -44,6 +45,10 @@ export default new Vuex.Store({
|
||||||
commit('setParentRoom', payload);
|
commit('setParentRoom', payload);
|
||||||
dispatch('showModal', 'new-room-entry-wizard');
|
dispatch('showModal', 'new-room-entry-wizard');
|
||||||
},
|
},
|
||||||
|
editRoomEntry({commit, dispatch}, payload) {
|
||||||
|
commit('setCurrentRoomEntry', payload);
|
||||||
|
dispatch('showModal', 'edit-room-entry-wizard');
|
||||||
|
},
|
||||||
showModal({commit}, payload) {
|
showModal({commit}, payload) {
|
||||||
document.body.classList.add('no-scroll'); // won't get at the body any other way
|
document.body.classList.add('no-scroll'); // won't get at the body any other way
|
||||||
commit('setModal', payload);
|
commit('setModal', payload);
|
||||||
|
|
@ -77,6 +82,9 @@ export default new Vuex.Store({
|
||||||
},
|
},
|
||||||
setParentRoom(state, payload) {
|
setParentRoom(state, payload) {
|
||||||
state.parentRoom = payload;
|
state.parentRoom = payload;
|
||||||
|
},
|
||||||
|
setCurrentRoomEntry(state, payload) {
|
||||||
|
state.currentRoomEntry = payload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,15 @@ class UpdateRoomArgument(RoomInput):
|
||||||
id = graphene.ID(required=True)
|
id = graphene.ID(required=True)
|
||||||
|
|
||||||
|
|
||||||
class AddRoomEntryArgument(InputObjectType):
|
class RoomEntryArgument(InputObjectType):
|
||||||
title = graphene.String(required=True)
|
title = graphene.String(required=True)
|
||||||
subtitle = graphene.String()
|
subtitle = graphene.String()
|
||||||
contents = graphene.List(ContentElementInput)
|
contents = graphene.List(ContentElementInput)
|
||||||
|
|
||||||
|
|
||||||
|
class AddRoomEntryArgument(RoomEntryArgument):
|
||||||
room = graphene.ID(required=True)
|
room = graphene.ID(required=True)
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateRoomEntryArgument(RoomEntryArgument):
|
||||||
|
id = graphene.ID(required=True)
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import relay
|
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 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.models import Room, RoomEntry
|
||||||
from rooms.schema import RoomNode, RoomEntryNode
|
from rooms.schema import RoomNode, RoomEntryNode
|
||||||
from rooms.serializers import RoomSerializer, RoomEntrySerializer
|
from rooms.serializers import RoomSerializer, RoomEntrySerializer
|
||||||
|
|
@ -71,20 +71,22 @@ class DeleteRoom(relay.ClientIDMutation):
|
||||||
return cls(success=True)
|
return cls(success=True)
|
||||||
|
|
||||||
|
|
||||||
class AddRoomEntry(relay.ClientIDMutation):
|
class MutateRoomEntry(relay.ClientIDMutation):
|
||||||
class Input:
|
|
||||||
room_entry = graphene.Argument(AddRoomEntryArgument)
|
|
||||||
|
|
||||||
room_entry = graphene.Field(RoomEntryNode)
|
room_entry = graphene.Field(RoomEntryNode)
|
||||||
errors = graphene.List(graphene.String)
|
errors = graphene.List(graphene.String)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
room_entry_data = kwargs.get('room_entry')
|
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
|
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():
|
if serializer.is_valid():
|
||||||
serializer.save()
|
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()])
|
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 DeleteRoomEntry(relay.ClientIDMutation):
|
||||||
class Input:
|
class Input:
|
||||||
id = graphene.ID(required=True)
|
id = graphene.ID(required=True)
|
||||||
|
|
@ -121,3 +133,4 @@ class RoomMutations:
|
||||||
delete_room = DeleteRoom.Field()
|
delete_room = DeleteRoom.Field()
|
||||||
add_room_entry = AddRoomEntry.Field()
|
add_room_entry = AddRoomEntry.Field()
|
||||||
delete_room_entry = DeleteRoomEntry.Field()
|
delete_room_entry = DeleteRoomEntry.Field()
|
||||||
|
update_room_entry = UpdateRoomEntry.Field()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue