Skip to content
Extraits de code Groupes Projets
columns_area.js 2,26 ko
Newer Older
  • Learn to ignore specific revisions
  • import React from 'react';
    
    import PropTypes from 'prop-types';
    
    import ImmutablePropTypes from 'react-immutable-proptypes';
    import ImmutablePureComponent from 'react-immutable-pure-component';
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
    import ReactSwipeable from 'react-swipeable';
    
    import HomeTimeline from '../../home_timeline';
    import Notifications from '../../notifications';
    import PublicTimeline from '../../public_timeline';
    import CommunityTimeline from '../../community_timeline';
    import HashtagTimeline from '../../hashtag_timeline';
    import Compose from '../../compose';
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
    import { getPreviousLink, getNextLink } from './tabs_bar';
    
    const componentMap = {
      'COMPOSE': Compose,
      'HOME': HomeTimeline,
      'NOTIFICATIONS': Notifications,
      'PUBLIC': PublicTimeline,
      'COMMUNITY': CommunityTimeline,
      'HASHTAG': HashtagTimeline,
    };
    
    class ColumnsArea extends ImmutablePureComponent {
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
      static contextTypes = {
        router: PropTypes.object.isRequired,
      };
    
    
        columns: ImmutablePropTypes.list.isRequired,
        singleColumn: PropTypes.bool,
    
        children: PropTypes.node,
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
      handleRightSwipe = () => {
        const previousLink = getPreviousLink(this.context.router.history.location.pathname);
    
        if (previousLink) {
          this.context.router.history.push(previousLink);
        }
      }
    
      handleLeftSwipe = () => {
        const previousLink = getNextLink(this.context.router.history.location.pathname);
    
        if (previousLink) {
          this.context.router.history.push(previousLink);
        }
      };
    
    
        const { columns, children, singleColumn } = this.props;
    
        if (singleColumn) {
          return (
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
            <ReactSwipeable onSwipedLeft={this.handleLeftSwipe} onSwipedRight={this.handleRightSwipe} className='columns-area'>
    
    Sorin Davidoi's avatar
    Sorin Davidoi a validé
            </ReactSwipeable>
    
          <div className='columns-area'>
    
            {columns.map(column => {
              const SpecificComponent = componentMap[column.get('id')];
              const params = column.get('params', null) === null ? null : column.get('params').toJS();
              return <SpecificComponent key={column.get('uuid')} columnId={column.get('uuid')} params={params} multiColumn />;
            })}
    
            {React.Children.map(children, child => React.cloneElement(child, { multiColumn: true }))}
    
    export default ColumnsArea;