Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"@iconscout/react-unicons": "^1.1.6",
"@internxt/css-config": "1.1.0",
"@internxt/lib": "1.4.1",
"@internxt/sdk": "=1.13.1",
"@internxt/sdk": "=1.12.6",
"@internxt/ui": "=0.1.3",
"@phosphor-icons/react": "^2.1.7",
"@popperjs/core": "^2.11.6",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import DriveItemInfoMenu from 'app/drive/components/DriveItemInfoMenu/DriveItemI
import SharedFolderTooBigDialog from '../../../drive/components/SharedFolderTooBigDialog/SharedFolderTooBigDialog';
import { getAppConfig } from 'services/config.service';
import ShareItemDialog from '../../../../views/Shared/components/ShareItemDialog/ShareItemDialog';
import { Sidebar as VersionHistorySidebar } from '../../../../views/Drive/components/VersionHistory';

export interface HeaderAndSidenavLayoutProps {
children: JSX.Element;
Expand Down Expand Up @@ -49,18 +48,14 @@ export default function HeaderAndSidenavLayout(props: HeaderAndSidenavLayoutProp

<div className="flex w-1 grow flex-col">
<Navbar hideSearch={hideSearch} />
<div className="relative flex h-1 w-full grow">
<div className="flex h-1 w-full grow">
{children}

{isDriveItemInfoMenuOpen && driveItemInfo && (
<DriveItemInfoMenu {...driveItemInfo} onClose={onDriveItemInfoMenuClosed} />
)}

<VersionHistorySidebar />
</div>
<div className="absolute bottom-0 right-0 z-50 w-80">
<TaskLogger />
</div>
<TaskLogger />
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ import { DriveItemData } from 'app/drive/types';
import { IRoot } from 'app/store/slices/storage/types';
import workspacesSelectors from 'app/store/slices/workspaces/workspaces.selectors';
import { uploadFoldersWithManager } from 'app/network/UploadFolderManager';
import replaceFileService from 'views/Drive/services/replaceFile.service';
import { Network, getEnvironmentConfig } from 'app/drive/services/network.service';
import { fileVersionsActions, fileVersionsSelectors } from 'app/store/slices/fileVersions';
import { isVersioningExtensionAllowed } from 'views/Drive/components/VersionHistory/utils';

type NameCollisionContainerProps = {
currentFolderId: string;
Expand Down Expand Up @@ -47,8 +43,6 @@ const NameCollisionContainer: FC<NameCollisionContainerProps> = ({
() => moveDestinationFolderId ?? currentFolderId,
[moveDestinationFolderId, currentFolderId],
);
const limits = useAppSelector(fileVersionsSelectors.getLimits);
const isVersioningEnabled = limits?.versioning?.enabled ?? false;

const handleNewItems = (files: (File | DriveItemData)[], folders: (IRoot | DriveItemData)[]) => [
...files,
Expand Down Expand Up @@ -128,61 +122,18 @@ const NameCollisionContainer: FC<NameCollisionContainerProps> = ({
);
};

const uploadFileAndGetFileId = async (file: File, itemToReplace: DriveItemData) => {
const { bridgeUser, bridgePass, encryptionKey, bucketId } = getEnvironmentConfig(!!selectedWorkspace);
const network = new Network(bridgeUser, bridgePass, encryptionKey);

const taskId = `replace-${itemToReplace.uuid}-${Date.now()}`;

const [uploadPromise] = network.uploadFile(
bucketId,
{
filecontent: file,
filesize: file.size,
progressCallback: () => {},
},
{ taskId },
);

return await uploadPromise;
};

const replaceFileVersion = async (file: File, itemToReplace: DriveItemData) => {
const newFileId = await uploadFileAndGetFileId(file, itemToReplace);
await replaceFileService.replaceFile(itemToReplace.uuid, {
fileId: newFileId,
size: file.size,
});
dispatch(fileVersionsActions.invalidateCache(itemToReplace.uuid));
};

const trashAndUpload = async (file: File, itemToReplace: DriveItemData) => {
await moveItemsToTrash([itemToReplace]);
await dispatch(
storageThunks.uploadItemsThunk({
files: [file],
parentFolderId: folderId,
options: {
disableDuplicatedNamesCheck: true,
},
}),
);
};

const replaceAndUploadItem = async ({
itemsToReplace,
itemsToUpload,
}: {
itemsToReplace: DriveItemData[];
itemsToUpload: (IRoot | File)[];
}) => {
for (let i = 0; i < itemsToUpload.length; i++) {
const itemToUpload = itemsToUpload[i];
const itemToReplace = itemsToReplace[i];
await moveItemsToTrash(itemsToReplace);

itemsToUpload.forEach((itemToUpload) => {
if ((itemToUpload as IRoot).fullPathEdited) {
await moveItemsToTrash([itemToReplace]);
await uploadFoldersWithManager({
uploadFoldersWithManager({
payload: [
{
root: { ...(itemToUpload as IRoot) },
Expand All @@ -191,15 +142,23 @@ const NameCollisionContainer: FC<NameCollisionContainerProps> = ({
],
selectedWorkspace,
dispatch,
}).then(() => {
dispatch(fetchSortedFolderContentThunk(folderId));
});
} else {
const file = itemToUpload as File;
const canReplaceVersion = isVersioningEnabled && isVersioningExtensionAllowed(itemToReplace);
canReplaceVersion ? await replaceFileVersion(file, itemToReplace) : await trashAndUpload(file, itemToReplace);
dispatch(
storageThunks.uploadItemsThunk({
files: [itemToUpload] as File[],
parentFolderId: folderId,
options: {
disableDuplicatedNamesCheck: true,
},
}),
).then(() => {
dispatch(fetchSortedFolderContentThunk(folderId));
});
}

dispatch(fetchSortedFolderContentThunk(folderId));
}
});
};

const keepAndUploadItem = async (itemsToUpload: (IRoot | File)[]) => {
Expand Down
1 change: 0 additions & 1 deletion src/app/drive/services/downloadManager.service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -892,7 +892,6 @@ describe('downloadManagerService', () => {
updateProgressCallback: mockUpdateProgress,
abortController: mockTask.abortController,
sharingOptions: mockTask.credentials,
downloadName: mockTask.options.downloadName,
});
});

Expand Down
24 changes: 8 additions & 16 deletions src/app/drive/services/downloadManager.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ export type DownloadItem = {
downloadOptions?: {
areSharedItems?: boolean;
showErrors?: boolean;
downloadName?: string;
};
createFoldersIterator?: FolderIterator | SharedFolderIterator;
createFilesIterator?: FileIterator | SharedFileIterator;
Expand Down Expand Up @@ -93,13 +92,6 @@ export type DownloadTask = {
export class DownloadManagerService {
public static readonly instance: DownloadManagerService = new DownloadManagerService();

private getSingleItemName(item: DownloadItem['payload'][0]): string {
if (item.isFolder) {
return item.name;
}
return item.type ? `${item.name}.${item.type}` : item.name;
}

readonly getDownloadCredentialsFromWorkspace = (
selectedWorkspace: WorkspaceData | null,
workspaceCredentials: WorkspaceCredentialsDetails | null,
Expand Down Expand Up @@ -127,11 +119,14 @@ export class DownloadManagerService {
const abort = () => Promise.resolve(uploadFolderAbortController.abort('Download cancelled'));

const formattedDate = date.format(new Date(), 'YYYY-MM-DD_HHmmss');
let downloadName = downloadItem.downloadOptions?.downloadName;

if (!downloadName) {
downloadName =
itemsPayload.length === 1 ? this.getSingleItemName(itemsPayload[0]) : `Internxt (${formattedDate})`;
let downloadName = `Internxt (${formattedDate})`;
if (itemsPayload.length === 1) {
const item = itemsPayload[0];
if (itemsPayload[0].isFolder) {
downloadName = item.name;
} else {
downloadName = item.type ? `${item.name}.${item.type}` : item.name;
}
}

let taskId = downloadItem.taskId;
Expand Down Expand Up @@ -300,7 +295,6 @@ export class DownloadManagerService {
updateProgressCallback,
abortController,
sharingOptions: credentials,
downloadName: options.downloadName,
});

console.timeEnd(`download-file-${file.uuid}`);
Expand Down Expand Up @@ -514,7 +508,6 @@ export class DownloadManagerService {
updateProgressCallback: (progress: number) => void;
abortController?: AbortController;
sharingOptions: { credentials: { user: string; pass: string }; mnemonic: string };
downloadName?: string;
}) => {
const shouldDownloadUsingBlob =
!!(navigator.brave && (await navigator.brave.isBrave())) ||
Expand All @@ -538,7 +531,6 @@ export class DownloadManagerService {
itemData: payload.file,
updateProgressCallback: payload.updateProgressCallback,
abortController: payload.abortController,
downloadName: payload.downloadName,
});
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ interface HandleWorkerMessagesPayload {
abortController?: AbortController;
itemData: DriveFileData;
updateProgressCallback: (progress: number) => void;
downloadName?: string;
}

interface HandleMessagesPayload {
Expand All @@ -38,10 +37,9 @@ export class DownloadWorkerHandler {
abortController,
itemData,
updateProgressCallback,
downloadName,
}: HandleWorkerMessagesPayload) {
const fileName = itemData.plainName ?? itemData.name;
const completeFilename = downloadName || (itemData.type ? `${fileName}.${itemData.type}` : fileName);
const completeFilename = itemData.type ? `${fileName}.${itemData.type}` : fileName;
const downloadId = itemData.fileId;
const fileSize = itemData.size;

Expand Down
31 changes: 1 addition & 30 deletions src/app/i18n/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -793,34 +793,6 @@
"Ort": "Ort"
}
},
"versionHistory": {
"title": "Versionsverlauf",
"current": "Aktuell",
"expiresInDays": "Läuft in {{days}} Tagen ab",
"autosaveVersions": "{{count}}/{{total}} automatisch gespeicherte Versionen",
"restoreVersion": "Version wiederherstellen",
"downloadVersion": "Version herunterladen",
"deleteVersion": "Version löschen",
"deleteVersionTitle": "Version löschen",
"deleteButton": "Löschen",
"restoreButton": "Wiederherstellen",
"downloadError": "Fehler beim Herunterladen der Version",
"deleteVersionAdvice": "Diese Version wird dauerhaft gelöscht. \nDiese Aktion kann nicht rückgängig gemacht werden.",
"deletingVersion": "Lösche",
"restoreVersionTitle": "Version wiederherstellen",
"restoreVersionAdvice": "Das Wiederherstellen dieser Version ersetzt die aktuelle Datei und entfernt alle neueren Versionen. \nSobald wiederhergestellt, kann diese Aktion nicht rückgängig gemacht werden.\n\nSie können eine Kopie neuerer Versionen herunterladen, bevor Sie wiederherstellen.",
"restoringVersion": "Wiederherstellung",
"restoreSuccess": "Version erfolgreich wiederhergestellt",
"restoreError": "Fehler beim Wiederherstellen der Version",
"deleteSuccess": "Version erfolgreich gelöscht",
"deleteError": "Fehler beim Löschen der Version",
"lockedFeature": {
"title": "Gesperrte Funktion",
"description": "Stellen Sie frühere Versionen Ihrer Dateien wieder her und verfolgen Sie Änderungen im Laufe der Zeit.",
"supportedFormats": "Verfügbar für PDF-, Word-, Excel- und CSV-Dateien in kostenpflichtigen Plänen.",
"upgradeButton": "Upgrade"
}
},
"shareModal": {
"title": "\"{{name}}\" teilen",
"list": {
Expand Down Expand Up @@ -1490,8 +1462,7 @@
"restore": "Wiederherstellen",
"deletePermanently": "Lösche dauerhaft",
"move": "Verschiebe",
"delete": "Lösche",
"versionHistory": "Versionsverlauf"
"delete": "Lösche"
},
"deleteItems": {
"title": "Dauerhaft löschen?",
Expand Down
29 changes: 0 additions & 29 deletions src/app/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -890,34 +890,6 @@
"location": "Location"
}
},
"versionHistory": {
"title": "Version history",
"current": "Current",
"expiresInDays": "Expires in {{days}} days",
"autosaveVersions": "{{count}}/{{total}} autosave versions",
"restoreVersion": "Restore version",
"downloadVersion": "Download version",
"deleteVersion": "Delete version",
"deleteVersionTitle": "Delete version",
"deleteButton": "Delete",
"restoreButton": "Restore",
"downloadError": "Failed to download version",
"deleteVersionAdvice": "This version will be permanently deleted. \nThis action cannot be undone.",
"deletingVersion": "Deleting",
"restoreVersionTitle": "Restore version",
"restoreVersionAdvice": "Restoring this version will replace the current file and remove all newer versions. \nOnce restored, this action cannot be undone.\n\nYou can download a copy of newer versions before restoring.",
"restoringVersion": "Restoring",
"restoreSuccess": "Version restored successfully",
"restoreError": "Failed to restore version",
"deleteSuccess": "Version deleted successfully",
"deleteError": "Failed to delete version",
"lockedFeature": {
"title": "Locked feature",
"description": "Restore previous versions of your files and track changes over time.",
"supportedFormats": "Available for PDF, Word, Excel, and CSV files in paid plans.",
"upgradeButton": "Upgrade"
}
},
"shareModal": {
"title": "Share \"{{name}}\"",
"list": {
Expand Down Expand Up @@ -1566,7 +1538,6 @@
"share": "Share",
"manageAccess": "Manage access",
"download": "Download",
"versionHistory": "Version history",
"moveToTrash": "Move to trash",
"copyLink": "Copy link",
"linkSettings": "Link settings",
Expand Down
29 changes: 0 additions & 29 deletions src/app/i18n/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -872,34 +872,6 @@
"location": "Ubicación"
}
},
"versionHistory": {
"title": "Historial de versiones",
"current": "Actual",
"expiresInDays": "Expira en {{days}} días",
"autosaveVersions": "{{count}}/{{total}} versiones de autoguardado",
"restoreVersion": "Restaurar versión",
"downloadVersion": "Descargar versión",
"deleteVersion": "Eliminar versión",
"deleteVersionTitle": "Eliminar versión",
"deleteButton": "Eliminar",
"restoreButton": "Restaurar",
"downloadError": "Error al descargar la versión",
"deleteVersionAdvice": "Esta versión será eliminada permanentemente. \nEsta acción no se puede deshacer.",
"deletingVersion": "Eliminando",
"restoreVersionTitle": "Restaurar versión",
"restoreVersionAdvice": "Restaurar esta versión reemplazará el archivo actual y eliminará todas las versiones más recientes. \nUna vez restaurada, esta acción no se puede deshacer.\n\nPuedes descargar una copia de las versiones más recientes antes de restaurar.",
"restoringVersion": "Restaurando",
"restoreSuccess": "Versión restaurada exitosamente",
"restoreError": "Error al restaurar la versión",
"deleteSuccess": "Versión eliminada exitosamente",
"deleteError": "Error al eliminar la versión",
"lockedFeature": {
"title": "Función bloqueada",
"description": "Restaura versiones anteriores de tus archivos y realiza un seguimiento de los cambios a lo largo del tiempo.",
"supportedFormats": "Disponible para archivos PDF, Word, Excel y CSV en planes de pago.",
"upgradeButton": "Mejorar plan"
}
},
"shareModal": {
"title": "Compartir \"{{name}}\"",
"list": {
Expand Down Expand Up @@ -1543,7 +1515,6 @@
"manageLinkAccess": "Gestionar acceso",
"manageAccess": "Gestionar acceso",
"download": "Descargar",
"versionHistory": "Historial de versiones",
"moveToTrash": "Mover a la papelera",
"copyLink": "Copiar enlace",
"linkSettings": "Ajustes del enlace",
Expand Down
Loading
Loading