Просмотр исходного кода

Merge pull request #3564 from overleaf/ta-file-auto-select-fix

[ReactFileTree] Restrict Entities Auto-Select

GitOrigin-RevId: ec82dcf1390b006f454db6589c04ca8922f3fe35
Alf Eaton 5 лет назад
Родитель
Сommit
2e42a27331

+ 12 - 8
services/web/frontend/js/features/file-tree/hooks/file-tree-socket-listener.js

@@ -23,9 +23,13 @@ export function useFileTreeSocketListener() {
   const socket = window._ide && window._ide.socket
   const socket = window._ide && window._ide.socket
 
 
   const selectEntityIfCreatedByUser = useCallback(
   const selectEntityIfCreatedByUser = useCallback(
-    (entityId, userId) => {
+    // hack to automatically re-open refreshed linked files
+    (entityId, entityName, userId) => {
       if (window.user && window.user.id && window.user.id === userId) {
       if (window.user && window.user.id && window.user.id === userId) {
-        select(entityId)
+        if (window.expectingLinkedFileRefreshedSocketFor === entityName) {
+          select(entityId)
+          window.expectingLinkedFileRefreshedSocketFor = null
+        }
       }
       }
     },
     },
     [select]
     [select]
@@ -86,36 +90,36 @@ export function useFileTreeSocketListener() {
   useEffect(() => {
   useEffect(() => {
     function handleDispatchCreateFolder(parentFolderId, folder, userId) {
     function handleDispatchCreateFolder(parentFolderId, folder, userId) {
       dispatchCreateFolder(parentFolderId, folder)
       dispatchCreateFolder(parentFolderId, folder)
-      selectEntityIfCreatedByUser(folder._id, userId)
     }
     }
     if (socket) socket.on('reciveNewFolder', handleDispatchCreateFolder)
     if (socket) socket.on('reciveNewFolder', handleDispatchCreateFolder)
     return () => {
     return () => {
       if (socket)
       if (socket)
         socket.removeListener('reciveNewFolder', handleDispatchCreateFolder)
         socket.removeListener('reciveNewFolder', handleDispatchCreateFolder)
     }
     }
-  }, [socket, dispatchCreateFolder, selectEntityIfCreatedByUser])
+  }, [socket, dispatchCreateFolder])
 
 
   useEffect(() => {
   useEffect(() => {
     function handleDispatchCreateDoc(parentFolderId, doc, _source, userId) {
     function handleDispatchCreateDoc(parentFolderId, doc, _source, userId) {
       dispatchCreateDoc(parentFolderId, doc)
       dispatchCreateDoc(parentFolderId, doc)
-      selectEntityIfCreatedByUser(doc._id, userId)
     }
     }
     if (socket) socket.on('reciveNewDoc', handleDispatchCreateDoc)
     if (socket) socket.on('reciveNewDoc', handleDispatchCreateDoc)
     return () => {
     return () => {
       if (socket) socket.removeListener('reciveNewDoc', handleDispatchCreateDoc)
       if (socket) socket.removeListener('reciveNewDoc', handleDispatchCreateDoc)
     }
     }
-  }, [socket, dispatchCreateDoc, selectEntityIfCreatedByUser])
+  }, [socket, dispatchCreateDoc])
 
 
   useEffect(() => {
   useEffect(() => {
     function handleDispatchCreateFile(
     function handleDispatchCreateFile(
       parentFolderId,
       parentFolderId,
       file,
       file,
       _source,
       _source,
-      _linkedFileData,
+      linkedFileData,
       userId
       userId
     ) {
     ) {
       dispatchCreateFile(parentFolderId, file)
       dispatchCreateFile(parentFolderId, file)
-      selectEntityIfCreatedByUser(file._id, userId)
+      if (linkedFileData) {
+        selectEntityIfCreatedByUser(file._id, file.name, userId)
+      }
     }
     }
     if (socket) socket.on('reciveNewFile', handleDispatchCreateFile)
     if (socket) socket.on('reciveNewFile', handleDispatchCreateFile)
     return () => {
     return () => {

+ 5 - 1
services/web/frontend/js/ide/binary-files/controllers/BinaryFileController.js

@@ -89,6 +89,7 @@ export default App.controller('BinaryFileController', function(
   $scope.refreshFile = function(file) {
   $scope.refreshFile = function(file) {
     $scope.refreshing = true
     $scope.refreshing = true
     $scope.refreshError = null
     $scope.refreshError = null
+    window.expectingLinkedFileRefreshedSocketFor = file.name
     ide.fileTreeManager
     ide.fileTreeManager
       .refreshLinkedFile(file)
       .refreshLinkedFile(file)
       .then(function(response) {
       .then(function(response) {
@@ -97,7 +98,10 @@ export default App.controller('BinaryFileController', function(
         $timeout(
         $timeout(
           () =>
           () =>
             waitFor(() => ide.fileTreeManager.findEntityById(newFileId), 5000)
             waitFor(() => ide.fileTreeManager.findEntityById(newFileId), 5000)
-              .then(newFile => ide.binaryFilesManager.openFile(newFile))
+              .then(newFile => {
+                ide.binaryFilesManager.openFile(newFile)
+                window.expectingLinkedFileRefreshedSocketFor = null
+              })
               .catch(err => console.warn(err)),
               .catch(err => console.warn(err)),
 
 
           0
           0