X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/4f46e3cc8ebe88041fdd044d81fb39a0f0396f3c..196524296dd9ddc5558c6296f0d7b69ae66f155d:/src/store/dialog/with-dialog.ts diff --git a/src/store/dialog/with-dialog.ts b/src/store/dialog/with-dialog.ts index 60cb5d10..41dcd559 100644 --- 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 { Dispatch } from 'redux'; +import { dialogActions } from './dialog-actions'; -export type WithDialog = { +export type WithDialogStateProps = { open: boolean; - data?: T; + data: T; }; +export type WithDialogDispatchProps = { + closeDialog: () => void; +}; + +export type WithDialogProps = WithDialogStateProps & WithDialogDispatchProps; export const withDialog = (id: string) => - (component: React.ComponentType>) => - connect(mapStateToProps(id))(component); + // TODO: How to make compiler happy with & P instead of & any? + (component: React.ComponentType & any>) => + connect(mapStateToProps(id), mapDispatchToProps(id))(component); -export const mapStateToProps = (id: string) => (state: { dialog: DialogState }): WithDialog => { +export const mapStateToProps = (id: string) => (state: { dialog: DialogState }): WithDialogStateProps => { 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 })); + } +});