Skip to content

Commit abd255b

Browse files
committed
delete files from draft registrations
1 parent 2573a81 commit abd255b

6 files changed

Lines changed: 69 additions & 7 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,8 +619,8 @@ export class FilesComponent {
619619
this.actions.setMoveDialogCurrentFolder(folder);
620620
}
621621

622-
deleteEntry(link: string) {
623-
this.actions.deleteEntry(link).subscribe(() => {
622+
deleteEntry(file: FileModel): void {
623+
this.actions.deleteEntry(file?.links.delete).subscribe(() => {
624624
this.toastService.showSuccess('files.dialogs.deleteFile.success');
625625
this.updateFilesList();
626626
});

src/app/features/registries/components/custom-step/custom-step.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ <h3 class="mb-2">{{ 'files.actions.uploadFile' | translate }}</h3>
181181
(attachFile)="onAttachFile($event, q.responseKey!)"
182182
(openFile)="onOpenFile($event)"
183183
[filesViewOnly]="filesViewOnly()"
184+
[isDraftResource]="true"
185+
(removeFromAttachedFiles)="removeFromAttachedFiles($event, 'uploader')"
184186
></osf-files-control>
185187
</div>
186188
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@
5151
[resourceId]="projectId()"
5252
[provider]="provider()"
5353
[selectedFiles]="filesSelection"
54+
[isDraftResource]="isDraftResource()"
55+
(deleteEntryAction)="deleteEntry($event)"
56+
(removeFromAttachedFiles)="onRemoveFromAttachedFiles($event)"
5457
(selectFile)="onFileTreeSelected($event)"
5558
(entryFileClicked)="onEntryFileClicked($event)"
5659
(uploadFilesConfirmed)="uploadFiles($event)"

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

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import { Button } from 'primeng/button';
88
import { filter, finalize, switchMap, take } from 'rxjs';
99

1010
import { HttpEventType } from '@angular/common/http';
11-
import { ChangeDetectionStrategy, Component, DestroyRef, inject, input, output, signal } from '@angular/core';
11+
import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, output, signal } from '@angular/core';
1212
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
1313

1414
import { CreateFolderDialogComponent } from '@osf/features/files/components';
15+
import { DeleteEntry } from '@osf/features/files/store';
1516
import { FileUploadDialogComponent } from '@osf/shared/components/file-upload-dialog/file-upload-dialog.component';
1617
import { FilesTreeComponent } from '@osf/shared/components/files-tree/files-tree.component';
1718
import { LoadingSpinnerComponent } from '@osf/shared/components/loading-spinner/loading-spinner.component';
@@ -53,7 +54,9 @@ export class FilesControlComponent {
5354
projectId = input.required<string>();
5455
provider = input.required<string>();
5556
filesViewOnly = input<boolean>(false);
57+
isDraftResource = input<boolean>(false);
5658
attachFile = output<FileModel>();
59+
removeFromAttachedFiles = output<FileModel>();
5760
openFile = output<FileModel>();
5861

5962
private readonly filesService = inject(FilesService);
@@ -69,6 +72,7 @@ export class FilesControlComponent {
6972
readonly progress = signal(0);
7073
readonly fileName = signal('');
7174
readonly dataLoaded = signal(false);
75+
pageNumber = signal(1);
7276

7377
fileIsUploading = signal(false);
7478
filesSelection: FileModel[] = [];
@@ -79,11 +83,38 @@ export class FilesControlComponent {
7983
setFilesIsLoading: SetFilesIsLoading,
8084
setCurrentFolder: SetRegistriesCurrentFolder,
8185
getRootFolders: GetRootFolders,
86+
deleteEntry: DeleteEntry,
8287
});
8388

8489
constructor() {
8590
this.setupRootFoldersLoader();
8691
this.setupCurrentFolderWatcher();
92+
93+
effect(() => {
94+
const currentFolder = this.currentFolder();
95+
if (currentFolder) {
96+
this.pageNumber.set(1);
97+
this.updateFilesList();
98+
}
99+
});
100+
}
101+
102+
updateFilesList = (): void => {
103+
const currentFolder = this.currentFolder();
104+
const filesLink = currentFolder?.links.filesLink;
105+
if (filesLink) {
106+
this.actions.getFiles(filesLink, this.pageNumber());
107+
}
108+
};
109+
110+
deleteEntry(file: FileModel): void {
111+
this.actions.deleteEntry(file?.links.delete).subscribe(() => {
112+
this.toastService.showSuccess('files.dialogs.deleteFile.success');
113+
this.updateFilesList();
114+
if (this.isDraftResource()) {
115+
this.removeFromAttachedFiles.emit(file);
116+
}
117+
});
87118
}
88119

89120
onFileSelected(event: Event): void {
@@ -169,6 +200,10 @@ export class FilesControlComponent {
169200
this.filesSelection = [...new Set(this.filesSelection)];
170201
}
171202

203+
onRemoveFromAttachedFiles(file: FileModel) {
204+
this.removeFromAttachedFiles.emit(file);
205+
}
206+
172207
onLoadFiles(event: { link: string; page: number }) {
173208
this.actions.getFiles(event.link, event.page);
174209
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,18 @@
9595
</osf-file-menu>
9696
</div>
9797
}
98+
@if (isDraftResource()) {
99+
<p-button
100+
icon="fas fa-trash"
101+
severity="danger"
102+
text
103+
rounded
104+
[pTooltip]="'Delete'"
105+
tooltipPosition="top"
106+
(onClick)="deleteFile(file)"
107+
osfStopPropagation
108+
/>
109+
}
98110
</div>
99111
}
100112
</ng-template>

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { select } from '@ngxs/store';
33
import { TranslatePipe } from '@ngx-translate/core';
44

55
import { PrimeTemplate, TreeNode } from 'primeng/api';
6+
import { Button } from 'primeng/button';
7+
import { TooltipModule } from 'primeng/tooltip';
68
import { Tree, TreeLazyLoadEvent, TreeNodeDropEvent, TreeNodeSelectEvent } from 'primeng/tree';
79

810
import { Clipboard } from '@angular/cdk/clipboard';
@@ -66,6 +68,8 @@ type FileTreeNode = FileModel & TreeNode;
6668
LoadingSpinnerComponent,
6769
FileMenuComponent,
6870
StopPropagationDirective,
71+
Button,
72+
TooltipModule,
6973
],
7074
templateUrl: './files-tree.component.html',
7175
styleUrl: './files-tree.component.scss',
@@ -101,12 +105,14 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
101105
selectedFiles = input<FileModel[]>([]);
102106
scrollHeight = input<string>('300px');
103107
selectionMode = input<'multiple' | null>('multiple');
108+
isDraftResource = input<boolean>(false);
104109

105110
entryFileClicked = output<FileModel>();
106111
uploadFilesConfirmed = output<File[] | File>();
107112
setCurrentFolder = output<FileFolderModel>();
108113
setMoveDialogCurrentFolder = output<FileFolderModel>();
109-
deleteEntryAction = output<string>();
114+
deleteEntryAction = output<FileModel>();
115+
removeFromAttachedFiles = output<FileModel>();
110116
renameEntryAction = output<{ newName: string; link: string }>();
111117
loadFiles = output<{ link: string; page: number }>();
112118
selectFile = output<FileModel>();
@@ -264,6 +270,10 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
264270
this.clearSelection.emit();
265271
}
266272

273+
deleteFile(file: FileModel) {
274+
this.deleteEntry(file);
275+
}
276+
267277
onFileMenuAction(action: FileMenuAction, file: FileModel): void {
268278
const { value, data } = action;
269279

@@ -344,12 +354,12 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
344354
messageKey:
345355
file.kind === FileKind.Folder ? 'files.dialogs.deleteFolder.message' : 'files.dialogs.deleteFile.message',
346356
acceptLabelKey: 'common.buttons.remove',
347-
onConfirm: () => this.confirmDeleteEntry(file.links.delete),
357+
onConfirm: () => this.confirmDeleteEntry(file),
348358
});
349359
}
350360

351-
confirmDeleteEntry(link: string): void {
352-
this.deleteEntryAction.emit(link);
361+
confirmDeleteEntry(file: FileModel): void {
362+
this.deleteEntryAction.emit(file);
353363
}
354364

355365
confirmRename(file: FileModel): void {

0 commit comments

Comments
 (0)