From 565db8c8b790dc2eb19a7f18fd781976c39d94fd Mon Sep 17 00:00:00 2001 From: "makabe.t" Date: Tue, 24 Oct 2023 08:09:31 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20508:=20develop=E5=8B=95=E4=BD=9C?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E3=81=A7=E3=81=AE=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task2893: develop動作確認での不具合対応](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2893) - ワークタイプが削除済みで、別タブで一覧更新前のワークタイプに対する挙動を修正しました。 - ワークタイプ編集実行時に更新を促すエラーメッセージに修正 - オプションアイテムボタンを押下してもポップアップが開かないようにしています。 ## レビューポイント - 表示メッセージは適切か - ポップアップ表示制御は適切か ## UIの変更 - [Task2893](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/Task2893?csf=1&web=1&e=duKmyw) ## 動作確認状況 - ローカルで確認 --- .../features/workflow/worktype/operations.ts | 17 ++++++++- .../editOptionItemsPopup.tsx | 37 ++++++++++++++++--- dictation_client/src/translation/de.json | 6 ++- dictation_client/src/translation/en.json | 6 ++- dictation_client/src/translation/es.json | 6 ++- dictation_client/src/translation/fr.json | 6 ++- 6 files changed, 63 insertions(+), 15 deletions(-) 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