Skip to content

Commit ff7f584

Browse files
fixup! feat(metadata): add possibility to fill af form from query params
1 parent 167bcd8 commit ff7f584

File tree

3 files changed

+51
-53
lines changed

3 files changed

+51
-53
lines changed

frontend/src/app/metadataModule/actors/actors.component.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
22
import { UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';
3-
import { BehaviorSubject } from 'rxjs';
3+
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
4+
import { startWith } from 'rxjs/operators';
45
import { MatDialog } from '@angular/material/dialog';
56

67
import { ConfirmationDialog } from '@geonature_common/others/modal-confirmation/confirmation.dialog';
@@ -102,6 +103,14 @@ export class ActorComponent implements OnInit {
102103
}
103104

104105
this.setToggleButtonValue();
106+
107+
combineLatest([
108+
this.actorForm.get('id_organism').valueChanges.pipe(startWith(null)),
109+
this.actorForm.get('id_role').valueChanges.pipe(startWith(null)),
110+
]).subscribe((_) => {
111+
const btn = this.computeButtonValue();
112+
this._toggleButtonValue.next(btn);
113+
});
105114
}
106115

107116
toggleActorOrganismChoiceChange(event) {
@@ -132,14 +141,20 @@ export class ActorComponent implements OnInit {
132141
}
133142
}
134143

