{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/community_timeline/components/column_settings.js","webpack:///./app/javascript/mastodon/features/community_timeline/containers/column_settings_container.js","webpack:///./app/javascript/mastodon/features/community_timeline/index.js"],"names":["ColumnSettings","injectIntl","React","PureComponent","render","settings","onChange","this","props","className","settingPath","label","id","defaultMessage","connect","state","columnId","uuid","columns","getIn","index","findIndex","c","get","dispatch","key","checked","changeColumnParams","changeSetting","messages","defineMessages","title","CommunityTimeline","onlyMedia","timelineState","hasUnread","handlePin","removeColumn","addColumn","other","handleMove","dir","moveColumn","handleHeaderClick","column","scrollTop","setRef","handleLoadMore","maxId","expandCommunityTimeline","componentDidMount","signedIn","context","identity","disconnect","connectCommunityStream","componentDidUpdate","prevProps","componentWillUnmount","intl","multiColumn","pinned","bindToDocument","ref","formatMessage","icon","active","onPin","onMove","onClick","values","domain","trackScroll","scrollKey","timelineId","onLoadMore","emptyMessage","Helmet","name","content","contextTypes","router","PropTypes","object","defaultProps"],"mappings":"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","file":"js/features/community_timeline-23b70d93e1f4bb1c9eb2.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from '../../notifications/components/setting_toggle';\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n  static propTypes = {\n    settings: ImmutablePropTypes.map.isRequired,\n    onChange: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n    columnId: PropTypes.string,\n  };\n\n  render () {\n    const { settings, onChange } = this.props;\n\n    return (\n      <div>\n        <div className='column-settings__row'>\n          <SettingToggle settings={settings} settingPath={['other', 'onlyMedia']} onChange={onChange} label={<FormattedMessage id='community.column_settings.media_only' defaultMessage='Media only' />} />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { changeColumnParams } from '../../../actions/columns';\n\nconst mapStateToProps = (state, { columnId }) => {\n  const uuid = columnId;\n  const columns = state.getIn(['settings', 'columns']);\n  const index = columns.findIndex(c => c.get('uuid') === uuid);\n\n  return {\n    settings: (uuid && index >= 0) ? columns.get(index).get('params') : state.getIn(['settings', 'community']),\n  };\n};\n\nconst mapDispatchToProps = (dispatch, { columnId }) => {\n  return {\n    onChange (key, checked) {\n      if (columnId) {\n        dispatch(changeColumnParams(columnId, key, checked));\n      } else {\n        dispatch(changeSetting(['community', ...key], checked));\n      }\n    },\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandCommunityTimeline } from '../../actions/timelines';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { connectCommunityStream } from '../../actions/streaming';\nimport { Helmet } from 'react-helmet';\nimport { domain } from 'mastodon/initial_state';\nimport DismissableBanner from 'mastodon/components/dismissable_banner';\n\nconst messages = defineMessages({\n  title: { id: 'column.community', defaultMessage: 'Local timeline' },\n});\n\nconst mapStateToProps = (state, { columnId }) => {\n  const uuid = columnId;\n  const columns = state.getIn(['settings', 'columns']);\n  const index = columns.findIndex(c => c.get('uuid') === uuid);\n  const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']);\n  const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]);\n\n  return {\n    hasUnread: !!timelineState && timelineState.get('unread') > 0,\n    onlyMedia,\n  };\n};\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass CommunityTimeline extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n    identity: PropTypes.object,\n  };\n\n  static defaultProps = {\n    onlyMedia: false,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    columnId: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    hasUnread: PropTypes.bool,\n    multiColumn: PropTypes.bool,\n    onlyMedia: PropTypes.bool,\n  };\n\n  handlePin = () => {\n    const { columnId, dispatch, onlyMedia } = this.props;\n\n    if (columnId) {\n      dispatch(removeColumn(columnId));\n    } else {\n      dispatch(addColumn('COMMUNITY', { other: { onlyMedia } }));\n    }\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, onlyMedia } = this.props;\n    const { signedIn } = this.context.identity;\n\n    dispatch(expandCommunityTimeline({ onlyMedia }));\n\n    if (signedIn) {\n      this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    const { signedIn } = this.context.identity;\n\n    if (prevProps.onlyMedia !== this.props.onlyMedia) {\n      const { dispatch, onlyMedia } = this.props;\n\n      if (this.disconnect) {\n        this.disconnect();\n      }\n\n      dispatch(expandCommunityTimeline({ onlyMedia }));\n\n      if (signedIn) {\n        this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));\n      }\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnect = null;\n    }\n  }\n\n  setRef = c => {\n    this.column = c;\n  };\n\n  handleLoadMore = maxId => {\n    const { dispatch, onlyMedia } = this.props;\n\n    dispatch(expandCommunityTimeline({ maxId, onlyMedia }));\n  };\n\n  render () {\n    const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;\n    const pinned = !!columnId;\n\n    return (\n      <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>\n        <ColumnHeader\n          icon='users'\n          active={hasUnread}\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          <ColumnSettingsContainer columnId={columnId} />\n        </ColumnHeader>\n\n        <DismissableBanner id='community_timeline'>\n          <FormattedMessage id='dismissable_banner.community_timeline' defaultMessage='These are the most recent public posts from people whose accounts are hosted by {domain}.' values={{ domain }} />\n        </DismissableBanner>\n\n        <StatusListContainer\n          trackScroll={!pinned}\n          scrollKey={`community_timeline-${columnId}`}\n          timelineId={`community${onlyMedia ? ':media' : ''}`}\n          onLoadMore={this.handleLoadMore}\n          emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}\n          bindToDocument={!multiColumn}\n        />\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":""}