dstpabuaran.com/resources/js/app.tsx
Yoga Pangestu bfad1ae65c feat: add PWA support with manifest and service worker registration
- Added icons for PWA: icon-192x192.png, icon-512x512.png, and maskable-icon.png.
- Created manifest.json for PWA configuration.
- Integrated PWA registration in app.tsx with update notifications.
- Implemented PWA update toast component for user notifications.
- Enhanced permissions page with platform-specific denied messages.
- Updated app.blade.php to include manifest and meta tags for PWA.
- Configured Vite to support PWA with caching strategies for assets and APIs.
2026-07-30 22:23:41 +07:00

55 lines
1.6 KiB
TypeScript

import { createInertiaApp } from '@inertiajs/react';
import { registerSW } from 'virtual:pwa-register';
import { FlashToast } from '@/components/flash-toast';
import { PWAUpdateToast } from '@/components/pwa-update-toast';
import { Toaster } from '@/components/ui/sonner';
import { TooltipProvider } from '@/components/ui/tooltip';
import { initializeTheme } from '@/hooks/use-appearance';
import AppLayout from '@/layouts/app-layout';
import AuthLayout from '@/layouts/auth-layout';
import SettingsLayout from '@/layouts/settings/layout';
const appName = import.meta.env.VITE_APP_NAME || 'Laravel';
registerSW({
onNeedRefresh() {
window.dispatchEvent(new CustomEvent('sw-update-available'));
},
onOfflineReady() {
window.dispatchEvent(new CustomEvent('sw-offline-ready'));
},
});
createInertiaApp({
title: (title) => (title ? `${title} - ${appName}` : appName),
layout: (name) => {
switch (true) {
case name === 'welcome':
return null;
case name.startsWith('auth/'):
return AuthLayout;
case name.startsWith('settings/'):
return [AppLayout, SettingsLayout];
default:
return AppLayout;
}
},
strictMode: true,
withApp(app) {
return (
<TooltipProvider delayDuration={0}>
<FlashToast />
<PWAUpdateToast />
{app}
<Toaster />
</TooltipProvider>
);
},
progress: {
color: '#4B5563',
},
});
// This will set light / dark mode on load...
initializeTheme();