Skip to content

Commit

Permalink
🐛 Fix restore/refresh after upload (#803)
Browse files Browse the repository at this point in the history
  • Loading branch information
MontaGhanmy authored Feb 19, 2025
1 parent fdc3630 commit f57f48d
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ const PendingRootList = ({
style={{ width: '100%', maxHeight: 300 }}
>
{keys.map(key => (
<PendingRootRow key={key} rootKey={key} root={roots[key]} parentId={parentId} />
<PendingRootRow key={key} rootKey={key} root={roots[key]} />
))}
</PerfectScrollbar>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,16 @@ import Languages from 'app/features/global/services/languages-service';
const PendingRootRow = ({
rootKey,
root,
parentId,
}: {
rootKey: string;
root: UploadRootType;
parentId: string;
}): JSX.Element => {
const { pauseOrResumeRootUpload, cancelRootUpload, clearRoots } = useUpload();
const [showFolder, setShowFolder] = useState(false);
const [restoredFolder, setRestoredFolder] = useState(false);
const { item } = useDriveItem(root?.id || '');
const { restore } = useDriveActions();
const { refresh } = useDriveItem(parentId || '');
const { refresh, children } = useDriveItem(item?.parent_id || '');

const firstPendingFile = root.items[0];
const uploadedFilesSize = root.uploadedSize;
Expand All @@ -42,6 +41,7 @@ const PendingRootRow = ({
if (!showFolder || isFileRoot) {
const redirectionURL = RouterService.generateRouteFromState({
itemId: root.id,
dirId: item?.parent_id || '',
});
window.open(redirectionURL, '_blank');
} else {
Expand Down Expand Up @@ -74,16 +74,23 @@ const PendingRootRow = ({
}
}, [isUploadCompleted]);

const waitForChild = async (itemId: string, retries = 5, interval = 1000) => {
for (let attempt = 0; attempt < retries; attempt++) {
await new Promise(resolve => setTimeout(resolve, interval));
if (children.some(child => child.id === itemId)) return true;
}
return false;
};

useEffect(() => {
const postProcess = async () => {
if (isUploadCompleted && !restoredFolder) {
await new Promise(resolve => setTimeout(resolve, 1000));
await restore(root.id, parentId);
await new Promise(resolve => setTimeout(resolve, 1000));
await refresh(parentId);
if (!isFileRoot) await restore(root.id, item?.parent_id || '');
const found = isFileRoot || (await waitForChild(root.id));
if (found) await refresh(item?.parent_id || '');
}
};
if (isUploadCompleted && !restoredFolder) {
if (isUploadCompleted && root.id && !restoredFolder) {
setRestoredFolder(true);
postProcess();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ToasterService } from '@features/global/services/toaster-service';
import { LoadingStateInitTrue } from '@features/global/state/atoms/Loading';
import useRouterCompany from '@features/router/hooks/use-router-company';
import { useCallback } from 'react';
import { useCallback, useEffect } from 'react';
import { useRecoilCallback, useRecoilState, useRecoilValue } from 'recoil';
import { DriveItemAtom, DriveItemChildrenAtom, DriveItemPagination } from '../state/store';
import { DriveItem } from '../types';
Expand Down Expand Up @@ -154,6 +154,12 @@ export const useDriveItem = (id: string) => {
item?.item?.is_in_trash;
const sharedWithMe = id == 'shared_with_me';

useEffect(() => {
if (id) {
refresh(id, true); // Re-fetch from backend and update Recoil state
}
}, [id, refresh]);

return {
sharedWithMe,
inTrash,
Expand Down
2 changes: 0 additions & 2 deletions tdrive/frontend/src/app/views/client/body/drive/browser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -341,8 +341,6 @@ export default memo(
companyId,
parentId,
});
await new Promise (resolve => setTimeout(resolve, 1000));
refresh(parentId);
}}
onDragOver={handleDragOver}
onDrop={handleDrop}
Expand Down

0 comments on commit f57f48d

Please # to comment.