Add basic handling for local timetables

This commit is contained in:
2023-06-18 14:45:12 +02:00
parent 48364d4c59
commit f19d43396c
3 changed files with 28 additions and 4 deletions

View File

@ -14,6 +14,9 @@ export const timetableId = ref(localStorage.getItem("timetableId") || "none");
export const timetableGroups = ref( export const timetableGroups = ref(
JSON.parse(localStorage.getItem("timetableGroups") || "[]") JSON.parse(localStorage.getItem("timetableGroups") || "[]")
); );
export const localTimetables = ref(
JSON.parse(localStorage.getItem("timetables")) || []
);
export const theme = ref(localStorage.getItem("theme") || "auto"); export const theme = ref(localStorage.getItem("theme") || "auto");
@ -31,6 +34,9 @@ watch(
}, },
{ deep: true } { deep: true }
); );
watch(localTimetables, (newValue) => {
localStorage.setItem("timetables", JSON.stringify(newValue));
});
watch(theme, (newValue) => { watch(theme, (newValue) => {
localStorage.setItem("theme", newValue); localStorage.setItem("theme", newValue);
}); });
@ -52,10 +58,15 @@ export const changeDate = ref(new Date());
/* Data store */ /* Data store */
export const timetable = computed(() => { export const timetable = computed(() => {
const selectedTimetable = timetables.value.find( const localTimetable = localTimetables.value.find(
(e) => e.id == timetableId.value (e) => e.id == timetableId.value
); );
return selectedTimetable || { trusted: true, source: "", data: [] }; const remoteTimetable = timetables.value.find(
(e) => e.id == timetableId.value
);
return (
localTimetable || remoteTimetable || { trusted: true, source: "", data: [] }
);
}); });
export const timetables = ref([]); export const timetables = ref([]);
export const times = ref([]); export const times = ref([]);

View File

@ -19,6 +19,7 @@ export const strings = {
heading: { heading: {
filtering: "Filtering", filtering: "Filtering",
timetableGroups: "Timetable Groups", timetableGroups: "Timetable Groups",
localTimetables: "Local Timetables",
remoteTimetables: "Remote Timetables", remoteTimetables: "Remote Timetables",
language: "Language", language: "Language",
about: "About", about: "About",
@ -128,6 +129,7 @@ export const strings = {
settings: { settings: {
heading: { heading: {
filtering: "Filter", filtering: "Filter",
localTimetables: "Lokale Stundenpläne",
remoteTimetables: "Online Stundenpläne", remoteTimetables: "Online Stundenpläne",
timetableGroups: "Stundenplan-Gruppen", timetableGroups: "Stundenplan-Gruppen",
language: "Sprache", language: "Sprache",

View File

@ -1,9 +1,20 @@
<script setup> <script setup>
import TimetableCard from "@/components/settings/timetable-card.vue"; import TimetableCard from "@/components/settings/timetable-card.vue";
import { timetables, timetableId } from "@/store"; import { timetables, localTimetables, timetableId } from "@/store";
</script> </script>
<template> <template>
<h2>{{ $t("settings.heading.localTimetables") }}</h2>
<div class="list">
<TimetableCard
v-for="timetable in localTimetables"
:key="timetable.id"
:timetable="timetable"
:selected="timetableId == timetable.id"
:editable="true"
@click="timetableId = timetable.id"
/>
</div>
<h2>{{ $t("settings.heading.remoteTimetables") }}</h2> <h2>{{ $t("settings.heading.remoteTimetables") }}</h2>
<div class="list"> <div class="list">
<TimetableCard <TimetableCard
@ -11,7 +22,7 @@ import { timetables, timetableId } from "@/store";
:key="timetable.id" :key="timetable.id"
:timetable="timetable" :timetable="timetable"
:selected="timetableId == timetable.id" :selected="timetableId == timetable.id"
:editable="true" :editable="false"
@click="timetableId = timetable.id" @click="timetableId = timetable.id"
/> />
</div> </div>