import { createAsyncThunk } from "@reduxjs/toolkit"; import type { RootState } from "app/store"; import { getTranslationID } from "translation"; import { openSnackbar } from "features/ui/uiSlice"; import { getAccessToken } from "features/auth"; import { LicensesApi, SearchPartner, PartnerLicenseInfo, } from "../../../api/api"; import { Configuration } from "../../../api/configuration"; import { ErrorObject, createErrorObject } from "../../../common/errors"; export const issueTrialLicenseAsync = createAsyncThunk< { /* Empty Object */ }, { selectedRow?: PartnerLicenseInfo | SearchPartner; }, { // rejectした時の返却値の型 rejectValue: { error: ErrorObject; }; } >("licenses/issueTrialLicenseAsync", async (args, thunkApi) => { const { selectedRow } = args; // apiのConfigurationを取得する const { getState } = thunkApi; const state = getState() as RootState; const { configuration } = state.auth; const accessToken = getAccessToken(state.auth); const config = new Configuration(configuration); const licensesApi = new LicensesApi(config); try { if (!selectedRow) { // アカウントが選択されていない場合はエラーとする。 const errorMessage = getTranslationID( "trialLicenseIssuePopupPage.message.accountNotSelected" ); thunkApi.dispatch( openSnackbar({ level: "error", message: errorMessage, }) ); return {}; } // トライアルライセンス発行処理を実行 await licensesApi.issueTrialLicenses( { issuedAccount: selectedRow.accountId, }, { headers: { authorization: `Bearer ${accessToken}` }, } ); thunkApi.dispatch( openSnackbar({ level: "info", message: getTranslationID("common.message.success"), }) ); return {}; } catch (e) { // e ⇒ errorObjectに変換" const error = createErrorObject(e); const errorMessage = getTranslationID("common.message.internalServerError"); thunkApi.dispatch( openSnackbar({ level: "error", message: errorMessage, }) ); return thunkApi.rejectWithValue({ error }); } });