1- import React from 'react' ;
1+ import React , { useEffect } from 'react' ;
22import { Routes , Route , useLocation } from 'react-router-dom' ;
33import Layout from './components/layout/Layout' ;
44import Home from './pages/Home' ;
@@ -15,9 +15,8 @@ import { SplashScreen } from '@capacitor/splash-screen';
1515import { StatusBar } from "@capacitor/status-bar" ;
1616import { App as CapApp } from '@capacitor/app' ;
1717import { Browser } from '@capacitor/browser' ;
18- import { checkForUpdate } from './utils/updateChecker' ;
1918import { UpdateModal } from './components/modals/UpdateModal' ;
20- import { useEffect , useState } from 'react ' ;
19+ import { UpdateProvider , useUpdate } from './contexts/UpdateContext ' ;
2120
2221const FontsCatalog = React . lazy ( ( ) => import ( './pages/FontsCatalog' ) ) ;
2322const FontDetails = React . lazy ( ( ) => import ( './pages/FontDetails' ) ) ;
@@ -31,21 +30,9 @@ const FontPairing = React.lazy(() => import('./pages/FontPairing'));
3130const Cli = React . lazy ( ( ) => import ( './pages/Cli' ) ) ;
3231const DesignerFonts = React . lazy ( ( ) => import ( './pages/DesignerFonts' ) ) ;
3332
34- function App ( ) {
33+ function AppContent ( ) {
3534 const location = useLocation ( ) ;
36- const [ updateInfo , setUpdateInfo ] = useState < {
37- isOpen : boolean ;
38- latestBuild : string ;
39- currentBuild : string ;
40- releaseNotes : string ;
41- apkUrl : string ;
42- } > ( {
43- isOpen : false ,
44- latestBuild : '' ,
45- currentBuild : '' ,
46- releaseNotes : '' ,
47- apkUrl : ''
48- } ) ;
35+ const { isModalOpen, updateInfo, closeModal } = useUpdate ( ) ;
4936
5037 useEffect ( ( ) => {
5138 const init = async ( ) => {
@@ -89,56 +76,48 @@ function App() {
8976 } ;
9077 } , [ ] ) ;
9178
92- useEffect ( ( ) => {
93- const runUpdateCheck = async ( ) => {
94- const result = await checkForUpdate ( ) ;
95-
96- if ( result . hasUpdate && result . apkUrl ) {
97- setUpdateInfo ( {
98- isOpen : true ,
99- latestBuild : String ( result . latestBuild ) ,
100- currentBuild : String ( result . currentBuild ) ,
101- releaseNotes : result . releaseNotes || 'New version available.' ,
102- apkUrl : result . apkUrl
103- } ) ;
104- }
105- } ;
106-
107- runUpdateCheck ( ) ;
108- } , [ ] ) ;
79+ return (
80+ < >
81+ < ScrollRestoration />
82+ < UploadProgressPopup />
83+ < BackHandler />
84+ < Routes location = { location } key = { location . pathname } >
85+ < Route path = "/" element = { < Layout /> } >
86+ < Route index element = { < Home /> } />
87+ < Route path = "fonts" element = { < FontsCatalog /> } />
88+ < Route path = "fonts/:id" element = { < FontDetails /> } />
89+ < Route path = "pairing" element = { < FontPairing /> } />
90+ < Route path = "auth" element = { < Auth /> } />
91+ < Route path = "upload" element = { < Upload /> } />
92+ < Route path = "profile" element = { < Profile /> } />
93+ < Route path = "members" element = { < Members /> } />
94+ < Route path = "members/:id" element = { < MemberDetails /> } />
95+ < Route path = "designers/:designerName" element = { < DesignerFonts /> } />
96+ < Route path = "admin" element = { < AdminDashboard /> } />
97+ < Route path = "cli" element = { < Cli /> } />
98+ </ Route >
99+ </ Routes >
100+ < UpdateModal
101+ isOpen = { isModalOpen }
102+ latestVersion = { updateInfo ?. latestBuild || '' }
103+ currentVersion = { updateInfo ?. currentBuild || '' }
104+ releaseNotes = { updateInfo ?. releaseNotes || '' }
105+ apkUrl = { updateInfo ?. apkUrl || '' }
106+ onClose = { closeModal }
107+ />
108+ </ >
109+ ) ;
110+ }
109111
112+ function App ( ) {
110113 return (
111114 < HelmetProvider >
112115 < ThemeProvider >
113116 < AuthProvider >
114117 < UploadProvider >
115- < ScrollRestoration />
116- < UploadProgressPopup />
117- < BackHandler />
118- < Routes location = { location } key = { location . pathname } >
119- < Route path = "/" element = { < Layout /> } >
120- < Route index element = { < Home /> } />
121- < Route path = "fonts" element = { < FontsCatalog /> } />
122- < Route path = "fonts/:id" element = { < FontDetails /> } />
123- < Route path = "pairing" element = { < FontPairing /> } />
124- < Route path = "auth" element = { < Auth /> } />
125- < Route path = "upload" element = { < Upload /> } />
126- < Route path = "profile" element = { < Profile /> } />
127- < Route path = "members" element = { < Members /> } />
128- < Route path = "members/:id" element = { < MemberDetails /> } />
129- < Route path = "designers/:designerName" element = { < DesignerFonts /> } />
130- < Route path = "admin" element = { < AdminDashboard /> } />
131- < Route path = "cli" element = { < Cli /> } />
132- </ Route >
133- </ Routes >
134- < UpdateModal
135- isOpen = { updateInfo . isOpen }
136- latestVersion = { updateInfo . latestBuild }
137- currentVersion = { updateInfo . currentBuild }
138- releaseNotes = { updateInfo . releaseNotes }
139- apkUrl = { updateInfo . apkUrl }
140- onClose = { ( ) => setUpdateInfo ( prev => ( { ...prev , isOpen : false } ) ) }
141- />
118+ < UpdateProvider >
119+ < AppContent />
120+ </ UpdateProvider >
142121 </ UploadProvider >
143122 </ AuthProvider >
144123 </ ThemeProvider >
0 commit comments