Skip to content

Commit 3a622af

Browse files
authored
Merge pull request #677 from IQSS/feat/674-integrate-get-application-terms-of-use-in-account-linking
Integrate get application terms of use in account linking
2 parents 0dc79ca + 8c7c9a1 commit 3a622af

18 files changed

Lines changed: 271 additions & 59 deletions

File tree

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"@dnd-kit/sortable": "8.0.0",
1818
"@dnd-kit/utilities": "3.2.2",
1919
"@faker-js/faker": "7.6.0",
20-
"@iqss/dataverse-client-javascript": "2.0.0-alpha.42",
20+
"@iqss/dataverse-client-javascript": "2.0.0-alpha.44",
2121
"@iqss/dataverse-design-system": "*",
2222
"@istanbuljs/nyc-config-typescript": "1.0.2",
2323
"@tanstack/react-table": "8.9.2",

public/locales/en/signUp.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@
6464
"primaryLabel": "General Terms of Use",
6565
"label": "I have read and accept the Dataverse General Terms of Use as outlined above.",
6666
"description": "The terms and conditions for using the application and services.",
67-
"required": "Please check the box to indicate your acceptance of the General Terms of Use.",
68-
"noTerms": "There are no Terms of Use for this Dataverse installation."
67+
"required": "Please check the box to indicate your acceptance of the General Terms of Use."
6968
}
7069
},
7170
"submit": "Create Account",

src/info/infrastructure/repositories/DataverseInfoJSDataverseRepository.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
import { getDataverseVersion, ReadError } from '@iqss/dataverse-client-javascript'
2-
import { axiosInstance } from '@/axiosInstance'
1+
import {
2+
getApplicationTermsOfUse,
3+
getDataverseVersion,
4+
ReadError
5+
} from '@iqss/dataverse-client-javascript'
36
import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository'
47
import { DataverseVersion } from '@/info/domain/models/DataverseVersion'
58
import { TermsOfUse } from '@/info/domain/models/TermsOfUse'
@@ -30,12 +33,9 @@ export class DataverseInfoJSDataverseRepository implements DataverseInfoReposito
3033
})
3134
}
3235

33-
async getTermsOfUse() {
34-
//TODO - This is not actually used and should be replaced with a js-dataverse use case when we have available the endpoint to get the installation terms of use not api terms of use.
35-
const response = await axiosInstance.get<{ data: { message: TermsOfUse } }>(
36-
'/api/v1/info/apiTermsOfUse',
37-
{ excludeToken: true }
38-
)
39-
return JSTermsOfUseMapper.toSanitizedTermsOfUse(response.data.data.message)
36+
getTermsOfUse(): Promise<TermsOfUse> {
37+
return getApplicationTermsOfUse
38+
.execute()
39+
.then((termsOfUse) => JSTermsOfUseMapper.toSanitizedTermsOfUse(termsOfUse))
4040
}
4141
}

src/sections/sign-up/SignUp.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@ import { useEffect } from 'react'
22
import { useTranslation } from 'react-i18next'
33
import { Alert, Tabs } from '@iqss/dataverse-design-system'
44
import { UserRepository } from '@/users/domain/repositories/UserRepository'
5+
import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository'
56
import { useLoading } from '../loading/LoadingContext'
67
import { ValidTokenNotLinkedAccountForm } from './valid-token-not-linked-account-form/ValidTokenNotLinkedAccountForm'
78
import styles from './SignUp.module.scss'
89

910
interface SignUpProps {
1011
userRepository: UserRepository
12+
dataverseInfoRepository: DataverseInfoRepository
1113
hasValidTokenButNotLinkedAccount: boolean
1214
}
1315

