38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import React, { createContext, useContext, useState, ReactNode } from 'react';
|
|
|
|
interface ResponseState {
|
|
message?: string;
|
|
type?: 'toast' | 'modal' | 'alert' | null;
|
|
status?: number;
|
|
error?: string;
|
|
detail?: string;
|
|
}
|
|
|
|
interface ResponseContextProps {
|
|
response: ResponseState;
|
|
setResponse: (value: ResponseState) => void;
|
|
clearResponse: () => void;
|
|
}
|
|
|
|
const ResponseContext = createContext<ResponseContextProps | undefined>(undefined);
|
|
|
|
export const ResponseProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
|
|
const [response, setResponseState] = useState<ResponseState>({ message: '', type: null, status: 0 });
|
|
|
|
const setResponse = (value: ResponseState) => setResponseState(value);
|
|
const clearResponse = () => setResponseState({ message: '', type: null, status: 0 });
|
|
|
|
return (
|
|
<ResponseContext.Provider value={{ response, setResponse, clearResponse }}>
|
|
{children}
|
|
</ResponseContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const useResponse = () => {
|
|
const context = useContext(ResponseContext);
|
|
if (!context) throw new Error('useResponse must be used within ResponseProvider');
|
|
return context;
|
|
};
|