From ac4cf00fa69a57c86ceb883eb0dcba79b7cac9ec Mon Sep 17 00:00:00 2001 From: PurelyAnecdotal <58897346+PurelyAnecdotal@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:54:09 -1000 Subject: [PATCH] Consolidate cache loading code (#108) --- src/lib/cache.ts | 57 +++++++++++++++++++--------------------------- src/lib/synergy.ts | 2 +- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/lib/cache.ts b/src/lib/cache.ts index d3a8aa8..d06a1ab 100644 --- a/src/lib/cache.ts +++ b/src/lib/cache.ts @@ -59,54 +59,43 @@ export const loadGradebook = async () => { gradebookLoaded.set(true); }; -export const loadAttendance = async () => { - attendanceLoaded.set(false); - - writeCacheToStore('attendance', attendance); +const loadUsingCache = async (key: string, store: Writable, indicator: Writable, retrievalFunc: () => Promise) => { + indicator.set(false); - const attendanceRecord = await get(studentAccount)?.attendance(); + writeCacheToStore(key, store); - attendance.set(attendanceRecord); - localStorage.setItem('attendance', JSON.stringify(attendanceRecord)); + const record = await retrievalFunc(); - attendanceLoaded.set(true); -}; + store.set(record); + localStorage.setItem(key, JSON.stringify(record)); -export const loadStudentInfo = async () => { - studentInfoLoaded.set(false); + indicator.set(true); +} - writeCacheToStore('studentInfo', studentInfo); +export const loadAttendance = async () => { + const acc = get(studentAccount); + if (!acc) return; - const studentInfoRecord = await get(studentAccount)?.studentInfo(); + loadUsingCache('attendance', attendance, attendanceLoaded, acc.attendance.bind(acc)); +}; - studentInfo.set(studentInfoRecord); - localStorage.setItem('studentInfo', JSON.stringify(studentInfoRecord)); +export const loadStudentInfo = async () => { + const acc = get(studentAccount); + if (!acc) return; - studentInfoLoaded.set(true); + loadUsingCache('studentInfo', studentInfo, studentInfoLoaded, acc.studentInfo.bind(acc)); }; export const loadDocuments = async () => { - documentsLoaded.set(false); + const acc = get(studentAccount); + if (!acc) return; - writeCacheToStore('documents', documents); - - const documentsRecord = await get(studentAccount)?.documents(); - - documents.set(documentsRecord); - localStorage.setItem('documents', JSON.stringify(documentsRecord)); - - documentsLoaded.set(true); + loadUsingCache('documents', documents, documentsLoaded, acc.documents.bind(acc)); }; export const loadMailData = async () => { - mailDataLoaded.set(false); - - writeCacheToStore('mailData', mailData); - - const mailDataRecord = await get(studentAccount)?.mailData(); - - mailData.set(mailDataRecord); - localStorage.setItem('mailData', JSON.stringify(mailDataRecord)); + const acc = get(studentAccount); + if (!acc) return; - mailDataLoaded.set(true); + loadUsingCache('mailData', mailData, mailDataLoaded, acc.mailData.bind(acc)); }; diff --git a/src/lib/synergy.ts b/src/lib/synergy.ts index 8c933fa..5163c58 100644 --- a/src/lib/synergy.ts +++ b/src/lib/synergy.ts @@ -4,7 +4,7 @@ import type { AuthToken } from '$lib/types/AuthToken'; import type { Documents } from '$lib/types/Documents'; import type { Gradebook } from '$lib/types/Gradebook'; import type { MailData } from '$lib/types/MailData'; -import type { ReportCard, ReportCardNotFound } from '$lib/types/ReportCard'; +import type { ReportCard } from '$lib/types/ReportCard'; import type { StudentInfo } from '$lib/types/StudentInfo'; import { XMLBuilder, XMLParser } from 'fast-xml-parser';