mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-14 23:24:55 +01:00
049c9a3b97
Cache width shared by Video player, MediaGallery and Cards at the ScrollableList level, pass it down through StatusList and Notifications.
117 lines
3.4 KiB
JavaScript
117 lines
3.4 KiB
JavaScript
// Package imports.
|
|
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
import ImmutablePureComponent from 'react-immutable-pure-component';
|
|
|
|
// Our imports,
|
|
import StatusContainer from 'flavours/glitch/containers/status_container';
|
|
import NotificationFollow from './follow';
|
|
|
|
export default class Notification extends ImmutablePureComponent {
|
|
|
|
static propTypes = {
|
|
notification: ImmutablePropTypes.map.isRequired,
|
|
hidden: PropTypes.bool,
|
|
onMoveUp: PropTypes.func.isRequired,
|
|
onMoveDown: PropTypes.func.isRequired,
|
|
onMention: PropTypes.func.isRequired,
|
|
getScrollPosition: PropTypes.func,
|
|
updateScrollBottom: PropTypes.func,
|
|
cacheMediaWidth: PropTypes.func,
|
|
cachedMediaWidth: PropTypes.number,
|
|
onUnmount: PropTypes.func,
|
|
};
|
|
|
|
render () {
|
|
const {
|
|
hidden,
|
|
notification,
|
|
onMoveDown,
|
|
onMoveUp,
|
|
onMention,
|
|
getScrollPosition,
|
|
updateScrollBottom,
|
|
} = this.props;
|
|
|
|
switch(notification.get('type')) {
|
|
case 'follow':
|
|
return (
|
|
<NotificationFollow
|
|
hidden={hidden}
|
|
id={notification.get('id')}
|
|
account={notification.get('account')}
|
|
notification={notification}
|
|
onMoveDown={onMoveDown}
|
|
onMoveUp={onMoveUp}
|
|
onMention={onMention}
|
|
/>
|
|
);
|
|
case 'mention':
|
|
return (
|
|
<StatusContainer
|
|
containerId={notification.get('id')}
|
|
hidden={hidden}
|
|
id={notification.get('status')}
|
|
notification={notification}
|
|
onMoveDown={onMoveDown}
|
|
onMoveUp={onMoveUp}
|
|
onMention={onMention}
|
|
contextType='notifications'
|
|
getScrollPosition={getScrollPosition}
|
|
updateScrollBottom={updateScrollBottom}
|
|
cachedMediaWidth={this.props.cachedMediaWidth}
|
|
cacheMediaWidth={this.props.cacheMediaWidth}
|
|
onUnmount={this.props.onUnmount}
|
|
withDismiss
|
|
/>
|
|
);
|
|
case 'favourite':
|
|
return (
|
|
<StatusContainer
|
|
containerId={notification.get('id')}
|
|
hidden={hidden}
|
|
id={notification.get('status')}
|
|
account={notification.get('account')}
|
|
prepend='favourite'
|
|
muted
|
|
notification={notification}
|
|
onMoveDown={onMoveDown}
|
|
onMoveUp={onMoveUp}
|
|
onMention={onMention}
|
|
getScrollPosition={getScrollPosition}
|
|
updateScrollBottom={updateScrollBottom}
|
|
cachedMediaWidth={this.props.cachedMediaWidth}
|
|
cacheMediaWidth={this.props.cacheMediaWidth}
|
|
onUnmount={this.props.onUnmount}
|
|
withDismiss
|
|
/>
|
|
);
|
|
case 'reblog':
|
|
return (
|
|
<StatusContainer
|
|
containerId={notification.get('id')}
|
|
hidden={hidden}
|
|
id={notification.get('status')}
|
|
account={notification.get('account')}
|
|
prepend='reblog'
|
|
muted
|
|
notification={notification}
|
|
onMoveDown={onMoveDown}
|
|
onMoveUp={onMoveUp}
|
|
onMention={onMention}
|
|
getScrollPosition={getScrollPosition}
|
|
updateScrollBottom={updateScrollBottom}
|
|
cachedMediaWidth={this.props.cachedMediaWidth}
|
|
cacheMediaWidth={this.props.cacheMediaWidth}
|
|
onUnmount={this.props.onUnmount}
|
|
withDismiss
|
|
/>
|
|
);
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
}
|