Pass closeDialog action into component wrapped withDialog
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 2 Aug 2018 13:39:21 +0000 (15:39 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 2 Aug 2018 13:39:21 +0000 (15:39 +0200)
Feature #13855

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/store/dialog/with-dialog.ts

index 60cb5d1024f8eb7f994ce852c59641545ec99d05..42ae73e4a46ddabfe3959bd6b7db99ce725969de 100644 (file)
@@ -5,17 +5,29 @@
 import * as React from 'react';
 import { connect } from 'react-redux';
 import { DialogState } from './dialog-reducer';
+import { Dispatch } from 'redux';
+import { dialogActions } from './dialog-actions';
 
 export type WithDialog<T> = {
     open: boolean;
     data?: T;
 };
 
+export type WithDialogActions = {
+    closeDialog: () => void;
+};
+
 export const withDialog = (id: string) =>
-    <T>(component: React.ComponentType<WithDialog<T>>) =>
-        connect(mapStateToProps(id))(component);
+    <T>(component: React.ComponentType<WithDialog<T> & WithDialogActions>) =>
+        connect(mapStateToProps(id), mapDispatchToProps(id))(component);
 
 export const mapStateToProps = (id: string) => <T>(state: { dialog: DialogState }): WithDialog<T> => {
     const dialog = state.dialog[id];
     return dialog ? dialog : { open: false };
 };
+
+export const mapDispatchToProps = (id: string) => (dispatch: Dispatch): WithDialogActions => ({
+    closeDialog: () => {
+        dispatch(dialogActions.CLOSE_DIALOG({ id }));
+    }
+});
\ No newline at end of file