UNPKG

1.45 kBJavaScriptView Raw
1/* @flow */
2import { modalActions } from '../const';
3const { OPEN_MODAL, CANCEL_MODAL, SET_MODAL_ONCLOSE } = modalActions;
4
5const _cancelModal = { type: CANCEL_MODAL };
6export function cancelModal(): ThunkAction<> {
7 return function(dispatch, getState) {
8 const { modal } = getState();
9 if (modal) {
10 const { onClose, element } = modal;
11 onClose && element && onClose(element);
12 }
13 dispatch(_cancelModal);
14 };
15}
16
17export function setModalOnClose(onClose: HTMLElement => void): ThunkAction<> {
18 return function(dispatch) {
19 dispatch({
20 type: SET_MODAL_ONCLOSE,
21 onClose,
22 });
23 };
24}
25
26export type OpenConfirmationModalParam = $Diff<
27 ConfirmationModal,
28 {| onConfirm: () => void, onCancel: () => void |}
29>;
30export function openConfirmationModal(
31 modalProps: OpenConfirmationModalParam
32): ThunkAction<Promise<void>> {
33 return function(dispatch) {
34 return new Promise((resolve, reject) => {
35 const action: Action<ConfirmationModal> = {
36 ...modalProps,
37 type: OPEN_MODAL,
38 onConfirm: () => {
39 dispatch(cancelModal());
40 resolve();
41 },
42 onCancel: () => {
43 dispatch(cancelModal());
44 reject();
45 },
46 };
47 dispatch(action);
48 });
49 };
50}