1
1
import { useQuery } from "@tanstack/react-query"
2
- import React , { PropsWithChildren } from "react"
2
+ import React , { PropsWithChildren , useState } from "react"
3
3
4
4
import { queryClient } from "../components"
5
5
import { Spinner } from "../components/utils/Spinner"
6
6
import * as Services from '../services/index'
7
- import { AuthProvider , DaikokuMode , Display , ITenant , IUserSimple , TenanMode , isError } from "../types"
7
+ import { AuthProvider , DaikokuMode , Display , IStateContext , TenanMode , isError } from "../types"
8
8
9
9
10
- export interface IStateContext {
11
- impersonator ?: IUserSimple ;
12
- connectedUser : IUserSimple ;
13
- tenant : ITenant ;
14
- isTenantAdmin : boolean ;
15
- apiCreationPermitted : boolean ;
16
- }
17
- export type TContext = IStateContext & { reloadContext : ( ) => Promise < void > }
18
-
19
- const initContext : TContext = {
10
+ type TGlobalContext = IStateContext & { reloadContext : ( ) => void , toggleExpertMode : ( ) => void }
11
+ const initContext : TGlobalContext = {
20
12
connectedUser : {
21
13
_id : "" ,
22
14
_humanReadableId : "" ,
@@ -46,17 +38,23 @@ const initContext: TContext = {
46
38
} ,
47
39
isTenantAdmin : false ,
48
40
apiCreationPermitted : false ,
49
- reloadContext : ( ) => Promise . resolve ( )
41
+ reloadContext : ( ) => Promise . resolve ( ) ,
42
+ expertMode : JSON . parse ( localStorage . getItem ( 'expertMode' ) || 'false' ) ,
43
+ toggleExpertMode : ( ) => { }
50
44
51
45
}
52
46
53
- export const GlobalContext = React . createContext < TContext > ( initContext )
47
+ export const GlobalContext = React . createContext < TGlobalContext > ( initContext )
54
48
export const useCurrentUserContext = ( ) => {
55
49
return React . useContext ( GlobalContext )
56
50
}
57
51
58
52
59
53
export const CurrentUserContextProvider = ( props : PropsWithChildren ) => {
54
+ const getExpertMode = ( ) : boolean => JSON . parse ( localStorage . getItem ( 'expertMode' ) || 'false' )
55
+
56
+ const [ expertMode , setExpertMode ] = useState < boolean > ( getExpertMode ( ) )
57
+
60
58
const currentUserQuery = useQuery ( {
61
59
queryKey : [ 'context' ] ,
62
60
queryFn : ( ) => Services . getUserContext ( ) ,
@@ -73,8 +71,14 @@ export const CurrentUserContextProvider = (props: PropsWithChildren) => {
73
71
74
72
const reloadContext = ( ) => queryClient . invalidateQueries ( { queryKey : [ "context" ] } )
75
73
74
+ const toggleExpertMode = ( ) => {
75
+ localStorage . setItem ( 'expertMode' , ( ! expertMode ) . toLocaleString ( ) )
76
+ setExpertMode ( ! expertMode )
77
+ } ;
78
+
79
+
76
80
return (
77
- < GlobalContext . Provider value = { { ...currentUserQuery . data , reloadContext } } >
81
+ < GlobalContext . Provider value = { { ...currentUserQuery . data , reloadContext, expertMode , toggleExpertMode } } >
78
82
{ props . children }
79
83
</ GlobalContext . Provider >
80
84
)
0 commit comments