diff --git a/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.html b/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.html
index 7c8434dc9023..aa6abb07f540 100644
--- a/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.html
+++ b/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.html
@@ -2,7 +2,7 @@
-
- @if (hasCancelButton()) {
-
diff --git a/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.ts b/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.ts
index 6ed702b59547..28d9bf5c1835 100644
--- a/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.ts
+++ b/src/main/webapp/app/lecture/lecture-unit/lecture-unit-management/attachment-unit-form/attachment-unit-form.component.ts
@@ -6,6 +6,7 @@ import { ACCEPTED_FILE_EXTENSIONS_FILE_BROWSER, ALLOWED_FILE_EXTENSIONS_HUMAN_RE
import { CompetencyLectureUnitLink } from 'app/entities/competency.model';
import { MAX_FILE_SIZE } from 'app/shared/constants/input.constants';
import { toSignal } from '@angular/core/rxjs-interop';
+import { TranslateService } from '@ngx-translate/core';
export interface AttachmentUnitFormData {
formProperties: FormProperties;
@@ -56,6 +57,7 @@ export class AttachmentUnitFormComponent implements OnChanges {
fileName = signal(undefined);
isFileTooBig = signal(false);
+ private readonly translateService = inject(TranslateService);
private readonly formBuilder = inject(FormBuilder);
form: FormGroup = this.formBuilder.group({
name: [undefined as string | undefined, [Validators.required, Validators.maxLength(255)]],
@@ -68,7 +70,7 @@ export class AttachmentUnitFormComponent implements OnChanges {
private readonly statusChanges = toSignal(this.form.statusChanges ?? 'INVALID');
isFormValid = computed(() => {
- return (this.statusChanges() === 'VALID' || this.fileName()) && !this.isFileTooBig();
+ return this.statusChanges() === 'VALID' && !this.isFileTooBig() && this.nameControl?.value !== '' && this.fileName();
});
ngOnChanges(): void {
@@ -94,6 +96,22 @@ export class AttachmentUnitFormComponent implements OnChanges {
this.isFileTooBig.set(this.file.size > MAX_FILE_SIZE);
}
+ get tooltipText(): string | null {
+ // Both name and file are invalid
+ if (!this.fileInputTouched && this.nameControl?.invalid) {
+ return this.translateService.instant('artemisApp.attachmentUnit.createAttachmentUnit.nameAndFileRequiredValidationError');
+ }
+ // Only file is invalid
+ if (!this.fileInputTouched) {
+ return this.translateService.instant('artemisApp.attachmentUnit.createAttachmentUnit.fileRequiredValidationError');
+ }
+ // Only name is invalid
+ if (this.nameControl?.invalid) {
+ return this.translateService.instant('artemisApp.attachmentUnit.createAttachmentUnit.nameRequiredValidationError');
+ }
+ return null;
+ }
+
get nameControl() {
return this.form.get('name');
}
diff --git a/src/main/webapp/i18n/de/lectureUnit.json b/src/main/webapp/i18n/de/lectureUnit.json
index 2ed9397e04ff..4e8d8efa8002 100644
--- a/src/main/webapp/i18n/de/lectureUnit.json
+++ b/src/main/webapp/i18n/de/lectureUnit.json
@@ -173,6 +173,7 @@
"file": "Datei",
"version": "Version",
"fileRequiredValidationError": "Du musst eine Datei zum Uploaden auswählen.",
+ "nameAndFileRequiredValidationError": "Der Name ist ein Pflichtfeld. Du musst eine Datei zum Uploaden auswählen.",
"chooseFile": "Datei auswählen",
"fileTooBig": "Die Datei ist zu groß! Die maximale Dateigröße beträgt 20 MB.",
"fileLimitation": "(max. Größe 20 MB)",
diff --git a/src/main/webapp/i18n/en/lectureUnit.json b/src/main/webapp/i18n/en/lectureUnit.json
index d54a06f188b1..8513f82b8306 100644
--- a/src/main/webapp/i18n/en/lectureUnit.json
+++ b/src/main/webapp/i18n/en/lectureUnit.json
@@ -173,6 +173,7 @@
"file": "File",
"version": "Version",
"fileRequiredValidationError": "You must select a file to upload.",
+ "nameAndFileRequiredValidationError": "Name is required. You must select a file to upload.",
"chooseFile": "Choose File",
"fileTooBig": "File is too big! The maximum file size is 20 MB.",
"fileLimitation": "(max. size 20 MB)",