From 8dbec8b69921f70193fe8be8fb7ed28748b7b906 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 9 Sep 2022 12:16:48 +0200 Subject: [PATCH 1/5] Use `runserver_plus` to minimize runserver cpu usage --- prepare_server.sh | 4 ++-- server/requirements/requirements-dev.txt | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/prepare_server.sh b/prepare_server.sh index 1a5b1916..e60422eb 100755 --- a/prepare_server.sh +++ b/prepare_server.sh @@ -74,7 +74,7 @@ else fi if [ "$START_BACKGROUND" = true ]; then - python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & + python3 server/manage.py runserver_plus "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & else - python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" + python3 server/manage.py runserver_plus "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" fi diff --git a/server/requirements/requirements-dev.txt b/server/requirements/requirements-dev.txt index 2fc1305d..d8dcb9d5 100644 --- a/server/requirements/requirements-dev.txt +++ b/server/requirements/requirements-dev.txt @@ -109,7 +109,7 @@ django-csp==3.7 # via -r requirements.in django-debug-toolbar==3.2.4 # via -r requirements-dev.in -django-extensions==3.1.5 +django-extensions==3.2.0 # via -r requirements-dev.in django-filter==21.1 # via wagtail @@ -428,9 +428,9 @@ wagtail-factories==2.0.1 # via -r requirements.in wagtail-localize==1.2.1 # via -r requirements.in -watchdog==2.1.7 +watchdog==2.1.9 # via werkzeug -watchgod==0.8.1 +watchgod==0.8.2 # via # -r requirements-dev.in # uvicorn @@ -440,7 +440,7 @@ webencodings==0.5.1 # via html5lib websockets==10.2 # via uvicorn -werkzeug[watchdog]==2.1.0 +werkzeug[watchdog]==2.2.0 # via -r requirements-dev.in wheel==0.37.1 # via pip-tools From 5d6e94ebd6234e79d50823faf12837477d27d82a Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 9 Sep 2022 15:09:42 +0200 Subject: [PATCH 2/5] Refactor LearningContent to its own route --- .../src/components/circle/LearningContent.vue | 43 ++++---------- client/src/main.ts | 16 ++++- client/src/router/index.ts | 5 ++ client/src/services/circle.ts | 5 ++ client/src/stores/app.ts | 20 ++++++- client/src/stores/circle.ts | 33 ++++++++--- client/src/views/CircleView.vue | 4 ++ client/src/views/LearningContentView.vue | 59 +++++++++++++++++++ client/vite.config.ts | 12 ++-- 9 files changed, 150 insertions(+), 47 deletions(-) create mode 100644 client/src/views/LearningContentView.vue diff --git a/client/src/components/circle/LearningContent.vue b/client/src/components/circle/LearningContent.vue index 6644ba26..fd5b3403 100644 --- a/client/src/components/circle/LearningContent.vue +++ b/client/src/components/circle/LearningContent.vue @@ -1,32 +1,24 @@ diff --git a/client/vite.config.ts b/client/vite.config.ts index 36825c0d..5edc7109 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -1,9 +1,9 @@ -import {fileURLToPath, URL} from 'url' +import { fileURLToPath, URL } from "url"; -import {defineConfig, loadEnv} from 'vite' -import vue from '@vitejs/plugin-vue' +import { defineConfig, loadEnv } from "vite"; +import vue from "@vitejs/plugin-vue"; // import vueI18n from '@intlify/vite-plugin-vue-i18n' -import alias from '@rollup/plugin-alias' +import alias from "@rollup/plugin-alias"; // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { @@ -33,6 +33,10 @@ export default defineConfig(({ mode }) => { // ] }), ], + server: { + port: 5173, + hmr: { port: 5173 } + }, resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), From dc5adb6214f4e74883180dea1c6402b742934e12 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 9 Sep 2022 16:57:39 +0200 Subject: [PATCH 3/5] Refactor SelfEvaluation to its own route --- client/src/router/index.ts | 5 ++ client/src/services/circle.ts | 10 +++ client/src/stores/circle.ts | 61 ++++++++++++------- client/src/views/CircleView.vue | 4 -- client/src/views/LearningContentView.vue | 21 +------ .../views/LearningUnitSelfEvaluationView.vue | 38 ++++++++++++ prepare_server.sh | 4 +- 7 files changed, 94 insertions(+), 49 deletions(-) create mode 100644 client/src/views/LearningUnitSelfEvaluationView.vue diff --git a/client/src/router/index.ts b/client/src/router/index.ts index 9f8f80d2..af8feacc 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -46,6 +46,11 @@ const router = createRouter({ component: () => import('../views/CircleView.vue'), props: true, }, + { + path: '/learn/:learningPathSlug/:circleSlug/evaluate/:learningUnitSlug', + component: () => import('../views/LearningUnitSelfEvaluationView.vue'), + props: true, + }, { path: '/learn/:learningPathSlug/:circleSlug/:contentSlug', component: () => import('../views/LearningContentView.vue'), diff --git a/client/src/services/circle.ts b/client/src/services/circle.ts index 22bae8d4..abb767cb 100644 --- a/client/src/services/circle.ts +++ b/client/src/services/circle.ts @@ -174,6 +174,16 @@ export class Circle implements LearningWagtailPage { return result; } + public get flatLearningUnits(): LearningUnit[] { + const result: LearningUnit[] = []; + this.learningSequences.forEach((learningSequence) => { + learningSequence.learningUnits.forEach((learningUnit) => { + result.push(learningUnit); + }); + }); + return result; + } + public someFinishedInLearningSequence(translationKey: string): boolean { if (translationKey) { return this.flatChildren.filter((lc) => { diff --git a/client/src/stores/circle.ts b/client/src/stores/circle.ts index a5ca294e..5f2bdfe2 100644 --- a/client/src/stores/circle.ts +++ b/client/src/stores/circle.ts @@ -5,7 +5,6 @@ import { defineStore } from 'pinia' import type { LearningContent, LearningUnit, LearningUnitQuestion } from '@/types' import type { Circle } from '@/services/circle' import { itPost } from '@/fetchHelpers' -import { useAppStore } from '@/stores/app' import { useLearningPathStore } from '@/stores/learningPath' export type CircleStoreState = { @@ -58,6 +57,21 @@ export const useCircleStore = defineStore({ return this.currentLearningContent; }, + async loadSelfEvaluation(learningPathSlug: string, circleSlug: string, learningUnitSlug: string) { + const circle = await this.loadCircle(learningPathSlug, circleSlug); + if (circle) { + this.currentSelfEvaluation = circle.flatLearningUnits.find((child) => { + return child.slug.endsWith(learningUnitSlug) + }); + } + + if (!this.currentSelfEvaluation) { + throw `No self evaluation found with slug: ${learningUnitSlug}`; + } + + return this.currentLearningContent; + + }, async markCompletion(page: LearningContent | LearningUnitQuestion, flag = true) { try { page.completed = flag; @@ -86,16 +100,16 @@ export const useCircleStore = defineStore({ }); }, openSelfEvaluation(learningUnit: LearningUnit) { - this.page = 'SELF_EVALUATION'; - const appStore = useAppStore(); - appStore.showMainNavigationBar = false; this.currentSelfEvaluation = learningUnit; + const shortSlug = learningUnit.slug.replace(`${this.circle?.slug}-lu-`, ''); + this.router.push({ + path: `${this.circle?.getUrl()}/evaluate/${shortSlug}`, + }); }, closeSelfEvaluation() { - this.currentSelfEvaluation = undefined; - const appStore = useAppStore(); - appStore.showMainNavigationBar = true; - this.page = 'INDEX'; + this.router.push({ + path: `${this.circle?.getUrl()}` + }); }, calcSelfEvaluationStatus(learningUnit: LearningUnit) { if (learningUnit.children.length > 0) { @@ -141,21 +155,22 @@ export const useCircleStore = defineStore({ } }, continueFromSelfEvaluation() { - if (this.currentSelfEvaluation) { - const nextContent = this.currentSelfEvaluation.learningContents[this.currentSelfEvaluation.learningContents.length - 1].nextLearningContent; - - if (nextContent) { - if (this.currentSelfEvaluation?.parentLearningSequence?.id === nextContent?.parentLearningSequence?.id) { - this.openLearningContent(nextContent); - } else { - this.closeSelfEvaluation(); - } - } else { - this.closeSelfEvaluation(); - } - } else { - log.error('currentSelfEvaluation is undefined'); - } + this.closeSelfEvaluation() + // if (this.currentSelfEvaluation) { + // const nextContent = this.currentSelfEvaluation.learningContents[this.currentSelfEvaluation.learningContents.length - 1].nextLearningContent; + // + // if (nextContent) { + // if (this.currentSelfEvaluation?.parentLearningSequence?.id === nextContent?.parentLearningSequence?.id) { + // this.openLearningContent(nextContent); + // } else { + // this.closeSelfEvaluation(); + // } + // } else { + // this.closeSelfEvaluation(); + // } + // } else { + // log.error('currentSelfEvaluation is undefined'); + // } } } }) diff --git a/client/src/views/CircleView.vue b/client/src/views/CircleView.vue index 876411bf..6881dfec 100644 --- a/client/src/views/CircleView.vue +++ b/client/src/views/CircleView.vue @@ -7,7 +7,6 @@ import LearningContent from '@/components/circle/LearningContent.vue' import { onMounted } from 'vue' import { useCircleStore } from '@/stores/circle' -import SelfEvaluation from '@/components/circle/SelfEvaluation.vue' import { useAppStore } from '@/stores/app' log.debug('CircleView.vue created') @@ -46,9 +45,6 @@ onMounted(async () => {
-
- -
diff --git a/client/src/views/LearningContentView.vue b/client/src/views/LearningContentView.vue index 91015291..df25a693 100644 --- a/client/src/views/LearningContentView.vue +++ b/client/src/views/LearningContentView.vue @@ -37,23 +37,4 @@ onMounted(async () => { /> - + diff --git a/client/src/views/LearningUnitSelfEvaluationView.vue b/client/src/views/LearningUnitSelfEvaluationView.vue new file mode 100644 index 00000000..f7c084c5 --- /dev/null +++ b/client/src/views/LearningUnitSelfEvaluationView.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/prepare_server.sh b/prepare_server.sh index e60422eb..1a5b1916 100755 --- a/prepare_server.sh +++ b/prepare_server.sh @@ -74,7 +74,7 @@ else fi if [ "$START_BACKGROUND" = true ]; then - python3 server/manage.py runserver_plus "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & + python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & else - python3 server/manage.py runserver_plus "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" + python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" fi From 6b0cf9effd2b581fc34ee26db10691cc54f7b8df Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 9 Sep 2022 17:36:43 +0200 Subject: [PATCH 4/5] Refactor LearningContent routing --- .../src/components/circle/LearningContent.vue | 15 ++-- .../src/components/circle/SelfEvaluation.vue | 72 +++++++------------ client/src/stores/circle.ts | 51 +++++-------- client/src/views/LearningContentView.vue | 41 ++++++++--- .../views/LearningUnitSelfEvaluationView.vue | 15 ++-- 5 files changed, 97 insertions(+), 97 deletions(-) diff --git a/client/src/components/circle/LearningContent.vue b/client/src/components/circle/LearningContent.vue index fd5b3403..bbc0515a 100644 --- a/client/src/components/circle/LearningContent.vue +++ b/client/src/components/circle/LearningContent.vue @@ -1,23 +1,28 @@