import React from 'react'; import { connect } from 'plugin-api/beta/client/hocs'; import { bindActionCreators } from 'redux'; import { sortOrderSelector, sortBySelector, } from 'plugin-api/beta/client/selectors/stream'; import { setSort } from 'plugin-api/beta/client/actions/stream'; import hoistStatics from 'recompose/hoistStatics'; import { closeMenu } from 'plugins/talk-plugin-viewing-options/client/actions'; const mapStateToProps = state => ({ sortOrder: sortOrderSelector(state), sortBy: sortBySelector(state), }); const mapDispatchToProps = dispatch => bindActionCreators( { setSort, closeMenu, }, dispatch ); /** * A HOC providing props to implement a sort option. * Provides the props `active`, `setSort`, `label`. * @param {Object} sort * @param {Object} sort.sortBy * @param {string} sort.sortOrder * @return {Object} HOC */ export default ({ sortBy = 'created_at', sortOrder = 'DESC', label }) => hoistStatics(WrappedComponent => { class WithSortOption extends React.Component { setSort = () => { this.props.closeMenu(); this.props.setSort({ sortBy, sortOrder }); }; render() { const active = this.props.sortOrder === sortOrder && this.props.sortBy === sortBy; const resolvedLabel = typeof label === 'function' ? label() : label; return ( ); } } return connect( mapStateToProps, mapDispatchToProps )(WithSortOption); });