mirror of
https://github.com/Buriburizaem0n/admin-frontend-domain.git
synced 2026-02-05 05:00:06 +00:00
* feat: add user_template setting * style: header * style: page padding * style: header * feat: header now time * style: login page * feat: nav indicator * style: button inset shadow * style: footer text size * feat: header show login_ip * fix: error toast * fix: frontend_templates setting * fix: lint * feat: pr auto format * chore: auto-fix linting and formatting issues --------- Co-authored-by: hamster1963 <hamster1963@users.noreply.github.com>
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { getServers } from "@/api/server"
|
|
import { getServerGroups } from "@/api/server-group"
|
|
import { ServerContextProps } from "@/types"
|
|
import { createContext, useContext, useEffect, useMemo } from "react"
|
|
import { useLocation } from "react-router-dom"
|
|
import { toast } from "sonner"
|
|
|
|
import { useServerStore } from "./useServerStore"
|
|
|
|
const ServerContext = createContext<ServerContextProps>({})
|
|
|
|
interface ServerProviderProps {
|
|
children: React.ReactNode
|
|
withServer?: boolean
|
|
withServerGroup?: boolean
|
|
}
|
|
|
|
export const ServerProvider: React.FC<ServerProviderProps> = ({
|
|
children,
|
|
withServer,
|
|
withServerGroup,
|
|
}) => {
|
|
const serverGroup = useServerStore((store) => store.serverGroup)
|
|
const setServerGroup = useServerStore((store) => store.setServerGroup)
|
|
|
|
const server = useServerStore((store) => store.server)
|
|
const setServer = useServerStore((store) => store.setServer)
|
|
|
|
const location = useLocation()
|
|
|
|
useEffect(() => {
|
|
if (withServerGroup)
|
|
(async () => {
|
|
try {
|
|
const sg = await getServerGroups()
|
|
setServerGroup(sg)
|
|
} catch (error: any) {
|
|
toast("ServerProvider Error", {
|
|
description: error.message,
|
|
})
|
|
setServerGroup(undefined)
|
|
}
|
|
})()
|
|
if (withServer)
|
|
(async () => {
|
|
try {
|
|
const s = await getServers()
|
|
const serverData = s.map(({ id, name }) => ({ id, name }))
|
|
setServer(serverData)
|
|
} catch (error: any) {
|
|
toast("ServerProvider Error", {
|
|
description: error.message,
|
|
})
|
|
setServer(undefined)
|
|
}
|
|
})()
|
|
}, [location.pathname])
|
|
|
|
const value: ServerContextProps = useMemo(
|
|
() => ({
|
|
servers: server,
|
|
serverGroups: serverGroup,
|
|
}),
|
|
[server, serverGroup],
|
|
)
|
|
return <ServerContext.Provider value={value}>{children}</ServerContext.Provider>
|
|
}
|
|
|
|
export const useServer = () => {
|
|
return useContext(ServerContext)
|
|
}
|