1 |
|
2 | import { modalActions } from '../const';
|
3 | const { OPEN_MODAL, CANCEL_MODAL, SET_MODAL_ONCLOSE } = modalActions;
|
4 |
|
5 | const _cancelModal = { type: CANCEL_MODAL };
|
6 | export 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 |
|
17 | export function setModalOnClose(onClose: HTMLElement => void): ThunkAction<> {
|
18 | return function(dispatch) {
|
19 | dispatch({
|
20 | type: SET_MODAL_ONCLOSE,
|
21 | onClose,
|
22 | });
|
23 | };
|
24 | }
|
25 |
|
26 | export type OpenConfirmationModalParam = $Diff<
|
27 | ConfirmationModal,
|
28 | {| onConfirm: () => void, onCancel: () => void |}
|
29 | >;
|
30 | export 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 | }
|