'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 = { isPending: boolean setIsPending: (isPending: boolean) => void systemFeatures: SystemFeatures setSystemFeatures: (systemFeatures: SystemFeatures) => void } export const useGlobalPublicStore = create(set => ({ isPending: true, setIsPending: (isPending: boolean) => set(() => ({ isPending })), systemFeatures: defaultSystemFeatures, setSystemFeatures: (systemFeatures: SystemFeatures) => set(() => ({ systemFeatures })), })) const GlobalPublicStoreProvider: FC = ({ children, }) => { const { isPending, data } = useQuery({ queryKey: ['systemFeatures'], queryFn: getSystemFeatures, }) const { setSystemFeatures, setIsPending } = useGlobalPublicStore() useEffect(() => { if (data) setSystemFeatures({ ...defaultSystemFeatures, ...data }) }, [data, setSystemFeatures]) useEffect(() => { setIsPending(isPending) }, [isPending, setIsPending]) if (isPending) return
return <>{children} } export default GlobalPublicStoreProvider