import type { Dispatch, PropsWithChildren, Reducer } from "react"; import { createContext, useContext, useReducer } from "react"; import { RoomContextReducer } from "./reducer/room-reducer"; import type { RoomContextActionType } from "./types/room-action"; import type { RoomContextReducerType } from "./types/room-reduce"; interface RoomDataContextType extends RoomContextReducerType { dispatch: Dispatch; } const RoomContext = createContext( {} as RoomDataContextType, ); export function RoomsCtxProvider( props: PropsWithChildren, ) { const [state, dispatch] = useReducer>( RoomContextReducer, { selectedRooms: props.selectedRooms, activeTab: props.activeTab, roomCount: props.roomCount, searchId: props.searchId, roomGroupResult: props.roomGroupResult, passengerKeys: props.passengerKeys, }, ); return ( // eslint-disable-next-line react/jsx-no-constructed-context-values {props.children} ); } export function useRoomCtx(): [ RoomContextReducerType, Dispatch, ] { const { dispatch, ...state } = useContext(RoomContext); return [state, dispatch]; }