135-
setToggleButtonValue() {
144+
computeButtonValue() {
136145
var btn =
137146
this.actorForm.get('id_organism').value && this.actorForm.get('id_role').value
138147
? 'all'
139148
: this.actorForm.get('id_role').value
140149
? 'person'
141150
: 'organism';
142151

152+
return btn;
153+
}
154+
155+
setToggleButtonValue() {
156+
var btn = this.computeButtonValue();
157+
143158
this.toggleActorOrganismChoiceChange({ value: btn });
144159
}
145160

frontend/src/app/metadataModule/af/af-form.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, OnInit } from '@angular/core';
1+
import { AfterViewInit, Component, OnInit } from '@angular/core';
22
import { UntypedFormArray, UntypedFormGroup, Validators } from '@angular/forms';
33
import { Router, ActivatedRoute } from '@angular/router';
44
import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
@@ -20,7 +20,7 @@ import { TranslateService } from '@librairies/@ngx-translate/core';
2020
styleUrls: ['../form.component.scss'],
2121
providers: [AcquisitionFrameworkFormService],
2222
})
23-
export class AfFormComponent implements OnInit {
23+
export class AfFormComponent implements OnInit, AfterViewInit {
2424
public form: UntypedFormGroup;
2525
//observable pour la liste déroulantes HTML des AF parents
2626
public acquisitionFrameworkParents: Observable<any>;

frontend/src/app/metadataModule/services/af-form.service.ts

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
import { Injectable } from '@angular/core';
22
import { UntypedFormGroup, UntypedFormArray, UntypedFormBuilder, Validators } from '@angular/forms';
3-
import { BehaviorSubject, forkJoin, Observable, of } from 'rxjs';
3+
import { BehaviorSubject, combineLatest, forkJoin, Observable, of } from 'rxjs';
44
import { tap, filter, switchMap, map } from 'rxjs/operators';
55

66
import { ActorFormService } from './actor-form.service';
77
import { FormService } from '@geonature_common/form/form.service';
88
import { DataFormService } from '@geonature_common/form/data-form.service';
99
import { ModuleService } from '@geonature/services/module.service';
1010

11+
import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
12+
1113
@Injectable()
1214
export class AcquisitionFrameworkFormService {
1315
public form: UntypedFormGroup;
1416
public acquisition_framework: BehaviorSubject<any> = new BehaviorSubject(null);
1517
// Custom additional fields
1618
public additionalFieldsForm: Array<any> = [];
1719
public queryParamsSource: BehaviorSubject<Object> = new BehaviorSubject({});
18-
private queryParams$: Observable<Object> = this.queryParamsSource.asObservable();
1920

2021
constructor(
2122
private fb: UntypedFormBuilder,
2223
private actorFormS: ActorFormService,
2324
private formS: FormService,
2425
private dataFormService: DataFormService,
25-
private _moduleService: ModuleService
26+
private _moduleService: ModuleService,
27+
private dateParser: NgbDateParserFormatter
2628
) {
2729
this.initForm();
2830
this.setObservables();
@@ -106,9 +108,8 @@ export class AcquisitionFrameworkFormService {
106108
**/
107109
private setObservables() {
108110
//Observable de this.dataset pour adapter le formulaire selon la donnée
109-
this.acquisition_framework
110-
.asObservable()
111-
.pipe(
111+
combineLatest([
112+
this.acquisition_framework.asObservable().pipe(
112113
tap(() => this.reset()),
113114
tap(() => {
114115
this.additionalFieldsForm = [];
@@ -156,8 +157,12 @@ export class AcquisitionFrameworkFormService {
156157
}),
157158
// Map to return acquisition framework data only
158159
map(([acquisition_framework, additional_data]) => acquisition_framework)
159-
)
160-
.subscribe((value: any) => this.form.patchValue(value));
160+
),
161+
this.queryParamsSource,
162+
]).subscribe(([value, params]) => {
163+
setTimeout(() => this.form.patchValue(value), 0);
164+
this.setFromParams(params);
165+
});
161166

162167
//gère lactivation/désactivation de la zone de saisie du framework Parent
163168
this.form.get('is_parent').valueChanges.subscribe((value: boolean) => {
@@ -167,61 +172,39 @@ export class AcquisitionFrameworkFormService {
167172
this.form.get('acquisition_framework_parent_id').enable();
168173
}
169174
});
170-
171-
// Update form from query params on every update of the latter
172-
this.queryParams$.subscribe((params) => {
173-
this.setFromParams(params);
174-
});
175175
}
176176

177177
setFromParams(params: any) {
178178
// Supported query params
179-
// with query param name as key
180179
const supportedQueryParams = {
181180
basicFields: [
182-
{
183-
paramName: 'name',
184-
fieldName: 'acquisition_framework_name',
185-
},
186-
{
187-
paramName: 'description',
188-
fieldName: 'acquisition_framework_desc',
189-
},
190-
{
191-
paramName: 'end_date',
192-
fieldName: 'acquisition_framework_end_date',
193-
},
194-
],
195-
additionalFields: [
196-
{
197-
paramName: 'dossier',
198-
fieldName: 'identifiant_dossier',
199-
},
181+
'acquisition_framework_name',
182+
'acquisition_framework_description',
183+
'acquisition_framework_end_date',
200184
],
185+
actorFields: ['id_role', 'id_organism'],
201186
};
202187

203188
Object.keys(params).forEach((key) => {
204-
const keyAsBasicField = supportedQueryParams.basicFields.find(
205-
(field) => field.paramName == key
206-
);
189+
// Basic fields
190+
const keyAsBasicField = supportedQueryParams.basicFields.find((field) => field == key);
207191
if (keyAsBasicField) {
208-
this.form.get(keyAsBasicField.fieldName).setValue(params[key]);
209-
}
210-
const keyAsAdditionalField = supportedQueryParams.additionalFields.find(
211-
(field) => field.paramName == key
212-
);
213-
if (keyAsAdditionalField) {
214-
this.form.get('additional_data').get(keyAsAdditionalField.fieldName).setValue(params[key]);
215-
}
216-
if (key == 'id_role') {
217-
this.form.get('cor_af_actor').patchValue([{ id_role: params[key] }]);
192+
let value = params[key];
193+
if (keyAsBasicField == 'acquisition_framework_end_date') {
194+
value = this.dateParser.parse(value);
195+
}
196+
this.form.get(keyAsBasicField).setValue(value);
218197
}
219-
if (key == 'id_organism') {
220-
this.form.get('cor_af_actor').patchValue([{ id_organism: params[key] }]);
198+
// Contact principal
199+
const keyAsActorField = supportedQueryParams.actorFields.find((field) => field == key);
200+
if (keyAsActorField) {
201+
this.form.get('cor_af_actor').patchValue([{ [keyAsActorField]: +params[key] }]);
221202
}
203+
// Additional fields
204+
setTimeout(() => {
205+
this.form.get('additional_data').patchValue({ [key]: params[key] });
206+
}, 0);
222207
});
223-
224-
console.log(this.form.value);
225208
}
226209

227210
get actors(): UntypedFormArray {

0 commit comments

Comments
 (0)