mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-10 13:43:49 +02:00
115 refactoring dynamic page
This commit is contained in:
@@ -8,6 +8,10 @@ import DynamicPage from "./DynamicPage.vue";
|
||||
import ModuleSelection from "../components/ModuleSelection.vue";
|
||||
import { Module } from "../model/module.ts";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import moduleStore from "../store/moduleStore";
|
||||
import router from "../router";
|
||||
|
||||
const store = moduleStore();
|
||||
const { t } = useI18n({ useScope: "global" });
|
||||
|
||||
const courses = async () => {
|
||||
@@ -58,12 +62,18 @@ async function getModules() {
|
||||
:headline="$t('courseSelection.headline')"
|
||||
:subTitle="$t('courseSelection.subTitle')"
|
||||
icon="pi pi-calendar"
|
||||
:button="{
|
||||
label: $t('courseSelection.nextStep'),
|
||||
icon: 'pi pi-arrow-right',
|
||||
disabled: store.isEmpty(),
|
||||
onClick: () => router.push('/additional-modules')
|
||||
}"
|
||||
>
|
||||
<template #selection>
|
||||
<template #selection="{ flexSpecs }">
|
||||
<Dropdown
|
||||
v-model="selectedCourse"
|
||||
:options="countries"
|
||||
class="flex-1 m-0"
|
||||
:class="flexSpecs"
|
||||
filter
|
||||
option-label="name"
|
||||
:placeholder="$t('courseSelection.courseDropDown')"
|
||||
@@ -74,7 +84,7 @@ async function getModules() {
|
||||
<Dropdown
|
||||
v-model="selectedSemester"
|
||||
:options="semesters"
|
||||
class="flex-1 m-0"
|
||||
:class="flexSpecs"
|
||||
option-label="name"
|
||||
:placeholder="$t('courseSelection.semesterDropDown')"
|
||||
@change="getModules()"
|
||||
|
@@ -2,10 +2,16 @@
|
||||
import { computed, useSlots } from 'vue';
|
||||
|
||||
defineProps<{
|
||||
hideContent: Boolean,
|
||||
headline: String,
|
||||
subTitle?: String,
|
||||
icon?: String,
|
||||
hideContent: boolean,
|
||||
headline: string,
|
||||
subTitle?: string,
|
||||
icon?: string,
|
||||
button?: {
|
||||
label: string,
|
||||
icon: string,
|
||||
disabled: boolean,
|
||||
onClick: () => void
|
||||
}
|
||||
}>()
|
||||
|
||||
const slots = useSlots()
|
||||
@@ -43,9 +49,21 @@ const hasContent = computed(() => {
|
||||
>
|
||||
<slot
|
||||
name="selection"
|
||||
class="flex-1 m-0"
|
||||
flexSpecs="flex-1 m-0"
|
||||
></slot>
|
||||
</div>
|
||||
<div
|
||||
v-if="button"
|
||||
class="flex flex-wrap m-0 mb-3 gap-2 w-full lg:w-8 align-items-center justify-content-end"
|
||||
>
|
||||
<Button
|
||||
:disabled="button.disabled"
|
||||
class="col-12 md:col-4"
|
||||
@click="button.onClick()"
|
||||
:icon="button.icon"
|
||||
:label="button.label"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasContent"
|
||||
:class="
|
||||
|
@@ -7,6 +7,7 @@ import router from "../router";
|
||||
import tokenStore from "../store/tokenStore";
|
||||
import { useToast } from "primevue/usetoast";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import DynamicPage from "./DynamicPage.vue";
|
||||
const { t } = useI18n({ useScope: "global" });
|
||||
|
||||
const toast = useToast();
|
||||
@@ -14,10 +15,14 @@ const toast = useToast();
|
||||
const token: Ref<string> = ref("");
|
||||
const modules: Ref<Map<string, Module>> = ref(moduleStore().modules);
|
||||
|
||||
function extractToken(token: string): string {
|
||||
const tokenRegex = /^[a-z0-9]{15}$/;
|
||||
const tokenUriRegex = /[?&]token=([a-z0-9]{15})(?:&|$)/;
|
||||
const tokenRegex = /^[a-z0-9]{15}$/;
|
||||
const tokenUriRegex = /[?&]token=([a-z0-9]{15})(?:&|$)/;
|
||||
|
||||
const isToken = (token: string): boolean => {
|
||||
return tokenRegex.test(token) || tokenUriRegex.test(token);
|
||||
};
|
||||
|
||||
function extractToken(token: string): string {
|
||||
if (tokenRegex.test(token)) {
|
||||
return token;
|
||||
}
|
||||
@@ -66,43 +71,28 @@ function loadCalendar(): void {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex flex-column align-items-center transition-all transition-duration-500 transition-ease-in-out md:mt-8 mb-7">
|
||||
<div class="flex align-items-center justify-content-center gap-2 mx-2">
|
||||
<h3 class="text-4xl">
|
||||
{{ $t("editCalendarView.headline") }}
|
||||
</h3>
|
||||
<i
|
||||
class="pi pi-pencil"
|
||||
style="font-size: 2rem"
|
||||
></i>
|
||||
</div>
|
||||
<div
|
||||
class="flex justify-content-center"
|
||||
>
|
||||
<p class="text-2xl m-2">{{ $t("editCalendarView.subTitle") }}</p>
|
||||
</div>
|
||||
<div
|
||||
class="flex align-items-center justify-content-center m-4 w-full lg:w-8"
|
||||
>
|
||||
<DynamicPage
|
||||
hideContent
|
||||
:headline="$t('editCalendarView.headline')"
|
||||
:subTitle="$t('editCalendarView.subTitle')"
|
||||
icon="pi pi-pencil"
|
||||
:button="{
|
||||
label: $t('editCalendarView.loadCalendar'),
|
||||
icon: 'pi pi-arrow-down',
|
||||
disabled: !isToken(token),
|
||||
onClick: loadCalendar
|
||||
}"
|
||||
>
|
||||
<template #selection="{ flexSpecs }">
|
||||
<InputText
|
||||
v-model="token"
|
||||
type="text"
|
||||
class="w-full"
|
||||
:class="flexSpecs"
|
||||
autofocus
|
||||
@keyup.enter="loadCalendar"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="flex align-items-center justify-content-end m-2 w-full lg:w-8"
|
||||
>
|
||||
<Button
|
||||
:label="$t('editCalendarView.loadCalendar')"
|
||||
icon="pi pi-arrow-down"
|
||||
class="col-12 md:col-4 mb-3 align-self-end"
|
||||
@click="loadCalendar"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</DynamicPage>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
Reference in New Issue
Block a user