59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
'use client'
|
||
import { create } from 'zustand'
|
||
import { useQuery } from '@tanstack/react-query'
|
||
import type { FC, PropsWithChildren } from 'react'
|
||
import { useEffect } from 'react'
|
||
import type { SystemFeatures } from '@/types/feature'
|
||
import { defaultSystemFeatures } from '@/types/feature'
|
||
import { getSystemFeatures } from '@/service/common'
|
||
import Loading from '@/app/components/base/loading'
|
||
|
||
type GlobalPublicStore = {
|
||
isGlobalPending: boolean
|
||
setIsGlobalPending: (isPending: boolean) => void
|
||
systemFeatures: SystemFeatures
|
||
setSystemFeatures: (systemFeatures: SystemFeatures) => void
|
||
}
|
||
|
||
export const useGlobalPublicStore = create<GlobalPublicStore>(set => ({
|
||
isGlobalPending: true,
|
||
setIsGlobalPending: (isPending: boolean) => set(() => ({ isGlobalPending: isPending })),
|
||
systemFeatures: defaultSystemFeatures,
|
||
setSystemFeatures: (systemFeatures: SystemFeatures) => set(() => ({ systemFeatures })),
|
||
}))
|
||
|
||
/**
|
||
* GlobalPublicStoreProvider
|
||
* 初始化并提供系统特性(systemFeatures),统一设置品牌标题为“智能体平台”以用于页面标题拼接
|
||
*/
|
||
const GlobalPublicStoreProvider: FC<PropsWithChildren> = ({
|
||
children,
|
||
}) => {
|
||
const { isPending, data } = useQuery({
|
||
queryKey: ['systemFeatures'],
|
||
queryFn: getSystemFeatures,
|
||
})
|
||
const { setSystemFeatures, setIsGlobalPending: setIsPending } = useGlobalPublicStore()
|
||
useEffect(() => {
|
||
if (data)
|
||
setSystemFeatures({
|
||
...defaultSystemFeatures,
|
||
...data,
|
||
branding: {
|
||
...defaultSystemFeatures.branding,
|
||
...(data.branding || {}),
|
||
application_title: '智能体平台',
|
||
},
|
||
})
|
||
}, [data, setSystemFeatures])
|
||
|
||
useEffect(() => {
|
||
setIsPending(isPending)
|
||
}, [isPending, setIsPending])
|
||
|
||
if (isPending)
|
||
return <div className='flex h-screen w-screen items-center justify-center'><Loading /></div>
|
||
return <>{children}</>
|
||
}
|
||
export default GlobalPublicStoreProvider
|