Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- 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.
64 lines
2.3 KiB
TypeScript
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 }
|