import React, { useCallback, useEffect, useState } from "react"; import { AppDispatch } from "app/store"; import progress_activit from "assets/images/progress_activit.svg"; import { addAssignee, removeAssignee, changeAuthor, changeTemplate, changeWorktype, clearWorkflow, selectIsAddLoading, selectWorkflowAssinee, selectWorkflowError, selectWorkflowRelations, selectSelectedWorkflow, selectAuthorId, selectWorktypeId, setAssignees, selectTemplateId, } from "features/workflow"; import { getworkflowRelationsAsync, listWorkflowAsync, updateWorkflowAsync, } from "features/workflow/operations"; import { useTranslation } from "react-i18next"; import { useDispatch, useSelector } from "react-redux"; import styles from "styles/app.module.scss"; import { getTranslationID } from "translation"; import close from "../../assets/images/close.svg"; interface EditWorkflowPopupProps { onClose: () => void; } export const EditWorkflowPopup: React.FC = ( props ): JSX.Element => { const { onClose } = props; const dispatch: AppDispatch = useDispatch(); const [t] = useTranslation(); // 保存ボタンを押したかどうか const [isPushEditButton, setIsPushEditButton] = useState(false); const workflow = useSelector(selectSelectedWorkflow); const authorId = useSelector(selectAuthorId); const worktypeId = useSelector(selectWorktypeId); const templateId = useSelector(selectTemplateId); const workflowRelations = useSelector(selectWorkflowRelations); const { poolAssignees, selectedAssignees } = useSelector( selectWorkflowAssinee ); const isLoading = useSelector(selectIsAddLoading); const { hasAuthorIdEmptyError, hasSelectedWorkflowAssineeEmptyError } = useSelector(selectWorkflowError); useEffect(() => { dispatch(getworkflowRelationsAsync()); // ポップアップのアンマウント時に初期化を行う return () => { dispatch(clearWorkflow()); setIsPushEditButton(false); }; }, [dispatch]); useEffect(() => { dispatch(changeAuthor({ authorId: workflow?.author?.id })); dispatch(changeWorktype({ worktypeId: workflow?.worktype?.id })); dispatch(changeTemplate({ templateId: workflow?.template?.id })); dispatch(setAssignees({ assignees: workflow?.typists ?? [] })); }, [dispatch, workflow]); const changeWorktypeId = useCallback( (target: string) => { // 空文字の場合はundefinedをdispatchする if (target === "") { dispatch(changeWorktype({ worktypeId: undefined })); } else if (!Number.isNaN(Number(target))) { dispatch(changeWorktype({ worktypeId: Number(target) })); } }, [dispatch] ); const changeTemplateId = useCallback( (target: string) => { // 空文字の場合はundefinedをdispatchする if (target === "") { dispatch(changeTemplate({ templateId: undefined })); } else if (!Number.isNaN(Number(target))) { dispatch(changeTemplate({ templateId: Number(target) })); } }, [dispatch] ); const changeAuthorId = useCallback( (target: string) => { if (!Number.isNaN(target)) { dispatch(changeAuthor({ authorId: Number(target) })); } }, [dispatch] ); // 保存ボタン押下時の処理 const handleSave = useCallback(async () => { setIsPushEditButton(true); // エラーチェック if (hasAuthorIdEmptyError || hasSelectedWorkflowAssineeEmptyError) { return; } const { meta } = await dispatch(updateWorkflowAsync()); if (meta.requestStatus === "fulfilled") { onClose(); dispatch(listWorkflowAsync()); } }, [ dispatch, hasAuthorIdEmptyError, hasSelectedWorkflowAssineeEmptyError, onClose, ]); return (

{t(getTranslationID("workflowPage.label.editRoutingRule"))} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions */} close

{t(getTranslationID("workflowPage.label.authorID"))}
{isPushEditButton && hasAuthorIdEmptyError && ( {t(getTranslationID("workflowPage.message.inputEmptyError"))} )}
{t(getTranslationID("workflowPage.label.worktypeOptional"))}
{t(getTranslationID("typistGroupSetting.label.transcriptionist"))}
  • {t(getTranslationID("workflowPage.label.selected"))}
  • {selectedAssignees?.map((x) => { const key = `${x.typistName}_${ x.typistUserId ?? x.typistGroupId }`; return (
  • { dispatch(removeAssignee({ assignee: x })); }} />
  • ); })}

  • {t(getTranslationID("workflowPage.label.pool"))}
  • {poolAssignees?.map((x) => { const key = `${x.typistName}_${ x.typistUserId ?? x.typistGroupId }`; return (
  • dispatch(addAssignee({ assignee: x }))} />
  • ); })}
{isPushEditButton && hasSelectedWorkflowAssineeEmptyError && ( {t( getTranslationID( "workflowPage.message.selectedTypistEmptyError" ) )} )}
{t(getTranslationID("workflowPage.label.templateOptional"))}
{isLoading && ( Loading )}
); };