Merged PR 498: アカウント登録画面修正

## 概要
[Task2809: アカウント登録画面修正](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2809)

アカウント作成時の管理者ユーザー作成時に、同意済みEULAバージョンを登録する処理を追加しました。

## レビューポイント
なし

## UIの変更
なし

## 動作確認状況
ローカルで動作確認済み

## 補足
なし
This commit is contained in:
oura.a 2023-10-17 06:06:12 +00:00
parent d2c2223acf
commit 58674f7773
7 changed files with 77 additions and 3 deletions

View File

@ -0,0 +1,8 @@
/**
*
* @const {string[]}
*/
export const TERMS_DOCUMENT_TYPE = {
DPA: "DPA",
EULA: "EULA",
} as const;

View File

@ -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 });
}
});

View File

@ -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;

View File

@ -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 {

View File

@ -18,4 +18,5 @@ export interface Apps {
export interface Domain {
dealers: Dealer[];
eulaVersion: string;
}

View File

@ -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 (

View File

@ -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(() => {