{"version":3,"file":"cocori-ng-src-feature-core.mjs","sources":["../../../projects/cocori-ng/src/feature-core/service/http.service.ts","../../../projects/cocori-ng/src/feature-core/service/storage.service.ts","../../../projects/cocori-ng/src/feature-core/service/token.service.ts","../../../projects/cocori-ng/src/feature-core/service/broadcast-event.service.ts","../../../projects/cocori-ng/src/feature-core/service/interceptors/global-error-interceptor.service.ts","../../../projects/cocori-ng/src/feature-core/service/interceptors/loading-interceptor.service.ts","../../../projects/cocori-ng/src/feature-core/service/interceptors/request-interceptor.service.ts","../../../projects/cocori-ng/src/feature-core/service/sort/sort.service.ts","../../../projects/cocori-ng/src/feature-core/service/scroll.service.ts","../../../projects/cocori-ng/src/feature-core/service/inject-component.service.ts","../../../projects/cocori-ng/src/feature-core/service/helper/helper.service.ts","../../../projects/cocori-ng/src/feature-core/service/validators.service.ts","../../../projects/cocori-ng/src/feature-core/service/current-url-routing.service.ts","../../../projects/cocori-ng/src/feature-core/service/odata-query-builder/enums.ts","../../../projects/cocori-ng/src/feature-core/service/odata-query-builder/queryFragment.ts","../../../projects/cocori-ng/src/feature-core/service/odata-query-builder/queryBuilder.ts","../../../projects/cocori-ng/src/feature-core/service/file/file.service.ts","../../../projects/cocori-ng/src/feature-core/service/form-map-value/mapping.service.ts","../../../projects/cocori-ng/src/feature-core/service/helper/helper-form.service.ts","../../../projects/cocori-ng/src/feature-core/service/helper/url-helper.ts","../../../projects/cocori-ng/src/feature-core/service/helper/helper-uploader.service.ts","../../../projects/cocori-ng/src/feature-core/service/wysiwyg.service.ts","../../../projects/cocori-ng/src/feature-core/model/data-source.model.ts","../../../projects/cocori-ng/src/feature-core/service/datasource.service.ts","../../../projects/cocori-ng/src/feature-core/service/string.service.ts","../../../projects/cocori-ng/src/feature-core/model/odata.model.ts","../../../projects/cocori-ng/src/feature-core/model/form-input-components.model.ts","../../../projects/cocori-ng/src/feature-core/model/schema-datas.model.ts","../../../projects/cocori-ng/src/feature-core/model/component-inputs.model.ts","../../../projects/cocori-ng/src/feature-core/cocori-ng-src-feature-core.ts"],"sourcesContent":["import { HttpBackend, HttpClient, HttpEvent, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport enum SkipHeaders {\r\n    TRUE = 'true',\r\n    FALSE = 'false',\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class HttpService {\r\n    protected withCredentialsOption: boolean = false;\r\n    httpWithoutInterceptor: HttpClient;\r\n\r\n    private skip: SkipHeaders = SkipHeaders.FALSE;\r\n\r\n    constructor(\r\n        private http: HttpClient,\r\n        private httpBackend: HttpBackend\r\n    ) {\r\n        this.httpWithoutInterceptor = new HttpClient(httpBackend);\r\n    }\r\n\r\n    public set withCredentials(value: boolean) {\r\n        this.withCredentialsOption = value;\r\n    }\r\n\r\n    public get withCredentials() {\r\n        return this.withCredentialsOption;\r\n    }\r\n\r\n    /** TODO: à tester car pas sûr que cela fonctionne... */\r\n    delete<T>(path: string, params?: Object, skip: string = SkipHeaders.FALSE): Observable<T> {\r\n        let options = { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption }\r\n\r\n        if (skip === SkipHeaders.FALSE) {\r\n\r\n            options['headers'] = { skip: skip }\r\n\r\n            return this.http.delete(`${path}`, options)\r\n                .pipe(\r\n                    map(this.extractData.bind(this))\r\n                ) as Observable<T>;\r\n        } else {\r\n            return this.httpWithoutInterceptor.delete(`${path}`, options)\r\n                .pipe(\r\n                    map(this.extractData.bind(this))\r\n                ) as Observable<T>;\r\n        }\r\n    }\r\n\r\n    get<T>(path: string, params?: Object, skip: string = SkipHeaders.FALSE): Observable<T> {\r\n        let options = { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption }\r\n\r\n        if (skip === SkipHeaders.FALSE) {\r\n            options['headers'] = { skip: skip }\r\n\r\n            return this.http.get(`${path}`, options)\r\n                .pipe(map(this.extractData.bind(this)))\r\n        } else {\r\n            return this.httpWithoutInterceptor.get(`${path}`, options)\r\n                .pipe(map(this.extractData.bind(this)))\r\n        }\r\n    }\r\n\r\n    post<T>(path: string, body: Object = {}, skip: string = SkipHeaders.FALSE): Observable<T> {\r\n        let options: Object = { withCredentials: this.withCredentialsOption }\r\n\r\n        if (skip === SkipHeaders.FALSE) {\r\n            options['headers'] = new HttpHeaders().set('skip', skip)\r\n\r\n            return this.http.post(\r\n                `${path}`,\r\n                JSON.stringify(body),\r\n                options\r\n            ).pipe(map(this.extractData.bind(this)))\r\n        } else {\r\n            options['headers'] = new HttpHeaders()\r\n                .set('Content-Type', 'application/json; charset=utf-8')\r\n\r\n            return this.httpWithoutInterceptor.post(\r\n                `${path}`,\r\n                JSON.stringify(body),\r\n                options\r\n            ).pipe(map(this.extractData.bind(this)))\r\n        }\r\n    }\r\n\r\n    put<T>(path: string, body: Object = {}, skip: string = SkipHeaders.FALSE): Observable<any> {\r\n        let options = { withCredentials: this.withCredentialsOption }\r\n\r\n        if (skip === SkipHeaders.FALSE) {\r\n            options['headers'] = { skip: skip }\r\n\r\n            return this.http.put(\r\n                `${path}`,\r\n                JSON.stringify(body),\r\n                options\r\n            ).pipe(map(this.extractData.bind(this)))\r\n        } else {\r\n            return this.httpWithoutInterceptor.put(`${path}`, JSON.stringify(body))\r\n                .pipe(map(this.extractData.bind(this)))\r\n        }\r\n    }\r\n\r\n    patch<T>(path: string, body: Object = {}, skip: string = SkipHeaders.FALSE): Observable<T> {\r\n        let options: Object = { withCredentials: this.withCredentialsOption }\r\n\r\n        if (skip === SkipHeaders.FALSE) {\r\n            options['headers'] = new HttpHeaders().set('skip', skip)\r\n\r\n            return this.http.patch(\r\n                `${path}`,\r\n                JSON.stringify(body),\r\n                options\r\n            ).pipe(map(this.extractData.bind(this)))\r\n        } else {\r\n            options['headers'] = new HttpHeaders()\r\n                .set('Content-Type', 'application/json; charset=utf-8')\r\n\r\n            return this.httpWithoutInterceptor.patch(\r\n                `${path}`,\r\n                JSON.stringify(body),\r\n                options\r\n            ).pipe(map(this.extractData.bind(this)))\r\n        }\r\n    }\r\n\r\n    file<T>(path: string, params?: Object): Observable<T> {\r\n        return this.http.get(`${path}`, { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption, responseType: 'blob' })\r\n            .pipe(\r\n                map(this.extractData.bind(this))\r\n            ) as Observable<T>;\r\n    }\r\n\r\n    upload<T>(path: string, body: Object = {}, options: Object = { withCredentials: this.withCredentialsOption }): Observable<HttpEvent<T>> {\r\n        options['headers'] = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');\r\n        options['reportProgress'] = true;\r\n        options['observe'] = \"events\";\r\n\r\n        return this.http.post(\r\n            `${path}`,\r\n            JSON.stringify(body),\r\n            options\r\n        ) as Observable<HttpEvent<T>>;\r\n    }\r\n\r\n    protected extractData(res: Response) {\r\n        if (!res) return res\r\n\r\n        const body: any = (<any>res.body);\r\n\r\n        if (res.status === 204) return res.body;\r\n\r\n        if (body) {\r\n            return typeof res.body === 'string' ? JSON.parse(<any>res.body) : res.body;\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    protected buildUrlParams(parameters: any): HttpParams {\r\n        let params = new HttpParams();\r\n        for (const property in parameters) {\r\n            if (parameters.hasOwnProperty(property)) {\r\n                params = params.append(property, parameters[property]);\r\n            }\r\n        }\r\n        return params;\r\n    }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n    constructor() { }\r\n\r\n    public setSessionStorageItem(key: string, item: any) {\r\n        sessionStorage.setItem(key, JSON.stringify(item));\r\n    }\r\n\r\n    public getSessionStorageItem(key: string): any {\r\n        let a = null\r\n\r\n        try {\r\n            a = JSON.parse(sessionStorage.getItem(key));\r\n        } catch (e) {\r\n            console.error(`Session storage, erreur in parsing JSON : `, e)\r\n        } finally {\r\n            return a\r\n        }\r\n    }\r\n\r\n    public deleteSessionStorageItem(key: string) {\r\n        sessionStorage.removeItem(key);\r\n    }\r\n\r\n    public setLocalStorageItem(key: string, item: any) {\r\n        localStorage.setItem(key, JSON.stringify(item));\r\n    }\r\n\r\n    public getLocalStorageItem(key: string): any {\r\n        let a = null\r\n\r\n        try {\r\n            a = JSON.parse(localStorage.getItem(key));\r\n        } catch (e) {\r\n            console.error(`Local storage, erreur in parsing JSON : `, e)\r\n        } finally {\r\n            return a\r\n        }\r\n    }\r\n\r\n    public deleteLocalStorageItem(key: string) {\r\n        localStorage.removeItem(key);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { StorageService } from './storage.service';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class TokenService {\r\n\r\n    constructor(private storageService: StorageService) { }\r\n\r\n    get accessToken(): string {\r\n        const token: string = this.storageService.getLocalStorageItem('accessToken');\r\n        return token || null;\r\n    }\r\n\r\n    set accessToken(token: string) {\r\n        this.storageService.setLocalStorageItem('accessToken', token);\r\n    }\r\n\r\n    get refreshToken(): string {\r\n        const token: string = this.storageService.getLocalStorageItem('refreshToken');\r\n\r\n        return token || null;\r\n    }\r\n\r\n    set refreshToken(token: string) {\r\n        this.storageService.setLocalStorageItem('refreshToken', token);\r\n    }\r\n\r\n    deleteTokens() {\r\n        this.storageService.deleteLocalStorageItem('refreshToken');\r\n        this.storageService.deleteLocalStorageItem('accessToken');\r\n    }\r\n\r\n    decryptAccessToken<T>(): T {\r\n        if (this.accessToken) {\r\n            const base64Array: string[] = this.accessToken.split('.');\r\n            const decodedToken = JSON.parse(window.atob(base64Array[1]));\r\n            return decodedToken;\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\ninterface BroadcastEvent {\r\n    eventKeys: EventKeys;\r\n    eventData?: any;\r\n}\r\n\r\ninterface Event<T> {\r\n    eventKey: string;\r\n    event: Observable<T>;\r\n}\r\n\r\ntype EventKeys = (string | number)[];\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class BroadcastEventService {\r\n    private _eventBus: Subject<BroadcastEvent>;\r\n    private _broadcastedEvents: Event<any>[] = [];\r\n\r\n    constructor() {\r\n        this._eventBus = new Subject<BroadcastEvent>();\r\n    }\r\n\r\n    broadcast(event: BroadcastEvent) {\r\n        this._eventBus.next(event);\r\n    }\r\n\r\n    listen<T>(keys: EventKeys): Observable<T> {\r\n        const eventKey: string = keys.join(\"-\")\r\n\r\n        if (!this.isEventKnown(eventKey)) {\r\n            const newEvent: Observable<T> = this._eventBus.asObservable()\r\n                .pipe(\r\n                    filter(event => (event.eventKeys.join(\"-\")) === eventKey),\r\n                    map(event => event.eventData),\r\n                );\r\n\r\n            this._broadcastedEvents.push(<Event<T>>{ eventKey: eventKey, event: newEvent });\r\n\r\n            return newEvent;\r\n        } else {\r\n            return this.returnEvent(eventKey);\r\n        }\r\n    }\r\n\r\n    private isEventKnown(eventKey: string): boolean {\r\n        const index = this._broadcastedEvents.findIndex(entrée => entrée.eventKey === eventKey);\r\n\r\n        return index >= 0;\r\n    }\r\n\r\n    private returnEvent<T>(eventKey: string): Observable<T> {\r\n        const event = this._broadcastedEvents.find(event => event.eventKey === eventKey);\r\n\r\n        return event.event;\r\n    }\r\n}\r\n","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { StorageService } from '../storage.service';\r\n\r\nconst LIMIT_MAX_RELOAD: number = 2\r\nconst TIME_MAX_RELOAD: number = 30 // secondes\r\n\r\nexport interface ReloadPageModel {\r\n  date: Date,\r\n  count: number,\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GlobalErrorInterceptorService implements ErrorHandler {\r\n  // public globalErrorsHandlerSubject: Subject<boolean> = new Subject<boolean>();\r\n\r\n  constructor(\r\n    private injector: Injector,\r\n    private storageService: StorageService) { }\r\n\r\n  handleError(error: any): void {\r\n    const chunkFailedMessage = /Loading chunk [\\d]+ failed/;\r\n\r\n    const router = this.injector.get(Router);\r\n\r\n    if (error.stack) {\r\n      console.error(\"details errors 😱 :\");\r\n      console.error(error.stack.toString());\r\n    } else {\r\n      console.error(\"error undefined 😡\");\r\n    }\r\n\r\n    if (chunkFailedMessage.test(error.message)) {\r\n      // this.globalErrorsHandlerSubject.next(true)\r\n      this.handleReloadPage(error.message.toString())\r\n    }\r\n  }\r\n\r\n  private handleReloadPage(message: string) {\r\n    console.log('%cPage reloaded : errors chunk versions', 'color: blue;')\r\n\r\n    const reloadPage: ReloadPageModel = this.storageService.getSessionStorageItem('reloadPage');\r\n\r\n    if (!reloadPage) {\r\n      this.storageService.setSessionStorageItem('reloadPage', <ReloadPageModel>{ date: new Date(), count: 1 })\r\n    } else if (reloadPage.count < LIMIT_MAX_RELOAD && (new Date().getTime() - new Date(reloadPage.date).getTime()) / 1000 < TIME_MAX_RELOAD) {\r\n      this.storageService.setSessionStorageItem('reloadPage', <ReloadPageModel>{ date: reloadPage.date, count: reloadPage.count + 1 })\r\n    } else {\r\n\r\n      message = `Veuillez communiquer cette erreur à l'administrateur du site : \\n\\n ${message}`\r\n\r\n      alert(message)\r\n\r\n      this.storageService.deleteSessionStorageItem('reloadPage')\r\n      return;\r\n    }\r\n\r\n    window.location.reload();\r\n  }\r\n}","import { HttpEvent, HttpHandler, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LoadingService {\r\n  subject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n  constructor() { }\r\n\r\n  startLoading() {\r\n    this.subject.next(true);\r\n  }\r\n\r\n  stopLoading() {\r\n    this.subject.next(false);\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class LoadingInterceptorService {\r\n  activeRequests: number = 0;\r\n  timer: any;\r\n\r\n  constructor(private loadingScreenService: LoadingService) { }\r\n\r\n  intercept(\r\n    request: HttpRequest<any>,\r\n    next: HttpHandler\r\n  ): Observable<HttpEvent<any>> {\r\n    if (this.activeRequests === 0) {\r\n      this.loadingScreenService.startLoading();\r\n    }\r\n\r\n    this.activeRequests++;\r\n\r\n    clearTimeout(this.timer);\r\n\r\n    this.timer = setTimeout(() => {\r\n      this.forceFinalize();\r\n    }, 5000);\r\n\r\n    return next.handle(request).pipe(\r\n      finalize(() => {\r\n        this.activeRequests--;\r\n\r\n        if (this.activeRequests === 0) {\r\n          this.loadingScreenService.stopLoading();\r\n\r\n          clearTimeout(this.timer);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  forceFinalize() {\r\n    this.activeRequests = 0;\r\n    this.loadingScreenService.stopLoading();\r\n  }\r\n}\r\n","import { HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { HttpService, SkipHeaders } from '../http.service';\r\nimport { TokenService } from '../token.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class RequestInterceptorService implements HttpInterceptor {\r\n\r\n  constructor(\r\n    private tokenService: TokenService,\r\n    private httpService: HttpService) { }\r\n\r\n  intercept(\r\n    request: HttpRequest<any>, next: HttpHandler\r\n  ): Observable<any> {\r\n\r\n    request = this.addAccessTokenRequest(request);\r\n\r\n    return next.handle(request);\r\n  }\r\n\r\n  addAccessTokenRequest(request, token?) {\r\n    const accessToken = token || this.tokenService.accessToken;\r\n\r\n    if (request.headers.get(\"skip\") === SkipHeaders.TRUE) {\r\n      return request = request.clone({\r\n        headers: request.headers.delete('skip')\r\n      });\r\n    }\r\n\r\n    if (!accessToken) {\r\n      return request;\r\n    }\r\n\r\n    return request.clone({\r\n      headers: new HttpHeaders({\r\n        'Content-Type': 'application/json',\r\n        'Authorization': `Bearer ${accessToken}`\r\n      })\r\n    });\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class SortService {\r\n    sortObjectByKeys(objectData: any): any {\r\n        return Object.keys(objectData).sort().reduce(\r\n            (obj: any, key: string) => {\r\n                obj[key] = objectData[key];\r\n                return obj;\r\n            }, {}\r\n        );\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n    public scrollingNativeElement: HTMLElement\r\n    public onScroll: Subject<boolean> = new Subject<boolean>();\r\n\r\n    constructor() { }\r\n\r\n    private currentScrollPosition() {\r\n        // Firefox, Chrome, Opera, Safari\r\n        if (self.pageYOffset) return self.pageYOffset;\r\n        // Internet Explorer 6 - standards mode\r\n        if (document.documentElement && document.documentElement.scrollTop) {\r\n            return document.documentElement.scrollTop;\r\n        }\r\n        // Internet Explorer 6, 7 and 8\r\n        if (document.body.scrollTop) return document.body.scrollTop;\r\n        return 0;\r\n    }\r\n\r\n    private getElementDomPosition(elm) {\r\n        let y = elm.offsetTop - 100;\r\n        let node: any = elm;\r\n\r\n        while (node.offsetParent && node.offsetParent !== document.body) {\r\n            node = node.offsetParent;\r\n            y += node.offsetTop;\r\n        } return y;\r\n    }\r\n\r\n    scrollToTop() {\r\n        const that = this;\r\n        let timeOut;\r\n        if (document.body.scrollTop !== 0 || document.documentElement.scrollTop !== 0) {\r\n            window.scrollBy(0, -50);\r\n\r\n            timeOut = setTimeout(function () {\r\n                that.scrollToTop();\r\n            }, 10);\r\n\r\n        } else {\r\n            clearTimeout(timeOut);\r\n        }\r\n    }\r\n\r\n    scrollToIdSmooth(eID) {\r\n        const startY = this.currentScrollPosition();\r\n        const elm = document.getElementById(eID);\r\n        const stopY = this.getElementDomPosition(elm);\r\n        const distance = stopY > startY ? stopY - startY : startY - stopY;\r\n        if (distance < 100) {\r\n            scrollTo(0, stopY); return;\r\n        }\r\n        let speed = Math.round(distance / 100);\r\n\r\n        if (speed >= 20) {\r\n            speed = 20;\r\n        }\r\n\r\n        const step = Math.round(distance / 25);\r\n        let leapY = stopY > startY ? startY + step : startY - step;\r\n        let timer = 0;\r\n        if (stopY > startY) {\r\n            for (let i = startY; i < stopY; i += step) {\r\n                setTimeout(\"window.scrollTo(0, \" + leapY + \")\", timer * speed);\r\n                leapY += step; if (leapY > stopY) leapY = stopY; timer++;\r\n            } return;\r\n        }\r\n        for (let i = startY; i > stopY; i -= step) {\r\n            setTimeout(\"window.scrollTo(0, \" + leapY + \")\", timer * speed);\r\n            leapY -= step; if (leapY < stopY) leapY = stopY; timer++;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    getScrollDistanceTo(eID): number {\r\n        const elm = document.getElementById(eID);\r\n\r\n        if (!elm) return -1; // element not found\r\n\r\n        const stopY = this.getElementDomPosition(elm);\r\n\r\n        return stopY\r\n    }\r\n}\r\n","import { Injectable, Type, ViewContainerRef } from '@angular/core';\r\n\r\nexport interface InputsComponent {\r\n    [key: string]: any;\r\n}\r\n\r\nexport interface OutputsComponent {\r\n    [key: string]: Function;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class InjectComponentService {\r\n    componentsRefs: any[] = [];\r\n\r\n    /**\r\n     * Exemple d'utilisation:\r\n     \r\n     * this.injectComponentService.loadAndAddComponentToContainer(MyClasseComponent, #DomReference,\r\n            { @InputName_1: Value, @InputName_2: Value }, { @OutputName_1: (valueEmited: any) => this.callback(valueEmited)})\r\n     * Ou si le composant n'a pas de @Output\r\n     * this.injectComponentService.loadAndAddComponentToContainer(MyClasseComponent, #DomReference,\r\n            { @InputName_1: Value, @InputName_2: Value }, null)\r\n     */\r\n    loadAndAddComponentToContainer(\r\n        componentClass: Type<any>,\r\n        viewContainerRef: ViewContainerRef,\r\n        inputs: InputsComponent,\r\n        outputs?: OutputsComponent,\r\n        index?: number\r\n    ) {\r\n        // const factory = this.componentFactoryResolver.resolveComponentFactory(componentClass);\r\n        const componentRef = viewContainerRef.createComponent(componentClass, { index: index ? index : null });\r\n\r\n        /** inputs */\r\n        for (const [key, value] of Object.entries(inputs)) {\r\n            (componentRef.instance)[key] = value;\r\n        }\r\n\r\n        /** outputs */\r\n        if (outputs) {\r\n            for (const [key, value] of Object.entries(outputs)) {\r\n                if (key && value && (componentRef.instance)[key]) (componentRef.instance)[key].subscribe(data => value(data));\r\n            }\r\n        }\r\n\r\n        componentRef.changeDetectorRef.detectChanges();\r\n\r\n        this.componentsRefs.push(componentRef);\r\n    }\r\n\r\n    removeComponentFromViewContainer(index: number, viewContainerRef: ViewContainerRef) {\r\n        viewContainerRef.remove(index);\r\n\r\n        this.componentsRefs.splice(index, 1);\r\n    }\r\n\r\n    moveComponentFromViewContainer(currentIndex: number, previousIndex: number, viewContainerRef: ViewContainerRef) {\r\n        viewContainerRef.move(viewContainerRef.get(previousIndex), currentIndex);\r\n\r\n        this.componentsRefs.splice(previousIndex, 0, this.componentsRefs.splice(currentIndex, 1)[0]);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class HelperService {\r\n\r\n    generateGuid(): string {\r\n        return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +\r\n            this.s4() + '-' + this.s4() + this.s4() + this.s4();\r\n    }\r\n\r\n    private s4() {\r\n        return Math.floor((1 + Math.random()) * 0x10000)\r\n            .toString(16)\r\n            .substring(1);\r\n    }\r\n\r\n    removeValueFromArrayByIndex(arrayValues: any[], index: number): any[] {\r\n        if (index === -1) return arrayValues;\r\n        return [...arrayValues.slice(0, index), ...arrayValues.slice(index + 1)];\r\n    }\r\n\r\n    /** arrondir un nombre */\r\n    roundUp(num: number, precision: number) {\r\n        precision = Math.pow(10, precision)\r\n        return Math.ceil(num * precision) / precision\r\n    }\r\n\r\n    /**  */\r\n\r\n    static retourneNomDeDomaine(): string {\r\n        return location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');\r\n    }\r\n\r\n    static enleverNomDomaineUrl(url: string): string {\r\n        if (!url) return null;\r\n\r\n        if (!/^http[s]?:\\/\\//.test(url)) return url;\r\n\r\n        const urlSansHttp: string[] = url.split(/^http[s]?:\\/\\//);\r\n\r\n        const indexSlash: number = urlSansHttp[1].indexOf(\"/\");\r\n\r\n        const urlValide: string = urlSansHttp[1].substring(indexSlash);\r\n\r\n        return urlValide;\r\n    }\r\n\r\n    static retourneSegmentsURL(): string[] {\r\n        const pathName: string = window.location.pathname;\r\n        // on supprime du pathname le dernier caractères s'il s'agit d'un /\r\n        return pathName.replace(/\\/$/, '').split('/');\r\n    }\r\n\r\n    static ouvrirUrlExterne(lien: string, estceNouvelOnglet: boolean = false) {\r\n        if (!this.retourneNullSiNonDéfini(lien)) return;\r\n\r\n        let url: string = '';\r\n        if (!/^http[s]?:\\/\\//.test(lien)) {\r\n            url += 'http://';\r\n        }\r\n\r\n        url += lien;\r\n\r\n        if (estceNouvelOnglet) {\r\n            window.open(url);\r\n        } else {\r\n            window.location.href = url;\r\n        }\r\n    }\r\n\r\n    static nettoyerParametresUrl(ancienneUrl: string): string {\r\n        let index = 0;\r\n        let nouvelleUrl = ancienneUrl;\r\n        index = ancienneUrl.indexOf('?');\r\n\r\n        if (index === -1) {\r\n            index = ancienneUrl.indexOf('#');\r\n        }\r\n        if (index !== -1) {\r\n            nouvelleUrl = ancienneUrl.substring(0, index);\r\n        }\r\n\r\n        return nouvelleUrl;\r\n    }\r\n\r\n    static construireUrl(url: string): string {\r\n        return this.retourneNomDeDomaine() + '/' + url;\r\n    }\r\n\r\n    static segmentsURL(url: string): string[] {\r\n        if (!url) return [];\r\n        // on supprime de l'url le 1er / et le de dernier /\r\n        return url.replace(/\\/*/, '').replace(/\\/$/, '').split('/');\r\n    }\r\n\r\n\r\n    static estceUrlValide(string) {\r\n        const res = string.match(/(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/g);\r\n        if (!res) {\r\n            return false;\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    static encoderParamètresUrl(data): string {\r\n        const ret = [];\r\n\r\n        for (const key in data) {\r\n            if (data.hasOwnProperty(key)) {\r\n                const element = data[key];\r\n\r\n                ret.push(encodeURIComponent(key) + '=' + encodeURIComponent(element));\r\n            }\r\n        }\r\n\r\n        return ret.join('&');\r\n    }\r\n\r\n    static concaténerParamètresUrl(url: string, paramètres: string): string {\r\n        return url + '?' + paramètres;\r\n    }\r\n\r\n    static ajouterParamètreUrl(url: string, param: string, value?: string): string {\r\n        const a = document.createElement('a'), regex = /(?:\\?|&amp;|&)+([^=]+)(?:=([^&]*))*/g;\r\n        let match = null;\r\n        const str = []; a.href = url; param = encodeURIComponent(param);\r\n\r\n        while (match = regex.exec(a.search)) {\r\n            if (param !== match[1]) str.push(match[1] + (match[2] ? \"=\" + match[2] : \"\"));\r\n        }\r\n\r\n        str.push(param + (value ? \"=\" + encodeURIComponent(value) : \"\"));\r\n        a.search = str.join(\"&\");\r\n        return a.href;\r\n    }\r\n\r\n    /**\r\n     * Retourne l'url courante sans les paramètres\r\n     */\r\n    static donneUrlCouranteSansParamètre(): string {\r\n        return window.location.href.split(/[?#]/)[0];\r\n    }\r\n\r\n    /**\r\n     * JavaScript Get URL Parameter\r\n     * @param String prop The specific URL parameter you want to retreive the value for\r\n     * @return String|Object If prop is provided a string value is returned, otherwise an object of all properties is returned\r\n     */\r\n    static donneParamètresUrl(prop?: string, urlStatique?: string): string | object {\r\n        const params = {};\r\n        const urlCourante = urlStatique ? urlStatique : window.location.href;\r\n        const search = decodeURIComponent(urlCourante.slice(urlCourante.indexOf('?') + 1));\r\n\r\n        if (search === urlCourante) return null;\r\n\r\n        const definitions = search.split('&');\r\n\r\n        definitions.forEach(function (val, key) {\r\n            const parts = val.split('=', 2);\r\n            params[parts[0]] = parts[1];\r\n        });\r\n\r\n        if ((prop && !(prop in params))) {\r\n            return null;\r\n        }\r\n\r\n        return (prop && prop in params) ? params[prop] : params;\r\n    }\r\n\r\n\r\n    static retourneParamètresAccolades(url: string): string[] {\r\n        if (!this.retourneNullSiNonDéfini(url)) {\r\n            return [];\r\n        }\r\n\r\n        const résultat: string[] = url.match(/\\{(.*?)\\}/g); // entre {}\r\n\r\n        return !résultat ? [] : résultat;\r\n    }\r\n\r\n    /** efface les paramètres entre accolades d'une chaîne */\r\n    static effacerParamètresAccolades(chaine: string): string {\r\n        return this.éviterDoubleSlash(this.replaceAll(chaine, /\\{(.*?)\\}/g, \"\"));\r\n    }\r\n\r\n    static remplacerParamètresAccolades(chercherDans: string, motif: string, valeur: string): string {\r\n        return HelperService.replaceAll(chercherDans, `{${motif}}`, valeur);\r\n    }\r\n\r\n    static estceObjetVide(objet: any) {\r\n        return Object.keys(objet).length === 0 && objet.constructor === Object;\r\n    }\r\n\r\n    /**\r\n     * Détection de savoir s'il l'on vient d'une nouvelle page ou d'une page du site\r\n     */\r\n    static pageOuverteDepuisScript(): boolean {\r\n        return window.opener !== null;\r\n    }\r\n\r\n    static éviterDoubleSlash(chaine: string): string {\r\n        return HelperService.replaceAll(chaine, /(https?:\\/\\/)|(\\/){2,}/g, \"$1$2\");\r\n    }\r\n\r\n    /**\r\n     * Vérifie s'il existe une concordance entre les `paramètres de l'url courante` et les `paramètres de la source de données`\r\n     * @param urlSourceDonnées : exemple : la source de données d'une page de type formulaire, http://api.sonate-dev.fr:85/tiers/individus/{id}\r\n     * @param urlCouranteStatique : l'url du navigateur, http://localhost:1200/page/lab-formulaire?id=016247a2-2c1c-4e08-bd78-9b05659ec5ee\r\n     */\r\n    static siConcordanceParamètresURLetSourceDonnées(urlSourceDonnées: string, urlCouranteStatique?: string): boolean {\r\n        if (!urlSourceDonnées) return null;\r\n\r\n        const urlCourante = urlCouranteStatique ? urlCouranteStatique : window.location.search;\r\n        const paramètresAccolades: string[] = this.retourneParamètresAccolades(urlSourceDonnées);\r\n\r\n        if (!paramètresAccolades.length) {\r\n            return false;\r\n        }\r\n\r\n        for (let index = 0; index < paramètresAccolades.length; index++) {\r\n            const paramètreAvecAccolades = paramètresAccolades[index];\r\n            const paramètreSansAccolade: string = paramètreAvecAccolades.substring(paramètreAvecAccolades.lastIndexOf(\"{\") + 1, paramètreAvecAccolades.lastIndexOf(\"}\"));\r\n            const valeurParamètre: string | object = this.donneParamètresUrl(paramètreSansAccolade, urlCourante);\r\n\r\n            if (!valeurParamètre) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    static retourneNullSiNonDéfini(valeur: any) {\r\n        if (Array.isArray(valeur)) {\r\n            valeur = valeur.length === 0 ? null : valeur;\r\n        } else if (typeof valeur === 'number') {\r\n            return valeur;\r\n        } else {\r\n            valeur = typeof valeur === \"string\" ? valeur.trim() : valeur;\r\n        }\r\n        return !valeur ? null : valeur;\r\n    }\r\n\r\n    static replaceAll(text, pattern, newText): string {\r\n        return text.replace(new RegExp(pattern, 'g'), newText);\r\n    }\r\n\r\n    static valeurTexteBooléen(valeur: boolean): string {\r\n        if (typeof (valeur) === \"boolean\") {\r\n            return valeur ? \"Oui\" : \"Non\";\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    static estNumerique(n: any): boolean {\r\n        return !isNaN(parseFloat(n)) && isFinite(n);\r\n    }\r\n\r\n    // 01 02 03 04 05 -> 0102030405\r\n    static adapteurEcritureTelephone(valeurAvecEspace: string): string {\r\n        let valeurSansEspace: string;\r\n\r\n        if (!this.retourneNullSiNonDéfini(valeurAvecEspace)) {\r\n            return null;\r\n        }\r\n\r\n        const tmp: string[] = valeurAvecEspace.split(' ');\r\n\r\n        valeurSansEspace = tmp[0] + tmp[1] + tmp[2] + tmp[3] + tmp[4];\r\n        return valeurSansEspace;\r\n    }\r\n\r\n    static retourneValeurObjet(objet: any, propriété: string) {\r\n        if (typeof objet !== 'undefined' && objet.hasOwnProperty(propriété)) {\r\n            return objet[propriété];\r\n        }\r\n        return null;\r\n    }\r\n\r\n    static dupliquerTableau(tableau: any[]): any[] {\r\n        return [...tableau];\r\n    }\r\n\r\n    static ajouterValeurTableau(tableau: any[], valeur: any): any[] {\r\n        return [...tableau, valeur];\r\n    }\r\n\r\n    static ajouterValeurUniqueTableau(tableau: any[], valeur: any): any[] {\r\n        if (tableau.indexOf(valeur) === -1) {\r\n            return [...tableau, valeur];\r\n        }\r\n\r\n        return tableau;\r\n    }\r\n\r\n    static arrondirZeroCinqPrès(nombre: number): number {\r\n        return Math.round(nombre * 2) * 0.5;\r\n    }\r\n\r\n    /**\r\n     * Un GUID envoyé depuis le back au front est de la forme : (inheritor) {_value: \"0163d59a-bcd8-44fe-852f-100af77dfb9b\"}\r\n     * @param objetInheritor objet GUID envoyé depuis le backoffice\r\n     */\r\n    static désérialiserInheritorGuid(objetInheritor: any): string {\r\n        return objetInheritor._value ? objetInheritor._value : null;\r\n    }\r\n\r\n    static sérialiserInheritorGuid(valeur: any): object {\r\n        return null\r\n        // return valeur._value ? valeur : new Guid(valeur);\r\n    }\r\n\r\n    static estdetypeInheritorGuid(valeur: any): object {\r\n        return valeur.hasOwnProperty(\"_value\");\r\n    }\r\n\r\n    static estdetypeGuid(valeur: string): boolean {\r\n        if (!valeur) return false;\r\n        return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(valeur);\r\n    }\r\n\r\n    /** fin bloc GUID */\r\n\r\n    static valeurDéfautBooléen(valeur: any): boolean {\r\n        return (typeof valeur !== \"undefined\" && !valeur) ? false : true;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nimport { HelperService } from './helper/helper.service';\r\n\r\nexport interface ValidtionError {\r\n    key: string;\r\n    value?: any;\r\n    message?: string;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class ValidatorsService {\r\n\r\n    public getValidationErrorMessage(error: ValidtionError): any {\r\n\r\n        const configClésErreurs: any = {\r\n            'required': (!error.message ? 'Veuillez saisir ce champ' : error.message),\r\n            'invalidEmailAddress': 'L\\'e-mail n\\'est pas valide.',\r\n            'invalidCodePostal': 'Le code postal n\\'est pas valide.',\r\n            'invalidDate': \"Veuillez saisir une date valide.\",\r\n            'invalidHeure': \"L'heure n'est pas au bon format.\",\r\n            'invalideDateHeure': \"La date/heure n'est pas valide.\",\r\n            'regexInvalide': (!error.value.formatRegexEnClair ? 'Le format attendu est incorrect.' : `Fomat attendu : ${error.value.formatRegexEnClair}.`),\r\n            'invalidTypeMime': \"Le type du document n'est pas accepté.\",\r\n            'invalidTailleTotaleUpload': `La taille totale des pièces jointes est atteinte.`,\r\n            'invalidTailleUpload': `La taille limite de la pièce jointe est atteinte.`,\r\n            'datePasseeInvalide': \"La date doit être dans le passé.\",\r\n            'dateFutureInvalide': \"La date doit être dans le future.\",\r\n            'datePasseeOuPresenteInvalide': \"La date doit être passée ou présente.\",\r\n            'dateFutureOuPresenteInvalide': \"La date doit être présente ou future.\",\r\n            'invalidIMEI': \"Le numéro IMEI est invalide.\",\r\n            'invalidDateAnterieure': \"La date doit être antérieure.\",\r\n            'dateAvantUneAutre': \"La date B doit être antérieure à la date A.\",\r\n            'invalidNumeroTelephone': 'Le numéro de téléphone n\\'est pas valide.',\r\n            'adresseMailDejaUtilisee': 'L\\'adresse e-mail est déjà utilisée.',\r\n            'identiqueValidator': 'Le champ n\\'est pas identique.',\r\n            'pseudoDejaUtilisee': 'Le pseudo est déjà utilisé.',\r\n            'utilisateurMajeurInvalide': 'Vous devez être majeur.',\r\n            'entierInvalide': 'Saisissez un entier.',\r\n            'auMoinsUnChampRequis': 'Veuillez saisir au moins un critère de recherche.'\r\n        };\r\n\r\n        return configClésErreurs[error.key];\r\n    }\r\n\r\n    public static require(control: UntypedFormControl): ValidationErrors {\r\n        const value = HelperService.retourneNullSiNonDéfini(control.value)\r\n\r\n        if (control.hasValidator(ValidatorsService.dateValidator)) {\r\n            return value === null ? { invalidDate: true } : null;\r\n        } else {\r\n            return value === null ? { \"required\": true } : null;\r\n        }\r\n    }\r\n\r\n    public static emailValidator(control: UntypedFormControl): ValidationErrors {\r\n        if (!control.value) return null;\r\n\r\n        // RFC 2822 compliant regex\r\n        if (control.value.match(/[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?/)) {\r\n            return null;\r\n        } else {\r\n            return { 'invalidEmailAddress': true };\r\n        }\r\n    }\r\n\r\n    public static dateValidator(control: UntypedFormControl): ValidationErrors {\r\n        return null\r\n    }\r\n\r\n    public static telephoneValidator(control: UntypedFormControl): any {\r\n        if (!control.value) return null;\r\n\r\n        if (control.value.match(/^0[1-9](\\s[0-9][0-9]){4}$/)) {\r\n            return null;\r\n        } else {\r\n            return { 'invalidNumeroTelephone': true };\r\n        }\r\n    }\r\n\r\n    public static codepostalValidator(control: UntypedFormControl): any {\r\n        if (!control.value) return null;\r\n\r\n        if (control.value.match(/^(([0-8][0-9])|(9[0-5]))[0-9]{3}$/)) {\r\n            return null;\r\n        } else {\r\n            return { 'invalidCodePostal': true };\r\n        }\r\n    }\r\n\r\n    /** VALIDATEURS DATES */\r\n\r\n    /**\r\n     * La date à valider est au format UTC : 1982-11-06T00:00:00Z\r\n     */\r\n    // public static dateValidateurUTC(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const str = control.value;\r\n\r\n    //     const dateValide: boolean = DateFunctions.validerDateUTC(str);\r\n\r\n    //     return dateValide ? null : { 'invalidDate': true };\r\n    // }\r\n\r\n    // l'heure est au format 11h12\r\n    // public static heureValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const str = control.value;\r\n\r\n    //     if (DateFunctions.validerUneHeure(str)) {\r\n    //         return null;\r\n    //     } else {\r\n    //         return { 'invalidHeure': true };\r\n    //     }\r\n    // }\r\n\r\n    // la date heure est au format 01/01/2018 à 12h14\r\n    // public static dateHeureValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const str: string = control.value;\r\n\r\n    //     const valeurSplit: string[] = str.split(configdefault.date.dateTimeSeparator);\r\n\r\n    //     const dateValide: boolean = DateFunctions.validerDateJJMMAAAA(valeurSplit[0]);\r\n    //     const heureValide: boolean = DateFunctions.validerUneHeure(valeurSplit[1]);\r\n\r\n    //     if (!dateValide) {\r\n    //         return { 'invalidDate': true };\r\n    //     } else if (!heureValide) {\r\n    //         return { 'invalidHeure': true };\r\n    //     } else {\r\n    //         return null;\r\n    //     }\r\n    // }\r\n\r\n    /**\r\n     * La date à valider est au format UTC : 1982-11-06T15:15:15Z\r\n     * invalideDateHeure\r\n     */\r\n    // public static dateHeureValidateurUTC(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const str = control.value;\r\n\r\n    //     const dateValide: boolean = DateFunctions.validerDateUTC(str);\r\n\r\n    //     return dateValide ? null : { 'invalideDateHeure': true };\r\n\r\n    // }\r\n\r\n    // public static datePasséeValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const dates: Date[] = DateFunctions.validateurDatesAides(control.value);\r\n\r\n    //     if (dates[0] >= dates[1]) {\r\n    //         return {\r\n    //             'datePasseeInvalide': true\r\n    //         };\r\n    //     }\r\n\r\n    //     return null;\r\n    // }\r\n\r\n    // public static dateFutureValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const dates: Date[] = DateFunctions.validateurDatesAides(control.value);\r\n\r\n    //     if (dates[0] <= dates[1]) {\r\n    //         return {\r\n    //             'dateFutureInvalide': true\r\n    //         };\r\n    //     }\r\n\r\n    //     return null;\r\n    // }\r\n\r\n    // public static datePasséeOuPrésenteValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const dates: Date[] = DateFunctions.validateurDatesAides(control.value);\r\n\r\n    //     if (dates[0] > dates[1]) {\r\n    //         return {\r\n    //             'datePasseeOuPresenteInvalide': true\r\n    //         };\r\n    //     }\r\n\r\n    //     return null;\r\n    // }\r\n\r\n    // public static dateFutureOuPrésenteValidateur(control: FormControl): any {\r\n    //     if (!control.value) return null;\r\n\r\n    //     const dates: Date[] = DateFunctions.validateurDatesAides(control.value);\r\n\r\n    //     if (dates[0] < dates[1]) {\r\n    //         return {\r\n    //             'dateFutureOuPresenteInvalide': true\r\n    //         };\r\n    //     }\r\n\r\n    //     return null;\r\n    // }\r\n\r\n    /** / VALIDATEURS DATES */\r\n\r\n    // https://medium.com/front-end-hacking/reactive-forms-and-form-validation-with-angular-fdcbcf98e1e8\r\n    public static regexValidator(regle: string, formatRegexEnClair: string): ValidatorFn {\r\n        return (control: AbstractControl): { [key: string]: any } => {\r\n            if (!control.value) return null;\r\n\r\n            const regexp: RegExp = new RegExp(regle);\r\n\r\n            return !regexp.test(control.value) ? { 'regexInvalide': { formatRegexEnClair } } : null;\r\n        };\r\n    }\r\n\r\n    public static numeroSinistreValidator(control: UntypedFormControl): any {\r\n        if (!control.value) return null;\r\n\r\n        if (control.value.match(/^([A-z0-9]{2})?(L|l)[A-z0-9](T|t)[A-z0-9]{5}$/)) {\r\n            return null;\r\n        } else {\r\n            return { 'invalidNumeroSinistre': true };\r\n        }\r\n    }\r\n\r\n    public static caseACocherRequireValidator(control: UntypedFormControl): any {\r\n        if (control.value === true) {\r\n            return null;\r\n        } else {\r\n            return { 'required': true };\r\n        }\r\n    }\r\n\r\n    public static dateAvantUneAutre(champDateAvant: string, champDateAprès: string): any {\r\n        return (group: UntypedFormGroup): { [key: string]: any } => {\r\n\r\n            if (!group.get(champDateAvant) || !group.get(champDateAprès)) return null;\r\n\r\n            const dateDébut: any = group.get(champDateAvant).value;\r\n            const dateFin: any = group.get(champDateAprès).value;\r\n\r\n            if (dateDébut > dateFin) {\r\n                return {\r\n                    'erreurDateFinAvantDébut': true\r\n                };\r\n            }\r\n\r\n            return null;\r\n        };\r\n    }\r\n\r\n    // https://gist.github.com/DiegoSalazar/4075533\r\n    public static luhnValidator(control: UntypedFormControl): any {\r\n        let valeur: string = control.value;\r\n\r\n        // accept only digits, dashes or spaces\r\n        if (/[^0-9-\\s]+/.test(valeur)) return { 'invalidIMEI': true };\r\n\r\n        // The Luhn Algorithm. It's so pretty.\r\n        let nCheck = 0;\r\n        let nDigit: number = 0;\r\n        let bEven: boolean = false;\r\n\r\n        valeur = valeur.replace(/\\D/g, \"\");\r\n\r\n        for (let n = valeur.length - 1; n >= 0; n--) {\r\n            const cDigit = valeur.charAt(n);\r\n            nDigit = parseInt(cDigit, 10);\r\n\r\n            if (bEven) {\r\n                if ((nDigit *= 2) > 9) nDigit -= 9;\r\n            }\r\n\r\n            nCheck += nDigit;\r\n            bEven = !bEven;\r\n        }\r\n\r\n        if (nCheck % 10 === 0) {\r\n            return null;\r\n        } else {\r\n            return { 'invalidIMEI': true };\r\n        }\r\n    }\r\n\r\n    public static identiqueValidator(controle: string, controleConfirme: string): any {\r\n        return (group: UntypedFormGroup): { [key: string]: any } => {\r\n            const password = group.controls[controle];\r\n            const confirmPassword = group.controls[controleConfirme];\r\n\r\n            if (password.value !== confirmPassword.value) {\r\n                return {\r\n                    'identiqueValidator': true\r\n                };\r\n            }\r\n        };\r\n    }\r\n\r\n    public static êtreMajeurValidateur(control: UntypedFormControl): any {\r\n        if (parseInt(control.value) >= 18) {\r\n            return null;\r\n        } else {\r\n            return { 'utilisateurMajeurInvalide': true };\r\n        }\r\n    }\r\n\r\n    public static entierValidateur(control: UntypedFormControl): any {\r\n        if (control.value.match(/^\\d+$/)) {\r\n            return null;\r\n        } else {\r\n            return { 'entierInvalide': true };\r\n        }\r\n    }\r\n\r\n    public static auMoinsUnChampDoitEtreRequisValidateur(): any {\r\n        return (group: UntypedFormGroup): { [key: string]: any } => {\r\n            let isAtLeastOne = false;\r\n\r\n            if (group && group.controls) {\r\n                for (const control in group.controls) {\r\n                    if (group.controls.hasOwnProperty(control) && group.controls[control].valid && HelperService.retourneNullSiNonDéfini(group.controls[control].value)) {\r\n                        isAtLeastOne = true;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            return isAtLeastOne ? null : { 'auMoinsUnChampRequis': true };\r\n        };\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class CurrentUrlRoutingService {\r\n    public currentUrl = new BehaviorSubject<string>(undefined);\r\n}\r\n","export enum FragmentType {\r\n    OrderBy = 1,\r\n    Top = 2,\r\n    Skip = 3,\r\n    Count = 4,\r\n    Expand = 5,\r\n    Filter = 6,\r\n    Select = 7\r\n  }\r\n","import { FragmentType } from './enums';\r\n\r\nexport class QueryFragment {\r\n  constructor(public type: FragmentType, public value: string) {}\r\n}\r\n","import { FragmentType } from './enums';\r\nimport { QueryFragment } from './queryFragment';\r\n\r\n// const orderBy = require('lodash.orderby');\r\n\r\ntype filterExpressionType = string | number | boolean | Date;\r\n\r\nexport default class FilterBuilder {\r\n  private fragments: QueryFragment[] = [];\r\n  filterExpression = (field: string, operator: string, value: filterExpressionType) => {\r\n    this.fragments.push(\r\n      new QueryFragment(FragmentType.Filter, `${field} ${operator} ${this.getValue(value)}`)\r\n    );\r\n    return this;\r\n  };\r\n  filterPhrase = (phrase: string) => {\r\n    this.fragments.push(new QueryFragment(FragmentType.Filter, phrase));\r\n    return this;\r\n  };\r\n  and = (predicate: (filter: FilterBuilder) => FilterBuilder) => {\r\n    this.fragments.push(\r\n      new QueryFragment(FragmentType.Filter, `(${predicate(new FilterBuilder()).toQuery('and')})`)\r\n    );\r\n    return this;\r\n  };\r\n  or = (predicate: (filter: FilterBuilder) => FilterBuilder) => {\r\n    this.fragments.push(\r\n      new QueryFragment(FragmentType.Filter, `(${predicate(new FilterBuilder()).toQuery('or')})`)\r\n    );\r\n    return this;\r\n  };\r\n  toQuery = (operator: string): string => {\r\n    if (!this.fragments || this.fragments.length < 1) return '';\r\n    return this.fragments.map(f => f.value).join(` ${operator} `);\r\n  };\r\n\r\n  private getValue(value: filterExpressionType): string {\r\n    let type: string = typeof value;\r\n    if (value instanceof Date) type = 'date';\r\n\r\n    switch (type) {\r\n      case 'string':\r\n        return `'${value}'`;\r\n      case 'date':\r\n        return `${(value as Date).toISOString()}`;\r\n      default:\r\n        return `${value}`;\r\n    }\r\n  }\r\n}\r\n\r\nexport class QueryBuilder {\r\n  private fragments: QueryFragment[] = [];\r\n  orderBy = (fields: string) => {\r\n    this.clear(FragmentType.OrderBy);\r\n    this.fragments.push(new QueryFragment(FragmentType.OrderBy, `$orderby=${fields}`));\r\n    return this;\r\n  };\r\n  top = (top: number) => {\r\n    this.clear(FragmentType.Top);\r\n    this.fragments.push(new QueryFragment(FragmentType.Top, `$top=${top}`));\r\n    return this;\r\n  };\r\n  skip = (skip: number) => {\r\n    this.clear(FragmentType.Skip);\r\n    this.fragments.push(new QueryFragment(FragmentType.Skip, `$skip=${skip}`));\r\n    return this;\r\n  };\r\n  count = () => {\r\n    this.clear(FragmentType.Count);\r\n    this.fragments.push(new QueryFragment(FragmentType.Count, `$count=true`));\r\n    return this;\r\n  };\r\n  expand = (fields: string) => {\r\n    this.clear(FragmentType.Expand);\r\n    this.fragments.push(new QueryFragment(FragmentType.Expand, `$expand=${fields}`));\r\n    return this;\r\n  };\r\n  select = (fields: string) => {\r\n    this.clear(FragmentType.Select);\r\n    this.fragments.push(new QueryFragment(FragmentType.Select, `$select=${fields}`));\r\n    return this;\r\n  };\r\n  filter = (predicate: (filter: FilterBuilder) => FilterBuilder, operator: string = 'and') => {\r\n    this.clear(FragmentType.Filter);\r\n    this.fragments.push(\r\n      new QueryFragment(FragmentType.Filter, predicate(new FilterBuilder()).toQuery(operator))\r\n    );\r\n    return this;\r\n  };\r\n  clear = (fragmentType: FragmentType) => {\r\n    this.fragments = this.fragments.filter(f => f.type !== fragmentType);\r\n    return this;\r\n  }\r\n  toQuery = () => {\r\n    if (this.fragments.length < 1) return '';\r\n\r\n    // const sortedFragments = orderBy(this.fragments, (sf: QueryFragment) => sf.type);\r\n\r\n    const sortedFragments = this.fragments.concat().sort(this.sortBy(\"type\"));\r\n    const nonFilterFragments = sortedFragments.filter((sf: QueryFragment) => sf.type !== FragmentType.Filter);\r\n    const filterFragments = sortedFragments.filter((sf: QueryFragment) => sf.type === FragmentType.Filter);\r\n\r\n    let query =\r\n      // '?' +\r\n      '' +\r\n      sortedFragments\r\n        .filter((sf: QueryFragment) => sf.type !== FragmentType.Filter)\r\n        .map((sf: QueryFragment) => sf.value)\r\n        .join('&');\r\n\r\n    if (filterFragments.length < 1) return query;\r\n    else if (nonFilterFragments.length > 0) query += '&';\r\n\r\n    query += this.parseFilters(filterFragments, 'and').trim();\r\n\r\n    return query;\r\n  };\r\n\r\n  private parseFilters(fragments: QueryFragment[], operator: string): string {\r\n    if (!fragments === null || fragments.length < 1) return '';\r\n    return '$filter=' + fragments.map(f => f.value).join(` ${operator} `);\r\n  }\r\n\r\n  private sortBy = (key) => {\r\n    return (a, b) => (a[key] > b[key]) ? 1 : ((b[key] > a[key]) ? -1 : 0);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FileService {\r\n\r\n  constructor() { }\r\n\r\n  downloadFile(response: Response | any, fileName: string) {\r\n    const a = document.createElement('a');\r\n\r\n    a.href = URL.createObjectURL(response);\r\n    a.download = fileName;\r\n\r\n    document.body.appendChild(a);\r\n\r\n    a.click();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { CommandMappings } from '../../model/schema-datas.model';\r\n\r\ninterface ParamsMapping {\r\n    mappingName: string;\r\n    mappingKeys: string[];\r\n}\r\n\r\ntype valueType = string | number | Date\r\n\r\n@Injectable()\r\nexport class MappingBuilderService {\r\n    private nameForm: string;\r\n    private values: any;\r\n    private commandMapped: Object = {};\r\n\r\n    constructor() { }\r\n\r\n    init() {\r\n        this.commandMapped = {}\r\n\r\n        return this\r\n    }\r\n\r\n    set setNameForm(name: string) {\r\n        this.nameForm = name;\r\n    }\r\n\r\n    set valuesForm(values: any) {\r\n        this.values = values;\r\n    }\r\n\r\n    map(mapping: CommandMappings) {\r\n        const sourceMap: ParamsMapping = this.extractMappingParams(mapping.source);\r\n        const sourceValue: valueType = this.getValueFromMapping(sourceMap);\r\n\r\n        const destinationMap: ParamsMapping = this.extractMappingParams(mapping.destination);\r\n\r\n        /** sourceValue est undefined si la clé du formulaire est inconnu */\r\n        if (typeof sourceValue !== 'undefined') {\r\n            this.assign(this.commandMapped, destinationMap.mappingKeys, sourceValue)\r\n        }\r\n\r\n        return this\r\n    }\r\n\r\n    getMapping() {\r\n        return Object.entries(this.commandMapped).length === 0 ? null : this.commandMapped\r\n    }\r\n\r\n    private extractMappingParams(mapping: string): ParamsMapping {\r\n        const m: string[] = mapping.split('.')\r\n        const [firstElement, ...rest] = m\r\n\r\n        return <ParamsMapping>{ mappingName: firstElement, mappingKeys: rest }\r\n    }\r\n\r\n    private getValueFromMapping(source: ParamsMapping): valueType {\r\n        let value: valueType = null\r\n\r\n        if (this.nameForm === source.mappingName) {\r\n            source.mappingKeys.forEach((key: string) => {\r\n                value = value ? value[key] : ((key in this.values) ? this.values[key] : null)\r\n            })\r\n\r\n            return value\r\n        }\r\n\r\n        return undefined\r\n    }\r\n\r\n    private assign(obj: Object, keyPath: string[], value: valueType) {\r\n        let key\r\n        let lastKeyIndex = keyPath.length - 1;\r\n\r\n        for (var i = 0; i < lastKeyIndex; ++i) {\r\n            key = keyPath[i];\r\n\r\n            if (!(key in obj)) {\r\n                obj[key] = {}\r\n            }\r\n\r\n            obj = obj[key];\r\n        }\r\n\r\n        obj[keyPath[lastKeyIndex]] = value;\r\n    }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class FormHelperService {\r\n\r\n    countControlsForm(form: UntypedFormGroup): number {\r\n        return Object.keys(form.controls).length\r\n    }\r\n\r\n    keysControlsForm(form: UntypedFormGroup): string[] {\r\n        return Object.keys(form.controls)\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class UrlHelperService {\r\n\r\n    constructor(\r\n        private router: Router,\r\n        private activatedRoute: ActivatedRoute) { }\r\n\r\n    updateParamsUrlWithoutRefresh(queryParams: any) {\r\n        this.router.navigate(\r\n            [],\r\n            {\r\n                relativeTo: this.activatedRoute,\r\n                queryParams: queryParams,\r\n                queryParamsHandling: 'merge', // remove to replace all query params by provided\r\n            });\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport const typeImageReg = /[\\/.](gif|jpg|jpeg|tiff|png)$/i;\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class HelperUploaderService {\r\n\r\n    static checkTypeImage(fileType: string): boolean {\r\n        return typeImageReg.test(fileType)\r\n    }\r\n\r\n    static estceTypeMimeAccepté(typeMime: string, configTypeMime: string[]): boolean {\r\n        const ext = typeMime.split('/').pop().toLowerCase();\r\n\r\n        return configTypeMime.indexOf(ext) !== -1;\r\n    }\r\n\r\n    static estceImageTypeImage(typeMime: string): boolean {\r\n        const extension = typeMime.toLowerCase();\r\n\r\n        return extension.indexOf(\"image\") !== -1;\r\n    }\r\n\r\n    static estceImageTypeMimeGif(typeMime: string): boolean {\r\n        const extension = typeMime.toLowerCase();\r\n\r\n        return this.estceImageTypeImage(typeMime) && extension.indexOf(\"gif\") !== -1;\r\n    }\r\n\r\n    static estceTailleUploadAccepté(tailleFichier: number, configTailleUpload: number): boolean {\r\n        const tailleMO = (tailleFichier / 1024 / 1024).toFixed(2);\r\n\r\n        return parseFloat(tailleMO) <= configTailleUpload;\r\n    }\r\n\r\n    static estceTailleUploadTotalAccepté(tailleTotalFichiers: number, configTotalTailleUpload: number): boolean {\r\n        const tailleTotalMO = (tailleTotalFichiers / 1024 / 1024).toFixed(2);\r\n\r\n        return parseFloat(tailleTotalMO) <= configTotalTailleUpload;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ToolbarOptions } from '../model/component-wysiwyg.model';\r\n\r\n@Injectable()\r\nexport class WysiwygService {\r\n\r\n  constructor() { }\r\n\r\n  public toolbarOptionsToString(options: ToolbarOptions[][]) {\r\n    return options.map((option: ToolbarOptions[]) => option.join(' ')).join('|')\r\n  }\r\n}\r\n","export interface DataSourceInput {\r\n    type: DataSourceType,\r\n    value: any,\r\n    dataSourceNameProperty?: string, /** property of the datasource used in the view, default : 'name' */\r\n}\r\n\r\nexport enum DataSourceType {\r\n    API = 'api',\r\n    BRUTE = 'brute',\r\n}\r\n\r\nexport interface SelectOption {\r\n    id: string | number,\r\n    name: string,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { DataSourceInput, DataSourceType } from '../model/data-source.model';\r\nimport { HttpService } from './http.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DatasourceService {\r\n\r\n  constructor(private httpService: HttpService,) { }\r\n\r\n  loadDataSource<T>(config: DataSourceInput, queryString: string = ''): Observable<T> {\r\n    if (!config) return;\r\n\r\n    switch (config.type) {\r\n      case DataSourceType.BRUTE:\r\n        // return <Observable<T>>of(config.value).pipe(delay(1000))\r\n        return <Observable<T>>of(config.value)\r\n        break;\r\n\r\n      case DataSourceType.API:\r\n        return this.httpService.get(`${config.value}?${queryString}`)\r\n        break;\r\n\r\n      default:\r\n        return <Observable<any>>of(null)\r\n        break;\r\n    }\r\n  }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class StringService {\r\n    constructor(@Inject(String) private stringData: string) {\r\n        this.stringData = stringData\r\n    }\r\n\r\n    public toString() {\r\n        return this.stringData\r\n    }\r\n\r\n    public removeAllSpecialsCharacters() {\r\n        this.stringData = this.stringData.replace(/[^a-zA-Z ]/g, \"\")\r\n\r\n        return this\r\n    }\r\n\r\n    public removeAllSpaces() {\r\n        this.stringData = this.stringData.replace(/\\s/g, '')\r\n\r\n        return this\r\n    }\r\n\r\n    public replaceAllAccentByNonAccentCharacters() {\r\n        this.stringData = this.stringData.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\")\r\n\r\n        return this\r\n    }\r\n}\r\n","\r\nexport interface Odata<T = any> {\r\n    d: {\r\n        __count: number;\r\n        results: T[];\r\n    }\r\n}\r\n\r\nexport class OdataClass {\r\n    private datasource: Odata<any>\r\n\r\n    setDatasource(datasource: Odata<any>) {\r\n        this.datasource = datasource\r\n    }\r\n\r\n    getCount(): number {\r\n        return this.datasource.d.__count\r\n    }\r\n\r\n    getResults(): Object[] {\r\n        return this.datasource.d.results\r\n    }\r\n}","export enum FormInputComponents {\r\n    INPUT_UPLOADER = 'input-uploader',\r\n    INPUT_TEXT = 'input-text',\r\n    INPUT_EMAIL = 'input-email',\r\n    INPUT_CHECKBOX = 'input-checkbox',\r\n    INPUT_CHECKBOX_INDETERMINATE = 'input-checkbox-indeterminate',\r\n    INPUT_NUMBER = 'input-number',\r\n    INPUT_DATE = 'input-date',\r\n    INPUT_SLIDE_TOGGLE = 'input-slide-toggle',\r\n    INPUT_PASSWORD = 'input-password',\r\n    INPUT_TEXTAREA = 'input-textarea',\r\n    INPUT_VIEWER = 'input-viewer',\r\n    INPUT_SELECT = 'input-select',\r\n    BUTTON = 'button',\r\n    LINK = 'link',\r\n}","import { DataSourceInput } from './data-source.model';\r\nimport { FormInputComponents } from './form-input-components.model';\r\n\r\nexport interface Schema {\r\n    page: any,\r\n}\r\n\r\n/** Form */\r\n\r\nexport interface PageSchema {\r\n    forms: FormSchema[],\r\n    buttons: ButtonSchema[],\r\n}\r\n\r\nexport interface FormSchema {\r\n    id: string;\r\n    name: string;\r\n    fields: FieldSchema[];\r\n}\r\n\r\nexport interface FieldSchema {\r\n    label: string;\r\n    name: string;\r\n    type: FormInputComponents;\r\n    dataSource: DataSourceInput;\r\n    inRelationWith: string;\r\n}\r\n/** / Form */\r\n\r\n/** Buttons */\r\n\r\nexport interface ButtonSchema {\r\n    text: string;\r\n    name: string;\r\n    formName: string;\r\n    command: string;\r\n    redirectTo: string;\r\n    submit: boolean;\r\n    commandMappings: CommandMappings[];\r\n}\r\n\r\nexport interface CommandMappings {\r\n    source: string;\r\n    destination: string;\r\n}\r\n\r\n/** / Buttons */\r\n","import { UntypedFormGroup, ValidatorFn } from '@angular/forms';\r\n\r\nimport { DataSourceInput } from './data-source.model';\r\nimport { FormInputComponents } from './form-input-components.model';\r\nimport { ButtonSchema, FormSchema } from './schema-datas.model';\r\n\r\nexport type OutputCallback = {\r\n    callback?: Function\r\n    click?: Function\r\n}\r\n\r\nexport type ConfigComponentInputs = ConfigInputComponent | ButtonComponentInputs | any\r\n\r\nexport type InputFieldAppearance = 'standard' | 'fill' | 'outline';\r\n\r\nexport interface ConfigInputComponent {\r\n    nameLabel: string,\r\n    formGroup: UntypedFormGroup,\r\n    nameControl: string,\r\n    type?: FormInputComponents,\r\n    validators?: ValidatorFn[];\r\n    icon?: string,\r\n    styleCompact?: boolean,\r\n    maxlength?: number,\r\n    dataSource?: DataSourceInput,\r\n    inRelationWith?: string\r\n    appearance?: InputFieldAppearance\r\n    callbackComponent?: OutputCallback\r\n}\r\n\r\nexport interface FormContainerInputs {\r\n    form: FormSchema,\r\n    buttons: ButtonSchema[],\r\n}\r\n\r\nexport enum TypeButtonEnum {\r\n    SUBMIT = 'submit',\r\n    BUTTON = 'button',\r\n    LINK = 'link',\r\n}\r\n\r\nexport interface ButtonLinkComponentInputs {\r\n    url: string,\r\n    openNewTab: boolean,\r\n}\r\n\r\nexport interface ButtonComponentInputs extends ButtonLinkComponentInputs {\r\n    text: string,\r\n    type: TypeButtonEnum,\r\n    onClickSubmit: Function,\r\n    icon?: string,\r\n    className?: string,\r\n    iconPosition?: ButtonIconPositon\r\n}\r\n\r\nexport enum ButtonIconPositon {\r\n    START = 'start',\r\n    END = 'end',\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StorageService","i1.TokenService","i2.HttpService","i1","i1.HttpService"],"mappings":"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"}