import React, { useCallback, useEffect, useState } from "react"; import { AppDispatch } from "app/store"; import { useTranslation } from "react-i18next"; import { useDispatch, useSelector } from "react-redux"; import styles from "styles/app.module.scss"; import Footer from "components/footer"; import Header from "components/header"; import { listTasksAsync, selectCurrentPage, selectTasks, selectTotal, selectTotalPage, DIRECTION, DisplayInfoType, INIT_DISPLAY_INFO, SORTABLE_COLUMN, selectDisplayInfo, changeDisplayInfo, getSortColumnAsync, selectParamName, selectDirection, changeParamName, changeDirection, changeAuthorId, changeFileName, changeSelectedTask, openFilePropertyInfo, SortableColumnType, changeAssignee, listTypistsAsync, listTypistGroupsAsync, DirectionType, selectIsLoading, playbackAsync, cancelAsync, reopenAsync, PRIORITY, deleteTaskAsync, isSortableColumnType, isDirectionType, getTaskFiltersAsync, selectAuthorId, selectFilename, updateTaskFiltersAsync, updateSortColumnAsync, } from "features/dictation"; import { getTranslationID } from "translation"; import { Task } from "api/api"; import { isAdminUser, isAuthorUser, isTypistUser } from "features/auth"; import { STATUS, LIMIT_TASK_NUM } from "../../features/dictation"; import uploaded from "../../assets/images/uploaded.svg"; import pending from "../../assets/images/pending.svg"; import inprogress from "../../assets/images/inprogress.svg"; import finished from "../../assets/images/finished.svg"; import backup from "../../assets/images/backup.svg"; import lock from "../../assets/images/lock.svg"; import progress_activit from "../../assets/images/progress_activit.svg"; import download from "../../assets/images/download.svg"; import open_in_new from "../../assets/images/open_in_new.svg"; import { DisPlayInfo } from "./displayInfo"; import { ChangeTranscriptionistPopup } from "./changeTranscriptionistPopup"; import { BackupPopup } from "./backupPopup"; import { FilePropertyPopup } from "./filePropertyPopup"; import searchIcon from "../../assets/images/search.svg"; const DictationPage: React.FC = (): JSX.Element => { const dispatch: AppDispatch = useDispatch(); const [t] = useTranslation(); const isAdmin = isAdminUser(); const isAuthor = isAuthorUser(); const isTypist = isTypistUser(); const isNone = !isAuthor && !isTypist; const isDeletableRole = isAdmin || isAuthor; // popup制御関係 const [ isChangeTranscriptionistPopupOpen, setIsChangeTranscriptionistPopupOpen, ] = useState(false); const [isFilePropertyPopupOpen, setIsFilePropertyPopupOpen] = useState(false); const [isBackupPopupOpen, setIsBackupPopupOpen] = useState(false); const onChangeTranscriptionistPopupOpen = useCallback( (task: Task) => { dispatch(changeAssignee({ selected: task.assignees })); dispatch(changeSelectedTask({ task })); setIsChangeTranscriptionistPopupOpen(true); }, [dispatch, setIsChangeTranscriptionistPopupOpen] ); const onClickFileProperty = useCallback( (task: Task) => { dispatch(openFilePropertyInfo({ task })); setIsFilePropertyPopupOpen(true); }, [dispatch, setIsFilePropertyPopupOpen] ); // 各カラムの表示/非表示 const displayColumn = useSelector(selectDisplayInfo); // フィルターするステータス const [filterUploaded, setFilterUploaded] = useState(true); const [filterPending, setFilterPending] = useState(true); const [filterInProgress, setFilterInProgress] = useState(true); const [filterFinished, setFilterFinished] = useState(true); const [filterBackup, setFilterBackup] = useState(false); // 検索条件の入力値 const [filterConditionAuthorId, setFilterConditionAuthorId] = useState(""); const [filterConditionFileName, setFilterConditionFileName] = useState(""); // ソート対象カラム const sortableParamName = useSelector(selectParamName); const sortDirection = useSelector(selectDirection); // task_filtersテーブルの検索条件 const authorId = useSelector(selectAuthorId); const fileName = useSelector(selectFilename); const tasks = useSelector(selectTasks); const total = useSelector(selectTotal); const totalPage = useSelector(selectTotalPage); const currentPage = useSelector(selectCurrentPage); const isLoading = useSelector(selectIsLoading); // ページネーションのボタンクリック時のアクション const getFirstPage = useCallback(() => { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [ dispatch, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ]); const getLastPage = useCallback(() => { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); const lastPageOffset = (totalPage - 1) * LIMIT_TASK_NUM; dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: lastPageOffset, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [ dispatch, totalPage, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ]); const getPrevPage = useCallback(() => { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); const prevPageOffset = (currentPage - 2) * LIMIT_TASK_NUM; dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: prevPageOffset, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [ dispatch, currentPage, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ]); const getNextPage = useCallback(() => { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); const nextPageOffset = currentPage * LIMIT_TASK_NUM; dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: nextPageOffset, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [ dispatch, currentPage, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ]); const updateSortColumn = useCallback( (paramName: SortableColumnType) => { const currentDirection = sortableParamName === paramName && sortDirection === DIRECTION.ASC ? DIRECTION.DESC : DIRECTION.ASC; dispatch(changeDirection({ direction: currentDirection })); dispatch(changeParamName({ paramName })); // ローカルストレージにソート情報を保存する localStorage.setItem( "sortCriteria", `direction:${currentDirection},paramName:${paramName}` ); const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: currentDirection, paramName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [ dispatch, sortableParamName, sortDirection, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, authorId, fileName, ] ); const getFilter = ( hasUploaded: boolean, hasInProgress: boolean, hasPending: boolean, hasFinished: boolean, hasBackup: boolean ): string | undefined => { const filterStatus = []; if (hasUploaded) { filterStatus.push(STATUS.UPLOADED); } if (hasInProgress) { filterStatus.push(STATUS.INPROGRESS); } if (hasPending) { filterStatus.push(STATUS.PENDING); } if (hasFinished) { filterStatus.push(STATUS.FINISHED); } if (hasBackup) { filterStatus.push(STATUS.BACKUP); } if (filterStatus.length === 0) { return undefined; } return filterStatus.join(","); }; // ステータスフィルターの変更時アクション const updateFilter = useCallback( ( hasUploaded: boolean, hasInProgress: boolean, hasPending: boolean, hasFinished: boolean, hasBackup: boolean ) => { const filter = getFilter( hasUploaded, hasInProgress, hasPending, hasFinished, hasBackup ); // フィルターの状態をローカルストレージに保存する localStorage.setItem( "filterCriteria", JSON.stringify({ Uploaded: hasUploaded, InProgress: hasInProgress, Pending: hasPending, Finished: hasFinished, Backup: hasBackup, }) ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); }, [dispatch, sortDirection, sortableParamName, authorId, fileName] ); const onPlayBack = useCallback( async (audioFileId: number) => { if ( /* eslint-disable-next-line no-alert */ !window.confirm(t(getTranslationID("common.message.dialogConfirm"))) ) { return; } const { meta } = await dispatch( playbackAsync({ audioFileId, direction: sortDirection, paramName: sortableParamName, filterConditionAuthorId: authorId, filterConditionFileName: fileName, }) ); if (meta.requestStatus === "fulfilled") { // ローカルストレージにソート情報を削除する localStorage.removeItem("sortCriteria"); const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); const url = `${import.meta.env.VITE_DESK_TOP_APP_SCHEME }:playback?audioId=${audioFileId}`; const a = document.createElement("a"); a.href = url; document.body.appendChild(a); a.click(); document.body.removeChild(a); } }, [ dispatch, filterBackup, filterFinished, filterInProgress, filterPending, filterUploaded, sortDirection, sortableParamName, authorId, fileName, t, ] ); const onClosePopup = useCallback( (isChanged: boolean) => { if (isChanged) { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); } setIsChangeTranscriptionistPopupOpen(false); }, [ dispatch, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ] ); const onCancel = useCallback( async (audioFileId: number) => { if ( /* eslint-disable-next-line no-alert */ !window.confirm(t(getTranslationID("common.message.dialogConfirm"))) ) { return; } const { meta } = await dispatch( cancelAsync({ audioFileId, direction: sortDirection, paramName: sortableParamName, isTypist, filterConditionAuthorId: authorId, filterConditionFileName: fileName, }) ); if (meta.requestStatus === "fulfilled") { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); } }, [ dispatch, filterBackup, filterFinished, filterInProgress, filterPending, filterUploaded, isTypist, sortDirection, sortableParamName, authorId, fileName, t, ] ); const onReopen = useCallback( async (audioFileId: number) => { if ( /* eslint-disable-next-line no-alert */ !window.confirm(t(getTranslationID("common.message.dialogConfirm"))) ) { return; } const { meta } = await dispatch( reopenAsync({ audioFileId, direction: sortDirection, paramName: sortableParamName, isTypist, filterConditionAuthorId: authorId, filterConditionFileName: fileName, }) ); if (meta.requestStatus === "fulfilled") { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); } }, [ dispatch, filterBackup, filterFinished, filterInProgress, filterPending, filterUploaded, isTypist, sortDirection, sortableParamName, authorId, fileName, t, ] ); const onCloseBackupPopup = useCallback(() => { setIsBackupPopupOpen(false); }, []); const onClickBackup = useCallback(() => { setIsBackupPopupOpen(true); }, []); const onCloseFilePropertyPopup = useCallback( (isChanged: boolean) => { if (isChanged) { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); } setIsFilePropertyPopupOpen(false); }, [ dispatch, filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup, sortDirection, sortableParamName, authorId, fileName, ] ); const onChangeFilterConditionFileName = useCallback( (e: React.ChangeEvent) => { setFilterConditionFileName(e.target.value.trimStart()); }, [setFilterConditionFileName] ); const onChangeFilterConditionAuthorId = useCallback( (e: React.ChangeEvent) => { // 先頭に%が入力されるとWAFのルールでブロックされてしまう。 // Authorの登録時に「_」以外の記号は許可されていないため、「_」と半角英数字以外の文字は除去。 const correctAuthorId = e.target.value.replace(/[^a-zA-Z0-9_]/g, ""); setFilterConditionAuthorId(correctAuthorId); }, [setFilterConditionAuthorId] ); const sortIconClass = ( currentParam: SortableColumnType, currentDirection: DirectionType, column: SortableColumnType ) => { if (currentParam !== column) { return ""; } if (currentDirection === DIRECTION.DESC) { return styles.isActiveZa; } return styles.isActiveAz; }; const onDeleteTask = useCallback( async (audioFileId: number) => { if ( /* eslint-disable-next-line no-alert */ !window.confirm(t(getTranslationID("common.message.dialogConfirm"))) ) { return; } const { meta } = await dispatch( deleteTaskAsync({ audioFileId, }) ); if (meta.requestStatus === "fulfilled") { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId, fileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); } }, [ dispatch, filterBackup, filterFinished, filterInProgress, filterPending, filterUploaded, sortDirection, sortableParamName, authorId, fileName, t, ] ); const requestSearch = useCallback( async (e: React.FormEvent) => { e.preventDefault(); const { meta: taskFilterMeta } = await dispatch( updateTaskFiltersAsync({ filterConditionFileName, filterConditionAuthorId, }) ); const { meta: sortCriteriaMeta } = await dispatch( updateSortColumnAsync({ direction: sortDirection, paramName: sortableParamName, }) ); if ( taskFilterMeta.requestStatus === "fulfilled" && sortCriteriaMeta.requestStatus === "fulfilled" ) { const filter = getFilter( filterUploaded, filterInProgress, filterPending, filterFinished, filterBackup ); dispatch(changeAuthorId({ authorId: filterConditionAuthorId })); dispatch(changeFileName({ fileName: filterConditionFileName })); // 検索した条件でタスク一覧を取得する dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction: sortDirection, paramName: sortableParamName, authorId: filterConditionAuthorId, fileName: filterConditionFileName, }) ); } }, [ dispatch, filterBackup, filterFinished, filterInProgress, filterPending, filterUploaded, sortDirection, sortableParamName, filterConditionAuthorId, filterConditionFileName, ] ); // 初回読み込み処理 useEffect(() => { (async () => { const displayInfoValue = localStorage.getItem("displayInfo"); let displayInfo: DisplayInfoType; if (displayInfoValue) { displayInfo = JSON.parse(displayInfoValue); } else { displayInfo = INIT_DISPLAY_INFO; localStorage.setItem("displayInfo", JSON.stringify(displayInfo)); } dispatch(changeDisplayInfo({ column: displayInfo })); // フィルター状態をローカルストレージから取得する const filterValue = localStorage.getItem("filterCriteria"); let filter: string | undefined; if (filterValue) { const parsedFilter = JSON.parse(filterValue); setFilterUploaded(parsedFilter.Uploaded); setFilterInProgress(parsedFilter.InProgress); setFilterPending(parsedFilter.Pending); setFilterFinished(parsedFilter.Finished); setFilterBackup(parsedFilter.Backup); filter = getFilter( parsedFilter.Uploaded, parsedFilter.InProgress, parsedFilter.Pending, parsedFilter.Finished, parsedFilter.Backup ); } else { filter = getFilter(true, true, true, true, false); localStorage.setItem( "filterCriteria", JSON.stringify({ Uploaded: true, InProgress: true, Pending: true, Finished: true, Backup: false, }) ); } // タスクフィルター条件 const { meta: taskFilterMeta, payload: taskfilterPayload } = await dispatch(getTaskFiltersAsync()); let payloadAuthorId: string | undefined; let payloadFileName: string | undefined; if ( taskFilterMeta.requestStatus === "fulfilled" && taskfilterPayload && !("error" in taskfilterPayload) ) { payloadAuthorId = taskfilterPayload.authorId ?? ""; payloadFileName = taskfilterPayload.fileName ?? ""; dispatch(changeAuthorId({ authorId: payloadAuthorId })); dispatch(changeFileName({ fileName: payloadFileName })); // 初回表示時に検索フォームにtask_filtersテーブルの値を設定する。 setFilterConditionAuthorId(payloadAuthorId); setFilterConditionFileName(payloadFileName); } // ソート条件 const { meta: sortCriteriaMeta, payload: sortCriteriaPayload } = await dispatch(getSortColumnAsync()); let direction: DirectionType = "ASC"; let paramName: SortableColumnType = "JOB_NUMBER"; if ( sortCriteriaMeta.requestStatus === "fulfilled" && sortCriteriaPayload && !("error" in sortCriteriaPayload) ) { // ソート情報をローカルストレージから取得する const sortColumnValue = localStorage.getItem("sortCriteria") ?? ""; if (sortColumnValue === "") { direction = sortCriteriaPayload.direction; paramName = sortCriteriaPayload.paramName; } else { // ソート情報をDirectionとParamNameに分割する const sortColumn = sortColumnValue?.split(","); const localStorageDirection = sortColumn[0].split(":")[1] ?? ""; const localStorageParamName = sortColumn[1]?.split(":")[1] ?? ""; // 正常なソート情報がローカルストレージに存在する場合はローカルストレージの情報を使用する direction = isDirectionType(localStorageDirection) ? localStorageDirection : sortCriteriaPayload.direction; paramName = isSortableColumnType(localStorageParamName) ? localStorageParamName : sortCriteriaPayload.paramName; dispatch(changeDirection({ direction })); dispatch(changeParamName({ paramName })); } } // タスク一覧を取得する if (isDirectionType(direction) && isSortableColumnType(paramName)) { dispatch( listTasksAsync({ limit: LIMIT_TASK_NUM, offset: 0, filter, direction, paramName, authorId: payloadAuthorId, fileName: payloadFileName, }) ); dispatch(listTypistsAsync()); dispatch(listTypistGroupsAsync()); } })(); }, [dispatch]); return ( <>

{t(getTranslationID("dictationPage.label.title"))}

    • {t(getTranslationID("dictationPage.label.filter"))}:
  • requestSearch(e)} > onChangeFilterConditionFileName(e)} className={styles.searchInput} /> onChangeFilterConditionAuthorId(e)} className={styles.searchInput} /> {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
{displayColumn.JobNumber && ( )} {displayColumn.Status && ( )} {displayColumn.Priority && ( )} {displayColumn.Encryption && ( )} {displayColumn.AuthorId && ( )} {displayColumn.WorkType && ( )} {displayColumn.FileName && ( )} {displayColumn.FileLength && ( )} {displayColumn.FileSize && ( )} {displayColumn.RecordingStartedDate && ( )} {displayColumn.RecordingFinishedDate && ( )} {displayColumn.UploadDate && ( )} {displayColumn.TranscriptionStartedDate && ( )} {displayColumn.TranscriptionFinishedDate && ( )} {displayColumn.Transcriptionist && ( )} {displayColumn.Comment && ( )} {displayColumn.OptionItem1 && ( )} {displayColumn.OptionItem2 && ( )} {displayColumn.OptionItem3 && ( )} {displayColumn.OptionItem4 && ( )} {displayColumn.OptionItem5 && ( )} {displayColumn.OptionItem6 && ( )} {displayColumn.OptionItem7 && ( )} {displayColumn.OptionItem8 && ( )} {displayColumn.OptionItem9 && ( )} {displayColumn.OptionItem10 && ( )} {(isChangeTranscriptionistPopupOpen || !isLoading) && tasks.length !== 0 && tasks.map((x) => ( {displayColumn.JobNumber && ( )} {displayColumn.Status && ( )} {displayColumn.Priority && ( )} {displayColumn.Encryption && ( )} {displayColumn.AuthorId && ( )} {displayColumn.WorkType && ( )} {displayColumn.FileName && ( )} {displayColumn.FileLength && ( )} {displayColumn.FileSize && ( )} {displayColumn.RecordingStartedDate && ( )} {displayColumn.RecordingFinishedDate && ( )} {displayColumn.UploadDate && ( )} {displayColumn.TranscriptionStartedDate && ( )} {displayColumn.TranscriptionFinishedDate && ( )} {displayColumn.Transcriptionist && ( )} {displayColumn.Comment && ( )} {displayColumn.OptionItem1 && ( )} {displayColumn.OptionItem2 && ( )} {displayColumn.OptionItem3 && ( )} {displayColumn.OptionItem4 && ( )} {displayColumn.OptionItem5 && ( )} {displayColumn.OptionItem6 && ( )} {displayColumn.OptionItem7 && ( )} {displayColumn.OptionItem8 && ( )} {displayColumn.OptionItem9 && ( )} {displayColumn.OptionItem10 && ( )} ))}
{/** th is empty */} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.JobNumber) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.jobNumber") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.Status) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t(getTranslationID("dictationPage.label.status"))} Priority {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.Encryption) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.encryption") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.AuthorId) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.authorId") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.WorkType) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.workType") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.FileName) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.fileName") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.FileLength) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.fileLength") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.FileSize) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.fileSize") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn( SORTABLE_COLUMN.RecordingStartedDate ) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID( "dictationPage.label.recordingStartedDate" ) )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn( SORTABLE_COLUMN.RecordingFinishedDate ) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID( "dictationPage.label.recordingFinishedDate" ) )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn(SORTABLE_COLUMN.UploadDate) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID("dictationPage.label.uploadDate") )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn( SORTABLE_COLUMN.TranscriptionStartedDate ) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID( "dictationPage.label.transcriptionStartedDate" ) )} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */} updateSortColumn( SORTABLE_COLUMN.TranscriptionFinishedDate ) } style={{ pointerEvents: isLoading ? "none" : "auto", }} > {t( getTranslationID( "dictationPage.label.transcriptionFinishedDate" ) )} {t( getTranslationID( "dictationPage.label.transcriptionist" ) )} {t(getTranslationID("dictationPage.label.comment"))} {t( getTranslationID("dictationPage.label.optionItem1") )} {t( getTranslationID("dictationPage.label.optionItem2") )} {t( getTranslationID("dictationPage.label.optionItem3") )} {t( getTranslationID("dictationPage.label.optionItem4") )} {t( getTranslationID("dictationPage.label.optionItem5") )} {t( getTranslationID("dictationPage.label.optionItem6") )} {t( getTranslationID("dictationPage.label.optionItem7") )} {t( getTranslationID("dictationPage.label.optionItem8") )} {t( getTranslationID("dictationPage.label.optionItem9") )} {t( getTranslationID("dictationPage.label.optionItem10") )}
{x.jobNumber} {(() => { switch (x.status) { case STATUS.UPLOADED: return ( Uploaded ); case STATUS.PENDING: return Pending; case STATUS.FINISHED: return ( Finished ); case STATUS.INPROGRESS: return ( InProgress ); default: return Backup; } })()} {x.status} {x.priority === "01" ? PRIORITY.HIGH : PRIORITY.NORMAL} {x.isEncrypted ? ( encrypted ) : ( <>- )} {x.authorId}{x.workType}{x.fileName}{x.audioDuration}{x.fileSize} {x.audioCreatedDate} {x.audioFinishedDate} {x.audioUploadedDate} {x.transcriptionStartedDate} {x.transcriptionFinishedDate} {x.assignees.map((a, i) => ( <> {a.typistName} {i !== x.assignees.length - 1 &&
} ))}
{x.comment} {x.optionItemList[0].optionItemValue} {x.optionItemList[1].optionItemValue} {x.optionItemList[2].optionItemValue} {x.optionItemList[3].optionItemValue} {x.optionItemList[4].optionItemValue} {x.optionItemList[5].optionItemValue} {x.optionItemList[6].optionItemValue} {x.optionItemList[7].optionItemValue} {x.optionItemList[8].optionItemValue} {x.optionItemList[9].optionItemValue}
{(isChangeTranscriptionistPopupOpen || !isLoading) && tasks.length === 0 && (

{t(getTranslationID("common.message.listEmpty"))}

)}
{isLoading && ( Loading )} {/** pagenation */}
); }; export default DictationPage;