bigbuffet-rw/app/gabsocial/features/groups/index/index.js

92 lines
3 KiB
JavaScript
Raw Normal View History

2020-03-27 13:59:38 -07:00
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { fetchGroups } from '../../../actions/groups';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { Link } from 'react-router-dom';
import classNames from 'classnames';
import GroupCard from './card';
import GroupCreate from '../create';
const messages = defineMessages({
2020-04-14 11:44:40 -07:00
heading: { id: 'column.groups', defaultMessage: 'Groups' },
create: { id: 'groups.create', defaultMessage: 'Create group' },
tab_featured: { id: 'groups.tab_featured', defaultMessage: 'Featured' },
tab_member: { id: 'groups.tab_member', defaultMessage: 'Member' },
tab_admin: { id: 'groups.tab_admin', defaultMessage: 'Manage' },
2020-03-27 13:59:38 -07:00
});
const mapStateToProps = (state, { activeTab }) => ({
2020-04-14 11:44:40 -07:00
groupIds: state.getIn(['group_lists', activeTab]),
2020-03-27 13:59:38 -07:00
});
export default @connect(mapStateToProps)
@injectIntl
class Groups extends ImmutablePureComponent {
2020-04-14 11:44:40 -07:00
2020-04-14 13:45:38 -07:00
static propTypes = {
params: PropTypes.object.isRequired,
activeTab: PropTypes.string.isRequired,
showCreateForm: PropTypes.bool,
dispatch: PropTypes.func.isRequired,
groups: ImmutablePropTypes.map,
groupIds: ImmutablePropTypes.list,
intl: PropTypes.object.isRequired,
};
2020-03-27 13:59:38 -07:00
componentWillMount() {
2020-04-14 13:45:38 -07:00
this.props.dispatch(fetchGroups(this.props.activeTab));
}
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
componentDidUpdate(oldProps) {
if (this.props.activeTab && this.props.activeTab !== oldProps.activeTab) {
this.props.dispatch(fetchGroups(this.props.activeTab));
}
}
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
renderHeader() {
const { intl, activeTab } = this.props;
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
return (
<div className='group-column-header'>
<div className='group-column-header__cta'><Link to='/groups/create' className='button standard-small'>{intl.formatMessage(messages.create)}</Link></div>
<div className='group-column-header__title'>{intl.formatMessage(messages.heading)}</div>
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
<div className='column-header__wrapper'>
<h1 className='column-header'>
<Link to='/groups' className={classNames('btn grouped', { 'active': 'featured' === activeTab })}>
{intl.formatMessage(messages.tab_featured)}
</Link>
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
<Link to='/groups/browse/member' className={classNames('btn grouped', { 'active': 'member' === activeTab })}>
{intl.formatMessage(messages.tab_member)}
</Link>
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
<Link to='/groups/browse/admin' className={classNames('btn grouped', { 'active': 'admin' === activeTab })}>
{intl.formatMessage(messages.tab_admin)}
</Link>
</h1>
</div>
</div>
);
}
2020-03-27 13:59:38 -07:00
render() {
2020-04-14 13:45:38 -07:00
const { groupIds, showCreateForm } = this.props;
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
return (
<div>
{!showCreateForm && this.renderHeader()}
{showCreateForm && <GroupCreate /> }
2020-03-27 13:59:38 -07:00
2020-04-14 13:45:38 -07:00
<div className='group-card-list'>
{groupIds.map(id => <GroupCard key={id} id={id} />)}
</div>
</div>
);
}
2020-04-14 11:44:40 -07:00
2020-04-14 13:45:38 -07:00
}