mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 09:38:51 +02:00
fix:#3 linted formatted
This commit is contained in:
@ -478,11 +478,12 @@ $highlightFocusBg: rgba($primaryColor, 0.24) !default;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.fc-event-selected::after, .fc-event:focus::after {
|
.fc-event-selected::after,
|
||||||
|
.fc-event:focus::after {
|
||||||
background: var(--fc-event-selected-overlay-color);
|
background: var(--fc-event-selected-overlay-color);
|
||||||
inset: -1px;
|
inset: -1px;
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
@ -488,11 +488,12 @@ $highlightFocusBg: rgba($primaryColor, 0.24) !default;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.fc-event-selected::after, .fc-event:focus::after {
|
.fc-event-selected::after,
|
||||||
|
.fc-event:focus::after {
|
||||||
background: var(--fc-event-selected-overlay-color);
|
background: var(--fc-event-selected-overlay-color);
|
||||||
inset: -1px;
|
inset: -1px;
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -37,7 +37,7 @@ const disabledPages = [
|
|||||||
"edit-calendar",
|
"edit-calendar",
|
||||||
"rooms",
|
"rooms",
|
||||||
"free-rooms",
|
"free-rooms",
|
||||||
"room-schedule"
|
"room-schedule",
|
||||||
];
|
];
|
||||||
|
|
||||||
const store = moduleStore();
|
const store = moduleStore();
|
||||||
@ -59,13 +59,18 @@ const settings = settingsStore;
|
|||||||
const emit = defineEmits(["dark-mode-toggled"]);
|
const emit = defineEmits(["dark-mode-toggled"]);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// set theme matching browser preference
|
// set theme matching browser preference
|
||||||
settings().setDarkMode(window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches)
|
settings().setDarkMode(
|
||||||
|
window.matchMedia &&
|
||||||
|
window.matchMedia("(prefers-color-scheme: dark)").matches,
|
||||||
|
);
|
||||||
setTheme(settings, primeVue, emit);
|
setTheme(settings, primeVue, emit);
|
||||||
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => {
|
window
|
||||||
settings().setDarkMode(e.matches)
|
.matchMedia("(prefers-color-scheme: dark)")
|
||||||
setTheme(settings, primeVue, emit);
|
.addEventListener("change", (e) => {
|
||||||
});
|
settings().setDarkMode(e.matches);
|
||||||
|
setTheme(settings, primeVue, emit);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -16,13 +16,32 @@
|
|||||||
|
|
||||||
import { BSON } from "bson";
|
import { BSON } from "bson";
|
||||||
import { RoomOccupancyList } from "@/model/roomOccupancyList.ts";
|
import { RoomOccupancyList } from "@/model/roomOccupancyList.ts";
|
||||||
import { Duration, NormalizedInterval, add, addDays, addMinutes, addMonths, clamp, differenceInMinutes, eachDayOfInterval, endOfDay, interval, isAfter, isBefore, isEqual, max, min, startOfDay, subDays } from "date-fns";
|
import {
|
||||||
|
Duration,
|
||||||
|
NormalizedInterval,
|
||||||
|
add,
|
||||||
|
addDays,
|
||||||
|
addMinutes,
|
||||||
|
addMonths,
|
||||||
|
clamp,
|
||||||
|
differenceInMinutes,
|
||||||
|
eachDayOfInterval,
|
||||||
|
endOfDay,
|
||||||
|
interval,
|
||||||
|
isAfter,
|
||||||
|
isBefore,
|
||||||
|
isEqual,
|
||||||
|
max,
|
||||||
|
min,
|
||||||
|
startOfDay,
|
||||||
|
subDays,
|
||||||
|
} from "date-fns";
|
||||||
import { formatYearMonthDay } from "@/helpers/dates";
|
import { formatYearMonthDay } from "@/helpers/dates";
|
||||||
|
|
||||||
const END_OF_SUMMER_SEMESTER = "0930";
|
const END_OF_SUMMER_SEMESTER = "0930";
|
||||||
const END_OF_WINTER_SEMESTER = "0331";
|
const END_OF_WINTER_SEMESTER = "0331";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if date is in winter semester before summer semester
|
* check if date is in winter semester before summer semester
|
||||||
* @param date - The date to check
|
* @param date - The date to check
|
||||||
* @returns boolean - true if date is in winter semester
|
* @returns boolean - true if date is in winter semester
|
||||||
@ -32,7 +51,7 @@ export function isBeforeSummer(date: Date): boolean {
|
|||||||
return formattedDate <= END_OF_WINTER_SEMESTER;
|
return formattedDate <= END_OF_WINTER_SEMESTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if date is in winter semester after summer semester
|
* check if date is in winter semester after summer semester
|
||||||
* @param date - The date to check
|
* @param date - The date to check
|
||||||
* @returns boolean - true if date is in winter semester
|
* @returns boolean - true if date is in winter semester
|
||||||
@ -49,7 +68,7 @@ export function isAfterSummer(date: Date): boolean {
|
|||||||
*/
|
*/
|
||||||
export function getSemesterStart(date: Date): Date {
|
export function getSemesterStart(date: Date): Date {
|
||||||
if (isBeforeSummer(date)) {
|
if (isBeforeSummer(date)) {
|
||||||
return new Date(date.getFullYear()-1, 9, 1);
|
return new Date(date.getFullYear() - 1, 9, 1);
|
||||||
} else if (isAfterSummer(date)) {
|
} else if (isAfterSummer(date)) {
|
||||||
return new Date(date.getFullYear(), 9, 1);
|
return new Date(date.getFullYear(), 9, 1);
|
||||||
} else {
|
} else {
|
||||||
@ -66,7 +85,7 @@ export function getSemesterStart(date: Date): Date {
|
|||||||
|
|
||||||
export async function fetchRoomOccupancy(
|
export async function fetchRoomOccupancy(
|
||||||
from_date?: string,
|
from_date?: string,
|
||||||
to_date?: string
|
to_date?: string,
|
||||||
): Promise<RoomOccupancyList> {
|
): Promise<RoomOccupancyList> {
|
||||||
if (from_date == undefined) {
|
if (from_date == undefined) {
|
||||||
let new_from_date = getSemesterStart(new Date());
|
let new_from_date = getSemesterStart(new Date());
|
||||||
|
@ -71,7 +71,6 @@ const toggle = (info: EventClickArg) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const selectedToken = computed(() => {
|
const selectedToken = computed(() => {
|
||||||
return props.token;
|
return props.token;
|
||||||
});
|
});
|
||||||
@ -79,7 +78,7 @@ const selectedToken = computed(() => {
|
|||||||
const mobilePage = inject("mobilePage") as Ref<boolean>;
|
const mobilePage = inject("mobilePage") as Ref<boolean>;
|
||||||
const date: Ref<Date> = ref(new Date());
|
const date: Ref<Date> = ref(new Date());
|
||||||
|
|
||||||
const { data: calendar} = useQuery({
|
const { data: calendar } = useQuery({
|
||||||
queryKey: ["userCalendar", selectedToken],
|
queryKey: ["userCalendar", selectedToken],
|
||||||
queryFn: () => fetchICalendarEvents(selectedToken.value),
|
queryFn: () => fetchICalendarEvents(selectedToken.value),
|
||||||
select: (data) => {
|
select: (data) => {
|
||||||
@ -89,7 +88,7 @@ const { data: calendar} = useQuery({
|
|||||||
refetchOnWindowFocus: "always",
|
refetchOnWindowFocus: "always",
|
||||||
refetchOnReconnect: "always",
|
refetchOnReconnect: "always",
|
||||||
networkMode: "offlineFirst",
|
networkMode: "offlineFirst",
|
||||||
enabled: () => tokenStore().token !== ""
|
enabled: () => tokenStore().token !== "",
|
||||||
});
|
});
|
||||||
|
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
@ -97,13 +96,13 @@ const queryClient = useQueryClient();
|
|||||||
const invalidateAndRefetchCalendar = () => {
|
const invalidateAndRefetchCalendar = () => {
|
||||||
console.debug("invalidateAndRefetchCalendar", selectedToken);
|
console.debug("invalidateAndRefetchCalendar", selectedToken);
|
||||||
const queryKey = ["userCalendar", selectedToken];
|
const queryKey = ["userCalendar", selectedToken];
|
||||||
queryClient.invalidateQueries({queryKey: queryKey}).then(() => {
|
queryClient.invalidateQueries({ queryKey: queryKey }).then(() => {
|
||||||
queryClient.refetchQueries({queryKey: queryKey});
|
queryClient.refetchQueries({ queryKey: queryKey });
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
invalidateAndRefetchCalendar
|
invalidateAndRefetchCalendar,
|
||||||
});
|
});
|
||||||
|
|
||||||
const events = computed(() => {
|
const events = computed(() => {
|
||||||
|
@ -29,7 +29,6 @@ const emit = defineEmits(["dark-mode-toggled"]);
|
|||||||
const store = settingsStore;
|
const store = settingsStore;
|
||||||
|
|
||||||
const isDark = computed(() => store().isDark);
|
const isDark = computed(() => store().isDark);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -20,10 +20,15 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|||||||
import { computed, ComputedRef, ref } from "vue";
|
import { computed, ComputedRef, ref } from "vue";
|
||||||
import settingsStore from "../store/settingsStore.ts";
|
import settingsStore from "../store/settingsStore.ts";
|
||||||
|
|
||||||
const pageOptions: ComputedRef<(string | {
|
const pageOptions: ComputedRef<
|
||||||
label: string;
|
(
|
||||||
value: string;
|
| string
|
||||||
})[]> = computed(() => [...settingsStore().getDefaultPageOptions()]);
|
| {
|
||||||
|
label: string;
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
)[]
|
||||||
|
> = computed(() => [...settingsStore().getDefaultPageOptions()]);
|
||||||
|
|
||||||
const selectedPage = ref(settingsStore().defaultPage);
|
const selectedPage = ref(settingsStore().defaultPage);
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ import { computed } from "vue";
|
|||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
const { t } = useI18n({ useScope: "global" });
|
const { t } = useI18n({ useScope: "global" });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const items = computed(() => [
|
const items = computed(() => [
|
||||||
{
|
{
|
||||||
label: t("calendar"),
|
label: t("calendar"),
|
||||||
@ -133,7 +131,15 @@ const items = computed(() => [
|
|||||||
<div class="flex align-items-stretch justify-content-center">
|
<div class="flex align-items-stretch justify-content-center">
|
||||||
<!-- Settings Button with Gear Icon -->
|
<!-- Settings Button with Gear Icon -->
|
||||||
<router-link v-slot="{ navigate }" :to="`/settings`" custom>
|
<router-link v-slot="{ navigate }" :to="`/settings`" custom>
|
||||||
<Button icon="pi pi-cog" severity="secondary" rounded text size="large" aria-label="Settings" @click="navigate" />
|
<Button
|
||||||
|
icon="pi pi-cog"
|
||||||
|
severity="secondary"
|
||||||
|
rounded
|
||||||
|
text
|
||||||
|
size="large"
|
||||||
|
aria-label="Settings"
|
||||||
|
@click="navigate"
|
||||||
|
/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -92,9 +92,8 @@ function transformData(data: RoomOccupancyList) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { data: occupancy } = useQuery({
|
const { data: occupancy } = useQuery({
|
||||||
queryKey: ["roomOccupancy"],//, selectedRoom, currentDateFrom, currentDateTo],
|
queryKey: ["roomOccupancy"], //, selectedRoom, currentDateFrom, currentDateTo],
|
||||||
queryFn: () =>
|
queryFn: () => fetchRoomOccupancy(),
|
||||||
fetchRoomOccupancy(),
|
|
||||||
staleTime: 12 * 3600000, // 12 hours
|
staleTime: 12 * 3600000, // 12 hours
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -192,9 +191,7 @@ const calendarOptions: ComputedRef<CalendarOptions> = computed(() => ({
|
|||||||
color: event.event.free
|
color: event.event.free
|
||||||
? "var(--htwk-gruen-500)"
|
? "var(--htwk-gruen-500)"
|
||||||
: "var(--htwk-grau-60-500)",
|
: "var(--htwk-grau-60-500)",
|
||||||
textColor: event.event.free
|
textColor: event.event.free ? "var(--green-50)" : "white",
|
||||||
? "var(--green-50)"
|
|
||||||
: "white",
|
|
||||||
title: event.event.stub
|
title: event.event.stub
|
||||||
? t("roomFinderPage.stub")
|
? t("roomFinderPage.stub")
|
||||||
: event.event.free
|
: event.event.free
|
||||||
|
@ -41,10 +41,13 @@ export function parseICalData(
|
|||||||
const jCalData = ICAL.parse(icalData);
|
const jCalData = ICAL.parse(icalData);
|
||||||
const comp = new ICAL.Component(jCalData);
|
const comp = new ICAL.Component(jCalData);
|
||||||
const vEvents = comp.getAllSubcomponents("vevent");
|
const vEvents = comp.getAllSubcomponents("vevent");
|
||||||
const events: CalendarComponent[] = vEvents.map((vevent: CalendarComponent) => {
|
const events: CalendarComponent[] = vEvents.map(
|
||||||
return new ICAL.Event(vevent);
|
(vevent: CalendarComponent) => {
|
||||||
});
|
return new ICAL.Event(vevent);
|
||||||
const colorDistinctionEvents: ColorDistinctionEvent[] = extractedColorizedEvents(events);
|
},
|
||||||
|
);
|
||||||
|
const colorDistinctionEvents: ColorDistinctionEvent[] =
|
||||||
|
extractedColorizedEvents(events);
|
||||||
|
|
||||||
return vEvents.map((vevent: CalendarComponent) => {
|
return vEvents.map((vevent: CalendarComponent) => {
|
||||||
const event = new ICAL.Event(vevent);
|
const event = new ICAL.Event(vevent);
|
||||||
|
@ -20,27 +20,27 @@ import { EmitFn } from "primevue/ts-helpers";
|
|||||||
import settingsStore from "@/store/settingsStore.ts";
|
import settingsStore from "@/store/settingsStore.ts";
|
||||||
|
|
||||||
const darkTheme = ref("lara-dark-blue"),
|
const darkTheme = ref("lara-dark-blue"),
|
||||||
lightTheme = ref("lara-light-blue");
|
lightTheme = ref("lara-light-blue");
|
||||||
|
|
||||||
export type SettingsStore = typeof settingsStore;
|
export type SettingsStore = typeof settingsStore;
|
||||||
|
|
||||||
export function toggleTheme(
|
export function toggleTheme(
|
||||||
store: SettingsStore,
|
store: SettingsStore,
|
||||||
primeVue: { changeTheme: PrimeVueChangeTheme },
|
primeVue: { changeTheme: PrimeVueChangeTheme },
|
||||||
emit: EmitFn<"dark-mode-toggled"[]>,
|
emit: EmitFn<"dark-mode-toggled"[]>,
|
||||||
): void {
|
): void {
|
||||||
store().setDarkMode(!store().isDark);
|
store().setDarkMode(!store().isDark);
|
||||||
setTheme(store, primeVue, emit);
|
setTheme(store, primeVue, emit);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setTheme(
|
export function setTheme(
|
||||||
store: SettingsStore,
|
store: SettingsStore,
|
||||||
{ changeTheme }: { changeTheme: PrimeVueChangeTheme },
|
{ changeTheme }: { changeTheme: PrimeVueChangeTheme },
|
||||||
emit: EmitFn<"dark-mode-toggled"[]>
|
emit: EmitFn<"dark-mode-toggled"[]>,
|
||||||
) {
|
) {
|
||||||
const isDark = ref(store().isDark);
|
const isDark = ref(store().isDark);
|
||||||
const newTheme = isDark.value ? darkTheme.value : lightTheme.value,
|
const newTheme = isDark.value ? darkTheme.value : lightTheme.value,
|
||||||
oldTheme = isDark.value ? lightTheme.value : darkTheme.value;
|
oldTheme = isDark.value ? lightTheme.value : darkTheme.value;
|
||||||
changeTheme(oldTheme, newTheme, "theme-link", () => { });
|
changeTheme(oldTheme, newTheme, "theme-link", () => {});
|
||||||
emit("dark-mode-toggled", isDark.value);
|
emit("dark-mode-toggled", isDark.value);
|
||||||
}
|
}
|
||||||
|
@ -70,10 +70,10 @@ app.use(VueQueryPlugin, {
|
|||||||
queryClientConfig: {
|
queryClientConfig: {
|
||||||
defaultOptions: {
|
defaultOptions: {
|
||||||
queries: {
|
queries: {
|
||||||
refetchOnWindowFocus: false
|
refetchOnWindowFocus: false,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
app.use(PrimeVue);
|
app.use(PrimeVue);
|
||||||
|
@ -93,16 +93,22 @@ export class RoomOccupancyList {
|
|||||||
const roomOccupancy = this.rooms.find((r) => r.name === room);
|
const roomOccupancy = this.rooms.find((r) => r.name === room);
|
||||||
|
|
||||||
// Get start and end of decoded time range (within encoded list and requested range)
|
// Get start and end of decoded time range (within encoded list and requested range)
|
||||||
let decodeInterval = interval(clamp(from, this.getOccupancyInterval()), clamp(to, this.getOccupancyInterval()));
|
let decodeInterval = interval(
|
||||||
|
clamp(from, this.getOccupancyInterval()),
|
||||||
|
clamp(to, this.getOccupancyInterval()),
|
||||||
|
);
|
||||||
|
|
||||||
// if the room is not in the list or the time range is empty, return stub events
|
// if the room is not in the list or the time range is empty, return stub events
|
||||||
if (roomOccupancy === undefined || isEqual(decodeInterval.start, decodeInterval.end)) {
|
if (
|
||||||
|
roomOccupancy === undefined ||
|
||||||
|
isEqual(decodeInterval.start, decodeInterval.end)
|
||||||
|
) {
|
||||||
return RoomOccupancyList.generateStubEvents(room, from, to);
|
return RoomOccupancyList.generateStubEvents(room, from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
const occupancyList = [];
|
const occupancyList = [];
|
||||||
|
|
||||||
let {decodeSliceStart, decodeSlice} = this.sliceOccupancy(
|
let { decodeSliceStart, decodeSlice } = this.sliceOccupancy(
|
||||||
decodeInterval,
|
decodeInterval,
|
||||||
roomOccupancy.occupancy.buffer,
|
roomOccupancy.occupancy.buffer,
|
||||||
);
|
);
|
||||||
|
@ -35,7 +35,6 @@ const NotFound = () => import("../view/NotFound.vue");
|
|||||||
import i18n from "../i18n";
|
import i18n from "../i18n";
|
||||||
import settingsStore from "@/store/settingsStore.ts";
|
import settingsStore from "@/store/settingsStore.ts";
|
||||||
|
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
routes: [
|
routes: [
|
||||||
|
@ -23,7 +23,10 @@ const settingsStore = defineStore("settingsStore", {
|
|||||||
return {
|
return {
|
||||||
locale: useLocalStorage("locale", "en"), //useLocalStorage takes in a key of 'count' and default value of 0
|
locale: useLocalStorage("locale", "en"), //useLocalStorage takes in a key of 'count' and default value of 0
|
||||||
isDark: true,
|
isDark: true,
|
||||||
defaultPage: useLocalStorage("defaultPage", {label: "Home", value: "/home"}),
|
defaultPage: useLocalStorage("defaultPage", {
|
||||||
|
label: "Home",
|
||||||
|
value: "/home",
|
||||||
|
}),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
@ -36,10 +39,7 @@ const settingsStore = defineStore("settingsStore", {
|
|||||||
getDarkMode(): boolean {
|
getDarkMode(): boolean {
|
||||||
return this.isDark;
|
return this.isDark;
|
||||||
},
|
},
|
||||||
setDefaultPage(page: {
|
setDefaultPage(page: { label: string; value: string }) {
|
||||||
label: string;
|
|
||||||
value: string;
|
|
||||||
}) {
|
|
||||||
this.defaultPage = page;
|
this.defaultPage = page;
|
||||||
},
|
},
|
||||||
getDefaultPageOptions(): {
|
getDefaultPageOptions(): {
|
||||||
@ -58,12 +58,12 @@ const settingsStore = defineStore("settingsStore", {
|
|||||||
label: route.name,
|
label: route.name,
|
||||||
value: route.path,
|
value: route.path,
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
return options;
|
});
|
||||||
|
return options;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default settingsStore;
|
export default settingsStore;
|
||||||
|
@ -11,6 +11,4 @@ import DynamicPage from "@/view/DynamicPage.vue";
|
|||||||
</DynamicPage>
|
</DynamicPage>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
||||||
import LocaleSwitcher from "@/components/LocaleSwitcher.vue";
|
import LocaleSwitcher from "@/components/LocaleSwitcher.vue";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import DarkModeSwitcher from "@/components/DarkModeSwitcher.vue";
|
import DarkModeSwitcher from "@/components/DarkModeSwitcher.vue";
|
||||||
@ -14,7 +13,6 @@ function handleDarkModeToggled(isDarkVar: boolean) {
|
|||||||
// Assuming the root component has an isDark ref
|
// Assuming the root component has an isDark ref
|
||||||
isDark.value = isDarkVar;
|
isDark.value = isDarkVar;
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -34,7 +32,7 @@ function handleDarkModeToggled(isDarkVar: boolean) {
|
|||||||
<slot flex-specs="flex-1 m-0" name="selection"></slot>
|
<slot flex-specs="flex-1 m-0" name="selection"></slot>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="opacity-100 transition-all transition-duration-500 transition-ease-in-out w-full lg:w-8"
|
class="opacity-100 transition-all transition-duration-500 transition-ease-in-out w-full lg:w-8"
|
||||||
>
|
>
|
||||||
<div class="flex flex-column justify-content-center">
|
<div class="flex flex-column justify-content-center">
|
||||||
<div class="grid my-2">
|
<div class="grid my-2">
|
||||||
@ -68,11 +66,9 @@ class="opacity-100 transition-all transition-duration-500 transition-ease-in-out
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.col {
|
.col {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
</style>
|
||||||
</style>
|
|
||||||
|
@ -42,12 +42,12 @@ function loadCalendar() {
|
|||||||
|
|
||||||
calendarViewerRef.value?.invalidateAndRefetchCalendar();
|
calendarViewerRef.value?.invalidateAndRefetchCalendar();
|
||||||
|
|
||||||
toast.add({
|
toast.add({
|
||||||
severity: "success",
|
severity: "success",
|
||||||
summary: t("editCalendarView.toast.success"),
|
summary: t("editCalendarView.toast.success"),
|
||||||
detail: t("editCalendarView.toast.successDetailLoad"),
|
detail: t("editCalendarView.toast.successDetailLoad"),
|
||||||
life: 3000,
|
life: 3000,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
@ -77,7 +77,7 @@ onMounted(() => {
|
|||||||
></Button>
|
></Button>
|
||||||
</template>
|
</template>
|
||||||
<template #content>
|
<template #content>
|
||||||
<CalendarViewer :token="tokenStore().token" ref="calendarViewerRef" />
|
<CalendarViewer ref="calendarViewerRef" :token="tokenStore().token" />
|
||||||
</template>
|
</template>
|
||||||
</DynamicPage>
|
</DynamicPage>
|
||||||
</template>
|
</template>
|
||||||
|
@ -40,18 +40,18 @@ export default defineConfig({
|
|||||||
start_url: "/",
|
start_url: "/",
|
||||||
id: "de.htwk-leipzig.htwkalender",
|
id: "de.htwk-leipzig.htwkalender",
|
||||||
screenshots: [
|
screenshots: [
|
||||||
{
|
{
|
||||||
src: "/1280x720.png",
|
src: "/1280x720.png",
|
||||||
sizes: "1280x720",
|
sizes: "1280x720",
|
||||||
form_factor: "wide",
|
form_factor: "wide",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "/390x844.png",
|
src: "/390x844.png",
|
||||||
sizes: "1170x2532",
|
sizes: "1170x2532",
|
||||||
form_factor: "narrow",
|
form_factor: "narrow",
|
||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
icons: [
|
icons: [
|
||||||
{
|
{
|
||||||
@ -86,11 +86,11 @@ export default defineConfig({
|
|||||||
cleanupOutdatedCaches: true,
|
cleanupOutdatedCaches: true,
|
||||||
runtimeCaching: [
|
runtimeCaching: [
|
||||||
{
|
{
|
||||||
urlPattern: ({ url }) => url.pathname.startsWith('/api/feed'),
|
urlPattern: ({ url }) => url.pathname.startsWith("/api/feed"),
|
||||||
method: 'GET',
|
method: "GET",
|
||||||
handler: 'NetworkFirst',
|
handler: "NetworkFirst",
|
||||||
options: {
|
options: {
|
||||||
cacheName: 'calendar-feed-cache',
|
cacheName: "calendar-feed-cache",
|
||||||
expiration: {
|
expiration: {
|
||||||
maxAgeSeconds: 12 * 60 * 60, // 12 hours
|
maxAgeSeconds: 12 * 60 * 60, // 12 hours
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user