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(