@@ -3,12 +3,12 @@ import PropTypes from 'prop-types';
3
3
import nullable from 'prop-types-nullable' ;
4
4
import {
5
5
BrowserRouter as Router ,
6
- Switch ,
6
+ Routes ,
7
7
Route ,
8
- Redirect ,
9
- useHistory ,
8
+ Navigate ,
10
9
useLocation ,
11
- useRouteMatch ,
10
+ useMatch ,
11
+ useNavigate ,
12
12
} from 'react-router-dom' ;
13
13
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
14
14
import Collapse from '@kunukn/react-collapse' ;
@@ -140,10 +140,15 @@ function PureApp({
140
140
} , [ ] ) ;
141
141
142
142
// TODO: move stuff that depends on this to the App.
143
- const history = useHistory ( ) ;
143
+ const navigate = useNavigate ( ) ;
144
144
React . useEffect ( ( ) => {
145
- selfoss . history = history ;
146
- } , [ history ] ) ;
145
+ selfoss . navigate = navigate ;
146
+ } , [ navigate ] ) ;
147
+
148
+ const entriesPageMatch = useMatch ( ENTRIES_ROUTE_PATTERN ) ;
149
+ React . useEffect ( ( ) => {
150
+ selfoss . entriesPageMatch = entriesPageMatch ;
151
+ } , [ entriesPageMatch ] ) ;
147
152
148
153
// Prepare path of the homepage for redirecting from /
149
154
let homePagePath = selfoss . config . homepage . split ( '/' ) ;
@@ -174,91 +179,83 @@ function PureApp({
174
179
< React . Fragment >
175
180
< Message message = { globalMessage } />
176
181
177
- < Switch >
178
- < Route path = "/sign/in" >
179
- { /* menu open for smartphone */ }
180
- < div id = "loginform" role = "main" >
181
- < LoginForm
182
- { ...{ offlineEnabled, setOfflineEnabled} }
183
- />
184
- </ div >
185
- </ Route >
186
-
187
- < Route path = "/" >
188
- < div id = "nav-mobile" role = "navigation" >
189
- < div id = "nav-mobile-logo" >
190
- < div id = "nav-mobile-count" className = { classNames ( { 'unread-count' : true , offline : offlineState , online : ! offlineState , unread : unreadItemsCount > 0 } ) } >
191
- < span className = { classNames ( { 'offline-count' : true , offline : offlineState , online : ! offlineState , diff : unreadItemsCount !== unreadItemsOfflineCount && unreadItemsOfflineCount } ) } > { unreadItemsOfflineCount > 0 ? unreadItemsOfflineCount : '' } </ span >
192
- < span className = "count" > { unreadItemsCount } </ span >
193
- </ div >
194
- </ div >
195
- < button
196
- id = "nav-mobile-settings"
197
- accessKey = "t"
198
- aria-label = { _ ( 'settingsbutton' ) }
199
- onClick = { menuButtonOnClick }
200
- >
201
- < FontAwesomeIcon icon = { icons . menu } size = "2x" />
202
- </ button >
203
- </ div >
204
-
205
- { /* navigation */ }
206
- < Collapse isOpen = { ! smartphone || navExpanded } className = "collapse-css-transition" >
207
- < div id = "nav" role = "navigation" >
208
- < Navigation
209
- entriesPage = { entriesPage }
210
- setNavExpanded = { setNavExpanded }
211
- navSourcesExpanded = { navSourcesExpanded }
212
- setNavSourcesExpanded = { setNavSourcesExpanded }
213
- offlineState = { offlineState }
214
- allItemsCount = { allItemsCount }
215
- allItemsOfflineCount = { allItemsOfflineCount }
216
- unreadItemsCount = { unreadItemsCount }
217
- unreadItemsOfflineCount = { unreadItemsOfflineCount }
218
- starredItemsCount = { starredItemsCount }
219
- starredItemsOfflineCount = { starredItemsOfflineCount }
220
- sourcesState = { sourcesState }
221
- setSourcesState = { setSourcesState }
222
- sources = { sources }
223
- setSources = { setSources }
224
- tags = { tags }
225
- reloadAll = { reloadAll }
182
+ < Routes >
183
+ < Route
184
+ path = "/sign/in"
185
+ element = {
186
+ /* menu open for smartphone */
187
+ < div id = "loginform" role = "main" >
188
+ < LoginForm
189
+ { ...{ offlineEnabled, setOfflineEnabled} }
226
190
/>
227
191
</ div >
228
- </ Collapse >
229
-
230
- < ul id = "search-list" >
231
- < SearchList />
232
- </ ul >
233
-
234
- { /* content */ }
235
- < div id = "content" role = "main" >
236
- < Switch >
237
- < Route exact path = "/" >
238
- < Redirect to = { `/${ homePagePath . join ( '/' ) } ` } />
239
- </ Route >
240
- < Route path = { ENTRIES_ROUTE_PATTERN } >
241
- { ( routeProps ) => (
242
- < EntriesPage
243
- { ...routeProps }
244
- ref = { entriesRef }
192
+ }
193
+ />
194
+
195
+ < Route
196
+ path = "/"
197
+ element = {
198
+ < React . Fragment >
199
+ < div id = "nav-mobile" role = "navigation" >
200
+ < div id = "nav-mobile-logo" >
201
+ < div id = "nav-mobile-count" className = { classNames ( { 'unread-count' : true , offline : offlineState , online : ! offlineState , unread : unreadItemsCount > 0 } ) } >
202
+ < span className = { classNames ( { 'offline-count' : true , offline : offlineState , online : ! offlineState , diff : unreadItemsCount !== unreadItemsOfflineCount && unreadItemsOfflineCount } ) } > { unreadItemsOfflineCount > 0 ? unreadItemsOfflineCount : '' } </ span >
203
+ < span className = "count" > { unreadItemsCount } </ span >
204
+ </ div >
205
+ </ div >
206
+ < button
207
+ id = "nav-mobile-settings"
208
+ accessKey = "t"
209
+ aria-label = { _ ( 'settingsbutton' ) }
210
+ onClick = { menuButtonOnClick }
211
+ >
212
+ < FontAwesomeIcon icon = { icons . menu } size = "2x" />
213
+ </ button >
214
+ </ div >
215
+
216
+ { /* navigation */ }
217
+ < Collapse isOpen = { ! smartphone || navExpanded } className = "collapse-css-transition" >
218
+ < div id = "nav" role = "navigation" >
219
+ < Navigation
220
+ entriesPage = { entriesPage }
245
221
setNavExpanded = { setNavExpanded }
246
222
navSourcesExpanded = { navSourcesExpanded }
247
- setTitle = { setTitle }
223
+ setNavSourcesExpanded = { setNavSourcesExpanded }
224
+ offlineState = { offlineState }
225
+ allItemsCount = { allItemsCount }
226
+ allItemsOfflineCount = { allItemsOfflineCount }
248
227
unreadItemsCount = { unreadItemsCount }
228
+ unreadItemsOfflineCount = { unreadItemsOfflineCount }
229
+ starredItemsCount = { starredItemsCount }
230
+ starredItemsOfflineCount = { starredItemsOfflineCount }
231
+ sourcesState = { sourcesState }
232
+ setSourcesState = { setSourcesState }
233
+ sources = { sources }
234
+ setSources = { setSources }
235
+ tags = { tags }
236
+ reloadAll = { reloadAll }
237
+ />
238
+ < Route
239
+ /* TODO: regex pattern does not work https://github.com/remix-run/react-router/issues/8254 */
240
+ path = { ENTRIES_ROUTE_PATTERN }
241
+ element = {
242
+ < EntriesPage
243
+ ref = { entriesRef }
244
+ setNavExpanded = { setNavExpanded }
245
+ navSourcesExpanded = { navSourcesExpanded }
246
+ setTitle = { setTitle }
247
+ unreadItemsCount = { unreadItemsCount }
248
+ />
249
+ }
249
250
/>
250
- ) }
251
- </ Route >
252
- < Route path = "/manage/sources" >
253
- < SourcesPage />
254
- </ Route >
255
- < Route path = "*" >
256
- < NotFound />
257
- </ Route >
258
- </ Switch >
259
- </ div >
260
- </ Route >
261
- </ Switch >
251
+ < Route path = "/manage/sources" element = { < SourcesPage /> } />
252
+ < Route path = "*" element = { < NotFound /> } />
253
+ </ Routes >
254
+ </ div >
255
+ </ React . Fragment >
256
+ }
257
+ />
258
+ </ Routes >
262
259
</ React . Fragment >
263
260
) ;
264
261
}
0 commit comments