The code powering m.abunchtell.com https://m.abunchtell.com
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

62 linhas
1.5 KiB

  1. import Status from './status';
  2. import ImmutablePropTypes from 'react-immutable-proptypes';
  3. import PureRenderMixin from 'react-addons-pure-render-mixin';
  4. import { ScrollContainer } from 'react-router-scroll';
  5. const StatusList = React.createClass({
  6. propTypes: {
  7. statuses: ImmutablePropTypes.list.isRequired,
  8. onReply: React.PropTypes.func,
  9. onReblog: React.PropTypes.func,
  10. onFavourite: React.PropTypes.func,
  11. onDelete: React.PropTypes.func,
  12. onScrollToBottom: React.PropTypes.func,
  13. trackScroll: React.PropTypes.bool,
  14. me: React.PropTypes.number
  15. },
  16. getDefaultProps () {
  17. return {
  18. trackScroll: true
  19. };
  20. },
  21. mixins: [PureRenderMixin],
  22. handleScroll (e) {
  23. const { scrollTop, scrollHeight, clientHeight } = e.target;
  24. if (scrollTop === scrollHeight - clientHeight) {
  25. this.props.onScrollToBottom();
  26. }
  27. },
  28. render () {
  29. const { statuses, onScrollToBottom, trackScroll, ...other } = this.props;
  30. const scrollableArea = (
  31. <div style={{ overflowY: 'scroll', flex: '1 1 auto', overflowX: 'hidden' }} className='scrollable' onScroll={this.handleScroll}>
  32. <div>
  33. {statuses.map((status) => {
  34. return <Status key={status.get('id')} {...other} status={status} />;
  35. })}
  36. </div>
  37. </div>
  38. );
  39. if (trackScroll) {
  40. return (
  41. <ScrollContainer scrollKey='status-list'>
  42. {scrollableArea}
  43. </ScrollContainer>
  44. );
  45. } else {
  46. return scrollableArea;
  47. }
  48. }
  49. });
  50. export default StatusList;