Refactored VisibilityPopover for new SchoolClass

This commit is contained in:
Daniel Egger 2018-10-05 11:51:41 +02:00
parent 41d6e87f81
commit f3bcea7528
3 changed files with 19 additions and 17 deletions

View File

@ -1,10 +1,10 @@
<template> <template>
<div class="visibility-menu" v-if="show"> <div class="visibility-menu" v-if="show">
<h3 class="visibility-menu__title">Sichtbarkeit</h3> <h3 class="visibility-menu__title">Sichtbarkeit</h3>
<div v-for="group in userGroupsWithVisibilityInfo" :key="group.id" class="visibility-menu__item"> <div v-for="schoolClass in schoolClassVisibility" :key="schoolClass.id" class="visibility-menu__item">
<checkbox :checked="!group.hidden" <checkbox :checked="!schoolClass.hidden"
:item="group" :item="schoolClass"
:label="group.name" :label="schoolClass.name"
v-on:input="updateVisibility" v-on:input="updateVisibility"
></checkbox> ></checkbox>
</div> </div>
@ -48,9 +48,9 @@
input: { input: {
id: this.contentBlock.id, id: this.contentBlock.id,
contentBlock: { contentBlock: {
visibility: this.userGroupsWithVisibilityInfo.map(g => { visibility: this.schoolClassVisibility.map(g => {
return { return {
userGroupId: g.id, schoolClassId: g.id,
hidden: g.hidden || false hidden: g.hidden || false
} }
}) })
@ -62,11 +62,15 @@
}, },
computed: { computed: {
userGroupsWithVisibilityInfo() { schoolClasses() {
return this.userGroups.map(userGroup => { return this.$getRidOfEdges(this.me.schoolclassSet);
},
schoolClassVisibility() {
return this.schoolClasses.map(schoolClass => {
return { return {
...userGroup, ...schoolClass,
hidden: !!this.contentBlock.hiddenFor.find(el => el.id === userGroup.id) hidden: !!this.contentBlock.hiddenFor.find(el => el.id === schoolClass.id)
} }
}); });
} }

View File

@ -30,7 +30,7 @@ class ContentElementInput(InputObjectType):
class UserGroupContentBlockVisibility(InputObjectType): class UserGroupContentBlockVisibility(InputObjectType):
user_group_id = graphene.ID(required=True) school_class_id = graphene.ID(required=True)
hidden = graphene.Boolean(required=True) hidden = graphene.Boolean(required=True)
@ -38,4 +38,4 @@ class ContentBlockInput(InputObjectType):
title = graphene.String() title = graphene.String()
type = graphene.String() type = graphene.String()
contents = graphene.List(ContentElementInput) contents = graphene.List(ContentElementInput)
visibility = graphene.List(UserGroupContentBlockVisibility) visibility = graphene.List(UserGroupContentBlockVisibility)

View File

@ -8,7 +8,6 @@ from api.utils import get_object, get_errors
from books.models import ContentBlock, Chapter, SchoolClass from books.models import ContentBlock, Chapter, SchoolClass
from books.schema.inputs import ContentBlockInput from books.schema.inputs import ContentBlockInput
from books.schema.queries import ContentBlockNode from books.schema.queries import ContentBlockNode
from .utils import handle_content_block from .utils import handle_content_block
@ -32,14 +31,13 @@ class MutateContentBlock(relay.ClientIDMutation):
content_block = get_object(ContentBlock, id_param) content_block = get_object(ContentBlock, id_param)
# FIXME: usergroup
if visibility_list is not None: if visibility_list is not None:
for v in visibility_list: for v in visibility_list:
user_group = get_object(SchoolClass, v.user_group_id) school_class = get_object(SchoolClass, v.school_class_id)
if v.hidden: if v.hidden:
content_block.hidden_for.add(user_group) content_block.hidden_for.add(school_class)
else: else:
content_block.hidden_for.remove(user_group) content_block.hidden_for.remove(school_class)
if title is not None: if title is not None:
content_block.title = title content_block.title = title