Merge branch 'jtbairdsr-master'

This commit is contained in:
Lauri Ojansivu 2020-04-08 22:29:15 +03:00
commit 115701fa65
6 changed files with 72 additions and 2 deletions

View file

@ -14,3 +14,7 @@ template(name='notificationsDrawer')
+notification(activityData=activity index=dbIndex read=read) +notification(activityData=activity index=dbIndex read=read)
if($gt unreadNotifications 0) if($gt unreadNotifications 0)
a.all-read {{_ 'mark-all-as-read'}} a.all-read {{_ 'mark-all-as-read'}}
if ($and ($.Session.get 'showReadNotifications') ($gt readNotifications 0))
a.remove-read
i.fa.fa-trash
| {{_ 'remove-all-read'}}

View file

@ -16,6 +16,13 @@ Template.notificationsDrawer.helpers({
transformedProfile() { transformedProfile() {
return Users.findOne(Meteor.userId()); return Users.findOne(Meteor.userId());
}, },
readNotifications() {
const readNotifications = _.filter(
Meteor.user().profile.notifications,
v => !!v.read,
);
return readNotifications.length;
},
}); });
Template.notificationsDrawer.events({ Template.notificationsDrawer.events({
@ -35,4 +42,12 @@ Template.notificationsDrawer.events({
'click .toggle-read'() { 'click .toggle-read'() {
Session.set('showReadNotifications', !Session.get('showReadNotifications')); Session.set('showReadNotifications', !Session.get('showReadNotifications'));
}, },
'click .remove-read'() {
const user = Meteor.user();
for (const notification of user.profile.notifications) {
if (notification.read) {
user.removeNotification(notification.activity);
}
}
},
}); });

View file

@ -45,12 +45,23 @@ section#notifications-drawer
line-height: 24px line-height: 24px
opacity 1 opacity 1
.all-read .all-read,
.remove-read
color belize color belize
background-color: #fafafa background-color: #fafafa
margin 8px 16px 12px margin 8px 16px 12px
display inline-block display inline-block
.remove-read
float right
&:hover
color #eb4646 !important
i.fa
color inherit
ul.notifications ul.notifications
display: block display: block
padding: 0px 16px padding: 0px 16px

View file

@ -774,6 +774,7 @@
"view-all": "View All", "view-all": "View All",
"filter-by-unread": "Filter by Unread", "filter-by-unread": "Filter by Unread",
"mark-all-as-read": "Mark all as read", "mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename", "allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename" "allowRenamePopup-title": "Allow Rename"
} }

View file

@ -282,7 +282,10 @@ if (Meteor.isServer) {
); );
} }
Notifications.getUsers(watchers).forEach(user => { Notifications.getUsers(watchers).forEach(user => {
Notifications.notify(user, title, description, params); // don't notify a user of their own behavior
if (user._id !== userId) {
Notifications.notify(user, title, description, params);
}
}); });
const integrations = Integrations.find({ const integrations = Integrations.find({

View file

@ -1,3 +1,5 @@
import { SyncedCron } from 'meteor/percolate:synced-cron';
// Sandstorm context is detected using the METEOR_SETTINGS environment variable // Sandstorm context is detected using the METEOR_SETTINGS environment variable
// in the package definition. // in the package definition.
const isSandstorm = const isSandstorm =
@ -926,6 +928,37 @@ if (Meteor.isServer) {
}); });
} }
const addCronJob = _.debounce(
Meteor.bindEnvironment(function notificationCleanupDebounced() {
// passed in the removeAge has to be a number standing for the number of days after a notification is read before we remove it
const envRemoveAge = process.env.NOTIFICATION_REMOVAL_AGE;
// default notifications will be removed 2 days after they are read
const defaultRemoveAge = 2;
const removeAge = parseInt(envRemoveAge, 10) || defaultRemoveAge;
SyncedCron.add({
name: 'notification_cleanup',
schedule: parser => parser.text('every 1 days'),
job: () => {
for (const user of Users.find()) {
for (const notification of user.profile.notifications) {
if (notification.read) {
const removeDate = new Date(notification.read);
removeDate.setDate(removeDate.getDate() + removeAge);
if (removeDate <= new Date()) {
user.removeNotification(notification.activity);
}
}
}
}
},
});
SyncedCron.start();
}),
500,
);
if (Meteor.isServer) { if (Meteor.isServer) {
// Let mongoDB ensure username unicity // Let mongoDB ensure username unicity
Meteor.startup(() => { Meteor.startup(() => {
@ -939,6 +972,9 @@ if (Meteor.isServer) {
}, },
{ unique: true }, { unique: true },
); );
Meteor.defer(() => {
addCronJob();
});
}); });
// OLD WAY THIS CODE DID WORK: When user is last admin of board, // OLD WAY THIS CODE DID WORK: When user is last admin of board,