mirror of
https://github.com/wekan/wekan.git
synced 2025-09-22 01:50:48 +02:00
Add notification, allow watch boards / lists / cards
This commit is contained in:
parent
9ef8ebaf09
commit
9bbdacc79a
24 changed files with 579 additions and 16 deletions
89
models/watchable.js
Normal file
89
models/watchable.js
Normal file
|
@ -0,0 +1,89 @@
|
|||
// simple version, only toggle watch / unwatch
|
||||
const simpleWatchable = (collection) => {
|
||||
collection.attachSchema({
|
||||
watchers: {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
});
|
||||
|
||||
collection.helpers({
|
||||
getWatchLevels() {
|
||||
return [true, false];
|
||||
},
|
||||
|
||||
watcherIndex(userId) {
|
||||
return this.watchers.indexOf(userId);
|
||||
},
|
||||
|
||||
findWatcher(userId) {
|
||||
return _.contains(this.watchers, userId);
|
||||
},
|
||||
});
|
||||
|
||||
collection.mutations({
|
||||
setWatcher(userId, level) {
|
||||
// if level undefined or null or false, then remove
|
||||
if (!level) return { $pull: { watchers: userId }};
|
||||
return { $addToSet: { watchers: userId }};
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// more complex version of same interface, with 3 watching levels
|
||||
const complexWatchOptions = ['watching', 'tracking', 'muted'];
|
||||
const complexWatchDefault = 'muted';
|
||||
|
||||
const complexWatchable = (collection) => {
|
||||
collection.attachSchema({
|
||||
'watchers.$.userId': {
|
||||
type: String,
|
||||
},
|
||||
'watchers.$.level': {
|
||||
type: String,
|
||||
allowedValues: complexWatchOptions,
|
||||
},
|
||||
});
|
||||
|
||||
collection.helpers({
|
||||
getWatchOptions() {
|
||||
return complexWatchOptions;
|
||||
},
|
||||
|
||||
getWatchDefault() {
|
||||
return complexWatchDefault;
|
||||
},
|
||||
|
||||
watcherIndex(userId) {
|
||||
return _.pluck(this.watchers, 'userId').indexOf(userId);
|
||||
},
|
||||
|
||||
findWatcher(userId) {
|
||||
return _.findWhere(this.watchers, { userId });
|
||||
},
|
||||
|
||||
getWatchLevel(userId) {
|
||||
const watcher = this.findWatcher(userId);
|
||||
return watcher ? watcher.level : complexWatchDefault;
|
||||
},
|
||||
});
|
||||
|
||||
collection.mutations({
|
||||
setWatcher(userId, level) {
|
||||
// if level undefined or null or false, then remove
|
||||
if (level === complexWatchDefault) level = null;
|
||||
if (!level) return { $pull: { watchers: { userId }}};
|
||||
const index = this.watcherIndex(userId);
|
||||
if (index<0) return { $push: { watchers: { userId, level }}};
|
||||
return {
|
||||
$set: {
|
||||
[`watchers.${index}.level`]: level,
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
complexWatchable(Boards);
|
||||
simpleWatchable(Lists);
|
||||
simpleWatchable(Cards);
|
Loading…
Add table
Add a link
Reference in a new issue