77 LocalizationProvider ,
88 PersonalSettingsContextProvider ,
99 RepositoryProvider ,
10+ RepositorySwitchContext ,
1011 ResponsiveContextProvider ,
1112 ThemeProvider ,
1213} from '../context'
@@ -23,6 +24,7 @@ import {
2324} from '../services'
2425import {
2526 clearActiveRepositorySelection ,
27+ hasSnAuthRepositoryTokens ,
2628 normalizeRepositoryUrl ,
2729 startSnAuthRepositoryLogin ,
2830} from '../services/repository-session'
@@ -65,6 +67,18 @@ export default function AppProviders({ children }: AppProvidersProps) {
6567 } )
6668 } , [ ] )
6769
70+ const switchRepository = useCallback ( ( providedUrl : string ) => {
71+ const normalizedUrl = normalizeRepositoryUrl ( providedUrl )
72+
73+ if ( ! hasSnAuthRepositoryTokens ( normalizedUrl ) ) {
74+ startSnAuthRepositoryLogin ( normalizedUrl )
75+ }
76+
77+ window . localStorage . setItem ( 'authType' , 'SNAuth' )
78+ setAuthType ( 'SNAuth' )
79+ setUrl ( normalizedUrl )
80+ } , [ ] )
81+
6882 useEffect ( ( ) => {
6983 const repoUrl = new URL ( window . location . href ) . searchParams . get ( 'repoUrl' )
7084 if ( repoUrl ) {
@@ -96,31 +110,33 @@ export default function AppProviders({ children }: AppProvidersProps) {
96110 < GridLoadingProvider >
97111 < TreeLoadingProvider >
98112 < ThemeProvider >
99- { authType === 'IdentityServer' ? (
100- < RepositoryProvider url = { url } changeAuthType = { changeAuthType } >
101- < ShareProvider >
102- < ISAuthProvider >
103- < ResponsiveContextProvider >
104- < ExpandedItemsProvider >
105- < DialogProvider > { children } </ DialogProvider >
106- </ ExpandedItemsProvider >
107- </ ResponsiveContextProvider >
108- </ ISAuthProvider >
109- </ ShareProvider >
110- </ RepositoryProvider >
111- ) : (
112- < SnAuthRepositoryProvider url = { url } changeAuthType = { changeAuthType } >
113- < ShareProvider >
114- < SNAuthProvider >
115- < ResponsiveContextProvider >
116- < ExpandedItemsProvider >
117- < DialogProvider > { children } </ DialogProvider >
118- </ ExpandedItemsProvider >
119- </ ResponsiveContextProvider >
120- </ SNAuthProvider >
121- </ ShareProvider >
122- </ SnAuthRepositoryProvider >
123- ) }
113+ < RepositorySwitchContext . Provider value = { { authType, switchRepository } } >
114+ { authType === 'IdentityServer' ? (
115+ < RepositoryProvider url = { url } changeAuthType = { changeAuthType } >
116+ < ShareProvider >
117+ < ISAuthProvider >
118+ < ResponsiveContextProvider >
119+ < ExpandedItemsProvider >
120+ < DialogProvider > { children } </ DialogProvider >
121+ </ ExpandedItemsProvider >
122+ </ ResponsiveContextProvider >
123+ </ ISAuthProvider >
124+ </ ShareProvider >
125+ </ RepositoryProvider >
126+ ) : (
127+ < SnAuthRepositoryProvider url = { url } changeAuthType = { changeAuthType } >
128+ < ShareProvider >
129+ < SNAuthProvider >
130+ < ResponsiveContextProvider >
131+ < ExpandedItemsProvider >
132+ < DialogProvider > { children } </ DialogProvider >
133+ </ ExpandedItemsProvider >
134+ </ ResponsiveContextProvider >
135+ </ SNAuthProvider >
136+ </ ShareProvider >
137+ </ SnAuthRepositoryProvider >
138+ ) }
139+ </ RepositorySwitchContext . Provider >
124140 </ ThemeProvider >
125141 </ TreeLoadingProvider >
126142 </ GridLoadingProvider >
0 commit comments