sf-documents 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sf-documents.mjs","sources":["../../../projects/sf-documents/src/lib/sf-documents.service.ts","../../../projects/sf-documents/src/lib/pipes/safe.pipe.ts","../../../projects/sf-documents/src/lib/gateways/document.port.ts","../../../projects/sf-documents/src/lib/utils/file-type.util.ts","../../../projects/sf-documents/src/lib/utils/toast.util.ts","../../../projects/sf-documents/src/lib/components/dialog/upload-dialog/upload-dialog.component.ts","../../../projects/sf-documents/src/lib/components/dialog/upload-dialog/upload-dialog.component.html","../../../projects/sf-documents/src/lib/pipes/flexible-date.pipe.ts","../../../projects/sf-documents/src/lib/components/folder-files/folder-files.component.ts","../../../projects/sf-documents/src/lib/components/folder-files/folder-files.component.html","../../../projects/sf-documents/src/lib/utils/error-message.util.ts","../../../projects/sf-documents/src/lib/sf-documents.component.ts","../../../projects/sf-documents/src/lib/sf-documents.component.html","../../../projects/sf-documents/src/public-api.ts","../../../projects/sf-documents/src/sf-documents.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SfDocumentsService {\n _loading = new BehaviorSubject<boolean>(false);\n _loadingData = new BehaviorSubject<boolean>(false);\n loading$ = this._loading.asObservable();\n loadingData$ = this._loadingData.asObservable();\n\n set loading(loading: boolean) {\n this._loading.next(loading);\n }\n set loadingData(loading: boolean) {\n this._loadingData.next(loading);\n }\n get loading(): boolean {\n return this._loading.getValue();\n }\n get loadingData(): boolean {\n return this._loadingData.getValue();\n }\n constructor() { }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\n@Pipe({ name: 'safe' })\n\nexport class SafePipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n transform(url:any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}","import { InjectionToken } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport interface DocumentGatewayService{\n getFolders(idKatios:string, data: any): Observable<any>;\n updateStatus(idKatios:string, data: any): Observable<any>;\n uploadFiles(idKatios: string, formData: FormData): Observable<any>;\n generateDocument(idKatios:string, idDoc:string , noDoc:string,data: any): Observable<any>;\n getDocumentsToGenerate(idKatios:string, noDoc: string): Observable<any>;\n getFilesByFolder(idKatios: string, nmco: string, data: any, pageNumber: number, pageSize: number, search: string): Observable<any>;\n}\n\nexport const DOCUMENT_SERVICE = new InjectionToken<DocumentGatewayService>('DOCUMENT_SERVICE');","/**\n * Extensiones permitidas por defecto para subir cuando el host no configura nada.\n * Esto sí es configurable desde el host vía `allowedUploadTypes`, ya que es una\n * decisión de negocio (qué tipos de documento se aceptan).\n */\nexport const DEFAULT_ALLOWED_UPLOAD_EXTENSIONS = ['.pdf', '.xls', '.xlsx'];\nexport const MAX_POR_ARCHIVO = 25 * 1024 * 1024; // 25 MB\nexport const MAX_POR_LOTE = 100 * 1024 * 1024; // 100 MB\n\nexport interface RejectedFile {\n name: string;\n size: number;\n}\n\nconst MIME_TYPES_BY_EXTENSION: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n};\n\n/**\n * Extensiones que el navegador puede renderizar inline dentro de un <embed>/<iframe>.\n * Esto NO es configurable desde el host: es una capacidad del navegador, no una\n * decisión de negocio, así que la librería la conoce de antemano (evita que el host\n * marque como \"previsualizable\" un tipo que en realidad nunca se va a renderizar).\n */\nconst PREVIEWABLE_EXTENSIONS = [\n '.pdf',\n '.jpg',\n '.jpeg',\n '.png',\n '.gif',\n '.webp',\n '.bmp',\n '.svg',\n];\n\nconst ICON_BY_EXTENSION: Record<string, string> = {\n '.pdf': 'pi-file-pdf',\n '.xls': 'pi-file-excel',\n '.xlsx': 'pi-file-excel',\n '.doc': 'pi-file-word',\n '.docx': 'pi-file-word',\n '.jpg': 'pi-image',\n '.jpeg': 'pi-image',\n '.png': 'pi-image',\n '.gif': 'pi-image',\n '.webp': 'pi-image',\n '.bmp': 'pi-image',\n '.svg': 'pi-image',\n};\n\n/** Normaliza una lista de extensiones dada por el host (con o sin punto, mayúsc/minúsc). */\nexport function normalizeExtensions(\n extensions: string[] | undefined | null,\n fallback: string[],\n): string[] {\n const list = extensions && extensions.length ? extensions : fallback;\n return list\n .map((ext) => ext.trim().toLowerCase())\n .filter((ext) => !!ext)\n .map((ext) => (ext.startsWith('.') ? ext : `.${ext}`));\n}\n\n/** Arma el atributo `accept` del input file a partir de las extensiones permitidas. */\nexport function buildAcceptAttr(extensions: string[]): string {\n const mimeTypes = extensions\n .map((ext) => MIME_TYPES_BY_EXTENSION[ext])\n .filter((m): m is string => !!m);\n return [...new Set([...mimeTypes, ...extensions])].join(',');\n}\n\nfunction hasExtension(\n fileName: string | undefined | null,\n extensions: string[],\n): boolean {\n if (!fileName) return false;\n const lower = fileName.toLowerCase();\n return extensions.some((ext) => lower.endsWith(ext));\n}\n\nexport function isAllowedUploadFile(file: File, extensions: string[]): boolean {\n const mimeTypes = extensions\n .map((ext) => MIME_TYPES_BY_EXTENSION[ext])\n .filter((m): m is string => !!m);\n return mimeTypes.includes(file.type) || hasExtension(file.name, extensions);\n}\n\n/** Formatea un tamaño en bytes a MB con un decimal (ej. \"12.3 MB\"). */\nexport function formatFileSizeMB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/** Tamaño total en bytes de un conjunto de archivos. */\nexport function getBatchSize(files: File[]): number {\n return files.reduce((total, file) => total + file.size, 0);\n}\n\n/** Separa los archivos según superen o no el tamaño máximo permitido por archivo. */\nexport function splitFilesByMaxSize(\n files: File[],\n maxFileSize: number,\n): { allowed: File[]; rejected: RejectedFile[] } {\n const allowed: File[] = [];\n const rejected: RejectedFile[] = [];\n files.forEach((file) => {\n if (file.size > maxFileSize) rejected.push({ name: file.name, size: file.size });\n else allowed.push(file);\n });\n return { allowed, rejected };\n}\n\n/** true si el navegador puede mostrar este archivo inline en un <embed>/<iframe>. */\nexport function canPreviewFile(name: string | undefined | null): boolean {\n return hasExtension(name, PREVIEWABLE_EXTENSIONS);\n}\n\n/** Ícono PrimeIcons según la extensión del archivo; 'pi-file' si no se reconoce. */\nexport function getFileTypeIcon(name: string | undefined | null): string {\n if (!name) return 'pi-file';\n const lower = name.toLowerCase();\n const match = Object.keys(ICON_BY_EXTENSION).find((ext) =>\n lower.endsWith(ext),\n );\n return match ? ICON_BY_EXTENSION[match] : 'pi-file';\n}\n","/**\n * `key` de los avisos de la librería. Solo los pinta el `<p-toast>` de `SfDocumentsComponent`:\n * un `<p-toast>` del host sin `key` (o con otra) no los muestra, así que no salen duplicados.\n */\nexport const SF_DOCUMENTS_TOAST_KEY = 'sf-documents';\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { MessageService } from 'primeng/api';\nimport {\n buildAcceptAttr,\n DEFAULT_ALLOWED_UPLOAD_EXTENSIONS,\n formatFileSizeMB,\n getBatchSize,\n isAllowedUploadFile,\n MAX_POR_ARCHIVO,\n MAX_POR_LOTE,\n normalizeExtensions,\n RejectedFile,\n splitFilesByMaxSize,\n} from '../../../utils/file-type.util';\nimport { SF_DOCUMENTS_TOAST_KEY } from '../../../utils/toast.util';\n\n@Component({\n selector: 'lib-upload-dialog',\n imports: [CommonModule, ButtonModule, DialogModule],\n templateUrl: './upload-dialog.component.html',\n styleUrl: './upload-dialog.component.scss'\n})\nexport class UploadDialogComponent {\n @Input() selectedDocument: any;\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\n @Input() allowedExtensions: string[] | undefined;\n @Output() onUploaded = new EventEmitter<{ fileList: File[], tagValue: any }>();\n @Output() loadFile = new EventEmitter<void>();\n @ViewChild('fileInput', { static: true })\n fileInput!: ElementRef<HTMLInputElement>;\n\n readonly maxFileSize = MAX_POR_ARCHIVO;\n readonly maxBatchSize = MAX_POR_LOTE;\n\n displayOversizedDialog = false;\n allowedFiles: File[] = [];\n rejectedFiles: RejectedFile[] = [];\n private pendingTagValue: any;\n\n constructor(private messageService: MessageService) { }\n\n private get normalizedExtensions(): string[] {\n return normalizeExtensions(this.allowedExtensions, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS);\n }\n\n get acceptedFileTypes(): string {\n return buildAcceptAttr(this.normalizedExtensions);\n }\n\n formatSize(bytes: number): string {\n return formatFileSizeMB(bytes);\n }\n\n loadFileClick() {\n this.loadFile.emit();\n this.fileInput.nativeElement.value = '';\n this.fileInput.nativeElement.click();\n }\n\n fileChange(event: any) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n const files = Array.from(input.files);\n const validFiles = files.filter(f => isAllowedUploadFile(f, this.normalizedExtensions));\n const tagValue = input.value;\n if (!validFiles.length) return;\n\n if (getBatchSize(validFiles) > this.maxBatchSize) {\n this.addMessage(\n 'error',\n 'Lote demasiado grande',\n `El lote seleccionado supera el tamaño máximo permitido de ${this.formatSize(this.maxBatchSize)}.`,\n );\n return;\n }\n\n const { allowed, rejected } = splitFilesByMaxSize(validFiles, this.maxFileSize);\n if (!rejected.length) {\n this.onUploaded.emit({ fileList: allowed, tagValue });\n return;\n }\n\n this.allowedFiles = allowed;\n this.rejectedFiles = rejected;\n this.pendingTagValue = tagValue;\n this.displayOversizedDialog = true;\n }\n\n continuarConPermitidos() {\n this.displayOversizedDialog = false;\n if (this.allowedFiles.length) {\n this.onUploaded.emit({ fileList: this.allowedFiles, tagValue: this.pendingTagValue });\n }\n this.limpiarSeleccionRechazada();\n }\n\n cancelarEnvio() {\n this.displayOversizedDialog = false;\n this.limpiarSeleccionRechazada();\n }\n\n private limpiarSeleccionRechazada() {\n this.allowedFiles = [];\n this.rejectedFiles = [];\n this.pendingTagValue = null;\n }\n\n private addMessage(severity: string, summary: string, detail: string) {\n // Usa el MessageService y el <p-toast> de SfDocumentsComponent (ver SF_DOCUMENTS_TOAST_KEY).\n this.messageService.add({ key: SF_DOCUMENTS_TOAST_KEY, severity, summary, detail, life: 4000 });\n }\n\n}\n","<input\n #fileInput\n type=\"file\"\n (change)=\"fileChange($event)\"\n class=\"hidden\"\n placeholder=\"Upload file\"\n [attr.accept]=\"acceptedFileTypes\"\n multiple\n/>\n<button\n pButton\n type=\"button\"\n label=\"Subir archivo\"\n icon=\"pi pi-upload\"\n class=\"p-button-outlined ff-btn-upload\"\n (click)=\"loadFileClick()\"\n></button>\n\n<p-dialog\n header=\"Archivos que superan el tamaño permitido\"\n [(visible)]=\"displayOversizedDialog\"\n [modal]=\"true\"\n [closable]=\"false\"\n [style]=\"{ width: '32rem' }\"\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\n>\n <p>\n Tamaño máximo por archivo:\n <strong>{{ formatSize(maxFileSize) }}</strong>\n </p>\n\n <div class=\"oversized-section\">\n <p class=\"oversized-title\">Archivos rechazados:</p>\n <ul class=\"oversized-list\">\n <li *ngFor=\"let file of rejectedFiles\">\n {{ file.name }} — {{ formatSize(file.size) }}\n </li>\n </ul>\n </div>\n\n <div class=\"oversized-section\" *ngIf=\"allowedFiles.length\">\n <p class=\"oversized-title\">Archivos que sí se enviarán:</p>\n <ul class=\"oversized-list\">\n <li *ngFor=\"let file of allowedFiles\">{{ file.name }}</li>\n </ul>\n </div>\n <p *ngIf=\"!allowedFiles.length\">No hay archivos válidos para enviar.</p>\n\n <ng-template pTemplate=\"footer\">\n <button\n pButton\n type=\"button\"\n label=\"Cancelar\"\n class=\"p-button-text\"\n (click)=\"cancelarEnvio()\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n label=\"Continuar\"\n icon=\"pi pi-upload\"\n [disabled]=\"!allowedFiles.length\"\n (click)=\"continuarConPermitidos()\"\n ></button>\n </ng-template>\n</p-dialog>\n","// flexible-date.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe, registerLocaleData } from '@angular/common';\nimport localeEs from '@angular/common/locales/es';\n\nregisterLocaleData(localeEs);\n\n@Pipe({ name: 'flexibleDate' })\nexport class FlexibleDatePipe implements PipeTransform {\n private datePipe = new DatePipe('es'); // o el locale que uses\n\n transform(value: any, format: string = 'dd/MM/yyyy HH:mm'): string {\n const parsed = this.parseFlexibleDate(value);\n if (!parsed) return value ?? ''; // fallback: mostrar el string original en vez de explotar\n return this.datePipe.transform(parsed, format) ?? '';\n }\n\n private parseFlexibleDate(value: any): Date | null {\n if (!value) return null;\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n if (typeof value === 'number') return new Date(value);\n\n let str = String(value).trim();\n\n // Colapsar espacios múltiples: \"Jun 4 2026 5:03PM\" -> \"Jun 4 2026 5:03PM\"\n str = str.replace(/\\s+/g, ' ');\n\n // Intento 1: Date nativo (cubre ISO, \"Jun 4 2026 5:03PM\", RFC2822, etc.)\n let d = new Date(str);\n if (!isNaN(d.getTime())) return d;\n\n // Intento 2: formatos comunes tipo \"dd/MM/yyyy HH:mm\" o \"MM/dd/yyyy\"\n const slashMatch = str.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{2,4})(?:\\s+(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)?)?$/i);\n if (slashMatch) {\n let [, a, b, year, hh, mm, ss, ampm] = slashMatch;\n if (year.length === 2) year = '20' + year;\n let hour = hh ? parseInt(hh, 10) : 0;\n if (ampm) {\n if (/PM/i.test(ampm) && hour < 12) hour += 12;\n if (/AM/i.test(ampm) && hour === 12) hour = 0;\n }\n // Asumimos dd/MM/yyyy (ajustá si tu backend manda MM/dd/yyyy)\n d = new Date(+year, +a - 1, +b, hour, mm ? +mm : 0, ss ? +ss : 0);\n if (!isNaN(d.getTime())) return d;\n }\n\n // Intento 3: \"yyyy-MM-dd HH:mm:ss\" sin la 'T' de ISO\n const isoLike = str.replace(' ', 'T');\n d = new Date(isoLike);\n if (!isNaN(d.getTime())) return d;\n\n return null; // no se pudo parsear\n }\n}","import {\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIcon } from 'primeng/inputicon';\nimport { IconField } from 'primeng/iconfield';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SafePipe } from '../../pipes/safe.pipe';\nimport { UploadDialogComponent } from '../dialog/upload-dialog/upload-dialog.component';\nimport {\n DOCUMENT_SERVICE,\n DocumentGatewayService,\n} from '../../gateways/document.port';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SelectModule } from 'primeng/select';\nimport { FlexibleDatePipe } from '../../pipes/flexible-date.pipe';\nimport { canPreviewFile, getFileTypeIcon } from '../../utils/file-type.util';\nimport { DialogModule } from 'primeng/dialog';\n\ndeclare var cordova: any;\ndeclare var window: any;\n\n@Component({\n selector: 'lib-folder-files',\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n CheckboxModule,\n InputTextModule,\n InputIcon,\n IconField,\n PaginatorModule,\n SafePipe,\n UploadDialogComponent,\n SelectModule,\n FlexibleDatePipe,\n DialogModule,\n ],\n templateUrl: './folder-files.component.html',\n styleUrls: ['./folder-files.component.scss'],\n standalone: true,\n})\nexport class FolderFilesComponent implements OnChanges, OnDestroy {\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\n private searchSubject = new Subject<string>();\n private destroy$ = new Subject<void>();\n\n @Input() carpeta: any;\n @Input() isMobile: boolean = false;\n @Input() idKatios: any;\n @Input() server: string = '';\n @Input() subestado: string = '';\n @Input() requestData: any;\n @Input() useBreadcrumb: boolean = false;\n @Input() usesApi = true;\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\n @Input() allowedUploadTypes: string[] | undefined;\n @Output() onFileChange = new EventEmitter<any>();\n @Output() onCargarArchivo = new EventEmitter<any>();\n @Output() onEliminarMasivo = new EventEmitter<any[]>();\n @Output() onBack = new EventEmitter<void>();\n @Output() viewDocument = new EventEmitter<any>();\n\n items: any[] = [];\n page = 1;\n pageSize = 10;\n totalRecords = 0;\n totalPages = 0;\n first = 0;\n searchQuery = '';\n docsEliminables: any[] = [];\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n loading = false;\n allSelected = false;\n pageSizeOptions = [\n { label: '5/pág', value: 5 },\n { label: '10/pág', value: 10 },\n { label: '20/pág', value: 20 },\n ];\n current_path: string = '';\n current_label: string = '';\n displayView: boolean = false;\n\n constructor() {\n this.searchSubject\n .pipe(debounceTime(400), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe(() => {\n this.page = 1;\n if (this.usesApi) {\n this.loadFiles();\n } else {\n if (this.searchQuery.trim() === '' || !this.searchQuery) {\n this.items = this.carpeta.children;\n } else {\n this.items = this.carpeta.children.filter((item: any) =>\n item.label.toLowerCase().includes(this.searchQuery.toLowerCase()),\n );\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.current_path = '';\n this.current_label = '';\n this.displayView = false;\n if (changes['carpeta'] && this.carpeta) {\n this.init();\n }\n }\n\n private init(): void {\n this.docsEliminables = [];\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.searchQuery = '';\n this.page = 1;\n\n this.applyPermissions();\n\n if (!this.usesApi) {\n // Modo children pre-cargados\n if (!this.carpeta.children || this.carpeta.children.length === 0) {\n this.carpeta.children = [];\n }\n this.items = this.carpeta.children;\n this.items.forEach((item: any) => (item.delete = false));\n } else {\n // Modo API paginada\n this.items = [];\n this.loadFiles();\n }\n }\n\n private applyPermissions(): void {\n if (this.carpeta?.reglas && typeof this.carpeta.reglas === 'string') {\n this.carpeta.reglas = JSON.parse(this.carpeta.reglas);\n }\n if (\n !this.carpeta?.reglas?.permisos?.subestados &&\n this.carpeta?.reglas?.permisos\n ) {\n this.carpeta.reglas.permisos.cargarFront =\n this.carpeta.reglas.permisos.cargar;\n this.carpeta.reglas.permisos.borrarFront =\n this.carpeta.reglas.permisos.borrar;\n } else if (\n this.carpeta?.reglas?.permisos?.subestados &&\n this.subestado?.trim()\n ) {\n const sub = this.subestado.toLowerCase().trim();\n this.carpeta.reglas.permisos.cargarFront = Array.isArray(\n this.carpeta.reglas.permisos.subestados.cargar,\n )\n ? this.carpeta.reglas.permisos.subestados.cargar\n .map((c: any) => c.toLowerCase().trim())\n .includes(sub)\n : this.carpeta.reglas.permisos.cargar;\n this.carpeta.reglas.permisos.borrarFront = Array.isArray(\n this.carpeta.reglas.permisos.subestados.borrar,\n )\n ? this.carpeta.reglas.permisos.subestados.borrar\n .map((b: any) => b.toLowerCase().trim())\n .includes(sub)\n : this.carpeta.reglas.permisos.borrar;\n }\n }\n\n loadFiles(): void {\n this.loading = true;\n this.documentsService\n .getFilesByFolder(\n this.idKatios,\n this.carpeta.NMCo,\n this.requestData,\n this.page,\n this.pageSize,\n this.searchQuery,\n )\n .subscribe({\n next: (response: any) => {\n const res = response?.data ?? response;\n this.totalRecords = res.total ?? 0;\n this.page = res.page ?? 1;\n this.totalPages = res.totalPages ?? 0;\n this.items = res.items ?? [];\n this.items.forEach((item: any) => (item.delete = false));\n this.buildPaths(this.items);\n this.loading = false;\n },\n error: (error: any) => {\n console.error('Error loading files by folder:', error);\n this.loading = false;\n },\n });\n }\n\n onPageChange(event: any): void {\n this.first = event.first ?? 0;\n this.page = (event.page ?? 0) + 1;\n this.pageSize = event.rows ?? this.pageSize;\n this.loadFiles();\n }\n\n onSearchInput(): void {\n this.searchSubject.next(this.searchQuery);\n }\n\n /** Construye la ruta completa de cada archivo usando el server */\n private buildPaths(items: any[]): void {\n if (!this.server) return;\n items.forEach((item: any) => {\n if (item.Path && !item.Path.startsWith('http')) {\n let path = 'Imagenes/' + item.Path + item.label;\n path = path.replace(/\\\\/g, '/');\n item.Path = this.server + path;\n }\n });\n }\n\n fileChange(data: any): void {\n this.onFileChange.emit(data);\n }\n\n cargarArchivo(): void {\n this.onCargarArchivo.emit(this.carpeta);\n }\n\n openVisorDoc(item: any) {\n this.viewDocument.emit(item);\n }\n\n openCurrentInNewWindow(path?: string): void {\n window.open(path || this.current_path, '_blank').focus();\n }\n\n canPreview(label?: string, path?: string): boolean {\n return (\n canPreviewFile(label || this.current_label) ||\n canPreviewFile(path || this.current_path)\n );\n }\n\n previewFallbackIcon(label?: string, path?: string): string {\n return getFileTypeIcon(\n label || this.current_label || path || this.current_path,\n );\n }\n\n goBack(): void {\n this.onBack.emit();\n }\n\n onClickedCheckDelete(event: any, document: any): void {\n if (event.checked) this.docsEliminables.push(document);\n else\n this.docsEliminables = this.docsEliminables.filter(\n (doc) => doc !== document,\n );\n }\n\n emitEliminarMasivo(): void {\n this.onEliminarMasivo.emit(this.docsEliminables);\n }\n\n toggleSelectAll(): void {\n this.items.forEach((item) => (item.delete = this.allSelected));\n this.docsEliminables = this.allSelected ? [...this.items] : [];\n }\n\n // refresh(): void {\n // if (this.usesApi) {\n // this.loadFiles();\n // }\n // }\n\n onPageSizeChange(): void {\n this.first = 0;\n this.page = 1;\n this.loadFiles();\n }\n}\n","<div class=\"ff-layout\">\n <!-- Header fijo -->\n <div class=\"ff-header\">\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-arrow-left\"\n label=\"Volver\"\n (click)=\"goBack()\"\n ></button>\n </div>\n\n <!-- Toolbar: búsqueda + botones de acción -->\n <div class=\"ff-toolbar\">\n <p-iconfield class=\"ff-toolbar__search\">\n <p-inputicon class=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n [placeholder]=\"\n 'Buscar en ' +\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\n \"\n [(ngModel)]=\"searchQuery\"\n (input)=\"onSearchInput()\"\n class=\"w-full\"\n />\n </p-iconfield>\n\n <div class=\"ff-toolbar__actions\">\n <lib-upload-dialog\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\n [selectedDocument]=\"carpeta\"\n [allowedExtensions]=\"allowedUploadTypes\"\n (onUploaded)=\"fileChange($event)\"\n (loadFile)=\"cargarArchivo()\"\n >\n </lib-upload-dialog>\n\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-trash\"\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n (click)=\"emitEliminarMasivo()\"\n [disabled]=\"docsEliminables.length === 0\"\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\n >\n <span class=\"ff-btn-label\"\n >Eliminar ({{ docsEliminables.length }})</span\n >\n </button>\n </div>\n </div>\n\n <!-- Fila seleccionar todo / total archivos -->\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\n <div class=\"ff-select-row__left\">\n <p-checkbox\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n [binary]=\"true\"\n [(ngModel)]=\"allSelected\"\n (onChange)=\"toggleSelectAll()\"\n >\n </p-checkbox>\n <span\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n class=\"ff-select-row__label\"\n >Seleccionar todo</span\n >\n </div>\n <span class=\"ff-select-row__count\"\n >{{ totalRecords || items.length }}\n {{\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\n }}</span\n >\n </div>\n </div>\n\n <!-- Contenido scrollable -->\n <div class=\"ff-file-list-wrapper\">\n <!-- Loading -->\n <div *ngIf=\"loading\" class=\"ff-loading\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n\n <!-- Lista de archivos -->\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\n <div\n class=\"ff-file-item\"\n *ngFor=\"let item of items\"\n (click)=\"openVisorDoc(item)\"\n >\n <p-checkbox\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n [binary]=\"true\"\n [(ngModel)]=\"item.delete\"\n (onChange)=\"onClickedCheckDelete($event, item)\"\n (click)=\"$event.stopPropagation()\"\n >\n </p-checkbox>\n\n <div class=\"ff-file-item__preview\">\n <i\n *ngIf=\"!canPreview(item.label, item.Path)\"\n class=\"pi ff-file-item__frame ff-file-item__icon\"\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\n ></i>\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\n <embed\n *ngIf=\"carpeta.TipoArchivo == '2'\"\n class=\"ff-file-item__frame\"\n [src]=\"item.Path | safe\"\n />\n <img\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\n class=\"ff-file-item__frame\"\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\n />\n <iframe\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\n class=\"ff-file-item__frame\"\n [src]=\"item.Path | safe\"\n frameborder=\"0\"\n ></iframe>\n </ng-container>\n </div>\n\n <div class=\"ff-file-item__info\">\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\n >Fecha Subida:\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\n >\n <span\n class=\"ff-file-item__date\"\n *ngIf=\"item.FechaSubida && isMobile\"\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\n >\n <i\n class=\"pi pi-external-link ff-file-item__open\"\n (click)=\"\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\n \"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"Abrir en nueva ventana\"\n (keydown.enter)=\"\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\n \"\n ></i>\n </div>\n </div>\n </div>\n\n <!-- Sin resultados -->\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\n Sin documentos cargados\n </div>\n </div>\n\n <!-- Footer fijo: paginación compacta -->\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\n <div class=\"ff-pagination\">\n <p-select\n [options]=\"pageSizeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange()\"\n >\n </p-select>\n <p-paginator\n [first]=\"first\"\n [rows]=\"pageSize\"\n [totalRecords]=\"totalRecords\"\n (onPageChange)=\"onPageChange($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [showPageLinks]=\"false\"\n [showFirstLastIcon]=\"false\"\n >\n </p-paginator>\n </div>\n </div>\n</div>\n","/**\n * Traduce el error de una llamada del puerto a un texto para el usuario, en español y de usted.\n *\n * Nunca devuelve el mensaje del backend, `err.message`, JSON ni texto en inglés: el texto sale\n * siempre de este archivo, según el código de error. El detalle técnico va a `console.error`\n * con el prefijo `[sf-documents]` para soporte.\n *\n * Formas de error que llegan hoy:\n * - DocumentService directo (documents-manager-ui): `err.error` es su `ApiResponse`,\n * `{ success, statusCode, message, errors: ['CODIGO'] }`.\n * - Vía TFAServices (TFB): la fachada lanza `new Exception(response.Content)` y responde\n * `{ success: false, message: 'Error: {json de DocumentService}' }`. Se desenvuelve ese JSON.\n */\n\nexport const GENERIC_ERROR_MESSAGE =\n 'Ocurrió un error inesperado. Intente de nuevo.';\n\nexport const NETWORK_ERROR_MESSAGE =\n 'No hay conexión con el servidor. Revise su conexión e intente de nuevo.';\n\n/**\n * Códigos de `errors[0]` que devuelve DocumentService (`ExceptionHandlerMiddleware` y\n * `Core/Exceptions`) → texto para el usuario. Un código que no esté aquí usa el genérico.\n */\nexport const ERROR_CODE_MESSAGES: Readonly<Record<string, string>> = {\n DOCUMENT_PART_MISSING:\n 'Falta un documento requerido en el gestor para esta solicitud. Revise las carpetas e intente de nuevo.',\n DOCUMENT_TOO_LARGE:\n 'El documento supera el tamaño máximo permitido. Contacte a soporte.',\n DOCUMENT_GENERATION_ERROR:\n 'Una parte del documento no se pudo producir. Intente de nuevo; si persiste, contacte a soporte.',\n DOCUMENT_CONFIGURATION_ERROR:\n 'El documento no está configurado correctamente. Contacte a soporte.',\n RESOURCE_NOT_FOUND:\n 'No se encontró la información solicitada. Recargue la pantalla e intente de nuevo.',\n VALIDATION_ERROR: 'Revise los datos ingresados e intente de nuevo.',\n INVALID_ARGUMENT: 'Revise los datos ingresados e intente de nuevo.',\n BATCH_TOO_LARGE:\n 'Los archivos superan el tamaño máximo permitido por envío. Suba menos archivos a la vez.',\n REQUEST_TIMEOUT:\n 'El servidor tardó demasiado en responder. Intente de nuevo.',\n};\n\n/** Prefijo con el que TFAServices envuelve el cuerpo de DocumentService (`$\"Error: {ex.Message}\"`). */\nconst TFA_WRAPPER_PREFIX = 'Error: ';\n\nfunction tryParseObject(text: unknown): Record<string, any> | null {\n if (typeof text !== 'string') return null;\n const trimmed = text.trim();\n if (!trimmed.startsWith('{')) return null;\n try {\n const parsed = JSON.parse(trimmed);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed\n : null;\n } catch {\n return null;\n }\n}\n\n/** Cuerpo de la respuesta de error, ya desenvuelto si viene de TFAServices. */\nfunction extractBody(err: any): Record<string, any> | null {\n let body: Record<string, any> | null = null;\n const raw = err?.error;\n\n if (raw && typeof raw === 'object') {\n body = raw;\n } else if (typeof raw === 'string') {\n body = tryParseObject(raw);\n } else if (err && typeof err === 'object' && Array.isArray(err.errors)) {\n // El host ya entregó el cuerpo (p. ej. un catchError que hace throwError(() => e.error)).\n body = err;\n }\n\n const message = body?.['message'];\n if (typeof message === 'string' && message.startsWith(TFA_WRAPPER_PREFIX + '{')) {\n const inner = tryParseObject(message.slice(TFA_WRAPPER_PREFIX.length));\n if (inner) body = inner;\n }\n return body;\n}\n\nfunction extractCode(body: Record<string, any> | null): string | null {\n const first = Array.isArray(body?.['errors']) ? body!['errors'][0] : null;\n return typeof first === 'string' && first.trim() ? first.trim() : null;\n}\n\n/**\n * Texto para el usuario a partir de un error del puerto.\n * @param context Qué se estaba haciendo, solo para el log de soporte (p. ej. 'generateDocument').\n */\nexport function getUserErrorMessage(err: unknown, context = ''): string {\n const e = err as any;\n const body = extractBody(e);\n const code = extractCode(body);\n const status = typeof e?.status === 'number' ? e.status : null;\n\n console.error(`[sf-documents]${context ? ' ' + context : ''}`, {\n status,\n statusCode: body?.['statusCode'] ?? null,\n code,\n detail: body?.['message'] ?? e?.message ?? e,\n });\n\n if (status === 0) return NETWORK_ERROR_MESSAGE;\n if (code && ERROR_CODE_MESSAGES[code]) return ERROR_CODE_MESSAGES[code];\n return GENERIC_ERROR_MESSAGE;\n}\n","import {\n ApplicationRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ConfirmationService, MessageService, TreeNode } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { MessageModule } from 'primeng/message';\nimport * as _ from 'lodash';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { PanelModule } from 'primeng/panel';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DialogModule } from 'primeng/dialog';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SafePipe } from './pipes/safe.pipe';\nimport {\n DOCUMENT_SERVICE,\n DocumentGatewayService,\n} from './gateways/document.port';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIcon } from 'primeng/inputicon';\nimport { IconField } from 'primeng/iconfield';\nimport { FolderFilesComponent } from './components/folder-files/folder-files.component';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { SfDocumentsService } from './sf-documents.service';\nimport { finalize, switchMap, tap } from 'rxjs/operators';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { of } from 'rxjs';\nimport { SfDocumentNavigationState } from './models/navigation-state.model';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { canPreviewFile, getFileTypeIcon } from './utils/file-type.util';\nimport { SF_DOCUMENTS_TOAST_KEY } from './utils/toast.util';\nimport { getUserErrorMessage } from './utils/error-message.util';\n\ndeclare var cordova: any;\ndeclare var window: any;\n\n@Component({\n selector: 'app-sf-documents',\n imports: [\n ToastModule,\n ButtonModule,\n ConfirmDialogModule,\n PanelModule,\n CheckboxModule,\n DialogModule,\n CommonModule,\n FormsModule,\n SafePipe,\n InputTextModule,\n InputIcon,\n IconField,\n FolderFilesComponent,\n DropdownModule,\n DatePickerModule,\n SkeletonModule,\n MessageModule,\n ],\n templateUrl: './sf-documents.component.html',\n styleUrls: ['./sf-documents.component.scss'],\n // La librería provee su propio MessageService y pinta su propio <p-toast>: así sus avisos se\n // ven aunque el host no tenga un toast al alcance (p. ej. la vista embebida) y no se mezclan\n // con los del host. Mismo criterio que ConfirmationService.\n providers: [ConfirmationService, MessageService],\n standalone: true,\n})\nexport class SfDocumentsComponent implements OnChanges {\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\n @Input() accion: string = '';\n @Input() entidad: string = '';\n @Input() ndoc: string = '';\n @Input() tdoc: string = '';\n @Input() tipo: string = '';\n //Información necesaria para cargar documentos de productos\n @Input() Kasociada: string = '';\n @Input() Producto: string = '';\n @Input() Solicitud: string = '';\n @Input() oSession: any;\n @Input() perfilDocumentos: any;\n @Input() subestado: string = '';\n @Input() isMobile: boolean = false;\n @Output() nextTabPapa: EventEmitter<number> = new EventEmitter<number>();\n\n @Input() bAtras: boolean = false;\n @Input() bFinal: boolean = false;\n @Input() botones: boolean = true;\n @Input() aplFiltro: boolean = false;\n\n @Input() nmco: string[] = [];\n @Input() useBreadcrumb: boolean = false;\n\n @Input() usesApi: boolean = true;\n\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería (pdf, xls, xlsx). */\n @Input() allowedUploadTypes: string[] | undefined;\n\n @Output() onNavigationChange = new EventEmitter<SfDocumentNavigationState>();\n\n @Input() server: string = '';\n valorFiltro: string = '';\n\n tab = 1;\n enProceso = false;\n carpetaSeleccionada: any;\n files: any;\n filesFilter: any;\n imagePathInput: any;\n documentoSeleccionado: any;\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n file: any;\n urlDoc: any;\n pdfUrl: any;\n scanFileList = new Array<any>();\n displayPDF: boolean = false;\n\n @ViewChild('pdf', { read: ElementRef }) public panel!: ElementRef<any>;\n UsuarioNdoc: any;\n UsuarioTdoc: any;\n @Input() idKatios: any;\n\n displayGenerate = false;\n /** Error de la última generación; se muestra dentro del diálogo hasta reintentar o cambiar el tipo. */\n generateError: string | null = null;\n\n readonly toastKey = SF_DOCUMENTS_TOAST_KEY;\n\n canGenerate = true;\n\n documentTypes: any[] = [];\n documentsToGenerate: any[] = [];\n documentsToGenerateMap: Record<string, any> = {};\n dynamicParams: any[] = [];\n dynamicValues: Record<string, any> = {};\n selectedDocType: string | null = null;\n selectedRange: string | null = null;\n current_path: string = '';\n current_label: string = '';\n displayView: boolean = false;\n\n constructor(\n private sanitizer: DomSanitizer,\n public snackBar: MessageService,\n private appRef: ApplicationRef,\n private confirmationService: ConfirmationService,\n public documentService: SfDocumentsService,\n ) {}\n\n // ngOnInit() {\n // if (this.oSession != null && this.oSession.UsuarioSistema.TDOC !== undefined && this.oSession.UsuarioSistema.NDOC !== undefined) {\n // this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\n // this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\n // }\n // if (this.tipo && this.perfilDocumentos) {\n // this.cargarParametros(this.tipo)\n // }\n // }\n ngOnChanges(changes: SimpleChanges): void {\n this.files = [];\n this.filesFilter = [];\n this.imagePathInput = null;\n this.carpetaSeleccionada = null;\n this.documentoSeleccionado = null;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.file = null;\n this.urlDoc = null;\n this.pdfUrl = null;\n this.scanFileList = new Array<any>();\n this.displayPDF = false;\n this.displayGenerate = false;\n this.generateError = null;\n this.canGenerate = true;\n this.documentTypes = [];\n this.documentsToGenerate = [];\n this.documentsToGenerateMap = {};\n this.dynamicParams = [];\n this.dynamicValues = {};\n this.selectedDocType = null;\n this.selectedRange = null;\n if (\n this.oSession != null &&\n this.oSession.UsuarioSistema.TDOC !== undefined &&\n this.oSession.UsuarioSistema.NDOC !== undefined\n ) {\n this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\n this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\n }\n if (this.tipo && this.perfilDocumentos) {\n this.cargarParametros(this.tipo);\n }\n }\n\n cargarParametros(tipo: string) {\n if (tipo !== '1') return;\n\n this.documentService.loadingData = true;\n this.documentService.loading = false;\n const data = {\n action: this.accion,\n entity: this.entidad,\n tdoc: this.tdoc,\n ndoc: this.ndoc,\n request: this.Solicitud,\n documentProfile: this.perfilDocumentos,\n product: this.Producto,\n };\n\n this.documentsService\n .getFolders(this.idKatios, data)\n .pipe(\n tap((response: any) => {\n let res = response.data;\n if (response.data.RESPUESTA) res = response.data.RESPUESTA;\n this.okCargoArbol(res);\n }),\n switchMap(() =>\n this.Solicitud\n ? this.documentsService.getDocumentsToGenerate(\n this.idKatios,\n this.Solicitud,\n )\n : of(null),\n ),\n tap((resp: any) => {\n const list = resp?.data ?? []; // según tu JSON real\n this.documentsToGenerate = list;\n\n this.documentsToGenerateMap = {};\n list.forEach((d: any) => (this.documentsToGenerateMap[d.idDoc] = d));\n\n // dropdown: usa idDoc pero mantén objeto completo en map\n this.documentTypes = list.map((d: any) => ({\n label: d.description,\n code: d.idDoc,\n }));\n }),\n finalize(() => {\n this.documentService.loadingData = false;\n }),\n )\n .subscribe({\n error: (error: any) => {\n this.errorCargarArbol(error);\n },\n });\n\n this.tab = 1;\n this.documentoSeleccionado = null;\n this.emitNavigationState();\n }\n expandAll() {\n this.files.forEach((node: any) => {\n this.expandRecursive(node, true);\n });\n }\n\n private expandRecursive(node: TreeNode, isExpand: boolean) {\n node.expanded = isExpand;\n var objeto: any;\n objeto = node;\n if (node.children && node.children?.length > 0) {\n node.children.forEach((childNode) => {\n this.expandRecursive(childNode, isExpand);\n });\n } else if (objeto.Path !== undefined) {\n var path = 'Imagenes/' + objeto.Path + objeto.label;\n var re = /[\\\\]/gi;\n path = path.replace(re, '/');\n objeto.Path = this.server + path;\n //this.sanitizer.bypassSecurityTrustUrl(this.server + path)\n }\n }\n\n public okCargoArbol = (iArbol: any) => {\n if (!iArbol.CARPETA && iArbol.length === undefined) {\n iArbol = new Array(iArbol);\n } else if (iArbol.CARPETA.length === undefined) {\n iArbol = new Array(iArbol.CARPETA);\n }\n\n iArbol.forEach((element: any) => {\n this.convertirArrayChildren(element);\n });\n\n //\n this.filtrarTipoDocumento(iArbol);\n //\n this.files = iArbol;\n this.filesFilter = iArbol;\n this.expandAll();\n this.documentService.loadingData = false;\n };\n public errorCargarArbol = (iError: any) => {\n this.message(\n 'error',\n 'Error al traer la información',\n getUserErrorMessage(iError, 'getFolders'),\n );\n this.documentService.loadingData = false;\n };\n\n // onClickedCheckDelete($event: any, document: any) {\n // if ($event.checked) this.docsEliminables.push(document);\n // else this.docsEliminables = this.docsEliminables.filter(doc => doc !== document);\n // }\n\n funcOkDelDocumentMasivo = (docsEliminables: any[]) => {\n this.totalDocsEliminadosApi.existoso += 1;\n if (\n this.totalDocsEliminadosApi.existoso +\n this.totalDocsEliminadosApi.fallido ===\n docsEliminables.length\n ) {\n this.cargarParametros(this.tipo);\n if (this.totalDocsEliminadosApi.fallido > 0)\n this.message(\n 'warn',\n '',\n 'Algunos documentos no pudieron ser eliminados',\n );\n else\n this.message('success', '', 'Documentos eliminados satisfactoriamente');\n }\n };\n\n funcErrDelDocumentMasivo = (docsEliminables: any[]) => {\n this.totalDocsEliminadosApi.fallido += 1;\n if (\n this.totalDocsEliminadosApi.existoso +\n this.totalDocsEliminadosApi.fallido ===\n docsEliminables.length\n ) {\n this.cargarParametros(this.tipo);\n this.message('warn', '', 'Algunos documentos no pudieron ser eliminados');\n }\n };\n\n eliminarMasivo(docsEliminables: any[]) {\n this.confirmationService.confirm({\n message: `¿Desea eliminar los ${docsEliminables.length} documentos seleccionados?`,\n acceptLabel: 'Si',\n rejectLabel: 'No',\n accept: () => {\n this.documentService.loading = true;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n docsEliminables.forEach((doc) => {\n let data = { code: doc.codigo, status: 'DES' };\n this.documentsService.updateStatus(this.idKatios, data).subscribe({\n next: (response: any) => {\n this.funcOkDelDocumentMasivo(docsEliminables);\n },\n error: (error: any) => {\n this.documentService.loading = false;\n this.funcErrDelDocumentMasivo(docsEliminables);\n },\n });\n });\n },\n });\n }\n\n filtrarTipoDocumento(iArbol: any) {\n if (this.nmco.length !== 0) {\n iArbol.forEach((element: any) => {\n element.children = element.children.filter((child: any) =>\n this.nmco.includes(child.NMCo),\n );\n });\n }\n }\n\n convertirArrayChildren(node: any) {\n if (node.children === undefined) node.children = [];\n else if (node.children.length == undefined) {\n node.children = new Array(node.children);\n }\n node.children.forEach((childNode: any) => {\n this.convertirArrayChildren(childNode);\n });\n }\n\n // takePhotoClick() {\n // this.documentsService.openCamera(this.ok_openCamera, this.error_openCamera);\n // }\n /////Cuando se cargar archivos adjuntos\n fileChange(data: any) {\n const fileList = data.fileList;\n const tagValue = data.tagValue;\n this.file = fileList[0];\n this.imagePathInput = tagValue;\n this.generarData(fileList);\n }\n\n // ok_openCamera = (imageUri: any) => {\n // this.makeFileIntoBlob(imageUri)\n // .then((file: Blob) => {\n // this.appRef.tick();\n // if (file.size > 1000000) {\n // if (confirm(\"Este archivo es bastate pesado, le recomendamos bajar la calidad de la cámara. ¿Desea subir este archivo?\")) {\n // this.loadFileToList(file);\n // }\n // } else {\n // this.loadFileToList(file);\n // }\n // this.documentService.loading = false;\n // })\n // .catch((error: Error) => {\n // console.error('Error processing camera image:', error);\n // this.message(\"Error al procesar la imagen de la cámara\", \"Error\");\n // this.documentService.loading = false;\n // });\n // }\n\n loadFileToList(file: any) {\n setTimeout(() => {\n file['name'] = 'scan' + Date.now() + this.scanFileList.length + '.jpg';\n this.scanFileList.push(file);\n this.scanFileList = this.scanFileList.slice();\n this.documentService.loading = false;\n this.message('success', '', 'Archivo cargado exitosamente');\n\n this.appRef.tick();\n }, 200);\n }\n\n subirFotosScan() {\n this.generarData(this.scanFileList);\n }\n // error_openCamera = (err: any) => {\n // console.log(err);\n // this.message(\"No se pudo acceder a la camara\", \"Error\")\n // }\n\n noZonePatch(cb: () => void) {\n const orig = FileReader;\n const unpatched = ((window as any).FileReader as any)\n .__zone_symbol__OriginalDelegate;\n (window as any).FileReader = unpatched;\n cb();\n (window as any).FileReader = orig;\n }\n\n // makeFileIntoBlob(_imagePath: any): Promise<Blob> {\n // this.documentService.loading = true;\n // // INSTALL PLUGIN - cordova plugin add cordova-plugin-file\n // return new Promise((resolve, reject) => {\n // try {\n // window.resolveLocalFileSystemURL(_imagePath, (fileEntry: any) => {\n // fileEntry.file((resFile: any) => {\n // this.noZonePatch(() => {//! Alert 1: Comentarear esta linea y una de de abajo para ambiente de prueba\n // var reader = new FileReader();\n\n // reader.onloadend = (evt: any) => {\n // var imgBlob: any = new Blob([evt.target.result], { type: 'image/jpeg' });\n // imgBlob.name = 'scan.jpg';\n // resolve(imgBlob);\n // };\n\n // reader.onerror = (e) => {\n // console.log('Failed file read: ' + e.toString());\n // reject(e);\n // };\n // reader.readAsArrayBuffer(resFile);\n // });//!Comentarear esta linea y una de de arriba para ambiente de prueba\n // });\n // }, (error: any) => {\n // console.error('Error resolving file system URL:', error);\n // reject(error);\n // });\n // } catch (ex) {\n // console.error('Error in makeFileIntoBlob:', ex);\n // reject(ex);\n // }\n // });\n // }\n\n subirImagen(data: any, fileList: any) {\n this.documentService.loading = true;\n const formData: FormData = new FormData();\n var dataDocs;\n var sIdKatios = this.idKatios;\n dataDocs = { data: data };\n formData.append('data', JSON.stringify(dataDocs));\n formData.append('merge', 'false');\n\n for (let _i = 0; _i < fileList.length; _i++) {\n formData.append('files', fileList[_i], fileList[_i].name);\n }\n\n this.documentsService.uploadFiles(sIdKatios, formData).subscribe({\n next: (response: any) => {\n this.scanFileList = new Array<any>();\n this.message(\n 'success',\n 'Felicidades',\n 'Se almacenó el documento correctamente',\n );\n this.cargarParametros(this.tipo);\n this.documentService.loading = false;\n this.appRef.tick();\n },\n error: (err: any) => {\n this.documentService.loading = false;\n this.message(\n 'error',\n 'Se presentaron inconvenientes almacenando el documento',\n getUserErrorMessage(err, 'uploadFiles'),\n );\n },\n });\n }\n\n generarData(fileList: any) {\n this.documentService.loading = true;\n var sPath1;\n var dataClientes;\n let sPaths = '';\n if (this.documentoSeleccionado.Tipo.trim().toUpperCase() == 'PERSONA') {\n sPath1 =\n this.documentoSeleccionado.Tipo.trim() +\n '\\\\' +\n this.tdoc.trim() +\n '\\\\' +\n this.ndoc.trim() +\n '\\\\Cliente\\\\' +\n this.documentoSeleccionado.NMCo.trim();\n } else {\n //Kasociada\n //producto\n //Falta numero de solicitud\n\n sPath1 =\n this.documentoSeleccionado.Tipo.trim() +\n '\\\\' +\n this.Kasociada +\n '\\\\' +\n this.Producto +\n '\\\\' +\n this.Solicitud +\n '\\\\' +\n this.documentoSeleccionado.NMCo;\n }\n\n dataClientes = {\n Tipo: this.documentoSeleccionado.Tipo,\n id: '1',\n documento: this.documentoSeleccionado.NMCo,\n tdoc: this.tdoc.trim(),\n ndoc: this.ndoc.trim(),\n IdProducto: this.Solicitud,\n TipoProducto: this.Producto,\n Kasociada: this.Kasociada,\n archivoUpload: fileList[0],\n nombre: this.tdoc.trim() + '-' + this.ndoc.trim(),\n fileCargado: fileList[0],\n pathArchivo: sPath1,\n TipoArchivo: this.documentoSeleccionado.TipoArchivo,\n };\n sPaths = sPaths + sPath1 + ',';\n this.subirImagen(dataClientes, fileList);\n }\n\n cargarArchivo(iNodo: any) {\n this.scanFileList = new Array<any>();\n this.documentoSeleccionado = iNodo;\n }\n\n async seleccionoDocs(iNodo: any) {\n var path = iNodo.Path + iNodo.label;\n this.pdfUrl = '//imagenes//' + iNodo.idKatios + '//' + path;\n this.pdfUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfUrl);\n this.gotoBottom();\n }\n\n message(severity: string, summary: string, message: any) {\n this.snackBar.add({\n key: SF_DOCUMENTS_TOAST_KEY,\n severity: severity,\n summary: summary,\n detail: message,\n life: 4000,\n });\n }\n\n public gotoBottom(): void {\n window.scrollBy(0, this.panel.nativeElement.scrollHeight);\n }\n\n get requestData(): any {\n return {\n action: this.accion,\n entity: this.entidad,\n tdoc: this.tdoc,\n ndoc: this.ndoc,\n request: this.Solicitud,\n documentProfile: this.perfilDocumentos,\n product: this.Producto,\n };\n }\n\n public VerDetalleTab(items: any) {\n this.carpetaSeleccionada = items;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.tab = 2;\n this.emitNavigationState();\n }\n\n goToTab(tab: any) {\n this.tab = tab;\n this.emitNavigationState();\n }\n\n private emitNavigationState(): void {\n if (!this.useBreadcrumb) return;\n const state: SfDocumentNavigationState = { tab: this.tab };\n if (this.tab === 2 && this.carpetaSeleccionada) {\n state.folderLabel = (this.carpetaSeleccionada.label || '').replace(\n '#toolbar=0&navpanes=0&statusbar=0',\n '',\n );\n }\n this.onNavigationChange.emit(state);\n }\n\n next(iValor: any) {\n if (iValor < 0) {\n this.nextTabPapa.emit(iValor);\n } else {\n var respuesta = '';\n if (this.files) respuesta = this.valorDocumentosPendientes(this.files[0]);\n\n if (respuesta == '') {\n this.nextTabPapa.emit(iValor);\n } else {\n this.message('warn', 'Ups!', respuesta);\n }\n }\n }\n\n valorDocumentosPendientes(carpetas: any) {\n var respuesta = '';\n if (carpetas.children) {\n carpetas.children.forEach((carpeta: any) => {\n if (\n carpeta.Obligatorio == 1 &&\n (!carpeta.children || carpeta.children.length == 0)\n )\n respuesta = 'Falta ' + carpeta.label;\n });\n }\n return respuesta;\n }\n\n filtrarDocumentos() {\n this.filesFilter = _.cloneDeep(this.files);\n for (let i = 0; i < this.files.length; i++) {\n let node = [];\n for (let j = 0; j < this.files[i].children.length; j++) {\n let file = this.files[i].children[j];\n if (\n file.label.toLowerCase().indexOf(this.valorFiltro.toLowerCase()) == 0\n )\n node.push(file);\n }\n this.filesFilter[i].children = node;\n }\n }\n\n openGenerateDialog() {\n this.selectedDocType = null;\n this.selectedRange = null;\n this.generateError = null;\n this.displayGenerate = true;\n }\n\n generateDocument() {\n if (!this.selectedDocType) return;\n // Un error anterior no debe quedar junto al aviso de un parámetro faltante.\n this.generateError = null;\n\n // Validación mínima: si hay params, exigir que no estén vacíos\n for (const p of this.dynamicParams || []) {\n const key = p.name;\n const v = this.dynamicValues?.[key];\n if (v === null || v === undefined || v === '') {\n this.message('warn', '', `Falta el parámetro ${p.description}`);\n return;\n }\n }\n\n // construir params\n const paramsToSend: any = {};\n for (const p of this.dynamicParams || []) {\n const key = p.name;\n const raw = this.dynamicValues?.[key];\n\n paramsToSend[p.name] =\n (p.type || '').toLowerCase() === 'date' ? this.toYYYYMMDD(raw) : raw;\n }\n\n this.enProceso = true;\n\n const payload = {\n params: paramsToSend,\n };\n this.documentsService\n .generateDocument(\n this.idKatios,\n this.selectedDocType,\n this.Solicitud,\n payload,\n )\n .subscribe({\n next: () => {\n this.displayGenerate = false;\n this.message('success', '', 'Documento en generación');\n this.cargarParametros(this.tipo);\n this.enProceso = false;\n },\n error: (err: any) => {\n // El diálogo queda abierto con el error visible (p-message, role=\"alert\") para\n // corregir o reintentar. El toast solo si el usuario ya lo cerró: así un lector de\n // pantalla no anuncia el mismo error dos veces.\n this.generateError = getUserErrorMessage(err, 'generateDocument');\n if (!this.displayGenerate) {\n this.message(\n 'error',\n 'No se pudo generar el documento',\n this.generateError,\n );\n }\n this.enProceso = false;\n },\n });\n }\n private toYYYYMMDD(value: any): string | null {\n if (!value) return null;\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return null;\n\n // ISO: 2025-12-19T05:00:00.000Z -> 2025-12-19\n return d.toISOString().slice(0, 10);\n }\n onDocTypeChange() {\n const doc = this.selectedDocType\n ? this.documentsToGenerateMap[this.selectedDocType]\n : null;\n\n this.generateError = null;\n this.dynamicParams = doc?.params ?? [];\n this.dynamicValues = {}; // reset valores\n\n // valores default opcionales\n for (const p of this.dynamicParams) {\n const key = p.name;\n this.dynamicValues[key] = null;\n }\n }\n\n openVisorDoc(item: any) {\n if (this.carpetaSeleccionada.TipoArchivo == '1' && this.isMobile) {\n //is mobile\n cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');\n } else {\n this.current_path = item.Path;\n this.current_label = item.label;\n this.displayView = true;\n }\n }\n\n openCurrentInNewWindow(path?: string): void {\n window.open(path || this.current_path, '_blank').focus();\n }\n\n canPreview(label?: string, path?: string): boolean {\n return (\n canPreviewFile(label || this.current_label) ||\n canPreviewFile(path || this.current_path)\n );\n }\n\n previewFallbackIcon(label?: string, path?: string): string {\n return getFileTypeIcon(\n label || this.current_label || path || this.current_path,\n );\n }\n}\n","<div class=\"sf-doc-layout\">\n <div class=\"sf-doc-fixed\">\n <div class=\"buttons\" *ngIf=\"botones\">\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\n <button\n pButton\n type=\"button\"\n label=\"Atras\"\n icon=\"pi pi-arrow-left\"\n (click)=\"next(-1)\"\n ></button>\n </div>\n <div\n class=\"div-table-col50\"\n style=\"text-align: center\"\n *ngIf=\"!bFinal && botones\"\n >\n <button\n pButton\n type=\"button\"\n label=\"Siguiente\"\n icon=\"pi pi-arrow-right\"\n (click)=\"next(1)\"\n ></button>\n </div>\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\n <button\n pButton\n type=\"button\"\n label=\"Finalizar\"\n icon=\"pi pi-home\"\n (click)=\"next(0)\"\n ></button>\n </div>\n </div>\n <!-- Toolbar superior (solo tab 1) -->\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\n <p-iconfield>\n <p-inputicon class=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n placeholder=\"Buscar carpeta...\"\n [(ngModel)]=\"valorFiltro\"\n (keyup)=\"filtrarDocumentos()\"\n class=\"w-full\"\n [disabled]=\"documentService.loadingData\"\n />\n </p-iconfield>\n </div>\n\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\n <button\n pButton\n type=\"button\"\n label=\"Generar documento\"\n icon=\"pi pi-plus\"\n class=\"p-button-sm\"\n (click)=\"openGenerateDialog()\"\n [disabled]=\"enProceso || !canGenerate\"\n ></button>\n </div>\n </div>\n </div>\n <p-confirmDialog\n header=\"Atencion\"\n icon=\"pi pi-exclamation-triangle\"\n ></p-confirmDialog>\n <!-- Avisos de la librería: solo los de su key, así el toast del host no los duplica. -->\n <p-toast\n [key]=\"toastKey\"\n [breakpoints]=\"{ '576px': { width: 'calc(100vw - 40px)' } }\"\n ></p-toast>\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\n <div class=\"folder-list\">\n @if (!documentService.loadingData) {\n <ng-container *ngFor=\"let carpeta of filesFilter\">\n <div class=\"folder-list\">\n <div\n class=\"folder-item\"\n *ngFor=\"let item of carpeta.children\"\n (click)=\"VerDetalleTab(item)\"\n >\n <i\n class=\"pi pi-folder folder-item__icon\"\n [ngStyle]=\"{\n color:\n item.children?.length > 0 || item.fileCount > 0\n ? 'green'\n : 'red',\n }\"\n ></i>\n <div class=\"folder-item__info\">\n <span class=\"folder-item__name\">{{ item.label }}</span>\n <span\n class=\"folder-item__count\"\n *ngIf=\"item.children?.length > 0\"\n >{{ item.children.length }}\n {{\n item.children.length === 1 ? \"archivo\" : \"archivos\"\n }}</span\n >\n <span\n class=\"folder-item__count\"\n *ngIf=\"\n (!item.children || item.children.length === 0) &&\n item.fileCount\n \"\n >{{ item.fileCount }}\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\n >\n <span\n class=\"folder-item__count\"\n *ngIf=\"\n (!item.children || item.children.length === 0) &&\n !item.fileCount\n \"\n >0 archivos</span\n >\n </div>\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\n </div>\n </div>\n </ng-container>\n } @else {\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n }\n </div>\n <ng-container *ngIf=\"botones\">\n <div class=\"buttons\">\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\n <button\n pButton\n type=\"button\"\n label=\"Atras\"\n icon=\"pi pi-arrow-left\"\n (click)=\"next(-1)\"\n ></button>\n </div>\n <div\n class=\"div-table-col50\"\n style=\"text-align: center\"\n *ngIf=\"!bFinal && botones\"\n >\n <button\n pButton\n type=\"button\"\n label=\"Siguiente\"\n icon=\"pi pi-arrow-right\"\n (click)=\"next(1)\"\n ></button>\n </div>\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\n <button\n pButton\n type=\"button\"\n label=\"Finalizar\"\n icon=\"pi pi-home\"\n (click)=\"next(0)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\n <lib-folder-files\n [carpeta]=\"carpetaSeleccionada\"\n [isMobile]=\"isMobile\"\n [idKatios]=\"idKatios\"\n [server]=\"server\"\n [subestado]=\"subestado\"\n [requestData]=\"requestData\"\n [useBreadcrumb]=\"useBreadcrumb\"\n [usesApi]=\"usesApi\"\n [allowedUploadTypes]=\"allowedUploadTypes\"\n (onFileChange)=\"fileChange($event)\"\n (onCargarArchivo)=\"cargarArchivo($event)\"\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\n (onBack)=\"goToTab('1')\"\n (viewDocument)=\"openVisorDoc($event)\"\n >\n </lib-folder-files>\n </div>\n</div>\n\n<!-- <ng-template #scanContent>\n <div class=\"div-table\">\n <div class=\"div-table-row\" style=\"text-align: center\">\n <h4>Escanear documentos</h4>\n </div>\n <div class=\"div-table-row\" style=\"text-align: center\">\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\n </div>\n <div class=\"div-table-row\" style=\"text-align: center\">\n <label (click)=\"takePhotoClick()\" class=\"btn\">\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\n </label>\n\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\n </label>\n </div>\n </div>\n</ng-template> -->\n\n<p-dialog\n [(visible)]=\"displayView\"\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\n [modal]=\"true\"\n [style]=\"{ width: '70vw' }\"\n appendTo=\"body\"\n>\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\n <p>La vista previa no está disponible para este tipo de archivo.</p>\n <button\n pButton\n type=\"button\"\n label=\"Abrir en una nueva ventana\"\n icon=\"pi pi-external-link\"\n (click)=\"openCurrentInNewWindow()\"\n ></button>\n </div>\n <ng-container *ngIf=\"canPreview()\">\n <embed\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '2'\"\n [src]=\"current_path | safe\"\n style=\"width: 100%; min-height: 600px\"\n />\n <iframe\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '1'\"\n style=\"width: 100%; min-height: 600px\"\n [src]=\"current_path | safe\"\n ></iframe>\n </ng-container>\n</p-dialog>\n\n<p-dialog\n header=\"Generar documento\"\n [(visible)]=\"displayGenerate\"\n [modal]=\"true\"\n [closable]=\"true\"\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\n>\n <div class=\"gen-form\">\n <!-- Error de la última generación: el diálogo queda abierto para corregir o reintentar -->\n <p-message\n *ngIf=\"generateError\"\n severity=\"error\"\n icon=\"pi pi-times-circle\"\n styleClass=\"w-full\"\n >\n No se pudo generar el documento. {{ generateError }}\n </p-message>\n\n <!-- Tipo de documento -->\n <div class=\"gen-field\">\n <label class=\"gen-label\">Tipo de documento</label>\n <p-dropdown\n class=\"gen-control\"\n [options]=\"documentTypes\"\n optionLabel=\"label\"\n optionValue=\"code\"\n [(ngModel)]=\"selectedDocType\"\n placeholder=\"Seleccione un tipo\"\n appendTo=\"body\"\n (onChange)=\"onDocTypeChange()\"\n >\n </p-dropdown>\n </div>\n\n <!-- Parámetros dinámicos -->\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\n <label class=\"gen-label\">\n {{ p.description }}\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\n </label>\n\n <!-- Date -->\n <p-datepicker\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\n class=\"gen-control\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n [showIcon]=\"true\"\n appendTo=\"body\"\n dateFormat=\"yy-mm-dd\"\n >\n </p-datepicker>\n\n <!-- String -->\n <input\n *ngIf=\"\n (p.type || '').toLowerCase() === 'nvarchar' ||\n (p.type || '').toLowerCase() === 'string'\n \"\n pInputText\n class=\"gen-control\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n placeholder=\"Ingrese un valor\"\n />\n\n <!-- Number -->\n <p-inputNumber\n *ngIf=\"\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\n \"\n class=\"gen-control\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n >\n </p-inputNumber>\n\n <!-- Boolean -->\n <div\n class=\"gen-control gen-checkbox\"\n *ngIf=\"\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\n \"\n >\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\n </p-checkbox>\n <span class=\"gen-checkbox-label\">Sí</span>\n </div>\n\n <!-- helper opcional -->\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <button\n pButton\n type=\"button\"\n label=\"Cancelar\"\n class=\"p-button-text\"\n (click)=\"displayGenerate = false\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n [label]=\"generateError ? 'Reintentar' : 'Generar'\"\n [icon]=\"generateError ? 'pi pi-refresh' : 'pi pi-cog'\"\n (click)=\"generateDocument()\"\n [loading]=\"enProceso\"\n [disabled]=\"!selectedDocType || enProceso\"\n ></button>\n </ng-template>\n</p-dialog>\n","/*\n * Public API Surface of sf-documents\n */\n\nexport * from './lib/sf-documents.service';\nexport * from './lib/sf-documents.component';\nexport * from './lib/gateways/document.port';\nexport * from './lib/components/folder-files/folder-files.component';\nexport * from './lib/models/navigation-state.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4","i3.SfDocumentsService","i5","i6","i7","i8","i10"],"mappings":"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"}
1
+ {"version":3,"file":"sf-documents.mjs","sources":["../../../projects/sf-documents/src/lib/sf-documents.service.ts","../../../projects/sf-documents/src/lib/pipes/safe.pipe.ts","../../../projects/sf-documents/src/lib/gateways/document.port.ts","../../../projects/sf-documents/src/lib/utils/file-type.util.ts","../../../projects/sf-documents/src/lib/utils/toast.util.ts","../../../projects/sf-documents/src/lib/components/dialog/upload-dialog/upload-dialog.component.ts","../../../projects/sf-documents/src/lib/components/dialog/upload-dialog/upload-dialog.component.html","../../../projects/sf-documents/src/lib/pipes/flexible-date.pipe.ts","../../../projects/sf-documents/src/lib/utils/error-message.util.ts","../../../projects/sf-documents/src/lib/components/folder-files/folder-files.component.ts","../../../projects/sf-documents/src/lib/components/folder-files/folder-files.component.html","../../../projects/sf-documents/src/lib/sf-documents.component.ts","../../../projects/sf-documents/src/lib/sf-documents.component.html","../../../projects/sf-documents/src/public-api.ts","../../../projects/sf-documents/src/sf-documents.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SfDocumentsService {\n _loading = new BehaviorSubject<boolean>(false);\n _loadingData = new BehaviorSubject<boolean>(false);\n loading$ = this._loading.asObservable();\n loadingData$ = this._loadingData.asObservable();\n\n set loading(loading: boolean) {\n this._loading.next(loading);\n }\n set loadingData(loading: boolean) {\n this._loadingData.next(loading);\n }\n get loading(): boolean {\n return this._loading.getValue();\n }\n get loadingData(): boolean {\n return this._loadingData.getValue();\n }\n constructor() { }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\n@Pipe({ name: 'safe' })\n\nexport class SafePipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n transform(url:any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}","import { InjectionToken } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport interface DocumentGatewayService{\n getFolders(idKatios:string, data: any): Observable<any>;\n updateStatus(idKatios:string, data: any): Observable<any>;\n uploadFiles(idKatios: string, formData: FormData): Observable<any>;\n generateDocument(idKatios:string, idDoc:string , noDoc:string,data: any): Observable<any>;\n getDocumentsToGenerate(idKatios:string, noDoc: string): Observable<any>;\n getFilesByFolder(idKatios: string, nmco: string, data: any, pageNumber: number, pageSize: number, search: string): Observable<any>;\n}\n\nexport const DOCUMENT_SERVICE = new InjectionToken<DocumentGatewayService>('DOCUMENT_SERVICE');","/**\n * Extensiones permitidas por defecto para subir cuando el host no configura nada.\n * Esto sí es configurable desde el host vía `allowedUploadTypes`, ya que es una\n * decisión de negocio (qué tipos de documento se aceptan).\n */\nexport const DEFAULT_ALLOWED_UPLOAD_EXTENSIONS = ['.pdf', '.xls', '.xlsx'];\nexport const MAX_POR_ARCHIVO = 25 * 1024 * 1024; // 25 MB\nexport const MAX_POR_LOTE = 100 * 1024 * 1024; // 100 MB\n\nexport interface RejectedFile {\n name: string;\n size: number;\n}\n\nconst MIME_TYPES_BY_EXTENSION: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n};\n\n/**\n * Extensiones que el navegador puede renderizar inline dentro de un <embed>/<iframe>.\n * Esto NO es configurable desde el host: es una capacidad del navegador, no una\n * decisión de negocio, así que la librería la conoce de antemano (evita que el host\n * marque como \"previsualizable\" un tipo que en realidad nunca se va a renderizar).\n */\nconst PREVIEWABLE_EXTENSIONS = [\n '.pdf',\n '.jpg',\n '.jpeg',\n '.png',\n '.gif',\n '.webp',\n '.bmp',\n '.svg',\n];\n\nconst ICON_BY_EXTENSION: Record<string, string> = {\n '.pdf': 'pi-file-pdf',\n '.xls': 'pi-file-excel',\n '.xlsx': 'pi-file-excel',\n '.doc': 'pi-file-word',\n '.docx': 'pi-file-word',\n '.jpg': 'pi-image',\n '.jpeg': 'pi-image',\n '.png': 'pi-image',\n '.gif': 'pi-image',\n '.webp': 'pi-image',\n '.bmp': 'pi-image',\n '.svg': 'pi-image',\n};\n\n/** Normaliza una lista de extensiones dada por el host (con o sin punto, mayúsc/minúsc). */\nexport function normalizeExtensions(\n extensions: string[] | undefined | null,\n fallback: string[],\n): string[] {\n const list = extensions && extensions.length ? extensions : fallback;\n return list\n .map((ext) => ext.trim().toLowerCase())\n .filter((ext) => !!ext)\n .map((ext) => (ext.startsWith('.') ? ext : `.${ext}`));\n}\n\n/** Arma el atributo `accept` del input file a partir de las extensiones permitidas. */\nexport function buildAcceptAttr(extensions: string[]): string {\n const mimeTypes = extensions\n .map((ext) => MIME_TYPES_BY_EXTENSION[ext])\n .filter((m): m is string => !!m);\n return [...new Set([...mimeTypes, ...extensions])].join(',');\n}\n\nfunction hasExtension(\n fileName: string | undefined | null,\n extensions: string[],\n): boolean {\n if (!fileName) return false;\n const lower = fileName.toLowerCase();\n return extensions.some((ext) => lower.endsWith(ext));\n}\n\nexport function isAllowedUploadFile(file: File, extensions: string[]): boolean {\n const mimeTypes = extensions\n .map((ext) => MIME_TYPES_BY_EXTENSION[ext])\n .filter((m): m is string => !!m);\n return mimeTypes.includes(file.type) || hasExtension(file.name, extensions);\n}\n\n/** Formatea un tamaño en bytes a MB con un decimal (ej. \"12.3 MB\"). */\nexport function formatFileSizeMB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/** Tamaño total en bytes de un conjunto de archivos. */\nexport function getBatchSize(files: File[]): number {\n return files.reduce((total, file) => total + file.size, 0);\n}\n\n/** Separa los archivos según superen o no el tamaño máximo permitido por archivo. */\nexport function splitFilesByMaxSize(\n files: File[],\n maxFileSize: number,\n): { allowed: File[]; rejected: RejectedFile[] } {\n const allowed: File[] = [];\n const rejected: RejectedFile[] = [];\n files.forEach((file) => {\n if (file.size > maxFileSize) rejected.push({ name: file.name, size: file.size });\n else allowed.push(file);\n });\n return { allowed, rejected };\n}\n\n/** true si el navegador puede mostrar este archivo inline en un <embed>/<iframe>. */\nexport function canPreviewFile(name: string | undefined | null): boolean {\n return hasExtension(name, PREVIEWABLE_EXTENSIONS);\n}\n\n/** Ícono PrimeIcons según la extensión del archivo; 'pi-file' si no se reconoce. */\nexport function getFileTypeIcon(name: string | undefined | null): string {\n if (!name) return 'pi-file';\n const lower = name.toLowerCase();\n const match = Object.keys(ICON_BY_EXTENSION).find((ext) =>\n lower.endsWith(ext),\n );\n return match ? ICON_BY_EXTENSION[match] : 'pi-file';\n}\n","/**\n * `key` de los avisos de la librería. Solo los pinta el `<p-toast>` de `SfDocumentsComponent`:\n * un `<p-toast>` del host sin `key` (o con otra) no los muestra, así que no salen duplicados.\n */\nexport const SF_DOCUMENTS_TOAST_KEY = 'sf-documents';\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { MessageService } from 'primeng/api';\nimport {\n buildAcceptAttr,\n DEFAULT_ALLOWED_UPLOAD_EXTENSIONS,\n formatFileSizeMB,\n getBatchSize,\n isAllowedUploadFile,\n MAX_POR_ARCHIVO,\n MAX_POR_LOTE,\n normalizeExtensions,\n RejectedFile,\n splitFilesByMaxSize,\n} from '../../../utils/file-type.util';\nimport { SF_DOCUMENTS_TOAST_KEY } from '../../../utils/toast.util';\n\n@Component({\n selector: 'lib-upload-dialog',\n imports: [CommonModule, ButtonModule, DialogModule],\n templateUrl: './upload-dialog.component.html',\n styleUrl: './upload-dialog.component.scss'\n})\nexport class UploadDialogComponent {\n @Input() selectedDocument: any;\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\n @Input() allowedExtensions: string[] | undefined;\n @Output() onUploaded = new EventEmitter<{ fileList: File[], tagValue: any }>();\n @Output() loadFile = new EventEmitter<void>();\n @ViewChild('fileInput', { static: true })\n fileInput!: ElementRef<HTMLInputElement>;\n\n readonly maxFileSize = MAX_POR_ARCHIVO;\n readonly maxBatchSize = MAX_POR_LOTE;\n\n displayOversizedDialog = false;\n allowedFiles: File[] = [];\n rejectedFiles: RejectedFile[] = [];\n private pendingTagValue: any;\n\n constructor(private messageService: MessageService) { }\n\n private get normalizedExtensions(): string[] {\n return normalizeExtensions(this.allowedExtensions, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS);\n }\n\n get acceptedFileTypes(): string {\n return buildAcceptAttr(this.normalizedExtensions);\n }\n\n formatSize(bytes: number): string {\n return formatFileSizeMB(bytes);\n }\n\n loadFileClick() {\n this.loadFile.emit();\n this.fileInput.nativeElement.value = '';\n this.fileInput.nativeElement.click();\n }\n\n fileChange(event: any) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n const files = Array.from(input.files);\n const validFiles = files.filter(f => isAllowedUploadFile(f, this.normalizedExtensions));\n const tagValue = input.value;\n if (!validFiles.length) return;\n\n if (getBatchSize(validFiles) > this.maxBatchSize) {\n this.addMessage(\n 'error',\n 'Lote demasiado grande',\n `El lote seleccionado supera el tamaño máximo permitido de ${this.formatSize(this.maxBatchSize)}.`,\n );\n return;\n }\n\n const { allowed, rejected } = splitFilesByMaxSize(validFiles, this.maxFileSize);\n if (!rejected.length) {\n this.onUploaded.emit({ fileList: allowed, tagValue });\n return;\n }\n\n this.allowedFiles = allowed;\n this.rejectedFiles = rejected;\n this.pendingTagValue = tagValue;\n this.displayOversizedDialog = true;\n }\n\n continuarConPermitidos() {\n this.displayOversizedDialog = false;\n if (this.allowedFiles.length) {\n this.onUploaded.emit({ fileList: this.allowedFiles, tagValue: this.pendingTagValue });\n }\n this.limpiarSeleccionRechazada();\n }\n\n cancelarEnvio() {\n this.displayOversizedDialog = false;\n this.limpiarSeleccionRechazada();\n }\n\n private limpiarSeleccionRechazada() {\n this.allowedFiles = [];\n this.rejectedFiles = [];\n this.pendingTagValue = null;\n }\n\n private addMessage(severity: string, summary: string, detail: string) {\n // Usa el MessageService y el <p-toast> de SfDocumentsComponent (ver SF_DOCUMENTS_TOAST_KEY).\n this.messageService.add({ key: SF_DOCUMENTS_TOAST_KEY, severity, summary, detail, life: 4000 });\n }\n\n}\n","<input\n #fileInput\n type=\"file\"\n (change)=\"fileChange($event)\"\n class=\"hidden\"\n placeholder=\"Upload file\"\n [attr.accept]=\"acceptedFileTypes\"\n multiple\n/>\n<button\n pButton\n type=\"button\"\n label=\"Subir archivo\"\n icon=\"pi pi-upload\"\n class=\"p-button-outlined ff-btn-upload\"\n (click)=\"loadFileClick()\"\n></button>\n\n<p-dialog\n header=\"Archivos que superan el tamaño permitido\"\n [(visible)]=\"displayOversizedDialog\"\n [modal]=\"true\"\n [closable]=\"false\"\n [style]=\"{ width: '32rem' }\"\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\n>\n <p>\n Tamaño máximo por archivo:\n <strong>{{ formatSize(maxFileSize) }}</strong>\n </p>\n\n <div class=\"oversized-section\">\n <p class=\"oversized-title\">Archivos rechazados:</p>\n <ul class=\"oversized-list\">\n <li *ngFor=\"let file of rejectedFiles\">\n {{ file.name }} — {{ formatSize(file.size) }}\n </li>\n </ul>\n </div>\n\n <div class=\"oversized-section\" *ngIf=\"allowedFiles.length\">\n <p class=\"oversized-title\">Archivos que sí se enviarán:</p>\n <ul class=\"oversized-list\">\n <li *ngFor=\"let file of allowedFiles\">{{ file.name }}</li>\n </ul>\n </div>\n <p *ngIf=\"!allowedFiles.length\">No hay archivos válidos para enviar.</p>\n\n <ng-template #footer>\n <button\n pButton\n type=\"button\"\n label=\"Cancelar\"\n class=\"p-button-text\"\n (click)=\"cancelarEnvio()\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n label=\"Continuar\"\n icon=\"pi pi-upload\"\n [disabled]=\"!allowedFiles.length\"\n (click)=\"continuarConPermitidos()\"\n ></button>\n </ng-template>\n</p-dialog>\n","// flexible-date.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe, registerLocaleData } from '@angular/common';\nimport localeEs from '@angular/common/locales/es';\n\nregisterLocaleData(localeEs);\n\n@Pipe({ name: 'flexibleDate' })\nexport class FlexibleDatePipe implements PipeTransform {\n private datePipe = new DatePipe('es'); // o el locale que uses\n\n transform(value: any, format: string = 'dd/MM/yyyy HH:mm'): string {\n const parsed = this.parseFlexibleDate(value);\n if (!parsed) return value ?? ''; // fallback: mostrar el string original en vez de explotar\n return this.datePipe.transform(parsed, format) ?? '';\n }\n\n private parseFlexibleDate(value: any): Date | null {\n if (!value) return null;\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n if (typeof value === 'number') return new Date(value);\n\n let str = String(value).trim();\n\n // Colapsar espacios múltiples: \"Jun 4 2026 5:03PM\" -> \"Jun 4 2026 5:03PM\"\n str = str.replace(/\\s+/g, ' ');\n\n // Intento 1: Date nativo (cubre ISO, \"Jun 4 2026 5:03PM\", RFC2822, etc.)\n let d = new Date(str);\n if (!isNaN(d.getTime())) return d;\n\n // Intento 2: formatos comunes tipo \"dd/MM/yyyy HH:mm\" o \"MM/dd/yyyy\"\n const slashMatch = str.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{2,4})(?:\\s+(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)?)?$/i);\n if (slashMatch) {\n let [, a, b, year, hh, mm, ss, ampm] = slashMatch;\n if (year.length === 2) year = '20' + year;\n let hour = hh ? parseInt(hh, 10) : 0;\n if (ampm) {\n if (/PM/i.test(ampm) && hour < 12) hour += 12;\n if (/AM/i.test(ampm) && hour === 12) hour = 0;\n }\n // Asumimos dd/MM/yyyy (ajustá si tu backend manda MM/dd/yyyy)\n d = new Date(+year, +a - 1, +b, hour, mm ? +mm : 0, ss ? +ss : 0);\n if (!isNaN(d.getTime())) return d;\n }\n\n // Intento 3: \"yyyy-MM-dd HH:mm:ss\" sin la 'T' de ISO\n const isoLike = str.replace(' ', 'T');\n d = new Date(isoLike);\n if (!isNaN(d.getTime())) return d;\n\n return null; // no se pudo parsear\n }\n}","/**\n * Traduce el error de una llamada del puerto a un texto para el usuario, en español y de usted.\n *\n * Nunca devuelve el mensaje del backend, `err.message`, JSON ni texto en inglés: el texto sale\n * siempre de este archivo, según el código de error. El detalle técnico va a `console.error`\n * con el prefijo `[sf-documents]` para soporte.\n *\n * Formas de error que llegan hoy:\n * - DocumentService directo (documents-manager-ui): `err.error` es su `ApiResponse`,\n * `{ success, statusCode, message, errors: ['CODIGO'] }`.\n * - Vía TFAServices (TFB): la fachada lanza `new Exception(response.Content)` y responde\n * `{ success: false, message: 'Error: {json de DocumentService}' }`. Se desenvuelve ese JSON.\n */\n\nexport const GENERIC_ERROR_MESSAGE =\n 'Ocurrió un error inesperado. Intente de nuevo.';\n\nexport const NETWORK_ERROR_MESSAGE =\n 'No hay conexión con el servidor. Revise su conexión e intente de nuevo.';\n\n/**\n * Códigos de `errors[0]` que devuelve DocumentService (`ExceptionHandlerMiddleware` y\n * `Core/Exceptions`) → texto para el usuario. Un código que no esté aquí usa el genérico.\n */\nexport const ERROR_CODE_MESSAGES: Readonly<Record<string, string>> = {\n DOCUMENT_PART_MISSING:\n 'Falta un documento requerido en el gestor para esta solicitud. Revise las carpetas e intente de nuevo.',\n DOCUMENT_TOO_LARGE:\n 'El documento supera el tamaño máximo permitido. Contacte a soporte.',\n DOCUMENT_GENERATION_ERROR:\n 'Una parte del documento no se pudo producir. Intente de nuevo; si persiste, contacte a soporte.',\n DOCUMENT_CONFIGURATION_ERROR:\n 'El documento no está configurado correctamente. Contacte a soporte.',\n RESOURCE_NOT_FOUND:\n 'No se encontró la información solicitada. Recargue la pantalla e intente de nuevo.',\n VALIDATION_ERROR: 'Revise los datos ingresados e intente de nuevo.',\n INVALID_ARGUMENT: 'Revise los datos ingresados e intente de nuevo.',\n BATCH_TOO_LARGE:\n 'Los archivos superan el tamaño máximo permitido por envío. Suba menos archivos a la vez.',\n REQUEST_TIMEOUT:\n 'El servidor tardó demasiado en responder. Intente de nuevo.',\n};\n\n/** Prefijo con el que TFAServices envuelve el cuerpo de DocumentService (`$\"Error: {ex.Message}\"`). */\nconst TFA_WRAPPER_PREFIX = 'Error: ';\n\nfunction tryParseObject(text: unknown): Record<string, any> | null {\n if (typeof text !== 'string') return null;\n const trimmed = text.trim();\n if (!trimmed.startsWith('{')) return null;\n try {\n const parsed = JSON.parse(trimmed);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed\n : null;\n } catch {\n return null;\n }\n}\n\n/** Cuerpo de la respuesta de error, ya desenvuelto si viene de TFAServices. */\nfunction extractBody(err: any): Record<string, any> | null {\n let body: Record<string, any> | null = null;\n const raw = err?.error;\n\n if (raw && typeof raw === 'object') {\n body = raw;\n } else if (typeof raw === 'string') {\n body = tryParseObject(raw);\n } else if (err && typeof err === 'object' && Array.isArray(err.errors)) {\n // El host ya entregó el cuerpo (p. ej. un catchError que hace throwError(() => e.error)).\n body = err;\n }\n\n const message = body?.['message'];\n if (typeof message === 'string' && message.startsWith(TFA_WRAPPER_PREFIX + '{')) {\n const inner = tryParseObject(message.slice(TFA_WRAPPER_PREFIX.length));\n if (inner) body = inner;\n }\n return body;\n}\n\nfunction extractCode(body: Record<string, any> | null): string | null {\n const first = Array.isArray(body?.['errors']) ? body!['errors'][0] : null;\n return typeof first === 'string' && first.trim() ? first.trim() : null;\n}\n\n/**\n * Texto para el usuario a partir de un error del puerto.\n * @param context Qué se estaba haciendo, solo para el log de soporte (p. ej. 'generateDocument').\n */\nexport function getUserErrorMessage(err: unknown, context = ''): string {\n const e = err as any;\n const body = extractBody(e);\n const code = extractCode(body);\n const status = typeof e?.status === 'number' ? e.status : null;\n\n console.error(`[sf-documents]${context ? ' ' + context : ''}`, {\n status,\n statusCode: body?.['statusCode'] ?? null,\n code,\n detail: body?.['message'] ?? e?.message ?? e,\n });\n\n if (status === 0) return NETWORK_ERROR_MESSAGE;\n if (code && ERROR_CODE_MESSAGES[code]) return ERROR_CODE_MESSAGES[code];\n return GENERIC_ERROR_MESSAGE;\n}\n","import {\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIcon } from 'primeng/inputicon';\nimport { IconField } from 'primeng/iconfield';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SafePipe } from '../../pipes/safe.pipe';\nimport { UploadDialogComponent } from '../dialog/upload-dialog/upload-dialog.component';\nimport {\n DOCUMENT_SERVICE,\n DocumentGatewayService,\n} from '../../gateways/document.port';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SelectModule } from 'primeng/select';\nimport { FlexibleDatePipe } from '../../pipes/flexible-date.pipe';\nimport { canPreviewFile, getFileTypeIcon } from '../../utils/file-type.util';\nimport { DialogModule } from 'primeng/dialog';\nimport { MessageModule } from 'primeng/message';\nimport { getUserErrorMessage } from '../../utils/error-message.util';\n\ndeclare var cordova: any;\ndeclare var window: any;\n\n@Component({\n selector: 'lib-folder-files',\n imports: [\n CommonModule,\n FormsModule,\n ButtonModule,\n CheckboxModule,\n InputTextModule,\n InputIcon,\n IconField,\n PaginatorModule,\n SafePipe,\n UploadDialogComponent,\n SelectModule,\n FlexibleDatePipe,\n DialogModule,\n MessageModule,\n ],\n templateUrl: './folder-files.component.html',\n styleUrls: ['./folder-files.component.scss'],\n standalone: true,\n})\nexport class FolderFilesComponent implements OnChanges, OnDestroy {\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\n private searchSubject = new Subject<string>();\n private destroy$ = new Subject<void>();\n\n @Input() carpeta: any;\n @Input() isMobile: boolean = false;\n @Input() idKatios: any;\n @Input() server: string = '';\n @Input() subestado: string = '';\n @Input() requestData: any;\n @Input() useBreadcrumb: boolean = false;\n @Input() usesApi = true;\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\n @Input() allowedUploadTypes: string[] | undefined;\n @Output() onFileChange = new EventEmitter<any>();\n @Output() onCargarArchivo = new EventEmitter<any>();\n @Output() onEliminarMasivo = new EventEmitter<any[]>();\n @Output() onBack = new EventEmitter<void>();\n @Output() viewDocument = new EventEmitter<any>();\n\n items: any[] = [];\n page = 1;\n pageSize = 10;\n totalRecords = 0;\n totalPages = 0;\n first = 0;\n searchQuery = '';\n docsEliminables: any[] = [];\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n loading = false;\n /** Error de la última carga de archivos; se muestra con \"Reintentar\" en lugar de la lista. */\n loadError: string | null = null;\n private filesSub?: Subscription;\n allSelected = false;\n pageSizeOptions = [\n { label: '5/pág', value: 5 },\n { label: '10/pág', value: 10 },\n { label: '20/pág', value: 20 },\n ];\n current_path: string = '';\n current_label: string = '';\n displayView: boolean = false;\n\n constructor() {\n this.searchSubject\n .pipe(debounceTime(400), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe(() => {\n this.page = 1;\n if (this.usesApi) {\n this.loadFiles();\n } else {\n if (this.searchQuery.trim() === '' || !this.searchQuery) {\n this.items = this.carpeta.children;\n } else {\n this.items = this.carpeta.children.filter((item: any) =>\n item.label.toLowerCase().includes(this.searchQuery.toLowerCase()),\n );\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.current_path = '';\n this.current_label = '';\n this.displayView = false;\n if (changes['carpeta'] && this.carpeta) {\n this.init();\n }\n }\n\n private init(): void {\n this.docsEliminables = [];\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.searchQuery = '';\n this.page = 1;\n this.loadError = null;\n\n this.applyPermissions();\n\n if (!this.usesApi) {\n // Modo children pre-cargados\n if (!this.carpeta.children || this.carpeta.children.length === 0) {\n this.carpeta.children = [];\n }\n this.items = this.carpeta.children;\n this.items.forEach((item: any) => (item.delete = false));\n } else {\n // Modo API paginada\n this.items = [];\n this.loadFiles();\n }\n }\n\n private applyPermissions(): void {\n if (this.carpeta?.reglas && typeof this.carpeta.reglas === 'string') {\n this.carpeta.reglas = JSON.parse(this.carpeta.reglas);\n }\n if (\n !this.carpeta?.reglas?.permisos?.subestados &&\n this.carpeta?.reglas?.permisos\n ) {\n this.carpeta.reglas.permisos.cargarFront =\n this.carpeta.reglas.permisos.cargar;\n this.carpeta.reglas.permisos.borrarFront =\n this.carpeta.reglas.permisos.borrar;\n } else if (\n this.carpeta?.reglas?.permisos?.subestados &&\n this.subestado?.trim()\n ) {\n const sub = this.subestado.toLowerCase().trim();\n this.carpeta.reglas.permisos.cargarFront = Array.isArray(\n this.carpeta.reglas.permisos.subestados.cargar,\n )\n ? this.carpeta.reglas.permisos.subestados.cargar\n .map((c: any) => c.toLowerCase().trim())\n .includes(sub)\n : this.carpeta.reglas.permisos.cargar;\n this.carpeta.reglas.permisos.borrarFront = Array.isArray(\n this.carpeta.reglas.permisos.subestados.borrar,\n )\n ? this.carpeta.reglas.permisos.subestados.borrar\n .map((b: any) => b.toLowerCase().trim())\n .includes(sub)\n : this.carpeta.reglas.permisos.borrar;\n }\n }\n\n loadFiles(): void {\n // Una carga nueva (otra carpeta, página o búsqueda) cancela la anterior: así una respuesta\n // vieja, buena o con error, no pisa lo que el usuario está mirando.\n this.filesSub?.unsubscribe();\n this.loading = true;\n // loadError no se limpia aquí: mientras se reintenta, el error queda visible con\n // \"Reintentar\" en estado de carga, y el foco no se pierde.\n this.filesSub = this.documentsService\n .getFilesByFolder(\n this.idKatios,\n this.carpeta.NMCo,\n this.requestData,\n this.page,\n this.pageSize,\n this.searchQuery,\n )\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response: any) => {\n const res = response?.data ?? response;\n this.totalRecords = res.total ?? 0;\n this.page = res.page ?? 1;\n this.totalPages = res.totalPages ?? 0;\n this.items = res.items ?? [];\n this.items.forEach((item: any) => (item.delete = false));\n this.buildPaths(this.items);\n this.loadError = null;\n this.loading = false;\n },\n error: (error: any) => {\n // getUserErrorMessage deja el detalle técnico en console.error para soporte.\n this.loadError = getUserErrorMessage(error, 'getFilesByFolder');\n this.items = [];\n this.loading = false;\n },\n });\n }\n\n onPageChange(event: any): void {\n this.first = event.first ?? 0;\n this.page = (event.page ?? 0) + 1;\n this.pageSize = event.rows ?? this.pageSize;\n this.loadFiles();\n }\n\n onSearchInput(): void {\n this.searchSubject.next(this.searchQuery);\n }\n\n /** Construye la ruta completa de cada archivo usando el server */\n private buildPaths(items: any[]): void {\n if (!this.server) return;\n items.forEach((item: any) => {\n if (item.Path && !item.Path.startsWith('http')) {\n let path = 'Imagenes/' + item.Path + item.label;\n path = path.replace(/\\\\/g, '/');\n item.Path = this.server + path;\n }\n });\n }\n\n fileChange(data: any): void {\n this.onFileChange.emit(data);\n }\n\n cargarArchivo(): void {\n this.onCargarArchivo.emit(this.carpeta);\n }\n\n openVisorDoc(item: any) {\n this.viewDocument.emit(item);\n }\n\n openCurrentInNewWindow(path?: string): void {\n window.open(path || this.current_path, '_blank').focus();\n }\n\n canPreview(label?: string, path?: string): boolean {\n return (\n canPreviewFile(label || this.current_label) ||\n canPreviewFile(path || this.current_path)\n );\n }\n\n previewFallbackIcon(label?: string, path?: string): string {\n return getFileTypeIcon(\n label || this.current_label || path || this.current_path,\n );\n }\n\n goBack(): void {\n this.onBack.emit();\n }\n\n onClickedCheckDelete(event: any, document: any): void {\n if (event.checked) this.docsEliminables.push(document);\n else\n this.docsEliminables = this.docsEliminables.filter(\n (doc) => doc !== document,\n );\n }\n\n emitEliminarMasivo(): void {\n this.onEliminarMasivo.emit(this.docsEliminables);\n }\n\n toggleSelectAll(): void {\n this.items.forEach((item) => (item.delete = this.allSelected));\n this.docsEliminables = this.allSelected ? [...this.items] : [];\n }\n\n // refresh(): void {\n // if (this.usesApi) {\n // this.loadFiles();\n // }\n // }\n\n onPageSizeChange(): void {\n this.first = 0;\n this.page = 1;\n this.loadFiles();\n }\n}\n","<div class=\"ff-layout\">\n <!-- Header fijo -->\n <div class=\"ff-header\">\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-arrow-left\"\n label=\"Volver\"\n (click)=\"goBack()\"\n ></button>\n </div>\n\n <!-- Toolbar: búsqueda + botones de acción -->\n <div class=\"ff-toolbar\">\n <p-iconfield class=\"ff-toolbar__search\">\n <p-inputicon class=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n [placeholder]=\"\n 'Buscar en ' +\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\n \"\n [(ngModel)]=\"searchQuery\"\n (input)=\"onSearchInput()\"\n class=\"w-full\"\n />\n </p-iconfield>\n\n <div class=\"ff-toolbar__actions\">\n <lib-upload-dialog\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\n [selectedDocument]=\"carpeta\"\n [allowedExtensions]=\"allowedUploadTypes\"\n (onUploaded)=\"fileChange($event)\"\n (loadFile)=\"cargarArchivo()\"\n >\n </lib-upload-dialog>\n\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-trash\"\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n (click)=\"emitEliminarMasivo()\"\n [disabled]=\"docsEliminables.length === 0\"\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\n >\n <span class=\"ff-btn-label\"\n >Eliminar ({{ docsEliminables.length }})</span\n >\n </button>\n </div>\n </div>\n\n <!-- Fila seleccionar todo / total archivos -->\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\n <div class=\"ff-select-row__left\">\n <p-checkbox\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n [binary]=\"true\"\n [(ngModel)]=\"allSelected\"\n (onChange)=\"toggleSelectAll()\"\n >\n </p-checkbox>\n <span\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n class=\"ff-select-row__label\"\n >Seleccionar todo</span\n >\n </div>\n <span class=\"ff-select-row__count\"\n >{{ totalRecords || items.length }}\n {{\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\n }}</span\n >\n </div>\n </div>\n\n <!-- Contenido scrollable -->\n <div class=\"ff-file-list-wrapper\">\n <!-- Loading -->\n <div *ngIf=\"loading && !loadError\" class=\"ff-loading\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n\n <!-- Error al cargar: el usuario puede volver a pedir solo esta carpeta. Mientras se\n reintenta, el error sigue a la vista y el botón muestra la carga. Sin [disabled]: un\n botón deshabilitado suelta el foco al body y quien usa teclado vuelve a empezar. -->\n <div *ngIf=\"loadError\" class=\"ff-error\">\n <p-message severity=\"error\" icon=\"pi pi-times-circle\" styleClass=\"w-full\">\n No se pudieron cargar los documentos. {{ loadError }}\n </p-message>\n <button\n pButton\n type=\"button\"\n label=\"Reintentar\"\n icon=\"pi pi-refresh\"\n [loading]=\"loading\"\n [attr.aria-disabled]=\"loading\"\n (click)=\"!loading && loadFiles()\"\n ></button>\n </div>\n\n <!-- Lista de archivos -->\n <div class=\"ff-file-list\" *ngIf=\"!loading && !loadError\">\n <div\n class=\"ff-file-item\"\n *ngFor=\"let item of items\"\n (click)=\"openVisorDoc(item)\"\n >\n <p-checkbox\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\n [binary]=\"true\"\n [(ngModel)]=\"item.delete\"\n (onChange)=\"onClickedCheckDelete($event, item)\"\n (click)=\"$event.stopPropagation()\"\n >\n </p-checkbox>\n\n <div class=\"ff-file-item__preview\">\n <i\n *ngIf=\"!canPreview(item.label, item.Path)\"\n class=\"pi ff-file-item__frame ff-file-item__icon\"\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\n ></i>\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\n <embed\n *ngIf=\"carpeta.TipoArchivo == '2'\"\n class=\"ff-file-item__frame\"\n [src]=\"item.Path | safe\"\n />\n <img\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\n class=\"ff-file-item__frame\"\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\n />\n <iframe\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\n class=\"ff-file-item__frame\"\n [src]=\"item.Path | safe\"\n frameborder=\"0\"\n ></iframe>\n </ng-container>\n </div>\n\n <div class=\"ff-file-item__info\">\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\n >Fecha Subida:\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\n >\n <span\n class=\"ff-file-item__date\"\n *ngIf=\"item.FechaSubida && isMobile\"\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\n >\n <i\n class=\"pi pi-external-link ff-file-item__open\"\n (click)=\"\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\n \"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"Abrir en nueva ventana\"\n (keydown.enter)=\"\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\n \"\n ></i>\n </div>\n </div>\n </div>\n\n <!-- Sin resultados -->\n <div *ngIf=\"!loading && !loadError && items.length === 0\" class=\"ff-empty\">\n Sin documentos cargados\n </div>\n </div>\n\n <!-- Footer fijo: paginación compacta -->\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0 && !loadError\">\n <div class=\"ff-pagination\">\n <p-select\n [options]=\"pageSizeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange()\"\n >\n </p-select>\n <p-paginator\n [first]=\"first\"\n [rows]=\"pageSize\"\n [totalRecords]=\"totalRecords\"\n (onPageChange)=\"onPageChange($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [showPageLinks]=\"false\"\n [showFirstLastIcon]=\"false\"\n >\n </p-paginator>\n </div>\n </div>\n</div>\n","import {\n ApplicationRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ConfirmationService, MessageService, TreeNode } from 'primeng/api';\nimport { ToastModule } from 'primeng/toast';\nimport { MessageModule } from 'primeng/message';\nimport * as _ from 'lodash';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { PanelModule } from 'primeng/panel';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DialogModule } from 'primeng/dialog';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SafePipe } from './pipes/safe.pipe';\nimport {\n DOCUMENT_SERVICE,\n DocumentGatewayService,\n} from './gateways/document.port';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputIcon } from 'primeng/inputicon';\nimport { IconField } from 'primeng/iconfield';\nimport { FolderFilesComponent } from './components/folder-files/folder-files.component';\nimport { SelectModule } from 'primeng/select';\nimport { SfDocumentsService } from './sf-documents.service';\nimport { finalize, switchMap, tap } from 'rxjs/operators';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { of } from 'rxjs';\nimport { SfDocumentNavigationState } from './models/navigation-state.model';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { canPreviewFile, getFileTypeIcon } from './utils/file-type.util';\nimport { SF_DOCUMENTS_TOAST_KEY } from './utils/toast.util';\nimport { getUserErrorMessage } from './utils/error-message.util';\n\ndeclare var cordova: any;\ndeclare var window: any;\n\n@Component({\n selector: 'app-sf-documents',\n imports: [\n ToastModule,\n ButtonModule,\n ConfirmDialogModule,\n PanelModule,\n CheckboxModule,\n DialogModule,\n CommonModule,\n FormsModule,\n SafePipe,\n InputTextModule,\n InputIcon,\n IconField,\n FolderFilesComponent,\n SelectModule,\n DatePickerModule,\n InputNumberModule,\n SkeletonModule,\n MessageModule,\n ],\n templateUrl: './sf-documents.component.html',\n styleUrls: ['./sf-documents.component.scss'],\n // La librería provee su propio MessageService y pinta su propio <p-toast>: así sus avisos se\n // ven aunque el host no tenga un toast al alcance (p. ej. la vista embebida) y no se mezclan\n // con los del host. Mismo criterio que ConfirmationService.\n providers: [ConfirmationService, MessageService],\n standalone: true,\n})\nexport class SfDocumentsComponent implements OnChanges {\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\n @Input() accion: string = '';\n @Input() entidad: string = '';\n @Input() ndoc: string = '';\n @Input() tdoc: string = '';\n @Input() tipo: string = '';\n //Información necesaria para cargar documentos de productos\n @Input() Kasociada: string = '';\n @Input() Producto: string = '';\n @Input() Solicitud: string = '';\n @Input() oSession: any;\n @Input() perfilDocumentos: any;\n @Input() subestado: string = '';\n @Input() isMobile: boolean = false;\n @Output() nextTabPapa: EventEmitter<number> = new EventEmitter<number>();\n\n @Input() bAtras: boolean = false;\n @Input() bFinal: boolean = false;\n @Input() botones: boolean = true;\n @Input() aplFiltro: boolean = false;\n\n @Input() nmco: string[] = [];\n @Input() useBreadcrumb: boolean = false;\n\n @Input() usesApi: boolean = true;\n\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería (pdf, xls, xlsx). */\n @Input() allowedUploadTypes: string[] | undefined;\n\n @Output() onNavigationChange = new EventEmitter<SfDocumentNavigationState>();\n\n @Input() server: string = '';\n valorFiltro: string = '';\n\n tab = 1;\n enProceso = false;\n carpetaSeleccionada: any;\n files: any;\n filesFilter: any;\n imagePathInput: any;\n documentoSeleccionado: any;\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n file: any;\n urlDoc: any;\n pdfUrl: any;\n scanFileList = new Array<any>();\n displayPDF: boolean = false;\n\n @ViewChild('pdf', { read: ElementRef }) public panel!: ElementRef<any>;\n UsuarioNdoc: any;\n UsuarioTdoc: any;\n @Input() idKatios: any;\n\n displayGenerate = false;\n /** Error de la última generación; se muestra dentro del diálogo hasta reintentar o cambiar el tipo. */\n generateError: string | null = null;\n\n readonly toastKey = SF_DOCUMENTS_TOAST_KEY;\n\n canGenerate = true;\n\n documentTypes: any[] = [];\n documentsToGenerate: any[] = [];\n documentsToGenerateMap: Record<string, any> = {};\n dynamicParams: any[] = [];\n dynamicValues: Record<string, any> = {};\n selectedDocType: string | null = null;\n selectedRange: string | null = null;\n current_path: string = '';\n current_label: string = '';\n displayView: boolean = false;\n\n constructor(\n private sanitizer: DomSanitizer,\n public snackBar: MessageService,\n private appRef: ApplicationRef,\n private confirmationService: ConfirmationService,\n public documentService: SfDocumentsService,\n ) {}\n\n // ngOnInit() {\n // if (this.oSession != null && this.oSession.UsuarioSistema.TDOC !== undefined && this.oSession.UsuarioSistema.NDOC !== undefined) {\n // this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\n // this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\n // }\n // if (this.tipo && this.perfilDocumentos) {\n // this.cargarParametros(this.tipo)\n // }\n // }\n ngOnChanges(changes: SimpleChanges): void {\n this.files = [];\n this.filesFilter = [];\n this.imagePathInput = null;\n this.carpetaSeleccionada = null;\n this.documentoSeleccionado = null;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.file = null;\n this.urlDoc = null;\n this.pdfUrl = null;\n this.scanFileList = new Array<any>();\n this.displayPDF = false;\n this.displayGenerate = false;\n this.generateError = null;\n this.canGenerate = true;\n this.documentTypes = [];\n this.documentsToGenerate = [];\n this.documentsToGenerateMap = {};\n this.dynamicParams = [];\n this.dynamicValues = {};\n this.selectedDocType = null;\n this.selectedRange = null;\n if (\n this.oSession != null &&\n this.oSession.UsuarioSistema.TDOC !== undefined &&\n this.oSession.UsuarioSistema.NDOC !== undefined\n ) {\n this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\n this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\n }\n if (this.tipo && this.perfilDocumentos) {\n this.cargarParametros(this.tipo);\n }\n }\n\n cargarParametros(tipo: string) {\n if (tipo !== '1') return;\n\n this.documentService.loadingData = true;\n this.documentService.loading = false;\n const data = {\n action: this.accion,\n entity: this.entidad,\n tdoc: this.tdoc,\n ndoc: this.ndoc,\n request: this.Solicitud,\n documentProfile: this.perfilDocumentos,\n product: this.Producto,\n };\n\n this.documentsService\n .getFolders(this.idKatios, data)\n .pipe(\n tap((response: any) => {\n let res = response.data;\n if (response.data.RESPUESTA) res = response.data.RESPUESTA;\n this.okCargoArbol(res);\n }),\n switchMap(() =>\n this.Solicitud\n ? this.documentsService.getDocumentsToGenerate(\n this.idKatios,\n this.Solicitud,\n )\n : of(null),\n ),\n tap((resp: any) => {\n const list = resp?.data ?? []; // según tu JSON real\n this.documentsToGenerate = list;\n\n this.documentsToGenerateMap = {};\n list.forEach((d: any) => (this.documentsToGenerateMap[d.idDoc] = d));\n\n // dropdown: usa idDoc pero mantén objeto completo en map\n this.documentTypes = list.map((d: any) => ({\n label: d.description,\n code: d.idDoc,\n }));\n }),\n finalize(() => {\n this.documentService.loadingData = false;\n }),\n )\n .subscribe({\n error: (error: any) => {\n this.errorCargarArbol(error);\n },\n });\n\n this.tab = 1;\n this.documentoSeleccionado = null;\n this.emitNavigationState();\n }\n expandAll() {\n this.files.forEach((node: any) => {\n this.expandRecursive(node, true);\n });\n }\n\n private expandRecursive(node: TreeNode, isExpand: boolean) {\n node.expanded = isExpand;\n var objeto: any;\n objeto = node;\n if (node.children && node.children?.length > 0) {\n node.children.forEach((childNode) => {\n this.expandRecursive(childNode, isExpand);\n });\n } else if (objeto.Path !== undefined) {\n var path = 'Imagenes/' + objeto.Path + objeto.label;\n var re = /[\\\\]/gi;\n path = path.replace(re, '/');\n objeto.Path = this.server + path;\n //this.sanitizer.bypassSecurityTrustUrl(this.server + path)\n }\n }\n\n public okCargoArbol = (iArbol: any) => {\n if (!iArbol.CARPETA && iArbol.length === undefined) {\n iArbol = new Array(iArbol);\n } else if (iArbol.CARPETA.length === undefined) {\n iArbol = new Array(iArbol.CARPETA);\n }\n\n iArbol.forEach((element: any) => {\n this.convertirArrayChildren(element);\n });\n\n //\n this.filtrarTipoDocumento(iArbol);\n //\n this.files = iArbol;\n this.filesFilter = iArbol;\n this.expandAll();\n this.documentService.loadingData = false;\n };\n public errorCargarArbol = (iError: any) => {\n this.message(\n 'error',\n 'Error al traer la información',\n getUserErrorMessage(iError, 'getFolders'),\n );\n this.documentService.loadingData = false;\n };\n\n // onClickedCheckDelete($event: any, document: any) {\n // if ($event.checked) this.docsEliminables.push(document);\n // else this.docsEliminables = this.docsEliminables.filter(doc => doc !== document);\n // }\n\n funcOkDelDocumentMasivo = (docsEliminables: any[]) => {\n this.totalDocsEliminadosApi.existoso += 1;\n if (\n this.totalDocsEliminadosApi.existoso +\n this.totalDocsEliminadosApi.fallido ===\n docsEliminables.length\n ) {\n this.cargarParametros(this.tipo);\n if (this.totalDocsEliminadosApi.fallido > 0)\n this.message(\n 'warn',\n '',\n 'Algunos documentos no pudieron ser eliminados',\n );\n else\n this.message('success', '', 'Documentos eliminados satisfactoriamente');\n }\n };\n\n funcErrDelDocumentMasivo = (docsEliminables: any[]) => {\n this.totalDocsEliminadosApi.fallido += 1;\n if (\n this.totalDocsEliminadosApi.existoso +\n this.totalDocsEliminadosApi.fallido ===\n docsEliminables.length\n ) {\n this.cargarParametros(this.tipo);\n this.message('warn', '', 'Algunos documentos no pudieron ser eliminados');\n }\n };\n\n eliminarMasivo(docsEliminables: any[]) {\n this.confirmationService.confirm({\n message: `¿Desea eliminar los ${docsEliminables.length} documentos seleccionados?`,\n acceptLabel: 'Si',\n rejectLabel: 'No',\n accept: () => {\n this.documentService.loading = true;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n docsEliminables.forEach((doc) => {\n let data = { code: doc.codigo, status: 'DES' };\n this.documentsService.updateStatus(this.idKatios, data).subscribe({\n next: (response: any) => {\n this.funcOkDelDocumentMasivo(docsEliminables);\n },\n error: (error: any) => {\n this.documentService.loading = false;\n this.funcErrDelDocumentMasivo(docsEliminables);\n },\n });\n });\n },\n });\n }\n\n filtrarTipoDocumento(iArbol: any) {\n if (this.nmco.length !== 0) {\n iArbol.forEach((element: any) => {\n element.children = element.children.filter((child: any) =>\n this.nmco.includes(child.NMCo),\n );\n });\n }\n }\n\n convertirArrayChildren(node: any) {\n if (node.children === undefined) node.children = [];\n else if (node.children.length == undefined) {\n node.children = new Array(node.children);\n }\n node.children.forEach((childNode: any) => {\n this.convertirArrayChildren(childNode);\n });\n }\n\n // takePhotoClick() {\n // this.documentsService.openCamera(this.ok_openCamera, this.error_openCamera);\n // }\n /////Cuando se cargar archivos adjuntos\n fileChange(data: any) {\n const fileList = data.fileList;\n const tagValue = data.tagValue;\n this.file = fileList[0];\n this.imagePathInput = tagValue;\n this.generarData(fileList);\n }\n\n // ok_openCamera = (imageUri: any) => {\n // this.makeFileIntoBlob(imageUri)\n // .then((file: Blob) => {\n // this.appRef.tick();\n // if (file.size > 1000000) {\n // if (confirm(\"Este archivo es bastate pesado, le recomendamos bajar la calidad de la cámara. ¿Desea subir este archivo?\")) {\n // this.loadFileToList(file);\n // }\n // } else {\n // this.loadFileToList(file);\n // }\n // this.documentService.loading = false;\n // })\n // .catch((error: Error) => {\n // console.error('Error processing camera image:', error);\n // this.message(\"Error al procesar la imagen de la cámara\", \"Error\");\n // this.documentService.loading = false;\n // });\n // }\n\n loadFileToList(file: any) {\n setTimeout(() => {\n file['name'] = 'scan' + Date.now() + this.scanFileList.length + '.jpg';\n this.scanFileList.push(file);\n this.scanFileList = this.scanFileList.slice();\n this.documentService.loading = false;\n this.message('success', '', 'Archivo cargado exitosamente');\n\n this.appRef.tick();\n }, 200);\n }\n\n subirFotosScan() {\n this.generarData(this.scanFileList);\n }\n // error_openCamera = (err: any) => {\n // console.log(err);\n // this.message(\"No se pudo acceder a la camara\", \"Error\")\n // }\n\n noZonePatch(cb: () => void) {\n const orig = FileReader;\n const unpatched = ((window as any).FileReader as any)\n .__zone_symbol__OriginalDelegate;\n (window as any).FileReader = unpatched;\n cb();\n (window as any).FileReader = orig;\n }\n\n // makeFileIntoBlob(_imagePath: any): Promise<Blob> {\n // this.documentService.loading = true;\n // // INSTALL PLUGIN - cordova plugin add cordova-plugin-file\n // return new Promise((resolve, reject) => {\n // try {\n // window.resolveLocalFileSystemURL(_imagePath, (fileEntry: any) => {\n // fileEntry.file((resFile: any) => {\n // this.noZonePatch(() => {//! Alert 1: Comentarear esta linea y una de de abajo para ambiente de prueba\n // var reader = new FileReader();\n\n // reader.onloadend = (evt: any) => {\n // var imgBlob: any = new Blob([evt.target.result], { type: 'image/jpeg' });\n // imgBlob.name = 'scan.jpg';\n // resolve(imgBlob);\n // };\n\n // reader.onerror = (e) => {\n // console.log('Failed file read: ' + e.toString());\n // reject(e);\n // };\n // reader.readAsArrayBuffer(resFile);\n // });//!Comentarear esta linea y una de de arriba para ambiente de prueba\n // });\n // }, (error: any) => {\n // console.error('Error resolving file system URL:', error);\n // reject(error);\n // });\n // } catch (ex) {\n // console.error('Error in makeFileIntoBlob:', ex);\n // reject(ex);\n // }\n // });\n // }\n\n subirImagen(data: any, fileList: any) {\n this.documentService.loading = true;\n const formData: FormData = new FormData();\n var dataDocs;\n var sIdKatios = this.idKatios;\n dataDocs = { data: data };\n formData.append('data', JSON.stringify(dataDocs));\n formData.append('merge', 'false');\n\n for (let _i = 0; _i < fileList.length; _i++) {\n formData.append('files', fileList[_i], fileList[_i].name);\n }\n\n this.documentsService.uploadFiles(sIdKatios, formData).subscribe({\n next: (response: any) => {\n this.scanFileList = new Array<any>();\n this.message(\n 'success',\n 'Felicidades',\n 'Se almacenó el documento correctamente',\n );\n this.cargarParametros(this.tipo);\n this.documentService.loading = false;\n this.appRef.tick();\n },\n error: (err: any) => {\n this.documentService.loading = false;\n this.message(\n 'error',\n 'Se presentaron inconvenientes almacenando el documento',\n getUserErrorMessage(err, 'uploadFiles'),\n );\n },\n });\n }\n\n generarData(fileList: any) {\n this.documentService.loading = true;\n var sPath1;\n var dataClientes;\n let sPaths = '';\n if (this.documentoSeleccionado.Tipo.trim().toUpperCase() == 'PERSONA') {\n sPath1 =\n this.documentoSeleccionado.Tipo.trim() +\n '\\\\' +\n this.tdoc.trim() +\n '\\\\' +\n this.ndoc.trim() +\n '\\\\Cliente\\\\' +\n this.documentoSeleccionado.NMCo.trim();\n } else {\n //Kasociada\n //producto\n //Falta numero de solicitud\n\n sPath1 =\n this.documentoSeleccionado.Tipo.trim() +\n '\\\\' +\n this.Kasociada +\n '\\\\' +\n this.Producto +\n '\\\\' +\n this.Solicitud +\n '\\\\' +\n this.documentoSeleccionado.NMCo;\n }\n\n dataClientes = {\n Tipo: this.documentoSeleccionado.Tipo,\n id: '1',\n documento: this.documentoSeleccionado.NMCo,\n tdoc: this.tdoc.trim(),\n ndoc: this.ndoc.trim(),\n IdProducto: this.Solicitud,\n TipoProducto: this.Producto,\n Kasociada: this.Kasociada,\n archivoUpload: fileList[0],\n nombre: this.tdoc.trim() + '-' + this.ndoc.trim(),\n fileCargado: fileList[0],\n pathArchivo: sPath1,\n TipoArchivo: this.documentoSeleccionado.TipoArchivo,\n };\n sPaths = sPaths + sPath1 + ',';\n this.subirImagen(dataClientes, fileList);\n }\n\n cargarArchivo(iNodo: any) {\n this.scanFileList = new Array<any>();\n this.documentoSeleccionado = iNodo;\n }\n\n async seleccionoDocs(iNodo: any) {\n var path = iNodo.Path + iNodo.label;\n this.pdfUrl = '//imagenes//' + iNodo.idKatios + '//' + path;\n this.pdfUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfUrl);\n this.gotoBottom();\n }\n\n message(severity: string, summary: string, message: any) {\n this.snackBar.add({\n key: SF_DOCUMENTS_TOAST_KEY,\n severity: severity,\n summary: summary,\n detail: message,\n life: 4000,\n });\n }\n\n public gotoBottom(): void {\n window.scrollBy(0, this.panel.nativeElement.scrollHeight);\n }\n\n get requestData(): any {\n return {\n action: this.accion,\n entity: this.entidad,\n tdoc: this.tdoc,\n ndoc: this.ndoc,\n request: this.Solicitud,\n documentProfile: this.perfilDocumentos,\n product: this.Producto,\n };\n }\n\n public VerDetalleTab(items: any) {\n this.carpetaSeleccionada = items;\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\n this.tab = 2;\n this.emitNavigationState();\n }\n\n goToTab(tab: any) {\n this.tab = tab;\n this.emitNavigationState();\n }\n\n private emitNavigationState(): void {\n if (!this.useBreadcrumb) return;\n const state: SfDocumentNavigationState = { tab: this.tab };\n if (this.tab === 2 && this.carpetaSeleccionada) {\n state.folderLabel = (this.carpetaSeleccionada.label || '').replace(\n '#toolbar=0&navpanes=0&statusbar=0',\n '',\n );\n }\n this.onNavigationChange.emit(state);\n }\n\n next(iValor: any) {\n if (iValor < 0) {\n this.nextTabPapa.emit(iValor);\n } else {\n var respuesta = '';\n if (this.files) respuesta = this.valorDocumentosPendientes(this.files[0]);\n\n if (respuesta == '') {\n this.nextTabPapa.emit(iValor);\n } else {\n this.message('warn', 'Ups!', respuesta);\n }\n }\n }\n\n valorDocumentosPendientes(carpetas: any) {\n var respuesta = '';\n if (carpetas.children) {\n carpetas.children.forEach((carpeta: any) => {\n if (\n carpeta.Obligatorio == 1 &&\n (!carpeta.children || carpeta.children.length == 0)\n )\n respuesta = 'Falta ' + carpeta.label;\n });\n }\n return respuesta;\n }\n\n filtrarDocumentos() {\n this.filesFilter = _.cloneDeep(this.files);\n for (let i = 0; i < this.files.length; i++) {\n let node = [];\n for (let j = 0; j < this.files[i].children.length; j++) {\n let file = this.files[i].children[j];\n if (\n file.label.toLowerCase().indexOf(this.valorFiltro.toLowerCase()) == 0\n )\n node.push(file);\n }\n this.filesFilter[i].children = node;\n }\n }\n\n openGenerateDialog() {\n this.selectedDocType = null;\n this.selectedRange = null;\n this.generateError = null;\n this.displayGenerate = true;\n }\n\n generateDocument() {\n if (!this.selectedDocType) return;\n // Un error anterior no debe quedar junto al aviso de un parámetro faltante.\n this.generateError = null;\n\n // Solo los obligatorios deben tener valor\n for (const p of this.dynamicParams || []) {\n if (this.isRequired(p) && this.isEmpty(this.dynamicValues?.[p.name])) {\n this.message('warn', '', `Falta el parámetro ${p.description}`);\n return;\n }\n }\n\n // construir params: van todos, porque DocumentService exige cada parámetro de la\n // configuración; un opcional vacío viaja como null (DBNull en el SP).\n const paramsToSend: any = {};\n for (const p of this.dynamicParams || []) {\n const raw = this.dynamicValues?.[p.name];\n const value =\n (p.type || '').toLowerCase() === 'date' ? this.toYYYYMMDD(raw) : raw;\n paramsToSend[p.name] = this.isEmpty(value) ? null : value;\n }\n\n this.enProceso = true;\n\n const payload = {\n params: paramsToSend,\n };\n this.documentsService\n .generateDocument(\n this.idKatios,\n this.selectedDocType,\n this.Solicitud,\n payload,\n )\n .subscribe({\n next: () => {\n this.displayGenerate = false;\n this.message('success', '', 'Documento en generación');\n this.cargarParametros(this.tipo);\n this.enProceso = false;\n },\n error: (err: any) => {\n // El diálogo queda abierto con el error visible (p-message, role=\"alert\") para\n // corregir o reintentar. El toast solo si el usuario ya lo cerró: así un lector de\n // pantalla no anuncia el mismo error dos veces.\n this.generateError = getUserErrorMessage(err, 'generateDocument');\n if (!this.displayGenerate) {\n this.message(\n 'error',\n 'No se pudo generar el documento',\n this.generateError,\n );\n }\n this.enProceso = false;\n },\n });\n }\n private toYYYYMMDD(value: any): string | null {\n if (!value) return null;\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return null;\n\n // ISO: 2025-12-19T05:00:00.000Z -> 2025-12-19\n return d.toISOString().slice(0, 10);\n }\n onDocTypeChange() {\n const doc = this.selectedDocType\n ? this.documentsToGenerateMap[this.selectedDocType]\n : null;\n\n this.generateError = null;\n this.dynamicParams = doc?.params ?? [];\n this.dynamicValues = {}; // reset valores\n\n // Valores iniciales: un bit arranca en false (sin marcar ya es un valor); el resto, vacío.\n for (const p of this.dynamicParams) {\n this.dynamicValues[p.name] = this.isBoolean(p) ? false : null;\n }\n }\n\n /**\n * `required` viene de JCONFIGURACION (query.params) sin esquema: se acepta true, 1 y\n * \"true\"/\"1\"/\"s\"/\"si\"/\"sí\" en texto; cualquier otra cosa (false, \"false\", ausente) es\n * opcional. No aplica a los bit: arrancan en false, que ya es un valor.\n */\n isRequired(p: any): boolean {\n if (this.isBoolean(p)) return false;\n const r = p?.required;\n if (typeof r === 'string') {\n return ['true', '1', 's', 'si', 'sí'].includes(r.trim().toLowerCase());\n }\n return r === true || r === 1;\n }\n\n /** Vacío para la validación y el envío: null, undefined o texto en blanco (0 y false no). */\n private isEmpty(v: any): boolean {\n return v === null || v === undefined || (typeof v === 'string' && v.trim() === '');\n }\n\n isBoolean(p: any): boolean {\n return ['boolean', 'bit', 'bool'].includes((p?.type || '').toLowerCase());\n }\n\n openVisorDoc(item: any) {\n if (this.carpetaSeleccionada.TipoArchivo == '1' && this.isMobile) {\n //is mobile\n cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');\n } else {\n this.current_path = item.Path;\n this.current_label = item.label;\n this.displayView = true;\n }\n }\n\n openCurrentInNewWindow(path?: string): void {\n window.open(path || this.current_path, '_blank').focus();\n }\n\n canPreview(label?: string, path?: string): boolean {\n return (\n canPreviewFile(label || this.current_label) ||\n canPreviewFile(path || this.current_path)\n );\n }\n\n previewFallbackIcon(label?: string, path?: string): string {\n return getFileTypeIcon(\n label || this.current_label || path || this.current_path,\n );\n }\n}\n","<div class=\"sf-doc-layout\">\n <div class=\"sf-doc-fixed\">\n <div class=\"buttons\" *ngIf=\"botones\">\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\n <button\n pButton\n type=\"button\"\n label=\"Atras\"\n icon=\"pi pi-arrow-left\"\n (click)=\"next(-1)\"\n ></button>\n </div>\n <div\n class=\"div-table-col50\"\n style=\"text-align: center\"\n *ngIf=\"!bFinal && botones\"\n >\n <button\n pButton\n type=\"button\"\n label=\"Siguiente\"\n icon=\"pi pi-arrow-right\"\n (click)=\"next(1)\"\n ></button>\n </div>\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\n <button\n pButton\n type=\"button\"\n label=\"Finalizar\"\n icon=\"pi pi-home\"\n (click)=\"next(0)\"\n ></button>\n </div>\n </div>\n <!-- Toolbar superior (solo tab 1) -->\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\n <p-iconfield>\n <p-inputicon class=\"pi pi-search\" />\n <input\n type=\"text\"\n pInputText\n placeholder=\"Buscar carpeta...\"\n [(ngModel)]=\"valorFiltro\"\n (keyup)=\"filtrarDocumentos()\"\n class=\"w-full\"\n [disabled]=\"documentService.loadingData\"\n />\n </p-iconfield>\n </div>\n\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\n <button\n pButton\n type=\"button\"\n label=\"Generar documento\"\n icon=\"pi pi-plus\"\n class=\"p-button-sm\"\n (click)=\"openGenerateDialog()\"\n [disabled]=\"enProceso || !canGenerate\"\n ></button>\n </div>\n </div>\n </div>\n <p-confirmDialog\n header=\"Atención\"\n icon=\"pi pi-exclamation-triangle\"\n ></p-confirmDialog>\n <!-- Avisos de la librería: solo los de su key, así el toast del host no los duplica. -->\n <p-toast\n [key]=\"toastKey\"\n [breakpoints]=\"{ '576px': { width: 'calc(100vw - 40px)' } }\"\n ></p-toast>\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\n <div class=\"folder-list\">\n @if (!documentService.loadingData) {\n <ng-container *ngFor=\"let carpeta of filesFilter\">\n <div class=\"folder-list\">\n <div\n class=\"folder-item\"\n *ngFor=\"let item of carpeta.children\"\n (click)=\"VerDetalleTab(item)\"\n >\n <i\n class=\"pi pi-folder folder-item__icon\"\n [ngStyle]=\"{\n color:\n item.children?.length > 0 || item.fileCount > 0\n ? 'green'\n : 'red',\n }\"\n ></i>\n <div class=\"folder-item__info\">\n <span class=\"folder-item__name\">{{ item.label }}</span>\n <span\n class=\"folder-item__count\"\n *ngIf=\"item.children?.length > 0\"\n >{{ item.children.length }}\n {{\n item.children.length === 1 ? \"archivo\" : \"archivos\"\n }}</span\n >\n <span\n class=\"folder-item__count\"\n *ngIf=\"\n (!item.children || item.children.length === 0) &&\n item.fileCount\n \"\n >{{ item.fileCount }}\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\n >\n <span\n class=\"folder-item__count\"\n *ngIf=\"\n (!item.children || item.children.length === 0) &&\n !item.fileCount\n \"\n >0 archivos</span\n >\n </div>\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\n </div>\n </div>\n </ng-container>\n } @else {\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n <div class=\"folder-item\">\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\n <div class=\"self-center\" style=\"flex: 1\">\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\n <p-skeleton width=\"75%\" />\n </div>\n </div>\n }\n </div>\n <ng-container *ngIf=\"botones\">\n <div class=\"buttons\">\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\n <button\n pButton\n type=\"button\"\n label=\"Atras\"\n icon=\"pi pi-arrow-left\"\n (click)=\"next(-1)\"\n ></button>\n </div>\n <div\n class=\"div-table-col50\"\n style=\"text-align: center\"\n *ngIf=\"!bFinal && botones\"\n >\n <button\n pButton\n type=\"button\"\n label=\"Siguiente\"\n icon=\"pi pi-arrow-right\"\n (click)=\"next(1)\"\n ></button>\n </div>\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\n <button\n pButton\n type=\"button\"\n label=\"Finalizar\"\n icon=\"pi pi-home\"\n (click)=\"next(0)\"\n ></button>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\n <lib-folder-files\n [carpeta]=\"carpetaSeleccionada\"\n [isMobile]=\"isMobile\"\n [idKatios]=\"idKatios\"\n [server]=\"server\"\n [subestado]=\"subestado\"\n [requestData]=\"requestData\"\n [useBreadcrumb]=\"useBreadcrumb\"\n [usesApi]=\"usesApi\"\n [allowedUploadTypes]=\"allowedUploadTypes\"\n (onFileChange)=\"fileChange($event)\"\n (onCargarArchivo)=\"cargarArchivo($event)\"\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\n (onBack)=\"goToTab('1')\"\n (viewDocument)=\"openVisorDoc($event)\"\n >\n </lib-folder-files>\n </div>\n</div>\n\n<!-- <ng-template #scanContent>\n <div class=\"div-table\">\n <div class=\"div-table-row\" style=\"text-align: center\">\n <h4>Escanear documentos</h4>\n </div>\n <div class=\"div-table-row\" style=\"text-align: center\">\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\n </div>\n <div class=\"div-table-row\" style=\"text-align: center\">\n <label (click)=\"takePhotoClick()\" class=\"btn\">\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\n </label>\n\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\n </label>\n </div>\n </div>\n</ng-template> -->\n\n<p-dialog\n [(visible)]=\"displayView\"\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\n [modal]=\"true\"\n [style]=\"{ width: '70vw' }\"\n appendTo=\"body\"\n>\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\n <p>La vista previa no está disponible para este tipo de archivo.</p>\n <button\n pButton\n type=\"button\"\n label=\"Abrir en una nueva ventana\"\n icon=\"pi pi-external-link\"\n (click)=\"openCurrentInNewWindow()\"\n ></button>\n </div>\n <ng-container *ngIf=\"canPreview()\">\n <embed\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '2'\"\n [src]=\"current_path | safe\"\n style=\"width: 100%; min-height: 600px\"\n />\n <iframe\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '1'\"\n style=\"width: 100%; min-height: 600px\"\n [src]=\"current_path | safe\"\n ></iframe>\n </ng-container>\n</p-dialog>\n\n<p-dialog\n header=\"Generar documento\"\n [(visible)]=\"displayGenerate\"\n [modal]=\"true\"\n [closable]=\"true\"\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\n>\n <div class=\"gen-form\">\n <!-- Error de la última generación: el diálogo queda abierto para corregir o reintentar -->\n <p-message\n *ngIf=\"generateError\"\n severity=\"error\"\n icon=\"pi pi-times-circle\"\n styleClass=\"w-full\"\n >\n No se pudo generar el documento. {{ generateError }}\n </p-message>\n\n <!-- Tipo de documento -->\n <div class=\"gen-field\">\n <!-- p-select pone el inputId en un span (combobox): el nombre le llega por aria-labelledby -->\n <label class=\"gen-label\" id=\"gen-doc-type-label\" for=\"gen-doc-type\">Tipo de documento</label>\n <p-select\n class=\"gen-control\"\n inputId=\"gen-doc-type\"\n ariaLabelledBy=\"gen-doc-type-label\"\n [options]=\"documentTypes\"\n optionLabel=\"label\"\n optionValue=\"code\"\n [(ngModel)]=\"selectedDocType\"\n placeholder=\"Seleccione un tipo\"\n appendTo=\"body\"\n (onChange)=\"onDocTypeChange()\"\n >\n </p-select>\n </div>\n\n <!-- Parámetros dinámicos: cada label apunta al id de su control, gen-param-{índice}\n (el name puede traer caracteres que no sirven en un id) -->\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams; let i = index\">\n <label class=\"gen-label\" [attr.for]=\"'gen-param-' + i\">\n {{ p.description }}\n <span class=\"gen-required\" *ngIf=\"isRequired(p)\" aria-hidden=\"true\">*</span>\n </label>\n\n <!-- Date -->\n <p-datepicker\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\n class=\"gen-control\"\n [inputId]=\"'gen-param-' + i\"\n [required]=\"isRequired(p)\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n [showIcon]=\"true\"\n appendTo=\"body\"\n dateFormat=\"yy-mm-dd\"\n >\n </p-datepicker>\n\n <!-- String -->\n <input\n *ngIf=\"\n (p.type || '').toLowerCase() === 'nvarchar' ||\n (p.type || '').toLowerCase() === 'string'\n \"\n pInputText\n class=\"gen-control\"\n [id]=\"'gen-param-' + i\"\n [attr.aria-required]=\"isRequired(p)\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n placeholder=\"Ingrese un valor\"\n />\n\n <!-- Number: los int van sin decimales ni separador de miles (suelen ser ids o años) -->\n <p-inputNumber\n *ngIf=\"\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\n \"\n class=\"gen-control\"\n [inputId]=\"'gen-param-' + i\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n locale=\"es-CO\"\n [maxFractionDigits]=\"(p.type || '').toLowerCase() === 'int' ? 0 : 4\"\n [useGrouping]=\"(p.type || '').toLowerCase() !== 'int'\"\n [max]=\"(p.type || '').toLowerCase() === 'int' ? 2147483647 : null\"\n [ariaRequired]=\"isRequired(p)\"\n placeholder=\"Ingrese un valor\"\n >\n </p-inputNumber>\n\n <!-- Boolean -->\n <div\n class=\"gen-control gen-checkbox\"\n *ngIf=\"isBoolean(p)\"\n >\n <p-checkbox\n [binary]=\"true\"\n [inputId]=\"'gen-param-' + i\"\n [(ngModel)]=\"dynamicValues[p.name]\"\n >\n </p-checkbox>\n <span class=\"gen-checkbox-label\" aria-hidden=\"true\">Sí</span>\n </div>\n\n <!-- helper opcional -->\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\n </div>\n </div>\n </div>\n\n <ng-template #footer>\n <button\n pButton\n type=\"button\"\n label=\"Cancelar\"\n class=\"p-button-text\"\n (click)=\"displayGenerate = false\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n [label]=\"generateError ? 'Reintentar' : 'Generar'\"\n [icon]=\"generateError ? 'pi pi-refresh' : 'pi pi-cog'\"\n (click)=\"generateDocument()\"\n [loading]=\"enProceso\"\n [disabled]=\"!selectedDocType || enProceso\"\n ></button>\n </ng-template>\n</p-dialog>\n","/*\n * Public API Surface of sf-documents\n */\n\nexport * from './lib/sf-documents.service';\nexport * from './lib/sf-documents.component';\nexport * from './lib/gateways/document.port';\nexport * from './lib/components/folder-files/folder-files.component';\nexport * from './lib/models/navigation-state.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4","i3.SfDocumentsService","i5","i7","i11","i12","i16"],"mappings":"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"}