@@ -13,74 +13,57 @@ function PermissionWatcher() {
1313 const userProfile = useSelector ( state => state . userProfile ) ;
1414 const isAcknowledged = userProfile ?. permissions ?. isAcknowledged ;
1515 const [ isAckLoading , setIsAckLoading ] = useState ( false ) ;
16- // Get seconds remaining until force logout
1716 const secondsRemaining = useCountdown ( forceLogoutAt ) ;
1817 const [ wasForceLoggedOut , setWasForceLoggedOut ] = useState ( false ) ;
1918 const [ flagReady , setFlagReady ] = useState ( false ) ;
20- // Track the initial acknowledged state when user first logs in
2119 const [ initialAcknowledgedState , setInitialAcknowledgedState ] = useState ( null ) ;
22- // Track if user has just logged in (to distinguish from mid-session changes)
2320 const [ isInitialLogin , setIsInitialLogin ] = useState ( false ) ;
2421
25- // On mount or when authentication changes, read flag from sessionStorage
2622 useEffect ( ( ) => {
2723 if ( isAuthenticated ) {
2824 try {
2925 const flag = sessionStorage . getItem ( 'wasForceLoggedOut' ) ;
3026 setWasForceLoggedOut ( flag === 'true' ) ;
3127 sessionStorage . removeItem ( 'wasForceLoggedOut' ) ;
32- } catch {
33- // sessionStorage might not be available (private browsing, etc.)
34- // Silently fail - component will work without the flag
35- }
36-
37- // Mark as initial login (initial state will be captured when profile loads)
28+ } catch { }
3829 setIsInitialLogin ( true ) ;
39- setInitialAcknowledgedState ( null ) ; // Reset to wait for profile load
30+ setInitialAcknowledgedState ( null ) ;
4031 } else {
41- // User logged out, reset state
4232 setIsInitialLogin ( false ) ;
4333 setInitialAcknowledgedState ( null ) ;
4434 setWasForceLoggedOut ( false ) ;
4535 }
46-
4736 setFlagReady ( true ) ;
4837 } , [ isAuthenticated ] ) ;
4938
50- // Track when user profile is first loaded after login and handle initial login cases
5139 useEffect ( ( ) => {
5240 if ( ! isAuthenticated || ! flagReady ) return ;
53- if ( userProfile === null || userProfile === undefined ) return ; // Wait for profile to load
54- if ( ! isInitialLogin ) return ; // Only handle initial login cases
41+ if ( ! userProfile ) return ;
42+ if ( ! isInitialLogin ) return ;
5543
56- // Capture the initial acknowledged state when profile is first loaded
5744 if ( initialAcknowledgedState === null ) {
58- setInitialAcknowledgedState ( isAcknowledged ) ;
59- return ; // Wait for next render to check conditions
45+ const safestate = isAcknowledged === undefined ? true : isAcknowledged ;
46+ setInitialAcknowledgedState ( safestate ) ;
47+ return ;
6048 }
6149
62- // Edge Case 2: User permissions changed when logged out → show banner only on login
63- // Detected by: user just logged in with unacknowledged permissions
64- // AND was NOT force logged out (just normal logout with permission changes)
6550 const loggedInWithUnacknowledgedPermissions =
66- ! isAcknowledged && ! forceLogoutAt && ! wasForceLoggedOut ;
51+ isAcknowledged === false && ! forceLogoutAt && ! wasForceLoggedOut ;
6752
6853 if ( loggedInWithUnacknowledgedPermissions ) {
69- setIsInitialLogin ( false ) ; // Mark as no longer initial login
54+ setIsInitialLogin ( false ) ;
7055 return ;
7156 }
7257
73- // Edge Case 3: User was force logged out → permissions change → user logs back in → show banner only
74- // Detected by: user just logged in with unacknowledged permissions AND was force logged out
75- const loggedInAfterForceLogout = ! isAcknowledged && ! forceLogoutAt && wasForceLoggedOut ;
58+ const loggedInAfterForceLogout =
59+ isAcknowledged === false && ! forceLogoutAt && wasForceLoggedOut ;
7660
7761 if ( loggedInAfterForceLogout ) {
78- setIsInitialLogin ( false ) ; // Mark as no longer initial login
62+ setIsInitialLogin ( false ) ;
7963 return ;
8064 }
8165
82- // If initial login and permissions are acknowledged, mark as no longer initial
83- if ( isAcknowledged ) {
66+ if ( isAcknowledged !== false ) {
8467 setIsInitialLogin ( false ) ;
8568 }
8669 } , [
@@ -95,27 +78,21 @@ function PermissionWatcher() {
9578 userProfile ,
9679 ] ) ;
9780
98- // Handle mid-session permission changes (Edge Case 1)
9981 useEffect ( ( ) => {
10082 if ( ! isAuthenticated || ! flagReady ) return ;
101- if ( userProfile === null || userProfile === undefined ) return ; // Wait for profile to load
102- if ( isInitialLogin ) return ; // Skip mid-session checks during initial login
83+ if ( ! userProfile ) return ;
84+ if ( isInitialLogin ) return ;
10385
104- // User permissions changed when logged in → start timer
105- // Detected by: permissions were acknowledged (or was null/true), then became unacknowledged
106- // AND user was already logged in (not initial login)
10786 const permissionsChangedMidSession =
108- ! isAcknowledged && ! forceLogoutAt && initialAcknowledgedState !== false ; // Was acknowledged or null before (not explicitly false)
87+ isAcknowledged === false && ! forceLogoutAt && initialAcknowledgedState !== false ;
10988
11089 if ( permissionsChangedMidSession ) {
11190 dispatch ( startForceLogout ( 20000 ) ) ;
11291 return ;
11392 }
11493
115- // Case: permissions re-acknowledged → cancel timer
116- if ( isAcknowledged && forceLogoutAt ) {
94+ if ( isAcknowledged === true && forceLogoutAt ) {
11795 dispatch ( stopForceLogout ( ) ) ;
118- // Reset initial state since permissions are now acknowledged
11996 setInitialAcknowledgedState ( true ) ;
12097 }
12198 } , [
@@ -129,16 +106,13 @@ function PermissionWatcher() {
129106 userProfile ,
130107 ] ) ;
131108
132- // Handle acknowledgment of permission changes
133109 const handleAcknowledge = async ( ) => {
134110 try {
135111 setIsAckLoading ( true ) ;
136-
137112 if ( ! userProfile || ! userProfile . _id ) {
138113 setIsAckLoading ( false ) ;
139114 return ;
140115 }
141-
142116 const { firstName : name , lastName, personalLinks, adminLinks, _id } = userProfile ;
143117
144118 axios
@@ -147,30 +121,23 @@ function PermissionWatcher() {
147121 lastName,
148122 personalLinks,
149123 adminLinks,
150-
151124 isAcknowledged : true ,
152125 } )
153126 . then ( ( ) => {
154127 setIsAckLoading ( false ) ;
155- // Update initial state to reflect acknowledgment
156128 setInitialAcknowledgedState ( true ) ;
157129 setIsInitialLogin ( false ) ;
158130 dispatch ( getUserProfile ( _id ) ) ;
159131 } )
160132 . catch ( error => {
161- // eslint-disable-next-line no-console
162- // console.error('Error updating user profile:', error);
163133 setIsAckLoading ( false ) ;
164134 } ) ;
165135 } catch ( error ) {
166- // eslint-disable-next-line no-console
167- // console.error('Error acknowledging permission changes:', error);
168136 setIsAckLoading ( false ) ;
169137 }
170138 } ;
171139
172- // Force logout timer running (mid-session permission change)
173- if ( forceLogoutAt && ! isAcknowledged ) {
140+ if ( forceLogoutAt && isAcknowledged === false ) {
174141 return (
175142 < PopUpBar
176143 message = { `Permissions changed—logging out in ${ secondsRemaining } s unless acknowledged.` }
0 commit comments