import { ModeToggle } from "@/components/ThemeSwitcher"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import { fetchLoginUser, fetchSetting } from "@/lib/nezha-api"; import { useQuery } from "@tanstack/react-query"; import { DateTime } from "luxon"; import { useEffect, useRef, useState, useCallback } from "react"; import { LanguageSwitcher } from "./LanguageSwitcher"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; function Header() { const { t } = useTranslation(); const navigate = useNavigate(); const { data: settingData, isLoading } = useQuery({ queryKey: ["setting"], queryFn: () => fetchSetting(), refetchOnMount: true, refetchOnWindowFocus: true, }); const siteName = settingData?.data?.site_name; const InjectContext = useCallback((content: string) => { const tempDiv = document.createElement("div"); tempDiv.innerHTML = content; const handlers: { [key: string]: (element: HTMLElement) => void } = { SCRIPT: (element) => { const script = document.createElement("script"); if ((element as HTMLScriptElement).src) { script.src = (element as HTMLScriptElement).src; } else { script.textContent = element.textContent; } document.body.appendChild(script); }, STYLE: (element) => { const style = document.createElement("style"); style.textContent = element.textContent; document.head.appendChild(style); }, DEFAULT: (element) => { document.body.appendChild(element); }, }; Array.from(tempDiv.childNodes).forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE) { const element = node as HTMLElement; (handlers[element.tagName] || handlers.DEFAULT)(element); } else if (node.nodeType === Node.TEXT_NODE) { document.body.appendChild( document.createTextNode(node.textContent || ""), ); } }); }, []); useEffect(() => { document.title = siteName || "NEZHA"; }, [siteName]); useEffect(() => { if (settingData?.data?.custom_code) { InjectContext(settingData?.data?.custom_code); } }, [settingData?.data?.custom_code]); return (
{t("nezha")}
👋 {t("overview")}
{t("whereTheTimeIs")}
{mouted ? ({timeString}
) : (