Re-add leave button and inactive members to group list

This commit is contained in:
Ramon Wenger 2021-06-30 15:52:57 +02:00
parent 5202ecdc8e
commit 9ea9b9be1b
6 changed files with 47 additions and 29 deletions

View File

@ -27,37 +27,39 @@
data-cy="group-list-member" data-cy="group-list-member"
v-for="member in activeMembers"> v-for="member in activeMembers">
<span class="member-item__name">{{ fullName(member) }}</span> <span class="member-item__name">{{ fullName(member) }}</span>
<span class="member-item__role">{{ role(member) }}</span> <span class="member-item__role">{{ role(member) }} </span>
<a <a
class="member-item__action simple-list__action" class="member-item__action simple-list__action"
data-cy="leave-group" data-cy="leave-group"
v-if="member.isMe" v-if="member.isMe"
@click="$emit('leave')">Verlassen</a> @click="$emit('leave', member)">Verlassen</a>
<!-- <a--> <a
<!-- class="member-item__action simple-list__action"--> class="member-item__action simple-list__action"
<!-- data-cy="remove-from-class"--> data-cy="remove-from-class"
<!-- v-if="teacher"--> v-if="canEdit && enableDeactivate && !member.isMe"
<!-- @click="$emit('remove', member)">Deaktivieren</a>--> @click="$emit('remove', member)">Deaktivieren</a>
</li> </li>
</ul> </ul>
<!-- <template v-if="inactiveMembers.length">--> <template v-if="inactiveMembers.length">
<!-- <h3 class="group-list__inactive-heading">Deaktivierte Personen</h3>--> <h3 class="group-list__inactive-heading">Deaktivierte Personen</h3>
<!-- <ul data-cy="inactive-class-members-list" class="simple-list simple-list&#45;&#45;inactive">--> <ul
<!-- <li--> data-cy="inactive-class-members-list"
<!-- class="simple-list__item member-item"--> class="simple-list simple-list--inactive">
<!-- data-cy="group-list-member"--> <li
<!-- v-for="member in inactiveMembers"--> :key="member.id"
<!-- :key="member.id">--> class="simple-list__item member-item"
<!-- <span class="member-item__name">{{fullName(member)}}</span>--> data-cy="group-list-member"
<!-- <span class="member-item__role">{{role(member)}}</span>--> v-for="member in inactiveMembers">
<!-- <a--> <span class="member-item__name">{{ fullName(member) }}</span>
<!-- class="member-item__action simple-list__action"--> <span class="member-item__role">{{ role(member) }}</span>
<!-- data-cy="add-to-class"--> <a
<!-- v-if="teacher"--> class="member-item__action simple-list__action"
<!-- @click="$emit('add', member)">Aktivieren</a>--> data-cy="add-to-class"
<!-- </li>--> v-if="canEdit"
<!-- </ul>--> @click="$emit('add', member)">Aktivieren</a>
<!-- </template>--> </li>
</ul>
</template>
</div> </div>
@ -99,6 +101,10 @@
type: Boolean, type: Boolean,
default: false, default: false,
}, },
enableDeactivate: {
type: Boolean,
default: false
}
}, },
components: { components: {

View File

@ -12,6 +12,7 @@ query MySchoolClassQuery {
lastName lastName
isTeacher isTeacher
active active
isMe
} }
} }
} }

View File

@ -7,10 +7,13 @@
:show-code="me.isTeacher" :show-code="me.isTeacher"
:show-code-route="showCodeRoute" :show-code-route="showCodeRoute"
:can-edit="me.isTeacher" :can-edit="me.isTeacher"
:enable-deactivate="true"
title="Klassenliste" title="Klassenliste"
class="my-class__class" class="my-class__class"
@add="add" @add="add"
@edit="editClassName" @edit="editClassName"
@remove="remove"
@leave="remove"
/> />
</div> </div>
</template> </template>

View File

