diff --git a/client/src/components/modules/Module.vue b/client/src/components/modules/Module.vue
index a8bb9277..30d0fda4 100644
--- a/client/src/components/modules/Module.vue
+++ b/client/src/components/modules/Module.vue
@@ -4,12 +4,23 @@
class="module"
v-if="module.id"
>
-
+
+
diff --git a/client/src/components/modules/ModuleFilter.vue b/client/src/components/modules/ModuleFilter.vue
index 237beb95..11eeaf17 100644
--- a/client/src/components/modules/ModuleFilter.vue
+++ b/client/src/components/modules/ModuleFilter.vue
@@ -101,6 +101,8 @@
function filterModules() {
let filteredModules = props.modules;
+
+
if (selectedCategory.value === null) {
return props.modules;
}
@@ -108,14 +110,14 @@
// filter by Lehrjahr
if (selectedCategory.value.name !== '---') {
filteredModules = filteredModules.filter((module) => {
- return module.category.id == selectedCategory.value.id;
+ return module.category?.id == selectedCategory.value.id;
});
}
//filter by Lernfeld
if (selectedLernfeld.value.name !== '---') {
filteredModules = filteredModules.filter((module) => {
- return module.categoryType.id == selectedLernfeld.value.id;
+ return module.categoryType?.id == selectedLernfeld.value.id;
});
}
updateLastModuleCategory(selectedCategory.value);
diff --git a/client/src/components/modules/ModuleTeaser.vue b/client/src/components/modules/ModuleTeaser.vue
index fef9dbdf..1943bf5c 100644
--- a/client/src/components/modules/ModuleTeaser.vue
+++ b/client/src/components/modules/ModuleTeaser.vue
@@ -17,89 +17,88 @@
{{ teaser }}
-
- {{attribute}}
-
+
diff --git a/client/src/components/profile/Profile.vue b/client/src/components/profile/Profile.vue
index 9576b52d..3fac7adf 100644
--- a/client/src/components/profile/Profile.vue
+++ b/client/src/components/profile/Profile.vue
@@ -30,6 +30,8 @@ import Avatar from '@/components/profile/Avatar.vue';
import { defineAsyncComponent } from 'vue';
const TrashIcon = defineAsyncComponent(() => import('@/components/icons/TrashIcon.vue'));
+
+// TODO: Kann das mit me.ts zusammengeführt werden?
export default {
components: {
AvatarUploadForm,
diff --git a/client/src/components/ui/Pill.vue b/client/src/components/ui/Pill.vue
new file mode 100644
index 00000000..8bd4d68e
--- /dev/null
+++ b/client/src/components/ui/Pill.vue
@@ -0,0 +1,26 @@
+
+ {{ props.text }}
+
+
+
+
+
diff --git a/client/src/mixins/me.ts b/client/src/mixins/me.ts
index c01711b0..baa9353d 100644
--- a/client/src/mixins/me.ts
+++ b/client/src/mixins/me.ts
@@ -14,6 +14,7 @@ export interface Me {
team: any;
lastTopic: any;
readOnly: boolean;
+ lastModuleCategory: any;
}
export interface MeQuery {
@@ -30,6 +31,8 @@ export interface Location {
type RouteLocation = Location | string;
+
+// TODO: ME_QUERY existiert an einem weiteren Ort. Dieser sollte entfernt werden.
const defaultMe: MeQuery = {
me: {
selectedClass: {
@@ -42,6 +45,7 @@ const defaultMe: MeQuery = {
team: null,
readOnly: false,
lastTopic: undefined,
+ lastModuleCategory: undefined,
},
};
@@ -76,6 +80,10 @@ const getCurrentClassName = (me: Me) => {
return currentClass ? currentClass.name : me.schoolClasses.length ? me.schoolClasses[0].name : '';
};
+const getLastModuleCategory = (me: Me) => {
+ return me.lastModuleCategory;
+}
+
const getMe = () => {
const { result } = useQuery(ME_QUERY);
@@ -126,6 +134,10 @@ const meMixin = {
// @ts-ignore
return getCurrentClassName(this.$data.me);
},
+ lastModuleCategory(): any {
+ // @ts-ignore
+ return getLastModuleCategory(this.$data.me);
+ }
},
apollo: {
diff --git a/server/books/schema/mutations/module.py b/server/books/schema/mutations/module.py
index 0a2a11e0..f551c97b 100644
--- a/server/books/schema/mutations/module.py
+++ b/server/books/schema/mutations/module.py
@@ -3,7 +3,7 @@ from django.utils import timezone
from graphene import relay
from api.utils import get_object
-from books.models import Module, RecentModule
+from books.models import Module, RecentModule, ModuleCategory
from books.schema.nodes import ModuleNode
from users.models import SchoolClass, User
from users.schema import PrivateUserNode
@@ -115,6 +115,8 @@ class UpdateLastModuleCategory(relay.ClientIDMutation):
def mutate_and_get_payload(cls, root, info, **args):
user = info.context.user
id = args.get('id')
+ module_category = get_object(ModuleCategory, id)
- User.objects.filter(pk=user.id).update(last_module_category_id=id)
+
+ User.objects.filter(pk=user.id).update(last_module_category_id=module_category.id)
return cls(user=user)
diff --git a/server/books/schema/nodes/module.py b/server/books/schema/nodes/module.py
index 87e3b367..66e89fe8 100644
--- a/server/books/schema/nodes/module.py
+++ b/server/books/schema/nodes/module.py
@@ -108,7 +108,7 @@ class ModuleNode(DjangoObjectType):
@staticmethod
def resolve_objective_groups(parent, info, **kwargs):
- return parent.objective_groups.all().prefetch_related("hidden_for") @ staticmethod
+ return parent.objective_groups.all().prefetch_related("hidden_for")
def resolve_category(self, info, **kwargs):
return ModuleCategory.objects.get(pk=self.category_id) if self.category_id else None
diff --git a/server/users/schema/types.py b/server/users/schema/types.py
index d06b33b3..afebcfd4 100644
--- a/server/users/schema/types.py
+++ b/server/users/schema/types.py
@@ -104,6 +104,7 @@ class PrivateUserNode(DjangoObjectType):
"onboarding_visited",
"team",
"read_only",
+ "last_module_category"
]
interfaces = (relay.Node,)
@@ -114,7 +115,6 @@ class PrivateUserNode(DjangoObjectType):
is_teacher = graphene.Boolean()
old_classes = graphene.List(SchoolClassNode)
school_classes = graphene.List(SchoolClassNode)
- last_module_category = graphene.Field(ModuleCategoryNode)
recent_modules = DjangoFilterConnectionField(
ModuleNode, filterset_class=RecentModuleFilter
@@ -163,8 +163,6 @@ class PrivateUserNode(DjangoObjectType):
def resolve_team(self, info, **kwargs):
return self.team
- def resolve_last_module_category(self, info, **kwargs):
- return self.last_module_category
class ClassMemberNode(ObjectType):