|
import { createContext, useContext, useState, ReactNode } from "react"; |
|
import { LoadingScreen } from "@/components/ui/loading-screen"; |
|
|
|
interface LoadingContextType { |
|
isLoading: boolean; |
|
message: string; |
|
startLoading: (message?: string) => void; |
|
stopLoading: () => void; |
|
} |
|
|
|
const LoadingContext = createContext<LoadingContextType | undefined>(undefined); |
|
|
|
interface LoadingProviderProps { |
|
children: ReactNode; |
|
} |
|
|
|
export function LoadingProvider({ children }: LoadingProviderProps) { |
|
const [isLoading, setIsLoading] = useState(false); |
|
const [message, setMessage] = useState("Loading..."); |
|
|
|
const startLoading = (message = "Loading...") => { |
|
setMessage(message); |
|
setIsLoading(true); |
|
}; |
|
|
|
const stopLoading = () => { |
|
setIsLoading(false); |
|
}; |
|
|
|
return ( |
|
<LoadingContext.Provider value={{ isLoading, message, startLoading, stopLoading }}> |
|
{children} |
|
{isLoading && <LoadingScreen message={message} />} |
|
</LoadingContext.Provider> |
|
); |
|
} |
|
|
|
|
|
export function useLoading() { |
|
const context = useContext(LoadingContext); |
|
if (context === undefined) { |
|
throw new Error("useLoading must be used within a LoadingProvider"); |
|
} |
|
return context; |
|
} |