diff --git a/dictation_client/src/features/workflow/worktype/operations.ts b/dictation_client/src/features/workflow/worktype/operations.ts index fa173c1..dd83e56 100644 --- a/dictation_client/src/features/workflow/worktype/operations.ts +++ b/dictation_client/src/features/workflow/worktype/operations.ts @@ -167,6 +167,12 @@ export const editWorktypeAsync = createAsyncThunk< "worktypeIdSetting.message.alreadyWorktypeIdExistError" ); } + // Worktypeの保存に失敗した場合 + if (error.code === "E011003") { + errorMessage = getTranslationID( + "worktypeIdSetting.message.updateWorktypeFailedError" + ); + } thunkApi.dispatch( openSnackbar({ @@ -209,10 +215,19 @@ export const getOptionItemsAsync = createAsyncThunk< // e ⇒ errorObjectに変換" const error = createErrorObject(e); + let errorMessage = getTranslationID("common.message.internalServerError"); + + // WorktypeIDが存在しない場合 + if (error.code === "E011003") { + errorMessage = getTranslationID( + "worktypeIdSetting.message.worktypeIdAlreadyDeletedError" + ); + } + thunkApi.dispatch( openSnackbar({ level: "error", - message: getTranslationID("common.message.internalServerError"), + message: errorMessage, }) ); return thunkApi.rejectWithValue({ error }); diff --git a/dictation_client/src/pages/WorkTypeIdSettingPage/editOptionItemsPopup.tsx b/dictation_client/src/pages/WorkTypeIdSettingPage/editOptionItemsPopup.tsx index 36f07a7..fb547da 100644 --- a/dictation_client/src/pages/WorkTypeIdSettingPage/editOptionItemsPopup.tsx +++ b/dictation_client/src/pages/WorkTypeIdSettingPage/editOptionItemsPopup.tsx @@ -15,6 +15,7 @@ import { } from "features/workflow/worktype"; import { OPTION_ITEMS_DEFAULT_VALUE_TYPE } from "features/workflow/worktype/constants"; import { isOptionItemDefaultValueType } from "features/workflow/worktype/types"; +import { isErrorObject } from "common/errors"; import close from "../../assets/images/close.svg"; import progress_activit from "../../assets/images/progress_activit.svg"; @@ -36,6 +37,7 @@ export const EditOptionItemsPopup: React.FC = ( const closePopup = useCallback(() => { onClose(); + setCanDisplay(false); dispatch(cleanupWorktype()); setIsPushSaveButton(false); }, [onClose, dispatch]); @@ -47,11 +49,28 @@ export const EditOptionItemsPopup: React.FC = ( // 保存ボタンを押したかどうか const [isPushSaveButton, setIsPushSaveButton] = useState(false); + // ポップアップを表示するかどうか + const [canDisplay, setCanDisplay] = useState(false); + useEffect(() => { - // optionItems取得 - if (isOpen) { - dispatch(getOptionItemsAsync()); - } + (async () => { + // optionItems取得 + if (isOpen) { + const { meta, payload } = await dispatch(getOptionItemsAsync()); + + if ( + meta.requestStatus === "rejected" && + isErrorObject(payload) && + payload.error.code === "E011003" + ) { + // WorkTypeが存在しない場合はポップアップを閉じる + closePopup(); + } else { + setCanDisplay(true); + } + } + })(); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [dispatch, isOpen]); const onChangeOptionItem = useCallback( @@ -91,7 +110,9 @@ export const EditOptionItemsPopup: React.FC = ( ]); return ( -
+

