@@ -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,59 @@ const HomeLayout = ({ children }) => {
153
176
setIsOpen ( false ) ;
154
177
}
155
178
} ;
179
+
180
+ const handleLoginBtn = ( ) => {
181
+ try {
182
+ Parse . User . logOut ( ) ;
183
+ } catch ( err ) {
184
+ console . log ( "err " , err ) ;
185
+ } finally {
186
+ localStorage . removeItem ( "accesstoken" ) ;
187
+ navigate ( "/" , { replace : true } ) ;
188
+ }
189
+ } ;
156
190
return (
157
191
< div >
158
192
< div className = "sticky top-0 z-50" >
159
193
< Header showSidebar = { showSidebar } />
160
194
</ div >
161
- < div className = "flex md:flex-row flex-col z-50" >
162
- < Sidebar isOpen = { isOpen } closeSidebar = { closeSidebar } />
195
+ { isUserValid ? (
196
+ < >
197
+ < div className = "flex md:flex-row flex-col z-50" >
198
+ < Sidebar isOpen = { isOpen } closeSidebar = { closeSidebar } />
163
199
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 />
200
+ < div className = "relative h-screen flex flex-col justify-between w-full overflow-y-auto" >
201
+ < div className = "bg-[#eef1f5] p-3" > { children } </ div >
202
+ < div className = "z-30" >
203
+ < Footer />
204
+ </ div >
205
+ </ div >
168
206
</ 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
- />
207
+ < Tour
208
+ onRequestClose = { closeTour }
209
+ steps = { tourConfigs }
210
+ isOpen = { isTour }
211
+ closeWithMask = { false }
212
+ disableKeyboardNavigation = { [ "esc" ] }
213
+ // disableInteraction={true}
214
+ scrollOffset = { - 100 }
215
+ rounded = { 5 }
216
+ showCloseButton = { isCloseBtn }
217
+ />
218
+ </ >
219
+ ) : (
220
+ < ModalUi title = { "Session Expired" } isOpen = { true } showClose = { false } >
221
+ < div className = "flex flex-col justify-center items-center py-4 md:py-5 gap-5" >
222
+ < p className = "text-xl font-normal" > Your session has expired.</ p >
223
+ < button
224
+ onClick = { handleLoginBtn }
225
+ className = "text-base px-3 py-1.5 rounded shadow-md text-white bg-[#1ab6ce]"
226
+ >
227
+ Login
228
+ </ button >
229
+ </ div >
230
+ </ ModalUi >
231
+ ) }
182
232
</ div >
183
233
) ;
184
234
} ;
0 commit comments