1 line
48 KiB
Plaintext
1 line
48 KiB
Plaintext
{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/follow.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/notification.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/notification_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/notifications/index.js"],"names":["NotificationFollow","props","notification","onMoveUp","get","onMoveDown","handleOpenProfile","context","router","history","push","getIn","e","preventDefault","onMention","getHandlers","moveUp","this","handleMoveUp","moveDown","handleMoveDown","open","handleOpen","openProfile","mention","handleMention","reply","render","account","hidden","displayName","link","className","href","title","to","dangerouslySetInnerHTML","__html","handlers","tabIndex","fixedWidth","id","defaultMessage","values","name","withNote","ImmutablePureComponent","PropTypes","bool","string","isRequired","ImmutablePropTypes","map","Notification","getScrollPosition","updateScrollBottom","containerId","contextType","cachedMediaWidth","cacheMediaWidth","onUnmount","withDismiss","prepend","muted","func","number","connect","getNotification","makeGetNotification","state","accountId","notifCleaning","dispatch","mentionCompose","ClearColumnButton","onClick","React","Component","ColumnSettings","path","checked","onChange","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","pushMeta","role","aria-labelledby","prefix","settingPath","label","meta","onPushChange","PureComponent","messages","defineMessages","clearMessage","clearConfirm","injectIntl","intl","changePushNotifications","slice","changeSetting","setFilter","openModal","message","formatMessage","confirm","onConfirm","clearNotifications","tooltips","mentions","favourites","boosts","polls","follows","FilterBar","notificationType","selectFilter","selectedFilter","advancedMode","newActiveFilter","getNotifications","createSelector","ImmutableList","filter","item","keys","showFilterBar","allowedType","excludedTypes","notifications","filterNot","includes","Notifications","localSettings","isLoading","isUnread","size","hasMore","numPending","notifCleaningActive","onEnterCleaningMode","yes","enterNotificationClearingMode","onMount","mountNotifications","unmountNotifications","maxId","expandNotifications","last","leading","loadPending","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","index","align_top","container","node","element","querySelector","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","componentDidMount","componentWillUnmount","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","disabled","handleLoadGap","scrollContainer","scrollKey","trackScroll","showLoading","onLoadMore","handleLoadOlder","onLoadPending","handleLoadPending","onScrollToTop","handleScrollToTop","onScroll","handleScroll","ref","setColumnRef","extraClasses","icon","active","onPin","handlePin","onMove","handleMove","handleHeaderClick"],"mappings":"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","file":"flavours/glitch/async/notifications.js","sourcesContent":["// Package imports.\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\n\n// Our imports.\nimport Permalink from 'flavours/glitch/components/permalink';\nimport AccountContainer from 'flavours/glitch/containers/account_container';\nimport NotificationOverlayContainer from '../containers/overlay_container';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class NotificationFollow extends ImmutablePureComponent {\n\n static propTypes = {\n hidden: PropTypes.bool,\n id: PropTypes.string.isRequired,\n account: ImmutablePropTypes.map.isRequired,\n notification: ImmutablePropTypes.map.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n this.handleOpenProfile();\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n render () {\n const { account, notification, hidden } = this.props;\n\n // Links to the display name.\n const displayName = account.get('display_name_html') || account.get('username');\n const link = (\n <bdi><Permalink\n className='notification__display-name'\n href={account.get('url')}\n title={account.get('acct')}\n to={`/accounts/${account.get('id')}`}\n dangerouslySetInnerHTML={{ __html: displayName }}\n /></bdi>\n );\n\n // Renders.\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0'>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <Icon fixedWidth id='user-plus' />\n </div>\n\n <FormattedMessage\n id='notification.follow'\n defaultMessage='{name} followed you'\n values={{ name: link }}\n />\n </div>\n\n <AccountContainer hidden={hidden} id={account.get('id')} withNote={false} />\n <NotificationOverlayContainer notification={notification} />\n </div>\n </HotKeys>\n );\n }\n\n}\n","// Package imports.\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\n// Our imports,\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport NotificationFollow from './follow';\n\nexport default class Notification extends ImmutablePureComponent {\n\n static propTypes = {\n notification: ImmutablePropTypes.map.isRequired,\n hidden: PropTypes.bool,\n onMoveUp: PropTypes.func.isRequired,\n onMoveDown: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n getScrollPosition: PropTypes.func,\n updateScrollBottom: PropTypes.func,\n cacheMediaWidth: PropTypes.func,\n cachedMediaWidth: PropTypes.number,\n onUnmount: PropTypes.func,\n };\n\n render () {\n const {\n hidden,\n notification,\n onMoveDown,\n onMoveUp,\n onMention,\n getScrollPosition,\n updateScrollBottom,\n } = this.props;\n\n switch(notification.get('type')) {\n case 'follow':\n return (\n <NotificationFollow\n hidden={hidden}\n id={notification.get('id')}\n account={notification.get('account')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n />\n );\n case 'mention':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n contextType='notifications'\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'favourite':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='favourite'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'reblog':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='reblog'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n case 'poll':\n return (\n <StatusContainer\n containerId={notification.get('id')}\n hidden={hidden}\n id={notification.get('status')}\n account={notification.get('account')}\n prepend='poll'\n muted\n notification={notification}\n onMoveDown={onMoveDown}\n onMoveUp={onMoveUp}\n onMention={onMention}\n getScrollPosition={getScrollPosition}\n updateScrollBottom={updateScrollBottom}\n cachedMediaWidth={this.props.cachedMediaWidth}\n cacheMediaWidth={this.props.cacheMediaWidth}\n onUnmount={this.props.onUnmount}\n withDismiss\n />\n );\n default:\n return null;\n }\n }\n\n}\n","// Package imports.\nimport { connect } from 'react-redux';\n\n// Our imports.\nimport { makeGetNotification } from 'flavours/glitch/selectors';\nimport Notification from '../components/notification';\nimport { mentionCompose } from 'flavours/glitch/actions/compose';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n\n const mapStateToProps = (state, props) => ({\n notification: getNotification(state, props.notification, props.accountId),\n notifCleaning: state.getIn(['notifications', 'cleaningMode']),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class ClearColumnButton extends React.Component {\n\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n };\n\n render () {\n return (\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { FormattedMessage } from 'react-intl';\nimport ClearColumnButton from './clear_column_button';\nimport SettingToggle from './setting_toggle';\n\nexport default class ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n pushSettings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n onPushChange = (path, checked) => {\n this.props.onChange(['push', ...path], checked);\n }\n\n render () {\n const { settings, pushSettings, onChange, onClear } = this.props;\n\n const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;\n const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;\n const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;\n const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;\n const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;\n\n const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');\n const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;\n const pushMeta = showPushSettings && <FormattedMessage id='notifications.column_settings.push_meta' defaultMessage='This device' />;\n\n return (\n <div>\n <div className='column-settings__row'>\n <ClearColumnButton onClick={onClear} />\n </div>\n\n <div role='group' aria-labelledby='notifications-filter-bar'>\n <span id='notifications-filter-bar' className='column-settings__section'>\n <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />\n </span>\n <div className='column-settings__row'>\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />\n <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-follow'>\n <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-favourite'>\n <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-mention'>\n <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-reblog'>\n <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-poll'>\n <span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from 'flavours/glitch/actions/settings';\nimport { setFilter } from 'flavours/glitch/actions/notifications';\nimport { clearNotifications } from 'flavours/glitch/actions/notifications';\nimport { changeAlerts as changePushNotifications } from 'flavours/glitch/actions/push_notifications';\nimport { openModal } from 'flavours/glitch/actions/modal';\n\nconst messages = defineMessages({\n clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' },\n clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' },\n});\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'notifications']),\n pushSettings: state.get('push_notifications'),\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange (path, checked) {\n if (path[0] === 'push') {\n dispatch(changePushNotifications(path.slice(1), checked));\n } else if (path[0] === 'quickFilter') {\n dispatch(changeSetting(['notifications', ...path], checked));\n dispatch(setFilter('all'));\n } else {\n dispatch(changeSetting(['notifications', ...path], checked));\n }\n },\n\n onClear () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.clearMessage),\n confirm: intl.formatMessage(messages.clearConfirm),\n onConfirm: () => dispatch(clearNotifications()),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\n\nconst tooltips = defineMessages({\n mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },\n favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favourites' },\n boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },\n polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' },\n follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },\n});\n\nexport default @injectIntl\nclass FilterBar extends React.PureComponent {\n\n static propTypes = {\n selectFilter: PropTypes.func.isRequired,\n selectedFilter: PropTypes.string.isRequired,\n advancedMode: PropTypes.bool.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n onClick (notificationType) {\n return () => this.props.selectFilter(notificationType);\n }\n\n render () {\n const { selectedFilter, advancedMode, intl } = this.props;\n const renderedElement = !advancedMode ? (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n >\n <FormattedMessage\n id='notifications.filter.mentions'\n defaultMessage='Mentions'\n />\n </button>\n </div>\n ) : (\n <div className='notification__filter-bar'>\n <button\n className={selectedFilter === 'all' ? 'active' : ''}\n onClick={this.onClick('all')}\n >\n <FormattedMessage\n id='notifications.filter.all'\n defaultMessage='All'\n />\n </button>\n <button\n className={selectedFilter === 'mention' ? 'active' : ''}\n onClick={this.onClick('mention')}\n title={intl.formatMessage(tooltips.mentions)}\n >\n <Icon id='reply-all' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'favourite' ? 'active' : ''}\n onClick={this.onClick('favourite')}\n title={intl.formatMessage(tooltips.favourites)}\n >\n <Icon id='star' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'reblog' ? 'active' : ''}\n onClick={this.onClick('reblog')}\n title={intl.formatMessage(tooltips.boosts)}\n >\n <Icon id='retweet' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'poll' ? 'active' : ''}\n onClick={this.onClick('poll')}\n title={intl.formatMessage(tooltips.polls)}\n >\n <Icon id='tasks' fixedWidth />\n </button>\n <button\n className={selectedFilter === 'follow' ? 'active' : ''}\n onClick={this.onClick('follow')}\n title={intl.formatMessage(tooltips.follows)}\n >\n <Icon id='user-plus' fixedWidth />\n </button>\n </div>\n );\n return renderedElement;\n }\n\n}\n","import { connect } from 'react-redux';\nimport FilterBar from '../components/filter_bar';\nimport { setFilter } from '../../../actions/notifications';\n\nconst makeMapStateToProps = state => ({\n selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n selectFilter (newActiveFilter) {\n dispatch(setFilter(newActiveFilter));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from 'flavours/glitch/components/column';\nimport ColumnHeader from 'flavours/glitch/components/column_header';\nimport {\n enterNotificationClearingMode,\n expandNotifications,\n scrollTopNotifications,\n mountNotifications,\n unmountNotifications,\n loadPending,\n} from 'flavours/glitch/actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';\nimport NotificationContainer from './containers/notification_container';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport FilterBarContainer from './containers/filter_bar_container';\nimport { createSelector } from 'reselect';\nimport { List as ImmutableList } from 'immutable';\nimport { debounce } from 'lodash';\nimport ScrollableList from 'flavours/glitch/components/scrollable_list';\nimport LoadGap from 'flavours/glitch/components/load_gap';\n\nconst messages = defineMessages({\n title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n});\n\nconst getNotifications = createSelector([\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n state => state.getIn(['notifications', 'items']),\n], (showFilterBar, allowedType, excludedTypes, notifications) => {\n if (!showFilterBar || allowedType === 'all') {\n // used if user changed the notification settings after loading the notifications from the server\n // otherwise a list of notifications will come pre-filtered from the backend\n // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category\n return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));\n }\n return notifications.filter(item => item !== null && allowedType === item.get('type'));\n});\n\nconst mapStateToProps = state => ({\n showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n notifications: getNotifications(state),\n localSettings: state.get('local_settings'),\n isLoading: state.getIn(['notifications', 'isLoading'], true),\n isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0,\n hasMore: state.getIn(['notifications', 'hasMore']),\n numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,\n notifCleaningActive: state.getIn(['notifications', 'cleaningMode']),\n});\n\n/* glitch */\nconst mapDispatchToProps = dispatch => ({\n onEnterCleaningMode(yes) {\n dispatch(enterNotificationClearingMode(yes));\n },\n onMount() {\n dispatch(mountNotifications());\n },\n onUnmount() {\n dispatch(unmountNotifications());\n },\n dispatch,\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps)\n@injectIntl\nclass Notifications extends React.PureComponent {\n\n static propTypes = {\n columnId: PropTypes.string,\n notifications: ImmutablePropTypes.list.isRequired,\n showFilterBar: PropTypes.bool.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n intl: PropTypes.object.isRequired,\n isLoading: PropTypes.bool,\n isUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n numPending: PropTypes.number,\n localSettings: ImmutablePropTypes.map,\n notifCleaningActive: PropTypes.bool,\n onEnterCleaningMode: PropTypes.func,\n onMount: PropTypes.func,\n onUnmount: PropTypes.func,\n };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n handleLoadGap = (maxId) => {\n this.props.dispatch(expandNotifications({ maxId }));\n };\n\n handleLoadOlder = debounce(() => {\n const last = this.props.notifications.last();\n this.props.dispatch(expandNotifications({ maxId: last && last.get('id') }));\n }, 300, { leading: true });\n\n handleLoadPending = () => {\n this.props.dispatch(loadPending());\n };\n\n handleScrollToTop = debounce(() => {\n this.props.dispatch(scrollTopNotifications(true));\n }, 100);\n\n handleScroll = debounce(() => {\n this.props.dispatch(scrollTopNotifications(false));\n }, 100);\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('NOTIFICATIONS', {}));\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 setColumnRef = c => {\n this.column = c;\n }\n\n handleMoveUp = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) - 1;\n this._selectChild(elementIndex, true);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n this._selectChild(elementIndex, false);\n }\n\n _selectChild (index, align_top) {\n const container = this.column.node;\n const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n componentDidMount () {\n const { onMount } = this.props;\n if (onMount) {\n onMount();\n }\n }\n\n componentWillUnmount () {\n const { onUnmount } = this.props;\n if (onUnmount) {\n onUnmount();\n }\n }\n\n render () {\n const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props;\n const pinned = !!columnId;\n const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage=\"You don't have any notifications yet. Interact with others to start the conversation.\" />;\n\n let scrollableContent = null;\n\n const filterBarContainer = showFilterBar\n ? (<FilterBarContainer />)\n : null;\n\n if (isLoading && this.scrollableContent) {\n scrollableContent = this.scrollableContent;\n } else if (notifications.size > 0 || hasMore) {\n scrollableContent = notifications.map((item, index) => item === null ? (\n <LoadGap\n key={'gap:' + notifications.getIn([index + 1, 'id'])}\n disabled={isLoading}\n maxId={index > 0 ? notifications.getIn([index - 1, 'id']) : null}\n onClick={this.handleLoadGap}\n />\n ) : (\n <NotificationContainer\n key={item.get('id')}\n notification={item}\n accountId={item.get('account')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ));\n } else {\n scrollableContent = null;\n }\n\n this.scrollableContent = scrollableContent;\n\n const scrollContainer = (\n <ScrollableList\n scrollKey={`notifications-${columnId}`}\n trackScroll={!pinned}\n isLoading={isLoading}\n showLoading={isLoading && notifications.size === 0}\n hasMore={hasMore}\n numPending={numPending}\n emptyMessage={emptyMessage}\n onLoadMore={this.handleLoadOlder}\n onLoadPending={this.handleLoadPending}\n onScrollToTop={this.handleScrollToTop}\n onScroll={this.handleScroll}\n shouldUpdateScroll={shouldUpdateScroll}\n >\n {scrollableContent}\n </ScrollableList>\n );\n\n return (\n <Column\n ref={this.setColumnRef}\n name='notifications'\n extraClasses={this.props.notifCleaningActive ? 'notif-cleaning' : null}\n label={intl.formatMessage(messages.title)}\n >\n <ColumnHeader\n icon='bell'\n active={isUnread}\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 localSettings={this.props.localSettings}\n notifCleaning\n notifCleaningActive={this.props.notifCleaningActive} // this is used to toggle the header text\n onEnterCleaningMode={this.props.onEnterCleaningMode}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n {filterBarContainer}\n {scrollContainer}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} |