import { useLayoutEffect, useMemo, useState, type ReactNode } from "react"; import { useLocation } from "react-router-dom"; import { PageHeaderContext } from "./page-header-context"; import { resolvePageTitle } from "@/lib/resolve-page-title"; import { cn } from "@/lib/utils"; import { useI18n } from "@/i18n"; export function PageHeaderProvider({ children, pluginTabs, }: { children: ReactNode; pluginTabs: { path: string; label: string }[]; }) { const { pathname } = useLocation(); const { t } = useI18n(); const [titleOverride, setTitleOverride] = useState(null); const [afterTitle, setAfterTitle] = useState(null); const [end, setEnd] = useState(null); // Clear any per-page title / toolbar slots when the path changes. Child routes // re-fill these on mount via usePageHeader. /* eslint-disable react-hooks/set-state-in-effect */ useLayoutEffect(() => { setTitleOverride(null); setAfterTitle(null); setEnd(null); }, [pathname]); /* eslint-enable react-hooks/set-state-in-effect */ const defaultTitle = useMemo( () => resolvePageTitle(pathname, t, pluginTabs), [pathname, t, pluginTabs], ); const displayTitle = titleOverride ?? defaultTitle; const value = useMemo( () => ({ setAfterTitle, setEnd, setTitle: setTitleOverride, }), [], ); return (

{displayTitle}

{afterTitle}
{end ? (
{end}
) : null}
{children}
); }