11import { Injectable } from '@angular/core' ;
22import { Observable , forkJoin , of } from 'rxjs' ;
3+
34import { Resolve , ActivatedRouteSnapshot , RouterStateSnapshot , Router } from '@angular/router' ;
45import { ISite , ISitesGroup } from '../interfaces/geom' ;
56import { IPaginated } from '../interfaces/page' ;
67import { IobjObs } from '../interfaces/objObs' ;
7- import { concatMap , map , mergeMap } from 'rxjs/operators' ;
8+ import { concatMap , map , mergeMap , filter , takeWhile } from 'rxjs/operators' ;
89import { PermissionService } from '../services/permission.service' ;
910import { TPermission } from '../types/permission' ;
1011import { MonitoringObjectService } from '../services/monitoring-object.service' ;
@@ -30,7 +31,7 @@ export class SitesGroupsResolver
3031 currentPermission : TPermission ;
3132 // Liste des type d'objets enfants à afficher sur la page
3233 listChildObjectType : string [ ] = [ 'sites_group' , 'site' ] ;
33-
34+ resolvedData ;
3435 constructor (
3536 public serviceSitesGroup : SitesGroupService ,
3637 public serviceSite : SitesService ,
@@ -54,92 +55,89 @@ export class SitesGroupsResolver
5455 } > {
5556 const moduleCode = route . params . moduleCode || 'generic' ;
5657 this . listChildObjectType = [ 'sites_group' , 'site' ] ;
57- // this.serviceSitesGroup.setModuleCode(`${moduleCode}`);
58- // this.serviceSite.setModuleCode(`${moduleCode}`);
59- // this.serviceIndividual.setModuleCode(`${moduleCode}`);
60-
61- // const $configSitesGroups = this.serviceSitesGroup.initConfig();
62- // const $configSites = this.serviceSite.initConfig();
63- // const $configIndividuals = this.serviceIndividual.initConfig();
6458
6559 this . _permissionService . setPermissionMonitorings ( moduleCode ) ;
6660 this . currentPermission = this . _permissionService . getPermissionUser ( ) ;
67-
68- const resolvedData = this . _configService . init ( moduleCode ) . pipe (
69-
70- map ( ( configs ) => {
71- // Récupération des permissions du module
72- const module_permissions = this . _configService . moduleCruved ( moduleCode ) ;
73-
74- // Si le module n'est pas le module générique affichage des objets
75- // en fonction de l'objet tree
76- if ( moduleCode !== 'generic' ) {
77- const tree = this . _configService . configModuleObject ( moduleCode , 'tree' ) ;
78- this . listChildObjectType = Object . keys ( tree [ 'module' ] ) ;
79- }
80-
81- // S'il n'y a pas de groupe de site et que la page demandée est sites_group
82- // redirection vers la page des sites.
83- // TODO le rendre plus robuste
84- if (
85- ! configs [ 0 ] &&
86- state . url . includes ( '/monitorings/object/' ) &&
87- state . url . includes ( 'sites_group' )
88- ) {
89- this . router . navigate ( [ 'monitorings' , 'object' , route . params . moduleCode , 'site' ] ) ;
90- }
91-
92- // Initialisation des getters et config de chaque type d'objet
93- const $getSiteGroups = this . buildObjectConfig (
94- 'sites_group' ,
95- configs [ 0 ] ,
96- module_permissions [ 'sites_group' ] . R ,
97- this . serviceSitesGroup ,
98- moduleCode
99- ) ;
100-
101- const $getSites = this . buildObjectConfig (
102- 'site' ,
103- configs [ 1 ] ,
104- module_permissions [ 'site' ] . R ,
105- this . serviceSite ,
106- moduleCode
107- ) ;
108-
109- const $getIndividuals = this . buildObjectConfig (
110- 'individual' ,
111- configs [ 2 ] ,
112- module_permissions [ 'individual' ] . R ,
113- this . serviceIndividual ,
114- moduleCode
115- ) ;
116-
117- return forkJoin ( [ $getSiteGroups , $getSites , $getIndividuals ] ) . pipe (
118- map ( ( [ processedSiteGroups , processedSites , processedIndividuals ] ) => {
119- return {
120- sitesGroups : { data : processedSiteGroups , objConfig : configs [ 0 ] } ,
121- sites : { data : processedSites , objConfig : configs [ 1 ] } ,
122- individuals : { data : processedIndividuals , objConfig : configs [ 2 ] } ,
123- route : route [ '_urlSegment' ] . segments [ 3 ] . path ,
124- permission : this . currentPermission ,
125- moduleCode,
126- } ;
127- } )
128- ) ;
129- } ) ,
130- mergeMap ( ( result ) => {
131- return result ;
61+ this . _configService . currentModuleConfig = null ;
62+ this . _configService . init ( moduleCode ) ;
63+
64+ this . resolvedData = this . _configService . currentModuleConfigObs . pipe (
65+ filter ( ( config ) => config != null ) ,
66+ takeWhile ( ( config ) => config . module . module_code == moduleCode ) , //Permet de unsubscribe dès que le module est le bon
67+ map ( ( configs ) => {
68+ // Récupération des permissions du module
69+ const module_permissions = this . _configService . moduleCruved ( moduleCode ) ;
70+
71+ // Si le module n'est pas le module générique affichage des objets
72+ // en fonction de l'objet tree
73+ if ( moduleCode !== 'generic' ) {
74+ const tree = this . _configService . configModuleObject ( moduleCode , 'tree' ) ;
75+ this . listChildObjectType = Object . keys ( tree [ 'module' ] ) ;
76+ }
77+ // S'il n'y a pas de groupe de site et que la page demandée est sites_group
78+ // redirection vers la page des sites.
79+ // TODO le rendre plus robuste
80+ if (
81+ ! configs [ 0 ] &&
82+ state . url . includes ( '/monitorings/object/' ) &&
83+ state . url . includes ( 'sites_group' )
84+ ) {
85+ this . router . navigate ( [ 'monitorings' , 'object' , route . params . moduleCode , 'site' ] ) ;
86+ }
87+
88+ // Initialisation des getters et config de chaque type d'objet
89+ const $getSiteGroups = this . buildObjectConfig (
90+ 'sites_group' ,
91+ module_permissions [ 'sites_group' ] . R ,
92+ this . serviceSitesGroup
93+ ) ;
94+
95+ const $getSites = this . buildObjectConfig (
96+ 'site' ,
97+ module_permissions [ 'site' ] . R ,
98+ this . serviceSite
99+ ) ;
100+
101+ const $getIndividuals = this . buildObjectConfig (
102+ 'individual' ,
103+ module_permissions [ 'individual' ] . R ,
104+ this . serviceIndividual
105+ ) ;
106+
107+ return forkJoin ( [ $getSiteGroups , $getSites , $getIndividuals ] ) . pipe (
108+ map ( ( [ processedSiteGroups , processedSites , processedIndividuals ] ) => {
109+ return {
110+ sitesGroups : {
111+ data : processedSiteGroups ,
112+ objConfig : this . serviceSitesGroup . objectObs ,
113+ } ,
114+ sites : { data : processedSites , objConfig : this . serviceSite . objectObs } ,
115+ individuals : {
116+ data : processedIndividuals ,
117+ objConfig : this . serviceIndividual . objectObs ,
118+ } ,
119+ route : route [ '_urlSegment' ] . segments [ 3 ] . path ,
120+ permission : this . currentPermission ,
121+ tree : this . listChildObjectType ,
122+ moduleCode,
123+ } ;
132124 } )
125+ ) ;
126+ } ) ,
127+ mergeMap ( ( result ) => {
128+ return result ;
129+ } )
133130 ) ;
134- return resolvedData ;
131+ return this . resolvedData ;
135132 }
136-
137- buildObjectConfig ( object_type , config , permission , objectService , moduleCode ) {
133+ buildObjectConfig ( object_type , permission , objectService ) {
138134 let configSchemaObjetType = {
139135 sorts : [ ] ,
140136 specific : { } ,
141137 } ;
138+ const config = objectService . objectObs ;
142139 let $getObjetTypes = of ( null ) ;
140+
143141 if ( this . listChildObjectType . includes ( object_type ) && config ) {
144142 configSchemaObjetType = this . _configService . configModuleObject (
145143 config . moduleCode ,
0 commit comments