From 58674f7773d50479eabd703ee8f963ebf428ae45 Mon Sep 17 00:00:00 2001 From: "oura.a" Date: Tue, 17 Oct 2023 06:06:12 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20498:=20=E3=82=A2=E3=82=AB?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=88=E7=99=BB=E9=8C=B2=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task2809: アカウント登録画面修正](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2809) アカウント作成時の管理者ユーザー作成時に、同意済みEULAバージョンを登録する処理を追加しました。 ## レビューポイント なし ## UIの変更 なし ## 動作確認状況 ローカルで動作確認済み ## 補足 なし --- .../src/features/accept/constants.ts | 8 ++++ .../src/features/signup/operations.ts | 41 +++++++++++++++++++ .../src/features/signup/selectors.ts | 3 ++ .../src/features/signup/signupSlice.ts | 16 +++++++- dictation_client/src/features/signup/state.ts | 1 + .../src/pages/SignupPage/signupConfirm.tsx | 5 ++- .../src/pages/SignupPage/signupInput.tsx | 6 ++- 7 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 dictation_client/src/features/accept/constants.ts diff --git a/dictation_client/src/features/accept/constants.ts b/dictation_client/src/features/accept/constants.ts new file mode 100644 index 0000000..dd78e43 --- /dev/null +++ b/dictation_client/src/features/accept/constants.ts @@ -0,0 +1,8 @@ +/** + * 利用規約の種類 + * @const {string[]} + */ +export const TERMS_DOCUMENT_TYPE = { + DPA: "DPA", + EULA: "EULA", +} as const; diff --git a/dictation_client/src/features/signup/operations.ts b/dictation_client/src/features/signup/operations.ts index 67e505e..0190847 100644 --- a/dictation_client/src/features/signup/operations.ts +++ b/dictation_client/src/features/signup/operations.ts @@ -3,10 +3,12 @@ import type { RootState } from "app/store"; import { ErrorObject, createErrorObject } from "common/errors"; import { getTranslationID } from "translation"; import { closeSnackbar, openSnackbar } from "features/ui/uiSlice"; +import { TERMS_DOCUMENT_TYPE } from "features/accept/constants"; import { AccountsApi, CreateAccountRequest, GetDealersResponse, + TermsApi, } from "../../api/api"; import { Configuration } from "../../api/configuration"; @@ -93,3 +95,42 @@ export const getDealersAsync = createAsyncThunk< return thunkApi.rejectWithValue({ error }); } }); + +export const getLatestEulaVersionAsync = createAsyncThunk< + string, + void, + { + // rejectした時の返却値の型 + rejectValue: { + error: ErrorObject; + }; + } +>("login/getLatestEulaVersionAsync", async (args, thunkApi) => { + // apiのConfigurationを取得する + const { getState } = thunkApi; + const state = getState() as RootState; + const { configuration } = state.auth; + const config = new Configuration(configuration); + const termsApi = new TermsApi(config); + + try { + const termsInfo = await termsApi.getTermsInfo(); + const latestEulaVersion = termsInfo.data.termsInfo.find( + (val) => val.documentType === TERMS_DOCUMENT_TYPE.EULA + ); + if (!latestEulaVersion) { + throw new Error("EULA info is not found"); + } + return latestEulaVersion.version; + } catch (e) { + const error = createErrorObject(e); + thunkApi.dispatch( + openSnackbar({ + level: "error", + message: getTranslationID("common.message.internalServerError"), + }) + ); + + return thunkApi.rejectWithValue({ error }); + } +}); diff --git a/dictation_client/src/features/signup/selectors.ts b/dictation_client/src/features/signup/selectors.ts index 87c3118..823347f 100644 --- a/dictation_client/src/features/signup/selectors.ts +++ b/dictation_client/src/features/signup/selectors.ts @@ -72,3 +72,6 @@ export const selectSelectedDealer = (state: RootState) => { const { dealer } = state.signup.apps; return dealers.find((x: Dealer) => x.id === dealer); }; + +export const selectEulaVersion = (state: RootState) => + state.signup.domain.eulaVersion; diff --git a/dictation_client/src/features/signup/signupSlice.ts b/dictation_client/src/features/signup/signupSlice.ts index 5b03e63..0f6bd83 100644 --- a/dictation_client/src/features/signup/signupSlice.ts +++ b/dictation_client/src/features/signup/signupSlice.ts @@ -1,6 +1,10 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { SignupState } from "./state"; -import { getDealersAsync, signupAsync } from "./operations"; +import { + getDealersAsync, + getLatestEulaVersionAsync, + signupAsync, +} from "./operations"; const initialState: SignupState = { apps: { @@ -15,6 +19,7 @@ const initialState: SignupState = { }, domain: { dealers: [], + eulaVersion: "", }, }; @@ -74,6 +79,15 @@ export const signupSlice = createSlice({ builder.addCase(getDealersAsync.rejected, () => { // }); + builder.addCase(getLatestEulaVersionAsync.pending, () => { + // + }); + builder.addCase(getLatestEulaVersionAsync.fulfilled, (state, action) => { + state.domain.eulaVersion = action.payload; + }); + builder.addCase(getLatestEulaVersionAsync.rejected, () => { + // + }); }, }); export const { diff --git a/dictation_client/src/features/signup/state.ts b/dictation_client/src/features/signup/state.ts index 164ab04..36850ad 100644 --- a/dictation_client/src/features/signup/state.ts +++ b/dictation_client/src/features/signup/state.ts @@ -18,4 +18,5 @@ export interface Apps { export interface Domain { dealers: Dealer[]; + eulaVersion: string; } diff --git a/dictation_client/src/pages/SignupPage/signupConfirm.tsx b/dictation_client/src/pages/SignupPage/signupConfirm.tsx index ba7d477..698e1b6 100644 --- a/dictation_client/src/pages/SignupPage/signupConfirm.tsx +++ b/dictation_client/src/pages/SignupPage/signupConfirm.tsx @@ -14,6 +14,7 @@ import { selectEmail, selectPassword, selectSelectedDealer, + selectEulaVersion, } from "../../features/signup/selectors"; import { signupAsync } from "../../features/signup/operations"; @@ -27,6 +28,7 @@ const SignupConfirm: React.FC = (): JSX.Element => { const adminMail = useSelector(selectEmail); const adminPassword = useSelector(selectPassword); const dealer = useSelector(selectSelectedDealer); + const acceptedEulaVersion = useSelector(selectEulaVersion); const onSubmit = useCallback(() => { dispatch( @@ -37,7 +39,7 @@ const SignupConfirm: React.FC = (): JSX.Element => { adminName, adminMail, adminPassword, - acceptedEulaVersion: "", + acceptedEulaVersion, acceptedDpaVersion: "", token: "", }) @@ -50,6 +52,7 @@ const SignupConfirm: React.FC = (): JSX.Element => { adminName, adminMail, adminPassword, + acceptedEulaVersion, ]); return ( diff --git a/dictation_client/src/pages/SignupPage/signupInput.tsx b/dictation_client/src/pages/SignupPage/signupInput.tsx index a6576d2..b64e777 100644 --- a/dictation_client/src/pages/SignupPage/signupInput.tsx +++ b/dictation_client/src/pages/SignupPage/signupInput.tsx @@ -24,7 +24,10 @@ import { useDispatch, useSelector } from "react-redux"; import { useLocation, useNavigate } from "react-router-dom"; import { getTranslationID } from "translation"; import styles from "styles/app.module.scss"; -import { getDealersAsync } from "features/signup/operations"; +import { + getDealersAsync, + getLatestEulaVersionAsync, +} from "features/signup/operations"; import { LANGUAGE_LIST } from "features/top/constants"; import { openSnackbar } from "features/ui"; import { COUNTRY_LIST } from "./constants"; @@ -84,6 +87,7 @@ const SignupInput: React.FC = (): JSX.Element => { // 入力画面の初期化時の処理 useEffect(() => { dispatch(getDealersAsync()); + dispatch(getLatestEulaVersionAsync()); }, [dispatch]); useEffect(() => {