From eb8c31cf057882af7e610a415ee124e679c5640f Mon Sep 17 00:00:00 2001 From: "oura.a" Date: Thu, 3 Aug 2023 08:56:39 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20300:=20view=20details=E3=81=A7?= =?UTF-8?q?=E7=AC=AC5=E9=9A=8E=E5=B1=A4=E3=81=AE=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=82=92=E5=8F=82=E7=85=A7=E3=81=97=E3=81=9F=E9=9A=9B=E3=80=81?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3=E3=82=A2=E3=82=AB=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E7=AC=AC?= =?UTF-8?q?5=E3=81=AE=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task2335: view detailsで第5階層の情報を参照した際、ログインアカウントではなく第5のアカウント情報を表示できるようにする](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2335) パートナーライセンス一覧画面から「viewDetails」ボタンを押下した際の挙動を実装しました。 具体的な対応は以下になります。 ・第五以外でも第五の情報を取得できるよう、ライセンス情報APIを呼び出す際の処理を修正 ・ライセンス情報APIのRoleGuardからtierの制限を削除 ・第五以外から第五の情報を表示する際に、「Order License」「Activate License Key」ボタンを表示しないよう修正 ・第五以外から第五の情報を表示する際に、「Return」ボタンを追加 ## レビューポイント なし ## UIの変更 https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task2335?csf=1&web=1&e=SPJKzU ## 動作確認状況 ローカルで動作確認済み ## 補足 なし --- .../license/licenseSummary/operations.ts | 16 ++- .../src/pages/LicensePage/index.tsx | 2 +- .../src/pages/LicensePage/licenseSummary.tsx | 106 +++++++++++++----- .../src/pages/LicensePage/partnerLicense.tsx | 17 ++- .../features/accounts/accounts.controller.ts | 2 +- 5 files changed, 106 insertions(+), 37 deletions(-) diff --git a/dictation_client/src/features/license/licenseSummary/operations.ts b/dictation_client/src/features/license/licenseSummary/operations.ts index 1aa675a..d4dd829 100644 --- a/dictation_client/src/features/license/licenseSummary/operations.ts +++ b/dictation_client/src/features/license/licenseSummary/operations.ts @@ -2,7 +2,11 @@ import { createAsyncThunk } from "@reduxjs/toolkit"; import type { RootState } from "app/store"; import { getTranslationID } from "translation"; import { openSnackbar } from "features/ui/uiSlice"; -import { AccountsApi, GetLicenseSummaryResponse } from "../../../api/api"; +import { + AccountsApi, + GetLicenseSummaryResponse, + PartnerLicenseInfo, +} from "../../../api/api"; import { Configuration } from "../../../api/configuration"; import { ErrorObject, createErrorObject } from "../../../common/errors"; @@ -10,7 +14,7 @@ export const getLicenseSummaryAsync = createAsyncThunk< // 正常時の戻り値の型 GetLicenseSummaryResponse, // 引数 - void, + { selectedRow?: PartnerLicenseInfo }, { // rejectした時の返却値の型 rejectValue: { @@ -30,9 +34,13 @@ export const getLicenseSummaryAsync = createAsyncThunk< headers: { authorization: `Bearer ${accessToken}` }, }); - // 自分のアカウントID取得、取得したアカウントIDを使用して表示情報を取得する - const { accountId } = getMyAccountResponse.data.account; + const { selectedRow } = args; + // 引数がない場合は自分のアカウントID取得 + const accountId = selectedRow + ? selectedRow.accountId + : getMyAccountResponse.data.account.accountId; + // 取得したアカウントIDを使用して表示情報を取得する const getLicenseSummaryResponse = await accountsApi.getLicenseSummary( { accountId }, { diff --git a/dictation_client/src/pages/LicensePage/index.tsx b/dictation_client/src/pages/LicensePage/index.tsx index 72c2d3d..26d2ab3 100644 --- a/dictation_client/src/pages/LicensePage/index.tsx +++ b/dictation_client/src/pages/LicensePage/index.tsx @@ -6,7 +6,7 @@ import { AppDispatch } from "app/store"; import { clearToken } from "features/auth"; import { useMsal } from "@azure/msal-react"; import { Token } from "common/token"; -import LicenseSummary from "./licenseSummary"; +import { LicenseSummary } from "./licenseSummary"; import PartnerLicense from "./partnerLicense"; const LicensePage: React.FC = (): JSX.Element => { diff --git a/dictation_client/src/pages/LicensePage/licenseSummary.tsx b/dictation_client/src/pages/LicensePage/licenseSummary.tsx index c6d9365..202e968 100644 --- a/dictation_client/src/pages/LicensePage/licenseSummary.tsx +++ b/dictation_client/src/pages/LicensePage/licenseSummary.tsx @@ -11,19 +11,28 @@ import { getLicenseSummaryAsync, selecLicenseSummaryInfo, } from "features/license/licenseSummary"; +import { selectSelectedRow } from "features/license/partnerLicense"; import postAdd from "../../assets/images/post_add.svg"; import history from "../../assets/images/history.svg"; import key from "../../assets/images/key.svg"; import block from "../../assets/images/block.svg"; import circle from "../../assets/images/circle.svg"; +import returnLabel from "../../assets/images/undo.svg"; import { LicenseOrderPopup } from "./licenseOrderPopup"; import { CardLicenseActivatePopup } from "./cardLicenseActivatePopup"; // eslint-disable-next-line import/no-named-as-default import LicenseOrderHistory from "./licenseOrderHistory"; -const LicenseSummary: React.FC = (): JSX.Element => { +interface LicenseSummaryProps { + onReturn?: () => void; +} +export const LicenseSummary: React.FC = ( + props +): JSX.Element => { + const { onReturn } = props; const dispatch: AppDispatch = useDispatch(); const [t] = useTranslation(); + const selectedRow = useSelector(selectSelectedRow); // popup制御関係 const [islicenseOrderPopupOpen, setIslicenseOrderPopupOpen] = useState(false); @@ -50,9 +59,17 @@ const LicenseSummary: React.FC = (): JSX.Element => { const licenseSummaryInfo = useSelector(selecLicenseSummaryInfo); useEffect(() => { - dispatch(getLicenseSummaryAsync()); + dispatch(getLicenseSummaryAsync({ selectedRow })); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [dispatch]); + // Return押下時の処理 + const returnClick = useCallback(() => { + if (onReturn) { + onReturn(); + } + }, [onReturn]); + return ( <> {/* isPopupOpenがfalseの場合はポップアップのhtmlを生成しないように対応。これによりポップアップは都度生成されて初期化の考慮が減る */} @@ -60,7 +77,7 @@ const LicenseSummary: React.FC = (): JSX.Element => { { setIslicenseOrderPopupOpen(false); - dispatch(getLicenseSummaryAsync()); + dispatch(getLicenseSummaryAsync({ selectedRow })); }} /> )} @@ -97,18 +114,46 @@ const LicenseSummary: React.FC = (): JSX.Element => {
@@ -235,4 +283,8 @@ const LicenseSummary: React.FC = (): JSX.Element => { ); }; +LicenseSummary.defaultProps = { + onReturn: undefined, +}; + export default LicenseSummary; diff --git a/dictation_client/src/pages/LicensePage/partnerLicense.tsx b/dictation_client/src/pages/LicensePage/partnerLicense.tsx index 0965e20..b6653da 100644 --- a/dictation_client/src/pages/LicensePage/partnerLicense.tsx +++ b/dictation_client/src/pages/LicensePage/partnerLicense.tsx @@ -35,6 +35,7 @@ import { } from "../../features/license/partnerLicense"; import { LicenseOrderPopup } from "./licenseOrderPopup"; import { LicenseOrderHistory } from "./licenseOrderHistory"; +import { LicenseSummary } from "./licenseSummary"; import progress_activit from "../../assets/images/progress_activit.svg"; const PartnerLicense: React.FC = (): JSX.Element => { @@ -47,6 +48,7 @@ const PartnerLicense: React.FC = (): JSX.Element => { const [islicenseOrderPopupOpen, setIslicenseOrderPopupOpen] = useState(false); const [islicenseOrderHistoryOpen, setIslicenseOrderHistoryOpen] = useState(false); + const [isViewDetailsOpen, setIsViewDetailsOpen] = useState(false); // 階層表示用 const tierNames: { [key: number]: string } = { @@ -128,13 +130,13 @@ const PartnerLicense: React.FC = (): JSX.Element => { const isTier1 = isApproveTier([TIERS.TIER1]); const isTier2ToTier4 = isApproveTier([TIERS.TIER2, TIERS.TIER3, TIERS.TIER4]); - // licenseDetailsボタン押下時 - // TODO 本PIBでは対象外のため、遷移先の内容の正しさは対象外 + // viewDetailsボタン押下時 const onClickViewDetails = useCallback( (value?: PartnerLicenseInfo) => { dispatch(changeSelectedRow({ value })); + setIsViewDetailsOpen(true); }, - [dispatch] + [dispatch, setIsViewDetailsOpen] ); // orderHistoryボタン押下時 @@ -239,7 +241,14 @@ const PartnerLicense: React.FC = (): JSX.Element => { }} /> )} - {!islicenseOrderHistoryOpen && ( + {isViewDetailsOpen && ( + { + setIsViewDetailsOpen(false); + }} + /> + )} + {!islicenseOrderHistoryOpen && !isViewDetailsOpen && (
diff --git a/dictation_server/src/features/accounts/accounts.controller.ts b/dictation_server/src/features/accounts/accounts.controller.ts index 609f84f..5545f43 100644 --- a/dictation_server/src/features/accounts/accounts.controller.ts +++ b/dictation_server/src/features/accounts/accounts.controller.ts @@ -113,7 +113,7 @@ export class AccountsController { @ApiBearerAuth() @UseGuards(AuthGuard) @UseGuards( - RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN], tiers: [TIERS.TIER5] }), + RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN] }), ) @Post('licenses/summary') async getLicenseSummary(