app/webpacker/src/javascript/serviceworker.js.erb
function receivePushNotification(event) {
var data = JSON.parse(event.data && event.data.text());
self.lastURL = data['url']
data['icon'] = "<%= asset_path 'favicon/android-chrome-144x144.png' %>";
var title = data['title']
delete data['title']
event.waitUntil(self.registration.showNotification(title, data));
}
self.addEventListener("push", receivePushNotification);
self.addEventListener('notificationclick', function(event) {
event.notification.close();
event.waitUntil(
clients.matchAll({
type: "window"
})
.then(function(clientList) {
for (var i = 0; i < clientList.length; i++) {
var client = clientList[i];
if ((client.url == self.lastURL || self.lastURL === '/') && 'focus' in client )
return client.focus();
}
if (clients.openWindow) {
return clients.openWindow(self.lastURL);
}
})
);
});