11import { ComponentType , FC , ReactNode , createContext , useContext , useEffect , useState } from 'react' ;
22import type { RouteProps } from 'react-router' ;
33
4+ import { UIMode } from '../enums' ;
5+
46export interface RouterEntry {
57 props : Omit < RouteProps , 'path' | 'children' > ;
68 component : ComponentType ;
@@ -10,12 +12,16 @@ export type RoutePatch = (route: RouteProps) => RouteProps;
1012
1113interface PublicDeckyRouterState {
1214 routes : Map < string , RouterEntry > ;
13- routePatches : Map < string , Set < RoutePatch > > ;
15+ routePatches : Map < UIMode , Map < string , Set < RoutePatch > > > ;
1416}
1517
1618export class DeckyRouterState {
1719 private _routes = new Map < string , RouterEntry > ( ) ;
18- private _routePatches = new Map < string , Set < RoutePatch > > ( ) ;
20+ // Update when support for new UIModes is added
21+ private _routePatches = new Map < UIMode , Map < string , Set < RoutePatch > > > ( [
22+ [ UIMode . BigPicture , new Map ( ) ] ,
23+ [ UIMode . Desktop , new Map ( ) ] ,
24+ ] ) ;
1925
2026 public eventBus = new EventTarget ( ) ;
2127
@@ -28,22 +34,26 @@ export class DeckyRouterState {
2834 this . notifyUpdate ( ) ;
2935 }
3036
31- addPatch ( path : string , patch : RoutePatch ) {
32- let patchList = this . _routePatches . get ( path ) ;
37+ addPatch ( path : string , patch : RoutePatch , uiMode : UIMode ) {
38+ const patchesForMode = this . _routePatches . get ( uiMode ) ;
39+ if ( ! patchesForMode ) throw new Error ( `UI mode ${ uiMode } not supported.` ) ;
40+ let patchList = patchesForMode . get ( path ) ;
3341 if ( ! patchList ) {
3442 patchList = new Set ( ) ;
35- this . _routePatches . set ( path , patchList ) ;
43+ patchesForMode . set ( path , patchList ) ;
3644 }
3745 patchList . add ( patch ) ;
3846 this . notifyUpdate ( ) ;
3947 return patch ;
4048 }
4149
42- removePatch ( path : string , patch : RoutePatch ) {
43- const patchList = this . _routePatches . get ( path ) ;
50+ removePatch ( path : string , patch : RoutePatch , uiMode : UIMode ) {
51+ const patchesForMode = this . _routePatches . get ( uiMode ) ;
52+ if ( ! patchesForMode ) throw new Error ( `UI mode ${ uiMode } not supported.` ) ;
53+ const patchList = patchesForMode . get ( path ) ;
4454 patchList ?. delete ( patch ) ;
4555 if ( patchList ?. size == 0 ) {
46- this . _routePatches . delete ( path ) ;
56+ patchesForMode . delete ( path ) ;
4757 }
4858 this . notifyUpdate ( ) ;
4959 }
@@ -60,8 +70,8 @@ export class DeckyRouterState {
6070
6171interface DeckyRouterStateContext extends PublicDeckyRouterState {
6272 addRoute ( path : string , component : RouterEntry [ 'component' ] , props : RouterEntry [ 'props' ] ) : void ;
63- addPatch ( path : string , patch : RoutePatch ) : RoutePatch ;
64- removePatch ( path : string , patch : RoutePatch ) : void ;
73+ addPatch ( path : string , patch : RoutePatch , uiMode ?: UIMode ) : RoutePatch ;
74+ removePatch ( path : string , patch : RoutePatch , uiMode ?: UIMode ) : void ;
6575 removeRoute ( path : string ) : void ;
6676}
6777
0 commit comments