Add payload plugin for ClientSchedule
All checks were successful
/ build (push) Successful in 1m29s
/ deploy (push) Successful in 16s

Add plugin to serialise ClientSchedule objects as JSON when it's passed
from the server to client on SSR requests.
This commit is contained in:
Hornwitser 2025-06-13 22:01:42 +02:00
parent fb7a60db28
commit 73bb12c104
3 changed files with 28 additions and 2 deletions

View file

@ -1,6 +1,7 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
const enableDevtools = !process.env.DISABLE_DEV_TOOLS
export default defineNuxtConfig({
experimental: { renderJsonPayloads: true },
compatibilityDate: '2024-11-01',
devtools: { enabled: enableDevtools },
runtimeConfig: {

View file

@ -0,0 +1,25 @@
import { Info } from "~/shared/utils/luxon";
export default definePayloadPlugin(() => {
definePayloadReducer(
"ClientSchedule",
data => {
if (!(data instanceof ClientSchedule)) {
return;
}
const accountStore = useAccountStore();
return {
timezone: accountStore.activeTimezone,
locale: accountStore.activeLocale,
api: data.toApi(false)
};
},
);
definePayloadReviver(
"ClientSchedule",
({ timezone, locale, api }) => {
const zone = Info.normalizeZone(timezone);
return ClientSchedule.fromApi(api, { zone, locale })
},
);
});

View file

@ -1,5 +1,5 @@
// Wrapper around Luxon to make sure the throwOnInvalid option is set
import { Settings, DateTime, FixedOffsetZone, Zone } from "luxon";
import { DateTime, FixedOffsetZone, Info, Settings, Zone } from "luxon";
Settings.throwOnInvalid = true;
declare module 'luxon' {
@ -8,4 +8,4 @@ declare module 'luxon' {
}
}
export { DateTime, FixedOffsetZone, Zone }
export { DateTime, FixedOffsetZone, Info, Zone }