ultisuite-client/lib/demo/demo-mail-bootstrap.tsx
R3D347HR4Y ad1370ea7e
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
feat: enhance configuration and add new demo layouts
- Introduced turbopack alias for canvas in next.config.mjs.
- Updated package.json scripts for development and branding tasks.
- Added new dependencies for Tiptap extensions.
- Implemented new demo layouts for agenda, contacts, drive, and mail applications.
- Enhanced globals.css for improved theming and splash screen animations.
- Added OAuth callback handling for drive mounts.
- Updated layout components to integrate new demo shells and improve structure.
2026-06-12 19:10:24 +02:00

64 lines
2.3 KiB
TypeScript

"use client"
import { useLayoutEffect } from "react"
import { useQueryClient } from "@tanstack/react-query"
import {
DEMO_MAIL_ACCOUNT,
DEMO_MAIL_ACCOUNT_ID,
} from "@/lib/demo/demo-mail-api-data"
import { DEMO_EMAILS, DEMO_USER } from "@/components/demo/demo-mail-data"
import { useDemoMailStore } from "@/lib/demo/demo-mail-store"
import { useAccountStore } from "@/lib/stores/account-store"
import { useComposeIdentitiesStore } from "@/lib/stores/compose-identities-store"
import { useNavStore } from "@/lib/stores/nav-store"
import { useMailStore } from "@/lib/stores/mail-store"
import {
DEMO_MAIL_FOLDER_TREE,
DEMO_MAIL_LABEL_ROWS,
} from "@/lib/demo/demo-mail-nav-data"
import { useSessionGuardStore } from "@/lib/auth/session-guard-store"
import { DEMO_MAIL_MESSAGES_QUERY_ROOT } from "@/lib/api/hooks/use-mail-queries"
const DEMO_EMAIL_IDS = new Set(DEMO_EMAILS.map((email) => email.id))
/** Hydrate local stores for the interactive mail demo (no backend). */
export function DemoMailBootstrap() {
const queryClient = useQueryClient()
useLayoutEffect(() => {
useSessionGuardStore.getState().clear()
useDemoMailStore.getState().reset()
const seenEmailIds = useMailStore.getState().seenEmailIds
if (seenEmailIds.some((id) => DEMO_EMAIL_IDS.has(id))) {
useMailStore.setState({
seenEmailIds: seenEmailIds.filter((id) => !DEMO_EMAIL_IDS.has(id)),
})
}
queryClient.removeQueries({ queryKey: DEMO_MAIL_MESSAGES_QUERY_ROOT })
queryClient.removeQueries({ queryKey: ['demo', 'mail-search'] })
queryClient.removeQueries({ queryKey: ['demo', 'message'] })
queryClient.removeQueries({ queryKey: ['demo', 'thread'] })
useAccountStore.getState().setActiveAccountId(DEMO_MAIL_ACCOUNT_ID)
useComposeIdentitiesStore.getState().hydrateFromApi([
{
id: "demo-compose-identity",
accountId: DEMO_MAIL_ACCOUNT_ID,
name: DEMO_USER.name,
email: DEMO_USER.email,
defaultSignatureId: null,
signatureHtml: null,
isDefault: true,
},
])
useNavStore.getState().hydrateFolderTreeFromApi(DEMO_MAIL_FOLDER_TREE)
useNavStore.getState().hydrateLabelRowsFromApi(DEMO_MAIL_LABEL_ROWS)
}, [queryClient])
return null
}
export { DEMO_MAIL_ACCOUNT, DEMO_MAIL_ACCOUNT_ID }