projects
/
arvados-workbench2.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
basic-view-recent-queries
[arvados-workbench2.git]
/
src
/
store
/
dialog
/
with-dialog.ts
diff --git
a/src/store/dialog/with-dialog.ts
b/src/store/dialog/with-dialog.ts
index 60cb5d1024f8eb7f994ce852c59641545ec99d05..41dcd559c6a47033d779a339bd82f5953d05835e 100644
(file)
--- a/
src/store/dialog/with-dialog.ts
+++ b/
src/store/dialog/with-dialog.ts
@@
-5,17
+5,31
@@
import * as React from 'react';
import { connect } from 'react-redux';
import { DialogState } from './dialog-reducer';
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> = {
+export type WithDialog
StateProps
<T> = {
open: boolean;
open: boolean;
- data
?
: T;
+ data: T;
};
};
+export type WithDialogDispatchProps = {
+ closeDialog: () => void;
+};
+
+export type WithDialogProps<T> = WithDialogStateProps<T> & WithDialogDispatchProps;
export const withDialog = (id: string) =>
export const withDialog = (id: string) =>
- <T>(component: React.ComponentType<WithDialog<T>>) =>
- connect(mapStateToProps(id))(component);
+ // TODO: How to make compiler happy with & P instead of & any?
+ <T, P>(component: React.ComponentType<WithDialogProps<T> & any>) =>
+ connect(mapStateToProps(id), mapDispatchToProps(id))(component);
-export const mapStateToProps = (id: string) => <T>(state: { dialog: DialogState }): WithDialog<T> => {
+export const mapStateToProps = (id: string) => <T>(state: { dialog: DialogState }): WithDialog
StateProps
<T> => {
const dialog = state.dialog[id];
const dialog = state.dialog[id];
- return dialog ? dialog : { open: false };
+ return dialog ? dialog : { open: false
, data: {}
};
};
};
+
+export const mapDispatchToProps = (id: string) => (dispatch: Dispatch): WithDialogDispatchProps => ({
+ closeDialog: () => {
+ dispatch(dialogActions.CLOSE_DIALOG({ id }));
+ }
+});