{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/directory/index.jsx"],"names":["messages","defineMessages","title","id","defaultMessage","recentlyActive","newArrivals","local","federated","Directory","PureComponent","constructor","arguments","state","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","isLoading","accountIds","intl","multiColumn","domain","pinned","scrollableArea","_jsx","className","role","RadioButton","name","label","formatMessage","checked","onChange","LoadingIndicator","map","accountId","AccountCard","LoadMore","onClick","visible","_jsxs","Column","bindToDocument","ref","children","ColumnHeader","icon","onPin","onMove","ScrollContainer","scrollKey","Helmet","content","contextTypes","router","PropTypes","object","connect","getIn","ImmutableList","injectIntl"],"mappings":"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","file":"js/features/directory-df2f6a6660a3a4a9a6ef.chunk.js","sourcesContent":["import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Helmet } from 'react-helmet';\n\nimport { List as ImmutableList } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\n\nimport { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns';\nimport { fetchDirectory, expandDirectory } from 'mastodon/actions/directory';\nimport Column from 'mastodon/components/column';\nimport ColumnHeader from 'mastodon/components/column_header';\nimport { LoadMore } from 'mastodon/components/load_more';\nimport { LoadingIndicator } from 'mastodon/components/loading_indicator';\nimport { RadioButton } from 'mastodon/components/radio_button';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\n\nimport AccountCard from './components/account_card';\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\nclass Directory extends 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\nexport default connect(mapStateToProps)(injectIntl(Directory));\n"],"sourceRoot":""}