Skip to content

Commit f68a073

Browse files
committed
feat(frontend:files): enhance overwrite handling by updating MIME type on rename and improving file model consistency and UI visuals
1 parent e85ead7 commit f68a073

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

frontend/src/app/applications/files/components/dialogs/files-overwrite-dialog.component.html

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,17 @@ <h4 class="modal-title" l10nTranslate>
1717
</div>
1818
<div class="modal-body">
1919
@if (renamedTo) {
20-
<div
21-
[innerHTML]="'RenameFileToExisting' | translate:locale.language:{ old: files[0].name, new: renamedTo }">
22-
</div>
20+
<div [innerHTML]="'RenameFileToExisting' | translate:locale.language:{ old: files[0].name, new: renamedTo }"></div>
2321
} @else {
24-
<div l10nTranslate>Do you want to replace the existing file(s)?</div>
25-
<ul class="my-2" style="padding-left: inherit">
26-
@for (file of files; track $index) {
27-
<li><b>{{ file.name }}</b></li>
28-
}
29-
</ul>
22+
<div class="fw-bold mb-3" l10nTranslate>Do you want to replace the existing file(s)?</div>
23+
@for (f of files; track $index) {
24+
<div class="d-flex align-items-center mb-1" draggable="true">
25+
<img [src]="f.mimeUrl" alt="" height="24" width="24" (error)="f.fallBackMimeUrl()">
26+
<div class="d-flex flex-column text-truncate ms-1">
27+
<span>{{ f.name }}</span>
28+
</div>
29+
</div>
30+
}
3031
}
3132
</div>
3233
<div class="modal-footer">

frontend/src/app/applications/files/components/dialogs/files-overwrite-dialog.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import { FaIconComponent } from '@fortawesome/angular-fontawesome'
99
import { faFileShield } from '@fortawesome/free-solid-svg-icons'
1010
import { L10N_LOCALE, L10nLocale, L10nTranslateDirective, L10nTranslatePipe } from 'angular-l10n'
1111
import { LayoutService } from '../../../../layout/layout.service'
12+
import { FileModel } from '../../models/file.model'
1213

1314
@Component({
1415
selector: 'app-files-overwrite-dialog',
1516
imports: [FaIconComponent, L10nTranslateDirective, L10nTranslatePipe],
1617
templateUrl: 'files-overwrite-dialog.component.html'
1718
})
1819
export class FilesOverwriteDialogComponent {
19-
@Input() files: File[] = []
20+
@Input() files: FileModel[] = []
2021
@Input() renamedTo: string
2122
public overwrite = output<boolean>()
2223
protected readonly locale = inject<L10nLocale>(L10N_LOCALE)

frontend/src/app/applications/files/models/file.model.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ export class FileModel implements File {
117117
this.path = [...this.path.split('/').slice(0, -1), this.name].join('/')
118118
}
119119

120+
updateMime(mime: string) {
121+
this.mime = mime
122+
this.setMimeUrl()
123+
}
124+
120125
private getType(inShare: boolean) {
121126
return this.isDir ? (inShare ? mimeDirectoryShare : mimeDirectory) : mimeFile
122127
}

frontend/src/app/applications/spaces/components/spaces-browser.component.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ export class SpacesBrowserComponent implements OnInit, AfterViewInit, OnDestroy
480480
const f: FileModel = ev.object
481481
const renamedTo = ev.name
482482
let overwrite = false
483-
const fileExists = this.files.find((file) => file.name.toLowerCase() === renamedTo.toLowerCase() && file.id !== f.id)
483+
const fileExists: FileModel = this.files.find((file) => file.name.toLowerCase() === renamedTo.toLowerCase() && file.id !== f.id)
484484
if (fileExists) {
485485
overwrite = await this.filesService.openOverwriteDialog([f], renamedTo)
486486
if (!overwrite) return
@@ -493,6 +493,7 @@ export class SpacesBrowserComponent implements OnInit, AfterViewInit, OnDestroy
493493
f.rename(dto.name)
494494
f.isEditable = false
495495
if (overwrite) {
496+
f.updateMime(fileExists.mime)
496497
this.sortBy(
497498
this.sortTable.sortParam.column,
498499
false,
@@ -584,7 +585,7 @@ export class SpacesBrowserComponent implements OnInit, AfterViewInit, OnDestroy
584585
if (!overwrite) return
585586
}
586587
} else {
587-
const exist: File[] = [...ev.files].filter((f: File) => this.files.some((x) => x.name.toLowerCase() === f.name.toLowerCase()))
588+
const exist: FileModel[] = this.files.filter((x: FileModel) => [...ev.files].some((f) => f.name.toLowerCase() === x.name.toLowerCase()))
588589
if (exist.length > 0) {
589590
overwrite = await this.filesService.openOverwriteDialog(exist)
590591
if (!overwrite) return
@@ -595,7 +596,9 @@ export class SpacesBrowserComponent implements OnInit, AfterViewInit, OnDestroy
595596

596597
async onDropFiles(ev: { dataTransfer: { files: File[] } }) {
597598
let overwrite = false
598-
const exist: File[] = [...ev.dataTransfer.files].filter((f: File) => this.files.some((x) => x.name.toLowerCase() === f.name.toLowerCase()))
599+
const exist: FileModel[] = this.files.filter((x: FileModel) =>
600+
[...ev.dataTransfer.files].some((f) => f.name.toLowerCase() === x.name.toLowerCase())
601+
)
599602
if (exist.length > 0) {
600603
overwrite = await this.filesService.openOverwriteDialog(exist)
601604
if (!overwrite) return
Lines changed: 12 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)