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

View File

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

View File

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

View File

@ -5,6 +5,7 @@ from django.db.models import Q
from books.models import Chapter, ContentBlock, ContentBlockSnapshot
from core.logger import get_logger
from objectives.models import ObjectiveSnapshot
from users.models import User, SchoolClass
logger = get_logger(__name__)
@ -124,7 +125,7 @@ class Snapshot(models.Model):
def __str__(self):
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):
qs = ContentBlock.get_by_parent(chapter)
default_content = Q(user_created=False)
@ -139,7 +140,7 @@ class Snapshot(models.Model):
for content_block in qs.filter(owner_user):
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():
content_block.hidden_for.add(selected_class)
for custom_content_block in self.custom_content_blocks.all():

View File

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

View File

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