import { useMatches } from "react-router"; import { AppConfiguration } from "../db/appConfiguration.db.server"; import { UserSession } from "../session.server"; import { MetaTagsDto } from "~/application/dtos/seo/MetaTagsDto"; import { ImpersonatingSessionDto } from "~/application/dtos/session/ImpersonatingSessionDto"; import { AnalyticsInfoDto } from "~/application/dtos/marketing/AnalyticsInfoDto"; import { UserWithoutPassword } from "../db/users.db.server"; import { TenantSimple } from "../db/tenants.db.server"; import type { PublicDomainRoutingConfig } from "~/utils/app/CrossHostUrls"; export type AppRootData = { metatags: MetaTagsDto; user: UserWithoutPassword | null; currentTenant: TenantSimple | null; theme: string; locale: string; serverUrl: string; publicBaseUrl: string; apiBaseUrl: string; routing: PublicDomainRoutingConfig; domainName: string; userSession: UserSession; authenticated: boolean; debug: boolean; isStripeTest: boolean; chatWebsiteId?: string; appConfiguration: AppConfiguration; csrf?: string; analytics?: AnalyticsInfoDto; analyticsToken?: string; featureFlags: string[]; impersonatingSession: ImpersonatingSessionDto | null; }; export function useRootData(): AppRootData { return (useMatches().find((f) => f.pathname === "/" || f.pathname === "")?.data ?? {}) as AppRootData; }