|
@ -1,6 +1,7 @@ |
|
|
import React from 'react'; |
|
|
import React from 'react'; |
|
|
import { connect } from 'react-redux'; |
|
|
import { connect } from 'react-redux'; |
|
|
import PropTypes from 'prop-types'; |
|
|
import PropTypes from 'prop-types'; |
|
|
|
|
|
import classNames from 'classnames'; |
|
|
import ImmutablePropTypes from 'react-immutable-proptypes'; |
|
|
import ImmutablePropTypes from 'react-immutable-proptypes'; |
|
|
import { fetchStatus } from '../../actions/statuses'; |
|
|
import { fetchStatus } from '../../actions/statuses'; |
|
|
import MissingIndicator from '../../components/missing_indicator'; |
|
|
import MissingIndicator from '../../components/missing_indicator'; |
|
@ -30,6 +31,7 @@ import { defineMessages, injectIntl } from 'react-intl'; |
|
|
import ImmutablePureComponent from 'react-immutable-pure-component'; |
|
|
import ImmutablePureComponent from 'react-immutable-pure-component'; |
|
|
import { HotKeys } from 'react-hotkeys'; |
|
|
import { HotKeys } from 'react-hotkeys'; |
|
|
import { boostModal, deleteModal } from '../../initial_state'; |
|
|
import { boostModal, deleteModal } from '../../initial_state'; |
|
|
|
|
|
import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../../features/ui/util/fullscreen'; |
|
|
|
|
|
|
|
|
const messages = defineMessages({ |
|
|
const messages = defineMessages({ |
|
|
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, |
|
|
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, |
|
@ -65,10 +67,18 @@ export default class Status extends ImmutablePureComponent { |
|
|
intl: PropTypes.object.isRequired, |
|
|
intl: PropTypes.object.isRequired, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
state = { |
|
|
|
|
|
fullscreen: false, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
componentWillMount () { |
|
|
componentWillMount () { |
|
|
this.props.dispatch(fetchStatus(this.props.params.statusId)); |
|
|
this.props.dispatch(fetchStatus(this.props.params.statusId)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
componentDidMount () { |
|
|
|
|
|
attachFullscreenListener(this.onFullScreenChange); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
componentWillReceiveProps (nextProps) { |
|
|
componentWillReceiveProps (nextProps) { |
|
|
if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) { |
|
|
if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) { |
|
|
this._scrolledIntoView = false; |
|
|
this._scrolledIntoView = false; |
|
@ -248,9 +258,18 @@ export default class Status extends ImmutablePureComponent { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
componentWillUnmount () { |
|
|
|
|
|
detachFullscreenListener(this.onFullScreenChange); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onFullScreenChange = () => { |
|
|
|
|
|
this.setState({ fullscreen: isFullscreen() }); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
render () { |
|
|
render () { |
|
|
let ancestors, descendants; |
|
|
let ancestors, descendants; |
|
|
const { status, ancestorsIds, descendantsIds } = this.props; |
|
|
const { status, ancestorsIds, descendantsIds } = this.props; |
|
|
|
|
|
const { fullscreen } = this.state; |
|
|
|
|
|
|
|
|
if (status === null) { |
|
|
if (status === null) { |
|
|
return ( |
|
|
return ( |
|
@ -284,7 +303,7 @@ export default class Status extends ImmutablePureComponent { |
|
|
<ColumnBackButton /> |
|
|
<ColumnBackButton /> |
|
|
|
|
|
|
|
|
<ScrollContainer scrollKey='thread'> |
|
|
<ScrollContainer scrollKey='thread'> |
|
|
<div className='scrollable detailed-status__wrapper' ref={this.setRef}> |
|
|
|
|
|
|
|
|
<div className={classNames('scrollable' class="p">, 'detailed-status__wrapper', { fullscreen })} ref={this.setRef}> |
|
|
{ancestors} |
|
|
{ancestors} |
|
|
|
|
|
|
|
|
<HotKeys handlers={handlers}> |
|
|
<HotKeys handlers={handlers}> |
|
|