Detailed status view scrollable

master
Eugen Rochko 8 years ago
parent ab7291b8fe
commit 08896f7dcf
  1. 5
      app/assets/javascripts/components/components/media_gallery.jsx
  2. 2
      app/assets/javascripts/components/components/status.jsx
  3. 18
      app/assets/javascripts/components/features/status/index.jsx

@ -4,7 +4,8 @@ import PureRenderMixin from 'react-addons-pure-render-mixin';
const MediaGallery = React.createClass({ const MediaGallery = React.createClass({
propTypes: { propTypes: {
media: ImmutablePropTypes.list.isRequired media: ImmutablePropTypes.list.isRequired,
height: React.PropTypes.number.isRequired
}, },
mixins: [PureRenderMixin], mixins: [PureRenderMixin],
@ -63,7 +64,7 @@ const MediaGallery = React.createClass({
}); });
return ( return (
<div style={{ marginTop: '8px', overflow: 'hidden', width: '100%', height: '110px', boxSizing: 'border-box' }}> <div style={{ marginTop: '8px', overflow: 'hidden', width: '100%', height: `${this.props.height}px`, boxSizing: 'border-box' }}>
{children} {children}
</div> </div>
); );

@ -69,7 +69,7 @@ const Status = React.createClass({
if (status.getIn(['media_attachments', 0, 'type']) === 'video') { if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
media = <VideoPlayer media={status.getIn(['media_attachments', 0])} />; media = <VideoPlayer media={status.getIn(['media_attachments', 0])} />;
} else { } else {
media = <MediaGallery media={status.get('media_attachments')} />; media = <MediaGallery media={status.get('media_attachments')} height={110} />;
} }
} }

@ -25,8 +25,8 @@ function selectStatuses(state, ids) {
const mapStateToProps = (state, props) => ({ const mapStateToProps = (state, props) => ({
status: selectStatus(state, Number(props.params.statusId)), status: selectStatus(state, Number(props.params.statusId)),
ancestors: selectStatuses(state, state.getIn(['timelines', 'ancestors', Number(props.params.statusId)], Immutable.List())), ancestors: selectStatuses(state, state.getIn(['timelines', 'ancestors', Number(props.params.statusId)], Immutable.OrderedSet())),
descendants: selectStatuses(state, state.getIn(['timelines', 'descendants', Number(props.params.statusId)], Immutable.List())) descendants: selectStatuses(state, state.getIn(['timelines', 'descendants', Number(props.params.statusId)], Immutable.OrderedSet()))
}); });
const Status = React.createClass({ const Status = React.createClass({
@ -35,8 +35,8 @@ const Status = React.createClass({
params: React.PropTypes.object.isRequired, params: React.PropTypes.object.isRequired,
dispatch: React.PropTypes.func.isRequired, dispatch: React.PropTypes.func.isRequired,
status: ImmutablePropTypes.map, status: ImmutablePropTypes.map,
ancestors: ImmutablePropTypes.list.isRequired, ancestors: ImmutablePropTypes.orderedSet.isRequired,
descendants: ImmutablePropTypes.list.isRequired descendants: ImmutablePropTypes.orderedSet.isRequired
}, },
mixins: [PureRenderMixin], mixins: [PureRenderMixin],
@ -74,11 +74,15 @@ const Status = React.createClass({
return <div>Loading {this.props.params.statusId}...</div>; return <div>Loading {this.props.params.statusId}...</div>;
} }
const account = status.get('account');
return ( return (
<div> <div style={{ overflowY: 'scroll', flex: '1 1 auto' }} className='scrollable'>
{this.renderChildren(ancestors)} <div>{this.renderChildren(ancestors)}</div>
<EmbeddedStatus status={status} onReply={this.handleReplyClick} onFavourite={this.handleFavouriteClick} onReblog={this.handleReblogClick} /> <EmbeddedStatus status={status} onReply={this.handleReplyClick} onFavourite={this.handleFavouriteClick} onReblog={this.handleReblogClick} />
{this.renderChildren(descendants)}
<div>{this.renderChildren(descendants)}</div>
</div> </div>
); );
} }

Loading…
Cancel
Save