@@ -7,10 +7,35 @@ import Tour from "reactour";
7
7
import axios from "axios" ;
8
8
import { useSelector } from "react-redux" ;
9
9
import Parse from "parse" ;
10
+ import ModalUi from "../primitives/ModalUi" ;
11
+ import { useNavigate } from "react-router-dom" ;
12
+
10
13
const HomeLayout = ( { children } ) => {
14
+ const navigate = useNavigate ( ) ;
11
15
const { width } = useWindowSize ( ) ;
12
16
const [ isOpen , setIsOpen ] = useState ( true ) ;
13
17
const arr = useSelector ( ( state ) => state . TourSteps ) ;
18
+ const [ isUserValid , setIsUserValid ] = useState ( true ) ;
19
+
20
+ useEffect ( ( ) => {
21
+ ( async ( ) => {
22
+ try {
23
+ // Use the session token to validate the user
24
+ const userQuery = new Parse . Query ( Parse . User ) ;
25
+ const user = await userQuery . get ( Parse . User . current ( ) . id , {
26
+ sessionToken : localStorage . getItem ( "accesstoken" )
27
+ } ) ;
28
+ if ( user ) {
29
+ setIsUserValid ( true ) ;
30
+ } else {
31
+ setIsUserValid ( false ) ;
32
+ }
33
+ } catch ( error ) {
34
+ // Session token is invalid or there was an error
35
+ setIsUserValid ( false ) ;
36
+ }
37
+ } ) ( ) ;
38
+ } , [ ] ) ;
14
39
15
40
// reactour state
16
41
const [ isCloseBtn , setIsCloseBtn ] = useState ( true ) ;
@@ -19,7 +44,7 @@ const HomeLayout = ({ children }) => {
19
44
const [ tourConfigs , setTourConfigs ] = useState ( [ ] ) ;
20
45
21
46
const showSidebar = ( ) => {
22
- setIsOpen ( value => ! value ) ;
47
+ setIsOpen ( ( value ) => ! value ) ;
23
48
} ;
24
49
useEffect ( ( ) => {
25
50
if ( width && width <= 768 ) {
@@ -28,9 +53,7 @@ const HomeLayout = ({ children }) => {
28
53
} , [ width ] ) ;
29
54
30
55
useEffect ( ( ) => {
31
- if ( localStorage . getItem ( "domain" ) === "sign" && arr && arr . length > 0 ) {
32
- handleDynamicSteps ( ) ;
33
- } else if (
56
+ if (
34
57
localStorage . getItem ( "domain" ) === "contracts" &&
35
58
arr &&
36
59
arr . length > 0
@@ -153,32 +176,58 @@ const HomeLayout = ({ children }) => {
153
176
setIsOpen ( false ) ;
154
177
}
155
178
} ;
179
+
180
+ const handleLoginBtn = ( ) => {
181
+ Parse . User . logOut ( ) ;
182
+ navigate ( "/" , { replace : true } ) ;
183
+ } ;
156
184
return (
157
185
< div >
158
186
< div className = "sticky top-0 z-50" >
159
187
< Header showSidebar = { showSidebar } />
160
188
</ div >
161
- < div className = "flex md:flex-row flex-col z-50" >
162
- < Sidebar isOpen = { isOpen } closeSidebar = { closeSidebar } />
189
+ { isUserValid ? (
190
+ < >
191
+ < div className = "flex md:flex-row flex-col z-50" >
192
+ < Sidebar isOpen = { isOpen } closeSidebar = { closeSidebar } />
163
193
164
- < div className = "relative h-screen flex flex-col justify-between w-full overflow-y-auto" >
165
- < div className = "bg-[#eef1f5] p-3" > { children } </ div >
166
- < div className = "z-30" >
167
- < Footer />
194
+ < div className = "relative h-screen flex flex-col justify-between w-full overflow-y-auto" >
195
+ < div className = "bg-[#eef1f5] p-3" > { children } </ div >
196
+ < div className = "z-30" >
197
+ < Footer />
198
+ </ div >
199
+ </ div >
168
200
</ div >
169
- </ div >
170
- </ div >
171
- < Tour
172
- onRequestClose = { closeTour }
173
- steps = { tourConfigs }
174
- isOpen = { isTour }
175
- closeWithMask = { false }
176
- disableKeyboardNavigation = { [ "esc" ] }
177
- // disableInteraction={true}
178
- scrollOffset = { - 100 }
179
- rounded = { 5 }
180
- showCloseButton = { isCloseBtn }
181
- />
201
+ < Tour
202
+ onRequestClose = { closeTour }
203
+ steps = { tourConfigs }
204
+ isOpen = { isTour }
205
+ closeWithMask = { false }
206
+ disableKeyboardNavigation = { [ "esc" ] }
207
+ // disableInteraction={true}
208
+ scrollOffset = { - 100 }
209
+ rounded = { 5 }
210
+ showCloseButton = { isCloseBtn }
211
+ />
212
+ </ >
213
+ ) : (
214
+ < ModalUi
215
+ title = { "Session Expired" }
216
+ headColor = { "#dc3545" }
217
+ isOpen = { true }
218
+ showClose = { false }
219
+ >
220
+ < div className = "flex flex-col justify-center items-center py-5 gap-5" >
221
+ < p className = "text-xl font-semibold " > Your Session has Expired.</ p >
222
+ < button
223
+ onClick = { handleLoginBtn }
224
+ className = "text-base px-3 py-1.5 rounded shadow-md text-white bg-[#1ab6ce]"
225
+ >
226
+ Login
227
+ </ button >
228
+ </ div >
229
+ </ ModalUi >
230
+ ) }
182
231
</ div >
183
232
) ;
184
233
} ;
0 commit comments