jellyfish-web/src/components/serviceworker/notifications.js

46 lines
1.3 KiB
JavaScript
Raw Normal View History

/* eslint-env serviceworker */
(function () {
'use strict';
2020-10-07 21:12:14 +09:00
let connectionManager;
2018-10-23 01:05:09 +03:00
function getApiClient(serverId) {
if (connectionManager) {
return Promise.resolve(connectionManager.getApiClient(serverId));
}
return Promise.reject();
2018-10-23 01:05:09 +03:00
}
function executeAction(action, data, serverId) {
return getApiClient(serverId).then(function (apiClient) {
2018-10-23 01:05:09 +03:00
switch (action) {
case 'cancel-install':
2020-10-08 00:47:23 +09:00
return apiClient.cancelPackageInstallation(data.id);
case 'restart':
2018-10-23 01:05:09 +03:00
return apiClient.restartServer();
default:
2020-05-04 12:44:12 +02:00
clients.openWindow('/');
return Promise.resolve();
2018-10-23 01:05:09 +03:00
}
});
2018-10-23 01:05:09 +03:00
}
2020-08-29 16:34:21 +02:00
/* eslint-disable-next-line no-restricted-globals -- self is valid in a serviceworker environment */
self.addEventListener('notificationclick', function (event) {
2020-10-07 21:12:14 +09:00
const notification = event.notification;
2018-10-23 01:05:09 +03:00
notification.close();
2020-10-07 21:12:14 +09:00
const data = notification.data;
const serverId = data.serverId;
const action = event.action;
if (!action) {
2020-05-04 12:44:12 +02:00
clients.openWindow('/');
event.waitUntil(Promise.resolve());
return;
}
event.waitUntil(executeAction(action, data, serverId));
}, false);
})();