{"version":3,"file":"totvs-gps-services.mjs","sources":["../../../projects/totvs-gps-services/src/lib/totvs-gps-services.model.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-services.service.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-interceptor.service.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-permission.service.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-services.module.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-services.utils.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-services.component.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-mock-request.component.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-zoom.model.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-zoom.service.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-cache.service.ts","../../../projects/totvs-gps-services/src/lib/totvs-gps-smart-view.service.ts","../../../projects/totvs-gps-services/src/public_api.ts","../../../projects/totvs-gps-services/src/totvs-gps-services.ts"],"sourcesContent":["import { Observable } from \"rxjs\";\r\n\r\n/**\r\n * Objeto interno para instanciar a classe determinada\r\n */\r\nexport class TotvsGpsObjectModel<T> {\r\n  public type;\r\n  constructor(type: (new () => T))  { this.type = type;  }\r\n  public createInstance(): T { return new this.type(); }\r\n}\r\n\r\n/**\r\n * Interface para identificar a implementação do método de conversão de JSON para a classe específica\r\n */\r\nexport interface ITotvsGpsJsonParse<T> {\r\n  parseJsonToObject(data:any): T;\r\n}\r\n\r\n/**\r\n * Dados para requisições HTTP\r\n */\r\nexport interface IServiceRequest {\r\n  get(url:string, options?:Object): Observable<Object>;\r\n  post(url:string, data:Object, options?:Object): Observable<Object>;\r\n  put(url:string, data:Object, options?:Object): Observable<Object>;\r\n  delete(url:string, options?:Object): Observable<Object>;\r\n}\r\n\r\nexport enum HTTPMethod {\r\n  GET = 'GET',\r\n  POST = 'POST',\r\n  PUT = 'PUT',\r\n  DELETE = 'DELETE'\r\n}\r\n\r\n/**\r\n * Interface para identificar a implementação da coleção de dados padrão T-Talk\r\n */\r\nexport interface TTalkCollection<T> {\r\n  hasNext: boolean;\r\n  items: Array<T>;\r\n}\r\n\r\nexport enum OrderSort {\r\n  ASCENDING = 'asc',\r\n  DESCENDING = 'desc'\r\n}\r\nexport class OrderField {\r\n  fieldName: string;\r\n  order: OrderSort;\r\n\r\n  public static create(fieldName: string, order?: OrderSort): OrderField {\r\n    let result: OrderField = new OrderField();\r\n    result.fieldName = fieldName;\r\n    result.order = (order ? order : OrderSort.ASCENDING);\r\n    return result;\r\n  }\r\n}\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { TotvsGpsMockRequest } from './totvs-gps-mock-request.component';\r\nimport { isNull } from 'totvs-gps-utils';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TotvsGpsDataService {\r\n\r\n  private _httpClient: HttpClient;\r\n  private _mockRequests: { url:string, request:TotvsGpsMockRequest }[] = [];\r\n  private _mockInProductionMode: boolean = false;\r\n\r\n  HttpClient:HttpClient;\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n    this._httpClient = this.httpClient;\r\n    this.HttpClient = this._httpClient;\r\n  }  \r\n\r\n  public enableMockInProductionMode() {\r\n    this._mockInProductionMode = true;\r\n  }\r\n\r\n  public clearMockRequests() {\r\n    this._mockRequests = [];\r\n  }\r\n\r\n  public addMockRequest(url:string,mockRequest:TotvsGpsMockRequest) {\r\n    this._mockRequests.push({ url: url, request: mockRequest });\r\n  }\r\n\r\n  public getMockRequest(url:string): TotvsGpsMockRequest {\r\n    if (isDevMode() || this._mockInProductionMode) {\r\n      let result = this._mockRequests.find(r => url.startsWith(r.url));\r\n      if (!isNull(result))\r\n      return result.request;\r\n    }\r\n    return;\r\n  }\r\n  \r\n}\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { isNull } from 'totvs-gps-utils';\r\n\r\n@Injectable()\r\nexport class TotvsGpsInterceptorService implements HttpInterceptor {\r\n\r\n  /**\r\n   * URL base para chamadas de API\r\n   */\r\n  static URL_TTALK: string = '/dts/datasul-rest/resources/prg/';\r\n  /**\r\n   * URL base para fachadas (métodos antigos)\r\n   */\r\n  static URL_FACADE: string = '/dts/datasul-rest/resources/api/fch/fchsau/thf/';\r\n  /**\r\n   * Verificar se expirou a sessão e recarrega a página (window.location.reload) caso necessário\r\n   */\r\n  static JOSSO_SESSION_RELOAD: boolean = false;\r\n  /**\r\n   * Desabilita tratamento automatico da URL para produto TOTVS\r\n   */\r\n  static DISABLE_URL_PATTERN: boolean = false;\r\n  /**\r\n   * URL para servidor de mock de dados\r\n   * @example 'http://localhost:8080'\r\n   */\r\n  static MOCK_SERVER: string = '';\r\n  /**\r\n   * URL do contexto padrao datasul\r\n   */\r\n  private readonly URL_DATASUL = '/dts';\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\r\n    let ttalkRegexp: RegExp = new RegExp(/^[\\w\\d]+\\/v[\\d\\.]+\\//i);\r\n    let ttalkRelativePath: string = '';\r\n\r\n    let newRequest: HttpRequest<any>;\r\n    // Trata requisições de endereço completo\r\n    if (request.url.startsWith('http') || request.url.startsWith(this.URL_DATASUL) || TotvsGpsInterceptorService.DISABLE_URL_PATTERN) {\r\n      newRequest = request.clone({ url: request.url });\r\n    }\r\n    else {\r\n      // remove a barra a esquerda, se tiver, para padronizar a requisição\r\n      let _url = request.url;\r\n      if (_url.startsWith('/'))\r\n        _url = _url.substring(1);\r\n      // Trata requisição de api t-talk\r\n      if (ttalkRegexp.test(_url)) {\r\n        ttalkRelativePath = _url;\r\n        newRequest = request.clone({ url: TotvsGpsInterceptorService.URL_TTALK + ttalkRelativePath });\r\n      }\r\n      // Trata requisições de fachadas (antigas)\r\n      else {\r\n        newRequest = request.clone({ \r\n          url: TotvsGpsInterceptorService.URL_FACADE + _url, \r\n          headers: request.headers.set('ReturnFormatVersion', '2') \r\n        });\r\n      }\r\n    }\r\n\r\n    if (!TotvsGpsInterceptorService.JOSSO_SESSION_RELOAD)\r\n      return next.handle(newRequest).pipe(\r\n        catchError(error => {\r\n          // tratamento para redirecionar para servidor de mock\r\n          if (error instanceof HttpErrorResponse) {\r\n            if ((ttalkRelativePath!='')&&(this.shouldRedirecToMockServer(error))) {\r\n              let _server = TotvsGpsInterceptorService.MOCK_SERVER;\r\n              if (!_server.endsWith('/'))\r\n                _server += '/';\r\n              newRequest = request.clone({ url: _server + ttalkRelativePath });\r\n              return next.handle(newRequest);\r\n            }\r\n          }\r\n          throw error;\r\n        })\r\n      );\r\n    else {\r\n      return next.handle(newRequest).pipe(\r\n        catchError(error => {\r\n          // trata retorno do timeout de sessao do JOSSO\r\n          if (error instanceof HttpErrorResponse) {\r\n            if (error.status == 200) {\r\n              if (error.url.indexOf('josso_security_check') > 0) {\r\n                window.location.reload();\r\n              }\r\n            }\r\n          }\r\n          throw error;\r\n        })\r\n      );\r\n    }\r\n  }\r\n\r\n  private shouldRedirecToMockServer(error: HttpErrorResponse) {\r\n    if (isDevMode()&&!isNull(TotvsGpsInterceptorService.MOCK_SERVER)&&(TotvsGpsInterceptorService.MOCK_SERVER!='')) {\r\n      if ((error.status >= 400)&&(JSON.stringify(error).indexOf('not found')>0)) {\r\n        // 500 - {\"message\":\"Internal server error\",\"detailedMessage\":\"ERROR condition: ** \\\"hvp/api/v1/XYZ\\\" was not found. (293) (7211)\",\"code\":\"INTERNAL_SERVER_ERROR\"}\r\n        // 400 - {\"code\":\"BAD_REQUEST\", \"message\":\"Bad request\", \"detailedMessage\":\"Method not found\"}\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Resolve, ActivatedRouteSnapshot, Router } from \"@angular/router\";\r\nimport { TotvsGpsServices } from \"./totvs-gps-services.component\";\r\n\r\nexport enum PermissionServiceOption {\r\n  EDIT = \"edit\",\r\n  MASSUPDATE = \"massUpdate\",\r\n}\r\n\r\nconst createLoadBox = (message: string) => {\r\n  const loadBox = document.createElement(\"div\");\r\n  loadBox.innerHTML = `\r\n   <div class=\"po-overlay-fixed\">\r\n  <po-loading class=\"po-loading-overlay-content\" ng-reflect-text=\"${message}\"\r\n    ><div class=\"po-loading\">\r\n      <po-loading-icon\r\n        ><div class=\"po-loading-icon\">\r\n          <span class=\"po-loading-icon-bar po-loading-icon-bar-1\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-2\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-3\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-4\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-5\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-6\"></span\r\n          ><span class=\"po-loading-icon-bar po-loading-icon-bar-7\"></span\r\n          ><span\r\n            class=\"po-loading-icon-bar po-loading-icon-bar-8\"\r\n          ></span></div></po-loading-icon\r\n      ><span class=\"po-loading-label po-text-ellipsis\">${message}</span>\r\n    </div></po-loading\r\n  >\r\n</div>\r\n`;\r\n  return loadBox;\r\n};\r\n\r\nconst showLoadBox = (message: string) => {\r\n  const loadBox = createLoadBox(message);\r\n  document.body.appendChild(loadBox);\r\n  return loadBox;\r\n}\r\n\r\nconst removeLoadBox = (loadBox: HTMLElement) => {\r\n  loadBox.remove();\r\n}\r\n\r\nconst PermisionKeys = Object.keys(PermissionServiceOption);\r\n\r\ntype PermissionValues = Partial<Record<PermissionServiceOption, boolean>>;\r\n\r\nexport interface IPermissionService {\r\n  permissions: { [key in PermissionServiceOption]?: boolean };\r\n  hasPermission(permission: PermissionServiceOption): boolean;\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class PermissionService {\r\n  private readonly userPermissionsUrl = \"hgp/v1/userPermissions/\";\r\n  private readonly getProgamPermissionUrl =\r\n    this.userPermissionsUrl + \"{{programName}}\";\r\n\r\n  public permissionByApp = new Map<string, PermissionValues>();\r\n\r\n  async loadPermissions(app: string) {\r\n    if (this.permissionByApp.has(app)) {\r\n      return this.permissionByApp.get(app);\r\n    }\r\n    let promises = [];\r\n    let permissions: PermissionValues =  PermisionKeys.reduce((acc, key) => {\r\n      acc[PermissionServiceOption[key]] = false;\r\n      return acc;\r\n    }, {});\r\n    this.permissionByApp.set(app, permissions);\r\n    for (const permission of PermisionKeys) {\r\n      let promise = TotvsGpsServices.getInstance<Object>(\r\n        Object,\r\n        this.getProgamPermissionUrl\r\n      )\r\n        .setPathParams({ programName: app + \".\" + PermissionServiceOption[permission] })\r\n        .get()\r\n        .then((result) => {\r\n          permissions[PermissionServiceOption[permission]] = result[\"programPermission\"] === true;\r\n        });\r\n      promises.push(promise);\r\n    }\r\n    await Promise.all(promises);\r\n    this.permissionByApp.set(app, permissions);\r\n    return permissions;\r\n  }\r\n\r\n  hasPermission(app: string, action: PermissionServiceOption): boolean {\r\n    if (this.permissionByApp.has(app)) {\r\n      return this.permissionByApp.get(app)[action];\r\n    }\r\n    return false;\r\n  }\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class PermissionResolver implements Resolve<any> {\r\n  constructor(\r\n    private permissionService: PermissionService,\r\n    private router: Router\r\n  ) {}\r\n\r\n  async resolve(route: ActivatedRouteSnapshot) {\r\n    const app = route.data[\"app\"];\r\n    const requiredPermission = route.data[\r\n      \"requiredPermission\"\r\n    ] as PermissionServiceOption;\r\n    \r\n    const box = showLoadBox(\"Carregando...\");\r\n    await this.permissionService.loadPermissions(app);\r\n    removeLoadBox(box);\r\n\r\n    if (\r\n      requiredPermission &&\r\n      !this.permissionService.hasPermission(app, requiredPermission)\r\n    ) {\r\n      this.router.navigate([\"\"]);\r\n      return null;\r\n    }\r\n\r\n    return this.permissionService.permissionByApp.get(app);\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { TotvsGpsDataService } from './totvs-gps-services.service';\r\nimport { TotvsGpsInterceptorService } from './totvs-gps-interceptor.service';\r\nimport { PermissionResolver, PermissionService } from './totvs-gps-permission.service';\r\n\r\nexport let GPS_SERVICES: TotvsGpsDataService;\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    HttpClientModule\r\n  ],\r\n  providers: [\r\n    TotvsGpsDataService,\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: TotvsGpsInterceptorService,\r\n      multi: true\r\n    },\r\n    PermissionService,\r\n    PermissionResolver\r\n  ]\r\n})\r\nexport class TotvsGpsServicesModule { \r\n\r\n  GpsServices:TotvsGpsDataService;\r\n\r\n  constructor(private gpsServices: TotvsGpsDataService) {\r\n    GPS_SERVICES = this.gpsServices;\r\n    this.GpsServices = GPS_SERVICES;\r\n  }  \r\n\r\n}\r\n","import 'reflect-metadata';\r\nimport { TotvsMaskString } from \"totvs-gps-utils\";\r\nimport { isNull, isBoolean } from \"totvs-gps-utils\";\r\nimport { IZoomColumn, GenericZoomEntity } from \"./totvs-gps-zoom.model\";\r\n\r\nexport const PROGRESS_FIELD = \"ProgressField\";\r\nexport const LOOKUP_COLUMN = \"LookUpColumn\";\r\nexport const PROGRESS_ID = \"ProgressId\";\r\nexport const LOOKUP_FIELD_VALUE = \"LookUpFieldValue\";\r\nexport const LOOKUP_FIELD_LABEL = \"LookUpFieldLabel\";\r\n\r\nexport function encodeURLParam(data: any): string {\r\n    if (!isNull(data)) {\r\n        if (data instanceof Boolean || isBoolean(data)) {\r\n            return data.toString();\r\n        }\r\n        if (data instanceof Date) {\r\n            return [\r\n                TotvsMaskString.getInstance('0000', {reverse:true}).apply(data.getFullYear().toString()),\r\n                TotvsMaskString.getInstance('00', {reverse:true}).apply((data.getMonth()+1).toString()),\r\n                TotvsMaskString.getInstance('00', {reverse:true}).apply(data.getDate().toString())\r\n            ].join('-');\r\n        }\r\n        return encodeURIComponent(data);\r\n    }\r\n    return '';\r\n}\r\n\r\nexport function generateKeyPath(obj:any): string {\r\n    if ((!isNull(obj))&&(Array.isArray(obj.primaryKeys))) {\r\n        let values: string[] = [];\r\n        obj.primaryKeys.forEach(key => { values.push('{{' + key + '}}') });\r\n        return [...values,''].join('/');\r\n    }\r\n    return '';\r\n}\r\n\r\nexport function getObjectFieldLabel<T>(instance:T):string{\r\n    let returnValue:string = \"\";\r\n\r\n    Object.keys(instance).forEach((key) => {\r\n        let value = getLookUpFieldLabel(instance,key);\r\n        if(!isNull(value)\r\n        && value == true){\r\n            let a2 = getProgressFieldValue(instance,key).toString();\r\n            returnValue = a2;\r\n        }\r\n    });\r\n\r\n    return returnValue.toString();\r\n}\r\n\r\nexport function getObjectFieldValue<T>(instance:T): string {\r\n    let returnValue:string = \"\";\r\n\r\n    Object.keys(instance).forEach((key) => {\r\n        let value = getLookUpFieldValue(instance,key);\r\n        if((!isNull(value))&&(value == true))\r\n            returnValue = getProgressFieldValue(instance,key).toString();\r\n    });\r\n\r\n    return returnValue;\r\n}\r\n\r\nexport function getLookupColumns<T>(instance:T): IZoomColumn[] {\r\n    let columnList: IZoomColumn[] = [];\r\n    \r\n    Object.keys(instance).forEach((key) => {\r\n        let columnName = getProgressFieldValue(instance,key);\r\n        let labelValue = getLookUpColumnValue(instance,key);\r\n        if ((!isNull(columnName))&&(!isNull(labelValue)))\r\n            columnList.push(<IZoomColumn> { property: columnName, label: labelValue});\r\n    });\r\n\r\n    return columnList;\r\n}\r\n\r\nexport function getFieldsList<T>(instance:T): string[] {\r\n    let fieldsList:string[] = [];\r\n    \r\n    Object.keys(instance).forEach((key) => {\r\n        let field = getProgressFieldValue(instance,key);\r\n        if(!isNull(field))\r\n            fieldsList.push(field);\r\n    });\r\n\r\n    return fieldsList;\r\n}\r\n\r\nexport function getODataFilter<T>(instance:T,filter:string,genericZoomEntity:GenericZoomEntity): object {\r\n\r\n    let oDataFilter:String = '';\r\n    let oDataViewFilter:String = '';\r\n    let searchAggregator:string = '';\r\n    let viewSearchAggregator:string = '';\r\n\r\n    for (let index = 0; index <  Object.keys(instance).length; index++) {\r\n\r\n        let key = Object.keys(instance)[index];\r\n\r\n        let propertyKey = getProgressFieldValue(instance,key);\r\n        let isColumn    = getLookUpColumnValue(instance,key);\r\n\r\n        if((isNull(isColumn) || !isColumn) \r\n        && !isNull(genericZoomEntity.columnDefinition))\r\n            isColumn = hasColumnField(propertyKey,genericZoomEntity);\r\n        \r\n        if((!isNull(isColumn) && isColumn)\r\n        && !isNull(propertyKey)\r\n        && !isNull(instance[key])\r\n        && isValidValue(filter)\r\n        && !isValidValue(instance[key])\r\n        && canAssignValue(filter,instance[key])){\r\n\r\n            oDataViewFilter = oDataViewFilter.concat(viewSearchAggregator.toString()).concat(propertyKey);\r\n\r\n            oDataViewFilter = addValueToODataFilter(oDataViewFilter,genericZoomEntity[key],filter);\r\n            \r\n            searchAggregator = \" and \";\r\n            viewSearchAggregator = \" or \";\r\n        }\r\n\r\n        //apenas cria filtros para valores validos\r\n        if(!isNull(instance[key])         \r\n        && !isNull(propertyKey)\r\n        && isValidValue(instance[key])){\r\n            oDataFilter = oDataFilter.concat(searchAggregator.toString()); // + propertyKey + ' eq ' + instance[key];\r\n\r\n            oDataFilter = oDataFilter.concat(propertyKey);\r\n\r\n            oDataFilter = addValueToODataFilter(oDataFilter,genericZoomEntity[key],instance[key]);\r\n\r\n            searchAggregator = \" and \";\r\n        }\r\n        \r\n       oDataViewFilter.concat(oDataViewFilter.toString());\r\n    }\r\n\r\n    if(oDataFilter.length > 0\r\n    || oDataViewFilter.length > 0){\r\n        if(oDataViewFilter.length > 0){\r\n            if(oDataFilter.length > 0 )\r\n                oDataFilter = oDataFilter.concat(\" and ( \" + oDataViewFilter.toString() + \" ) \");\r\n            else  oDataFilter = oDataFilter.concat(oDataViewFilter.toString());\r\n        }\r\n    }\r\n\r\n    return {\"$filter\": oDataFilter.toString()};\r\n}\r\n\r\nexport function addValueToODataFilter(oDataFilter:String,object,value):String{\r\n\r\n    if(object instanceof String\r\n    || typeof object === \"string\"\r\n    || object instanceof Date){\r\n        oDataFilter = oDataFilter + ' bg ' + \"'\" + value + \"'\";\r\n    }else{ \r\n        oDataFilter = oDataFilter + ' eq ' + value;\r\n    }\r\n\r\n    return oDataFilter;\r\n}\r\n\r\nfunction getProgressFieldValue<T>(instance: T, propertyKey: string) {\r\n    let result = Reflect.getMetadata(PROGRESS_FIELD,instance, propertyKey)\r\n    return result;  \r\n}\r\n\r\nfunction getLookUpColumnValue<T>(instance: T, propertyKey: string) {\r\n    let result = Reflect.getMetadata(LOOKUP_COLUMN,instance, propertyKey)\r\n    return result;  \r\n}\r\n\r\nfunction getLookUpFieldValue<T>(instance: T, propertyKey: string) {\r\n    let result = !!Reflect.getMetadata(LOOKUP_FIELD_VALUE,instance, propertyKey)\r\n    return result;  \r\n}\r\n\r\nfunction getLookUpFieldLabel<T>(instance: T, propertyKey: string) {\r\n    let result = !!Reflect.getMetadata(LOOKUP_FIELD_LABEL,instance, propertyKey)\r\n    return result;  \r\n}\r\n\r\nfunction hasColumnField(propertyKey: string,genericZoomEntity:GenericZoomEntity): boolean {\r\n    for (let index = 0; index < genericZoomEntity.columnDefinition.length; index++) {\r\n        let element:IZoomColumn = genericZoomEntity.columnDefinition[index];\r\n        if(element.property == propertyKey)\r\n            return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nexport function isValidValue(object): boolean{\r\n    if(isNull(object))\r\n        return false;\r\n\r\n    if (((object instanceof String)||(typeof object === \"string\")) && (object !== \"\"))\r\n        return true;\r\n\r\n    if(object instanceof Date)\r\n        return true;\r\n\r\n    if((object instanceof Number || typeof object === \"number\") && (object !== 0))\r\n        return true;\r\n\r\n    return false;\r\n}\r\n\r\nfunction canAssignValue(value,property): boolean{\r\n\r\n    let onlyNumbers:boolean = false;\r\n\r\n    if(isNull(value))\r\n        return false;\r\n   \r\n    if(!isNaN(Number(value))){\r\n        onlyNumbers = true;\r\n    }\r\n\r\n    if((property instanceof String)||(typeof property === \"string\"))\r\n        return true;\r\n\r\n    if(((property instanceof Number)||(typeof property === \"number\"))&&(onlyNumbers))\r\n        return true;\r\n\r\n    return false;\r\n}","import { GPS_SERVICES } from \"./totvs-gps-services.module\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { take } from \"rxjs/operators\";\r\nimport { TotvsGpsObjectModel, ITotvsGpsJsonParse, TTalkCollection, OrderField, OrderSort, IServiceRequest, HTTPMethod } from \"./totvs-gps-services.model\";\r\nimport { encodeURLParam } from \"./totvs-gps-services.utils\";\r\nimport { isNull } from \"totvs-gps-utils\";\r\n\r\n/**\r\n * @description\r\n * Classe de serviços para o produto GPS\r\n * \r\n * ### Exemplos de uso\r\n * \r\n * #### Fazendo um GET para uma pesquisa\r\n * \r\n * ```\r\n * TotvsGpsServices\r\n *     .getInstance<MyObject[]>(MyObject, '/xyz/v1/myApi/')\r\n *     .setQueryParams(searchObject)\r\n *     .setPage(pageNumber).setPageSize(pageSize).setFields(fields).setExpand(expand)\r\n *     .get()\r\n *     .then(result => setDataToMyList(result))\r\n *     .catch(error => showErrors(error));\r\n * ``` \r\n * \r\n * #### Fazendo um PUT com dados do objeto na URL\r\n * ```\r\n * TotvsGpsServices\r\n *     .getInstance<MyObject>(MyObject, '/xyz/v1/myApi/{{id}}')\r\n *     .setPathParams(myInstance)\r\n *     .put(myInstance)\r\n *     .then(result => showSuccessMessage(result))\r\n *     .catch(error => showErrors(error));\r\n * ``` \r\n */\r\nexport class TotvsGpsServices<T> {\r\n\r\n    // Tipo de dado que será usado para o construtor do resultado\r\n    private _type;\r\n    // Parametros adicionais\r\n    private _url: string;\r\n    private _http: HttpClient;\r\n    private _queryParams: any;\r\n    private _pathParams: any;\r\n    // Parametros padrão T-Talk\r\n    private _page: number;\r\n    private _pageSize: number;\r\n    private _fields: string[];\r\n    private _expand: string[];\r\n    private _order: OrderField[];\r\n\r\n    /**\r\n     * Retorna uma nova instância já parametrizada\r\n     * @param type Tipo (Classe) de dados\r\n     * @param url URL da API, que será utilizada ao invocar os métodos HTTP\r\n     * \r\n     * @example\r\n     * ```\r\n     * let service = TotvsGpsServices.getInstance<MyObject>(MyObject, '/module/v1/myApi');\r\n     * ```\r\n     */\r\n    public static getInstance<T>(type: any, url?: string): TotvsGpsServices<T> {\r\n        let instance = new TotvsGpsServices<T>(type, GPS_SERVICES.HttpClient).setURL(url);\r\n        return instance;\r\n    }\r\n\r\n    //#region Métodos construtores\r\n    /**\r\n     * Construtor. Recomenda-se utilizar o método getInstance() para instanciar a classe.\r\n     * @param type Tipo (Classe) de dados\r\n     * @param httpClient Instância HttpClient para invocar métodos HTTP\r\n     */\r\n    constructor(private type: {new():T}, private httpClient: HttpClient) {\r\n        this._type = type;\r\n        this._http = httpClient;\r\n    }\r\n\r\n    /**\r\n     * Atribui a instância do HttpClient para a classe.\r\n     * + Recomenda-se utilizar o método getInstance() que já possui o HttpClient injetado\r\n     * @param httpClient Instância HttpClient para invocar métodos HTTP\r\n     */\r\n    public setHttpClient(httpClient: HttpClient): TotvsGpsServices<T> {\r\n        this._http = httpClient;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui a URL para ser utilizada ao invocar os métodos HTTP.\r\n     * @param url URL da API, que será utilizada ao invocar os métodos HTTP\r\n     */\r\n    public setURL(url: string): TotvsGpsServices<T> {\r\n        this._url = url;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui o número da página a ser requisitada em um GET de coleção de dados\r\n     * @param page Número da página a ser requisitada\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setPage(3)\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?page=3'\r\n     */\r\n    public setPage(page?: number): TotvsGpsServices<T> {\r\n        this._page = page;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui o tamanho da página a ser requisitada em um GET de coleção de dados\r\n     * @param pageSize Tamanho da página a ser requisitada\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setPageSize(20)\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?pageSize=20'\r\n     */\r\n    public setPageSize(pageSize?: number): TotvsGpsServices<T> {\r\n        this._pageSize = pageSize;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui a lista de campos que serão requisitadas em um GET\r\n     * @param fields Lista de campos\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setFields(['fieldOne','fieldTwo'])\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?fields=fieldOne,fieldTwo'\r\n     */\r\n    public setFields(fields?: string[]): TotvsGpsServices<T> {\r\n        this._fields = fields;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui a lista de campos que serão expandidos em um GET\r\n     * @param expand Lista de campos\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setExpand(['fieldOne','fieldTwo'])\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?expand=fieldOne,fieldTwo'\r\n     */\r\n    public setExpand(expand?: string[]): TotvsGpsServices<T> {\r\n        this._expand = expand;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui a lista de campos para ordenação em um GET\r\n     * @param order Lista de campos\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setOrder([OrderField.create('fieldOne'),OrderField.create('fieldTwo',OrderSort.DESCENDING)])\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?order=fieldOne,-fieldTwo'\r\n     */\r\n    public setOrder(order?: OrderField[]): TotvsGpsServices<T> {\r\n        this._order = order;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Adiciona um campo para ordenação em um GET\r\n     * @param order Lista de campos\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').addOrder(OrderField.create('fieldOne')).addOrder(OrderField.create('fieldTwo',OrderSort.DESCENDING))\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?order=fieldOne,-fieldTwo'\r\n     */\r\n    public addOrder(order: OrderField): TotvsGpsServices<T> {\r\n        if (!this._order)\r\n            this._order = [];\r\n        this._order.push(order);\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Atribui um objeto que será passado nos parâmetros da URL em um GET\r\n     * @param queryParams Objeto com os valores\r\n     * \r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste').setQueryParams({id: 1, name: 'example'})\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste?id=1&name=example'\r\n     */\r\n    public setQueryParams(queryParams?: any): TotvsGpsServices<T> {\r\n        this._queryParams = queryParams;\r\n        return this;\r\n    }\r\n    \r\n    /**\r\n     * Atribui um objeto que será passado no path da URL, substituindo os campos marcados com `{{ }}`.\r\n     * @param model Objeto com os atributos base para serem substituidos\r\n     * @example\r\n     * ```\r\n     * instance.setURL('/teste/{{id}}').setPathParams({id: 1, otherField: 'example'})\r\n     * ```\r\n     * - Este exemplo vai montar a URL '/teste/1'\r\n     */\r\n    public setPathParams(model?: any): TotvsGpsServices<T> {\r\n        this._pathParams = model;\r\n        return this;\r\n    }\r\n    //#endregion\r\n\r\n    //#region Métodos de chamada HTTP\r\n    private _get(url?: string, ttalk?:boolean, options?: Object): Promise<T | TTalkCollection<T>> {\r\n        let requestUrl = (url || this._url);\r\n        requestUrl = this.appendPathParams(requestUrl);\r\n        requestUrl = this.appendQueryParams(requestUrl);\r\n        let requestHttp = this.getServiceRequest(requestUrl);\r\n        let resultFactory = this.resultFactory.bind(this);\r\n        return new Promise(function(resolve, reject) {\r\n            requestHttp.get(requestUrl, options?? undefined).pipe(take(1)).subscribe(\r\n                data => {\r\n                    resolve(resultFactory(data, ttalk));\r\n                },\r\n                error => reject(error)\r\n            );\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Realiza a requisição GET de um objeto ou de uma coleção de objetos (array)\r\n     * @param url URL do endpoint (caso não informado, será utilizada a URL atribuida como padrão da instância)\r\n     * @param options Objeto HTTPClient.options enviado no header da requisição\r\n     */\r\n    public get(url?: string, options?: Object): Promise<T> {\r\n        return <Promise<T>>this._get(url, false, options);\r\n    }\r\n\r\n    /**\r\n     * Realiza a requisição GET de um coleção de objetos, retornando no formato TTalkCollection\r\n     * @param url URL do endpoint (caso não informado, será utilizada a URL atribuida como padrão da instância)\r\n     * @param options Objeto HTTPClient.options enviado no header da requisição\r\n     */\r\n    public getCollection(url?: string, options?: Object): Promise<TTalkCollection<T>> {\r\n        return <Promise<TTalkCollection<T>>>this._get(url, true, options);\r\n    }\r\n\r\n    /**\r\n     * Realiza a requisição POST\r\n     * @param data Objeto a ser enviado no corpo (body) da requisição\r\n     * @param url URL do endpoint (caso não informado, será utilizada a URL atribuida como padrão da instância)\r\n     * @param options Objeto HTTPClient.options enviado no header da requisição\r\n     */\r\n    public post(data: any, url?: string, options?: Object): Promise<T> {\r\n        let requestUrl = (url || this._url);\r\n        requestUrl = this.appendPathParams(requestUrl);\r\n        requestUrl = this.appendQueryParams(requestUrl);\r\n        let requestHttp = this.getServiceRequest(requestUrl);\r\n        let resultFactory = this.resultFactory.bind(this);\r\n        return new Promise(function(resolve, reject) {\r\n            requestHttp.post(requestUrl, data, options?? undefined).pipe(take(1)).subscribe(\r\n                data => {\r\n                    resolve(resultFactory(data));\r\n                },\r\n                error => reject(error)\r\n            );\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Realiza a requisição PUT\r\n     * @param data Objeto a ser enviado no corpo (body) da requisição\r\n     * @param url URL do endpoint (caso não informado, será utilizada a URL atribuida como padrão da instância)\r\n     * @param options Objeto HTTPClient.options enviado no header da requisição\r\n     */\r\n    public put(data: any, url?: string, options?: Object): Promise<T> {\r\n        let requestUrl = (url || this._url);\r\n        requestUrl = this.appendPathParams(requestUrl);\r\n        requestUrl = this.appendQueryParams(requestUrl);\r\n        let requestHttp = this.getServiceRequest(requestUrl);\r\n        let resultFactory = this.resultFactory.bind(this);\r\n        return new Promise(function(resolve, reject) {\r\n            requestHttp.put(requestUrl, data, options?? undefined).pipe(take(1)).subscribe(\r\n                data => {\r\n                    resolve(resultFactory(data));\r\n                },\r\n                error => reject(error)\r\n            );\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Realiza a requisição DELETE\r\n     * @param url URL do endpoint (caso não informado, será utilizada a URL atribuida como padrão da instância)\r\n     * @param options Objeto HTTPClient.options enviado no header da requisição\r\n     */\r\n    public delete(url?: string, options?: Object): Promise<T> {\r\n        let requestUrl = (url || this._url);\r\n        requestUrl = this.appendPathParams(requestUrl);\r\n        requestUrl = this.appendQueryParams(requestUrl);\r\n        let requestHttp = this.getServiceRequest(requestUrl);\r\n        let resultFactory = this.resultFactory.bind(this);\r\n        return new Promise(function(resolve, reject) {\r\n            requestHttp.delete(requestUrl, options?? undefined).pipe(take(1)).subscribe(\r\n                data => {\r\n                    resolve(resultFactory(data));\r\n                },\r\n                error => reject(error)\r\n            );\r\n        });\r\n    }\r\n    //#endregion\r\n\r\n    //#region métodos internos para tratamento da chamada\r\n    private appendPathParams(url: string): string {\r\n        let newUrl = url;\r\n        let params = this._pathParams;\r\n        if (params) {\r\n            return newUrl.replace(/{{([\\w\\d\\-]+)}}/gi, function(subs, args: string) { \r\n                let value = params[args.trim()];\r\n                return encodeURLParam(value);\r\n            });\r\n        }\r\n        return newUrl;\r\n    }\r\n\r\n    private appendQueryParams(url: string): string {\r\n        let newUrl = url;\r\n        let params = [];\r\n        if (this._queryParams)\r\n            Object.keys(this._queryParams).filter(key => !isNull(this._queryParams[key])).forEach(key => params.push(key + '=' + encodeURLParam(this._queryParams[key])));\r\n        if (this._page)\r\n            params.push('page=' + this._page.toString());\r\n        if (this._pageSize)\r\n            params.push('pageSize=' + this._pageSize.toString());\r\n        if (this._fields)\r\n            params.push('fields=' + this._fields.join(','));\r\n        if (this._expand)\r\n            params.push('expand=' + this._expand.join(','));\r\n        if (this._order)\r\n            params.push('order=' + this._order.map(item => {\r\n                if (item.order == OrderSort.DESCENDING) \r\n                    return '-' + item.fieldName;\r\n                return item.fieldName;\r\n            }).join(','));\r\n\r\n        if (params.length > 0) {\r\n            if (newUrl.indexOf('?') < 0)\r\n                newUrl += '?';\r\n            newUrl += params.join('&');\r\n        }\r\n        \r\n        return newUrl;\r\n    }\r\n    //#endregion\r\n\r\n    //#region métodos internos para conversão de dados\r\n    private resultFactory(data: any, ttalk?: boolean): T | T[] | TTalkCollection<T> {\r\n        if (!data)\r\n            return null;\r\n        if (this.isCollection(data)) {\r\n            let newItems: T[] = data.items.map(item => {return this.itemFactory(item)});\r\n            if (ttalk === true) {\r\n                let result: TTalkCollection<T> = { items: null, hasNext: false };\r\n                return Object.assign(result, data, {items: newItems});\r\n            }\r\n            return newItems;\r\n        }\r\n        return this.itemFactory(data);\r\n    }\r\n\r\n    private itemFactory(data: any): T {\r\n        let obj = new TotvsGpsObjectModel<T>(this._type).createInstance();\r\n        if (this.hasParseMethod(obj)) \r\n            (obj as ITotvsGpsJsonParse<T>).parseJsonToObject(data);\r\n        else\r\n            Object.assign(obj, data);\r\n        return obj;\r\n    }\r\n\r\n    private hasParseMethod(arg: Object): arg is ITotvsGpsJsonParse<T> {\r\n        return (arg as ITotvsGpsJsonParse<T>).parseJsonToObject !== undefined;\r\n    }\r\n\r\n    private isCollection(arg: Object): arg is TTalkCollection<T> {\r\n        return (arg as TTalkCollection<T>).items !== undefined;\r\n    }\r\n    //#endregion\r\n\r\n    //#region métodos internos para requisições de mock\r\n    private getServiceRequest(url:string): IServiceRequest {\r\n        let req = GPS_SERVICES.getMockRequest(url);\r\n        if (!isNull(req))\r\n            return req;\r\n        return this._http;\r\n    }\r\n    //#endregion\r\n\r\n}\r\n","import { IServiceRequest, HTTPMethod } from \"./totvs-gps-services.model\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { isNull } from \"totvs-gps-utils\";\r\n\r\nexport class TotvsGpsMockRequest implements IServiceRequest {\r\n\r\n    private _requests: { method: HTTPMethod, url:RegExp, response:any }[] = [];\r\n\r\n    clearMockResults() {\r\n        this._requests = [];\r\n    }\r\n\r\n    addMockResult(httpMethod:HTTPMethod, urlPattern:RegExp, response?:any) {\r\n        this._requests.push({ method: httpMethod, url: urlPattern, response: response });\r\n    }\r\n\r\n    get(url:string): Observable<Object> {\r\n        return this.mockResponse(HTTPMethod.GET, url);\r\n    }\r\n\r\n    post(url:string, data:Object): Observable<Object> {\r\n        return this.mockResponse(HTTPMethod.POST, url);\r\n    }\r\n\r\n    put(url:string, data:Object): Observable<Object> {\r\n        return this.mockResponse(HTTPMethod.PUT, url);\r\n    }\r\n\r\n    delete(url:string): Observable<Object> {\r\n        return this.mockResponse(HTTPMethod.DELETE, url);\r\n    }\r\n\r\n    private mockResponse(httpMethod:HTTPMethod,url:string): Observable<Object> {\r\n        let response = this.findResponse(httpMethod,url);\r\n        console.log('MOCK', httpMethod, `URL=${url}`, response);\r\n        return of(response);\r\n    }\r\n\r\n    private findResponse(httpMethod:HTTPMethod,url:string): any {\r\n        let result = this._requests.filter(r => r.method == httpMethod).find(r => r.url.test(url));\r\n        if (!isNull(result))\r\n            return result.response;\r\n        return;\r\n    }\r\n\r\n}\r\n","import { PROGRESS_FIELD, LOOKUP_COLUMN, PROGRESS_ID, LOOKUP_FIELD_VALUE, LOOKUP_FIELD_LABEL } from \"./totvs-gps-services.utils\";\r\n\r\nexport function ProgressField(progressKey: string) {\r\n  return Reflect.metadata(PROGRESS_FIELD, progressKey);\r\n}\r\n\r\nexport function LookUpColumn(progressKey: string) {\r\n  return Reflect.metadata(LOOKUP_COLUMN, progressKey);\r\n}\r\n\r\nexport function ProgressId(value?) {\r\n  return Reflect.metadata(PROGRESS_ID, value);\r\n}\r\n\r\nexport function LookUpFieldValue() {\r\n  return Reflect.metadata(LOOKUP_FIELD_VALUE, true);\r\n}\r\n\r\nexport function LookUpFieldLabel() {\r\n  return Reflect.metadata(LOOKUP_FIELD_LABEL, true);\r\n}\r\n\r\nexport interface IZoomColumn {\r\n  fieldLabel?: boolean;\r\n  format?: string;\r\n  label?: string;\r\n  property?: string;\r\n  type?: string;\r\n  width?: string;\r\n}\r\n\r\nexport interface IGenericEntity {\r\n  primaryKeys: string[];\r\n}\r\n\r\nexport interface IGenericZoomEntity {\r\n  readonly zoomTable?: string;\r\n  readonly fieldLabel?: string;\r\n  readonly fieldValue?: string;\r\n  readonly columnDefinition?: IZoomColumn[];\r\n  readonly apiUrl?: string;\r\n  getZoomFieldFormat?;\r\n  setZoomByIdProperty;\r\n  toFilterValue?;\r\n  additionalQuery?;\r\n}\r\n\r\n\r\n\r\nexport class GenericEntity implements IGenericEntity {\r\n  public primaryKeys: string[];\r\n}\r\n\r\nexport class FilterValue {\r\n  property: string;\r\n  filterValue: string;\r\n\r\n  constructor(property?: string, filterValue?: string) {\r\n    this.property = property || '';\r\n    this.filterValue = filterValue || '';\r\n  }\r\n\r\n  public toQueryParam() {\r\n    return this.property + \"=\" + this.filterValue;\r\n  }\r\n}\r\n\r\nexport class GenericZoomEntity extends GenericEntity implements IGenericZoomEntity {\r\n  zoomTable?: string;\r\n  fieldLabel?: string;\r\n  fieldValue?: string;\r\n  columnDefinition?: any;\r\n  getZoomFieldFormat?: any;\r\n  apiUrl?: string = '';\r\n  setZoomByIdProperty;\r\n  toFilterValue?;\r\n  additionalQuery?;\r\n}\r\n\r\nexport class GenericZoomOption {\r\n  filter: string;\r\n  filterParams: any;\r\n  filters: FilterValue[];\r\n  fields: string[];\r\n  oDataFilter: any;\r\n  objectPosition: number;\r\n\r\n  constructor() {\r\n    this.filters = [];\r\n    this.fields = [];\r\n    this.oDataFilter = null;\r\n  }\r\n}\r\n","import { IZoomColumn, FilterValue, GenericZoomEntity, GenericZoomOption } from \"./totvs-gps-zoom.model\";\r\nimport { Observable, from } from \"rxjs\";\r\nimport { TTalkCollection } from \"./totvs-gps-services.model\";\r\nimport { isNull } from \"totvs-gps-utils\";\r\nimport { TotvsGpsServices } from \"./totvs-gps-services.component\";\r\nimport { generateKeyPath, getLookupColumns, getObjectFieldLabel, getObjectFieldValue, getFieldsList, getODataFilter } from \"./totvs-gps-services.utils\";\r\n\r\nexport interface IZoomService {\r\n  COLUMNS: Array<IZoomColumn>;\r\n  FIELD_LABEL: string;\r\n  FIELD_VALUE: string;\r\n  getFilteredItems(params:any): Observable<TTalkCollection<any>>;\r\n  getFilteredData(filter: any, page: number, pageSize?: number, filterParams?: any): Observable<TTalkCollection<any>>;\r\n  getObjectByValue(value: string, filterParams?: any): Observable<any>;\r\n}\r\n\r\nexport interface TTalkCollectionZoom<T> extends TTalkCollection<T> {\r\n  position?: number;\r\n}\r\n\r\nexport class GenericZoomService<T> {\r\n  private _url: string = '';\r\n  private _zoomTable: string;\r\n\r\n  public setUrl(url) {\r\n    this._url = url;\r\n\r\n    if(this._url.substring(this._url.length - 1) != \"/\")\r\n      this._url = this._url + \"/\";\r\n  }\r\n\r\n  public setZoomTable(zoomTable) {\r\n    this._zoomTable = zoomTable;\r\n  }\r\n\r\n  public buildObjectByFilter(searchObject?: any, pageNumber?: number, pageSize?: number, objectPosition?: number, additionalQuery?: string, fields?: string[], expand?: string[]): Promise<TTalkCollectionZoom<T>> {\r\n    let params: any = {};\r\n    if (!isNull(this._zoomTable)) {\r\n      params.ZOOM_TABLE = this._zoomTable;\r\n    }\r\n    if ((!isNull(objectPosition)) && (objectPosition > 0)) {\r\n      params.OBJECT_POSITION = objectPosition;\r\n    }\r\n    if ((!isNull(additionalQuery)) && (additionalQuery.trim().length > 0)) {\r\n      params.ADDITIONAL_QUERY = additionalQuery;\r\n    }\r\n    if (!isNull(searchObject)) {\r\n      if (Array.isArray(searchObject)) {\r\n        searchObject.forEach((filterValue: FilterValue) => {\r\n          params[filterValue.property] = filterValue.filterValue;\r\n        });\r\n      }\r\n      else {\r\n        Object.assign(params, searchObject);\r\n      }\r\n    }\r\n\r\n    return TotvsGpsServices.getInstance<T>(GenericZoomEntity, this._url)\r\n      .setPage(pageNumber).setPageSize(pageSize).setFields(fields).setExpand(expand)\r\n      .setQueryParams(params)\r\n      .getCollection();\r\n  }\r\n\r\n  public getObjectByFilter(searchObject?: any, pageNumber?: number, pageSize?: number, objectPosition?: number, additionalQuery?: string, fields?: string[], expand?: string[]): Observable<TTalkCollectionZoom<T>> {\r\n    return from(this.buildObjectByFilter(searchObject, pageNumber, pageSize, objectPosition, additionalQuery, fields, expand));\r\n  }\r\n\r\n  public buildObjectById(object?: any, fields?: string[], filterParams?: any, additionalQuery?: string): Promise<T> {\r\n    let url = this._url;\r\n    let params: any = {};\r\n    let service = TotvsGpsServices.getInstance<T>(GenericZoomEntity).setFields(fields);\r\n\r\n    // se utiliza filtro OData\r\n    if (!isNull(object['$filter'])) {\r\n      url += 'id/';\r\n      Object.assign(params, object);\r\n    }\r\n    // caso tenha enviado filtro completo\r\n    else {\r\n      url += generateKeyPath(object);\r\n      service.setPathParams(object);\r\n    }\r\n\r\n    if (!isNull(this._zoomTable)) {\r\n      params.ZOOM_TABLE = this._zoomTable;\r\n    }\r\n\r\n    return service.setURL(url).setQueryParams(params).get();\r\n  }\r\n\r\n  public getObjectById(object?: any, fields?: string[], filterParams?: any, additionalQuery?: string): Observable<T> {\r\n    return from(this.buildObjectById(object, fields));\r\n  }\r\n}\r\n\r\nexport class GenericZoom implements IZoomService {\r\n  public readonly genericUrl = 'global/v1/genericZoom/';\r\n\r\n  public COLUMNS: IZoomColumn[];\r\n  public FIELD_LABEL: string = '';\r\n  public FIELD_VALUE: string = '';\r\n  private selectedObject: any;\r\n  private service: GenericZoomService<GenericZoomEntity>;\r\n  private objectPosition: number = 0;\r\n\r\n  public genericZoomEntity: GenericZoomEntity = new GenericZoomEntity();\r\n\r\n  constructor(entity?: GenericZoomEntity) {\r\n    if (entity)\r\n      this.genericZoomEntity = entity;\r\n    this.createColumns();\r\n    this.service = new GenericZoomService();\r\n\r\n    if (!isNull(this.genericZoomEntity.apiUrl))\r\n      this.service.setUrl(this.genericZoomEntity.apiUrl);\r\n    else\r\n      this.service.setUrl(this.genericUrl);\r\n\r\n    if (!isNull(this.genericZoomEntity.zoomTable))\r\n      this.service.setZoomTable(this.genericZoomEntity.zoomTable);\r\n\r\n    this.FIELD_LABEL = this.fieldLabel();\r\n    this.FIELD_VALUE = this.fieldValue();\r\n  }\r\n\r\n  private createColumns() {\r\n    this.COLUMNS = [];\r\n    if (isNull(this.genericZoomEntity.columnDefinition))\r\n      getLookupColumns(this.genericZoomEntity).forEach(column => this.COLUMNS.push(column));\r\n    else this.genericZoomEntity.columnDefinition.forEach(column => this.COLUMNS.push(column));\r\n  }\r\n\r\n  private fieldLabel(): any {\r\n    if (isNull(this.genericZoomEntity.fieldLabel)) {\r\n      return getObjectFieldLabel(this.genericZoomEntity).toString();\r\n    }\r\n    else {\r\n      return this.genericZoomEntity.fieldLabel;\r\n    }\r\n  }\r\n  private fieldValue(): any {\r\n    if (isNull(this.genericZoomEntity.fieldValue)) {\r\n      return getObjectFieldValue(this.genericZoomEntity).toString();\r\n    }\r\n    else {\r\n      return this.genericZoomEntity.fieldValue;\r\n    }\r\n  }\r\n\r\n  public getFilteredItems(params:any): Observable<any> {\r\n    return this.getFilteredData(params.filter, params.page, params.pageSize, params.filterParams);\r\n  }\r\n\r\n  public getFilteredData(filter: string, page: number, pageSize: number, filterParams?: any): Observable<any> {\r\n\r\n    let genericZoomOption: GenericZoomOption = new GenericZoomOption();\r\n    let additionalQuery: string = \"\";\r\n\r\n    if (!isNull(filter) && (filter.length > 0)) {\r\n    let sf = new FilterValue(\"search\", filter);\r\n      genericZoomOption.filters.push(sf);\r\n      genericZoomOption.filter = filter;\r\n    }\r\n    genericZoomOption.filterParams = filterParams;\r\n\r\n    if (page === 1)\r\n      this.objectPosition = 0;\r\n\r\n    if (!isNull(genericZoomOption.filterParams)) {\r\n      this.prepareToFilter(genericZoomOption, this.genericZoomEntity);\r\n      if (!isNull(genericZoomOption.filterParams[\"additionalQuery\"]))\r\n        additionalQuery = genericZoomOption.filterParams[\"additionalQuery\"];\r\n    }\r\n\r\n    if (!isNull(genericZoomOption.fields)) {\r\n      if (!isNull(genericZoomOption.filters)) {\r\n        this.selectedObject = this.service.buildObjectByFilter(\r\n          genericZoomOption.filters,\r\n          page,\r\n          pageSize,\r\n          genericZoomOption.objectPosition,\r\n          additionalQuery,\r\n          genericZoomOption.fields);\r\n\r\n      }\r\n      else {\r\n        this.selectedObject = this.service.buildObjectByFilter(\r\n          genericZoomOption.oDataFilter,\r\n          page,\r\n          pageSize,\r\n          genericZoomOption.objectPosition,\r\n          additionalQuery,\r\n          genericZoomOption.fields);\r\n      }\r\n    }\r\n    else {\r\n      this.selectedObject = this.service.buildObjectByFilter(genericZoomOption.filters, page, pageSize);\r\n    }\r\n\r\n    this.selectedObject.then((result) => {\r\n      if (!isNull(result)\r\n        && !isNull(result.position))\r\n        this.objectPosition = result.position;\r\n    });\r\n\r\n    return from(this.selectedObject);\r\n  }\r\n\r\n  public getObjectByValue(value: string, filterParams?: any): Observable<any> {\r\n\r\n    let temporaryObject = new Object();\r\n    let result;\r\n    let genericZoomOption: GenericZoomOption = new GenericZoomOption();\r\n\r\n    genericZoomOption.filterParams = filterParams;\r\n    if(isNull(genericZoomOption.filterParams)){\r\n      this.copyObjectValues(this.genericZoomEntity,temporaryObject);\r\n      this.genericZoomEntity.setZoomByIdProperty(value);\r\n    }\r\n\r\n    if (!isNull(genericZoomOption.filterParams)) {\r\n      this.copyObjectValues(filterParams, temporaryObject);\r\n      if (!isNull(genericZoomOption.filterParams[\"setZoomByIdProperty\"]))\r\n        genericZoomOption.filterParams.setZoomByIdProperty(value);\r\n\r\n      //if (!isNull(genericZoomOption.filterParams[\"additionalQuery\"]))\r\n      //  additionalQuery = genericZoomOption.filterParams[\"additionalQuery\"];\r\n\r\n      this.prepareToFilter(genericZoomOption, this.genericZoomEntity);\r\n\r\n      //byvalue does not need object position\r\n      genericZoomOption.objectPosition = 0;\r\n\r\n      let filterObject = Object.create(genericZoomOption.filterParams);\r\n      filterObject.setZoomByIdProperty(value);\r\n\r\n      if (!isNull(genericZoomOption.oDataFilter) && !isNull(genericZoomOption.oDataFilter['$filter'])) {\r\n        result = this.service.getObjectById(\r\n          genericZoomOption.oDataFilter,\r\n          genericZoomOption.fields,\r\n          genericZoomOption.filters);\r\n        if(!isNull(filterParams)) {\r\n          this.copyObjectValues(temporaryObject, filterParams);\r\n        }\r\n        return result;\r\n      }\r\n\r\n      result = this.service.getObjectById(\r\n        filterObject,\r\n        genericZoomOption.fields,\r\n        genericZoomOption.filters);\r\n      this.copyObjectValues(temporaryObject, filterParams);\r\n      return result;\r\n    }\r\n\r\n    result = this.service.getObjectById(this.genericZoomEntity);\r\n\r\n    if(!isNull(genericZoomOption.filterParams)){\r\n    this.copyObjectValues(temporaryObject, filterParams);\r\n    }\r\n\r\n    if(isNull(genericZoomOption.filterParams)){\r\n        this.copyObjectValues(temporaryObject,this.genericZoomEntity,);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /*public getSelectedObject() {\r\n    let a: any;\r\n    a = Object.create(this.selectedObject);\r\n    return a;\r\n  }*/\r\n\r\n  public getZoomFieldFormat(value): string {\r\n    return `${value[this.FIELD_VALUE]} - ${this.FIELD_LABEL}`;\r\n  }\r\n\r\n  public prepareToFilter(genericZoomOption: GenericZoomOption, genericZoomEntity: GenericZoomEntity): GenericZoomOption {\r\n    let filterObject = Object.create(genericZoomOption.filterParams);\r\n\r\n    if (filterObject[\"toFilterValue\"] != null) {\r\n      genericZoomOption.filters = genericZoomOption.filters.concat(filterObject.toFilterValue());\r\n    }\r\n\r\n    genericZoomOption.fields = getFieldsList(genericZoomOption.filterParams);\r\n\r\n    if ((!isNull(genericZoomOption.fields)) && (genericZoomOption.fields.length > 0)) {\r\n      genericZoomOption.oDataFilter = getODataFilter(genericZoomOption.filterParams, genericZoomOption.filter, genericZoomEntity);\r\n\r\n      if (!isNull(genericZoomOption.oDataFilter)\r\n        && !isNull(genericZoomOption.oDataFilter['$filter']))\r\n        genericZoomOption.filters = null;\r\n    }\r\n\r\n    if (!isNull(this.objectPosition)\r\n      && this.objectPosition > 0)\r\n      genericZoomOption.objectPosition = this.objectPosition;\r\n\r\n    return genericZoomOption;\r\n  }\r\n\r\n  public copyObjectValues(source, target) {\r\n    if (isNull(source))\r\n      return;\r\n\r\n    Object.keys(source).forEach(key => {\r\n      target[key] = source[key];\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ICacheService, ICacheModel, ICacheFields } from './totvs-gps-cache.model';\r\nimport { ICacheList, ICacheParams, ICacheValue } from './totvs-gps-cache.internal-model';\r\nimport { isNull } from 'totvs-gps-utils';\r\nimport { TTalkCollection } from './totvs-gps-services.model';\r\n\r\n@Injectable()\r\nexport class TotvsGpsCacheService {\r\n\r\n    private _services: ICacheService[] = [];\r\n    private _list: ICacheList[] = [];\r\n\r\n    public clearServices() {\r\n        this._services = [];\r\n        this._list = [];\r\n    }\r\n    \r\n    public addService(model: ICacheModel, service: ICacheService) {\r\n        this._services[model.ENTITY] = service;\r\n    }\r\n\r\n    public getPromise<T>(model: ICacheModel, expand?:string[]): Promise<T> {\r\n        return new Promise((resolve, reject) => {\r\n            this.get(model, ((value) => {\r\n                if(Object.keys(value).length === 0){\r\n                    reject(undefined);\r\n                }\r\n                resolve(value);\r\n            }), expand);\r\n        });        \r\n    }    \r\n\r\n    \r\n\r\n    public get(model: ICacheModel, callback?:Function, expand?:string[]): any {\r\n        if (isNull(model)) {\r\n            if (!isNull(callback))\r\n                callback(null);\r\n            return null;\r\n        }\r\n        let modelName = model.ENTITY;\r\n        // Verifica se existe lista para o model, senao cria uma\r\n        let cacheList = this._list[modelName];\r\n        if (isNull(cacheList)) {\r\n            this._list[modelName] = { values: [] };\r\n            cacheList = this._list[modelName];\r\n        }\r\n        let pk = model.primaryKeys;\r\n        let params:ICacheParams = {};\r\n        params.params = pk.map(item => String(model[item] || ''));\r\n        \r\n        //Caso informado algum expandable, adicionar o mesmo nos params após os campos da pk\r\n        if(expand){\r\n            params.expand = expand;\r\n        }\r\n\r\n        let index = [modelName,...params.params].join(';');\r\n        // se valor ja existe, usa o da lista\r\n        let value: ICacheValue = (cacheList.values.find(item => item.index == index));\r\n        if (!isNull(value)) {\r\n            if (!isNull(callback)) {\r\n                // se tiver função de callback, e a informação já está pronta, chama o callback\r\n                if (value.ready)\r\n                    callback(value.data);\r\n                // senao, adiciona na lista para ser chamado posteriormente\r\n                else\r\n                    value.onReady.push((v:ICacheValue) => { callback(v.data) });\r\n            }\r\n            return value.data;\r\n        }\r\n        // se nao existe, pesquisa\r\n        let service: ICacheService = this._services[modelName];\r\n        if (isNull(service)) {\r\n            if (!isNull(callback))\r\n                callback(null);\r\n            return null;\r\n        }\r\n        value = { index: index, data: new Object(), ready: false, onReady: [] };\r\n        if (!isNull(callback))\r\n            value.onReady.push((v:ICacheValue) => { callback(v.data) });\r\n        cacheList.values.push(value);\r\n        service.get(...params.params, params.expand)\r\n            .then(result => {\r\n                Object.assign(value.data, result);\r\n                this.callOnReady(value);\r\n            });\r\n        return value.data;\r\n    }\r\n\r\n    private callOnReady(value: ICacheValue) {\r\n        value.ready = true;\r\n        value.onReady.forEach(f => f(value));\r\n        value.onReady = [];\r\n    }\r\n\r\n    private doExtend<T extends ICacheModel>(args:T, expand:string[]|undefined = undefined):Promise<T> {                                    \r\n        return new Promise<T>((resolve, reject) => {\r\n            this.getPromise(args, expand).then((value) => {\r\n                let _collection = value as TTalkCollection<T>;\r\n                let _object = value as T;\r\n                if(_collection.items && Array.isArray(_collection.items)){                                        \r\n                    resolve(_collection.items[0]);\r\n                }                \r\n                resolve(_object);\r\n            }).catch(_ => reject(_));\r\n        })\r\n    }\r\n\r\n    public extend<T extends ICacheModel>(model:T, hasZeroAll:boolean = false, expand:string[]|undefined = undefined):Promise<T>{\r\n        let _objNotFound:CacheInternalControl = new CacheInternalControl(model);\r\n        let _objZeroAll:CacheInternalControl = new CacheInternalControl(model);\r\n\r\n        if(!model.cacheFields){\r\n            console.error('cacheFields not found');\r\n        }\r\n        \r\n        if(hasZeroAll){          \r\n            _objZeroAll.setCode<T>(model);                                    \r\n            if((typeof _objZeroAll.codeValue == 'number' && _objZeroAll.codeValue == 0) || (typeof _objZeroAll.codeValue == 'string' && _objZeroAll.codeValue == '')){\r\n                _objZeroAll.setDescription(\"Todos\");                            \r\n                return Promise.resolve(model.parseJsonToObject(_objZeroAll));\r\n            }\r\n        }      \r\n\r\n        _objNotFound.setCode<T>(model);        \r\n        _objNotFound.setDescription('Não encontrado(a)');                            \r\n\r\n        return new Promise((resolve) => {\r\n            this.doExtend(model, expand).then((value) => {                \r\n                if(value){\r\n                    model = model.parseJsonToObject(value);\r\n                }else{                              \r\n                    model = model.parseJsonToObject(_objNotFound);\r\n                }\r\n        \r\n                model.parseJsonToObject(model);\r\n                resolve(model);\r\n            }).catch(() => {\r\n                resolve(model.parseJsonToObject(_objNotFound));\r\n            });\r\n        })\r\n    }\r\n  \r\n}\r\n\r\nclass CacheInternalControl{\r\n\r\n    constructor(private modelControl:ICacheModel){}  \r\n\r\n    get model():ICacheModel{ return this.modelControl; };\r\n    get codeValue():string|number { return this.modelControl[this.model.cacheFields.code];};\r\n\r\n    public setDescription(otherDescription: string) {        \r\n        if(this.modelControl.cacheFields.description){\r\n            if (this.modelControl.cacheFields.description.includes('.')) {\r\n                this.modelControl[this.modelControl.cacheFields.description.split('.')[0]] = {};\r\n                this.modelControl[this.modelControl.cacheFields.description.split('.')[0]][this.modelControl.cacheFields.description.split('.')[1]] = otherDescription;\r\n            } else {\r\n                this.modelControl[this.modelControl.cacheFields.description] = otherDescription;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public setCode<T extends ICacheModel>(model: T) {      \r\n        if(this.modelControl.cacheFields.code){\r\n            Object.entries(model).find(([key, value]) => {\r\n                if (this.modelControl.cacheFields.code === key) {                  \r\n                    this.modelControl[this.modelControl.cacheFields.code] = value;                                \r\n                }            \r\n            });\r\n        }      \r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { TotvsGpsServices } from \"./totvs-gps-services.component\";\r\nimport { TotvsFileUtils } from \"totvs-gps-utils\";\r\n\r\n\r\n\r\ntype SmartViewFile = {\r\n    fileName:string,\r\n    fileByte:number[],\r\n    contentType:string\r\n}\r\n\r\n@Injectable()\r\nexport class TotvsGpsSmartViewService{\r\n\r\n    private _apiUrl:string = `${location.protocol}//${location.host}/api/trep/generate`;            \r\n\r\n    public generate(layoutName:string, format:string=TotvsGpsSmartViewFormats.PDF, parameters:Object, attachment:boolean=false){        \r\n        const token = this.getToken();\r\n        const headers = new Headers({\"Authorization\": `Bearer ${token}`});\r\n\r\n        const promise = TotvsGpsServices\r\n            .getInstance<any>(Object)\r\n            .setQueryParams({layoutName, format, attachment})            \r\n            .post(this.proccessParams(parameters), this._apiUrl, {headers})\r\n\r\n        if(attachment == false){\r\n            return promise.then((res) => this.proccessFile(res));\r\n        }\r\n        return promise;\r\n    }\r\n\r\n    private proccessFile(file){                        \r\n        const blob = new Blob([new Uint8Array(file.fileByte)], {type : \"application/octet-stream\"});\r\n        return {fileName: file.fileName, content: blob};\r\n    }\r\n\r\n    public getToken(){\r\n        const datasulToken:Object = JSON.parse(localStorage?.getItem(\"token-service.token\"));\r\n        if(datasulToken){\r\n            return datasulToken[\"access_token\"] ?? \"\";            \r\n        }\r\n            \r\n        return \"\";\r\n    }\r\n\r\n    private proccessParams(params:Object):Object{\r\n        const newObj = new Object();        \r\n        for (const key of Object.keys(params)) {\r\n            newObj[key] = [params[key]];\r\n        }\r\n        return newObj;\r\n    }\r\n\r\n}\r\n\r\nexport enum TotvsGpsSmartViewFormats{\r\n    PDF = \"pdf\",\r\n    CSV = \"csv\",\r\n    XLS = 'xls',\r\n    XLSX = 'xlsx',\r\n    RTF = 'rft',\r\n    DOCX = 'docx',\r\n    MNT = 'mht',\r\n    HTML = 'html',\r\n    TXT = 'txt',\r\n    JPEG = 'jpeg',\r\n    PNG = 'png'\r\n}","/*\r\n * Public API Surface of totvs-gps-services\r\n */\r\n\r\nexport { TTalkCollection, OrderField, OrderSort, HTTPMethod } from './lib/totvs-gps-services.model';\r\nexport { TotvsGpsServices } from './lib/totvs-gps-services.component';\r\nexport { TotvsGpsInterceptorService } from './lib/totvs-gps-interceptor.service';\r\nexport { TotvsGpsMockRequest } from './lib/totvs-gps-mock-request.component';\r\nexport { TotvsGpsDataService } from './lib/totvs-gps-services.service';\r\nexport { TotvsGpsServicesModule } from './lib/totvs-gps-services.module';\r\n// zoom generico\r\nexport * from './lib/totvs-gps-zoom.model';\r\nexport * from './lib/totvs-gps-zoom.service';\r\n// serviço de cache de dados\r\nexport * from './lib/totvs-gps-cache.model';\r\nexport * from './lib/totvs-gps-cache.service';\r\n// serviço de verificação de permissões\r\nexport * from './lib/totvs-gps-permission.service';\r\n//Serviço de geração de relatórios smart view com framework Datasul\r\nexport * from './lib/totvs-gps-smart-view.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.TotvsGpsDataService"],"mappings":"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"}