{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/account_timeline/index.js"],"names":["emptyList","ImmutableList","RemoteHint","url","resource","id","defaultMessage","AccountTimeline","connect","state","params","acct","tagged","withReplies","accountId","getIn","normalizeForLookup","isLoading","isAccount","statusIds","path","remote","remoteUrl","featuredStatusIds","hasMore","suspended","hidden","getAccountHidden","blockedBy","ImmutablePureComponent","handleLoadMore","maxId","this","props","dispatch","expandAccountTimeline","_load","fetchAccount","expandAccountFeaturedTimeline","fetchFeaturedTags","me","connectTimeline","componentDidMount","lookupAccount","componentDidUpdate","prevProps","disconnectTimeline","componentWillUnmount","render","multiColumn","isEmpty","emptyMessage","forceEmptyState","remoteMessage","prepend","hideTabs","alwaysPrepend","append","scrollKey","onLoadMore","bindToDocument","timelineId","propTypes","PropTypes","shape","string","isRequired","func","ImmutablePropTypes","list","bool"],"mappings":"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","file":"js/features/account_timeline-fd39265dfae77e75a6d9.chunk.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { lookupAccount, fetchAccount } from '../../actions/accounts';\nimport { expandAccountFeaturedTimeline, expandAccountTimeline } from '../../actions/timelines';\nimport StatusList from '../../components/status_list';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport HeaderContainer from './containers/header_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport { List as ImmutableList } from 'immutable';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\nimport TimelineHint from 'mastodon/components/timeline_hint';\nimport { me } from 'mastodon/initial_state';\nimport { connectTimeline, disconnectTimeline } from 'mastodon/actions/timelines';\nimport LimitedAccountHint from './components/limited_account_hint';\nimport { getAccountHidden } from 'mastodon/selectors';\nimport { fetchFeaturedTags } from '../../actions/featured_tags';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst emptyList = ImmutableList();\n\nconst mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = false }) => {\n const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n if (accountId === null) {\n return {\n isLoading: false,\n isAccount: false,\n statusIds: emptyList,\n };\n } else if (!accountId) {\n return {\n isLoading: true,\n statusIds: emptyList,\n };\n }\n\n const path = withReplies ? `${accountId}:with_replies` : `${accountId}${tagged ? `:${tagged}` : ''}`;\n\n return {\n accountId,\n remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])),\n remoteUrl: state.getIn(['accounts', accountId, 'url']),\n isAccount: !!state.getIn(['accounts', accountId]),\n statusIds: state.getIn(['timelines', `account:${path}`, 'items'], emptyList),\n featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, 'items'], emptyList),\n isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']),\n suspended: state.getIn(['accounts', accountId, 'suspended'], false),\n hidden: getAccountHidden(state, accountId),\n blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false),\n };\n};\n\nconst RemoteHint = ({ url }) => (\n <TimelineHint url={url} resource={<FormattedMessage id='timeline_hint.resources.statuses' defaultMessage='Older posts' />} />\n);\n\nRemoteHint.propTypes = {\n url: PropTypes.string.isRequired,\n};\n\nexport default @connect(mapStateToProps)\nclass AccountTimeline extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.shape({\n acct: PropTypes.string,\n id: PropTypes.string,\n tagged: PropTypes.string,\n }).isRequired,\n accountId: PropTypes.string,\n dispatch: PropTypes.func.isRequired,\n statusIds: ImmutablePropTypes.list,\n featuredStatusIds: ImmutablePropTypes.list,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n withReplies: PropTypes.bool,\n blockedBy: PropTypes.bool,\n isAccount: PropTypes.bool,\n suspended: PropTypes.bool,\n hidden: PropTypes.bool,\n remote: PropTypes.bool,\n remoteUrl: PropTypes.string,\n multiColumn: PropTypes.bool,\n };\n\n _load () {\n const { accountId, withReplies, params: { tagged }, dispatch } = this.props;\n\n dispatch(fetchAccount(accountId));\n\n if (!withReplies) {\n dispatch(expandAccountFeaturedTimeline(accountId, { tagged }));\n }\n\n dispatch(fetchFeaturedTags(accountId));\n dispatch(expandAccountTimeline(accountId, { withReplies, tagged }));\n\n if (accountId === me) {\n dispatch(connectTimeline(`account:${me}`));\n }\n }\n\n componentDidMount () {\n const { params: { acct }, accountId, dispatch } = this.props;\n\n if (accountId) {\n this._load();\n } else {\n dispatch(lookupAccount(acct));\n }\n }\n\n componentDidUpdate (prevProps) {\n const { params: { acct, tagged }, accountId, withReplies, dispatch } = this.props;\n\n if (prevProps.accountId !== accountId && accountId) {\n this._load();\n } else if (prevProps.params.acct !== acct) {\n dispatch(lookupAccount(acct));\n } else if (prevProps.params.tagged !== tagged) {\n if (!withReplies) {\n dispatch(expandAccountFeaturedTimeline(accountId, { tagged }));\n }\n dispatch(expandAccountTimeline(accountId, { withReplies, tagged }));\n }\n\n if (prevProps.accountId === me && accountId !== me) {\n dispatch(disconnectTimeline(`account:${me}`));\n }\n }\n\n componentWillUnmount () {\n const { dispatch, accountId } = this.props;\n\n if (accountId === me) {\n dispatch(disconnectTimeline(`account:${me}`));\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountTimeline(this.props.accountId, { maxId, withReplies: this.props.withReplies, tagged: this.props.params.tagged }));\n };\n\n render () {\n const { accountId, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, suspended, isAccount, hidden, multiColumn, remote, remoteUrl } = this.props;\n\n if (isLoading && statusIds.isEmpty()) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n } else if (!isLoading && !isAccount) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n let emptyMessage;\n\n const forceEmptyState = suspended || blockedBy || hidden;\n\n if (suspended) {\n emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />;\n } else if (hidden) {\n emptyMessage = <LimitedAccountHint accountId={accountId} />;\n } else if (blockedBy) {\n emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;\n } else if (remote && statusIds.isEmpty()) {\n emptyMessage = <RemoteHint url={remoteUrl} />;\n } else {\n emptyMessage = <FormattedMessage id='empty_column.account_timeline' defaultMessage='No posts found' />;\n }\n\n const remoteMessage = remote ? <RemoteHint url={remoteUrl} /> : null;\n\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n\n <StatusList\n prepend={<HeaderContainer accountId={this.props.accountId} hideTabs={forceEmptyState} tagged={this.props.params.tagged} />}\n alwaysPrepend\n append={remoteMessage}\n scrollKey='account_timeline'\n statusIds={forceEmptyState ? emptyList : statusIds}\n featuredStatusIds={featuredStatusIds}\n isLoading={isLoading}\n hasMore={!forceEmptyState && hasMore}\n onLoadMore={this.handleLoadMore}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n timelineId='account'\n />\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}