glitchier-soc/app/javascript/flavours/glitch/features/notifications/components/notification.js

89 lines
2.1 KiB
JavaScript
Raw Normal View History

2017-11-18 05:11:18 +02:00
// Package imports.
import React from 'react';
2017-11-18 05:11:18 +02:00
import PropTypes from 'prop-types';
2016-11-20 20:39:18 +02:00
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
2016-11-20 20:39:18 +02:00
2017-11-18 05:11:18 +02:00
// Our imports,
2017-12-04 09:26:40 +02:00
import StatusContainer from 'flavours/glitch/containers/status_container';
2017-07-14 21:13:02 +03:00
import NotificationFollow from './follow';
export default class Notification extends ImmutablePureComponent {
2016-11-20 20:39:18 +02:00
static propTypes = {
notification: ImmutablePropTypes.map.isRequired,
2017-11-18 05:11:18 +02:00
hidden: PropTypes.bool,
onMoveUp: PropTypes.func.isRequired,
onMoveDown: PropTypes.func.isRequired,
onMention: PropTypes.func.isRequired,
2017-06-29 08:00:54 +03:00
settings: ImmutablePropTypes.map.isRequired,
};
2017-11-18 05:11:18 +02:00
renderFollow () {
const { notification } = this.props;
2016-11-20 20:39:18 +02:00
return (
2017-07-14 21:13:02 +03:00
<NotificationFollow
id={notification.get('id')}
account={notification.get('account')}
notification={notification}
/>
2016-11-20 20:39:18 +02:00
);
}
2016-11-20 20:39:18 +02:00
2017-11-18 05:11:18 +02:00
renderMention () {
const { notification } = this.props;
return (
<StatusContainer
id={notification.get('status')}
notification={notification}
withDismiss
/>
);
}
2016-11-20 20:39:18 +02:00
2017-11-18 05:11:18 +02:00
renderFavourite () {
const { notification } = this.props;
2016-11-20 20:39:18 +02:00
return (
<StatusContainer
id={notification.get('status')}
account={notification.get('account')}
prepend='favourite'
muted
notification={notification}
withDismiss
/>
2016-11-20 20:39:18 +02:00
);
}
2016-11-20 20:39:18 +02:00
2017-11-18 05:11:18 +02:00
renderReblog () {
const { notification } = this.props;
2016-11-20 20:39:18 +02:00
return (
<StatusContainer
id={notification.get('status')}
account={notification.get('account')}
prepend='reblog'
muted
notification={notification}
withDismiss
/>
2016-11-20 20:39:18 +02:00
);
}
2016-11-20 20:39:18 +02:00
render () {
const { notification } = this.props;
2016-11-20 20:39:18 +02:00
switch(notification.get('type')) {
case 'follow':
2017-11-18 05:11:18 +02:00
return this.renderFollow();
case 'mention':
2017-11-18 05:11:18 +02:00
return this.renderMention();
case 'favourite':
2017-11-18 05:11:18 +02:00
return this.renderFavourite();
case 'reblog':
2017-11-18 05:11:18 +02:00
return this.renderReblog();
default:
return null;
2016-11-20 20:39:18 +02:00
}
}
}