{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/directory/index.js"],"names":["messages","defineMessages","title","recentlyActive","newArrivals","local","federated","Directory","connect","state","accountIds","getIn","ImmutableList","isLoading","domain","injectIntl","React","PureComponent","order","handlePin","columnId","dispatch","this","props","removeColumn","addColumn","getParams","params","handleMove","dir","moveColumn","handleHeaderClick","column","scrollTop","setRef","c","handleChangeOrder","e","changeColumnParams","target","value","setState","handleChangeLocal","handleLoadMore","expandDirectory","componentDidMount","fetchDirectory","componentDidUpdate","prevProps","prevState","paramsOld","paramsNew","render","intl","multiColumn","pinned","scrollableArea","className","role","name","label","formatMessage","checked","onChange","map","accountId","id","onClick","visible","bindToDocument","ref","icon","onPin","onMove","scrollKey","content","contextTypes","router","PropTypes","object"],"mappings":"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","file":"js/features/directory-b95814197d9fea2d656d.chunk.js","sourcesContent":["import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from 'mastodon/components/column';\nimport ColumnHeader from 'mastodon/components/column_header';\nimport { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns';\nimport { fetchDirectory, expandDirectory } from 'mastodon/actions/directory';\nimport { List as ImmutableList } from 'immutable';\nimport AccountCard from './components/account_card';\nimport RadioButton from 'mastodon/components/radio_button';\nimport LoadMore from 'mastodon/components/load_more';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\nimport LoadingIndicator from 'mastodon/components/loading_indicator';\nimport { Helmet } from 'react-helmet';\n\nconst messages = defineMessages({\n title: { id: 'column.directory', defaultMessage: 'Browse profiles' },\n recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' },\n newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' },\n local: { id: 'directory.local', defaultMessage: 'From {domain} only' },\n federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' },\n});\n\nconst mapStateToProps = state => ({\n accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()),\n isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true),\n domain: state.getIn(['meta', 'domain']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Directory extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n isLoading: PropTypes.bool,\n accountIds: ImmutablePropTypes.list.isRequired,\n dispatch: PropTypes.func.isRequired,\n columnId: PropTypes.string,\n intl: PropTypes.object.isRequired,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n params: PropTypes.shape({\n order: PropTypes.string,\n local: PropTypes.bool,\n }),\n };\n\n state = {\n order: null,\n local: null,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state)));\n }\n }\n\n getParams = (props, state) => ({\n order: state.order === null ? (props.params.order || 'active') : state.order,\n local: state.local === null ? (props.params.local || false) : state.local,\n });\n\n handleMove = dir => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n }\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n }\n\n componentDidMount () {\n const { dispatch } = this.props;\n dispatch(fetchDirectory(this.getParams(this.props, this.state)));\n }\n\n componentDidUpdate (prevProps, prevState) {\n const { dispatch } = this.props;\n const paramsOld = this.getParams(prevProps, prevState);\n const paramsNew = this.getParams(this.props, this.state);\n\n if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) {\n dispatch(fetchDirectory(paramsNew));\n }\n }\n\n setRef = c => {\n this.column = c;\n }\n\n handleChangeOrder = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['order'], e.target.value));\n } else {\n this.setState({ order: e.target.value });\n }\n }\n\n handleChangeLocal = e => {\n const { dispatch, columnId } = this.props;\n\n if (columnId) {\n dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1'));\n } else {\n this.setState({ local: e.target.value === '1' });\n }\n }\n\n handleLoadMore = () => {\n const { dispatch } = this.props;\n dispatch(expandDirectory(this.getParams(this.props, this.state)));\n }\n\n render () {\n const { isLoading, accountIds, intl, columnId, multiColumn, domain } = this.props;\n const { order, local } = this.getParams(this.props, this.state);\n const pinned = !!columnId;\n\n const scrollableArea = (\n <div className='scrollable'>\n <div className='filter-form'>\n <div className='filter-form__column' role='group'>\n <RadioButton name='order' value='active' label={intl.formatMessage(messages.recentlyActive)} checked={order === 'active'} onChange={this.handleChangeOrder} />\n <RadioButton name='order' value='new' label={intl.formatMessage(messages.newArrivals)} checked={order === 'new'} onChange={this.handleChangeOrder} />\n </div>\n\n <div className='filter-form__column' role='group'>\n <RadioButton name='local' value='1' label={intl.formatMessage(messages.local, { domain })} checked={local} onChange={this.handleChangeLocal} />\n <RadioButton name='local' value='0' label={intl.formatMessage(messages.federated)} checked={!local} onChange={this.handleChangeLocal} />\n </div>\n </div>\n\n <div className='directory__list'>\n {isLoading ? <LoadingIndicator /> : accountIds.map(accountId => (\n <AccountCard id={accountId} key={accountId} />\n ))}\n </div>\n\n <LoadMore onClick={this.handleLoadMore} visible={!isLoading} />\n </div>\n );\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='address-book-o'\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n />\n\n {multiColumn && !pinned ? <ScrollContainer scrollKey='directory'>{scrollableArea}</ScrollContainer> : scrollableArea}\n\n <Helmet>\n <title>{intl.formatMessage(messages.title)}</title>\n <meta name='robots' content='noindex' />\n </Helmet>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}