From eb57edb4311b1148a6d912dbfd0cba690bcdd42d Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 22 Sep 2025 15:46:44 +0300 Subject: [PATCH] fix(funders): fixed funders bug --- .../funding-dialog.component.html | 5 ++- .../funding-dialog.component.ts | 43 ++++++++----------- .../project-selector.component.html | 6 +-- src/assets/i18n/en.json | 3 +- 4 files changed, 26 insertions(+), 31 deletions(-) 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 4256b8dbc..aa236403a 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 @@ -6,6 +6,7 @@ + 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 b0d97c15d..798c3e611 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 @@ -1,6 +1,6 @@ import { createDispatchMap, select } from '@ngxs/store'; -import { TranslatePipe } from '@ngx-translate/core'; +import { TranslatePipe, TranslateService } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog'; @@ -9,13 +9,13 @@ import { Select } from 'primeng/select'; import { debounceTime, distinctUntilChanged, Subject } from 'rxjs'; -import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, OnInit, signal } from '@angular/core'; +import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { CustomValidators } from '@osf/shared/helpers'; -import { Funder, FunderOption, FundingDialogResult, FundingEntryForm, FundingForm, SupplementData } from '../../models'; +import { Funder, FundingDialogResult, FundingEntryForm, FundingForm, SupplementData } from '../../models'; import { GetFundersList, MetadataSelectors } from '../../store'; @Component({ @@ -28,12 +28,21 @@ export class FundingDialogComponent implements OnInit { dialogRef = inject(DynamicDialogRef); config = inject(DynamicDialogConfig); destroyRef = inject(DestroyRef); + translateService = inject(TranslateService); actions = createDispatchMap({ getFundersList: GetFundersList }); fundersList = select(MetadataSelectors.getFundersList); fundersLoading = select(MetadataSelectors.getFundersLoading); - funderOptions = signal([]); + funderOptions = computed(() => { + const funders = this.fundersList() || []; + return funders.map((funder) => ({ + label: funder.name, + value: funder.name, + id: funder.id, + uri: funder.uri, + })); + }); fundingForm = new FormGroup({ fundingEntries: new FormArray>([]) }); @@ -41,33 +50,17 @@ export class FundingDialogComponent implements OnInit { configFunders = this.config.data?.funders; - constructor() { - effect(() => { - const funders = this.fundersList() || []; - this.funderOptions.set( - funders.map((funder) => ({ - label: funder.name, - value: funder.name, - id: funder.id, - uri: funder.uri, - })) - ); - }); - - effect(() => { - const control = this.fundingForm.controls['fundingEntries']; - - return this.fundersLoading() ? control.disable() : control.enable(); - }); - } + filterMessage = computed(() => + this.fundersLoading() + ? this.translateService.instant('project.metadata.funding.dialog.loadingFunders') + : this.translateService.instant('project.metadata.funding.dialog.noFundersFound') + ); get fundingEntries() { return this.fundingForm.get('fundingEntries') as FormArray>; } ngOnInit(): void { - this.actions.getFundersList(); - if (this.configFunders?.length > 0) { this.configFunders.forEach((funder: Funder) => { this.addFundingEntry({ diff --git a/src/app/shared/components/project-selector/project-selector.component.html b/src/app/shared/components/project-selector/project-selector.component.html index d38c2b6a5..c87685d12 100644 --- a/src/app/shared/components/project-selector/project-selector.component.html +++ b/src/app/shared/components/project-selector/project-selector.component.html @@ -3,16 +3,16 @@ [loading]="isProjectsLoading()" [options]="projectsOptions()" [filter]="true" - (onFilter)="handleFilterSearch($event)" optionLabel="label" optionValue="value" appendTo="body" [emptyFilterMessage]="filterMessage()" [emptyMessage]="filterMessage()" - (onChange)="handleProjectChange($event)" - [placeholder]="placeholder() | translate" [(ngModel)]="selectedProject" + [placeholder]="placeholder() | translate" [showClear]="showClear() && !!selectedProject()" + (onFilter)="handleFilterSearch($event)" + (onChange)="handleProjectChange($event)" > {{ selectedOption.label }} diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 4f5a17d4e..dac44ba8b 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -977,7 +977,8 @@ "selectFunder": "Select a funder", "autoPopulated": "Auto-populated from selection", "loadingFunders": "Loading funders...", - "description": "Add funding and support information for this project." + "description": "Add funding and support information for this project.", + "noFundersFound": "No funders found" } }, "affiliatedInstitutions": {