🐛 Fix restore/refresh after upload (#803)

This commit is contained in:
Montassar Ghanmy
2025-02-19 09:30:49 +01:00
committed by GitHub
parent fdc3630d21
commit f57f48d67c
4 changed files with 23 additions and 12 deletions
@@ -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>
@@ -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;
@@ -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 {
@@ -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();
}