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 @@
- + {{ 'artemisApp.attachmentUnit.createAttachmentUnit.fileTooBig' | artemisTranslate }} - {{ 'artemisApp.attachmentUnit.createAttachmentUnit.fileLimitation' | artemisTranslate }}
} @if (!fileName() && fileInputTouched) { @@ -105,14 +104,16 @@
- - @if (hasCancelButton()) { - - } + @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)",