| 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; |
| } |