diff --git a/app/store/calendar.ts b/app/store/calendar.ts index 651ddb9e3..4d1c6b05e 100644 --- a/app/store/calendar.ts +++ b/app/store/calendar.ts @@ -1,5 +1,9 @@ import { format } from 'date-fns'; +import Dexie, { type Table } from 'dexie'; +import 'dexie-observable'; +import 'dexie-syncable'; import { defineStore } from 'pinia'; +import '~/utils/dexie.ts'; import type { Calendar, CalendarEntry } from '~~/gen/ts/resources/calendar/calendar'; import { RsvpResponses } from '~~/gen/ts/resources/calendar/calendar'; import { NotificationCategory, NotificationType } from '~~/gen/ts/resources/notifications/notifications'; @@ -39,8 +43,6 @@ export interface CalendarState { eventReminders: Map; } -// TODO use dexie to persist some state locally - export const useCalendarStore = defineStore('calendar', { state: () => ({ @@ -69,6 +71,9 @@ export const useCalendarStore = defineStore('calendar', { const now = new Date(); response.entries.forEach((entry) => { + calendarDB.entries.add(entry); + calendarDB.entries.delete(entry); + const startTime = toDate(entry.startTime); const time = startTime.getTime() - now.getTime(); @@ -357,6 +362,22 @@ export const useCalendarStore = defineStore('calendar', { }, }); +class CalendarDexie extends Dexie { + calendars!: Table; + entries!: Table; + + constructor() { + super('calendar'); + this.version(1).stores({ + calendars: 'id', + entries: 'id, calendarId', + rsvps: 'entry_id, user_id', + }); + } +} + +export const calendarDB = new CalendarDexie(); + if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(useCalendarStore, import.meta.hot)); } diff --git a/app/store/messenger.ts b/app/store/messenger.ts index 22e2b9b90..4a3a29c86 100644 --- a/app/store/messenger.ts +++ b/app/store/messenger.ts @@ -222,10 +222,6 @@ export const useMessengerStore = defineStore('messenger', { }, }); -if (import.meta.hot) { - import.meta.hot.accept(acceptHMRUpdate(useMessengerStore, import.meta.hot)); -} - class MessengerDexie extends Dexie { threads!: Table; messages!: Table; @@ -240,3 +236,7 @@ class MessengerDexie extends Dexie { } export const messengerDB = new MessengerDexie(); + +if (import.meta.hot) { + import.meta.hot.accept(acceptHMRUpdate(useMessengerStore, import.meta.hot)); +} diff --git a/package.json b/package.json index ed43244d9..96bcb7a0a 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,8 @@ "consola": "3.2.3", "date-fns": "4.1.0", "dexie": "4.0.8", + "dexie-observable": "4.0.1-beta.13", + "dexie-syncable": "4.0.1-beta.13", "emoji-blast": "0.10.1", "google-protobuf": "3.21.4", "grpc-web": "1.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5e8324ea..44771e17c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,12 @@ importers: dexie: specifier: 4.0.8 version: 4.0.8 + dexie-observable: + specifier: 4.0.1-beta.13 + version: 4.0.1-beta.13(dexie@4.0.8) + dexie-syncable: + specifier: 4.0.1-beta.13 + version: 4.0.1-beta.13(dexie-observable@4.0.1-beta.13(dexie@4.0.8))(dexie@4.0.8) emoji-blast: specifier: 0.10.1 version: 0.10.1 @@ -3218,6 +3224,17 @@ packages: devalue@5.1.1: resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + dexie-observable@4.0.1-beta.13: + resolution: {integrity: sha512-axmgPk7yjoPwj+0DdQIE5s1MBXi+6XcIFIjBKdQAmSGpsLQSth/LHvMOQ3q3Wj6pwIE5hqIxg2GL75sVqQbhEw==} + peerDependencies: + dexie: ^3.0.2 || ^4.0.1-alpha.5 + + dexie-syncable@4.0.1-beta.13: + resolution: {integrity: sha512-D9GPf8Uxs4cW0leAmL07oNQ5rq1wRlRpPp/XkMLHbJqOv2tq/s5FHPBagKv7F7vUKbSUf6zb4aFwV4+7vJQWZg==} + peerDependencies: + dexie: ^3.0.2 || ^4.0.1-alpha.5 + dexie-observable: ^4.0.1-beta.13 + dexie@4.0.8: resolution: {integrity: sha512-1G6cJevS17KMDK847V3OHvK2zei899GwpDiqfEXHP1ASvme6eWJmAp9AU4s1son2TeGkWmC0g3y8ezOBPnalgQ==} @@ -9925,6 +9942,15 @@ snapshots: devalue@5.1.1: {} + dexie-observable@4.0.1-beta.13(dexie@4.0.8): + dependencies: + dexie: 4.0.8 + + dexie-syncable@4.0.1-beta.13(dexie-observable@4.0.1-beta.13(dexie@4.0.8))(dexie@4.0.8): + dependencies: + dexie: 4.0.8 + dexie-observable: 4.0.1-beta.13(dexie@4.0.8) + dexie@4.0.8: {} dfa@1.2.0: {}