UNPKG

sgc-share-lib

Version:

Share the basics Models for create custom SGC UI Components. This library implements the basic data structure used to describe SGC graphics components.

1 lines 125 kB
{"version":3,"file":"sgc-share-lib.mjs","sources":["../../../projects/sgc-share-lib/src/lib/service/notification.service.ts","../../../projects/sgc-share-lib/src/lib/service/filtre-recherche-service.ts","../../../projects/sgc-share-lib/src/lib/biblio/sgc-biblio.ts","../../../projects/sgc-share-lib/src/lib/model/sgc-basic-model.ts","../../../projects/sgc-share-lib/src/public-api.ts","../../../projects/sgc-share-lib/src/sgc-share-lib.ts"],"sourcesContent":["import { Component, Inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NotificationService {\n  constructor(\n    private readonly snackBar: MatSnackBar,\n    public dialog: MatDialog\n  ) { }\n\n  /**\n   * Presents a toast displaying the message with a green background\n   * @param message Message to display\n   * @example\n   * this.notificationService.success(\"confirm oked\");\n   */\n  success(message: string) {\n    this.openSnackBar(message, '', 'success-snackbar');\n  }\n\n  /**\n   * Presents a toast displaying the message with a red background\n   * @param message Message to display\n   * @example\n   * this.notificationService.error(\"confirm canceled\");\n   */\n  error(message: string) {\n    this.openSnackBar(message, '', 'error-snackbar');\n  }\n\n  /**\n   * Shows a confirmation modal, presenting the user with\n   * an OK and Cancel button. \n   * @param message Body of the modal\n   * @param okCallback Optional function to call when the user clicks Ok\n   * @param title Optional modal title\n   * @param cancelCallback Option function to call when the user clicks Cancel\n   * @example\n   * //displays a success or error message depending on what button is clicked.\n   * this.notificationService.confirmation(\n   * 'it will be gone forever', //message body\n   * () => { //okCallback\n      this.notificationService.success(\"confirm oked\");\n    },\n    'Are you sure?', //title\n     () => { //cancelCallback\n      this.notificationService.error(\"confirm canceled\");\n    });\n   */\n  confirmation(\n    message: string,\n    title = 'Are you sure?',\n    okCallback: () => void,    \n    cancelCallback: () => any = () => { }\n  ) {\n    const dialogRef = this.dialog.open(ConfirmationDialog, {\n      width: '250px',\n      data: { message: message, title: title }\n    });\n\n    dialogRef.afterClosed().subscribe(result => {\n      if (result && okCallback) {\n        okCallback();\n      }\n      if (!result && cancelCallback) {\n        cancelCallback();\n      }\n    });\n  }\n\n  /**\n  * Shows a modal, presenting the user with an OK button.\n  * @param message Body of the modal\n  * @param okCallback Optional function to call when the user clicks Ok\n  * @param title Optional modal title\n  * @example\n  * //displays a success when the Ok button is clicked.\n  *  this.notificationService.alert(\"an alert\", \"notice\", () => {\n      this.notificationService.success(\"alert oked\");\n    });\n  */\n  alert(message: string, title = 'Notice', okCallback: () => void = () => { }) {\n    const dialogRef = this.dialog.open(AlertDialog, {\n      width: '250px',\n      data: { message: message, title: title },\n      disableClose: true\n    });\n\n    dialogRef.afterClosed().subscribe(result => {\n      if (result && okCallback) {\n        okCallback();\n      }\n    });\n  }\n\n\n  /**\n   * Displays a toast with provided message\n   * @param message Message to display\n   * @param action Action text, e.g. Close, Done, etc\n   * @param className Optional extra css class to apply\n   * @param duration Optional number of SECONDS to display the notification for\n   */\n  openSnackBar(\n    message: string,\n    action: string,\n    className = '',\n    duration = 2000\n  ) {\n    this.snackBar.open(message, action, {\n      horizontalPosition:'center',\n      verticalPosition:'top',\n      duration: duration,\n      panelClass: [className]\n    });\n  }\n}\n\nexport interface DialogData {\n  message: string;\n  title: string;\n}\n\n@Component({\n    template: `\n    <h1 mat-dialog-title>{{ data.title }}</h1>\n    <div mat-dialog-content>\n     {{data.message}}\n    </div>\n    <div mat-dialog-actions>\n       <button mat-raised-button color=\"warn\" (click)=\"onNoClick()\">\n        Cancel\n      </button>\n      <button mat-raised-button color=\"primary\" (click)=\"onYesClick()\" cdkFocusInitial>\n        Ok\n      </button>\n    </div>\n  `,\n    standalone: false\n})\nexport class ConfirmationDialog {\n  constructor(\n    public dialogRef: MatDialogRef<ConfirmationDialog>,\n    @Inject(MAT_DIALOG_DATA) public data: DialogData\n  ) { }\n\n  onNoClick(): void {\n    this.dialogRef.close(false);\n  }\n\n  onYesClick(): void {\n    this.dialogRef.close(true);\n  }\n}\n\n@Component({\n    template: `\n    <h1 mat-dialog-title>{{ data.title }}</h1>\n    <div mat-dialog-content>\n     {{data.message}}\n    </div>\n    <div mat-dialog-actions>\n      <button mat-raised-button color=\"primary\" (click)=\"onYesClick()\" cdkFocusInitial>\n        Ok\n      </button>\n    </div>\n  `,\n    standalone: false\n})\nexport class AlertDialog {\n  constructor(\n    public dialogRef: MatDialogRef<AlertDialog>,\n    @Inject(MAT_DIALOG_DATA) public data: DialogData\n  ) { }\n\n  onYesClick(): void {\n    this.dialogRef.close(true);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n//import { CustomMenuItem } from '../models/menu-item.model';\n\n@Injectable({\n  providedIn: 'root',\n})\n/**\n * menu data service\n */\nexport class FiltreRechercheService {\n\n  //public crudFiltreRecherche_Utilisateur: CrudFiltreRecherche = new CrudFiltreRecherche();\n  \n  constructor() {\n  }  \n}","export class SgcBiblio {\n}\n\nexport function padTo2Digits(num: number) {\n  return String(num).padStart(2, '0');\n}\n\n/**\n * Get client side timezone.\n *\n * @returns {(+|-)HH:mm} - Where `HH` is 2 digits hours and `mm` 2 digits minutes.\n * @example\n * // From Indian/Reunion with UTC+4\n * // '+04:00'\n * getTimeZone()\n */\nexport const getTimeZone = () => {\n  const timezoneOffset = new Date().getTimezoneOffset();\n  const offset = Math.abs(timezoneOffset);\n  const offsetOperator = timezoneOffset < 0 ? '+' : '-';\n  const offsetHours = padTo2Digits(Math.floor(offset / 60));\n  const offsetMinutes = padTo2Digits(Math.floor(offset % 60));\n\n  return `${offsetOperator}${offsetHours}:${offsetMinutes}`;\n};\n","import { K, N } from '@angular/cdk/keycodes';\nimport { HttpClient, HttpContext, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { escape } from 'lodash';\n/*import {\n  TColumnDataTableDef,\n  TypeFieldDataView,\n  generateCritereTxtFromFiltres,\n} from 'projects/sgc-ng-crud-view-list/src/public-api';*/\nimport { BehaviorSubject, Observable, Subject, map, of } from 'rxjs';\n\n//********************************************************** */\n//----------  DATA MODELS FOR BASICS SGC UI  ------------------\n/**\n *\n */\nexport enum TypeCrudView {\n  LIST = 0,\n  CREATE = 1,\n  EDIT = 2,\n  IMPORT = 3,\n  REPORT = 4,\n  STATS = 5\n}\n\n/**\n *\n */\nexport interface TOptionListeSelectValues {\n  value: any;\n  label: string;\n  data?: any;\n  items?: Array<TOptionListeSelectValues>;\n}\n\n//----------------------------------\nexport enum TypeFieldFormEdit {\n  TEXTE = 'TEXT',\n  TEXTE_MULTILIGNE = 'TEXT_MULTILINE',\n  TEXTE_SECRET = 'TEXT_SECRET',\n  NOMBRE = 'NUMERIC',\n  DATE = 'DATE',\n  DATE_HEURE = 'DATE_HEURE',\n  HEURE = 'HEURE',\n  BOOLEEN = 'BOOLEAN',\n  SELECT_VALUE = 'SELECT_VALUE',\n  LISTE_OBJECT = 'LIST_OBJECT',\n  FILE = 'FILE'\n}\n\n//----------------------------------\nexport enum TExportFormat {\n  PDF = 'pdf',\n  EXCEL = 'xlsx',\n  CSV = 'csv'\n}\n\nexport function getListeTypeExportFormat(): Array<TOptionListeSelectValues> {\n  return Object.keys(TExportFormat).map(myKey => ({ label: myKey, value: TExportFormat[myKey as keyof typeof TExportFormat] } as TOptionListeSelectValues));\n}\n\n//----------------------------------\nexport enum TExportPageOrientation {\n  PORTRAIT = '0',\n  LANDSCAPE = '1'\n}\n\nexport function getListeTypeExportOrientation(): Array<TOptionListeSelectValues> {\n  return Object.keys(TExportPageOrientation).map(myKey => ({ label: myKey, value: TExportPageOrientation[myKey as keyof typeof TExportPageOrientation] } as TOptionListeSelectValues));\n}\n\n//----------------------------------\nexport enum TExportHeaderDataValueFrom {\n  FIELD_NAME = 'name',\n  FIELD_LABEL = 'label'\n}\n\nexport function getListeTypeExportHeaderDataValueFrom(): Array<TOptionListeSelectValues> {\n  return Object.keys(TExportHeaderDataValueFrom).map(myKey => ({ label: myKey, value: TExportHeaderDataValueFrom[myKey as keyof typeof TExportHeaderDataValueFrom] } as TOptionListeSelectValues));\n}\n\n//-------------------\nexport interface TOptionExportData {\n  exportFormat: TExportFormat;\n  exportPageOrientation: TExportPageOrientation;\n  exportHeaderDataValueFrom: TExportHeaderDataValueFrom;\n  exportListeColsData: Array<string>;\n  exportShowRowNumber: boolean\n}\n\n//----------------------------------\nexport enum TImportFormat {\n  EXCEL = 'xlsx',\n  EXCEL_OLD = 'xls',\n  CSV = 'csv'\n}\n\n//-------------------\nexport interface TOptionImportData {\n  importFormat?: TImportFormat;\n  selectedSheetXlsName?: string;\n  editSelectedSheetXlsName?: string;\n  listeSheetXlsNames: Array<string>;\n  xlsRowHeaderIndex?: number;\n  startRowImportIndex: number;\n  maxRowsImport: number;\n}\n\nexport interface TOptionFileUploadDownload {\n  saveInDB: boolean;\n  autoRenameFile: boolean;\n  fileSvrName?: string;\n  baseSvrPath?: string;\n  dbSrcTableName?: string;\n  dbSrcColumnName?: string;\n  typeFileName?: string;\n  //fileToReplace?: TOptionFileUploadDownload;\n  fileToReplace?: string;\n}\n\n\nexport function getListeTypeImportFormat(): Array<TOptionListeSelectValues> {\n  return Object.keys(TImportFormat).map(myKey => ({ label: myKey, value: TImportFormat[myKey as keyof typeof TImportFormat] } as TOptionListeSelectValues));\n}\n\nexport enum TypeFileImportExportNames {\n  WORD = 'application/msword',\n  WORD_OLD = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  EXCEL = 'application/vnd.ms-excel',\n  EXCEL_OLD = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  CSV = 'text/csv',\n  PDF = 'application/pdf',\n  IMAGE_PNG = 'image/png',\n  IMAGE_JPEG = 'image/jpeg',\n}\n\nexport function getListeTypeImportExportNames(): Array<TOptionListeSelectValues> {\n  return Object.keys(TypeFileImportExportNames).map(myKey => ({ label: myKey, value: TypeFileImportExportNames[myKey as keyof typeof TypeFileImportExportNames] } as TOptionListeSelectValues));\n}\n\n\n//************************************************* */\n\n//---------------\n\nexport interface TRowGrilleFieldsFormEdit {\n  indexRow: number;\n  listeFieldsRow: TListeFieldFormEditData;\n}\n\nexport interface TGrilleFieldsFormEdit {\n  idGrilleFields: string;\n  modeleRowFields: TRowGrilleFieldsFormEdit;\n  listeRows: Array<TRowGrilleFieldsFormEdit>;\n  showHeader: boolean;\n  showColumnHeader: boolean;\n  showFooter: boolean;\n  showAddButton: boolean;\n  showRemoveColumnOption: boolean;\n  lastIndexRowFields: number;\n  isHide?: () => boolean;\n}\n\nexport enum TypeHidePasswordSymbol {\n  ASTERISK = '*',\n  DOT = '.',\n}\n\n/** Structure des données pour un composant UI basique */\nexport interface TFieldFormEditData {\n  name?: string;\n  value?: any;\n  showLabel?: boolean;\n  label?: string;\n  required: string | boolean;\n  requiredMsg?: string;\n  disabled?: boolean;\n  classCssStyle?: string;\n  //hasSelectValues?: boolean;\n  typeFieldForm: TypeFieldFormEdit;\n  useInCreateView?: boolean;\n  useInEditView?: boolean;\n  useInImportView?: boolean;\n  isDisabled?: () => boolean;\n  isHide?: () => boolean;\n  onChange?: (event?: any) => void;\n  isDataValidate?: () => boolean;\n  //---- For TEXT_FIELDEDITDATA ----------\n  minLength?: number;\n  maxLength?: number;\n  showPrefixIcon?: boolean;\n  prefixIcon?: string;\n  showSuffixIcon?: boolean;\n  suffixIcon?: string;\n  showPrefixText?: boolean;\n  prefixText?: string;\n  showSuffixText?: boolean;\n  suffixText?: string;\n  //---- For TEXTAREA_FIELDEDITDATA (EXTEND TEXT_FIELDEDITDATA)\n  cols?: number;\n  rows?: number;\n  //---- For NUMBER_FIELDEDITDATA (EXTEND TEXT_FIELDEDITDATA)\n  showSpinner?: boolean;\n  //---- For PASSWORD_FIELDEDITDATA (EXTEND TEXT_FIELDEDITDATA)\n  hidePassword?: boolean;\n  hidePasswordSymbol?: TypeHidePasswordSymbol;\n  //---- For DATETIME_FIELDEDITDATA\n  dateFormat?: string;\n  dateSepFormat?: string;\n  showTime?: boolean;\n  //---- For SELECTVALUE_FIELDEDITDATA\n  selectMultivalue?: boolean;\n  listeSelectValues?: Array<TOptionListeSelectValues>;\n  useApiToLoadSelectValues?: boolean;\n  apiSelectFieldLabel?: string;\n  apiSelectFieldValue?: string;\n  apiSelect_SVC_getItems?: CrudDataService_ListView<any>;\n  //----- For FILEUPLOAD_DOWNLOAD_FIELDEDITDATA\n  initFileUploadDownloadOptionsFromValue?: boolean;\n  fileDownloadIcon?: string;\n  enableFileUploadDelete?: boolean;\n  onDeleteFileUpload?: (event?: any) => void;\n  //apiUrlFileDownload?: string;\n  fileUploadDowloadOption?: TOptionFileUploadDownload;\n  defaultBasePath?: string;\n  fileToUpload?: Blob;\n  //autoRenameFile?: boolean;\n  //saveInDB?: boolean;\n  //selectedTypeUploadedFile?: any;\n  //listeTypeUploadedFileValues?: Array<TOptionListeSelectValues>;\n  //useApiToLoadTypeUploadedFiles?: boolean;\n  //apiTypeUploadedFileFieldLabel?: string;\n  //apiTypeUploadedFileValue?: string;\n  //apiTypeUploadedFile_SVC_getItems?: CrudDataService_ListView<any>;\n  //apiMapSelectedValuesToOptionListe?: (res: any) => Array<TOptionListeSelectValues>;  \n  //apiSelectValueURL?: string;\n  //apiSelectValueSearhOperator?: string;\n  //apiSelectValueURL_httpHeaders?: HttpHeaders;\n  //apiSelectValueURL_httpParams?: HttpParams;\n\n  //-----------------------\n\n  //------ FOR SELECT FILES ------\n  //selectMultiFiles?: boolean;\n\n  //---- Use to align fields on the form\n  rowNumberInForm?: number;\n  indexInRow?: number;\n  widthInResponsiveGridWiew?: number;\n  grilleFields?: TGrilleFieldsFormEdit;\n}\n\nexport type TListeFieldFormEditData = Array<TFieldFormEditData>;\n\nexport const TFieldFormEditDefault: TFieldFormEditData = {\n  showLabel: false,\n  label: '',\n  required: false,\n  requiredMsg: 'Required value',\n  disabled: false,\n  //hasSelectValues: false,\n  selectMultivalue: false,\n  rowNumberInForm: 1,\n  indexInRow: 1,\n  widthInResponsiveGridWiew: 12,\n  typeFieldForm: TypeFieldFormEdit.TEXTE,\n};\n//-----------------------------------------------------\n@Component({\n  selector: 'sgc-ng-baseui',\n  template: '',\n  standalone: false\n})\nexport class BaseFieldFormEditUI {\n  @Input() data!: TFieldFormEditData;\n  @Output() dataChange: EventEmitter<TFieldFormEditData> =\n    new EventEmitter<TFieldFormEditData>();\n\n  isDisabled: () => boolean = () => {\n    if (this.data?.isDisabled) {\n      return this.data.isDisabled();\n    } else if (this.data?.disabled) {\n      return this.data.disabled;\n    }\n    return false;\n  };\n\n  getLabel = (): string => {\n    let myLabel = '';\n    if (this.data.showLabel && this.data.label) {\n      myLabel = this.data.label;\n    }\n    //myLabel+= (this.data.required ? ' *' : '');\n    return myLabel;\n  };\n\n  isHide = (): boolean => {\n    return (\n      this.data != undefined &&\n      this.data.isHide != undefined &&\n      this.data.isHide()\n    );\n  };\n\n  /*****************************************************/\n  useField_TEXT(): boolean {\n    return useField_TEXT(this.data);\n  }\n\n  useField_PASSWORD(): boolean {\n    return useField_PASSWORD(this.data);\n  }\n\n  useField_TEXTAREA(): boolean {\n    return useField_TEXTAREA(this.data);\n  }\n\n  useField_NUMBER(): boolean {\n    return useField_NUMBER(this.data);\n  }\n\n  useField_DATE(): boolean {\n    return useField_DATE(this.data);\n  }\n\n  useField_DATEHEURE(): boolean {\n    return useField_DATEHEURE(this.data);\n  }\n\n  useField_HEURE(): boolean {\n    return useField_HEURE(this.data);\n  }\n}\n\n//--------------------------------------------------------------------\n//------ STRUCTURE DE DONNÉES POUR LE COMPOSANT SEPARATOR -----\nexport interface LabelSeparator_Model {\n  labelAlign?: H_ALIGN_CONSTANT,\n  css_fontweight?: FONTWEIGHT_CONSTANT,\n  css_textcolor?: string,\n  css_fontsize?: number\n}\n\n//---------------------------------------------------------------------------------------\n//------ STRUCTURE DE DONNÉES POUR LE GROUPE DE CHAMPS DES FORMULAIRES (TGROUPFORMEDIT)--\nexport const Min_WidthFieldInResponsiveGridWiew: number = 10;\nexport const Max_WidthFieldInResponsiveGridWiew: number = 100;\nexport const DefaultRowGapBetweenFields: number = 10;\nexport const DefaultRowHeight: number = 60;\n\nexport class TGroupFieldFormEdit {\n  idOrder?: number;\n  label?: string;\n  showLabel: boolean = false;\n  showBorder: boolean = false;\n  private _listeFiedsForm: TListeFieldFormEditData = [];\n  public get listeFiedsForm(): TListeFieldFormEditData {\n    return this._listeFiedsForm;\n  }\n  listeGrilleFiedsForm?: Array<TGrilleFieldsFormEdit>;\n  classCssStyle?: string;\n  iconSeparator?: string;\n  css_titleColor?: string;\n  css_backgroundColor?: string;\n  rowGapBetweenFields?: number;\n  rowHeight?: number;\n  labelSeparatorParam?: LabelSeparator_Model;\n  //groupIDView?: string;\n  isHide?: () => boolean = () => false;\n\n  constructor(myIdOrder?: number, myLabel?: string, myShowLabel?: boolean, myShowBorder?: boolean) {\n    this.idOrder = myIdOrder ? myIdOrder : this.idOrder;\n    this.label = myLabel ? myLabel : this.label;\n    this.showLabel = myShowLabel ? myShowLabel : this.showLabel;\n    this.showBorder = myShowBorder ? myShowBorder : this.showBorder;\n  }\n\n  addFieldsToGroup(listeFields: TListeFieldFormEditData) {\n    /*listeFields = listeFields.map((elt) => {\n      if (\n        elt.typeFieldForm == TypeFieldFormEdit.NOMBRE &&\n        elt.value == undefined\n      ) {\n        elt.value = 0;\n      }\n      return {...elt};\n    });*/\n    this._listeFiedsForm = listeFields.map((elt) => ({ ...elt }));\n  }\n\n  /*clone: () => TGroupFieldFormEdit = () => {\n    return { ...this };\n  };*/\n}\n\nexport type TListeGroupFieldFormEdit = Array<TGroupFieldFormEdit>;\n\n//-------------------------------------------------------------------------------\n//------ STRUCTURE DE DONNÉES POUR LE FORMULAIRE D'ÉDITION (TFORMEDIT)-----------\nexport class TFormEdit<TDataCreate, TDataEdit> {\n  private _listeGroupeFields: TListeGroupFieldFormEdit = [];\n  public get listeGroupeFields(): TListeGroupFieldFormEdit {\n    return this._listeGroupeFields;\n  }\n\n  //autoGenerateView: boolean;\n  //titre?: string;\n  //showTitre: boolean;\n  listeFormFils?: Array<TFormEdit<TDataCreate, TDataEdit>>;\n  private _listeAllFieldsGroup: TListeFieldFormEditData = [];\n\n  constructor() { }\n\n  addGridFieldsToGroup(\n    group: TGroupFieldFormEdit,\n    grilleFields: TGrilleFieldsFormEdit\n  ) {\n    if (\n      group != undefined &&\n      grilleFields != undefined &&\n      grilleFields.listeRows != undefined\n    ) {\n      grilleFields.listeRows = grilleFields.listeRows.map((elt0) => {\n        return {\n          indexRow: elt0.indexRow,\n          listeFieldsRow: elt0.listeFieldsRow.map((elt) => {\n            if (\n              elt.typeFieldForm == TypeFieldFormEdit.NOMBRE &&\n              elt.value == undefined\n            ) {\n              elt.value = 0;\n            }\n            return elt;\n          }),\n        };\n      });\n      //group.listeGrilleFiedsForm = grilleFields;\n\n      let listeRowsFields: TListeFieldFormEditData[] =\n        grilleFields.listeRows.map((row) => {\n          return row.listeFieldsRow;\n        });\n      for (let i = 0; i < listeRowsFields.length; i++) {\n        this._listeAllFieldsGroup.push(...listeRowsFields[i]);\n      }\n\n      group.listeGrilleFiedsForm = group.listeGrilleFiedsForm\n        ? [...group.listeGrilleFiedsForm, grilleFields]\n        : [grilleFields];\n      console.log('******* EDITCRUD - GROUP - LISTEGRID  *************');\n      console.log(grilleFields);\n      console.log(group);\n    }\n  }\n\n  addGroupToForm(group: TGroupFieldFormEdit) {\n    this._listeGroupeFields.push(group);\n    this._listeAllFieldsGroup.push(...group.listeFiedsForm);\n  }\n\n  getValueOfFieldForm(nameField: string | undefined): any {\n    let myField = this._listeAllFieldsGroup.find(\n      (elt) => elt.name == nameField\n    );\n    return myField?.value;\n  }\n\n  setBlobValueOfFieldForm(listeBlobFields: TListeBlobField, nameField: string | undefined) {\n    let myField = this._listeAllFieldsGroup.find(\n      (elt) => elt.name == nameField && elt.fileToUpload != undefined\n    );\n\n    if (myField) {\n      let myExistBlobField: TBlobField | undefined = listeBlobFields.find(elt => elt.nameField==nameField);\n      if (myExistBlobField) {\n        myExistBlobField.optionsFile = myField.fileUploadDowloadOption!;\n        myExistBlobField.file = myField.fileToUpload!;\n      } else {\n        listeBlobFields.push({ nameField: myField.name!, optionsFile: myField.fileUploadDowloadOption!, file: myField.fileToUpload! } as TBlobField);\n      }\n    }\n  }\n\n  setValueOfFieldForm(nameField: string | undefined, value: any): void {\n    let myField = this._listeAllFieldsGroup.find(\n      (elt) => elt.name == nameField\n    );\n    if (myField) {\n      myField.value = value;\n    }\n  }\n}\n\n//--------------------------------------------------------------------------\n//---------------------------------------------------------------------\nexport function typeDataIs_TEXTE(fieldform: TFieldFormEditData): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.TEXTE;\n}\n\nexport function typeDataIs_TEXTE_SECRET(\n  fieldform: TFieldFormEditData\n): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.TEXTE_SECRET;\n}\n\nexport function typeDataIs_TEXTE_MULTILIGNE(\n  fieldform: TFieldFormEditData\n): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.TEXTE_MULTILIGNE;\n}\n\nexport function typeDataIs_NOMBRE(fieldform: TFieldFormEditData): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.NOMBRE;\n}\n\nexport function typeDataIs_BOOLEEN(fieldform: TFieldFormEditData): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.BOOLEEN;\n}\n\nexport function typeDataIs_DATE(fieldform: TFieldFormEditData): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.DATE;\n}\n\nexport function typeDataIs_DATEHEURE(fieldform: TFieldFormEditData): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.DATE_HEURE;\n}\n\nexport function typeDataIs_HEURE(fieldform: TFieldFormEditData): boolean {\n  return fieldform?.typeFieldForm == TypeFieldFormEdit.HEURE;\n}\n\nexport function typeDataIs_SELECTVALUE(fieldform: TFieldFormEditData): boolean {\n  return fieldform?.typeFieldForm == TypeFieldFormEdit.SELECT_VALUE;\n}\n\nexport function typeDataIs_FILEINPUT(fieldform: TFieldFormEditData): boolean {\n  return fieldform?.typeFieldForm == TypeFieldFormEdit.FILE;\n}\n\nexport function typeDataIs_LISTE_OBJECT(\n  fieldform: TFieldFormEditData\n): boolean {\n  return fieldform.typeFieldForm == TypeFieldFormEdit.LISTE_OBJECT;\n}\n\n//--------------------------------------------------------\nexport function useField_TEXT(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues && */ typeDataIs_TEXTE(fieldform);\n}\n\nexport function useField_PASSWORD(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_TEXTE_SECRET(fieldform);\n}\n\nexport function useField_TEXTAREA(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_TEXTE_MULTILIGNE(\n    fieldform\n  );\n}\n\nexport function useField_NUMBER(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_NOMBRE(fieldform);\n}\n\nexport function useField_DATE(fieldform: TFieldFormEditData): boolean {\n  if (typeDataIs_DATE(fieldform)) {\n    fieldform.showTime = false;\n    return true;\n  }\n  return false;\n  //return /*!fieldform.hasSelectValues && */ typeDataIs_DATE(fieldform);\n}\n\nexport function useField_DATEHEURE(fieldform: TFieldFormEditData): boolean {\n  if (typeDataIs_DATEHEURE(fieldform)) {\n    fieldform.showTime = true;\n    return true;\n  }\n  return false;\n  //return /*!fieldform.hasSelectValues && */ typeDataIs_DATEHEURE(fieldform);\n}\n\nexport function useField_HEURE(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_HEURE(fieldform);\n}\n\nexport function useField_SELECTVALUE(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_SELECTVALUE(fieldform);\n}\n\nexport function useField_FILEINPUT(fieldform: TFieldFormEditData): boolean {\n  return /*!fieldform.hasSelectValues &&*/ typeDataIs_FILEINPUT(fieldform);\n}\n\n//-----------------------------------------------------------------------------------\n//---  STRUCTURES DES DONNÉES POUR GÉRER les CSS   ---------------------\nexport enum FONTWEIGHT_CONSTANT {\n  FW_100 = 100,\n  FW_200 = 200,\n  FW_300 = 300,\n  FW_400_NORMAL = 400,\n  FW_500 = 500,\n  FW_600 = 600,\n  FW_700_BOLD = 700,\n  FW_800 = 800,\n  FW_900 = 900,\n}\n\nexport enum H_ALIGN_CONSTANT {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right',\n}\n\n//-----------------------------------------------------------------------------------\n//---  STRUCTURE DES DONNÉES POUR GÉRER LES VUES CRUD (LIST/EDIT)   ---------------------\nexport interface ReponseAPI<TypeData> {\n  data: TypeData;\n  message: string;\n  reponseOK: boolean;\n}\n\nexport interface RowDataImportValidator<TDataType> {\n  data: TDataType;\n  statusOk: boolean;\n  errMsg: string;\n}\n\nexport interface FieldDataImport {\n  fieldName: string;\n  numeroOrdre: number;\n  widthInPercent: number;\n}\n\nexport interface ExportListDataParams {\n  title: string;\n  useLandscape: boolean;\n  useHeaderDataFieldName: boolean;\n  addNumeroOrdre: boolean;\n  listeColsData: Array<string>;\n  periodeReference: string;\n}\n\nexport interface ResponseResolveCrudList {\n  response: any;\n}\n\nexport interface PaginateData<TypeData> {\n  currentPage: number;\n  totalRecords: number;\n  totalPageRecords: number;\n  pageData: TypeData;\n}\n\nexport interface PaginateReponseAPI<TypeData> {\n  data: PaginateData<TypeData>;\n  message: string;\n  reponseOK: boolean;\n}\n\nexport enum Enum_FilterMatchMode {\n  EXACT = 'EXACT',\n  CONTAINS = 'CONTAINS',\n  STARTS_WITH = 'START',\n  ENDS_WITH = 'END',\n}\n\nexport enum Enum_FilterOperator {\n  EQUALS = 'eq',\n  CONTAINS = 'contains',\n  STARTS_WITH = 'startWith',\n  ENDS_WITH = 'endWith',\n  DATE_IS = 'date_is',\n  GREATER_THAN = 'gt',\n  GREATER_THAN_OR_EQUAL_TO = 'gte',\n  LESS_THAN = 'lt',\n  LESS_THAN_OR_EQUAL_TO = 'lte',\n  BETWEEN = 'between',\n  IN = 'in',\n  LIKE = 'like',\n}\n\nexport enum TypeFieldDataView {\n  TEXTE = 'TEXT',\n  TEXTE_SECRET = 'TEXT_SECRET',\n  NOMBRE = 'NUMERIC',\n  DATE = 'DATE',\n  DATE_HEURE = 'DATE_HEURE',\n  HEURE = 'HEURE',\n  BOOLEEN = 'BOOLEAN',\n  FILE_IMAGE = 'FILE_IMAGE',\n  FILE_DOC = 'FILE_DOC',\n  FILE = 'FILE'\n}\nexport interface TFilterMetadataUI {\n  field: string;\n  value?: any;\n  //matchMode?: string;\n  operator?: Enum_FilterOperator;\n  //operator?: string;\n}\n\nexport interface TSortMetaUI {\n  field: string;\n  order: number;\n}\n\nexport interface TColumnDataTableDef {\n  header: string;\n  field: string;\n  visible?: boolean;\n  styleClassHeader?: string;\n  styleClassField?: string;\n  typeData?: TypeFieldDataView;\n  listFilterOperators?: Array<TOptionListeSelectValues>;\n  filterValue?: any;\n  css_width?: number;\n  css_textAlign?: TCss_ColumnDataTableTextAlign;\n  //new(header:string, field:string, visible:bool, ): TColumnDataTableDef;\n}\n\nexport enum TCss_ColumnDataTableTextAlign {\n  LEFT = 'left',\n  RIGHT = 'right',\n  CENTER = 'center',\n  JUSTIFY = 'justify',\n}\n\nexport interface ColumnDatatableFilterValue {\n  value: any;\n  operator: Enum_FilterOperator;\n  //matchMode: TFilterMatchMode;\n}\n\nexport interface ParamFindData {\n  //criteresAsTxt: Array<string>;\n  listeFiltres: ORofAndFilters;\n  page: number;\n  size: number;\n  filters?: Map<string, ColumnDatatableFilterValue>;\n}\n\nexport interface ParamFindStatsData {\n  //criteresAsTxt: Array<string>;\n  listeFiltres: ORofAndFilters;\n  filtresModalitesAsTxt: Array<string>;\n}\n\nexport function generateCritereTxtFromFiltres(\n  listefiltres: ORofAndFilters = []\n): Array<string> {\n  console.log('*********** BIBLIO INIT CRITERES ****************');\n  console.log(listefiltres?.length);\n  let tabCriteresTxt: Array<string> = [];\n  if (listefiltres != undefined && listefiltres.length > 0) {\n    if (listefiltres.length == 1) {\n      //---- PROVISOIRE - POUR RESOUDRE LE PROBLEME POSE AU NIVEAU DE L'API PAR UNE LIGNE DE FILTRE\n      listefiltres.push(listefiltres[0]);\n    }\n\n    listefiltres.forEach((filtres, index) => {\n      console.log(\n        '*********** BIBLIO INIT CRITERES (listefiltres.foreach Index) ****************'\n      );\n      console.log(index);\n\n      let criteresTxt: string = '';\n\n      filtres.value.forEach((element) => {\n        if (element.active) {\n          if (element.value != undefined || !element.ignoreWhenNull) {\n            if (criteresTxt.length > 0) {\n              criteresTxt += ', ';\n            }\n            criteresTxt +=\n              '\"' +\n              element.name +\n              '\"' +\n              ':\"{' +\n              element.operator +\n              ',' +\n              (element.value != undefined\n                ? element.value\n                : element.defaultNullValue) +\n              '}\"';\n            //criteresTxt += '\"' + element.name + '\"' + ':\"' + (element.value != undefined ? element.value : element.defaultNullValue) + '\"';\n          }\n        }\n      });\n      if (criteresTxt.trim().length > 0) {\n        criteresTxt = '{' + criteresTxt + '}';\n        tabCriteresTxt.push(criteresTxt);\n      }\n    });\n  }\n  console.log('*********** BIBLIO INIT CRITERES ****************');\n  console.log(tabCriteresTxt);\n  console.log(tabCriteresTxt.length);\n  return tabCriteresTxt;\n}\n\nexport interface ColumnDatatableFilterValue {\n  value: any;\n  operator: Enum_FilterOperator;\n  //matchMode: TFilterMatchMode;\n}\n\nexport interface ParamFindData {\n  //criteresAsTxt: Array<string>;\n  listeFiltres: ORofAndFilters;\n  page: number;\n  size: number;\n  filters?: Map<string, ColumnDatatableFilterValue>;\n}\n\nexport interface ParamFindStatsData {\n  //criteresAsTxt: Array<string>;\n  listeFiltres: ORofAndFilters;\n  filtresModalitesAsTxt: Array<string>;\n}\n\nexport interface TRowFieldsOfFilterConditionData {\n  fieldColumn: TFieldFormEditData;\n  fieldOperator: TFieldFormEditData;\n  fieldValue: TFieldFormEditData;\n}\n\nexport interface FiltreRequete {\n  active: boolean;\n  name?: string;\n  label?: string;\n  value?: any;\n  //matchMode?: TFilterMatchMode;\n  operator?: Enum_FilterOperator;\n  ignoreWhenNull: boolean;\n  defaultNullValue: any;\n  rowsFieldsForm?: TRowFieldsOfFilterConditionData;\n}\n\nexport interface ANDFilters {\n  value: Array<FiltreRequete>;\n  visible: boolean;\n}\n\nexport type ORofAndFilters = Array<ANDFilters>;\n\nexport interface HttpOptionsRequeteAPI {\n  headers?: HttpHeaders;\n  params?: HttpParams;\n  context?: HttpContext;\n  //observe?: \"body\";\n  //reportProgress?: boolean;\n  //responseType?: \"json\";\n  withCredentials?: boolean;\n}\n\nfunction createBasicAuthToken(username: String, password: String) {\n  //return 'Basic ' + btoa(username + \":\" + password);\n  //return 'Basic ' + btoa(username + \":\" + password);\n  return 'Basic ' + window.btoa(username + ':' + password);\n  //return 'Basic ' + window.btoa(username + \":\" + password);\n}\n\nexport function addOptionHeaderRequeteAPI_ContentType_JSON(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n): void {\n  addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'Content-Type',\n    'application/json; charset=utf-8'\n  );\n}\n\nexport function addOptionHeaderRequeteAPI_ContentType_MULTIPART(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n): void {\n  addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'Content-Type',\n    'multipart/form-data; boundary=----WebKitFormBoundarySGC46902'\n  );\n  /*addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'mode',\n    'cors'\n  );*/\n}\n\n/*export function addOptionHeaderRequeteAPI_ContentType_BLOB(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n): void {\n  addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'Content-Type',\n    'blob'\n  );\n}*/\n\nexport function addOptionHeaderRequeteAPI_ResponseType_BLOB(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n): void {\n  addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'ResponseType',\n    'blob'\n  );\n}\n\nexport function addOptionHeaderRequeteAPI_ACCEPT_JSON(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n): void {\n  addOptionHeaderRequeteAPI(myHttpOptionsApi, 'Accept', 'application/json');\n}\n\nexport function addOptionHeaderRequeteAPI_JSON(\n  myHttpOptionsApi: HttpOptionsRequeteAPI\n) {\n  addOptionHeaderRequeteAPI_ACCEPT_JSON(myHttpOptionsApi);\n  addOptionHeaderRequeteAPI_ContentType_JSON(myHttpOptionsApi);\n}\n\nfunction generateNewMapOptionsFromHttpHeadersAndNewKeyValue(\n  myHttpHeaders: HttpHeaders,\n  myKeyHeader: string,\n  myValueHeader: string\n): string | { [name: string]: string | string[] } {\n  let newHttpHeaders: { [name: string]: string | string[] } = {};\n\n  //console.log('NEWHTTPHEADERS - BEFORE');\n  //console.log(newHttpHeaders);\n  myHttpHeaders.keys().forEach((key) => {\n    const value = myHttpHeaders.getAll(key);\n    //console.log(key + '  :   ' + value);\n    if (value != null) {\n      newHttpHeaders[key] = value.length > 1 ? value : value[0];\n      //newHttpHeaders[key] = value.length < 1 ? value : value[0];\n      //console.log(newHttpHeaders);\n    }\n  });\n  //console.log('NEWHTTPHEADERS - AFTER');\n  //console.log(newHttpHeaders);\n  newHttpHeaders[myKeyHeader] = myValueHeader;\n  //console.log(newHttpHeaders);\n  return newHttpHeaders;\n}\n\nexport function addOptionHeaderRequeteAPI(\n  myHttpOptionsApi: HttpOptionsRequeteAPI,\n  myKeyHeader: string,\n  myValueHeader: string\n): void {\n  if (myHttpOptionsApi.headers == undefined) {\n    myHttpOptionsApi.headers = new HttpHeaders();\n  }\n  if (myHttpOptionsApi.headers.has(myKeyHeader)) {\n    myHttpOptionsApi.headers.append(myKeyHeader, myValueHeader);\n  } else {\n    //myHttpOptionsApi.headers.append(myKeyHeader, myKeyValue);\n    myHttpOptionsApi.headers = new HttpHeaders(\n      generateNewMapOptionsFromHttpHeadersAndNewKeyValue(\n        myHttpOptionsApi.headers,\n        myKeyHeader,\n        myValueHeader\n      )\n    );\n  }\n  //console.log('****** BIBLIO -- ADDOPTIONHEADERREQUETEAPI **************');\n  //console.log(myHttpOptionsApi);\n}\n\nexport function addOptionHeaderRequeteAPI_Authorization(\n  myHttpOptionsApi: HttpOptionsRequeteAPI,\n  username: string,\n  password: string\n): void {\n  addOptionHeaderRequeteAPI(\n    myHttpOptionsApi,\n    'Authorization',\n    createBasicAuthToken(username, password)\n  );\n\n  /*  myHttpOptionsApi.headers = new HttpHeaders({\n      Authorization: createBasicAuthToken(username, password),\n    });*/\n}\n\n//----------------------------------------------------------\n/************************/\nfunction generateNewMapOptionsFromHttpParamsAndNewKeyValue(\n  myHttpParams: HttpParams,\n  myKeyParam: string,\n  myValueParam: any\n): {\n  [param: string]:\n  | string\n  | number\n  | boolean\n  | readonly (string | number | boolean)[];\n} {\n  let newHttpParams: {\n    [param: string]:\n    | string\n    | number\n    | boolean\n    | readonly (string | number | boolean)[];\n  } = {};\n\n  //console.log('NEWHTTPPARAMS - BEFORE');\n  //console.log(newHttpParams);\n  myHttpParams.keys().forEach((key) => {\n    const value = myHttpParams.getAll(key);\n    //console.log(key + '  :   ' + value);\n    if (value != null) {\n      newHttpParams[key] = value.length > 1 ? value : value[0];\n      //console.log(newHttpParams);\n    }\n  });\n  //console.log('NEWHTTPPARAMS - AFTER');\n  //console.log(newHttpParams);\n  newHttpParams[myKeyParam] = myValueParam;\n  //console.log(newHttpParams);\n  return newHttpParams;\n}\n\n/** */\nexport function addOptionParamRequeteAPI(\n  myHttpOptionsApi: HttpOptionsRequeteAPI,\n  myKeyParam: string,\n  myKeyValue: any\n): void {\n  if (myHttpOptionsApi.params == undefined) {\n    myHttpOptionsApi.params = new HttpParams();\n  }\n\n  if (myHttpOptionsApi.params.has(myKeyParam)) {\n    myHttpOptionsApi.params = myHttpOptionsApi.params.append(\n      myKeyParam,\n      myKeyValue\n    );\n    //console.log('PARAM EXIST');\n    //console.log(myHttpOptionsApi.params);\n  } else {\n    myHttpOptionsApi.params = new HttpParams({\n      fromObject: generateNewMapOptionsFromHttpParamsAndNewKeyValue(\n        myHttpOptionsApi.params,\n        myKeyParam,\n        myKeyValue\n      ),\n    });\n    //myHttpOptionsApi.params = myHttpOptionsApi.params.append('test', 'value');\n    //console.log('DOES NOT');\n    //console.log(myHttpOptionsApi.params);\n  }\n}\n\nexport interface HttpClientParamsAPI {\n  idApp?: string;\n  connectedUserId?: number;\n  connectedUserLogin?: string;\n  timeZoneOffset?: string;\n}\n\nexport interface ApiSettings {\n  api_viewName?: string;\n  baseUrlApi: string;\n  apiUrl_findAll?: string;\n  apiUrl_findAllForStats?: string;\n  apiUrl_findAllForStats2?: string;\n  apiUrl_findByPage?: string;\n  apiUrl_findById?: string;\n  apiUrl_editOrCreate?: string;\n  apiUrl_delete?: string;\n  apiUrl_previewUpload?: string;\n  apiUrl_validateUpload?: string;\n  apiUrl_upload?: string;\n  apiUrl_exportData?: string;\n  apiUrl_exportStats?: string;\n  apiUrl_fileUpload?: string;\n  apiUrl_fileDownload?: string;\n  api_authorization_username?: string;\n  api_authorization_password?: string;\n  api_clientParams?: HttpClientParamsAPI;\n  api_keyHttpHeader_clientParamsAsTxt?: string;\n  api_keyHttpHeader_criteresAsTxt?: string;\n}\n\nexport interface DateHeureSettings {\n  defaultCustomDateFormat: string;\n  defaultCustomDateHeureFormat: string;\n  defaultCustomHeureFormat: string;\n}\n\n//****************************************** */\nexport function isColTypeDate(col: TColumnDataTableDef) {\n  return (\n    col != null &&\n    col != undefined &&\n    col.typeData == TypeFieldDataView.DATE\n  );\n}\n\nexport function isColTypeDateHeure(col: TColumnDataTableDef) {\n  return (\n    col != null &&\n    col != undefined &&\n    col.typeData == TypeFieldDataView.DATE_HEURE\n  );\n}\n\nexport function isColTypeBooleen(col: TColumnDataTableDef) {\n  return (\n    col != null && col != undefined && col.typeData == TypeFieldDataView.BOOLEEN\n  );\n}\n\nexport function isColTypeNombre(col: TColumnDataTableDef) {\n  return (\n    col != null && col != undefined && col.typeData == TypeFieldDataView.NOMBRE\n  );\n}\n\nexport function isColTypeTexte(col: TColumnDataTableDef) {\n  return (\n    col != null &&\n    col != undefined &&\n    (col.typeData == null ||\n      col.typeData == undefined ||\n      col.typeData == TypeFieldDataView.TEXTE)\n  );\n}\n\n//*********************** STRUCTURES DE DONNEES ET FONCTIONS POUR STATISTIQUES ************************************ */\n//**************** PARAMETRES POUR LES STATISTIQUES *************************************** */\nexport const defaultMaxYAxesChart: number = 10;\n\nexport interface ListeChoixValeursModalitesStats {\n  valeursmodaliteparam1: Array<string>;\n  valeursmodaliteparam2: Array<string>;\n}\n\nexport interface LabelModaliteStats {\n  labelModalite1: string;\n  labelModalite2: string;\n}\n\nexport interface DimensionAnalyseStats {\n  nom: string;\n  description: string;\n}\n\n//export type ListeFiltresModaliteStats = Array<FiltreModaliteStats>;\n\nexport interface ModaliteStatsParam {\n  nomChampFiltre1: string;\n  nomChampFiltre2?: string;\n  nomChampCumul: string;\n  //listeChoixValeurs1: Array<string>;\n  //listeChoixValeurs2?: Array<string>;\n  titreLabelChampFiltre1?: string;\n}\n\nexport interface ModaliteStatsParamForRenderView {\n  valeur: string;\n  couleurAffichage: string;\n  visible: boolean;\n  ordre?: number;\n}\n\nexport interface ChartStatsParamForRenderView {\n  nomChampFiltre1: string;\n  nomChampFiltre2?: string;\n  listeChoixValeurs1: Array<ModaliteStatsParamForRenderView>;\n  listeChoixValeurs2?: Array<ModaliteStatsParamForRenderView>;\n  titreLabelChampFiltre1: string;\n  typeGraphique: string;\n  ordonner: boolean;\n}\n\nexport type ListeModaliteStatsParams = Array<ModaliteStatsParam>;\n\nexport interface ValeurModaliteStats<TDATA> {\n  modalites: Array<string>;\n  allLabelsModalites: Array<string>;\n  value: number;\n  percentValue: number;\n  cumulValue: number;\n  moyenneValue: number;\n  valMin: number;\n  valMax: number;\n  //listeData: Array<TDATA>;\n  //sousSerie: SerieStats<TDATA>\n}\n\nexport interface EntryDataSetChart {\n  label?: any;\n  data: Array<any>;\n  backgroundColor?: string;\n}\n\nexport type ListeValeursModaliteStats<TDATA> = Array<\n  ValeurModaliteStats<TDATA>\n>;\n\nexport interface SerieStats<TDATA> {\n  titre?: string;\n  //filtreModalite: FiltreModaliteStats;\n  dimensionsAnalyses: Array<DimensionAnalyseStats>;\n  listeValeursModalites: Array<ValeurModaliteStats<TDATA>>;\n  totalData: Number;\n  //listeValeursModalites2: Map<string, Map<string, ValeurModaliteStats<TDATA>>>;\n  listeValeursModalitesForView?: ListeModaliteStatsForView;\n  dataChartView?: any;\n  optionsChartView?: any;\n  valeurMin?: Number;\n  valeurMax?: Number;\n}\n\nexport interface TabModaliteSerie1 {\n  titre: string;\n  effectif: number;\n  taux: number;\n}\n\nexport interface TabModaliteSerie2 {\n  titreserie1: string;\n  titre: string;\n  effectif: number;\n  taux: number;\n}\n\nexport type ListeSeriesStats<TDATA> = Array<SerieStats<TDATA>>;\n\nexport enum TypeChartStats {\n  BAR = 'bar',\n  PIE = 'pie',\n  DOUGHNUT = 'doughnut',\n}\n\nexport enum ListePositionAffichage {\n  BOTTOM = 'bottom',\n  TOP = 'top',\n  RIGHT = 'right',\n  LEFT = 'left',\n}\n\nexport interface StylesTitreChartStats {\n  //backgroundolor: string;\n  display: boolean;\n  fontSize?: number;\n}\n\nexport interface OptionsLegendeChartStats {\n  positionAffichage: ListePositionAffichage;\n}\n\nexport interface StylesModaliteStats {\n  backgroundColor: string;\n}\n\nexport interface StylesSerieStats {\n  backgroundColors: Array<string>;\n}\n\nexport interface ChartStats<TDATA> {\n  idChartStats: string;\n  titre: string;\n  typechart: string;\n  listeParamsModalite: ListeModaliteStatsParams;\n  stylesTitre?: StylesTitreChartStats;\n  optionsLegende?: OptionsLegendeChartStats;\n  listeSeries: ListeSeriesStats<TDATA>;\n}\n\nexport type ListeChartStats<TDATA> = Array<ChartStats<TDATA>>;\n\nexport interface ModaliteStatsForView {\n  label: string;\n  value: Number;\n}\n\nexport type ListeModaliteStatsForView = Array<ModaliteStatsForView>;\n\n//------------------------------------------------------------\n//---------------------------------------------------------------\n\n//******************************** */\nexport class CrudFiltreRecherche {\n  private criteresFiltresAsTxt: Array<string> = [];\n  private filtresModalitesAsTxt: Array<string> = [];\n  public reloadOnFiltreChange: Subject<Array<string>> = new Subject<\n    Array<string>\n  >();\n\n  constructor() { }\n\n  // on Filtre change\n  private emitSubjectChange(): void {\n    console.log('******** BIBLIO : EMITSUBJECTCHANGE ************');\n    console.log(this.criteresFiltresAsTxt);\n    this.reloadOnFiltreChange.next(this.criteresFiltresAsTxt);\n  }\n\n  validateChangeFiltre(filtres?: ORofAndFilters): void {\n    this.initCritereTxtFromFiltres(filtres);\n    this.emitSubjectChange();\n  }\n\n  validateChangeStatsFiltre(\n    modalites: ListeModaliteStatsParams,\n    filtres: ORofAndFilters\n  ): void {\n    this.initCritereTxtFromFiltres(filtres);\n    //this.initFiltresModalitesAsTxtFromFiltres(modalites);\n    this.emitSubjectChange();\n  }\n\n  public initCritereTxtFromFiltres(listefiltres?: ORofAndFilters): void {\n    this.criteresFiltresAsTxt = generateCritereTxtFromFiltres(listefiltres);\n  }\n\n  public getCriteresFiltresAsTxt(): Array<string> {\n    return this.criteresFiltresAsTxt;\n  }\n\n  public getFiltresModalitesAsTxt(): Array<string> {\n    return this.filtresModalitesAsTxt;\n  }\n}\n//---------------------------------------------\n/***  DEFAULT FILE DATA SERVICE ** */\nexport class FileDataService {\n  default_apiSettings!: ApiSettings;\n  apiSettings?: ApiSettings;\n  optionRequeteAPI: HttpOptionsRequeteAPI = {\n    headers: new HttpHeaders(),\n    params: new HttpParams(),\n  };\n  default_dateHeureSettings!: DateHeureSettings;\n  dateHeureSettings?: DateHeureSettings;\n\n  httpClient!: HttpClient;\n\n  //******************************\n  //zoomLocationCec: ZoomLocationData;\n\n  constructor(\n    myHttpClient: HttpClient,\n    myApiSettings?: ApiSettings\n  ) {\n    //this.nbRowsDatatablePage = this.crudSettings.nbRowsDatatablePage? this.crudSettings.nbRowsDatatablePage : 15;\n    this.httpClient = myHttpClient;\n\n    this.default_apiSettings = {\n      api_viewName: '',\n      apiUrl_fileUpload: 'fileupload',\n      apiUrl_fileDownload: 'filedownload',\n      baseUrlApi: '',\n      api_authorization_username: 'admin',\n      api_authorization_password: 'admin',\n      api_keyHttpHeader_clientParamsAsTxt: 'clientParamsAsTxt',\n    };\n\n    this.default_dateHeureSettings = {\n      defaultCustomDateFormat: 'dd-MM-yyy',\n      defaultCustomDateHeureFormat: 'dd/MM/yyyy hh:mm',\n      defaultCustomHeureFormat: 'hh:mm',\n    };\n\n    this.apiSettings = myApiSettings ? myApiSettings : this.default_apiSettings;\n    this.resetHttpHeadersRequeteAPI();\n  }\n\n  /**************************************************/\n  /** */\n  protected getCompleteUrlEntity(suffixeEntityUrl: string = ''): string {\n    let str: string = this.apiSettings?.baseUrlApi\n      ? this.apiSettings.baseUrlApi\n      : this.default_apiSettings.baseUrlApi;\n    if (str.length > 0 && str.charAt(str.length - 1) == '/') {\n      str = str.substring(0, str.length - 2);\n    }\n    let str2: string = suffixeEntityUrl;\n    if (str2.length > 0 && str2.charAt(0) == '/') {\n      str2 = str2.substring(1, str2.length - 1);\n    }\n    str = str + '/' + str2;\n    //console.log('******  DEFAULTCRUDSERVICE --- getCompletePrefixUrlEntity');\n    //console.log('--api_prefixUrlEntityCrud = '+this.api_prefixUrlEntityCrud);\n    //console.log('--suffixeEntityUrl = '+suffixeEntityUrl);\n    //console.log(str);\n    return str;\n  }\n\n  //****************************************** */\n  protected getApi_keyHttpHeader_clientParamsAsTxt(): string {\n    return this.apiSettings?.api_keyHttpHeader_clientParamsAsTxt\n      ? this.apiSettings.api_keyHttpHeader_clientParamsAsTxt\n      : this.default_apiSettings.api_keyHttpHeader_clientParamsAsTxt\n        ? this.default_apiSettings.api_keyHttpHeader_clientParamsAsTxt\n        : '';\n  }\n\n  protected getApi_clientParams(): HttpClientParamsAPI {\n    return this.apiSettings?.api_clientParams\n      ? this.apiSettings.api_clientParams\n      : this.default_apiSettings.api_clientParams\n        ? this.default_apiSettings.api_clientParams\n        : {};\n  }\n\n  protected getApi_authorization_username(): string {\n    return this.apiSettings?.api_authorization_username\n      ? this.apiSettings.api_authorization_username\n      : this.default_apiSettings.api_authorization_username\n        ? this.default_apiSettings.api_authorization_username\n        : '';\n  }\n\n  protected getApi_authorization_password(): string {\n    return this.apiSettings?.api_authorization_password\n      ? this.apiSettings.api_authorization_password\n      : this.default_apiSettings.api_authorization_password\n        ? this.default_apiSettings.api_authorization_password\n        : '';\n  }\n\n  protected getCompleteUrlEntity_filedownload(): string {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_fileDownload\n        ? this.apiSettings?.apiUrl_fileDownload\n        : (this.default_apiSettings.apiUrl_fileDownload ? this.default_apiSettings.apiUrl_fileDownload : '')\n    );\n  }\n\n  protected getCompleteUrlEntity_fileupload(): string {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_fileUpload\n        ? this.apiSettings?.apiUrl_fileUpload\n        : (this.default_apiSettings.apiUrl_fileUpload ? this.default_apiSettings.apiUrl_fileUpload : '')\n    );\n  }\n\n  /**************************************************/\n  /********** */\n  protected resetHttpParamsRequeteAPI(): void {\n    this.optionRequeteAPI.params = new HttpParams();\n    this.setOptionParamRequeteAPI_HttpClientParams();\n  }\n  /********** */\n  protected resetHttpHeadersRequeteAPI(): void {\n    this.optionRequeteAPI.headers = new HttpHeaders();\n\n    addOptionHeaderRequeteAPI_Authorization(\n      this.optionRequeteAPI,\n      this.getApi_authorization_username(),\n      this.getApi_authorization_password()\n      //this.crudSettings.httpHeaderAPI_authorization_password\n    );\n\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Origin','*');\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Headers', 'Authorization, Origin, Content-Type, X-CSRF-Token');\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Origin','*');\n  }\n\n  /***** */\n  private setOptionParamRequeteAPI_HttpClientParams() {\n    addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      this.getApi_keyHttpHeader_clientParamsAsTxt(),\n      JSON.stringify(this.getApi_clientParams())\n    );\n  }\n  //-------------------------------------------------------------------------\n  downloadFileFromServer(downloadParams: TOptionFileUploadDownload): Observable<any> {\n    //this.resetHttpHeadersRequeteAPI();\n    //addOptionHeaderRequeteAPI_ContentType_JSON(this.optionRequeteAPI);\n    //this.resetHttpParamsRequeteAPI();\n    const myUrl: string = this.getCompleteUrlEntity_filedownload();\n\n    let params = new HttpParams();\n    params = params.set('fileData', JSON.stringify(downloadParams));\n\n    let myOptionQuery: any = {\n      ...this.getOptionRequeteDownload(),\n      params: params,\n      responseType: 'blob' as 'json',\n      observe: 'response',\n    };\n\n    /*addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      'fileData',\n      JSON.stringify(downloadParams)\n    );*/\n\n    console.log(\n      '******* CRUD-SERVICE -- downloadFileFromServer -- myOptionQuery **************************'\n    );\n    console.log(myOptionQuery);\n\n    if (myUrl) {\n      return this.httpClient.get(myUrl, myOptionQuery);\n    } else {\n      return of(null);\n    }\n\n    /*if (myUrl) {\n      return this.httpClient.get<Blob>(myUrl, this.optionRequeteAPI)\n    } else {\n      return of(null);\n    }*/\n  }\n\n  //------------------------\n  protected getOptionRequeteDownload() {\n    return {\n      headers: new HttpHeaders({\n        Authorization: createBasicAuthToken(\n          this.getApi_authorization_username(),\n          this.getApi_authorization_password()\n        ),\n      }),\n    };\n  }\n}\n\n\n/***  DEFAULT CRUD DATA SERVICE ** */\nexport class CrudDataService<\n  TDataList,\n  TDataCreate,\n  TDataEdit,\n  TDataImport,\n  TDataExport\n> {\n  default_apiSettings!: ApiSettings;\n  apiSettings?: ApiSettings;\n  optionRequeteAPI: HttpOptionsRequeteAPI = {\n    headers: new HttpHeaders(),\n    params: new HttpParams(),\n  };\n  default_dateHeureSettings!: DateHeureSettings;\n  dateHeureSettings?: DateHeureSettings;\n\n  useEchelleInfo_listData: boolean = false;\n  useEchelleInfo_statsData: boolean = false;\n\n  //*********************************************\n  dataKeyField!: string;\n  httpClient!: HttpClient;\n  typeView!: TypeCrudView;\n  listeAllFieldsFormEdit!: TListeFieldFormEditData;\n\n  //******************************\n\n  constructor(\n    myHttpClient: HttpClient,\n    myDataKeyField: string,\n    mytypeview: TypeCrudView,\n    myApiSettings?: ApiSettings\n  ) {\n    //this.nbRowsDatatablePage = this.crudSettings.nbRowsDatatablePage? this.crudSettings.nbRowsDatatablePage : 15;\n    this.httpClient = myHttpClient;\n    this.dataKeyField = myDataKeyField;\n    this.typeView = mytypeview;\n    this.default_apiSettings = {\n      api_viewName: '',\n      baseUrlApi: '',\n      apiUrl_findAll: 'listAll',\n      apiUrl_findByPage: 'listByPage',\n      apiUrl_findById: 'findByID',\n      apiUrl_findAllForStats: 'listAllStats',\n      apiUrl_findAllForStats2: 'listAllStats2',\n      apiUrl_editOrCreate: '',\n      apiUrl_delete: '',\n      apiUrl_previewUpload: 'previewupload',\n      apiUrl_validateUpload: 'validateupload',\n      apiUrl_upload: 'upload',\n      apiUrl_exportData: 'download',\n      apiUrl_fileDownload: 'filedownload',\n      apiUrl_exportStats: '',\n      api_authorization_username: 'admin',\n      api_authorization_password: 'admin',\n      api_keyHttpHeader_clientParamsAsTxt: 'clientParamsAsTxt',\n    };\n\n    this.default_dateHeureSettings = {\n      defaultCustomDateFormat: 'dd-MM-yyy',\n      defaultCustomDateHeureFormat: 'dd/MM/yyyy hh:mm',\n      defaultCustomHeureFormat: 'hh:mm',\n    };\n\n    this.apiSettings = myApiSettings;\n    this.resetHttpHeadersRequeteAPI();\n\n    this.listeAllFieldsFormEdit = [];\n  }\n\n  /**************************************************/\n  /** */\n  protected getCompleteUrlEntity(suffixeEntityUrl: string = ''): string {\n    let str: string = this.apiSettings?.baseUrlApi\n      ? this.apiSettings.baseUrlApi\n      : this.default_apiSettings.baseUrlApi;\n    if (str.length > 0 && str.charAt(str.length - 1) == '/') {\n      str = str.substring(0, str.length - 2);\n    }\n    let str2: string = suffixeEntityUrl;\n    if (str2.length > 0 && str2.charAt(0) == '/') {\n      str2 = str2.substring(1, str2.length - 1);\n    }\n    str = str + '/' + str2;\n    //console.log('******  DEFAULTCRUDSERVICE --- getCompletePrefixUrlEntity');\n    //console.log('--api_prefixUrlEntityCrud = '+this.api_prefixUrlEntityCrud);\n    //console.log('--suffixeEntityUrl = '+suffixeEntityUrl);\n    //console.log(str);\n    return str;\n  }\n\n  protected getCompleteUrlEntity_listAll(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_findAll\n        ? this.apiSettings?.apiUrl_findAll\n        : this.default_apiSettings.apiUrl_findAll\n    );\n  }\n\n  protected getCompleteUrlEntity_listAllStats(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_findAllForStats\n        ? this.apiSettings?.apiUrl_findAllForStats\n        : this.default_apiSettings.apiUrl_findAllForStats\n    );\n  }\n\n  protected getCompleteUrlEntity_listAllStats2(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_findAllForStats2\n        ? this.apiSettings?.apiUrl_findAllForStats2\n        : this.default_apiSettings.apiUrl_findAllForStats2\n    );\n  }\n\n  protected getCompleteUrlEntity_listByPage(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_findByPage\n        ? this.apiSettings?.apiUrl_findByPage\n        : this.default_apiSettings.apiUrl_findByPage\n    );\n  }\n\n  protected getCompleteUrlEntity_findById(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_findById\n        ? this.apiSettings?.apiUrl_findById\n        : this.default_apiSettings.apiUrl_findById\n    );\n  }\n\n  protected getCompleteUrlEntity_editOrCreate(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_editOrCreate\n        ? this.apiSettings?.apiUrl_editOrCreate\n        : this.default_apiSettings.apiUrl_editOrCreate\n    );\n  }\n\n  protected getCompleteUrlEntity_delete(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_delete\n        ? this.apiSettings?.apiUrl_delete\n        : this.default_apiSettings.apiUrl_delete\n    );\n  }\n\n  protected getCompleteUrlEntity_previewUpload(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_previewUpload\n        ? this.apiSettings?.apiUrl_previewUpload\n        : this.default_apiSettings.apiUrl_previewUpload\n    );\n  }\n\n  protected getCompleteUrlEntity_validateUpload(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_validateUpload\n        ? this.apiSettings?.apiUrl_validateUpload\n        : this.default_apiSettings.apiUrl_validateUpload\n    );\n  }\n\n  protected getCompleteUrlEntity_upload(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_upload\n        ? this.apiSettings?.apiUrl_upload\n        : this.default_apiSettings.apiUrl_upload\n    );\n  }\n\n  protected getCompleteUrlEntity_exportData(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_exportData\n        ? this.apiSettings?.apiUrl_exportData\n        : this.default_apiSettings.apiUrl_exportData\n    );\n  }\n\n  protected getCompleteUrlEntity_filedownload(): string {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_fileDownload\n        ? this.apiSettings?.apiUrl_fileDownload\n        : (this.default_apiSettings.apiUrl_fileDownload ? this.default_apiSettings.apiUrl_fileDownload : '')\n    );\n  }\n\n  protected getCompleteUrlEntity_exportStats(): string | undefined {\n    return this.getCompleteUrlEntity(\n      this.apiSettings?.apiUrl_exportStats\n        ? this.apiSettings?.apiUrl_exportStats\n        : this.default_apiSettings.apiUrl_exportStats\n    );\n  }\n\n  //****************************************** */\n  protected getApi_keyHttpHeader_clientParamsAsTxt(): string {\n    return this.apiSettings?.api_keyHttpHeader_clientParamsAsTxt\n      ? this.apiSettings.api_keyHttpHeader_clientParamsAsTxt\n      : this.default_apiSettings.api_keyHttpHeader_clientParamsAsTxt\n        ? this.default_apiSettings.api_keyHttpHeader_clientParamsAsTxt\n        : '';\n  }\n\n  protected getApi_keyHttpHeader_criteresAsTxt(): string {\n    return 'criteresAsTxt';\n  }\n\n  protected getApi_clientParams(): HttpClientParamsAPI {\n    return this.apiSettings?.api_clientParams\n      ? this.apiSettings.api_clientParams\n      : this.default_apiSettings.api_clientParams\n        ? this.default_apiSettings.api_clientParams\n        : {};\n  }\n\n  protected getApi_authorization_username(): string {\n    return this.apiSettings?.api_authorization_username\n      ? this.apiSettings.api_authorization_username\n      : this.default_apiSettings.api_authorization_username\n        ? this.default_apiSettings.api_authorization_username\n        : '';\n  }\n\n  protected getApi_authorization_password(): string {\n    return this.apiSettings?.api_authorization_password\n      ? this.apiSettings.api_authorization_password\n      : this.default_apiSettings.api_authorization_password\n        ? this.default_apiSettings.api_authorization_password\n        : '';\n  }\n\n  /**************************************************/\n  /********** */\n  protected resetHttpParamsRequeteAPI(): void {\n    this.optionRequeteAPI.params = new HttpParams();\n    this.setOptionParamRequeteAPI_HttpClientParams();\n  }\n  /********** */\n  protected resetHttpHeadersRequeteAPI(): void {\n    this.optionRequeteAPI.headers = new HttpHeaders();\n    addOptionHeaderRequeteAPI_Authorization(\n      this.optionRequeteAPI,\n      this.getApi_authorization_username(),\n      this.getApi_authorization_password()\n      //this.crudSettings.httpHeaderAPI_authorization_password\n    );\n  }\n\n  /***** */\n  private setOptionParamRequeteAPI_HttpClientParams() {\n    addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      this.getApi_keyHttpHeader_clientParamsAsTxt(),\n      JSON.stringify(this.getApi_clientParams())\n    );\n  }\n  //-------------------------------------------------------------------------\n  /******************************************************************* */\n  //----------------------------------------------------------\n  findDataAll(\n    listeFiltres?: ORofAndFilters\n  ): Observable<ReponseAPI<TDataList[]>> {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    let tabOrCriteresOfAndPredicat: Array<string> =\n      generateCritereTxtFromFiltres(listeFiltres);\n\n    if (\n      tabOrCriteresOfAndPredicat != undefined &&\n      tabOrCriteresOfAndPredicat.length > 0\n    ) {\n      tabOrCriteresOfAndPredicat.forEach((andCriteres) => {\n        addOptionParamRequeteAPI(\n          this.optionRequeteAPI,\n          this.getApi_keyHttpHeader_criteresAsTxt(),\n          andCriteres\n        );\n      });\n    }\n\n    const myUrl: string | undefined = this.getCompleteUrlEntity_listAll();\n\n    if (myUrl) {\n      return this.httpClient\n        .get<ReponseAPI<TDataList[]>>(myUrl, this.optionRequeteAPI)\n        .pipe(map((data) => this.convertDataResponseApi_ListView(data)));\n    } else {\n      return of({\n        data: [],\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<TDataList[]>);\n    }\n  }\n\n  //----------------------------------------------------------\n  findDataFromServer(\n    findParams: ParamFindData\n  ): Observable<PaginateReponseAPI<TDataList[]>> {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n    //this.setOptionParamRequeteAPI_HttpClientParams(); //-- Déjà inclus dans resetHttpParamsRequeteAPI\n\n    //console.log(\"******* GET DATA FROM SERVER 0 - Params Find  ************\")\n    //console.log(findParams);\n    //findParams.listeFiltres = this.refreshFiltresWithZoomlocationInfo(findParams.listeFiltres,this.useEchelleInfo_listData);\n\n    let criteresAsTxt: Array<string> = generateCritereTxtFromFiltres(\n      findParams.listeFiltres\n    );\n\n    if (criteresAsTxt != undefined && criteresAsTxt.length > 0) {\n      criteresAsTxt.forEach((andCriteres) => {\n        addOptionParamRequeteAPI(\n          this.optionRequeteAPI,\n          this.getApi_keyHttpHeader_criteresAsTxt(),\n          andCriteres\n        );\n      });\n    }\n    addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      'page',\n      String(findParams.page)\n    );\n    addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      'size',\n      String(findParams.size)\n    );\n\n    console.log(\n      '******* CRUD-SERVICE -- FINDDATAFROMSERVER PAGINATE -- OptionsRequeteAPI **************************'\n    );\n    console.log(this.optionRequeteAPI);\n\n    const myUrl: string | undefined = this.getCompleteUrlEntity_listByPage();\n    if (myUrl) {\n      return this.httpClient\n        .get<PaginateReponseAPI<TDataList[]>>(myUrl, this.optionRequeteAPI)\n        .pipe(\n          map((data) => this.convertDataResponseApi_PaginateListView(data))\n        );\n    } else {\n      return of({\n        data: {},\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as PaginateReponseAPI<TDataList[]>);\n    }\n  }\n\n  //-----------------------------------------------\n  findById(idData: string): Observable<ReponseAPI<TDataList>> {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    addOptionParamRequeteAPI(this.optionRequeteAPI, 'id', idData);\n\n    const myOptionQuery = { ...this.optionRequeteAPI };\n    const myUrl: string | undefined = this.getCompleteUrlEntity_findById();\n\n    console.log('****  CRUD SERVICE - FINDBYID 00 *******');\n    console.log(idData);\n    console.log(myUrl);\n    console.log(this.optionRequeteAPI);\n\n    if (myUrl != undefined) {\n      console.log('****  CRUD SERVICE - FINDBYID URL OK *******');\n      return this.httpClient.get<ReponseAPI<TDataList>>(myUrl, myOptionQuery);\n    } else {\n      console.log('****  CRUD SERVICE - FINDBYID URL NON-OK *******');\n      return of({\n        data: undefined,\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<TDataList>);\n    }\n  }\n\n  //-----------------------------------------------\n  deleteById(idData: string) {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    //addOptionParamRequeteAPI(this.optionRequeteAPI, 'id', idData);\n\n    const myOptionQuery = { ...this.optionRequeteAPI };\n    const myUrl: string | undefined = this.getCompleteUrlEntity_delete() + idData;\n\n    console.log('****  CRUD SERVICE - DELETEBYID 00 *******');\n    console.log(idData);\n    console.log(myUrl);\n\n    if (myUrl) {\n      return this.httpClient.delete<ReponseAPI<Boolean>>(myUrl, myOptionQuery);\n    } else {\n      return of({\n        data: false,\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<Boolean>);\n    }\n  }\n\n  deleteAll() {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    const myOptionQuery = { ...this.optionRequeteAPI };\n    const myUrl: string | undefined = this.getCompleteUrlEntity_delete();\n\n    if (myUrl) {\n      return this.httpClient.delete<ReponseAPI<Boolean>>(myUrl, myOptionQuery);\n    } else {\n      return of({\n        data: false,\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<Boolean>);\n    }\n  }\n  //--------------- EXPORTATION  -------------------------------------------------------\n  exportData(\n    type: string,\n    exportParams: ExportListDataParams,\n    listefiltres?: ORofAndFilters\n  ): Observable<any> {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    let params = new HttpParams();\n    params = params.set('p_title', exportParams.title);\n    params = params.set('p_useLandscape', exportParams.useLandscape);\n    params = params.set('p_useHeaderDataFieldName', exportParams.useHeaderDataFieldName);\n    params = params.set('p_showRowNumber', exportParams.addNumeroOrdre);\n    const pkey_listeCols = 'p_listeColsData';\n\n    exportParams.listeColsData.forEach(colData => {\n      if (params.has(pkey_listeCols)) {\n        params = params.append(pkey_listeCols, colData);\n      } else {\n        params = params.set(pkey_listeCols, colData);\n      }\n    })\n\n    //listefiltres = this.refreshFiltresWithZoomlocationInfo(listefiltres,this.useEchelleInfo_listData);\n    let tabOrCriteresOfAndPredicat: Array<string> =\n      generateCritereTxtFromFiltres(listefiltres);\n\n    if (\n      tabOrCriteresOfAndPredicat != undefined &&\n      tabOrCriteresOfAndPredicat.length > 0\n    ) {\n      tabOrCriteresOfAndPredicat.forEach((andCriteres) => {\n        if (params.has(this.getApi_keyHttpHeader_clientParamsAsTxt())) {\n          params = params.append(\n            this.getApi_keyHttpHeader_clientParamsAsTxt(),\n            andCriteres\n          );\n        } else {\n          params = params.set(\n            this.getApi_keyHttpHeader_clientParamsAsTxt(),\n            andCriteres\n          );\n        }\n      });\n    }\n\n    //console.log(\"********** CRUDSERVICE - EXPORT DATA - HttpParams ************\")\n    //console.log(params)\n\n    let myOptionQuery: any = {\n      ...this.getOptionRequeteReport(),\n      params: params,\n      responseType: 'blob' as 'json',\n      observe: 'response',\n    };\n    //console.log(\"********** CRUDSERVICE - EXPORT DATA - myOptionQuery ************\")\n    //console.log(myOptionQuery)\n    let myUrl: string | undefined = this.getCompleteUrlEntity_exportData() + '/' + type;\n    if (myUrl) {\n      return this.httpClient.get(myUrl, myOptionQuery);\n    } else {\n      return of(null);\n    }\n  }\n\n  protected getOptionRequeteReport() {\n    return {\n      headers: new HttpHeaders({\n        //'Content-Type': 'application/pdf; charset=UTF-8',\n        //'Content-Disposition': 'inline; filename='\n        //'Accept': 'application/json',\n        //'Access-Control-Allow-Origin': '*',\n        Authorization: createBasicAuthToken(\n          this.getApi_authorization_username(),\n          this.getApi_authorization_password()\n        ),\n      }),\n    };\n  }\n\n  convertDataResponseApi_PaginateListView: (\n    resApi: any\n  ) => PaginateReponseAPI<TDataList[]> = (\n    myResApi: PaginateReponseAPI<TDataList[]>\n  ) => myResApi;\n  convertDataResponseApi_ListView: (resApi: any) => ReponseAPI<TDataList[]> = (\n    myResApi: ReponseAPI<TDataList[]>\n  ) => myResApi;\n\n  //----\n  public getAllFieldOfCreateTypeData(): TListeFieldFormEditData {\n    return this.listeAllFieldsFormEdit != undefined ? this.listeAllFieldsFormEdit.filter(elt => elt.useInCreateView == true && elt.name != undefined) : []\n  }\n  //----\n  public getAllFieldOfEditTypeData(): TListeFieldFormEditData {\n    return this.listeAllFieldsFormEdit != undefined ? this.listeAllFieldsFormEdit.filter(elt => elt.useInEditView == true && elt.name != undefined) : []\n  }\n  //----\n  public getAllFieldOfImportTypeData(): TListeFieldFormEditData {\n    return this.listeAllFieldsFormEdit != undefined ? this.listeAllFieldsFormEdit.filter(elt => elt.useInImportView == true && elt.name != undefined) : []\n  }\n\n  //----------------------------\n  downloadFileFromServer(downloadParams: TOptionFileUploadDownload): Observable<any> {\n    //this.resetHttpHeadersRequeteAPI();\n    //addOptionHeaderRequeteAPI_ContentType_JSON(this.optionRequeteAPI);\n    //this.resetHttpParamsRequeteAPI();\n    const myUrl: string = this.getCompleteUrlEntity_filedownload();\n\n    let params = new HttpParams();\n    params = params.set('fileData', JSON.stringify(downloadParams));\n\n    let myOptionQuery: any = {\n      ...this.getOptionRequeteDownload(),\n      params: params,\n      responseType: 'blob' as 'json',\n      observe: 'response',\n    };\n\n    /*addOptionParamRequeteAPI(\n      this.optionRequeteAPI,\n      'fileData',\n      JSON.stringify(downloadParams)\n    );*/\n\n    console.log(\n      '******* CRUD-SERVICE -- downloadFileFromServer -- myOptionQuery **************************'\n    );\n    console.log(myOptionQuery);\n\n    if (myUrl) {\n      return this.httpClient.get(myUrl, myOptionQuery);\n    } else {\n      return of(null);\n    }\n\n    /*if (myUrl) {\n      return this.httpClient.get<Blob>(myUrl, this.optionRequeteAPI)\n    } else {\n      return of(null);\n    }*/\n  }\n\n  //------------------------\n  protected getOptionRequeteDownload() {\n    return {\n      headers: new HttpHeaders({\n        Authorization: createBasicAuthToken(\n          this.getApi_authorization_username(),\n          this.getApi_authorization_password()\n        ),\n      }),\n    };\n  }\n\n}\n\n//-------------------------------------------------------------------------------\n//---------------- STRUCTURE DE DONNÉES DE CRUDDATASERVICE_LISTVIEW -------------\nexport class CrudDataService_ListView<TDataList> extends CrudDataService<\n  TDataList,\n  any,\n  any,\n  any,\n  any\n> {\n  titreViewDataList!: string;\n  cols_Datatable!: Array<TColumnDataTableDef>;\n  exportColumns?: any[];\n  globalFiltersColumns?: string[];\n  //filtres: ORofAndFilters = [];\n  //staticFiltres: ORofAndFilters = [];\n  urlNavigatePageCreateOrEdit?: string;\n  urlNavigatePageImport?: string;\n  nbRowsAuto!: boolean;\n  nbRowsDataTableByPage!: number;\n  selectNbRowsDataTableByPage_template!: string;\n  selectedData?: TDataList;\n  navigateToEdit_Subject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  navigateToCreate_Subject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  navigateToImport_Subject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n  //getHttpDataResponseApi_ListView!: Observable<HttpResponse<TDataList>>;\n\n  constructor(\n    myHttpClient: HttpClient,\n    myDataKeyField: string,\n    myColsDatatable?: Array<TColumnDataTableDef>,\n    myTitreView?: string,\n    myNbRowsAuto?: boolean,\n    myNbRowsDataTableByPage?: number,\n    mySelectNbRowsDataTableByPage_template?: string\n  ) {\n    super(myHttpClient, myDataKeyField, TypeCrudView.LIST);\n    this.cols_Datatable = myColsDatatable ? myColsDatatable : [];\n    this.titreViewDataList = myTitreView ? myTitreView : 'List Data';\n    this.nbRowsAuto = myNbRowsAuto ? myNbRowsAuto : false;\n    this.nbRowsDataTableByPage = myNbRowsDataTableByPage\n      ? myNbRowsDataTableByPage\n      : 15;\n    this.selectNbRowsDataTableByPage_template =\n      mySelectNbRowsDataTableByPage_template\n        ? mySelectNbRowsDataTableByPage_template\n        : '10,15,20,25,30,35,40,50';\n  }\n\n  myInit_ListView = (): void => { };\n  onPrepare_ListView = (responseResolveData: any): void => { };\n  setStaticParameters_ListView = (): void => { };\n  getIDValue = (data: TDataList): any => {\n    return undefined;\n  };\n}\n//-------------------------------------------------------------------------\n//-------------------------------------------------------------------------\n//----------------------------------------------------------------------------\n/** Read the custom property of body section with given name: **/\nexport function readProperty(name: string): string {\n  let bodyStyles = window.getComputedStyle(document.body);\n  return bodyStyles.getPropertyValue('--' + name);\n}\n\n//----------------------------------------------------------------------------------------\n//-------------- STRUCTURE DE DONNÉES POUR LE CRUDDATASERVICE_EDITVIEW -------------------\nexport interface WrapperEditData<TDataCreateOrEdit> {\n  data?: Observable<TDataCreateOrEdit>;\n  typeEditView: TypeCrudView;\n  othersData?: Observable<any>;\n}\n\nexport interface TBlobField {\n  nameField: string;\n  optionsFile: TOptionFileUploadDownload;\n  file: Blob;\n}\n\nfunction escapeDoubleQuotes(str:string) {\n    return str.replace(/\"/g, '\\\\\"');\n}\n\nexport type TListeBlobField = Array<TBlobField>;\n\n/**\n *\n */\nexport class CrudDataService_CreateOrEditView<\n  TDataCreate,\n  TDataEdit,\n  TDataList\n> extends CrudDataService<TDataList, TDataCreate, TDataEdit, any, any> {\n  titreCreateOrEditView!: string;\n  urlNavigatePageListView!: string;\n  formEdit!: TFormEdit<TDataCreate, TDataEdit>;\n  navigateToList_Subject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n  newDataCreate: () => TDataCreate = () => {\n    return {} as TDataCreate;\n  };\n  //validateDataToSave : (()=> boolean) = ()=>{return true;};\n\n  constructor(\n    myHttpClient: HttpClient,\n    myDataKeyField: string,\n    mytypeview: TypeCrudView.CREATE | TypeCrudView.EDIT,\n    myTitreView?: string,\n    myUrlNavigateListView?: string\n  ) {\n    super(myHttpClient, myDataKeyField, mytypeview);\n    this.titreCreateOrEditView = myTitreView\n      ? myTitreView\n      : this.isCreateView()\n        ? 'CREATE DATA VIEW'\n        : 'EDIT DATA VIEW';\n    this.urlNavigatePageListView = myUrlNavigateListView\n      ? myUrlNavigateListView\n      : '';\n    if (this.formEdit == undefined) {\n      this.formEdit = new TFormEdit();\n    }\n  }\n\n  isCreateView(): boolean {\n    return this.typeView === TypeCrudView.CREATE;\n  }\n\n  isEditView(): boolean {\n    return this.typeView === TypeCrudView.EDIT;\n  }\n\n  \n  saveNew(newData: TDataCreate, uploadfiles?: Blob[], optionsUploadfiles?: TOptionFileUploadDownload[]): Observable<ReponseAPI<TDataList>> {\n    console.log(\"****** GENERIC CRUD EDIT - MODEL SAVENEW *******\")\n    console.log(newData);\n    console.log(optionsUploadfiles);\n    console.log(uploadfiles);\n    this.resetHttpHeadersRequeteAPI();\n    this.resetHttpParamsRequeteAPI();\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Origin', '*');\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Headers', 'Authorization, Origin, Content-Type, X-CSRF-Token');\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, 'Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');\n    //this.optionRequeteAPI.withCredentials = true;\n\n    //addOptionHeaderRequeteAPI_ACCEPT_JSON(this.optionRequeteAPI);\n    //addOptionHeaderRequeteAPI_ContentType_MULTIPART(this.optionRequeteAPI);\n    //addOptionHeaderRequeteAPI(this.optionRequeteAPI, \"Content-Type\", \"multipart/form-data; boundary=----WebKitFormBoundarySGC46902\");\n    //addOptionHeaderRequeteAPI_ContentType_JSON(this.optionRequeteAPI);\n\n    //addOptionParamRequeteAPI(this.optionRequeteAPI, \"model\", JSON.stringify(this.updateDataCreateBeforeSave(newData)));\n    let formData: FormData = new FormData();\n    formData.append(\"model\", JSON.stringify(this.updateDataCreateBeforeSave(newData)));\n    formData.append(\"clientParams\", JSON.stringify(this.getApi_clientParams()));\n\n\n    if (uploadfiles && uploadfiles.length > 0 && optionsUploadfiles && optionsUploadfiles.length > 0 && uploadfiles.length == optionsUploadfiles.length) {\n      let strOptionsUploadFiles:string=optionsUploadfiles.map(elt=>JSON.stringify(elt)).join(',');\n      formData.append(\"optionsUploadfiles\", strOptionsUploadFiles);\n\n      for (let i = 0; i < uploadfiles.length; i++) {\n        formData.append(\"uploadfiles\", uploadfiles[i]);\n        //addOptionParamRequeteAPI(this.optionRequeteAPI, \"uploadfiles\", uploadfiles[i]);\n        //formData.append(\"optionsUploadfiles\", JSON.stringify(optionsUploadfiles[i]));\n        //formData.append(\"optionsUploadfiles\", JSON.stringify(JSON.stringify(optionsUploadfiles[i]))) ;\n        //formData.append(\"optionsUploadfiles\", JSON.stringify(optionsUploadfiles[i]));\n        //addOptionParamRequeteAPI(this.optionRequeteAPI, \"optionsUploadfiles\", JSON.stringify(optionsUploadfiles[i]));\n      }      \n    }\n\n    //console.log(Array.from(formData));\n\n    const myOptionQuery = { ...this.optionRequeteAPI };\n    //const myOptionQuery = { ...this.optionRequeteAPI, 'Content-Type': 'multipart/form-data', params: myParams };\n    console.log(myOptionQuery);\n\n    const myUrl: string | undefined = this.getCompleteUrlEntity_editOrCreate();\n    if (myUrl) {\n      return this.httpClient.post<ReponseAPI<TDataList>>(\n        myUrl,\n        formData,\n        myOptionQuery\n      );\n    } else {\n      return of({\n        data: null,\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<TDataList>);\n    }\n  }\n\n  save(editData: TDataEdit): Observable<ReponseAPI<TDataList>> {\n    this.resetHttpHeadersRequeteAPI();\n    addOptionHeaderRequeteAPI_JSON(this.optionRequeteAPI);\n    this.resetHttpParamsRequeteAPI();\n\n    const myOptionQuery = { ...this.optionRequeteAPI };\n    const myUrl: string | undefined = this.getCompleteUrlEntity_editOrCreate();\n    if (myUrl) {\n      return this.httpClient.patch<ReponseAPI<TDataList>>(\n        myUrl,\n        this.updateDataEditBeforeSave(editData),\n        myOptionQuery\n      );\n    } else {\n      return of({\n        data: null,\n        reponseOK: false,\n        message: 'URL Error : {' + myUrl + '}',\n      } as ReponseAPI<TDataList>);\n    }\n  }\n\n  initFieldsValuesFromApiDataEdit = (apidata?: TDataEdit) => { };\n  initFieldsValuesFromApiDataCreate = (apidata?: TDataCreate) => { };\n  initApiDataFromFieldsValuesEdit = (apidata?: TDataEdit, listeBlobFields?: TListeBlobField) => { };\n  initApiDataFromFieldsValuesCreate = (apidata?: TDataCreate, listeBlobFields?: TListeBlobField) => { };\n\n  //-------------------\n  convertDataListToCreate: (datalistElt: TDataList) => TDataCreate = (\n    datalistElt: TDataList\n  ) => {\n    return { datalistElt } as TDataCreate;\n  };\n  convertDataListToEdit: (datalistElt: TDataList) => TDataEdit = (\n    datalistElt: TDataList\n  ) => {\n    return { datalistElt } as TDataEdit;\n  };\n  onPrepareEdit = (): void => { };\n  onPrepareCreate = (): void => { };\n\n  updateDataCreateBeforeSave(data: TDataCreate): any {\n    return data;\n  }\n  updateDataEditBeforeSave(data: TDataEdit): any {\n    return data;\n  }\n\n  validateDataToSaveCreate = (): boolean => {\n    return true;\n  };\n  validateDataToSaveEdit = (): boolean => {\n    return true;\n  };\n\n  afterSaveCreate = (): void => {\n    //this.crudFiltreRecherhe.validateChangeFiltre(undefined);\n  };\n  afterSaveEdit = (): void => {\n    //this.crudFiltreRecherhe.validateChangeFiltre(undefined);\n  };\n\n  getListeFileUploadFieldsFromData(): Array<TFieldFormEditData> {\n    return this.listeAllFieldsFormEdit.filter(elt => typeDataIs_FILEINPUT(elt));\n  }\n}\n","/*\n * Public API Surface of sgc-share-lib\n */\n\n//export * from './lib/sgc-share-lib.service';\n//export * from './lib/sgc-share-lib.component';\n//export * from './lib/sgc-share-lib.module';\nexport * from './lib/service/notification.service';\nexport * from './lib/service/filtre-recherche-service';\nexport * from './lib/biblio/sgc-biblio';\nexport * from './lib/model/sgc-basic-model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}