11'use client' ;
22
3- import React , { Suspense , useEffect , useState } from 'react' ;
3+ import React , { Suspense , useCallback , useEffect , useState } from 'react' ;
44import { Box , Grid , Typography } from '@mui/material' ;
55import dynamic from 'next/dynamic' ;
66import WelcomeScreen from '@learner/components/WelcomeComponent/WelcomeScreen' ;
77import Header from '@learner/components/Header/Header' ;
88import { getUserId , login } from '@learner/utils/API/LoginService' ;
99import { showToastMessage } from '@learner/components/ToastComponent/Toastify' ;
1010import { useRouter } from 'next/navigation' ;
11- import { useMediaQuery , useTheme } from '@mui/material' ;
1211import { useTranslation } from '@shared-lib' ;
1312import { getAcademicYear } from '@learner/utils/API/AcademicYearService' ;
1413import { preserveLocalStorage } from '@learner/utils/helper' ;
@@ -23,8 +22,6 @@ import welcomeGIF from '../../../public/images/welcome.gif';
2322import { logEvent } from '@learner/utils/googleAnalytics' ;
2423import { TenantName } from '../../utils/app.constant' ;
2524
26- import SwitchAccountDialog from '@shared-lib-v2/SwitchAccount/SwitchAccount' ;
27-
2825const Login = dynamic (
2926 ( ) => import ( '@login/Components/LoginComponent/LoginComponent' ) ,
3027 {
@@ -162,13 +159,119 @@ const WelcomeMessage = () => {
162159const LoginPage = ( ) => {
163160 const [ loading , setLoading ] = useState ( false ) ;
164161 const router = useRouter ( ) ;
165- const theme = useTheme ( ) ;
166- const isMobile = useMediaQuery ( theme . breakpoints . down ( 'sm' ) ) ;
167162 const handleAddAccount = ( ) => {
168163 router . push ( '/' ) ;
169164 } ;
170165 const { t } = useTranslation ( ) ;
171166
167+ const [ tenantId , setTenantId ] = useState < string > ( '' ) ;
168+ const [ tenantName , setTenantName ] = useState < string > ( '' ) ;
169+ const [ roleId , setRoleId ] = useState < string > ( '' ) ;
170+ const [ roleName , setRoleName ] = useState < string > ( '' ) ;
171+
172+ const handleSuccessfulLogin = useCallback (
173+ async (
174+ response : { access_token : string ; refresh_token ?: string | null } ,
175+ data : { remember : boolean }
176+ ) => {
177+ if ( typeof window === 'undefined' || ! window . localStorage ) {
178+ return ;
179+ }
180+
181+ setLoading ( true ) ;
182+
183+ const token = response . access_token ;
184+ const refreshToken = response ?. refresh_token ?? '' ;
185+ localStorage . setItem ( 'token' , token ) ;
186+ data ?. remember
187+ ? localStorage . setItem ( 'refreshToken' , refreshToken )
188+ : localStorage . removeItem ( 'refreshToken' ) ;
189+
190+ const userResponse = await getUserId ( ) ;
191+
192+ // Prefer the first tenant/role combination returned from the API.
193+ const tenantData = userResponse ?. tenantData ?. [ 0 ] ;
194+ const selectedTenantId = tenantData ?. tenantId ;
195+ const selectedTenantName = tenantData ?. tenantName ;
196+ const selectedRoleId = tenantData ?. roleId || '' ;
197+ const selectedRoleName = tenantData ?. roleName || 'Learner' ;
198+
199+ setTenantId ( selectedTenantId || '' ) ;
200+ setTenantName ( selectedTenantName || '' ) ;
201+ setRoleId ( selectedRoleId ) ;
202+ setRoleName ( selectedRoleName ) ;
203+
204+ if ( tenantData && selectedRoleName === 'Learner' ) {
205+ localStorage . setItem ( 'userId' , userResponse ?. userId ) ;
206+ localStorage . setItem ( 'roleId' , selectedRoleId ) ;
207+ localStorage . setItem ( 'templtateId' , tenantData ?. templateId ) ;
208+ localStorage . setItem ( 'userIdName' , userResponse ?. username ) ;
209+ localStorage . setItem ( 'firstName' , userResponse ?. firstName || '' ) ;
210+
211+ const uiConfig = tenantData ?. params ?. uiConfig ;
212+ const landingPage = tenantData ?. params ?. uiConfig ?. landingPage ;
213+ localStorage . setItem ( 'landingPage' , landingPage ) ;
214+ localStorage . setItem ( 'uiConfig' , JSON . stringify ( uiConfig || { } ) ) ;
215+
216+ localStorage . setItem ( 'tenantId' , selectedTenantId || '' ) ;
217+ localStorage . setItem ( 'userProgram' , selectedTenantName || '' ) ;
218+ await profileComplitionCheck ( ) ;
219+ if ( selectedTenantName === TenantName . YOUTHNET ) {
220+ const academicYearResponse = await getAcademicYear ( ) ;
221+ if ( academicYearResponse [ 0 ] ?. id ) {
222+ localStorage . setItem ( 'academicYearId' , academicYearResponse [ 0 ] ?. id ) ;
223+ }
224+ }
225+ const telemetryInteract = {
226+ context : { env : 'sign-in' , cdata : [ ] } ,
227+ edata : {
228+ id : 'login-success' ,
229+ type : 'CLICK' ,
230+ pageid : 'sign-in' ,
231+ uid : userResponse ?. userId || 'Anonymous' ,
232+ } ,
233+ } ;
234+ telemetryFactory . interact ( telemetryInteract ) ;
235+
236+ const channelId = tenantData ?. channelId ;
237+ localStorage . setItem ( 'channelId' , channelId ) ;
238+
239+ const collectionFramework = tenantData ?. collectionFramework ;
240+ localStorage . setItem ( 'collectionFramework' , collectionFramework ) ;
241+
242+ document . cookie = `token=${ token } ; path=/; secure; SameSite=Strict` ;
243+ const query = new URLSearchParams ( window . location . search ) ;
244+ const redirectUrl = query . get ( 'redirectUrl' ) ;
245+ const activeLink = query . get ( 'activeLink' ) ;
246+ logEvent ( {
247+ action : 'successfully-login-in-learner-app' ,
248+ category : 'Login Page' ,
249+ label : 'Login Button Clicked' ,
250+ } ) ;
251+ if ( redirectUrl && redirectUrl . startsWith ( '/' ) ) {
252+ router . push (
253+ `${ redirectUrl } ${ activeLink ? `?activeLink=${ activeLink } ` : '' } `
254+ ) ;
255+ } else {
256+ router . push ( '/programs' ) ;
257+ }
258+ } else {
259+ showToastMessage ( 'Username or password not correct' , 'error' ) ;
260+ const telemetryInteract = {
261+ context : { env : 'sign-in' , cdata : [ ] } ,
262+ edata : {
263+ id : 'login-failed' ,
264+ type : 'CLICK' ,
265+ pageid : 'sign-in' ,
266+ } ,
267+ } ;
268+ telemetryFactory . interact ( telemetryInteract ) ;
269+ }
270+ setLoading ( false ) ;
271+ } ,
272+ [ router ]
273+ ) ;
274+
172275 useEffect ( ( ) => {
173276 const init = async ( ) => {
174277 try {
@@ -181,10 +284,10 @@ const LoginPage = () => {
181284 const response = {
182285 result : {
183286 access_token,
184- refresh_token,
287+ refresh_token : refresh_token || undefined ,
185288 } ,
186289 } ;
187- handleSuccessfulLogin ( response ?. result , { remember : false } , router ) ;
290+ handleSuccessfulLogin ( response ?. result , { remember : false } ) ;
188291 }
189292 if ( ! localStorage . getItem ( 'did' ) ) {
190293 const visitorId = await getDeviceId ( ) ;
@@ -199,7 +302,7 @@ const LoginPage = () => {
199302 }
200303 } ;
201304 init ( ) ;
202- } , [ ] ) ;
305+ } , [ handleSuccessfulLogin ] ) ;
203306
204307 const handleForgotPassword = ( ) => {
205308 localStorage . setItem ( 'redirectionRoute' , '/login' ) ;
@@ -217,7 +320,7 @@ const LoginPage = () => {
217320 try {
218321 const response = await login ( { username, password } ) ;
219322 if ( response ?. result ?. access_token ) {
220- handleSuccessfulLogin ( response ?. result , data , router ) ;
323+ handleSuccessfulLogin ( response ?. result , data ) ;
221324 } else {
222325 showToastMessage (
223326 t ( 'LOGIN_PAGE.USERNAME_PASSWORD_NOT_CORRECT' ) ,
@@ -234,7 +337,7 @@ const LoginPage = () => {
234337 telemetryFactory . interact ( telemetryInteract ) ;
235338 }
236339 // setLoading(false);
237- } catch ( error : any ) {
340+ } catch {
238341 // setLoading(false);
239342 const errorMessage = t ( 'LOGIN_PAGE.USERNAME_PASSWORD_NOT_CORRECT' ) ;
240343 showToastMessage ( errorMessage , 'error' ) ;
@@ -250,138 +353,6 @@ const LoginPage = () => {
250353 }
251354 } ;
252355
253- const [ switchDialogOpen , setSwitchDialogOpen ] = useState ( false ) ;
254- const [ userResponse , setUserResponse ] = useState < any > ( null ) ;
255- const [ tenantId , setTenantId ] = useState < string > ( '' ) ;
256- const [ tenantName , setTenantName ] = useState < string > ( '' ) ;
257- const [ roleId , setRoleId ] = useState < string > ( '' ) ;
258- const [ roleName , setRoleName ] = useState < string > ( '' ) ;
259-
260- const handleSuccessfulLogin = async (
261- response : any ,
262- data : { remember : boolean } ,
263- router : any
264- ) => {
265- if ( typeof window !== 'undefined' && window . localStorage ) {
266- const token = response . access_token ;
267- const refreshToken = response ?. refresh_token ;
268- localStorage . setItem ( 'token' , token ) ;
269- data ?. remember
270- ? localStorage . setItem ( 'refreshToken' , refreshToken )
271- : localStorage . removeItem ( 'refreshToken' ) ;
272-
273- const userResponse = await getUserId ( ) ;
274-
275- setUserResponse ( userResponse ) ;
276-
277- setSwitchDialogOpen ( true ) ;
278- }
279- } ;
280- const callBackSwitchDialog = async (
281- tenantId : string ,
282- tenantName : string ,
283- roleId : string ,
284- roleName : string
285- ) => {
286- setSwitchDialogOpen ( false ) ;
287- setLoading ( true ) ;
288-
289- // Set the state values
290- setTenantId ( tenantId ) ;
291- setTenantName ( tenantName ) ;
292- setRoleId ( roleId ) ;
293- setRoleName ( roleName ) ;
294-
295- const token =
296- typeof window !== 'undefined' && window . localStorage
297- ? localStorage . getItem ( 'token' )
298- : '' ;
299-
300- if ( userResponse ) {
301- const tenantData = userResponse ?. tenantData ?. find (
302- ( tenant : any ) => tenant . tenantId === tenantId
303- ) ;
304-
305- if ( roleName === 'Learner' ) {
306- localStorage . setItem ( 'userId' , userResponse ?. userId ) ;
307- localStorage . setItem ( 'templtateId' , tenantData ?. templateId ) ;
308- localStorage . setItem ( 'userIdName' , userResponse ?. username ) ;
309- localStorage . setItem ( 'firstName' , userResponse ?. firstName || '' ) ;
310-
311- const tenantId = tenantData ?. tenantId ;
312- const tenantName = tenantData ?. tenantName ;
313- const uiConfig = tenantData ?. params ?. uiConfig ;
314- console . log ( 'uiConfig' , uiConfig ) ;
315- const landingPage = tenantData ?. params ?. uiConfig ?. landingPage ;
316- localStorage . setItem ( 'landingPage' , landingPage ) ;
317-
318- localStorage . setItem ( 'uiConfig' , JSON . stringify ( uiConfig || { } ) ) ;
319-
320- localStorage . setItem ( 'tenantId' , tenantId ) ;
321- localStorage . setItem ( 'userProgram' , tenantName ) ;
322- await profileComplitionCheck ( ) ;
323- if ( tenantName === TenantName . YOUTHNET ) {
324- const academicYearResponse = await getAcademicYear ( ) ;
325- if ( academicYearResponse [ 0 ] ?. id ) {
326- localStorage . setItem ( 'academicYearId' , academicYearResponse [ 0 ] ?. id ) ;
327- }
328- }
329- const telemetryInteract = {
330- context : { env : 'sign-in' , cdata : [ ] } ,
331- edata : {
332- id : 'login-success' ,
333- type : 'CLICK' ,
334- pageid : 'sign-in' ,
335- uid : userResponse ?. userId || 'Anonymous' ,
336- } ,
337- } ;
338- telemetryFactory . interact ( telemetryInteract ) ;
339-
340- const channelId = tenantData ?. channelId ;
341- localStorage . setItem ( 'channelId' , channelId ) ;
342-
343- const collectionFramework = tenantData ?. collectionFramework ;
344- localStorage . setItem ( 'collectionFramework' , collectionFramework ) ;
345-
346- document . cookie = `token=${ token } ; path=/; secure; SameSite=Strict` ;
347- const query = new URLSearchParams ( window . location . search ) ;
348- const redirectUrl = query . get ( 'redirectUrl' ) ;
349- const activeLink = query . get ( 'activeLink' ) ;
350- logEvent ( {
351- action : 'successfully-login-in-learner-app' ,
352- category : 'Login Page' ,
353- label : 'Login Button Clicked' ,
354- } ) ;
355- if ( redirectUrl && redirectUrl . startsWith ( '/' ) ) {
356- router . push (
357- `${ redirectUrl } ${ activeLink ? `?activeLink=${ activeLink } ` : '' } `
358- ) ;
359- } else {
360- // if (tenantName === TenantName.YOUTHNET) {
361- // router.push('/content');
362- // } else if (tenantName === TenantName.CAMP_TO_CLUB) {
363- // router.push('/courses-contents');
364- // } else if (tenantName === TenantName.PRAGYANPATH) {
365- // router.push('/courses-contents');
366- // }
367- router . push ( landingPage ) ;
368- }
369- } else {
370- showToastMessage ( 'Username or password not correct' , 'error' ) ;
371- const telemetryInteract = {
372- context : { env : 'sign-in' , cdata : [ ] } ,
373- edata : {
374- id : 'login-failed' ,
375- type : 'CLICK' ,
376- pageid : 'sign-in' ,
377- } ,
378- } ;
379- telemetryFactory . interact ( telemetryInteract ) ;
380- }
381- }
382- setLoading ( false ) ;
383- } ;
384-
385356 return (
386357 < Suspense fallback = { < div > Loading...</ div > } >
387358 < Box
@@ -463,17 +434,17 @@ const LoginPage = () => {
463434 </ Box >
464435 </ Box >
465436 </ Box >
466- < SwitchAccountDialog
437+ { /* <SwitchAccountDialog
467438 open={switchDialogOpen}
468439 onClose={() => setSwitchDialogOpen(false)}
469440 callbackFunction={callBackSwitchDialog}
470441 authResponse={userResponse?.tenantData}
471- />
442+ /> */ }
472443 { loading && (
473444 < Loader showBackdrop = { true } loadingText = { t ( 'COMMON.LOADING' ) } />
474445 ) }
475446 </ Suspense >
476447 ) ;
477448} ;
478449
479- export default LoginPage ;
450+ export default LoginPage ;
0 commit comments