From 8b7abfdf388fdd0495dd23a3d413e9eebb77f7f2 Mon Sep 17 00:00:00 2001 From: Thomas Hackl Date: Thu, 24 Jul 2025 13:16:28 +0200 Subject: course info for sub levels --- .../JsonApi/Routes/Tree/CourseInfoOfTreeNode.php | 3 ++- resources/vue/components/tree/StudipTreeList.vue | 6 ++++-- resources/vue/components/tree/StudipTreeTable.vue | 6 ++++-- resources/vue/components/tree/TreeNodeCourseInfo.vue | 17 ++++++++++------- resources/vue/mixins/TreeMixin.js | 12 ++++++++++-- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php b/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php index 4e2f61d..89958d3 100644 --- a/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php +++ b/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php @@ -32,7 +32,8 @@ class CourseInfoOfTreeNode extends NonJsonApiController $filters = $this->getContextFilters($request); $info = [ - 'courses' => (int) $node->countCourses($filters['semester'], $filters['semclass'], true) + 'courses' => (int) $node->countCourses($filters['semester'], $filters['semclass'], false), + 'allcourses' => (int) $node->countCourses($filters['semester'], $filters['semclass'], true) ]; $response->getBody()->write(json_encode($info)); diff --git a/resources/vue/components/tree/StudipTreeList.vue b/resources/vue/components/tree/StudipTreeList.vue index 53265d9..dedc403 100644 --- a/resources/vue/components/tree/StudipTreeList.vue +++ b/resources/vue/components/tree/StudipTreeList.vue @@ -221,6 +221,8 @@ export default { } }, data() { + const cachedCourseInfo = this.getCachedNodeCourseInfo(this.node.id, this.semester, this.semClass); + return { currentNode: this.node, isLoading: false, @@ -228,8 +230,8 @@ export default { children: [], courses: [], assistiveLive: '', - subLevelsCourses: 0, - thisLevelCourses: this.getCachedNodeCourseInfo(this.node.id, this.semester, this.semClass), + subLevelsCourses: cachedCourseInfo.allCourses, + thisLevelCourses: cachedCourseInfo.courses, showingAllCourses: false } }, diff --git a/resources/vue/components/tree/StudipTreeTable.vue b/resources/vue/components/tree/StudipTreeTable.vue index c88cb82..c56f944 100644 --- a/resources/vue/components/tree/StudipTreeTable.vue +++ b/resources/vue/components/tree/StudipTreeTable.vue @@ -241,6 +241,8 @@ export default { } }, data() { + const cachedCourseInfo = this.getCachedNodeCourseInfo(this.node.id, this.semester, this.semClass); + return { currentNode: this.node, isLoading: false, @@ -248,8 +250,8 @@ export default { children: [], courses: [], assistiveLive: '', - subLevelsCourses: 0, - thisLevelCourses: this.getCachedNodeCourseInfo(this.node.id, this.semester, this.semClass), + subLevelsCourses: cachedCourseInfo.allCourses, + thisLevelCourses: cachedCourseInfo.courses, showingAllCourses: false } }, diff --git a/resources/vue/components/tree/TreeNodeCourseInfo.vue b/resources/vue/components/tree/TreeNodeCourseInfo.vue index 3fdbefe..7d9f26a 100644 --- a/resources/vue/components/tree/TreeNodeCourseInfo.vue +++ b/resources/vue/components/tree/TreeNodeCourseInfo.vue @@ -1,14 +1,14 @@ @@ -37,8 +37,11 @@ export default { } }, data() { + const cachedCourseInfo = this.getCachedNodeCourseInfo(this.node.id, this.semester, this.semClass); + return { - courseCount: this.getCachedNodeCourseInfo(this.node, this.semester, this.semClass), + allCourseCount: cachedCourseInfo.allCourses, + courseCount: cachedCourseInfo.courses, showingAllCourses: false } }, diff --git a/resources/vue/mixins/TreeMixin.js b/resources/vue/mixins/TreeMixin.js index b797471..e8ec5c9 100644 --- a/resources/vue/mixins/TreeMixin.js +++ b/resources/vue/mixins/TreeMixin.js @@ -62,7 +62,10 @@ export const TreeMixin = { ); }, getCachedNodeCourseInfo(node, semesterId, semClass) { - return cache.get(['course-info', node.id, semesterId, semClass].join('/')) ?? null; + return { + courses: cache.get(['course-count', node.id, semesterId, semClass].join('/')) ?? null, + allCourses: cache.get(['course-count-all', node.id, semesterId, semClass].join('/')) ?? null + }; }, getNodeCourseInfo(node, semesterId, semClass = 0) { let parameters = {}; @@ -80,10 +83,15 @@ export const TreeMixin = { parameters ).then(courseinfo => { cache.set( - ['course-info', node.id, semesterId, semClass].join('/'), + ['course-count', node.id, semesterId, semClass].join('/'), courseinfo.data.courses ?? 0, 3 * 60 * 60 ); + cache.set( + ['course-count-all', node.id, semesterId, semClass].join('/'), + courseinfo.data.allcourses ?? 0, + 3 * 60 * 60 + ); return courseinfo; }); }, -- cgit v1.0