import type { PayloadAction } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit"; interface IModalStoreItem { modalKey: string; onClose?: () => void; } export interface IModalStore { list: Array; } const modalSlice = createSlice({ name: "modal", initialState: { list: [], } as IModalStore, reducers: { openModal(state, action: PayloadAction) { state.list = state.list.filter( (item) => item.modalKey !== action.payload.modalKey, ); state.list.push(action.payload); }, closeModal(state, action: PayloadAction) { const selectedModal = state.list.find( (item) => item.modalKey === action.payload, ); if (selectedModal) { selectedModal?.onClose?.(); } state.list = state.list.filter( (item) => item.modalKey !== action.payload, ); }, closeLastModal(state) { const lastModal = state.list[state.list.length - 1]; if (lastModal) { lastModal?.onClose?.(); state.list.pop(); } else { // eslint-disable-next-line no-console console.warn("There is no modal to close"); } }, }, }); export const modalReducer = modalSlice.reducer; export const modalActions = modalSlice.actions;