@ -5,6 +5,7 @@ from django.db.models import Q
from books.models import Chapter, ContentBlock, ContentBlockSnapshot from books.models import Chapter, ContentBlock, ContentBlockSnapshot
from core.logger import get_logger from core.logger import get_logger
from objectives.models import ObjectiveSnapshot from objectives.models import ObjectiveSnapshot
from users.models import User, SchoolClass
logger = get_logger(__name__) logger = get_logger(__name__)
@ -124,7 +125,7 @@ class Snapshot(models.Model):
def __str__(self): def __str__(self):
return f'Snapshot {self.id}' return f'Snapshot {self.id}'
def reset(self, user, selected_class): def reset(self, user: User, selected_class: SchoolClass):
for chapter in Chapter.get_by_parent(self.module): for chapter in Chapter.get_by_parent(self.module):
qs = ContentBlock.get_by_parent(chapter) qs = ContentBlock.get_by_parent(chapter)
default_content = Q(user_created=False) default_content = Q(user_created=False)
@ -139,7 +140,7 @@ class Snapshot(models.Model):
for content_block in qs.filter(owner_user): for content_block in qs.filter(owner_user):
content_block.visible_for.remove(selected_class) content_block.visible_for.remove(selected_class)
def apply(self, user, selected_class): def apply(self, user: User, selected_class: SchoolClass):
for content_block in self.hidden_content_blocks.all(): for content_block in self.hidden_content_blocks.all():
content_block.hidden_for.add(selected_class) content_block.hidden_for.add(selected_class)
for custom_content_block in self.custom_content_blocks.all(): for custom_content_block in self.custom_content_blocks.all():

View File

@ -252,6 +252,7 @@ type ClassMemberNode {
lastName: String lastName: String
isTeacher: Boolean isTeacher: Boolean
id: ID id: ID
isMe: Boolean
} }
type ContentBlockBookmarkNode implements Node { type ContentBlockBookmarkNode implements Node {
@ -848,8 +849,8 @@ type PublicUserNode implements Node {
lastName: String! lastName: String!
avatarUrl: String! avatarUrl: String!
id: ID! id: ID!
isMe: Boolean
fullName: String! fullName: String!
isMe: Boolean
} }
type RoomEntryNode implements Node { type RoomEntryNode implements Node {

View File

@ -69,8 +69,8 @@ class RecentModuleFilter(FilterSet):
class PublicUserNode(DjangoObjectType): class PublicUserNode(DjangoObjectType):
is_me = graphene.Boolean()
full_name = graphene.String(required=True) full_name = graphene.String(required=True)
is_me = graphene.Boolean()
class Meta: class Meta:
model = User model = User
@ -81,6 +81,7 @@ class PublicUserNode(DjangoObjectType):
def resolve_is_me(parent: User, info, **kwargs): def resolve_is_me(parent: User, info, **kwargs):
return info.context.user.pk == parent.pk return info.context.user.pk == parent.pk
class PrivateUserNode(DjangoObjectType): class PrivateUserNode(DjangoObjectType):
class Meta: class Meta:
model = User model = User
@ -145,6 +146,7 @@ class ClassMemberNode(ObjectType):
last_name = graphene.String() last_name = graphene.String()
is_teacher = graphene.Boolean() is_teacher = graphene.Boolean()
id = graphene.ID() id = graphene.ID()
is_me = graphene.Boolean()
def resolve_id(self, *args): def resolve_id(self, *args):
return to_global_id('PublicUserNode', self.user.pk) return to_global_id('PublicUserNode', self.user.pk)
@ -164,6 +166,10 @@ class ClassMemberNode(ObjectType):
def resolve_is_teacher(self, *args): def resolve_is_teacher(self, *args):
return self.user.is_teacher() return self.user.is_teacher()
@staticmethod
def resolve_is_me(parent, info, **kwargs):
return info.context.user.pk == parent.user.pk
class UsersQuery(object): class UsersQuery(object):
me = graphene.Field(PrivateUserNode) me = graphene.Field(PrivateUserNode)