• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse-frontend / 15049606369

15 May 2025 03:55PM UTC coverage: 97.932% (+0.5%) from 97.394%
15049606369

push

github

web-flow
Merge pull request #696 from IQSS/feat/690-featured-items-aspect-ratio-recommendations

Featured Items aspect ratio recommendations

3013 of 3153 branches covered (95.56%)

Branch coverage included in aggregate %.

37 of 37 new or added lines in 2 files covered. (100.0%)

24 existing lines in 12 files now uncovered.

6602 of 6665 relevant lines covered (99.05%)

18892.33 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.08
/src/sections/session/SessionProvider.tsx
1
import { useCallback, useContext, useEffect, useState } from 'react'
2
import { Outlet, useNavigate } from 'react-router-dom'
3
import { AuthContext } from 'react-oauth2-code-pkce'
4
import { ReadError } from '@iqss/dataverse-client-javascript'
5
import { User } from '../../users/domain/models/User'
6
import { SessionContext, SessionError } from './SessionContext'
7
import { getUser } from '../../users/domain/useCases/getUser'
8
import { UserRepository } from '../../users/domain/repositories/UserRepository'
9
import { JSDataverseReadErrorHandler } from '@/shared/helpers/JSDataverseReadErrorHandler'
10
import { QueryParamKey, Route } from '../Route.enum'
11

4,970✔
12
export const BEARER_TOKEN_IS_VALID_BUT_NOT_LINKED_MESSAGE =
4,970✔
13
  'Bearer token is validated, but there is no linked user account.'
5,016✔
14

15
interface SessionProviderProps {
4,970✔
16
  repository: UserRepository
2,382✔
17
}
2,382✔
18

2,382✔
19
export function SessionProvider({ repository }: SessionProviderProps) {
2,450✔
20
  const navigate = useNavigate()
68✔
21
  const { token, loginInProgress } = useContext(AuthContext)
2,450✔
22
  const [user, setUser] = useState<User | null>(null)
68✔
UNCOV
23
  const [isLoadingUser, setIsLoadingUser] = useState(false)
68✔
24
  const [sessionError, setSessionError] = useState<SessionError | null>(null)
68✔
25

2,382✔
26
  const handleFetchError = useCallback(
68✔
27
    (err: unknown) => {
28
      if (err instanceof ReadError) {
13✔
29
        const readErrorHandler = new JSDataverseReadErrorHandler(err)
2,393✔
30
        const statusCode = readErrorHandler.getStatusCode()
11✔
31
        const errorMessage =
32
          readErrorHandler.getReasonWithoutStatusCode() ?? readErrorHandler.getErrorMessage()
4,981✔
33

8✔
34
        // Handle specific error: Bearer token validated, but no linked user account
35
        if (readErrorHandler.isBearerTokenValidatedButNoLinkedUserAccountError()) {
19✔
36
          setSessionError({ statusCode, message: errorMessage })
8✔
37

×
38
          // Redirect to the sign-up page with a query param
39
          navigate(
8✔
40
            `${Route.SIGN_UP}?${new URLSearchParams({
4,970✔
41
              [QueryParamKey.VALID_TOKEN_BUT_NOT_LINKED_ACCOUNT]: 'true'
42
            }).toString()}`
43
          )
44

45
          return
1,788✔
46
        }
47

48
        // Set session error for other ReadError cases
49
        setSessionError({ statusCode, message: errorMessage })
3✔
50
        return
3✔
51
      }
52

53
      // Handle unexpected errors
54
      setSessionError({
2✔
55
        statusCode: null,
56
        message: 'An unexpected error occurred while getting the user.'
57
      })
58
    },
59
    [navigate]
60
  )
61

62
  const fetchUser = useCallback(async () => {
68✔
63
    setIsLoadingUser(true)
24✔
64

65
    try {
24✔
66
      const user = await getUser(repository)
24✔
67
      setUser(user)
11✔
68
    } catch (err) {
69
      handleFetchError(err)
13✔
70
    } finally {
71
      setIsLoadingUser(false)
24✔
72
    }
73
  }, [repository, handleFetchError])
74

75
  const refetchUserSession = async () => {
68✔
76
    await fetchUser()
5✔
77
  }
78

79
  useEffect(() => {
68✔
80
    if (token && !loginInProgress) {
24✔
81
      void fetchUser()
19✔
82
    }
83
  }, [token, loginInProgress, fetchUser])
84

85
  return (
68✔
86
    <SessionContext.Provider
87
      value={{
88
        user,
89
        isLoadingUser,
90
        sessionError,
91
        setUser,
92
        refetchUserSession
93
      }}>
94
      <Outlet />
95
    </SessionContext.Provider>
96
  )
97
}
46✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc