11import { Injectable } from '@angular/core' ;
22import { UntypedFormGroup , UntypedFormArray , UntypedFormBuilder , Validators } from '@angular/forms' ;
3- import { BehaviorSubject , forkJoin , Observable , of } from 'rxjs' ;
3+ import { BehaviorSubject , combineLatest , forkJoin , Observable , of } from 'rxjs' ;
44import { tap , filter , switchMap , map } from 'rxjs/operators' ;
55
66import { ActorFormService } from './actor-form.service' ;
77import { FormService } from '@geonature_common/form/form.service' ;
88import { DataFormService } from '@geonature_common/form/data-form.service' ;
99import { ModuleService } from '@geonature/services/module.service' ;
1010
11+ import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap' ;
12+
1113@Injectable ( )
1214export 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