Merged PR 508: develop動作確認での不具合対応

## 概要
[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)

## 動作確認状況
- ローカルで確認
This commit is contained in:
makabe.t 2023-10-24 08:09:31 +00:00
parent 48b45d2773
commit 565db8c8b7
6 changed files with 63 additions and 15 deletions

View File

@ -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 });

View File

@ -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<EditOptionItemsPopupProps> = (
const closePopup = useCallback(() => {
onClose();
setCanDisplay(false);
dispatch(cleanupWorktype());
setIsPushSaveButton(false);
}, [onClose, dispatch]);
@ -47,11 +49,28 @@ export const EditOptionItemsPopup: React.FC<EditOptionItemsPopupProps> = (
// 保存ボタンを押したかどうか
const [isPushSaveButton, setIsPushSaveButton] = useState<boolean>(false);
// ポップアップを表示するかどうか
const [canDisplay, setCanDisplay] = useState<boolean>(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<EditOptionItemsPopupProps> = (
]);
return (
<div className={`${styles.modal} ${isOpen ? styles.isShow : ""}`}>
<div
className={`${styles.modal} ${isOpen && canDisplay ? styles.isShow : ""}`}
>
<div className={styles.modalBox}>
<p className={styles.modalTitle}>
{t(getTranslationID("worktypeIdSetting.label.optionItem"))}
@ -242,7 +263,11 @@ export const EditOptionItemsPopup: React.FC<EditOptionItemsPopupProps> = (
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 && (

View File

@ -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"
}
}
}
}

View File

@ -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"
}
}
}
}

View File

@ -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"
}
}
}
}

View File

@ -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"
}
}
}
}