UNPKG

@mantine/modals

Version:

Modals manager based on Mantine components

67 lines (66 loc) 1.83 kB
"use client"; //#region packages/@mantine/modals/src/reducer.ts function handleCloseModal(modal, canceled) { if (canceled && modal.type === "confirm") modal.props.onCancel?.(); modal.props.onClose?.(); } function modalsReducer(state, action) { switch (action.type) { case "OPEN": if (state.modals.some((modal) => modal.id === action.modal.id)) return state; return { current: action.modal, modals: [...state.modals, action.modal] }; case "CLOSE": { if (!state.modals.find((m) => m.id === action.modalId)) return state; const remainingModals = state.modals.filter((m) => m.id !== action.modalId); return { current: remainingModals[remainingModals.length - 1] || state.current, modals: remainingModals }; } case "CLOSE_ALL": if (!state.modals.length) return state; return { current: state.current, modals: [] }; case "UPDATE": { const { modalId, newProps } = action; const updatedModals = state.modals.map((modal) => { if (modal.id !== modalId) return modal; if (modal.type === "content" || modal.type === "confirm") return { ...modal, props: { ...modal.props, ...newProps } }; if (modal.type === "context") return { ...modal, props: { ...modal.props, ...newProps, innerProps: { ...modal.props.innerProps, ...newProps.innerProps } } }; return modal; }); const currentModal = state.current?.id === modalId ? updatedModals.find((modal) => modal.id === modalId) || state.current : state.current; return { ...state, modals: updatedModals, current: currentModal }; } default: return state; } } //#endregion exports.handleCloseModal = handleCloseModal; exports.modalsReducer = modalsReducer; //# sourceMappingURL=reducer.cjs.map