import { type OverlayItem } from './context'; export type OverlayReducerState = { overlayList: OverlayItem[]; current: OverlayItem | null; }; export type OverlayReducerAction = | { type: 'OPEN'; overlay: OverlayItem } | { type: 'CLOSE'; overlayId: string } | { type: 'CLOSE_ALL' }; export function overlayReducer( state: OverlayReducerState, action: OverlayReducerAction ): OverlayReducerState { switch (action.type) { case 'OPEN': { return { current: action.overlay, overlayList: [...state.overlayList, action.overlay], }; } case 'CLOSE': { const remainingOverlays = state.overlayList.filter((item) => item.id !== action.overlayId); if (state.overlayList.length === remainingOverlays.length) return state; return { current: remainingOverlays[remainingOverlays.length - 1] || state.current, overlayList: remainingOverlays, }; } case 'CLOSE_ALL': { if (state.overlayList.length === 0) return state; return { current: state.current, overlayList: [], }; } } }