diff --git a/frontend/src/hooks/metadata-status.js b/frontend/src/hooks/metadata-status.js index a2f5c056d7..a43f5e1d1f 100644 --- a/frontend/src/hooks/metadata-status.js +++ b/frontend/src/hooks/metadata-status.js @@ -16,6 +16,7 @@ export const MetadataStatusProvider = ({ repoID, currentRepoInfo, hideMetadataVi const [isLoading, setLoading] = useState(true); const [enableMetadata, setEnableMetadata] = useState(false); const [enableTags, setEnableTags] = useState(false); + const [isBeingBuilt, setIsBeingBuilt] = useState(false); const cancelMetadataURL = useCallback(() => { // If attribute extension is turned off, unmark the URL @@ -57,6 +58,7 @@ export const MetadataStatusProvider = ({ repoID, currentRepoInfo, hideMetadataVi cancelMetadataURL(); setEnableTags(false); } + setIsBeingBuilt(newValue); setEnableMetadata(newValue); }, [enableMetadata, cancelMetadataURL]); @@ -74,7 +76,9 @@ export const MetadataStatusProvider = ({ repoID, currentRepoInfo, hideMetadataVi value={{ enableMetadataManagement, enableMetadata, + isBeingBuilt, updateEnableMetadata, + setIsBeingBuilt, enableTags, updateEnableTags, }} diff --git a/frontend/src/metadata/hooks/metadata-view.js b/frontend/src/metadata/hooks/metadata-view.js index d246449508..cd9143b2d4 100644 --- a/frontend/src/metadata/hooks/metadata-view.js +++ b/frontend/src/metadata/hooks/metadata-view.js @@ -21,7 +21,7 @@ export const MetadataViewProvider = ({ const [errorMessage, setErrorMessage] = useState(null); const storeRef = useRef(null); const { collaborators } = useCollaborators(); - const { isEmptyRepo, showFirstView, setShowFirstView } = useMetadata(); + const { isBeingBuilt, setIsBeingBuilt } = useMetadata(); const tableChanged = useCallback(() => { setMetadata(storeRef.current.data); @@ -85,9 +85,9 @@ export const MetadataViewProvider = ({ storeRef.current = new Store({ context: window.sfMetadataContext, repoId: repoID, viewId: viewID, collaborators }); window.sfMetadataStore = storeRef.current; storeRef.current.initStartIndex(); - storeRef.current.load(PER_LOAD_NUMBER, isEmptyRepo).then(() => { + storeRef.current.load(PER_LOAD_NUMBER, isBeingBuilt).then(() => { setMetadata(storeRef.current.data); - setShowFirstView(false); + setIsBeingBuilt(false); setLoading(false); }).catch(error => { const errorMsg = Utils.getErrorMsg(error); @@ -132,7 +132,7 @@ export const MetadataViewProvider = ({ { const [isLoading, setLoading] = useState(true); const [enableFaceRecognition, setEnableFaceRecognition] = useState(false); - const [showFirstView, setShowFirstView] = useState(false); const [navigation, setNavigation] = useState([]); const [staticView, setStaticView] = useState([]); const [, setCount] = useState(0); @@ -22,9 +21,7 @@ export const MetadataProvider = ({ repoID, currentPath, repoInfo, hideMetadataVi const viewsMap = useRef({}); const originalTitleRef = useRef(document.title); - const isEmptyRepo = useMemo(() => repoInfo.file_count === 0, [repoInfo]); - - const { enableMetadata } = useMetadataStatus(); + const { enableMetadata, isBeingBuilt, setIsBeingBuilt } = useMetadataStatus(); const updateEnableFaceRecognition = useCallback((newValue) => { if (newValue === enableFaceRecognition) return; @@ -181,6 +178,14 @@ export const MetadataProvider = ({ repoID, currentPath, repoInfo, hideMetadataVi useEffect(() => { if (isLoading) return; + if (isBeingBuilt) { + const firstViewObject = navigation.find(item => item.type === 'view'); + const firstView = firstViewObject ? viewsMap.current[firstViewObject._id] : ''; + if (firstView) { + selectView(firstView); + } + return; + } const { origin, pathname, search } = window.location; const urlParams = new URLSearchParams(search); if (!urlParams.has('view')) return; @@ -201,7 +206,7 @@ export const MetadataProvider = ({ repoID, currentPath, repoInfo, hideMetadataVi selectView(firstView); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isLoading]); + }, [isLoading, isBeingBuilt]); useEffect(() => { if (!currentPath.includes('/' + PRIVATE_FILE_TYPE.FILE_EXTENDED_PROPERTIES + '/')) return; @@ -218,11 +223,10 @@ export const MetadataProvider = ({ repoID, currentPath, repoInfo, hideMetadataVi return ( { - const { isLoading, showFirstView, metadata, errorMessage } = useMetadataView(); + const { isLoading, isBeingBuilt, metadata, errorMessage } = useMetadataView(); const renderView = useCallback((metadata) => { if (!metadata) return null; @@ -37,12 +37,15 @@ const View = () => { }, []); if (isLoading) { - return showFirstView ? ( -
- - {gettext('Extended properties are being built.')} -
- ) : ; + if (isBeingBuilt) { + return ( +
+ + {gettext('Extended properties are being built.')} +
+ ); + } + return (); } return ( diff --git a/frontend/src/tag/views/tag-files/index.js b/frontend/src/tag/views/tag-files/index.js index bc2cc1401c..7faf2aa4d7 100644 --- a/frontend/src/tag/views/tag-files/index.js +++ b/frontend/src/tag/views/tag-files/index.js @@ -51,6 +51,10 @@ const TagFiles = () => { } }, [selectedFiles]); + const reSelectFiles = useCallback((fileId) => { + setSelectedFiles([fileId]); + }, []); + const openImagePreview = useCallback((record) => { currentImageRef.current = record; setImagePreviewerVisible(true); @@ -116,6 +120,7 @@ const TagFiles = () => { isSelected={selectedFiles && selectedFiles.includes(fileId)} file={file} onSelectFile={onSelectFile} + reSelectFiles={reSelectFiles} openImagePreview={openImagePreview} />); })} diff --git a/frontend/src/tag/views/tag-files/tag-file/index.js b/frontend/src/tag/views/tag-files/tag-file/index.js index 7644c422fb..68a4fedd5d 100644 --- a/frontend/src/tag/views/tag-files/tag-file/index.js +++ b/frontend/src/tag/views/tag-files/tag-file/index.js @@ -15,7 +15,7 @@ import './index.css'; dayjs.extend(relativeTime); -const TagFile = ({ isSelected, repoID, file, onSelectFile, openImagePreview }) => { +const TagFile = ({ isSelected, repoID, file, onSelectFile, reSelectFiles, openImagePreview }) => { const [highlight, setHighlight] = useState(false); const [isIconLoadError, setIconLoadError] = useState(false); @@ -76,12 +76,19 @@ const TagFile = ({ isSelected, repoID, file, onSelectFile, openImagePreview }) = }); }, [repoID, file, openImagePreview]); + const handelClick = useCallback((event) => { + if (event.target.tagName == 'TD') { + reSelectFiles(fileId); + } + }, [fileId, reSelectFiles]); + return ( @@ -101,8 +108,8 @@ const TagFile = ({ isSelected, repoID, file, onSelectFile, openImagePreview }) = - - {name} + + {name} @@ -121,6 +128,7 @@ TagFile.propTypes = { file: PropTypes.object, onSelectFile: PropTypes.func, openImagePreview: PropTypes.func, + reSelectFiles: PropTypes.func, }; export default TagFile;