{"version":3,"file":"ngx-redi-core-Helper.mjs","sources":["../../../projects/ngx-redi-core/Helper/src/helpers/csv.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/data-subject.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/bag-data-subject.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/query-filters.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/form-bind.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/location.service.ts","../../../projects/ngx-redi-core/Helper/ngx-redi-core-Helper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n/**\r\n * Servicio que provee métodos para trabajar con datos CSV\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CsvService {\r\n  /**\r\n     * Genera el texto CSV a partir de un archivo\r\n     * @param data- Datos a construir\r\n     * @returns CSV texto\r\n     */\r\n  public generarCsv<T extends {}>(data: Array<T>): string {\r\n    const datos = data.map(d => {\r\n      return Object.values(d)\r\n        .filter(p => this.tipoSerializable(p))\r\n        .map(v => (v as string).includes(',') ? `\"${v}\"` : v);\r\n    });\r\n    return `${data?.slice(0, 1)?.map((o) => {\r\n      return `${Object.keys(o).join(',')}\\n`\r\n    })}${datos.map(d => {\r\n      return Object.values(d).join(',');\r\n    }).join('\\n')}`;\r\n  }\r\n\r\n  /**\r\n   * Método que indica si la propiedad es serializable\r\n   * @param propiedad - Propiedad a validar\r\n   * @returns True si es una propiedad serializable\r\n   */\r\n  private tipoSerializable(propiedad: unknown): boolean {\r\n    return typeof (propiedad) !== 'object' &&\r\n      typeof (propiedad) !== 'function';\r\n  }\r\n\r\n  /**\r\n   * Descarga el CSV a partir de los datos establecidos\r\n   * @param archivo - Nombre del archivo a descargar\r\n   * @param data - Arreglo de datos a descargar\r\n   */\r\n  public descargarCsv<T extends {}>(archivo: string, data: Array<T>): void {\r\n    const blob = new Blob([BOM_CSV, this.generarCsv(data)], { type: TYPE_CSV });\r\n    const link = this.generarLink(archivo, blob);\r\n    document.body.appendChild(link);\r\n    link.click();\r\n    document.body.removeChild(link);\r\n  }\r\n\r\n  /**\r\n   * Genera el link para el blob y archivo establecidos\r\n   * @param archivo - Nombre del archivo a descargar\r\n   * @param blob - Contenido del blob\r\n   * @returns link\r\n   */\r\n  private generarLink(archivo: string, blob: Blob): HTMLAnchorElement {\r\n    const link = document.createElement('a') as HTMLAnchorElement;\r\n    if (link.download !== undefined) {\r\n      link.setAttribute('href', URL.createObjectURL(blob));\r\n      link.setAttribute('download', archivo);\r\n      link.style.visibility = 'hidden';\r\n    }\r\n    return link;\r\n  }\r\n\r\n}\r\n\r\n/** Tipo MIME CSV + Encode */\r\nconst TYPE_CSV = 'text/csv;charset=utf-8;';\r\n/** BOM CSV */\r\nconst BOM_CSV = new Uint8Array([0xEF, 0xBB, 0xBF]);\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DataSubject } from '../models/interfaces/data-subject.interface';\r\n\r\n/**\r\n * Servicio para compartir datos\r\n * @decorators `@Injectable`\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DataSubjectService<T> implements DataSubject<T> {\r\n  /**\r\n   * Crea un nuevo servicio de Datos compartidos\r\n   */\r\n  constructor() {\r\n    this._data = undefined as T;\r\n    this.subject = new Subject();\r\n  }\r\n\r\n  /**\r\n   * Contiene el subject que emite datos\r\n   */\r\n  private readonly subject: Subject<T>;\r\n\r\n  /**\r\n   * Datos internos\r\n   */\r\n  private _data: T;\r\n\r\n  /**\r\n   * Emite los datos a los subscriptores\r\n   * @param data Datos a emitir\r\n   */\r\n  public broadcast(data: T): void {\r\n    this._data = data;\r\n    this.subject.next(data);\r\n  }\r\n\r\n  /**\r\n   * Contiene el ultimo dato emitido\r\n   */\r\n  public get data(): T {\r\n    return this._data;\r\n  }\r\n\r\n  /**\r\n   * Observable  que notifica los cambios\r\n   */\r\n  public get observer(): Observable<T> {\r\n    return this.subject.asObservable();\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\nimport { DataSubjectService } from './data-subject.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Servicio para compartir datos entre micro-fronts\r\n * @decorators `@Injectable`\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class BagDataSubjectService {\r\n\r\n  /**\r\n   * Crea un nuevo servicio de datos compartido\r\n   */\r\n  constructor() {\r\n    this.subjects = {};\r\n  }\r\n\r\n  /**\r\n   * Obtiene el subjet dada un identificador\r\n   * @param subject Identificador\r\n   * @returns Servicio de datos\r\n   */\r\n  public getSubject<T>(subject: string): DataSubjectService<T> {\r\n    let result = Reflect.get(this.subjects, subject);\r\n    if (!result) {\r\n      result = new DataSubjectService<T>();\r\n      Reflect.defineProperty(this.subjects, subject, { value: result });\r\n    }\r\n    return result as DataSubjectService<T>;\r\n  }\r\n\r\n  /**\r\n   * Asigna los datos a un servicio mediante su identificador\r\n   * @param subject Identificador del servicio\r\n   * @param data Datos a emitir\r\n   */\r\n  public setData<T>(subject: string, data: T): void {\r\n    return this.getSubject<T>(subject).broadcast(data);\r\n  }\r\n\r\n  /**\r\n   * Obtiene el ultimo dato del servicio especificando su identificador\r\n   * @param subject Identificador del servicio\r\n   * @returns Dato\r\n   */\r\n  public getData<T>(subject: string): T {\r\n    return this.getSubject(subject).data as T;\r\n  }\r\n\r\n  /**\r\n   * Obtiene el observable especificando el servicio\r\n   * @param subject Identificador del servicio\r\n   * @returns Observable<T>\r\n   */\r\n  public getObservable<T>(subject: string): Observable<T> {\r\n    return this.getSubject(subject).observer as Observable<T>;\r\n  }\r\n\r\n  /**\r\n   * Objeto contenedor de los subjects\r\n   */\r\n  private subjects: object;\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Params } from '@angular/router';\r\nimport { QueryFilters } from '../models/interfaces/query-filters';\r\nimport { map, Observable } from 'rxjs';\r\n\r\n/**\r\n * Servicio de filtro de datos para query params\r\n * @decorators `@Injectable`\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class QueryFiltersService {\r\n  /**\r\n   * Crea una nueva instancia de QueryFilter\r\n   * @param {ActivatedRoute} rutaActiva - Servicio de ruta\r\n   */\r\n  constructor(@Inject(ActivatedRoute) private readonly rutaActiva: ActivatedRoute) {\r\n  }\r\n\r\n  /**\r\n   * Obtiene los filtros de la ruta\r\n   * @returns Observable<QueryFilters>\r\n   */\r\n  public getQueryFilters(): Observable<QueryFilters> {\r\n    return this.rutaActiva.queryParams.pipe(map(queryParam => {\r\n      return {\r\n        seleccionarTodo: queryParam['seleccionar'] === '',\r\n        seleccionados: this.getData(queryParam, 'seleccionar'),\r\n        deseleccionados: this.getData(queryParam, 'deseleccionar'),\r\n        eliminados: this.getData(queryParam, 'eliminar'),\r\n        filtrados: this.getData(queryParam, 'filtrar'),\r\n        servicio: queryParam['bagDataSubject'] ?? ''\r\n      } as QueryFilters;\r\n    }));\r\n  }\r\n\r\n\r\n  public getSnapFilters(state: string): QueryFilters {\r\n    let filter = Reflect.get(history.state, state);\r\n    if (filter) {\r\n      filter = {\r\n        seleccionarTodo: filter.seleccionarTodo ?? false,\r\n        seleccionados: filter.seleccionados ?? [],\r\n        deseleccionados: filter.deseleccionados ?? [],\r\n        eliminados: filter.eliminados ?? [],\r\n        filtrados: filter.filtrados ?? [],\r\n        servicio: filter.servicio ?? ''\r\n      } as QueryFilters;\r\n    }\r\n    return filter;\r\n  }\r\n\r\n  public generateFilter(url: string): QueryFilters | undefined {\r\n    if (!url) {\r\n      return undefined;\r\n    }\r\n    let params = url.split('&')\r\n      .map(p => {\r\n        let data = p.split('=');\r\n        return {\r\n          key: data[0],\r\n          value: data[1] ?? ''\r\n        }\r\n      });\r\n    return {\r\n      seleccionarTodo: params.some(p => p.key === 'seleccionar' && p.value === ''),\r\n      seleccionados: params.find(p => p.key === 'seleccionar')?.value.split(',') ?? [],\r\n      deseleccionados: params.find(p => p.key === 'deseleccionar')?.value.split(',') ?? [],\r\n      eliminados: params.find(p => p.key === 'eliminar')?.value.split(',') ?? [],\r\n      filtrados: params.find(p => p.key === 'filtrar')?.value?.split(',') ?? [],\r\n      servicio: params.find(p => p.key === 'servicio')?.value ?? '',\r\n    } as QueryFilters;\r\n  }\r\n\r\n  /**\r\n   * Obtiene los datos de los parámetros establecidos\r\n   * @param {Params} param - Parámetros\r\n   * @param {string} key - Clave del parámetro\r\n   * @returns Arreglo de parámetros\r\n   */\r\n  private getData(param: Params, key: string): Array<string> {\r\n    return param[key]?.split(',') ?? [];\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FormBindService {\r\n\r\n  constructor() { }\r\n\r\n  public setValues<T extends {}>(entity: T, formGroup: unknown) {\r\n    if (!entity || !formGroup) {\r\n      return;\r\n    }\r\n    let internalForm = formGroup as FormGroup;\r\n    Object.keys(entity).map(k => internalForm.get(k)?.setValue(Reflect.get(entity, k)));\r\n  }\r\n\r\n  public updateValues<T extends {}>(entity: T, formGroup: unknown) {\r\n    if (!entity || !formGroup) {\r\n      return;\r\n    }\r\n    let internalForm = formGroup as FormGroup;\r\n    Object.keys(entity).map(k => {\r\n      if (internalForm.contains(k)) {\r\n        Reflect.set(entity, k, internalForm.get(k)?.value);\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Route, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LocationService {\r\n\r\n  private readonly router = inject(Router);\r\n\r\n  constructor() { }\r\n\r\n  public navigate(path: string): void {\r\n    this.router.navigate(this.getRelative(path));\r\n  }\r\n\r\n  public getRelative(relativePath?: string): Array<string> {\r\n    return this.getCurrentPath(relativePath);\r\n  }\r\n\r\n  private getCurrentPath(relative: string | undefined): Array<string> {\r\n    const url = (new URL(relative ?? '', window.location.href)).href;\r\n    const currentLocation = Reflect.get(this.router, 'location')?._basePath ?? '';\r\n    return url.substring(url.lastIndexOf(currentLocation) + currentLocation.length)\r\n      .split('/');\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}