diff --git a/src/app/features/collections/components/collections-main-content/collections-main-content.component.html b/src/app/features/collections/components/collections-main-content/collections-main-content.component.html index 90b8855ed..5d814e0bb 100644 --- a/src/app/features/collections/components/collections-main-content/collections-main-content.component.html +++ b/src/app/features/collections/components/collections-main-content/collections-main-content.component.html @@ -31,9 +31,9 @@

{{ 'collections.searchResults.noResults' | translate }} } @else { - + - + } diff --git a/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.html b/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.html index 3916e08d1..52c028fc7 100644 --- a/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.html +++ b/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.html @@ -32,6 +32,7 @@ [formControl]="resourceLanguageControl" [filter]="true" filterBy="name" + appendTo="body" [showClear]="true" [virtualScroll]="true" [virtualScrollItemSize]="35" diff --git a/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.ts b/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.ts index 68b7f6c11..9df90edab 100644 --- a/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.ts +++ b/src/app/features/files/components/edit-file-metadata-dialog/edit-file-metadata-dialog.component.ts @@ -1,7 +1,7 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; -import { DynamicDialogRef } from 'primeng/dynamicdialog'; +import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog'; import { InputText } from 'primeng/inputtext'; import { Select } from 'primeng/select'; @@ -10,7 +10,7 @@ import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { languageCodes, resourceTypes } from '@osf/shared/constants'; -import { PatchFileMetadata } from '../../models'; +import { OsfFileCustomMetadata, PatchFileMetadata } from '../../models'; @Component({ selector: 'osf-edit-file-metadata-dialog', @@ -24,6 +24,7 @@ export class EditFileMetadataDialogComponent { readonly languages = languageCodes; private readonly dialogRef = inject(DynamicDialogRef); + readonly config = inject(DynamicDialogConfig); fileMetadataForm = new FormGroup({ title: new FormControl(null), @@ -32,6 +33,17 @@ export class EditFileMetadataDialogComponent { resourceLanguage: new FormControl(null), }); + constructor() { + const fileMetadata = this.config.data as OsfFileCustomMetadata; + + this.fileMetadataForm.patchValue({ + title: fileMetadata.title, + description: fileMetadata.description, + resourceType: fileMetadata.resourceTypeGeneral, + resourceLanguage: fileMetadata.language, + }); + } + get titleControl(): FormControl { return this.fileMetadataForm.get('title') as FormControl; } diff --git a/src/app/features/files/components/file-metadata/file-metadata.component.html b/src/app/features/files/components/file-metadata/file-metadata.component.html index 581576b68..868f4fbd1 100644 --- a/src/app/features/files/components/file-metadata/file-metadata.component.html +++ b/src/app/features/files/components/file-metadata/file-metadata.component.html @@ -3,7 +3,7 @@

{{ 'files.detail.fileMetadata.title' | translate }}

- + {{ 'files.detail.fileMetadata.title' | translate }}