14-
export const SignUp = ({ userRepository, hasValidTokenButNotLinkedAccount }: SignUpProps) => {
16+
export const SignUp = ({
17+
userRepository,
18+
dataverseInfoRepository,
19+
hasValidTokenButNotLinkedAccount
20+
}: SignUpProps) => {
1521
const { t } = useTranslation('signUp')
1622
const { setIsLoading } = useLoading()
1723

@@ -58,7 +64,10 @@ export const SignUp = ({ userRepository, hasValidTokenButNotLinkedAccount }: Sig
5864
<Tabs.Tab eventKey="accountInfo" title={t('accountInfo')}>
5965
<div className={styles['tab-container']}>
6066
{hasValidTokenButNotLinkedAccount && (
61-
<ValidTokenNotLinkedAccountForm userRepository={userRepository} />
67+
<ValidTokenNotLinkedAccountForm
68+
userRepository={userRepository}
69+
dataverseInfoRepository={dataverseInfoRepository}
70+
/>
6271
)}
6372
</div>
6473
</Tabs.Tab>

src/sections/sign-up/SignUpFactory.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { ReactElement } from 'react'
22
import { useSearchParams } from 'react-router-dom'
33
import { SignUp } from './SignUp'
44
import { QueryParamKey } from '../Route.enum'
5-
65
import { UserJSDataverseRepository } from '@/users/infrastructure/repositories/UserJSDataverseRepository'
6+
import { DataverseInfoJSDataverseRepository } from '@/info/infrastructure/repositories/DataverseInfoJSDataverseRepository'
77

88
const userRepository = new UserJSDataverseRepository()
9+
const dataverseInfoRepository = new DataverseInfoJSDataverseRepository()
910

1011
export class SignUpFactory {
1112
static create(): ReactElement {
@@ -22,6 +23,7 @@ function SignUpWithSearchParams() {
2223
return (
2324
<SignUp
2425
userRepository={userRepository}
26+
dataverseInfoRepository={dataverseInfoRepository}
2527
hasValidTokenButNotLinkedAccount={hasValidTokenButNotLinkedAccount}
2628
/>
2729
)

src/sections/sign-up/valid-token-not-linked-account-form/FormFields.module.scss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
}
2020

2121
.terms-of-use-wrapper {
22-
max-height: 200px;
22+
height: 100px;
23+
min-height: 100px;
2324
padding: 12px;
2425
overflow-y: auto;
2526
background-color: #f5f5f5;
2627
border: solid 1px $dv-border-color;
2728
border-radius: 6px;
29+
resize: vertical;
2830
}

src/sections/sign-up/valid-token-not-linked-account-form/FormFields.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ export const FormFields = ({ userRepository, formDefaultValues, termsOfUse }: Fo
318318
<div
319319
className={styles['terms-of-use-wrapper']}
320320
dangerouslySetInnerHTML={{
321-
__html: termsOfUse ? termsOfUse : t('fields.termsAccepted.noTerms')
321+
__html: termsOfUse
322322
}}
323323
/>
324324

src/sections/sign-up/valid-token-not-linked-account-form/ValidTokenNotLinkedAccountForm.tsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
import { useContext } from 'react'
22
import { AuthContext } from 'react-oauth2-code-pkce'
3+
import { Alert } from '@iqss/dataverse-design-system'
34
import { UserRepository } from '@/users/domain/repositories/UserRepository'
4-
// import { useGetTermsOfUse } from '@/shared/hooks/useGetTermsOfUse'
5+
import { DataverseInfoRepository } from '@/info/domain/repositories/DataverseInfoRepository'
6+
import { useGetTermsOfUse } from '@/shared/hooks/useGetTermsOfUse'
57
import { OIDC_STANDARD_CLAIMS, type ValidTokenNotLinkedAccountFormData } from './types'
68
import { ValidTokenNotLinkedAccountFormHelper } from './ValidTokenNotLinkedAccountFormHelper'
79
import { FormFields } from './FormFields'
8-
// import { FormFieldsSkeleton } from './FormFieldsSkeleton'
10+
import { FormFieldsSkeleton } from './FormFieldsSkeleton'
911

1012
interface ValidTokenNotLinkedAccountFormProps {
1113
userRepository: UserRepository
14+
dataverseInfoRepository: DataverseInfoRepository
1215
}
1316

1417
export const ValidTokenNotLinkedAccountForm = ({
15-
userRepository
18+
userRepository,
19+
dataverseInfoRepository
1620
}: ValidTokenNotLinkedAccountFormProps) => {
1721
const { tokenData } = useContext(AuthContext)
1822

19-
// TODO - Use actual terms of use when available in API 👇
20-
// const { termsOfUse, isLoading: isLoadingTermsOfUse } =
21-
// useGetTermsOfUse(dataverseInfoRepository)
23+
const {
24+
termsOfUse,
25+
isLoading: isLoadingTermsOfUse,
26+
error: errorTermsOfUse
27+
} = useGetTermsOfUse(dataverseInfoRepository)
2228

2329
const defaultUserName =
2430
ValidTokenNotLinkedAccountFormHelper.getTokenDataValue<string>(
@@ -58,15 +64,19 @@ export const ValidTokenNotLinkedAccountForm = ({
5864
termsAccepted: false
5965
}
6066

61-
// if (isLoadingTermsOfUse) {
62-
// return <FormFieldsSkeleton />
63-
// }
67+
if (isLoadingTermsOfUse) {
68+
return <FormFieldsSkeleton />
69+
}
70+
71+
if (errorTermsOfUse) {
72+
return <Alert variant="danger">{errorTermsOfUse}</Alert>
73+
}
6474

6575
return (
6676
<FormFields
6777
userRepository={userRepository}
6878
formDefaultValues={formDefaultValues}
69-
termsOfUse=""
79+
termsOfUse={termsOfUse}
7080
/>
7181
)
7282
}

src/sections/sign-up/valid-token-not-linked-account-form/useSubmitUser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ export const useSubmitUser = (
6969
})
7070
.catch((err: WriteError) => {
7171
const error = new JSDataverseWriteErrorHandler(err)
72-
const formattedError = error.getReasonWithoutStatusCode() ?? error.getErrorMessage()
72+
const formattedError =
73+
error.getReasonWithoutStatusCode() ?? /* istanbul ignore next */ error.getErrorMessage()
7374

7475
setSubmitError(formattedError)
7576
setSubmissionStatus(SubmissionStatus.Errored)

0 commit comments

Comments
 (0)