diff --git a/src/App.tsx b/src/App.tsx index 8fd81c8..c4da0e3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,14 +1,71 @@ -import React from "react" +import { useQuery } from "@tanstack/react-query" +import React, { useCallback, useEffect } from "react" import { Route, BrowserRouter as Router, Routes } from "react-router-dom" import Footer from "./components/Footer" import Header from "./components/Header" +import { fetchSetting } from "./lib/nezha-api" import ErrorPage from "./pages/ErrorPage" import NotFound from "./pages/NotFound" import Server from "./pages/Server" import ServerDetail from "./pages/ServerDetail" const App: React.FC = () => { + const { data: settingData, error } = useQuery({ + queryKey: ["setting"], + queryFn: () => fetchSetting(), + refetchOnMount: true, + refetchOnWindowFocus: true, + }) + + 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(() => { + if (settingData?.data?.custom_code) { + InjectContext(settingData?.data?.custom_code) + } + }, [settingData?.data?.custom_code]) + + if (error) { + return + } + + if (!settingData) { + return null + } + return (
diff --git a/src/components/Header.tsx b/src/components/Header.tsx index dd171a5..bcffb19 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -4,7 +4,7 @@ import { Skeleton } from "@/components/ui/skeleton" import { fetchLoginUser, fetchSetting } from "@/lib/nezha-api" import { useQuery } from "@tanstack/react-query" import { DateTime } from "luxon" -import { useCallback, useEffect, useRef, useState } from "react" +import { useEffect, useRef, useState } from "react" import { useTranslation } from "react-i18next" import { useNavigate } from "react-router-dom" @@ -23,50 +23,10 @@ function Header() { 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 (
diff --git a/src/components/ServerCard.tsx b/src/components/ServerCard.tsx index 8d0c6e2..8afa7f2 100644 --- a/src/components/ServerCard.tsx +++ b/src/components/ServerCard.tsx @@ -28,7 +28,7 @@ export default function ServerCard({ now, serverInfo }: { now: number; serverInf const showFlag = true // @ts-expect-error ShowNetTransfer is a global variable - const disableShowNetTransfer = window.ShowNetTransfer === "false" + const showNetTransfer = window.ShowNetTransfer === "true" const parsedData = parsePublicNote(public_note) @@ -123,7 +123,7 @@ export default function ServerCard({ now, serverInfo }: { now: number; serverInf
- {!disableShowNetTransfer && ( + {showNetTransfer && (
navigate(`/server/${serverInfo.id}`, { replace: true })} > diff --git a/src/components/ServerOverview.tsx b/src/components/ServerOverview.tsx index d821628..3b285ea 100644 --- a/src/components/ServerOverview.tsx +++ b/src/components/ServerOverview.tsx @@ -29,6 +29,9 @@ export default function ServerOverview({ const { status, setStatus } = useStatus() const { filter, setFilter } = useFilter() + // @ts-expect-error DisableAnimatedMan is a global variable + const disableAnimatedMan = window.DisableAnimatedMan === "true" + return ( <>
@@ -142,11 +145,14 @@ export default function ServerOverview({

- {"animated-man"} + {!disableAnimatedMan && ( + {"animated-man"} + )}