{"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":""}