feat: thema's dropdown
This commit is contained in:
		
							parent
							
								
									feb8b38ed1
								
							
						
					
					
						commit
						ca59f8b767
					
				
					 8 changed files with 77 additions and 37 deletions
				
			
		|  | @ -11,7 +11,7 @@ | ||||||
| 
 | 
 | ||||||
|     const role = auth.authState.activeRole; |     const role = auth.authState.activeRole; | ||||||
| 
 | 
 | ||||||
|     const name: string = auth.authState.user!.profile.name!; |     const name: string = "";//auth.authState.user!.profile.name!; | ||||||
|     const initials: string = name |     const initials: string = name | ||||||
|         .split(" ") |         .split(" ") | ||||||
|         .map((n) => n[0]) |         .map((n) => n[0]) | ||||||
|  |  | ||||||
|  | @ -39,5 +39,10 @@ | ||||||
|         "high-school": "16-18 jahre alt", |         "high-school": "16-18 jahre alt", | ||||||
|         "older": "18 und älter" |         "older": "18 und älter" | ||||||
|     }, |     }, | ||||||
|     "read-more": "Mehr lesen" |     "read-more": "Mehr lesen", | ||||||
|  |     "new-assignment": "Neue Aufgabe", | ||||||
|  |     "next": "nächste", | ||||||
|  |     "previous": "vorherige", | ||||||
|  |     "groups": "Gruppen", | ||||||
|  |     "learning-path": "Lernpfad" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -40,5 +40,9 @@ | ||||||
|         "older": "18 and older" |         "older": "18 and older" | ||||||
|     }, |     }, | ||||||
|     "read-more": "Read more", |     "read-more": "Read more", | ||||||
|     "new-assignment": "New Assignment" |     "new-assignment": "New Assignment", | ||||||
|  |     "next": "next", | ||||||
|  |     "previous": "previous", | ||||||
|  |     "groups": "Groups", | ||||||
|  |     "learning-path": "Learning path" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -40,5 +40,9 @@ | ||||||
|         "older": "18 et plus" |         "older": "18 et plus" | ||||||
|     }, |     }, | ||||||
|     "read-more": "En savoir plus", |     "read-more": "En savoir plus", | ||||||
|     "new-assignment": "Nouveau travail" |     "new-assignment": "Nouveau travail", | ||||||
|  |     "next": "suivant", | ||||||
|  |     "previous": "précédent", | ||||||
|  |     "groups": "Groupes", | ||||||
|  |     "learning-path": "Parcours d'apprentissage" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -39,5 +39,10 @@ | ||||||
|         "high-school": "3e graad secundair", |         "high-school": "3e graad secundair", | ||||||
|         "older": "Hoger onderwijs" |         "older": "Hoger onderwijs" | ||||||
|     }, |     }, | ||||||
|     "read-more": "Lees meer" |     "read-more": "Lees meer", | ||||||
|  |     "new-assignment": "Nieuwe opdracht", | ||||||
|  |     "next": "volgende", | ||||||
|  |     "previous": "vorige", | ||||||
|  |     "groups": "Groepen", | ||||||
|  |     "learning-path": "Leerpad" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import { createRouter, createWebHistory } from "vue-router"; | import {createRouter, createWebHistory} from "vue-router"; | ||||||
| import MenuBar from "@/components/MenuBar.vue"; | import MenuBar from "@/components/MenuBar.vue"; | ||||||
| import SingleAssignment from "@/views/assignments/SingleAssignment.vue"; | import SingleAssignment from "@/views/assignments/SingleAssignment.vue"; | ||||||
| import SingleClass from "@/views/classes/SingleClass.vue"; | import SingleClass from "@/views/classes/SingleClass.vue"; | ||||||
|  | @ -22,24 +22,24 @@ const router = createRouter({ | ||||||
|             path: "/", |             path: "/", | ||||||
|             name: "home", |             name: "home", | ||||||
|             component: () => import("../views/HomePage.vue"), |             component: () => import("../views/HomePage.vue"), | ||||||
|             meta: { requiresAuth: false }, |             meta: {requiresAuth: false}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/login", |             path: "/login", | ||||||
|             name: "LoginPage", |             name: "LoginPage", | ||||||
|             component: () => import("../views/LoginPage.vue"), |             component: () => import("../views/LoginPage.vue"), | ||||||
|             meta: { requiresAuth: false }, |             meta: {requiresAuth: false}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/callback", |             path: "/callback", | ||||||
|             component: CallbackPage, |             component: CallbackPage, | ||||||
|             meta: { requiresAuth: false }, |             meta: {requiresAuth: false}, | ||||||
|         }, |         }, | ||||||
| 
 | 
 | ||||||
