mastodon/app/javascript/glitch/components/notification/index.js

85 lines
2.0 KiB
JavaScript
Raw Normal View History

// Package imports //
import React from 'react';
2016-11-20 19:39:18 +01:00
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
2016-11-20 19:39:18 +01:00
// Mastodon imports //
// Our imports //
2017-07-13 12:36:12 +02:00
import StatusContainer from '../status/container';
import FollowNotification from './follow_notification';
export default class Notification extends ImmutablePureComponent {
2016-11-20 19:39:18 +01:00
static propTypes = {
notification: ImmutablePropTypes.map.isRequired,
2017-06-29 07:00:54 +02:00
settings: ImmutablePropTypes.map.isRequired,
onDeleteNotification: PropTypes.func.isRequired,
};
renderFollow (notification) {
2016-11-20 19:39:18 +01:00
return (
<FollowNotification
notificationId={notification.get('id')}
account={notification.get('account')}
onDeleteNotification={this.props.onDeleteNotification}
/>
2016-11-20 19:39:18 +01:00
);
}
2016-11-20 19:39:18 +01:00
renderMention (notification) {
return (
<StatusContainer
id={notification.get('status')}
notificationId={notification.get('id')}
withDismiss
/>
);
}
2016-11-20 19:39:18 +01:00
renderFavourite (notification) {
2016-11-20 19:39:18 +01:00
return (
<StatusContainer
id={notification.get('status')}
account={notification.get('account')}
prepend='favourite'
muted
notificationId={notification.get('id')}
withDismiss
/>
2016-11-20 19:39:18 +01:00
);
}
2016-11-20 19:39:18 +01:00
renderReblog (notification) {
2016-11-20 19:39:18 +01:00
return (
<StatusContainer
id={notification.get('status')}
account={notification.get('account')}
prepend='reblog'
muted
notificationId={notification.get('id')}
withDismiss
/>
2016-11-20 19:39:18 +01:00
);
}
2016-11-20 19:39:18 +01:00
render () {
const { notification } = this.props;
2016-11-20 19:39:18 +01:00
switch(notification.get('type')) {
case 'follow':
return this.renderFollow(notification);
case 'mention':
return this.renderMention(notification);
case 'favourite':
return this.renderFavourite(notification);
case 'reblog':
return this.renderReblog(notification);
2016-11-20 19:39:18 +01:00
}
return null;
2016-11-20 19:39:18 +01:00
}
}