import { Fragment } from 'react';
import { PropTypes } from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import WhoToFollowPanel from '../components/panel';
import LinkFooter from '../components/link_footer';
import PromoPanel from '../components/panel';
import HeaderContainer from '../features/groups/timeline/containers/header_container';
import GroupPanel from '../features/groups/timeline/components/panel';
import { fetchGroup } from '../actions/groups';
import GroupSidebarPanel from '../features/groups/sidebar_panel';
import ColumnsArea from '../components/columns_area';

const mapStateToProps = (state, { params: { id } }) => ({
	group: state.getIn(['groups', id]),
	relationships: state.getIn(['group_relationships', id]),
});

export default @connect(mapStateToProps)
class GroupPage extends ImmutablePureComponent {

  static propTypes = {
    group: ImmutablePropTypes.map,
		relationships: ImmutablePropTypes.map,
		dispatch: PropTypes.func.isRequired,
	};

	componentWillMount() {
		const { params: { id }, dispatch } = this.props;

		dispatch(fetchGroup(id));
	}

	render () {
		const { children, group, relationships } = this.props;
		const top = group ? <HeaderContainer groupId={group.get('id')} /> : null;

		return (
			<ColumnsArea
				layout={{
					TOP: top,
					RIGHT: (
						<Fragment>
							<GroupSidebarPanel />
							<WhoToFollowPanel />
						</Fragment>
					),
					LEFT: (
						<Fragment>
							{group && relationships &&
								<GroupPanel
									group={group}
									relationships={relationships}
								/>}
							<PromoPanel />
							<LinkFooter />
						</Fragment>
					)
				}}
			>
				{children}
			</ColumnsArea>
		)
	}
}