diff --git a/frontend/src/hooks/metadata-middleware.js b/frontend/src/hooks/metadata-middleware.js index 82401e4e14..361f70875a 100644 --- a/frontend/src/hooks/metadata-middleware.js +++ b/frontend/src/hooks/metadata-middleware.js @@ -10,7 +10,7 @@ export const MetadataMiddlewareProvider = ({ repoID, currentPath, repoInfo, onTr const { enableMetadata, enableOCR, enableTags, tagsLang } = useMetadataStatus(); return ( - + { const [isLoading, setLoading] = useState(true); + const [errorMessage, setErrorMessage] = useState(''); const [isFullScreen, setIsFullScreen] = useState(false); const [dialogStyle, setDialogStyle] = useState({}); @@ -46,7 +45,6 @@ const OCRResultDialog = ({ record, onToggle, saveToDescription }) => { const onContainerKeyDown = useCallback((event) => { event.stopPropagation(); if (event.keyCode === 27) { - event.stopPropagation(); event.preventDefault(); onToggle(); } @@ -60,38 +58,52 @@ const OCRResultDialog = ({ record, onToggle, saveToDescription }) => { }, [saveToDescription, onToggle]); useEffect(() => { - const path = window.sfMetadataContext.canModifyRow(record) ? Utils.joinPath(parentDir, fileName) : ''; - if (path === '') { + if (!window.sfMetadataContext.canModifyRow(record)) { + setErrorMessage(gettext('Permission denied')); setLoading(false); return; } + + const path = Utils.joinPath(parentDir, fileName); window.sfMetadataContext.ocr(path).then(res => { const result = res.data?.ocr_result || ''; - ocrResult.current = result.replaceAll('\n\n', '\n').replaceAll('\n', '\n\n'); + ocrResult.current = result.replaceAll('\f', '\n').replaceAll('\n\n', '\n').replaceAll('\n', '\n\n'); setLoading(false); }).catch(error => { const errorMessage = gettext('Failed to extract text'); - toaster.danger(errorMessage); + setErrorMessage(errorMessage); setLoading(false); }); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + useEffect(() => { + document.addEventListener('keydown', onContainerKeyDown); + return () => { + document.removeEventListener('keydown', onContainerKeyDown); + }; + }, [onContainerKeyDown]); + return (
-
+
{gettext('OCR result')}
- - - + {!isLoading && !errorMessage && ( + + + + )} { onKeyDown={onContainerKeyDown} className={classnames('longtext-content-container', { 'longtext-container-scroll': isWindowsWechat })} > - {isLoading ? ( - + {errorMessage ? ( +
{errorMessage}
) : ( <> {isWindowsWechat ? ( ) : ( - + )} )}