setting up pwa in laravel in new method

This commit is contained in:
dhanabalan
2025-11-13 09:01:14 +05:30
parent 2b36d73c5d
commit 5b26179ffb
4 changed files with 61 additions and 27 deletions

View File

@@ -122,35 +122,35 @@ class AdminPanelProvider extends PanelProvider
// } // }
public function boot(): void // public function boot(): void
{ // {
FilamentView::registerRenderHook('panels::head.end', function () { // FilamentView::registerRenderHook('panels::head.end', function () {
// Only inject on the "home" page (or specific route) // // Only inject on the "home" page (or specific route)
if (url()->current() == config('app.url') . '/admin') { // if (url()->current() == config('app.url') . '/admin') {
return ' // return '
<link rel="manifest" href="' . asset('manifest.json') . '"> // <link rel="manifest" href="' . asset('manifest.json') . '">
<meta name="theme-color" content="#007bff"> // <meta name="theme-color" content="#007bff">
<script> // <script>
if ("serviceWorker" in navigator) { // if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js") // navigator.serviceWorker.register("/sw.js")
.then(reg => console.log("Service Worker registered:", reg.scope)) // .then(reg => console.log("Service Worker registered:", reg.scope))
.catch(err => console.error("Service Worker registration failed:", err)); // .catch(err => console.error("Service Worker registration failed:", err));
} // }
</script> // </script>
'; // ';
} // }
return ''; // Do not inject on other pages // return ''; // Do not inject on other pages
}); // });
// Only include PWA install script if on home page // // Only include PWA install script if on home page
FilamentView::registerRenderHook('panels::body.end', function () { // FilamentView::registerRenderHook('panels::body.end', function () {
if (url()->current() == config('app.url') . '/admin') { // if (url()->current() == config('app.url') . '/admin') {
return '<script src="' . asset('js/pwa-install.js') . '"></script>'; // return '<script src="' . asset('js/pwa-install.js') . '"></script>';
} // }
return ''; // return '';
}); // });
} // }

26
public/js/pwa-init.js Normal file
View File

@@ -0,0 +1,26 @@
(function() {
// Function to check if app is installed
function isPWAInstalled() {
return (window.matchMedia('(display-mode: standalone)').matches)
|| (window.navigator.standalone === true);
}
// Only run if PWA not installed and not injected yet
if (!isPWAInstalled() && !localStorage.getItem('pwaInjected')) {
// Dynamically inject manifest
const link = document.createElement('link');
link.rel = 'manifest';
link.href = '/manifest.json';
document.head.appendChild(link);
// Register Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('Service Worker registered:', reg.scope))
.catch(err => console.error('SW registration failed:', err));
}
// Mark as injected to prevent running again
localStorage.setItem('pwaInjected', 'true');
}
})();

View File

@@ -111,5 +111,11 @@
</body> </body>
</html> --}} </html> --}}
<head>
<!-- other head content -->
@include('partials.pwa')
</head>

View File

@@ -0,0 +1,2 @@
{{-- Only include PWA script once --}}
<script src="{{ asset('js/pwa-init.js') }}" defer></script>