Files
wompchat/src/utils/chrome/Notifications.js
wompmacho daaf8714ae removed unnecesary license comments
removed unnecesary license comments generated by that add-license thing
2020-11-02 02:54:46 -05:00

91 lines
2.6 KiB
JavaScript

class Notifications {
create(notificationId = null, options) {
// notificationId is optional
if(typeof notificationId === 'object') {
options = notificationId;
notificationId = null;
}
return new Promise((res, rej) => {
// resolve args = notificationId:string
chrome.notifications.create(notificationId, options, res);
});
}
update(notificationId, options) {
return new Promise((res, rej) => {
// resolve args = wasUpdated:boolean
chrome.notifications.update(notificationId, options, res);
});
}
clear(notificationId) {
return new Promise((res, rej) => {
// resolve args = wasCleared:boolean
chrome.notifications.clear(notificationId, res);
});
}
getAll() {
return new Promise((res, rej) => {
// resolve args = notifications:object
chrome.notifications.getAll(res);
});
}
getPermissionLevel() {
return new Promise((res, rej) => {
// resolve args = level:PermissionLevel (https://developer.chrome.com/apps/notifications#type-PermissionLevel)
chrome.notifications.getPermissionLevel(res);
});
}
listen(event, notificationId = null, callback) {
// event = 'onClosed' | 'onClicked' | 'onButtonClicked' | 'onPermissionLevelChanged' | 'onShowSettings'
// notificationId is optional
if(typeof notificationId === 'function') {
callback = notificationId;
notificationId = null;
}
if(event === 'onPermissionLevelChanged' || event === 'onShowSettings') {
return this._nonNotificationIdListen(event, callback);
}
/**
* https://developer.chrome.com/apps/notifications#events
*
* Resolve args (by event):
* onClosed = notificationId:string, byUser:boolean
* onClicked = notificationId:string
* onButtonClicked = notificationId:string, buttonIndex:integer
*
* onPermissionLevelChanged = level:PermissionLevel (https://developer.chrome.com/apps/notifications#type-PermissionLevel)
* onShowSettings = (none)
*/
// This callback relates only to those events that have notificationId arg
const ListenerCallback = (() => {
if(notificationId !== null) {
return (passedNotificationId, ...args) => {
if(notificationId === passedNotificationId) {
callback(passedNotificationId, ...args);
}
};
} else {
return callback;
}
})();
chrome.notifications[event].addListener(ListenerCallback);
}
_nonNotificationIdListen(event, callback) {
chrome.notifications[event].addListener(callback);
}
}
export default Notifications;