@if (fileMetadata()?.[field.key]) {

{{ field.label | translate }}

-

{{ fileMetadata()?.[field.key] }}

+

+ {{ field.key === 'language' ? getLanguageName(fileMetadata()?.[field.key]!) : fileMetadata()?.[field.key] }} +

} } diff --git a/src/app/features/files/components/file-metadata/file-metadata.component.ts b/src/app/features/files/components/file-metadata/file-metadata.component.ts index 0e87413ed..cd7ec7d92 100644 --- a/src/app/features/files/components/file-metadata/file-metadata.component.ts +++ b/src/app/features/files/components/file-metadata/file-metadata.component.ts @@ -12,6 +12,9 @@ import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { ActivatedRoute } from '@angular/router'; +import { languageCodes } from '@osf/shared/constants'; +import { LanguageCodeModel } from '@osf/shared/models'; + import { FileMetadataFields } from '../../constants'; import { PatchFileMetadata } from '../../models'; import { FilesSelectors, SetFileMetadata } from '../../store'; @@ -36,6 +39,8 @@ export class FileMetadataComponent { fileMetadata = select(FilesSelectors.getFileCustomMetadata); isLoading = select(FilesSelectors.isFileMetadataLoading); + readonly languageCodes = languageCodes; + readonly fileGuid = toSignal(this.route.params.pipe(map((params) => params['fileGuid'])) ?? of(undefined)); metadataFields = FileMetadataFields; @@ -54,6 +59,11 @@ export class FileMetadataComponent { } } + getLanguageName(languageCode: string): string { + const language = this.languageCodes.find((lang: LanguageCodeModel) => lang.code === languageCode); + return language ? language.name : languageCode; + } + openEditFileMetadataDialog() { this.dialogService .open(EditFileMetadataDialogComponent, { @@ -63,6 +73,7 @@ export class FileMetadataComponent { closeOnEscape: true, modal: true, closable: true, + data: this.fileMetadata(), }) .onClose.pipe(filter((res: PatchFileMetadata) => !!res)) .subscribe((res) => this.setFileMetadata(res)); diff --git a/src/app/features/files/pages/file-detail/file-detail.component.html b/src/app/features/files/pages/file-detail/file-detail.component.html index f20b65a42..05c85e754 100644 --- a/src/app/features/files/pages/file-detail/file-detail.component.html +++ b/src/app/features/files/pages/file-detail/file-detail.component.html @@ -27,11 +27,23 @@ } @if (file()?.links?.download) { - + } @if (file()?.links?.render) {
- + @@ -42,7 +54,13 @@ } @if (file()?.links?.html) {
- + @@ -52,7 +70,13 @@
} @if (file() && !isAnonymous()) { - + }
diff --git a/src/app/features/metadata/components/metadata-description/metadata-description.component.html b/src/app/features/metadata/components/metadata-description/metadata-description.component.html index 69fdc299b..4a943d8e0 100644 --- a/src/app/features/metadata/components/metadata-description/metadata-description.component.html +++ b/src/app/features/metadata/components/metadata-description/metadata-description.component.html @@ -11,5 +11,7 @@

{{ 'project.overview.metadata.description' | translate }}

} -

{{ description() || ('project.overview.metadata.noDescription' | translate) }}

+

+ {{ description() || ('project.overview.metadata.noDescription' | translate) }} +

diff --git a/src/app/features/metadata/components/metadata-funding/metadata-funding.component.html b/src/app/features/metadata/components/metadata-funding/metadata-funding.component.html index 5fa7fa5e7..cf6f14c49 100644 --- a/src/app/features/metadata/components/metadata-funding/metadata-funding.component.html +++ b/src/app/features/metadata/components/metadata-funding/metadata-funding.component.html @@ -14,10 +14,11 @@

{{ 'project.overview.metadata.fundingSupport' | translate }}

