Home Reference Source

src/components/widgets/Table/cells/EditableCell/withActionsEditableCell.js

import React from 'react';
import { get } from 'lodash';
import { connect } from 'react-redux';
import { setModel } from '../../../../../actions/models';
import { setTableSelectedId } from '../../../../../actions/widgets';
import { PREFIXES } from '../../../../../constants/models';
import { createStructuredSelector } from 'reselect';
import { makeGetResolveModelSelector } from '../../../../../selectors/models';

export default EditableCell => {
  class EditableCellWithActions extends React.Component {
    render() {
      return <EditableCell {...this.props} />;
    }
  }

  const mapStateToProps = createStructuredSelector({
    prevResolveModel: (state, props) =>
      makeGetResolveModelSelector(props.widgetId)(state) || {},
  });

  const mapDispatchToProps = (dispatch, ownProps) => {
    return {
      onResolve: () =>
        dispatch(setModel(PREFIXES.resolve, ownProps.widgetId, ownProps.model)),
      onSetSelectedId: () =>
        dispatch(
          setTableSelectedId(ownProps.widgetId, get(ownProps, 'model.id', null))
        ),
    };
  };

  return connect(
    mapStateToProps,
    mapDispatchToProps
  )(EditableCellWithActions);
};