@@ -32,6 +32,56 @@ const useCounterRef = (initialValue: number = 0): [boolean, () => void, () => vo
3232 return [ counterRef . current !== initialValue , increment , decrement ] ;
3333} ;
3434
35+ const useUserUid = ( ) => {
36+ // Unique username
37+ const uniqueUsernameRef = React . useRef < string > ( '' ) ;
38+ const [ userUidLoading , setUserUidLoading ] = React . useState < boolean > ( true ) ;
39+
40+ // User id and impersonate name
41+ const userImpersonateNameOrUID = useSelector ( ( state : RootState ) => {
42+ const impersonateName = getImpersonate ( state ) ?. name ;
43+ const uid = getUser ( state ) ?. uid ;
44+ return impersonateName || uid || '' ;
45+ } ) ;
46+
47+ // Username
48+ const username = useSelector ( ( state : RootState ) => {
49+ return getUser ( state ) ?. username ;
50+ } ) ;
51+
52+ // construct unique username
53+ React . useEffect ( ( ) => {
54+ let activeGenerate = true ;
55+
56+ if ( username === 'kube:admin' ) {
57+ uniqueUsernameRef . current = 'kubeadmin' ;
58+ setUserUidLoading ( false ) ;
59+ } else if ( username ) {
60+ setUserUidLoading ( true ) ;
61+ generateHash ( 'SHA-256' , username )
62+ . then ( ( hash ) => {
63+ if ( activeGenerate ) {
64+ uniqueUsernameRef . current = hash ;
65+ setUserUidLoading ( false ) ;
66+ }
67+ } )
68+ . catch ( ( err ) => {
69+ // eslint-disable-next-line no-console
70+ console . error ( 'Could not generate unique username hash:' , err ) ;
71+ setUserUidLoading ( false ) ;
72+ } ) ;
73+ } else {
74+ setUserUidLoading ( false ) ;
75+ }
76+
77+ return ( ) => {
78+ activeGenerate = false ;
79+ } ;
80+ } , [ username ] ) ;
81+
82+ return { userUidLoading, userUid : userImpersonateNameOrUID || uniqueUsernameRef . current || '' } ;
83+ } ;
84+
3585export const useUserSettings : UseUserSettings = < T > ( key , defaultValue , sync = false ) => {
3686 // Mount status for safety state updates
3787 const mounted = React . useRef ( true ) ;
@@ -64,50 +114,7 @@ export const useUserSettings: UseUserSettings = <T>(key, defaultValue, sync = fa
64114 // Request counter
65115 const [ isRequestPending , increaseRequest , decreaseRequest ] = useCounterRef ( ) ;
66116
67- // Unique username
68- const [ uniqueUsername , setUniqueUsernameUnsafe ] = React . useState < string > ( '' ) ;
69- const setUniqueUsername : typeof setUniqueUsernameUnsafe = React . useCallback (
70- ( ...args ) => mounted . current && setUniqueUsernameUnsafe ( ...args ) ,
71- [ setUniqueUsernameUnsafe ] ,
72- ) ;
73- // User id and impersonate name
74- const userImpersonateNameOrUID = useSelector ( ( state : RootState ) => {
75- const impersonateName = getImpersonate ( state ) ?. name ;
76- const uid = getUser ( state ) ?. uid ;
77- return impersonateName || uid || '' ;
78- } ) ;
79-
80- // Username
81- const username = useSelector ( ( state : RootState ) => {
82- return getUser ( state ) ?. username ;
83- } ) ;
84-
85- // construct unique username
86- React . useEffect ( ( ) => {
87- let activeGenerate = true ;
88-
89- if ( ! username ) {
90- setUniqueUsername ( '' ) ;
91- } else if ( username === 'kube:admin' ) {
92- setUniqueUsername ( 'kubeadmin' ) ;
93- } else {
94- generateHash ( 'SHA-256' , username )
95- . then ( ( hash ) => {
96- if ( activeGenerate ) {
97- setUniqueUsername ( hash ) ;
98- }
99- } )
100- . catch ( ( err ) => {
101- // eslint-disable-next-line no-console
102- console . error ( 'Could not generate unique username hash:' , err ) ;
103- } ) ;
104- }
105- return ( ) => {
106- activeGenerate = false ;
107- } ;
108- } , [ username , setUniqueUsername ] ) ;
109-
110- const userUid = userImpersonateNameOrUID || uniqueUsername || '' ;
117+ const { userUidLoading, userUid } = useUserUid ( ) ;
111118
112119 const impersonate : boolean = useSelector ( ( state : RootState ) => ! ! getImpersonate ( state ) ) ;
113120
@@ -122,7 +129,7 @@ export const useUserSettings: UseUserSettings = <T>(key, defaultValue, sync = fa
122129
123130 const isLocalStorage = fallbackLocalStorage || impersonate ;
124131 const [ lsData , setLsDataCallback ] = useUserSettingsLocalStorage (
125- alwaysUseFallbackLocalStorage && ! impersonate
132+ ( alwaysUseFallbackLocalStorage || userUidLoading ) && ! impersonate && ! userUidLoading
126133 ? 'console-user-settings'
127134 : `console-user-settings-${ userUid } ` ,
128135 keyRef . current ,
0 commit comments