import React, {createContext, useContext, useReducer} from 'react' import DefaultHeader from "../components/header/DefaultHeader"; interface StateInterface { renderHeader: () => React.ReactNode } interface LayoutContextInterface { states: StateInterface dispatch: React.Dispatch<{ type: ActionType payload?: any }> } const defaultState = { renderHeader: () => , } const LayoutContext = createContext({ states: defaultState, dispatch: () => { }, }) export enum ActionType { 'renderHeader' = 'renderHeader', 'resetHeader' = 'resetHeader', } const reducer: ( states: StateInterface, action: { type: ActionType; payload?: any }, ) => StateInterface = (states = defaultState, action) => { switch (action.type) { case ActionType.renderHeader: return { ...states, renderHeader: action.payload, } case ActionType.resetHeader: return { ...states, renderHeader: () => , } default: return states } } const LayoutProvider: React.FC = (props) => { const [states, dispatch] = useReducer(reducer, defaultState) return ( {props.children} ) } export const useLayout = () => useContext(LayoutContext) export default LayoutProvider