use me query, add components
This commit is contained in:
parent
8b53d2fa7e
commit
42c579b047
|
|
@ -0,0 +1,59 @@
|
||||||
|
<template>
|
||||||
|
<div class="schoolclass">
|
||||||
|
<h2 class="schoolclass__name">{{name}}</h2>
|
||||||
|
<div class="schoolclass__members schoolclass-members">
|
||||||
|
<ul class="schoolclass-members__list members-list">
|
||||||
|
<li v-for="user in users" :key="user.id" class="members-list__item">
|
||||||
|
<p class="member-item"><span class="member-item__name">{{fullName(user)}}</span> <span class="member-item__role">{{role(user)}}</span></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: ['users', 'name'],
|
||||||
|
methods: {
|
||||||
|
fullName (user) {
|
||||||
|
return `${user.firstName} ${user.lastName}`;
|
||||||
|
},
|
||||||
|
role ({permissions}) {
|
||||||
|
return permissions.indexOf('users.can_manage_school_class_content') > -1 ? 'Lehrperson' : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import "@/styles/_variables.scss";
|
||||||
|
|
||||||
|
$height: 52px;
|
||||||
|
|
||||||
|
.members-list {
|
||||||
|
&__item {
|
||||||
|
line-height: $height;
|
||||||
|
height: $height;
|
||||||
|
border-bottom: 1px solid $color-grey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-item {
|
||||||
|
|
||||||
|
line-height: $height;
|
||||||
|
height: $height;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
&__name {
|
||||||
|
font-family: $sans-serif-font-family;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__role {
|
||||||
|
padding-right: $medium-spacing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
query {
|
||||||
|
me {
|
||||||
|
id
|
||||||
|
schoolClasses {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
users {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
id
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
permissions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
<template>
|
||||||
|
<div class="myclasses">
|
||||||
|
<h1 class="myclasses__header">Klassenliste</h1>
|
||||||
|
<classlist v-for="schoolClass in schoolClasses" v-bind="schoolClass" :key="schoolClass.name" class="myclasses__class"></classlist>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import MY_SCHOOL_CLASSES_QUERY from '@/graphql/gql/mySchoolClasses.gql';
|
||||||
|
import Classlist from '@/components/profile/Classlist';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Classlist
|
||||||
|
},
|
||||||
|
|
||||||
|
apollo: {
|
||||||
|
schoolClasses: {
|
||||||
|
query: MY_SCHOOL_CLASSES_QUERY,
|
||||||
|
update(data) {
|
||||||
|
return this.$getRidOfEdges(data).me.schoolClasses
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
schoolClasses: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import "@/styles/_variables.scss";
|
||||||
|
|
||||||
|
.myclasses {
|
||||||
|
&__class {
|
||||||
|
margin-bottom: $large-spacing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<router-link to="/me/activity" active-class="top-navigation__link--active"
|
<router-link to="/me/activity" active-class="top-navigation__link--active"
|
||||||
class="top-navigation__link profile-submenu__item submenu-item">Aktivität
|
class="top-navigation__link profile-submenu__item submenu-item">Aktivität
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link to="/me/classlist" active-class="top-navigation__link--active"
|
<router-link to="/me/myclasses" active-class="top-navigation__link--active"
|
||||||
class="top-navigation__link profile-submenu__item submenu-item">Klassenliste
|
class="top-navigation__link profile-submenu__item submenu-item">Klassenliste
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link to="/me/password-change" active-class="top-navigation__link--active"
|
<router-link to="/me/password-change" active-class="top-navigation__link--active"
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import portfolio from '@/pages/portfolio'
|
||||||
import project from '@/pages/project'
|
import project from '@/pages/project'
|
||||||
import profilePage from '@/pages/profile'
|
import profilePage from '@/pages/profile'
|
||||||
import passwordChange from '@/pages/passwordChange'
|
import passwordChange from '@/pages/passwordChange'
|
||||||
|
import myClasses from '@/pages/myClasses'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{path: '/', component: start, meta: {layout: 'blank'}},
|
{path: '/', component: start, meta: {layout: 'blank'}},
|
||||||
|
|
@ -72,7 +73,8 @@ const routes = [
|
||||||
isProfile: true
|
isProfile: true
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{path: 'password-change', name: 'pw-change', component: passwordChange, meta: {isProfile: true}}
|
{path: 'password-change', name: 'pw-change', component: passwordChange, meta: {isProfile: true}},
|
||||||
|
{path: 'myclasses', name: 'my-classes', component: myClasses, meta: {isProfile: true}},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{path: '*', component: p404}
|
{path: '*', component: p404}
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,12 @@ from objectives.mutations import ObjectiveMutations
|
||||||
from objectives.schema import ObjectivesQuery
|
from objectives.schema import ObjectivesQuery
|
||||||
from rooms.mutations import RoomMutations
|
from rooms.mutations import RoomMutations
|
||||||
from rooms.schema import RoomsQuery
|
from rooms.schema import RoomsQuery
|
||||||
from users.schema import UsersQuery, MySchoolClassesQuery
|
from users.schema import UsersQuery
|
||||||
from users.mutations import ProfileMutations
|
from users.mutations import ProfileMutations
|
||||||
|
|
||||||
|
|
||||||
class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, AssignmentsQuery, StudentSubmissionQuery,
|
class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, AssignmentsQuery, StudentSubmissionQuery,
|
||||||
BasicKnowledgeQuery, MySchoolClassesQuery, graphene.ObjectType):
|
BasicKnowledgeQuery, graphene.ObjectType):
|
||||||
node = relay.Node.Field()
|
node = relay.Node.Field()
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,3 @@ class UsersQuery(object):
|
||||||
def resolve_me(self, info, **kwargs):
|
def resolve_me(self, info, **kwargs):
|
||||||
return info.context.user
|
return info.context.user
|
||||||
|
|
||||||
|
|
||||||
class MySchoolClassesQuery(object):
|
|
||||||
my_school_classes = DjangoFilterConnectionField(SchoolClassNode)
|
|
||||||
|
|
||||||
def resolve_my_school_classes(self, info):
|
|
||||||
user = info.context.user
|
|
||||||
return SchoolClass.objects.filter(users__id=user.id)
|
|
||||||
|
|
|
||||||
|
|
@ -33,15 +33,20 @@ class PasswordUpdate(TestCase):
|
||||||
|
|
||||||
query = '''
|
query = '''
|
||||||
query {
|
query {
|
||||||
mySchoolClasses {
|
me {
|
||||||
edges {
|
schoolClasses {
|
||||||
node {
|
edges {
|
||||||
name
|
node {
|
||||||
users {
|
id
|
||||||
edges {
|
name
|
||||||
node {
|
users {
|
||||||
firstName
|
edges {
|
||||||
lastName
|
node {
|
||||||
|
id
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
permissions
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +61,7 @@ class PasswordUpdate(TestCase):
|
||||||
|
|
||||||
result = self.make_query()
|
result = self.make_query()
|
||||||
|
|
||||||
classes = result.get('data').get('mySchoolClasses').get('edges')
|
classes = result.get('data').get('me').get('schoolClasses').get('edges')
|
||||||
self.assertEqual(len(classes), 2)
|
self.assertEqual(len(classes), 2)
|
||||||
|
|
||||||
for school_class in classes:
|
for school_class in classes:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue