From 0135e6482a0f73fcc04419349c5c2b3025c1ac22 Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Sun, 30 Aug 2026 01:57:02 +0530 Subject: [PATCH] feat(pwa): 100% PWABuilder compliance with Service Worker, 512x512 icons, id, scope, and manifest metadata --- public/App/Queue/index.html | 9 +++++ public/App/Queue/manifest.json | 51 +++++++++++++++++++++++++---- public/App/Queue/sw.js | 49 +++++++++++++++++++++++++++ public/assets/img/pwa-icon-192.png | Bin 0 -> 3474 bytes public/assets/img/pwa-icon-512.png | Bin 0 -> 11522 bytes 5 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 public/App/Queue/sw.js create mode 100644 public/assets/img/pwa-icon-192.png create mode 100644 public/assets/img/pwa-icon-512.png diff --git a/public/App/Queue/index.html b/public/App/Queue/index.html index 5b121a2..ceef0a6 100644 --- a/public/App/Queue/index.html +++ b/public/App/Queue/index.html @@ -434,6 +434,15 @@ renderShowcase(); } }, 8000); + + // Register PWA Service Worker + if ('serviceWorker' in navigator) { + window.addEventListener('load', function() { + navigator.serviceWorker.register('/App/Queue/sw.js') + .then(function(reg) { console.log('Queue PWA Service Worker Registered', reg); }) + .catch(function(err) { console.log('Service Worker Registration Failed', err); }); + }); + } diff --git a/public/App/Queue/manifest.json b/public/App/Queue/manifest.json index 7b006de..3213850 100644 --- a/public/App/Queue/manifest.json +++ b/public/App/Queue/manifest.json @@ -1,22 +1,59 @@ { - "short_name": "HMS Mobile", + "id": "/app/queue", "name": "HMS OPD Queue & Token Display PWA", + "short_name": "HMS Queue TV", + "description": "Live OPD Token Tracker & Patient Calling TV Display Application for E-Atria Multispeciality Hospital.", + "lang": "en", + "dir": "ltr", + "scope": "/app/queue", + "start_url": "/app/queue", + "background_color": "#0f172a", + "theme_color": "#0f172a", + "display": "standalone", + "display_override": ["standalone", "minimal-ui"], + "categories": ["medical", "health", "utilities"], + "prefer_related_applications": false, "icons": [ { - "src": "/assets/img/logo.png", + "src": "/assets/img/pwa-icon-512.png", "type": "image/png", "sizes": "512x512", "purpose": "any maskable" }, + { + "src": "/assets/img/pwa-icon-192.png", + "type": "image/png", + "sizes": "192x192", + "purpose": "any maskable" + }, { "src": "/assets/img/apple-touch-icon.png", "type": "image/png", "sizes": "180x180" } ], - "start_url": "/app/queue", - "background_color": "#0f172a", - "theme_color": "#0f172a", - "display": "standalone", - "orientation": "landscape" + "shortcuts": [ + { + "name": "Live OPD Queue Display", + "short_name": "Queue", + "description": "Open live OPD token tracker & callout display screen", + "url": "/app/queue", + "icons": [ + { + "src": "/assets/img/pwa-icon-192.png", + "sizes": "192x192", + "type": "image/png" + } + ] + } + ], + "screenshots": [ + { + "src": "/assets/img/slides-1.jpg", + "sizes": "1280x720", + "type": "image/jpeg", + "form_factor": "wide", + "label": "OPD Token Tracker & Hospital Showcase TV Display" + } + ] } diff --git a/public/App/Queue/sw.js b/public/App/Queue/sw.js new file mode 100644 index 0000000..3b9b005 --- /dev/null +++ b/public/App/Queue/sw.js @@ -0,0 +1,49 @@ +const CACHE_NAME = 'hms-opd-queue-v1'; +const ASSETS_TO_CACHE = [ + '/app/queue', + '/App/Queue/index.html', + '/App/Queue/manifest.json', + '/assets/img/logo.png', + '/assets/img/pwa-icon-512.png', + '/assets/img/pwa-icon-192.png', + 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css', + 'https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css' +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + return cache.addAll(ASSETS_TO_CACHE); + }) + ); + self.skipWaiting(); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((keys) => { + return Promise.all( + keys.map((key) => { + if (key !== CACHE_NAME) { + return caches.delete(key); + } + }) + ); + }) + ); + self.clients.claim(); +}); + +self.addEventListener('fetch', (event) => { + // API endpoints always fetch fresh network data + if (event.request.url.includes('/api/v1/')) { + event.respondWith(fetch(event.request)); + return; + } + + event.respondWith( + caches.match(event.request).then((cachedResponse) => { + return cachedResponse || fetch(event.request); + }) + ); +}); diff --git a/public/assets/img/pwa-icon-192.png b/public/assets/img/pwa-icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fd70f5d6bb9847575c448878c321fa25023f80 GIT binary patch literal 3474 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 c-NFU}^~^di>nF&V^~nO58s9T2z2)}wzw literal 0 HcmV?d00001 diff --git a/public/assets/img/pwa-icon-512.png b/public/assets/img/pwa-icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..cf91979c78f86588badc525bd7e8114494385b87 GIT binary patch literal 11522 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 UyLl48_9J3M)jTfJg*uQkOHrl$Z?k`B-x)W)j1 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 X#w+EosepY4fv*R5;p$~~EMEN|T_;rP literal 0 HcmV?d00001