{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/following/index.jsx"],"names":["RemoteHint","_ref2","accountId","url","acct","useAppSelector","state","_state$accounts$get","accounts","get","domain","split","undefined","_jsx","TimelineHint","message","FormattedMessage","id","defaultMessage","label","values","Following","ImmutablePureComponent","constructor","arguments","_defineProperty","_debounce","this","props","dispatch","expandFollowing","leading","_load","isAccount","fetchAccount","fetchFollowing","componentDidMount","params","lookupAccount","componentDidUpdate","prevProps","render","accountIds","hasMore","blockedBy","multiColumn","isLoading","suspended","hidden","remote","remoteUrl","hideCollections","BundleColumnError","errorType","Column","LoadingIndicator","emptyMessage","forceEmptyState","LimitedAccountHint","isEmpty","remoteMessage","ColumnBackButton","ScrollableList","scrollKey","onLoadMore","handleLoadMore","prepend","HeaderContainer","hideTabs","alwaysPrepend","append","bindToDocument","map","AccountContainer","withNote","PropTypes","shape","string","isRequired","func","ImmutablePropTypes","list","bool","connect","mapStateToProps","_ref","getIn","normalizeForLookup","getAccountHidden"],"mappings":"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","file":"js/features/following-e76131d29c4e47995ced.chunk.js","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\n\nimport { debounce } from 'lodash';\n\nimport { TimelineHint } from 'mastodon/components/timeline_hint';\nimport BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\nimport { getAccountHidden } from 'mastodon/selectors';\nimport { useAppSelector } from 'mastodon/store';\n\nimport {\n lookupAccount,\n fetchAccount,\n fetchFollowing,\n expandFollowing,\n} from '../../actions/accounts';\nimport { ColumnBackButton } from '../../components/column_back_button';\nimport { LoadingIndicator } from '../../components/loading_indicator';\nimport ScrollableList from '../../components/scrollable_list';\nimport AccountContainer from '../../containers/account_container';\nimport { LimitedAccountHint } from '../account_timeline/components/limited_account_hint';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport Column from '../ui/components/column';\n\nconst mapStateToProps = (state, { params: { acct, id } }) => {\n const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n if (!accountId) {\n return {\n isLoading: true,\n };\n }\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 accountIds: state.getIn(['user_lists', 'following', accountId, 'items']),\n hasMore: !!state.getIn(['user_lists', 'following', accountId, 'next']),\n isLoading: state.getIn(['user_lists', 'following', accountId, 'isLoading'], true),\n suspended: state.getIn(['accounts', accountId, 'suspended'], false),\n hideCollections: state.getIn(['accounts', accountId, 'hide_collections'], false),\n hidden: getAccountHidden(state, accountId),\n blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false),\n };\n};\n\nconst RemoteHint = ({ accountId, url }) => {\n const acct = useAppSelector(state => state.accounts.get(accountId)?.acct);\n const domain = acct ? acct.split('@')[1] : undefined;\n\n return (\n }\n label={{domain} }} />}\n />\n );\n};\n\nRemoteHint.propTypes = {\n url: PropTypes.string.isRequired,\n accountId: PropTypes.string.isRequired,\n};\n\nclass Following extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.shape({\n acct: PropTypes.string,\n id: PropTypes.string,\n }).isRequired,\n accountId: PropTypes.string,\n dispatch: PropTypes.func.isRequired,\n accountIds: ImmutablePropTypes.list,\n hasMore: PropTypes.bool,\n isLoading: 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, isAccount, dispatch } = this.props;\n\n if (!isAccount) dispatch(fetchAccount(accountId));\n dispatch(fetchFollowing(accountId));\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 }, accountId, 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 }\n }\n\n handleLoadMore = debounce(() => {\n this.props.dispatch(expandFollowing(this.props.accountId));\n }, 300, { leading: true });\n\n render () {\n const { accountId, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, suspended, hidden, remote, remoteUrl, hideCollections } = this.props;\n\n if (!isAccount) {\n return (\n \n );\n }\n\n if (!accountIds) {\n return (\n \n \n \n );\n }\n\n let emptyMessage;\n\n const forceEmptyState = blockedBy || suspended || hidden;\n\n if (suspended) {\n emptyMessage = ;\n } else if (hidden) {\n emptyMessage = ;\n } else if (blockedBy) {\n emptyMessage = ;\n } else if (hideCollections && accountIds.isEmpty()) {\n emptyMessage = ;\n } else if (remote && accountIds.isEmpty()) {\n emptyMessage = ;\n } else {\n emptyMessage = ;\n }\n\n const remoteMessage = remote ? : null;\n\n return (\n \n \n\n }\n alwaysPrepend\n append={remoteMessage}\n emptyMessage={emptyMessage}\n bindToDocument={!multiColumn}\n >\n {forceEmptyState ? [] : accountIds.map(id =>\n ,\n )}\n \n \n );\n }\n\n}\n\nexport default connect(mapStateToProps)(Following);\n"],"sourceRoot":""}