✨ Add support for multiple remote timetables
- Add timetable "title" column to db - Make API return array of timetables - Add settings page for selecting a timetable - Add InfoCard if no timetable is selected
This commit is contained in:
24
src/store.js
24
src/store.js
@ -10,6 +10,7 @@ export const loadingFailed = ref(false);
|
||||
|
||||
/* Preferences */
|
||||
export const classFilter = ref(localStorage.getItem("classFilter") || "none");
|
||||
export const timetableId = ref(localStorage.getItem("timetableId") || "none");
|
||||
export const timetableGroups = ref(
|
||||
JSON.parse(localStorage.getItem("timetableGroups") || "[]")
|
||||
);
|
||||
@ -20,6 +21,9 @@ watch(classFilter, (newValue) => {
|
||||
localStorage.setItem("classFilter", newValue);
|
||||
fetchData(getNextAndPrevDay(selectedDate.value), false);
|
||||
});
|
||||
watch(timetableId, (newValue) => {
|
||||
localStorage.setItem("timetableId", newValue);
|
||||
});
|
||||
watch(
|
||||
timetableGroups,
|
||||
(newValue) => {
|
||||
@ -47,7 +51,14 @@ export const changeDay = ref(0);
|
||||
export const changeDate = ref(new Date());
|
||||
|
||||
/* Data store */
|
||||
export const timetable = ref({ trusted: true });
|
||||
export const timetable = computed(() => {
|
||||
const selectedTimetable = timetables.value.find(
|
||||
(e) => e.id == timetableId.value
|
||||
);
|
||||
return selectedTimetable || { trusted: true, source: "", data: [] };
|
||||
});
|
||||
export const timetables = ref([]);
|
||||
export const times = ref([]);
|
||||
export const substitutions = ref({});
|
||||
export const history = ref({});
|
||||
export const classList = ref([]);
|
||||
@ -92,7 +103,7 @@ export async function fetchData(days, partial) {
|
||||
if (!partial) {
|
||||
await fetchClassList();
|
||||
loadingProgress.value = step++ / steps;
|
||||
await fetchTimetable();
|
||||
await fetchTimetables();
|
||||
loadingProgress.value = step++ / steps;
|
||||
}
|
||||
for (const day of days) {
|
||||
@ -117,15 +128,18 @@ export async function fetchClassList() {
|
||||
classList.value = classListData;
|
||||
}
|
||||
|
||||
export async function fetchTimetable() {
|
||||
export async function fetchTimetables() {
|
||||
const timetableResponse = await fetch(
|
||||
`${baseUrl}/timetable?class=${classFilter.value}`
|
||||
);
|
||||
const timetableData = await timetableResponse.json();
|
||||
if (timetableData.error) {
|
||||
console.warn("API Error: " + timetableData.error);
|
||||
timetable.value = { trusted: true, source: "", data: [] };
|
||||
} else timetable.value = timetableData;
|
||||
timetables.value = [];
|
||||
} else {
|
||||
timetables.value = timetableData.timetables;
|
||||
times.value = timetableData.times;
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchSubstitutions(day) {
|
||||
|
Reference in New Issue
Block a user