{t(getTranslationID("worktypeIdSetting.label.optionItem"))} @@ -242,7 +263,11 @@ export const EditOptionItemsPopup: React.FC = ( type="button" name="submit" value={t(getTranslationID("common.label.save"))} - className={`${styles.formSubmit} ${styles.marginBtm1} ${styles.isActive}`} + className={`${styles.formSubmit} ${styles.marginBtm1} ${ + optionItems !== undefined && optionItems.length > 0 + ? styles.isActive + : "" + }`} onClick={onSubmit} /> {isLoading && ( diff --git a/dictation_client/src/translation/de.json b/dictation_client/src/translation/de.json index b757f77..55ce9ea 100644 --- a/dictation_client/src/translation/de.json +++ b/dictation_client/src/translation/de.json @@ -427,10 +427,12 @@ "alreadyWorktypeIdExistError": "Diese Aufgabentypkennung ist derzeit registriert. Bitte registrieren Sie sich mit einer anderen Worktype-ID.", "worktypeIDLimitError": "Die Aufgabentypkennung kann nicht hinzugefügt werden, da die maximale Anzahl an Registrierungen erreicht wurde.", "optionItemInvalidError": "(de)Default valueがDefaultに設定されている場合、Initial valueは入力が必須です。", + "worktypeIdAlreadyDeletedError": "(de)WorktypeIDは既に削除されています。画面を更新し、再度ご確認ください", "optionItemSaveFailedError": "(de)オプションアイテムの保存に失敗しました。画面を更新し、再度実行してください", "optionItemIncorrectError": "(de)入力されたItem labelまたはInitial valueがルールを満たしていません。下記のルールを満たす値を入力してください", "updateActiveWorktypeFailedError": "(de)Active WorktypeIDの保存に失敗しました。画面を更新し、再度実行してください", - "worktypeInUseError": "(de)このWorktype IDはルーティングルールで使用されているため削除できません。" + "worktypeInUseError": "(de)このWorktype IDはルーティングルールで使用されているため削除できません。", + "updateWorktypeFailedError": "(de)WorktypeIDの保存に失敗しました。画面を更新し、再度ご確認ください" } }, "templateFilePage": { @@ -510,4 +512,4 @@ "button": "(de)Continue" } } -} +} \ No newline at end of file diff --git a/dictation_client/src/translation/en.json b/dictation_client/src/translation/en.json index a58f19d..1958181 100644 --- a/dictation_client/src/translation/en.json +++ b/dictation_client/src/translation/en.json @@ -427,10 +427,12 @@ "alreadyWorktypeIdExistError": "This Worktype ID is currently registered. Please register with a different Worktype ID.", "worktypeIDLimitError": "Worktype ID cannot be added because it has reached the maximum number of registrations.", "optionItemInvalidError": "Default valueがDefaultに設定されている場合、Initial valueは入力が必須です。", + "worktypeIdAlreadyDeletedError": "WorktypeIDは既に削除されています。画面を更新し、再度ご確認ください", "optionItemSaveFailedError": "オプションアイテムの保存に失敗しました。画面を更新し、再度実行してください", "optionItemIncorrectError": "入力されたItem labelまたはInitial valueがルールを満たしていません。下記のルールを満たす値を入力してください", "updateActiveWorktypeFailedError": "Active WorktypeIDの保存に失敗しました。画面を更新し、再度実行してください", - "worktypeInUseError": "このWorktype IDはルーティングルールで使用されているため削除できません。" + "worktypeInUseError": "このWorktype IDはルーティングルールで使用されているため削除できません。", + "updateWorktypeFailedError": "WorktypeIDの保存に失敗しました。画面を更新し、再度ご確認ください" } }, "templateFilePage": { @@ -510,4 +512,4 @@ "button": "Continue" } } -} +} \ No newline at end of file diff --git a/dictation_client/src/translation/es.json b/dictation_client/src/translation/es.json index 9ba29ad..6bd2dbb 100644 --- a/dictation_client/src/translation/es.json +++ b/dictation_client/src/translation/es.json @@ -427,10 +427,12 @@ "alreadyWorktypeIdExistError": "Este ID de tipo de trabajo está registrado actualmente. Regístrese con una ID de tipo de trabajo diferente.", "worktypeIDLimitError": "No se puede agregar el ID de tipo de trabajo porque ha alcanzado el número máximo de registros.", "optionItemInvalidError": "(es)Default valueがDefaultに設定されている場合、Initial valueは入力が必須です。", + "worktypeIdAlreadyDeletedError": "(es)WorktypeIDは既に削除されています。画面を更新し、再度ご確認ください", "optionItemSaveFailedError": "(es)オプションアイテムの保存に失敗しました。画面を更新し、再度実行してください", "optionItemIncorrectError": "(es)入力されたItem labelまたはInitial valueがルールを満たしていません。下記のルールを満たす値を入力してください", "updateActiveWorktypeFailedError": "(es)Active WorktypeIDの保存に失敗しました。画面を更新し、再度実行してください", - "worktypeInUseError": "(es)このWorktype IDはルーティングルールで使用されているため削除できません。" + "worktypeInUseError": "(es)このWorktype IDはルーティングルールで使用されているため削除できません。", + "updateWorktypeFailedError": "(es)WorktypeIDの保存に失敗しました。画面を更新し、再度ご確認ください" } }, "templateFilePage": { @@ -510,4 +512,4 @@ "button": "(es)Continue" } } -} +} \ No newline at end of file diff --git a/dictation_client/src/translation/fr.json b/dictation_client/src/translation/fr.json index 5a7731e..e236a8b 100644 --- a/dictation_client/src/translation/fr.json +++ b/dictation_client/src/translation/fr.json @@ -427,10 +427,12 @@ "alreadyWorktypeIdExistError": "Cet ID de type de travail est actuellement enregistré. Veuillez vous inscrire avec un identifiant de type de travail différent.", "worktypeIDLimitError": "L'ID du type de travail ne peut pas être ajouté car il a atteint le nombre maximum d'enregistrements.", "optionItemInvalidError": "(fr)Default valueがDefaultに設定されている場合、Initial valueは入力が必須です。", + "worktypeIdAlreadyDeletedError": "(fr)WorktypeIDは既に削除されています。画面を更新し、再度ご確認ください", "optionItemSaveFailedError": "(fr)オプションアイテムの保存に失敗しました。画面を更新し、再度実行してください", "optionItemIncorrectError": "(fr)入力されたItem labelまたはInitial valueがルールを満たしていません。下記のルールを満たす値を入力してください", "updateActiveWorktypeFailedError": "(fr)Active WorktypeIDの保存に失敗しました。画面を更新し、再度実行してください", - "worktypeInUseError": "(fr)このWorktype IDはルーティングルールで使用されているため削除できません。" + "worktypeInUseError": "(fr)このWorktype IDはルーティングルールで使用されているため削除できません。", + "updateWorktypeFailedError": "(fr)WorktypeIDの保存に失敗しました。画面を更新し、再度ご確認ください" } }, "templateFilePage": { @@ -510,4 +512,4 @@ "button": "(fr)Continue" } } -} +} \ No newline at end of file