Skip to content

Commit a5452d3

Browse files
Fix/uat registry bugs (#435)
* fix(uat): registrations bugs * fix(files): multiple uploads * fix(files): multiple uploads
1 parent 418c58a commit a5452d3

File tree

5 files changed

+59
-30
lines changed

5 files changed

+59
-30
lines changed

src/app/features/files/pages/files/files.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
></osf-google-file-picker>
102102
}
103103
}
104-
<input #fileInput type="file" class="hidden" (change)="onFileSelected($event)" />
104+
<input #fileInput type="file" multiple class="hidden" (change)="onFileSelected($event)" />
105105
</div>
106106
</div>
107107

@@ -135,7 +135,7 @@
135135
[provider]="provider()"
136136
(folderIsOpening)="folderIsOpening($event)"
137137
(entryFileClicked)="navigateToFile($event)"
138-
(uploadFileConfirmed)="uploadFile($event)"
138+
(uploadFilesConfirmed)="uploadFiles($event)"
139139
(filesPageChange)="onFilesPageChange($event)"
140140
>
141141
</osf-files-tree>

src/app/features/files/pages/files/files.component.ts

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -278,38 +278,62 @@ export class FilesComponent {
278278
});
279279
}
280280

281-
uploadFile(file: File): void {
281+
uploadFiles(files: File | File[]): void {
282282
const currentFolder = this.currentFolder();
283283
const uploadLink = currentFolder?.links.upload;
284284

285285
if (!uploadLink) return;
286286

287-
this.fileName.set(file.name);
287+
const fileArray = Array.isArray(files) ? files : [files];
288+
const isMultiple = fileArray.length > 1;
289+
if (fileArray.length === 0) return;
290+
291+
this.fileName.set(fileArray.length === 1 ? fileArray[0].name : `${fileArray.length} files`);
288292
this.fileIsUploading.set(true);
293+
this.progress.set(0);
294+
295+
let completedUploads = 0;
296+
const totalFiles = fileArray.length;
297+
298+
fileArray.forEach((file) => {
299+
this.filesService
300+
.uploadFile(file, uploadLink)
301+
.pipe(
302+
takeUntilDestroyed(this.destroyRef),
303+
finalize(() => {
304+
if (isMultiple) {
305+
completedUploads++;
306+
const progressPercentage = Math.round((completedUploads / totalFiles) * 100);
307+
this.progress.set(progressPercentage);
308+
309+
if (completedUploads === totalFiles) {
310+
this.completeUpload();
311+
}
312+
} else {
313+
this.completeUpload();
314+
}
315+
})
316+
)
317+
.subscribe((event) => {
318+
if (event.type === HttpEventType.UploadProgress && event.total) {
319+
this.progress.set(Math.round((event.loaded / event.total) * 100));
320+
}
321+
});
322+
});
323+
}
289324

290-
this.filesService
291-
.uploadFile(file, uploadLink)
292-
.pipe(
293-
takeUntilDestroyed(this.destroyRef),
294-
finalize(() => {
295-
this.fileIsUploading.set(false);
296-
this.fileName.set('');
297-
this.updateFilesList();
298-
})
299-
)
300-
.subscribe((event) => {
301-
if (event.type === HttpEventType.UploadProgress && event.total) {
302-
this.progress.set(Math.round((event.loaded / event.total) * 100));
303-
}
304-
});
325+
private completeUpload(): void {
326+
this.fileIsUploading.set(false);
327+
this.fileName.set('');
328+
this.updateFilesList();
305329
}
306330

307331
onFileSelected(event: Event): void {
308332
const input = event.target as HTMLInputElement;
309-
const file = input.files?.[0];
310-
if (!file) return;
333+
const files = input.files;
334+
if (!files || files.length === 0) return;
311335

312-
this.uploadFile(file);
336+
this.uploadFiles(Array.from(files));
313337
}
314338

315339
createFolder(): void {

src/app/features/registries/components/files-control/files-control.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
[provider]="provider()"
6464
(folderIsOpening)="folderIsOpening($event)"
6565
(entryFileClicked)="selectFile($event)"
66-
(uploadFileConfirmed)="uploadFile($event)"
66+
(uploadFilesConfirmed)="uploadFiles($event)"
6767
>
6868
</osf-files-tree>
6969
</div>

src/app/features/registries/components/files-control/files-control.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export class FilesControlComponent implements OnDestroy {
124124
}
125125
if (!file) return;
126126

127-
this.uploadFile(file);
127+
this.uploadFiles(file);
128128
}
129129

130130
createFolder(): void {
@@ -166,7 +166,9 @@ export class FilesControlComponent implements OnDestroy {
166166
return EMPTY;
167167
}
168168

169-
uploadFile(file: File): void {
169+
uploadFiles(files: File | File[]): void {
170+
const fileArray = Array.isArray(files) ? files : [files];
171+
const file = fileArray[0];
170172
const currentFolder = this.currentFolder();
171173
const uploadLink = currentFolder?.links.upload;
172174
if (!uploadLink) return;

src/app/shared/components/files-tree/files-tree.component.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
8888

8989
entryFileClicked = output<OsfFile>();
9090
folderIsOpening = output<boolean>();
91-
uploadFileConfirmed = output<File>();
91+
uploadFilesConfirmed = output<File[] | File>();
9292
filesPageChange = output<number>();
9393

9494
foldersStack: OsfFile[] = [];
@@ -163,12 +163,15 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
163163
const files = event.dataTransfer?.files;
164164

165165
if (files && files.length > 0) {
166+
const fileArray = Array.from(files);
167+
const isMultiple = files.length > 1;
168+
166169
this.customConfirmationService.confirmAccept({
167-
headerKey: 'files.dialogs.uploadFile.title',
168-
messageParams: { name: files[0].name },
169-
messageKey: 'files.dialogs.uploadFile.message',
170+
headerKey: isMultiple ? 'files.dialogs.uploadFiles.title' : 'files.dialogs.uploadFile.title',
171+
messageParams: isMultiple ? { count: files.length } : { name: files[0].name },
172+
messageKey: isMultiple ? 'files.dialogs.uploadFiles.message' : 'files.dialogs.uploadFile.message',
170173
acceptLabelKey: 'common.buttons.upload',
171-
onConfirm: () => this.uploadFileConfirmed.emit(files[0]),
174+
onConfirm: () => this.uploadFilesConfirmed.emit(fileArray),
172175
});
173176
}
174177
}

0 commit comments

Comments
 (0)