Home Reference Source

src/components/core/withActions.js

import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { compose, withProps, pure } from 'recompose';

import { getModelSelector } from '../../selectors/models';
import {
  makePageActionsByIdSelector,
  makePageMetadataByIdSelector,
  makePageToolbarByIdSelector,
} from '../../selectors/pages';

const withActions = Component => {
  class ComponentWithActions extends React.Component {
    render() {
      return <Component {...this.props} />;
    }
  }

  const mapStateToProps = (state, props) => {
    return {
      containerKey: props.pageId,
      actions: makePageActionsByIdSelector(props.pageId)(state),
      toolbar: makePageToolbarByIdSelector(props.pageId)(state),
    };
  };

  return compose(
    withProps(({ pageId, pageUrl }) => {
      return { pageId: !pageId && pageUrl ? pageUrl.substr(1) : pageId };
    }),
    pure,
    connect(mapStateToProps)
  )(ComponentWithActions);
};

export default withActions;