@if (funders()?.length) {
@for (funder of funders(); track funder.funderIdentifier) { -
+

{{ 'files.detail.resourceMetadata.fields.funder' | translate }}: {{ funder.funderName }}

- -

{{ 'files.detail.resourceMetadata.fields.awardTitle' | translate }}: {{ funder.awardTitle }}

+ @if (funder.awardTitle) { +

{{ 'files.detail.resourceMetadata.fields.awardTitle' | translate }}: {{ funder.awardTitle }}

+ } @if (funder.awardUri) {

diff --git a/src/app/features/metadata/components/metadata-funding/metadata-funding.component.ts b/src/app/features/metadata/components/metadata-funding/metadata-funding.component.ts index 38764938f..c0d6e7081 100644 --- a/src/app/features/metadata/components/metadata-funding/metadata-funding.component.ts +++ b/src/app/features/metadata/components/metadata-funding/metadata-funding.component.ts @@ -3,13 +3,14 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { Card } from 'primeng/card'; +import { NgClass } from '@angular/common'; import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; import { Funder } from '../../models'; @Component({ selector: 'osf-metadata-funding', - imports: [Button, Card, TranslatePipe], + imports: [NgClass, Button, Card, TranslatePipe], templateUrl: './metadata-funding.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/src/app/features/metadata/dialogs/description-dialog/description-dialog.component.html b/src/app/features/metadata/dialogs/description-dialog/description-dialog.component.html index 591756ac2..90cf60628 100644 --- a/src/app/features/metadata/dialogs/description-dialog/description-dialog.component.html +++ b/src/app/features/metadata/dialogs/description-dialog/description-dialog.component.html @@ -9,7 +9,17 @@ >

- - + +
diff --git a/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.html b/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.html index 33a353b0b..734741348 100644 --- a/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.html +++ b/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.html @@ -47,7 +47,7 @@
- @if (fundingEntries.length > 1) { + @if (configFunders.length || fundingEntries.length > 1) {
- +
diff --git a/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.ts b/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.ts index da758e84a..b0d97c15d 100644 --- a/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.ts +++ b/src/app/features/metadata/dialogs/funding-dialog/funding-dialog.component.ts @@ -39,6 +39,8 @@ export class FundingDialogComponent implements OnInit { private searchSubject = new Subject(); + configFunders = this.config.data?.funders; + constructor() { effect(() => { const funders = this.fundersList() || []; @@ -66,9 +68,8 @@ export class FundingDialogComponent implements OnInit { ngOnInit(): void { this.actions.getFundersList(); - const configFunders = this.config.data?.funders; - if (configFunders?.length > 0) { - configFunders.forEach((funder: Funder) => { + if (this.configFunders?.length > 0) { + this.configFunders.forEach((funder: Funder) => { this.addFundingEntry({ funderName: funder.funderName || '', funderIdentifier: funder.funderIdentifier || '', @@ -104,11 +105,10 @@ export class FundingDialogComponent implements OnInit { }), awardTitle: new FormControl(supplement?.title || supplement?.awardTitle || '', { nonNullable: true, - validators: [Validators.required], }), awardUri: new FormControl(supplement?.url || supplement?.awardUri || '', { nonNullable: true, - validators: [CustomValidators.linkValidator(), CustomValidators.requiredTrimmed()], + validators: [CustomValidators.linkValidator()], }), awardNumber: new FormControl(supplement?.awardNumber || '', { nonNullable: true, @@ -124,6 +124,11 @@ export class FundingDialogComponent implements OnInit { removeFundingEntry(index: number): void { if (this.fundingEntries.length > 1) { this.fundingEntries.removeAt(index); + } else { + const result: FundingDialogResult = { + fundingEntries: [], + }; + this.dialogRef.close(result); } } diff --git a/src/app/features/metadata/dialogs/resource-information-dialog/resource-information-dialog.component.html b/src/app/features/metadata/dialogs/resource-information-dialog/resource-information-dialog.component.html index d5a9d26f5..9882a7e53 100644 --- a/src/app/features/metadata/dialogs/resource-information-dialog/resource-information-dialog.component.html +++ b/src/app/features/metadata/dialogs/resource-information-dialog/resource-information-dialog.component.html @@ -31,10 +31,12 @@ optionValue="value" [placeholder]="'common.buttons.select' | translate" appendTo="body" + [virtualScroll]="true" + [virtualScrollItemSize]="35" class="w-full" > - {{ option.label }} + {{ option.label }}
diff --git a/src/styles/overrides/button.scss b/src/styles/overrides/button.scss index 09fd79b4c..d2cf4ebb3 100644 --- a/src/styles/overrides/button.scss +++ b/src/styles/overrides/button.scss @@ -31,7 +31,7 @@ } .btn-icon-only .p-button { - padding: mix.rem(13px) mix.rem(20px); + padding: mix.rem(13px) mix.rem(21px); } .btn-full-width {