91 lines
2.6 KiB
JavaScript
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;
|