|         { |         { | ||||||
|             path: "/user", |             path: "/user", | ||||||
|             component: MenuBar, |             component: MenuBar, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|             children: [ |             children: [ | ||||||
|                 { |                 { | ||||||
|                     path: "", |                     path: "", | ||||||
|  | @ -68,49 +68,55 @@ const router = createRouter({ | ||||||
|             path: "/theme/:id", |             path: "/theme/:id", | ||||||
|             name: "Theme", |             name: "Theme", | ||||||
|             component: SingleTheme, |             component: SingleTheme, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/assignment/create", |             path: "/assignment", | ||||||
|             name: "CreateAssigment", |             component: MenuBar, | ||||||
|             component: CreateAssignment, |             meta: {requiresAuth: true}, | ||||||
|             meta: { requiresAuth: true }, |             children: [ | ||||||
|         }, |                 { | ||||||
|         { |                     path: "create", | ||||||
|             path: "/assignment/:id", |                     name: "CreateAssigment", | ||||||
|             name: "SingleAssigment", |                     component: CreateAssignment, | ||||||
|             component: SingleAssignment, |                 }, | ||||||
|             meta: { requiresAuth: true }, |                 { | ||||||
|  |                     path: ":id", | ||||||
|  |                     name: "SingleAssigment", | ||||||
|  |                     component: SingleAssignment, | ||||||
|  |                 }, | ||||||
|  |             ] | ||||||
|         }, |         }, | ||||||
|  | 
 | ||||||
|         { |         { | ||||||
|             path: "/class/create", |             path: "/class/create", | ||||||
|             name: "CreateClass", |             name: "CreateClass", | ||||||
|             component: CreateClass, |             component: CreateClass, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/class/:id", |             path: "/class/:id", | ||||||
|             name: "SingleClass", |             name: "SingleClass", | ||||||
|             component: SingleClass, |             component: SingleClass, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/discussion/create", |             path: "/discussion/create", | ||||||
|             name: "CreateDiscussion", |             name: "CreateDiscussion", | ||||||
|             component: CreateDiscussion, |             component: CreateDiscussion, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/discussion/:id", |             path: "/discussion/:id", | ||||||
|             name: "SingleDiscussion", |             name: "SingleDiscussion", | ||||||
|             component: SingleDiscussion, |             component: SingleDiscussion, | ||||||
|             meta: { requiresAuth: true }, |             meta: {requiresAuth: true}, | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             path: "/:catchAll(.*)", |             path: "/:catchAll(.*)", | ||||||
|             name: "NotFound", |             name: "NotFound", | ||||||
|             component: NotFound, |             component: NotFound, | ||||||
|             meta: { requiresAuth: false }, |             meta: {requiresAuth: false}, | ||||||
|         }, |         }, | ||||||
|     ], |     ], | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -16,10 +16,6 @@ export const THEMESITEMS: Record<string, string[]> = { | ||||||
|     "algorithms": ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], |     "algorithms": ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export const AGEITEMS = [ |  | ||||||
|     "all", "primary-school", "lower-secondary", "upper-secondary", "high-school", "older" |  | ||||||
| ]; |  | ||||||
| 
 |  | ||||||
| export const AGE_TO_THEMES: Record<string, string[]> = { | export const AGE_TO_THEMES: Record<string, string[]> = { | ||||||
|     "all": THEMES_KEYS, |     "all": THEMES_KEYS, | ||||||
|     "primary-school": ["wegostem", "computational_thinking", "physical_computing"], |     "primary-school": ["wegostem", "computational_thinking", "physical_computing"], | ||||||
|  |  | ||||||
|  | @ -1,25 +1,43 @@ | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
|     import { useI18n } from "vue-i18n"; |     import {useI18n} from "vue-i18n"; | ||||||
|     import { ref } from "vue"; |     import {ref, shallowRef} from "vue"; | ||||||
|     const { t } = useI18n(); |     import {THEMESITEMS} from "@/utils/constants.ts"; | ||||||
|  | 
 | ||||||
|  |     const {t} = useI18n(); | ||||||
| 
 | 
 | ||||||
|     const step = ref(1); |     const step = ref(1); | ||||||
| 
 | 
 | ||||||
|  |     // Use a list with all themes so learning-paths can be filtered by theme | ||||||
|  |     const themeItems = ref(Object.keys(THEMESITEMS).slice(1)); | ||||||
|  |     const value = shallowRef([]); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|     <div class="main-container"> |     <div class="main-container"> | ||||||
|         <h1 class="title">{{ t("new-assignment") }}</h1> |         <h1 class="title">{{ t("new-assignment") }}</h1> | ||||||
|         <v-card class="form-card"> |         <v-card class="form-card"> | ||||||
|             <v-stepper class="stepper-container" alt-labels :items="['Learning path', 'Classes', 'Groups']" v-model="step" show-actions> |             <v-stepper class="stepper-container" alt-labels :items="[t('learning-path'), t('classes'), t('groups')]" | ||||||
|  |                        v-model="step" show-actions> | ||||||
|                 <template v-slot:item.1> |                 <template v-slot:item.1> | ||||||
|                     <v-card title="Step One" flat> |                     <v-card title="Select a learning path" flat> | ||||||
|  |                         <v-container class="step-container"> | ||||||
|  |                             <v-select | ||||||
|  |                                 v-model="value" | ||||||
|  |                                 :items="themeItems.map(theme => ({ title: t(`theme-options.${theme}`), value: theme }))" | ||||||
|  |                                 label="Filter by themes" | ||||||
|  |                                 chips | ||||||
|  |                                 multiple | ||||||
|  |                                 deletable-chips | ||||||
|  |                                 clearable | ||||||
|  |                             ></v-select> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |                         </v-container> | ||||||
|                     </v-card> |                     </v-card> | ||||||
|                 </template> |                 </template> | ||||||
| 
 | 
 | ||||||
|                 <template> |                 <template> | ||||||
|                     <v-card title="Step Two" flat> |                     <v-card title="Select one or more classes" flat> | ||||||
|                         <v-container class="step-container"> |                         <v-container class="step-container"> | ||||||
|                             <!-- Content for Step Two --> |                             <!-- Content for Step Two --> | ||||||
|                         </v-container> |                         </v-container> | ||||||
|  | @ -63,6 +81,8 @@ | ||||||
| 
 | 
 | ||||||
| .stepper-container { | .stepper-container { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .step-container { | .step-container { | ||||||
|  | @ -73,7 +93,7 @@ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Responsive adjustments */ | /* Responsive adjustments */ | ||||||
| @media (max-width: 600px) { | @media (max-width: 650px) { | ||||||
|     .form-card { |     .form-card { | ||||||
|         width: 95%; |         width: 95%; | ||||||
|         padding: 1%; |         padding: 1%; | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Joyelle Ndagijimana
						Joyelle Ndagijimana