sf-documents 0.1.7 → 0.1.9

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.
@@ -12,9 +12,9 @@ import { ConfirmDialogModule } from 'primeng/confirmdialog';
12
12
  import { PanelModule } from 'primeng/panel';
13
13
  import * as i4 from 'primeng/checkbox';
14
14
  import { CheckboxModule } from 'primeng/checkbox';
15
- import * as i8 from 'primeng/dialog';
15
+ import * as i7$1 from 'primeng/dialog';
16
16
  import { DialogModule } from 'primeng/dialog';
17
- import * as i1$2 from '@angular/common';
17
+ import * as i8 from '@angular/common';
18
18
  import { CommonModule, registerLocaleData, DatePipe } from '@angular/common';
19
19
  import * as i2 from '@angular/forms';
20
20
  import { FormsModule } from '@angular/forms';
@@ -273,6 +273,7 @@ class FolderFilesComponent {
273
273
  onCargarArchivo = new EventEmitter();
274
274
  onEliminarMasivo = new EventEmitter();
275
275
  onBack = new EventEmitter();
276
+ viewDocument = new EventEmitter();
276
277
  items = [];
277
278
  page = 1;
278
279
  pageSize = 10;
@@ -417,16 +418,7 @@ class FolderFilesComponent {
417
418
  this.onCargarArchivo.emit(this.carpeta);
418
419
  }
419
420
  openVisorDoc(item) {
420
- if (this.carpeta.TipoArchivo == '1' && this.isMobile) {
421
- //is mobile
422
- cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');
423
- }
424
- else {
425
- this.current_path = item.Path;
426
- this.current_label = item.label;
427
- console.log('current_path', this.current_path);
428
- this.displayView = true;
429
- }
421
+ this.viewDocument.emit(item);
430
422
  }
431
423
  openCurrentInNewWindow(path) {
432
424
  window.open(path || this.current_path, '_blank').focus();
@@ -465,7 +457,7 @@ class FolderFilesComponent {
465
457
  this.loadFiles();
466
458
  }
467
459
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: FolderFilesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
468
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: FolderFilesComponent, isStandalone: true, selector: "lib-folder-files", inputs: { carpeta: "carpeta", isMobile: "isMobile", idKatios: "idKatios", server: "server", subestado: "subestado", requestData: "requestData", useBreadcrumb: "useBreadcrumb", usesApi: "usesApi", allowedUploadTypes: "allowedUploadTypes" }, outputs: { onFileChange: "onFileChange", onCargarArchivo: "onCargarArchivo", onEliminarMasivo: "onEliminarMasivo", onBack: "onBack" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: b\u00FAsqueda + botones de acci\u00F3n -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginaci\u00F3n compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no est\u00E1 disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-header{flex-shrink:0}.ff-back-row{display:flex;margin-block:15px}.ff-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:4px;padding:.5rem}.ff-toolbar__search{flex:1;min-width:0}:host ::ng-deep .ff-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.ff-toolbar__actions{display:flex;align-items:center;gap:6px;flex-shrink:0}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px;padding:.4rem .75rem}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .ff-btn-delete{white-space:nowrap;font-size:13px;padding:.4rem .75rem}.ff-select-row{display:flex;align-items:center;justify-content:space-between;padding:8px 4px;border-bottom:1px solid #e5e7eb;padding:.5rem}.ff-select-row__left{display:flex;align-items:center;gap:8px}.ff-select-row__label{font-size:13px;color:#374151}.ff-select-row__count{font-size:13px;color:#6b7280}.ff-file-list-wrapper{flex:1;min-height:0;overflow-y:auto}.ff-loading{text-align:center;padding:20px}.ff-file-list{display:flex;flex-direction:column}.ff-file-item{display:flex;align-items:center;gap:12px;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.ff-file-item:hover{background-color:#f9fafb}.ff-file-item__preview{flex-shrink:0;width:85px;height:100px;overflow:hidden;display:flex;align-items:center;justify-content:center}.ff-file-item__frame{width:85px;height:100px;border:none;pointer-events:none;object-fit:cover}.ff-file-item__icon{display:flex;align-items:center;justify-content:center;font-size:40px;color:#6b7280;background-color:#f3f4f6;border-radius:4px}.ff-file-item__icon.pi-file-excel{color:#1d6f42;background-color:#f0faf5}.ff-file-item__icon.pi-file-pdf{color:#b91c1c;background-color:#fef2f2}.ff-file-item__icon.pi-file-word{color:#1d4ed8;background-color:#eff6ff}.ff-file-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;text-align:right}.ff-file-item__name{font-size:13px;font-weight:500;color:#111827;min-width:0;word-break:break-word}.ff-file-item__date{font-size:12px;color:#9ca3af;overflow:hidden}.ff-file-item__open{font-size:18px;color:#3b82f6;flex-shrink:0;padding:4px;border-radius:4px;transition:color .15s ease,background-color .15s ease;cursor:pointer;align-self:flex-end}.ff-file-item__open:hover{color:#2563eb;background-color:#eff6ff}.ff-empty{text-align:center;padding:20px;color:#999}.ff-footer{flex-shrink:0;border-top:1px solid #e5e7eb}.ff-pagination{display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:6px 8px;font-size:13px}:host ::ng-deep .ff-pagination .p-select{width:auto;min-width:90px}:host ::ng-deep .ff-pagination .p-select .p-select-label{font-size:12px;padding:4px 8px}:host ::ng-deep .ff-pagination .p-paginator{padding:0;background:transparent;border:none;gap:0}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-current{font-size:12px;color:#6b7280;padding:0 6px;min-width:auto;height:auto}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-prev,:host ::ng-deep .ff-pagination .p-paginator .p-paginator-next{min-width:28px;height:28px;font-size:12px}@media only screen and (max-width: 656px){.ff-toolbar{gap:6px}.ff-btn-label{display:none}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button .p-button-label{display:none}:host ::ng-deep .ff-toolbar__actions .p-button{padding:.5rem}.ff-file-item__preview,.ff-file-item__frame{width:65px;height:80px}.ff-file-item__icon{font-size:28px}.ff-file-item__name{font-size:12px}.ff-file-item__date{font-size:11px}}.sf-doc-preview-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:300px;text-align:center;color:#374151}.sf-doc-preview-fallback i{font-size:48px;color:#6b7280}.sf-doc-preview-fallback i.pi-file-excel{color:#1d6f42}.sf-doc-preview-fallback i.pi-file-pdf{color:#b91c1c}.sf-doc-preview-fallback i.pi-file-word{color:#1d4ed8}.frameDoc{overflow:hidden;border:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }, { kind: "component", type: UploadDialogComponent, selector: "lib-upload-dialog", inputs: ["selectedDocument", "allowedExtensions"], outputs: ["onUploaded", "loadFile"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i7.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "pipe", type: FlexibleDatePipe, name: "flexibleDate" }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }] });
460
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: FolderFilesComponent, isStandalone: true, selector: "lib-folder-files", inputs: { carpeta: "carpeta", isMobile: "isMobile", idKatios: "idKatios", server: "server", subestado: "subestado", requestData: "requestData", useBreadcrumb: "useBreadcrumb", usesApi: "usesApi", allowedUploadTypes: "allowedUploadTypes" }, outputs: { onFileChange: "onFileChange", onCargarArchivo: "onCargarArchivo", onEliminarMasivo: "onEliminarMasivo", onBack: "onBack", viewDocument: "viewDocument" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: b\u00FAsqueda + botones de acci\u00F3n -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginaci\u00F3n compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-header{flex-shrink:0}.ff-back-row{display:flex;margin-block:15px}.ff-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:4px;padding:.5rem}.ff-toolbar__search{flex:1;min-width:0}:host ::ng-deep .ff-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.ff-toolbar__actions{display:flex;align-items:center;gap:6px;flex-shrink:0}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px;padding:.4rem .75rem}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .ff-btn-delete{white-space:nowrap;font-size:13px;padding:.4rem .75rem}.ff-select-row{display:flex;align-items:center;justify-content:space-between;padding:8px 4px;border-bottom:1px solid #e5e7eb;padding:.5rem}.ff-select-row__left{display:flex;align-items:center;gap:8px}.ff-select-row__label{font-size:13px;color:#374151}.ff-select-row__count{font-size:13px;color:#6b7280}.ff-file-list-wrapper{flex:1;min-height:0;overflow-y:auto}.ff-loading{text-align:center;padding:20px}.ff-file-list{display:flex;flex-direction:column}.ff-file-item{display:flex;align-items:center;gap:12px;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.ff-file-item:hover{background-color:#f9fafb}.ff-file-item__preview{flex-shrink:0;width:85px;height:100px;overflow:hidden;display:flex;align-items:center;justify-content:center}.ff-file-item__frame{width:85px;height:100px;border:none;pointer-events:none;object-fit:cover}.ff-file-item__icon{display:flex;align-items:center;justify-content:center;font-size:40px;color:#6b7280;background-color:#f3f4f6;border-radius:4px}.ff-file-item__icon.pi-file-excel{color:#1d6f42;background-color:#f0faf5}.ff-file-item__icon.pi-file-pdf{color:#b91c1c;background-color:#fef2f2}.ff-file-item__icon.pi-file-word{color:#1d4ed8;background-color:#eff6ff}.ff-file-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;text-align:right}.ff-file-item__name{font-size:13px;font-weight:500;color:#111827;min-width:0;word-break:break-word}.ff-file-item__date{font-size:12px;color:#9ca3af;overflow:hidden}.ff-file-item__open{font-size:18px;color:#3b82f6;flex-shrink:0;padding:4px;border-radius:4px;transition:color .15s ease,background-color .15s ease;cursor:pointer;align-self:flex-end}.ff-file-item__open:hover{color:#2563eb;background-color:#eff6ff}.ff-empty{text-align:center;padding:20px;color:#999}.ff-footer{flex-shrink:0;border-top:1px solid #e5e7eb}.ff-pagination{display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:6px 8px;font-size:13px}:host ::ng-deep .ff-pagination .p-select{width:auto;min-width:90px}:host ::ng-deep .ff-pagination .p-select .p-select-label{font-size:12px;padding:4px 8px}:host ::ng-deep .ff-pagination .p-paginator{padding:0;background:transparent;border:none;gap:0}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-current{font-size:12px;color:#6b7280;padding:0 6px;min-width:auto;height:auto}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-prev,:host ::ng-deep .ff-pagination .p-paginator .p-paginator-next{min-width:28px;height:28px;font-size:12px}@media only screen and (max-width: 656px){.ff-toolbar{gap:6px}.ff-btn-label{display:none}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button .p-button-label{display:none}:host ::ng-deep .ff-toolbar__actions .p-button{padding:.5rem}.ff-file-item__preview,.ff-file-item__frame{width:65px;height:80px}.ff-file-item__icon{font-size:28px}.ff-file-item__name{font-size:12px}.ff-file-item__date{font-size:11px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "pipe", type: SafePipe, name: "safe" }, { kind: "component", type: UploadDialogComponent, selector: "lib-upload-dialog", inputs: ["selectedDocument", "allowedExtensions"], outputs: ["onUploaded", "loadFile"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i7.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "pipe", type: FlexibleDatePipe, name: "flexibleDate" }, { kind: "ngmodule", type: DialogModule }] });
469
461
  }
470
462
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: FolderFilesComponent, decorators: [{
471
463
  type: Component,
@@ -483,7 +475,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
483
475
  SelectModule,
484
476
  FlexibleDatePipe,
485
477
  DialogModule,
486
- ], standalone: true, template: "<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: b\u00FAsqueda + botones de acci\u00F3n -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginaci\u00F3n compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no est\u00E1 disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-header{flex-shrink:0}.ff-back-row{display:flex;margin-block:15px}.ff-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:4px;padding:.5rem}.ff-toolbar__search{flex:1;min-width:0}:host ::ng-deep .ff-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.ff-toolbar__actions{display:flex;align-items:center;gap:6px;flex-shrink:0}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px;padding:.4rem .75rem}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .ff-btn-delete{white-space:nowrap;font-size:13px;padding:.4rem .75rem}.ff-select-row{display:flex;align-items:center;justify-content:space-between;padding:8px 4px;border-bottom:1px solid #e5e7eb;padding:.5rem}.ff-select-row__left{display:flex;align-items:center;gap:8px}.ff-select-row__label{font-size:13px;color:#374151}.ff-select-row__count{font-size:13px;color:#6b7280}.ff-file-list-wrapper{flex:1;min-height:0;overflow-y:auto}.ff-loading{text-align:center;padding:20px}.ff-file-list{display:flex;flex-direction:column}.ff-file-item{display:flex;align-items:center;gap:12px;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.ff-file-item:hover{background-color:#f9fafb}.ff-file-item__preview{flex-shrink:0;width:85px;height:100px;overflow:hidden;display:flex;align-items:center;justify-content:center}.ff-file-item__frame{width:85px;height:100px;border:none;pointer-events:none;object-fit:cover}.ff-file-item__icon{display:flex;align-items:center;justify-content:center;font-size:40px;color:#6b7280;background-color:#f3f4f6;border-radius:4px}.ff-file-item__icon.pi-file-excel{color:#1d6f42;background-color:#f0faf5}.ff-file-item__icon.pi-file-pdf{color:#b91c1c;background-color:#fef2f2}.ff-file-item__icon.pi-file-word{color:#1d4ed8;background-color:#eff6ff}.ff-file-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;text-align:right}.ff-file-item__name{font-size:13px;font-weight:500;color:#111827;min-width:0;word-break:break-word}.ff-file-item__date{font-size:12px;color:#9ca3af;overflow:hidden}.ff-file-item__open{font-size:18px;color:#3b82f6;flex-shrink:0;padding:4px;border-radius:4px;transition:color .15s ease,background-color .15s ease;cursor:pointer;align-self:flex-end}.ff-file-item__open:hover{color:#2563eb;background-color:#eff6ff}.ff-empty{text-align:center;padding:20px;color:#999}.ff-footer{flex-shrink:0;border-top:1px solid #e5e7eb}.ff-pagination{display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:6px 8px;font-size:13px}:host ::ng-deep .ff-pagination .p-select{width:auto;min-width:90px}:host ::ng-deep .ff-pagination .p-select .p-select-label{font-size:12px;padding:4px 8px}:host ::ng-deep .ff-pagination .p-paginator{padding:0;background:transparent;border:none;gap:0}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-current{font-size:12px;color:#6b7280;padding:0 6px;min-width:auto;height:auto}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-prev,:host ::ng-deep .ff-pagination .p-paginator .p-paginator-next{min-width:28px;height:28px;font-size:12px}@media only screen and (max-width: 656px){.ff-toolbar{gap:6px}.ff-btn-label{display:none}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button .p-button-label{display:none}:host ::ng-deep .ff-toolbar__actions .p-button{padding:.5rem}.ff-file-item__preview,.ff-file-item__frame{width:65px;height:80px}.ff-file-item__icon{font-size:28px}.ff-file-item__name{font-size:12px}.ff-file-item__date{font-size:11px}}.sf-doc-preview-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:300px;text-align:center;color:#374151}.sf-doc-preview-fallback i{font-size:48px;color:#6b7280}.sf-doc-preview-fallback i.pi-file-excel{color:#1d6f42}.sf-doc-preview-fallback i.pi-file-pdf{color:#b91c1c}.sf-doc-preview-fallback i.pi-file-word{color:#1d4ed8}.frameDoc{overflow:hidden;border:none}\n"] }]
478
+ ], standalone: true, template: "<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: b\u00FAsqueda + botones de acci\u00F3n -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginaci\u00F3n compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.ff-header{flex-shrink:0}.ff-back-row{display:flex;margin-block:15px}.ff-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:4px;padding:.5rem}.ff-toolbar__search{flex:1;min-width:0}:host ::ng-deep .ff-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.ff-toolbar__actions{display:flex;align-items:center;gap:6px;flex-shrink:0}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px;padding:.4rem .75rem}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .ff-btn-delete{white-space:nowrap;font-size:13px;padding:.4rem .75rem}.ff-select-row{display:flex;align-items:center;justify-content:space-between;padding:8px 4px;border-bottom:1px solid #e5e7eb;padding:.5rem}.ff-select-row__left{display:flex;align-items:center;gap:8px}.ff-select-row__label{font-size:13px;color:#374151}.ff-select-row__count{font-size:13px;color:#6b7280}.ff-file-list-wrapper{flex:1;min-height:0;overflow-y:auto}.ff-loading{text-align:center;padding:20px}.ff-file-list{display:flex;flex-direction:column}.ff-file-item{display:flex;align-items:center;gap:12px;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.ff-file-item:hover{background-color:#f9fafb}.ff-file-item__preview{flex-shrink:0;width:85px;height:100px;overflow:hidden;display:flex;align-items:center;justify-content:center}.ff-file-item__frame{width:85px;height:100px;border:none;pointer-events:none;object-fit:cover}.ff-file-item__icon{display:flex;align-items:center;justify-content:center;font-size:40px;color:#6b7280;background-color:#f3f4f6;border-radius:4px}.ff-file-item__icon.pi-file-excel{color:#1d6f42;background-color:#f0faf5}.ff-file-item__icon.pi-file-pdf{color:#b91c1c;background-color:#fef2f2}.ff-file-item__icon.pi-file-word{color:#1d4ed8;background-color:#eff6ff}.ff-file-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;text-align:right}.ff-file-item__name{font-size:13px;font-weight:500;color:#111827;min-width:0;word-break:break-word}.ff-file-item__date{font-size:12px;color:#9ca3af;overflow:hidden}.ff-file-item__open{font-size:18px;color:#3b82f6;flex-shrink:0;padding:4px;border-radius:4px;transition:color .15s ease,background-color .15s ease;cursor:pointer;align-self:flex-end}.ff-file-item__open:hover{color:#2563eb;background-color:#eff6ff}.ff-empty{text-align:center;padding:20px;color:#999}.ff-footer{flex-shrink:0;border-top:1px solid #e5e7eb}.ff-pagination{display:flex;align-items:center;justify-content:flex-end;gap:4px;padding:6px 8px;font-size:13px}:host ::ng-deep .ff-pagination .p-select{width:auto;min-width:90px}:host ::ng-deep .ff-pagination .p-select .p-select-label{font-size:12px;padding:4px 8px}:host ::ng-deep .ff-pagination .p-paginator{padding:0;background:transparent;border:none;gap:0}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-current{font-size:12px;color:#6b7280;padding:0 6px;min-width:auto;height:auto}:host ::ng-deep .ff-pagination .p-paginator .p-paginator-prev,:host ::ng-deep .ff-pagination .p-paginator .p-paginator-next{min-width:28px;height:28px;font-size:12px}@media only screen and (max-width: 656px){.ff-toolbar{gap:6px}.ff-btn-label{display:none}:host ::ng-deep .ff-toolbar__actions lib-upload-dialog .p-button .p-button-label{display:none}:host ::ng-deep .ff-toolbar__actions .p-button{padding:.5rem}.ff-file-item__preview,.ff-file-item__frame{width:65px;height:80px}.ff-file-item__icon{font-size:28px}.ff-file-item__name{font-size:12px}.ff-file-item__date{font-size:11px}}\n"] }]
487
479
  }], ctorParameters: () => [], propDecorators: { carpeta: [{
488
480
  type: Input
489
481
  }], isMobile: [{
@@ -510,6 +502,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
510
502
  type: Output
511
503
  }], onBack: [{
512
504
  type: Output
505
+ }], viewDocument: [{
506
+ type: Output
513
507
  }] } });
514
508
 
515
509
  class SfDocumentsComponent {
@@ -571,6 +565,9 @@ class SfDocumentsComponent {
571
565
  dynamicValues = {};
572
566
  selectedDocType = null;
573
567
  selectedRange = null;
568
+ current_path = '';
569
+ current_label = '';
570
+ displayView = false;
574
571
  constructor(sanitizer, snackBar, appRef, confirmationService, documentService) {
575
572
  this.sanitizer = sanitizer;
576
573
  this.snackBar = snackBar;
@@ -1087,8 +1084,29 @@ class SfDocumentsComponent {
1087
1084
  this.dynamicValues[key] = null;
1088
1085
  }
1089
1086
  }
1087
+ openVisorDoc(item) {
1088
+ if (this.carpetaSeleccionada.TipoArchivo == '1' && this.isMobile) {
1089
+ //is mobile
1090
+ cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');
1091
+ }
1092
+ else {
1093
+ this.current_path = item.Path;
1094
+ this.current_label = item.label;
1095
+ this.displayView = true;
1096
+ }
1097
+ }
1098
+ openCurrentInNewWindow(path) {
1099
+ window.open(path || this.current_path, '_blank').focus();
1100
+ }
1101
+ canPreview(label, path) {
1102
+ return (canPreviewFile(label || this.current_label) ||
1103
+ canPreviewFile(path || this.current_path));
1104
+ }
1105
+ previewFallbackIcon(label, path) {
1106
+ return getFileTypeIcon(label || this.current_label || path || this.current_path);
1107
+ }
1090
1108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SfDocumentsComponent, deps: [{ token: i1.DomSanitizer }, { token: i2$1.MessageService }, { token: i0.ApplicationRef }, { token: i2$1.ConfirmationService }, { token: SfDocumentsService }], target: i0.ɵɵFactoryTarget.Component });
1091
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: SfDocumentsComponent, isStandalone: true, selector: "app-sf-documents", inputs: { accion: "accion", entidad: "entidad", ndoc: "ndoc", tdoc: "tdoc", tipo: "tipo", Kasociada: "Kasociada", Producto: "Producto", Solicitud: "Solicitud", oSession: "oSession", perfilDocumentos: "perfilDocumentos", subestado: "subestado", isMobile: "isMobile", bAtras: "bAtras", bFinal: "bFinal", botones: "botones", aplFiltro: "aplFiltro", nmco: "nmco", useBreadcrumb: "useBreadcrumb", usesApi: "usesApi", allowedUploadTypes: "allowedUploadTypes", server: "server", idKatios: "idKatios" }, outputs: { nextTabPapa: "nextTabPapa", onNavigationChange: "onNavigationChange" }, providers: [ConfirmationService], viewQueries: [{ propertyName: "panel", first: true, predicate: ["pdf"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Par\u00E1metros din\u00E1micos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">S\u00ED</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-fixed{flex-shrink:0}.sf-doc-scrollable{flex:1;min-height:0;overflow-y:auto}.sf-doc-scrollable--files{overflow:hidden;display:flex;flex-direction:column}:host ::ng-deep .sf-doc-scrollable--files>lib-folder-files{flex:1;min-height:0}.iconWhatsApp{font-size:40px;color:#6495ed}.doc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:.5rem}:host ::ng-deep .doc-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.doc-toolbar-left{flex:1;min-width:180px}.doc-toolbar-right{display:flex;justify-content:flex-end}:host ::ng-deep .doc-toolbar-right .p-button-outlined{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px}:host ::ng-deep .doc-toolbar-right .p-button-outlined:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .doc-toolbar-right .p-button-outlined:disabled{opacity:.5}@media only screen and (max-width: 656px),(max-device-width: 656px){.doc-toolbar{flex-direction:column;align-items:stretch}.doc-toolbar-right{justify-content:stretch}.doc-toolbar-right button{width:100%}}.folder-list{display:flex;flex-direction:column}.folder-item{display:flex;align-items:center;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.folder-item:hover{background-color:#f9fafb}.folder-item:last-child{border-bottom:1px solid #e5e7eb}.folder-item__icon{font-size:18px;color:#6b7280;margin-right:12px;flex-shrink:0}.folder-item__info{display:flex;flex-direction:column;flex:1;min-width:0}.folder-item__name{font-size:13.5px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.folder-item__count{font-size:12px;color:#9ca3af;margin-top:1px}.folder-item__arrow{font-size:13px;color:#9ca3af;margin-left:12px;flex-shrink:0}.buttons{display:flex;justify-content:space-around;margin-block:15px}.buttonResponsive,buttonResponsiveBotonFinal{display:inline-block;border-radius:4px;background-color:#00f;border:none;color:#fff;text-align:center;font-size:12px;padding:10px;width:200px;transition:all .5s;cursor:pointer;margin:20px 5px 5px}.gen-form{display:flex;flex-direction:column;gap:14px}.gen-section{display:flex;flex-direction:column;gap:12px}.gen-field{display:flex;flex-direction:column;gap:6px}.gen-label{font-size:13px;font-weight:600;color:#111827}.gen-required{color:#ef4444;margin-left:4px}.gen-control{width:100%}:host ::ng-deep .gen-control .p-dropdown,:host ::ng-deep .gen-control .p-inputtext,:host ::ng-deep .gen-control .p-inputnumber,:host ::ng-deep .gen-control .p-datepicker{width:100%}:host ::ng-deep .gen-control .p-inputnumber-input{width:100%}.gen-checkbox{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:8px}.gen-checkbox-label{font-size:14px;color:#374151}.gen-help{color:#6b7280}\n"], dependencies: [{ kind: "ngmodule", type: ToastModule }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i5$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: PanelModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: FolderFilesComponent, selector: "lib-folder-files", inputs: ["carpeta", "isMobile", "idKatios", "server", "subestado", "requestData", "useBreadcrumb", "usesApi", "allowedUploadTypes"], outputs: ["onFileChange", "onCargarArchivo", "onEliminarMasivo", "onBack"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i11.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i12.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
1109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: SfDocumentsComponent, isStandalone: true, selector: "app-sf-documents", inputs: { accion: "accion", entidad: "entidad", ndoc: "ndoc", tdoc: "tdoc", tipo: "tipo", Kasociada: "Kasociada", Producto: "Producto", Solicitud: "Solicitud", oSession: "oSession", perfilDocumentos: "perfilDocumentos", subestado: "subestado", isMobile: "isMobile", bAtras: "bAtras", bFinal: "bFinal", botones: "botones", aplFiltro: "aplFiltro", nmco: "nmco", useBreadcrumb: "useBreadcrumb", usesApi: "usesApi", allowedUploadTypes: "allowedUploadTypes", server: "server", idKatios: "idKatios" }, outputs: { nextTabPapa: "nextTabPapa", onNavigationChange: "onNavigationChange" }, providers: [ConfirmationService], viewQueries: [{ propertyName: "panel", first: true, predicate: ["pdf"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n (viewDocument)=\"openVisorDoc($event)\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n appendTo=\"body\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no est\u00E1 disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Par\u00E1metros din\u00E1micos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">S\u00ED</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-fixed{flex-shrink:0}.sf-doc-scrollable{flex:1;min-height:0;overflow-y:auto}.sf-doc-scrollable--files{overflow:hidden;display:flex;flex-direction:column}:host ::ng-deep .sf-doc-scrollable--files>lib-folder-files{flex:1;min-height:0}.iconWhatsApp{font-size:40px;color:#6495ed}.doc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:.5rem}:host ::ng-deep .doc-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.doc-toolbar-left{flex:1;min-width:180px}.doc-toolbar-right{display:flex;justify-content:flex-end}:host ::ng-deep .doc-toolbar-right .p-button-outlined{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px}:host ::ng-deep .doc-toolbar-right .p-button-outlined:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .doc-toolbar-right .p-button-outlined:disabled{opacity:.5}@media only screen and (max-width: 656px),(max-device-width: 656px){.doc-toolbar{flex-direction:column;align-items:stretch}.doc-toolbar-right{justify-content:stretch}.doc-toolbar-right button{width:100%}}.folder-list{display:flex;flex-direction:column}.folder-item{display:flex;align-items:center;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.folder-item:hover{background-color:#f9fafb}.folder-item:last-child{border-bottom:1px solid #e5e7eb}.folder-item__icon{font-size:18px;color:#6b7280;margin-right:12px;flex-shrink:0}.folder-item__info{display:flex;flex-direction:column;flex:1;min-width:0}.folder-item__name{font-size:13.5px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.folder-item__count{font-size:12px;color:#9ca3af;margin-top:1px}.folder-item__arrow{font-size:13px;color:#9ca3af;margin-left:12px;flex-shrink:0}.buttons{display:flex;justify-content:space-around;margin-block:15px}.buttonResponsive,buttonResponsiveBotonFinal{display:inline-block;border-radius:4px;background-color:#00f;border:none;color:#fff;text-align:center;font-size:12px;padding:10px;width:200px;transition:all .5s;cursor:pointer;margin:20px 5px 5px}.gen-form{display:flex;flex-direction:column;gap:14px}.gen-section{display:flex;flex-direction:column;gap:12px}.gen-field{display:flex;flex-direction:column;gap:6px}.gen-label{font-size:13px;font-weight:600;color:#111827}.gen-required{color:#ef4444;margin-left:4px}.gen-control{width:100%}:host ::ng-deep .gen-control .p-dropdown,:host ::ng-deep .gen-control .p-inputtext,:host ::ng-deep .gen-control .p-inputnumber,:host ::ng-deep .gen-control .p-datepicker{width:100%}:host ::ng-deep .gen-control .p-inputnumber-input{width:100%}.gen-checkbox{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:8px}.gen-checkbox-label{font-size:14px;color:#374151}.gen-help{color:#6b7280}.sf-doc-preview-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:300px;text-align:center;color:#374151}.sf-doc-preview-fallback i{font-size:48px;color:#6b7280}.sf-doc-preview-fallback i.pi-file-excel{color:#1d6f42}.sf-doc-preview-fallback i.pi-file-pdf{color:#b91c1c}.sf-doc-preview-fallback i.pi-file-word{color:#1d4ed8}.frameDoc{overflow:hidden;border:none}\n"], dependencies: [{ kind: "ngmodule", type: ToastModule }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i5$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: PanelModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i4.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i7$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SafePipe, name: "safe" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: FolderFilesComponent, selector: "lib-folder-files", inputs: ["carpeta", "isMobile", "idKatios", "server", "subestado", "requestData", "useBreadcrumb", "usesApi", "allowedUploadTypes"], outputs: ["onFileChange", "onCargarArchivo", "onEliminarMasivo", "onBack", "viewDocument"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i11.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i12.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
1092
1110
  }
1093
1111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: SfDocumentsComponent, decorators: [{
1094
1112
  type: Component,
@@ -1109,7 +1127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
1109
1127
  DropdownModule,
1110
1128
  DatePickerModule,
1111
1129
  SkeletonModule,
1112
- ], providers: [ConfirmationService], standalone: true, template: "<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Par\u00E1metros din\u00E1micos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">S\u00ED</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-fixed{flex-shrink:0}.sf-doc-scrollable{flex:1;min-height:0;overflow-y:auto}.sf-doc-scrollable--files{overflow:hidden;display:flex;flex-direction:column}:host ::ng-deep .sf-doc-scrollable--files>lib-folder-files{flex:1;min-height:0}.iconWhatsApp{font-size:40px;color:#6495ed}.doc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:.5rem}:host ::ng-deep .doc-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.doc-toolbar-left{flex:1;min-width:180px}.doc-toolbar-right{display:flex;justify-content:flex-end}:host ::ng-deep .doc-toolbar-right .p-button-outlined{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px}:host ::ng-deep .doc-toolbar-right .p-button-outlined:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .doc-toolbar-right .p-button-outlined:disabled{opacity:.5}@media only screen and (max-width: 656px),(max-device-width: 656px){.doc-toolbar{flex-direction:column;align-items:stretch}.doc-toolbar-right{justify-content:stretch}.doc-toolbar-right button{width:100%}}.folder-list{display:flex;flex-direction:column}.folder-item{display:flex;align-items:center;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.folder-item:hover{background-color:#f9fafb}.folder-item:last-child{border-bottom:1px solid #e5e7eb}.folder-item__icon{font-size:18px;color:#6b7280;margin-right:12px;flex-shrink:0}.folder-item__info{display:flex;flex-direction:column;flex:1;min-width:0}.folder-item__name{font-size:13.5px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.folder-item__count{font-size:12px;color:#9ca3af;margin-top:1px}.folder-item__arrow{font-size:13px;color:#9ca3af;margin-left:12px;flex-shrink:0}.buttons{display:flex;justify-content:space-around;margin-block:15px}.buttonResponsive,buttonResponsiveBotonFinal{display:inline-block;border-radius:4px;background-color:#00f;border:none;color:#fff;text-align:center;font-size:12px;padding:10px;width:200px;transition:all .5s;cursor:pointer;margin:20px 5px 5px}.gen-form{display:flex;flex-direction:column;gap:14px}.gen-section{display:flex;flex-direction:column;gap:12px}.gen-field{display:flex;flex-direction:column;gap:6px}.gen-label{font-size:13px;font-weight:600;color:#111827}.gen-required{color:#ef4444;margin-left:4px}.gen-control{width:100%}:host ::ng-deep .gen-control .p-dropdown,:host ::ng-deep .gen-control .p-inputtext,:host ::ng-deep .gen-control .p-inputnumber,:host ::ng-deep .gen-control .p-datepicker{width:100%}:host ::ng-deep .gen-control .p-inputnumber-input{width:100%}.gen-checkbox{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:8px}.gen-checkbox-label{font-size:14px;color:#374151}.gen-help{color:#6b7280}\n"] }]
1130
+ ], providers: [ConfirmationService], standalone: true, template: "<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n (viewDocument)=\"openVisorDoc($event)\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n appendTo=\"body\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no est\u00E1 disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Par\u00E1metros din\u00E1micos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">S\u00ED</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-layout{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.sf-doc-fixed{flex-shrink:0}.sf-doc-scrollable{flex:1;min-height:0;overflow-y:auto}.sf-doc-scrollable--files{overflow:hidden;display:flex;flex-direction:column}:host ::ng-deep .sf-doc-scrollable--files>lib-folder-files{flex:1;min-height:0}.iconWhatsApp{font-size:40px;color:#6495ed}.doc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:.5rem}:host ::ng-deep .doc-toolbar .p-inputtext{padding:.45rem .65rem .45rem 2.5rem;font-size:13px}.doc-toolbar-left{flex:1;min-width:180px}.doc-toolbar-right{display:flex;justify-content:flex-end}:host ::ng-deep .doc-toolbar-right .p-button-outlined{background:transparent;border:1px solid #d1d5db;color:#374151;font-weight:500;font-size:13px}:host ::ng-deep .doc-toolbar-right .p-button-outlined:hover{background:#f9fafb;border-color:#9ca3af}:host ::ng-deep .doc-toolbar-right .p-button-outlined:disabled{opacity:.5}@media only screen and (max-width: 656px),(max-device-width: 656px){.doc-toolbar{flex-direction:column;align-items:stretch}.doc-toolbar-right{justify-content:stretch}.doc-toolbar-right button{width:100%}}.folder-list{display:flex;flex-direction:column}.folder-item{display:flex;align-items:center;padding:12px 8px;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background-color .15s ease}.folder-item:hover{background-color:#f9fafb}.folder-item:last-child{border-bottom:1px solid #e5e7eb}.folder-item__icon{font-size:18px;color:#6b7280;margin-right:12px;flex-shrink:0}.folder-item__info{display:flex;flex-direction:column;flex:1;min-width:0}.folder-item__name{font-size:13.5px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.folder-item__count{font-size:12px;color:#9ca3af;margin-top:1px}.folder-item__arrow{font-size:13px;color:#9ca3af;margin-left:12px;flex-shrink:0}.buttons{display:flex;justify-content:space-around;margin-block:15px}.buttonResponsive,buttonResponsiveBotonFinal{display:inline-block;border-radius:4px;background-color:#00f;border:none;color:#fff;text-align:center;font-size:12px;padding:10px;width:200px;transition:all .5s;cursor:pointer;margin:20px 5px 5px}.gen-form{display:flex;flex-direction:column;gap:14px}.gen-section{display:flex;flex-direction:column;gap:12px}.gen-field{display:flex;flex-direction:column;gap:6px}.gen-label{font-size:13px;font-weight:600;color:#111827}.gen-required{color:#ef4444;margin-left:4px}.gen-control{width:100%}:host ::ng-deep .gen-control .p-dropdown,:host ::ng-deep .gen-control .p-inputtext,:host ::ng-deep .gen-control .p-inputnumber,:host ::ng-deep .gen-control .p-datepicker{width:100%}:host ::ng-deep .gen-control .p-inputnumber-input{width:100%}.gen-checkbox{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:8px}.gen-checkbox-label{font-size:14px;color:#374151}.gen-help{color:#6b7280}.sf-doc-preview-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:300px;text-align:center;color:#374151}.sf-doc-preview-fallback i{font-size:48px;color:#6b7280}.sf-doc-preview-fallback i.pi-file-excel{color:#1d6f42}.sf-doc-preview-fallback i.pi-file-pdf{color:#b91c1c}.sf-doc-preview-fallback i.pi-file-word{color:#1d4ed8}.frameDoc{overflow:hidden;border:none}\n"] }]
1113
1131
  }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2$1.MessageService }, { type: i0.ApplicationRef }, { type: i2$1.ConfirmationService }, { type: SfDocumentsService }], propDecorators: { accion: [{
1114
1132
  type: Input
1115
1133
  }], entidad: [{
@@ -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/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/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';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SfDocumentsService {\r\n _loading = new BehaviorSubject<boolean>(false);\r\n _loadingData = new BehaviorSubject<boolean>(false);\r\n loading$ = this._loading.asObservable();\r\n loadingData$ = this._loadingData.asObservable();\r\n\r\n set loading(loading: boolean) {\r\n this._loading.next(loading);\r\n }\r\n set loadingData(loading: boolean) {\r\n this._loadingData.next(loading);\r\n }\r\n get loading(): boolean {\r\n return this._loading.getValue();\r\n }\r\n get loadingData(): boolean {\r\n return this._loadingData.getValue();\r\n }\r\n constructor() { }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Pipe({ name: 'safe' })\r\n\r\nexport class SafePipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n transform(url:any) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nexport interface DocumentGatewayService{\r\n getFolders(idKatios:string, data: any): Observable<any>;\r\n updateStatus(idKatios:string, data: any): Observable<any>;\r\n uploadFiles(idKatios: string, formData: FormData): Observable<any>;\r\n generateDocument(idKatios:string, idDoc:string , noDoc:string,data: any): Observable<any>;\r\n getDocumentsToGenerate(idKatios:string, noDoc: string): Observable<any>;\r\n getFilesByFolder(idKatios: string, nmco: string, data: any, pageNumber: number, pageSize: number, search: string): Observable<any>;\r\n}\r\n\r\nexport const DOCUMENT_SERVICE = new InjectionToken<DocumentGatewayService>('DOCUMENT_SERVICE');","/**\r\n * Extensiones permitidas por defecto para subir cuando el host no configura nada.\r\n * Esto sí es configurable desde el host vía `allowedUploadTypes`, ya que es una\r\n * decisión de negocio (qué tipos de documento se aceptan).\r\n */\r\nexport const DEFAULT_ALLOWED_UPLOAD_EXTENSIONS = ['.pdf', '.xls', '.xlsx'];\r\n\r\nconst MIME_TYPES_BY_EXTENSION: Record<string, string> = {\r\n '.pdf': 'application/pdf',\r\n '.xls': 'application/vnd.ms-excel',\r\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n};\r\n\r\n/**\r\n * Extensiones que el navegador puede renderizar inline dentro de un <embed>/<iframe>.\r\n * Esto NO es configurable desde el host: es una capacidad del navegador, no una\r\n * decisión de negocio, así que la librería la conoce de antemano (evita que el host\r\n * marque como \"previsualizable\" un tipo que en realidad nunca se va a renderizar).\r\n */\r\nconst PREVIEWABLE_EXTENSIONS = ['.pdf', '.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.svg'];\r\n\r\nconst ICON_BY_EXTENSION: Record<string, string> = {\r\n '.pdf': 'pi-file-pdf',\r\n '.xls': 'pi-file-excel',\r\n '.xlsx': 'pi-file-excel',\r\n '.doc': 'pi-file-word',\r\n '.docx': 'pi-file-word',\r\n '.jpg': 'pi-image',\r\n '.jpeg': 'pi-image',\r\n '.png': 'pi-image',\r\n '.gif': 'pi-image',\r\n '.webp': 'pi-image',\r\n '.bmp': 'pi-image',\r\n '.svg': 'pi-image'\r\n};\r\n\r\n/** Normaliza una lista de extensiones dada por el host (con o sin punto, mayúsc/minúsc). */\r\nexport function normalizeExtensions(extensions: string[] | undefined | null, fallback: string[]): string[] {\r\n const list = extensions && extensions.length ? extensions : fallback;\r\n return list\r\n .map(ext => ext.trim().toLowerCase())\r\n .filter(ext => !!ext)\r\n .map(ext => (ext.startsWith('.') ? ext : `.${ext}`));\r\n}\r\n\r\n/** Arma el atributo `accept` del input file a partir de las extensiones permitidas. */\r\nexport function buildAcceptAttr(extensions: string[]): string {\r\n const mimeTypes = extensions.map(ext => MIME_TYPES_BY_EXTENSION[ext]).filter((m): m is string => !!m);\r\n return [...new Set([...mimeTypes, ...extensions])].join(',');\r\n}\r\n\r\nfunction hasExtension(fileName: string | undefined | null, extensions: string[]): boolean {\r\n if (!fileName) return false;\r\n const lower = fileName.toLowerCase();\r\n return extensions.some(ext => lower.endsWith(ext));\r\n}\r\n\r\nexport function isAllowedUploadFile(file: File, extensions: string[]): boolean {\r\n const mimeTypes = extensions.map(ext => MIME_TYPES_BY_EXTENSION[ext]).filter((m): m is string => !!m);\r\n return mimeTypes.includes(file.type) || hasExtension(file.name, extensions);\r\n}\r\n\r\n/** true si el navegador puede mostrar este archivo inline en un <embed>/<iframe>. */\r\nexport function canPreviewFile(name: string | undefined | null): boolean {\r\n return hasExtension(name, PREVIEWABLE_EXTENSIONS);\r\n}\r\n\r\n/** Ícono PrimeIcons según la extensión del archivo; 'pi-file' si no se reconoce. */\r\nexport function getFileTypeIcon(name: string | undefined | null): string {\r\n if (!name) return 'pi-file';\r\n const lower = name.toLowerCase();\r\n const match = Object.keys(ICON_BY_EXTENSION).find(ext => lower.endsWith(ext));\r\n return match ? ICON_BY_EXTENSION[match] : 'pi-file';\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { buildAcceptAttr, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS, isAllowedUploadFile, normalizeExtensions } from '../../../utils/file-type.util';\r\n\r\n@Component({\r\n selector: 'lib-upload-dialog',\r\n imports: [CommonModule, ButtonModule, DialogModule],\r\n templateUrl: './upload-dialog.component.html',\r\n styleUrl: './upload-dialog.component.scss'\r\n})\r\nexport class UploadDialogComponent {\r\n @Input() selectedDocument: any;\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\r\n @Input() allowedExtensions: string[] | undefined;\r\n @Output() onUploaded = new EventEmitter<{ fileList: File[], tagValue: any }>();\r\n @Output() loadFile = new EventEmitter<void>();\r\n @ViewChild('fileInput', { static: true })\r\n fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n constructor() { }\r\n\r\n private get normalizedExtensions(): string[] {\r\n return normalizeExtensions(this.allowedExtensions, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS);\r\n }\r\n\r\n get acceptedFileTypes(): string {\r\n return buildAcceptAttr(this.normalizedExtensions);\r\n }\r\n\r\n loadFileClick() {\r\n this.loadFile.emit();\r\n this.fileInput.nativeElement.value = '';\r\n this.fileInput.nativeElement.click();\r\n }\r\n fileChange(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files?.length) return;\r\n const files = Array.from(input.files);\r\n const validFiles = files.filter(f => isAllowedUploadFile(f, this.normalizedExtensions));\r\n const imagePathInput = input.value;\r\n if(validFiles?.length) this.onUploaded.emit({ fileList: validFiles, tagValue: imagePathInput });\r\n }\r\n\r\n}\r\n","<input\r\n #fileInput\r\n type=\"file\"\r\n (change)=\"fileChange($event)\"\r\n class=\"hidden\"\r\n placeholder=\"Upload file\"\r\n [attr.accept]=\"acceptedFileTypes\"\r\n multiple\r\n/>\r\n<button\r\n pButton\r\n type=\"button\"\r\n label=\"Subir archivo\"\r\n icon=\"pi pi-upload\"\r\n class=\"p-button-outlined ff-btn-upload\"\r\n (click)=\"loadFileClick()\"\r\n></button>\r\n\r\n<!-- <p-dialog [header] = \"'Adicionar ' + selectedDocument.label\" [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '30rem' }\" [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\nposition = \"top\" [closable]=\"true\" (onHide)=\"visible=false\">\r\n <div class=\"mt-3\">\r\n <div class=\"text-center\">\r\n <input #fileInput type=\"file\" (change)=\"fileChange($event)\" class=\"hidden\"\r\n placeholder=\"Upload file\" [attr.accept]=\"acceptedFileTypes\" multiple>\r\n </div>\r\n <div class=\"text-center\">\r\n <p-button\r\n icon=\"pi pi-upload\"\r\n (click)=\"loadFileClick()\"\r\n [text] = \"true\"\r\n [rounded]=\"true\"\r\n ></p-button>\r\n\r\n <label *ngIf=\"isMobile\" (click)=\"openModal2(scanContent)\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">camera_alt</mat-icon>\r\n </label> \r\n </div>\r\n </div>\r\n</p-dialog> -->\r\n","// flexible-date.pipe.ts\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe, registerLocaleData } from '@angular/common';\r\nimport localeEs from '@angular/common/locales/es';\r\n\r\nregisterLocaleData(localeEs);\r\n\r\n@Pipe({ name: 'flexibleDate' })\r\nexport class FlexibleDatePipe implements PipeTransform {\r\n private datePipe = new DatePipe('es'); // o el locale que uses\r\n\r\n transform(value: any, format: string = 'dd/MM/yyyy HH:mm'): string {\r\n const parsed = this.parseFlexibleDate(value);\r\n if (!parsed) return value ?? ''; // fallback: mostrar el string original en vez de explotar\r\n return this.datePipe.transform(parsed, format) ?? '';\r\n }\r\n\r\n private parseFlexibleDate(value: any): Date | null {\r\n if (!value) return null;\r\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\r\n if (typeof value === 'number') return new Date(value);\r\n\r\n let str = String(value).trim();\r\n\r\n // Colapsar espacios múltiples: \"Jun 4 2026 5:03PM\" -> \"Jun 4 2026 5:03PM\"\r\n str = str.replace(/\\s+/g, ' ');\r\n\r\n // Intento 1: Date nativo (cubre ISO, \"Jun 4 2026 5:03PM\", RFC2822, etc.)\r\n let d = new Date(str);\r\n if (!isNaN(d.getTime())) return d;\r\n\r\n // Intento 2: formatos comunes tipo \"dd/MM/yyyy HH:mm\" o \"MM/dd/yyyy\"\r\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);\r\n if (slashMatch) {\r\n let [, a, b, year, hh, mm, ss, ampm] = slashMatch;\r\n if (year.length === 2) year = '20' + year;\r\n let hour = hh ? parseInt(hh, 10) : 0;\r\n if (ampm) {\r\n if (/PM/i.test(ampm) && hour < 12) hour += 12;\r\n if (/AM/i.test(ampm) && hour === 12) hour = 0;\r\n }\r\n // Asumimos dd/MM/yyyy (ajustá si tu backend manda MM/dd/yyyy)\r\n d = new Date(+year, +a - 1, +b, hour, mm ? +mm : 0, ss ? +ss : 0);\r\n if (!isNaN(d.getTime())) return d;\r\n }\r\n\r\n // Intento 3: \"yyyy-MM-dd HH:mm:ss\" sin la 'T' de ISO\r\n const isoLike = str.replace(' ', 'T');\r\n d = new Date(isoLike);\r\n if (!isNaN(d.getTime())) return d;\r\n\r\n return null; // no se pudo parsear\r\n }\r\n}","import {\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputIcon } from 'primeng/inputicon';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { UploadDialogComponent } from '../dialog/upload-dialog/upload-dialog.component';\r\nimport {\r\n DOCUMENT_SERVICE,\r\n DocumentGatewayService,\r\n} from '../../gateways/document.port';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FlexibleDatePipe } from '../../pipes/flexible-date.pipe';\r\nimport { canPreviewFile, getFileTypeIcon } from '../../utils/file-type.util';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ndeclare var cordova: any;\r\ndeclare var window: any;\r\n\r\n@Component({\r\n selector: 'lib-folder-files',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ButtonModule,\r\n CheckboxModule,\r\n InputTextModule,\r\n InputIcon,\r\n IconField,\r\n PaginatorModule,\r\n SafePipe,\r\n UploadDialogComponent,\r\n SelectModule,\r\n FlexibleDatePipe,\r\n DialogModule,\r\n ],\r\n templateUrl: './folder-files.component.html',\r\n styleUrls: ['./folder-files.component.scss'],\r\n standalone: true,\r\n})\r\nexport class FolderFilesComponent implements OnChanges, OnDestroy {\r\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\r\n private searchSubject = new Subject<string>();\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() carpeta: any;\r\n @Input() isMobile: boolean = false;\r\n @Input() idKatios: any;\r\n @Input() server: string = '';\r\n @Input() subestado: string = '';\r\n @Input() requestData: any;\r\n @Input() useBreadcrumb: boolean = false;\r\n @Input() usesApi = true;\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\r\n @Input() allowedUploadTypes: string[] | undefined;\r\n @Output() onFileChange = new EventEmitter<any>();\r\n @Output() onCargarArchivo = new EventEmitter<any>();\r\n @Output() onEliminarMasivo = new EventEmitter<any[]>();\r\n @Output() onBack = new EventEmitter<void>();\r\n\r\n items: any[] = [];\r\n page = 1;\r\n pageSize = 10;\r\n totalRecords = 0;\r\n totalPages = 0;\r\n first = 0;\r\n searchQuery = '';\r\n docsEliminables: any[] = [];\r\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n loading = false;\r\n allSelected = false;\r\n pageSizeOptions = [\r\n { label: '5/pág', value: 5 },\r\n { label: '10/pág', value: 10 },\r\n { label: '20/pág', value: 20 },\r\n ];\r\n current_path: string = '';\r\n current_label: string = '';\r\n displayView: boolean = false;\r\n\r\n constructor() {\r\n this.searchSubject\r\n .pipe(debounceTime(400), distinctUntilChanged(), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.page = 1;\r\n if (this.usesApi) {\r\n this.loadFiles();\r\n } else {\r\n if (this.searchQuery.trim() === '' || !this.searchQuery) {\r\n this.items = this.carpeta.children;\r\n } else {\r\n this.items = this.carpeta.children.filter((item: any) =>\r\n item.label.toLowerCase().includes(this.searchQuery.toLowerCase()),\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.current_path = '';\r\n this.current_label = '';\r\n this.displayView = false;\r\n if (changes['carpeta'] && this.carpeta) {\r\n this.init();\r\n }\r\n }\r\n\r\n private init(): void {\r\n this.docsEliminables = [];\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.searchQuery = '';\r\n this.page = 1;\r\n\r\n this.applyPermissions();\r\n\r\n if (!this.usesApi) {\r\n // Modo children pre-cargados\r\n if (!this.carpeta.children || this.carpeta.children.length === 0) {\r\n this.carpeta.children = [];\r\n }\r\n this.items = this.carpeta.children;\r\n this.items.forEach((item: any) => (item.delete = false));\r\n } else {\r\n // Modo API paginada\r\n this.items = [];\r\n this.loadFiles();\r\n }\r\n }\r\n\r\n private applyPermissions(): void {\r\n if (this.carpeta?.reglas && typeof this.carpeta.reglas === 'string') {\r\n this.carpeta.reglas = JSON.parse(this.carpeta.reglas);\r\n }\r\n if (\r\n !this.carpeta?.reglas?.permisos?.subestados &&\r\n this.carpeta?.reglas?.permisos\r\n ) {\r\n this.carpeta.reglas.permisos.cargarFront =\r\n this.carpeta.reglas.permisos.cargar;\r\n this.carpeta.reglas.permisos.borrarFront =\r\n this.carpeta.reglas.permisos.borrar;\r\n } else if (\r\n this.carpeta?.reglas?.permisos?.subestados &&\r\n this.subestado?.trim()\r\n ) {\r\n const sub = this.subestado.toLowerCase().trim();\r\n this.carpeta.reglas.permisos.cargarFront = Array.isArray(\r\n this.carpeta.reglas.permisos.subestados.cargar,\r\n )\r\n ? this.carpeta.reglas.permisos.subestados.cargar\r\n .map((c: any) => c.toLowerCase().trim())\r\n .includes(sub)\r\n : this.carpeta.reglas.permisos.cargar;\r\n this.carpeta.reglas.permisos.borrarFront = Array.isArray(\r\n this.carpeta.reglas.permisos.subestados.borrar,\r\n )\r\n ? this.carpeta.reglas.permisos.subestados.borrar\r\n .map((b: any) => b.toLowerCase().trim())\r\n .includes(sub)\r\n : this.carpeta.reglas.permisos.borrar;\r\n }\r\n }\r\n\r\n loadFiles(): void {\r\n this.loading = true;\r\n this.documentsService\r\n .getFilesByFolder(\r\n this.idKatios,\r\n this.carpeta.NMCo,\r\n this.requestData,\r\n this.page,\r\n this.pageSize,\r\n this.searchQuery,\r\n )\r\n .subscribe({\r\n next: (response: any) => {\r\n const res = response?.data ?? response;\r\n this.totalRecords = res.total ?? 0;\r\n this.page = res.page ?? 1;\r\n this.totalPages = res.totalPages ?? 0;\r\n this.items = res.items ?? [];\r\n this.items.forEach((item: any) => (item.delete = false));\r\n this.buildPaths(this.items);\r\n this.loading = false;\r\n },\r\n error: (error: any) => {\r\n console.error('Error loading files by folder:', error);\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n\r\n onPageChange(event: any): void {\r\n this.first = event.first ?? 0;\r\n this.page = (event.page ?? 0) + 1;\r\n this.pageSize = event.rows ?? this.pageSize;\r\n this.loadFiles();\r\n }\r\n\r\n onSearchInput(): void {\r\n this.searchSubject.next(this.searchQuery);\r\n }\r\n\r\n /** Construye la ruta completa de cada archivo usando el server */\r\n private buildPaths(items: any[]): void {\r\n if (!this.server) return;\r\n items.forEach((item: any) => {\r\n if (item.Path && !item.Path.startsWith('http')) {\r\n let path = 'Imagenes/' + item.Path + item.label;\r\n path = path.replace(/\\\\/g, '/');\r\n item.Path = this.server + path;\r\n }\r\n });\r\n }\r\n\r\n fileChange(data: any): void {\r\n this.onFileChange.emit(data);\r\n }\r\n\r\n cargarArchivo(): void {\r\n this.onCargarArchivo.emit(this.carpeta);\r\n }\r\n\r\n openVisorDoc(item: any) {\r\n if (this.carpeta.TipoArchivo == '1' && this.isMobile) {\r\n //is mobile\r\n cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');\r\n } else {\r\n this.current_path = item.Path;\r\n this.current_label = item.label;\r\n console.log('current_path', this.current_path);\r\n this.displayView = true;\r\n }\r\n }\r\n\r\n openCurrentInNewWindow(path?: string): void {\r\n window.open(path || this.current_path, '_blank').focus();\r\n }\r\n\r\n canPreview(label?: string, path?: string): boolean {\r\n return (\r\n canPreviewFile(label || this.current_label) ||\r\n canPreviewFile(path || this.current_path)\r\n );\r\n }\r\n\r\n previewFallbackIcon(label?: string, path?: string): string {\r\n return getFileTypeIcon(\r\n label || this.current_label || path || this.current_path,\r\n );\r\n }\r\n\r\n goBack(): void {\r\n this.onBack.emit();\r\n }\r\n\r\n onClickedCheckDelete(event: any, document: any): void {\r\n if (event.checked) this.docsEliminables.push(document);\r\n else\r\n this.docsEliminables = this.docsEliminables.filter(\r\n (doc) => doc !== document,\r\n );\r\n }\r\n\r\n emitEliminarMasivo(): void {\r\n this.onEliminarMasivo.emit(this.docsEliminables);\r\n }\r\n\r\n toggleSelectAll(): void {\r\n this.items.forEach((item) => (item.delete = this.allSelected));\r\n this.docsEliminables = this.allSelected ? [...this.items] : [];\r\n }\r\n\r\n // refresh(): void {\r\n // if (this.usesApi) {\r\n // this.loadFiles();\r\n // }\r\n // }\r\n\r\n onPageSizeChange(): void {\r\n this.first = 0;\r\n this.page = 1;\r\n this.loadFiles();\r\n }\r\n}\r\n","<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: búsqueda + botones de acción -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginación compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no está disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n","import {\r\n ApplicationRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ConfirmationService, MessageService, TreeNode } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport * as _ from 'lodash';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { PanelModule } from 'primeng/panel';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SafePipe } from './pipes/safe.pipe';\r\nimport {\r\n DOCUMENT_SERVICE,\r\n DocumentGatewayService,\r\n} from './gateways/document.port';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputIcon } from 'primeng/inputicon';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { FolderFilesComponent } from './components/folder-files/folder-files.component';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { SfDocumentsService } from './sf-documents.service';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { of } from 'rxjs';\r\nimport { SfDocumentNavigationState } from './models/navigation-state.model';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\n\r\n@Component({\r\n selector: 'app-sf-documents',\r\n imports: [\r\n ToastModule,\r\n ButtonModule,\r\n ConfirmDialogModule,\r\n PanelModule,\r\n CheckboxModule,\r\n DialogModule,\r\n CommonModule,\r\n FormsModule,\r\n SafePipe,\r\n InputTextModule,\r\n InputIcon,\r\n IconField,\r\n FolderFilesComponent,\r\n DropdownModule,\r\n DatePickerModule,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './sf-documents.component.html',\r\n styleUrls: ['./sf-documents.component.scss'],\r\n providers: [ConfirmationService],\r\n standalone: true,\r\n})\r\nexport class SfDocumentsComponent implements OnChanges {\r\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\r\n @Input() accion: string = '';\r\n @Input() entidad: string = '';\r\n @Input() ndoc: string = '';\r\n @Input() tdoc: string = '';\r\n @Input() tipo: string = '';\r\n //Información necesaria para cargar documentos de productos\r\n @Input() Kasociada: string = '';\r\n @Input() Producto: string = '';\r\n @Input() Solicitud: string = '';\r\n @Input() oSession: any;\r\n @Input() perfilDocumentos: any;\r\n @Input() subestado: string = '';\r\n @Input() isMobile: boolean = false;\r\n @Output() nextTabPapa: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @Input() bAtras: boolean = false;\r\n @Input() bFinal: boolean = false;\r\n @Input() botones: boolean = true;\r\n @Input() aplFiltro: boolean = false;\r\n\r\n @Input() nmco: string[] = [];\r\n @Input() useBreadcrumb: boolean = false;\r\n\r\n @Input() usesApi: boolean = true;\r\n\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería (pdf, xls, xlsx). */\r\n @Input() allowedUploadTypes: string[] | undefined;\r\n\r\n @Output() onNavigationChange = new EventEmitter<SfDocumentNavigationState>();\r\n\r\n @Input() server: string = '';\r\n valorFiltro: string = '';\r\n\r\n tab = 1;\r\n enProceso = false;\r\n carpetaSeleccionada: any;\r\n files: any;\r\n filesFilter: any;\r\n imagePathInput: any;\r\n documentoSeleccionado: any;\r\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n file: any;\r\n urlDoc: any;\r\n pdfUrl: any;\r\n scanFileList = new Array<any>();\r\n displayPDF: boolean = false;\r\n\r\n @ViewChild('pdf', { read: ElementRef }) public panel!: ElementRef<any>;\r\n UsuarioNdoc: any;\r\n UsuarioTdoc: any;\r\n @Input() idKatios: any;\r\n\r\n displayGenerate = false;\r\n\r\n canGenerate = true;\r\n\r\n documentTypes: any[] = [];\r\n documentsToGenerate: any[] = [];\r\n documentsToGenerateMap: Record<string, any> = {};\r\n dynamicParams: any[] = [];\r\n dynamicValues: Record<string, any> = {};\r\n selectedDocType: string | null = null;\r\n selectedRange: string | null = null;\r\n\r\n constructor(\r\n private sanitizer: DomSanitizer,\r\n public snackBar: MessageService,\r\n private appRef: ApplicationRef,\r\n private confirmationService: ConfirmationService,\r\n public documentService: SfDocumentsService,\r\n ) {}\r\n\r\n // ngOnInit() {\r\n // if (this.oSession != null && this.oSession.UsuarioSistema.TDOC !== undefined && this.oSession.UsuarioSistema.NDOC !== undefined) {\r\n // this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\r\n // this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\r\n // }\r\n // if (this.tipo && this.perfilDocumentos) {\r\n // this.cargarParametros(this.tipo)\r\n // }\r\n // }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.files = [];\r\n this.filesFilter = [];\r\n this.imagePathInput = null;\r\n this.carpetaSeleccionada = null;\r\n this.documentoSeleccionado = null;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.file = null;\r\n this.urlDoc = null;\r\n this.pdfUrl = null;\r\n this.scanFileList = new Array<any>();\r\n this.displayPDF = false;\r\n this.displayGenerate = false;\r\n this.canGenerate = true;\r\n this.documentTypes = [];\r\n this.documentsToGenerate = [];\r\n this.documentsToGenerateMap = {};\r\n this.dynamicParams = [];\r\n this.dynamicValues = {};\r\n this.selectedDocType = null;\r\n this.selectedRange = null;\r\n if (\r\n this.oSession != null &&\r\n this.oSession.UsuarioSistema.TDOC !== undefined &&\r\n this.oSession.UsuarioSistema.NDOC !== undefined\r\n ) {\r\n this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\r\n this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\r\n }\r\n if (this.tipo && this.perfilDocumentos) {\r\n this.cargarParametros(this.tipo);\r\n }\r\n }\r\n\r\n cargarParametros(tipo: string) {\r\n if (tipo !== '1') return;\r\n\r\n this.documentService.loadingData = true;\r\n this.documentService.loading = false;\r\n const data = {\r\n action: this.accion,\r\n entity: this.entidad,\r\n tdoc: this.tdoc,\r\n ndoc: this.ndoc,\r\n request: this.Solicitud,\r\n documentProfile: this.perfilDocumentos,\r\n product: this.Producto,\r\n };\r\n\r\n this.documentsService\r\n .getFolders(this.idKatios, data)\r\n .pipe(\r\n tap((response: any) => {\r\n let res = response.data;\r\n if (response.data.RESPUESTA) res = response.data.RESPUESTA;\r\n this.okCargoArbol(res);\r\n }),\r\n switchMap(() =>\r\n this.Solicitud\r\n ? this.documentsService.getDocumentsToGenerate(\r\n this.idKatios,\r\n this.Solicitud,\r\n )\r\n : of(null),\r\n ),\r\n tap((resp: any) => {\r\n const list = resp?.data ?? []; // según tu JSON real\r\n this.documentsToGenerate = list;\r\n\r\n this.documentsToGenerateMap = {};\r\n list.forEach((d: any) => (this.documentsToGenerateMap[d.idDoc] = d));\r\n\r\n // dropdown: usa idDoc pero mantén objeto completo en map\r\n this.documentTypes = list.map((d: any) => ({\r\n label: d.description,\r\n code: d.idDoc,\r\n }));\r\n }),\r\n finalize(() => {\r\n this.documentService.loadingData = false;\r\n }),\r\n )\r\n .subscribe({\r\n error: (error: any) => {\r\n this.errorCargarArbol(error);\r\n },\r\n });\r\n\r\n this.tab = 1;\r\n this.documentoSeleccionado = null;\r\n this.emitNavigationState();\r\n }\r\n expandAll() {\r\n this.files.forEach((node: any) => {\r\n this.expandRecursive(node, true);\r\n });\r\n }\r\n\r\n private expandRecursive(node: TreeNode, isExpand: boolean) {\r\n node.expanded = isExpand;\r\n var objeto: any;\r\n objeto = node;\r\n if (node.children && node.children?.length > 0) {\r\n node.children.forEach((childNode) => {\r\n this.expandRecursive(childNode, isExpand);\r\n });\r\n } else if (objeto.Path !== undefined) {\r\n var path = 'Imagenes/' + objeto.Path + objeto.label;\r\n var re = /[\\\\]/gi;\r\n path = path.replace(re, '/');\r\n objeto.Path = this.server + path;\r\n //this.sanitizer.bypassSecurityTrustUrl(this.server + path)\r\n }\r\n }\r\n\r\n public okCargoArbol = (iArbol: any) => {\r\n if (!iArbol.CARPETA && iArbol.length === undefined) {\r\n iArbol = new Array(iArbol);\r\n } else if (iArbol.CARPETA.length === undefined) {\r\n iArbol = new Array(iArbol.CARPETA);\r\n }\r\n\r\n iArbol.forEach((element: any) => {\r\n this.convertirArrayChildren(element);\r\n });\r\n\r\n //\r\n this.filtrarTipoDocumento(iArbol);\r\n //\r\n this.files = iArbol;\r\n this.filesFilter = iArbol;\r\n this.expandAll();\r\n this.documentService.loadingData = false;\r\n };\r\n public errorCargarArbol = (iError: any) => {\r\n this.message('error', 'Error al traer la información', iError.message);\r\n this.documentService.loadingData = false;\r\n };\r\n\r\n // onClickedCheckDelete($event: any, document: any) {\r\n // if ($event.checked) this.docsEliminables.push(document);\r\n // else this.docsEliminables = this.docsEliminables.filter(doc => doc !== document);\r\n // }\r\n\r\n funcOkDelDocumentMasivo = (docsEliminables: any[]) => {\r\n this.totalDocsEliminadosApi.existoso += 1;\r\n if (\r\n this.totalDocsEliminadosApi.existoso +\r\n this.totalDocsEliminadosApi.fallido ===\r\n docsEliminables.length\r\n ) {\r\n this.cargarParametros(this.tipo);\r\n if (this.totalDocsEliminadosApi.fallido > 0)\r\n this.message(\r\n 'warn',\r\n '',\r\n 'Algunos documentos no pudieron ser eliminados',\r\n );\r\n else\r\n this.message('success', '', 'Documentos eliminados satisfactoriamente');\r\n }\r\n };\r\n\r\n funcErrDelDocumentMasivo = (docsEliminables: any[]) => {\r\n this.totalDocsEliminadosApi.fallido += 1;\r\n if (\r\n this.totalDocsEliminadosApi.existoso +\r\n this.totalDocsEliminadosApi.fallido ===\r\n docsEliminables.length\r\n ) {\r\n this.cargarParametros(this.tipo);\r\n this.message('warn', '', 'Algunos documentos no pudieron ser eliminados');\r\n }\r\n };\r\n\r\n eliminarMasivo(docsEliminables: any[]) {\r\n this.confirmationService.confirm({\r\n message: `¿Desea eliminar los ${docsEliminables.length} documentos seleccionados?`,\r\n acceptLabel: 'Si',\r\n rejectLabel: 'No',\r\n accept: () => {\r\n this.documentService.loading = true;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n docsEliminables.forEach((doc) => {\r\n let data = { code: doc.codigo, status: 'DES' };\r\n this.documentsService.updateStatus(this.idKatios, data).subscribe({\r\n next: (response: any) => {\r\n this.funcOkDelDocumentMasivo(docsEliminables);\r\n },\r\n error: (error: any) => {\r\n this.documentService.loading = false;\r\n this.funcErrDelDocumentMasivo(docsEliminables);\r\n },\r\n });\r\n });\r\n },\r\n });\r\n }\r\n\r\n filtrarTipoDocumento(iArbol: any) {\r\n if (this.nmco.length !== 0) {\r\n iArbol.forEach((element: any) => {\r\n element.children = element.children.filter((child: any) =>\r\n this.nmco.includes(child.NMCo),\r\n );\r\n });\r\n }\r\n }\r\n\r\n convertirArrayChildren(node: any) {\r\n if (node.children === undefined) node.children = [];\r\n else if (node.children.length == undefined) {\r\n node.children = new Array(node.children);\r\n }\r\n node.children.forEach((childNode: any) => {\r\n this.convertirArrayChildren(childNode);\r\n });\r\n }\r\n\r\n // takePhotoClick() {\r\n // this.documentsService.openCamera(this.ok_openCamera, this.error_openCamera);\r\n // }\r\n /////Cuando se cargar archivos adjuntos\r\n fileChange(data: any) {\r\n const fileList = data.fileList;\r\n const tagValue = data.tagValue;\r\n this.file = fileList[0];\r\n this.imagePathInput = tagValue;\r\n this.generarData(fileList);\r\n }\r\n\r\n // ok_openCamera = (imageUri: any) => {\r\n // this.makeFileIntoBlob(imageUri)\r\n // .then((file: Blob) => {\r\n // this.appRef.tick();\r\n // if (file.size > 1000000) {\r\n // if (confirm(\"Este archivo es bastate pesado, le recomendamos bajar la calidad de la cámara. ¿Desea subir este archivo?\")) {\r\n // this.loadFileToList(file);\r\n // }\r\n // } else {\r\n // this.loadFileToList(file);\r\n // }\r\n // this.documentService.loading = false;\r\n // })\r\n // .catch((error: Error) => {\r\n // console.error('Error processing camera image:', error);\r\n // this.message(\"Error al procesar la imagen de la cámara\", \"Error\");\r\n // this.documentService.loading = false;\r\n // });\r\n // }\r\n\r\n loadFileToList(file: any) {\r\n setTimeout(() => {\r\n file['name'] = 'scan' + Date.now() + this.scanFileList.length + '.jpg';\r\n this.scanFileList.push(file);\r\n this.scanFileList = this.scanFileList.slice();\r\n this.documentService.loading = false;\r\n this.message('success', '', 'Archivo cargado exitosamente');\r\n\r\n this.appRef.tick();\r\n }, 200);\r\n }\r\n\r\n subirFotosScan() {\r\n this.generarData(this.scanFileList);\r\n }\r\n // error_openCamera = (err: any) => {\r\n // console.log(err);\r\n // this.message(\"No se pudo acceder a la camara\", \"Error\")\r\n // }\r\n\r\n noZonePatch(cb: () => void) {\r\n const orig = FileReader;\r\n const unpatched = ((window as any).FileReader as any)\r\n .__zone_symbol__OriginalDelegate;\r\n (window as any).FileReader = unpatched;\r\n cb();\r\n (window as any).FileReader = orig;\r\n }\r\n\r\n // makeFileIntoBlob(_imagePath: any): Promise<Blob> {\r\n // this.documentService.loading = true;\r\n // // INSTALL PLUGIN - cordova plugin add cordova-plugin-file\r\n // return new Promise((resolve, reject) => {\r\n // try {\r\n // window.resolveLocalFileSystemURL(_imagePath, (fileEntry: any) => {\r\n // fileEntry.file((resFile: any) => {\r\n // this.noZonePatch(() => {//! Alert 1: Comentarear esta linea y una de de abajo para ambiente de prueba\r\n // var reader = new FileReader();\r\n\r\n // reader.onloadend = (evt: any) => {\r\n // var imgBlob: any = new Blob([evt.target.result], { type: 'image/jpeg' });\r\n // imgBlob.name = 'scan.jpg';\r\n // resolve(imgBlob);\r\n // };\r\n\r\n // reader.onerror = (e) => {\r\n // console.log('Failed file read: ' + e.toString());\r\n // reject(e);\r\n // };\r\n // reader.readAsArrayBuffer(resFile);\r\n // });//!Comentarear esta linea y una de de arriba para ambiente de prueba\r\n // });\r\n // }, (error: any) => {\r\n // console.error('Error resolving file system URL:', error);\r\n // reject(error);\r\n // });\r\n // } catch (ex) {\r\n // console.error('Error in makeFileIntoBlob:', ex);\r\n // reject(ex);\r\n // }\r\n // });\r\n // }\r\n\r\n subirImagen(data: any, fileList: any) {\r\n this.documentService.loading = true;\r\n const formData: FormData = new FormData();\r\n var dataDocs;\r\n var sIdKatios = this.idKatios;\r\n dataDocs = { data: data };\r\n formData.append('data', JSON.stringify(dataDocs));\r\n formData.append('merge', 'true');\r\n\r\n for (let _i = 0; _i < fileList.length; _i++) {\r\n formData.append('files', fileList[_i], fileList[_i].name);\r\n }\r\n\r\n this.documentsService.uploadFiles(sIdKatios, formData).subscribe({\r\n next: (response: any) => {\r\n this.scanFileList = new Array<any>();\r\n this.message(\r\n 'success',\r\n 'Felicidades',\r\n 'Se almacenó el documento correctamente',\r\n );\r\n this.cargarParametros(this.tipo);\r\n this.documentService.loading = false;\r\n this.appRef.tick();\r\n },\r\n error: (err: any) => {\r\n this.documentService.loading = false;\r\n this.message(\r\n 'error',\r\n 'Se presentaron inconvenientes almacenando el documento',\r\n err.message,\r\n );\r\n console.error('Error : ' + err);\r\n },\r\n });\r\n }\r\n\r\n generarData(fileList: any) {\r\n this.documentService.loading = true;\r\n var sPath1;\r\n var dataClientes;\r\n let sPaths = '';\r\n if (this.documentoSeleccionado.Tipo.trim().toUpperCase() == 'PERSONA') {\r\n sPath1 =\r\n this.documentoSeleccionado.Tipo.trim() +\r\n '\\\\' +\r\n this.tdoc.trim() +\r\n '\\\\' +\r\n this.ndoc.trim() +\r\n '\\\\Cliente\\\\' +\r\n this.documentoSeleccionado.NMCo.trim();\r\n } else {\r\n //Kasociada\r\n //producto\r\n //Falta numero de solicitud\r\n\r\n sPath1 =\r\n this.documentoSeleccionado.Tipo.trim() +\r\n '\\\\' +\r\n this.Kasociada +\r\n '\\\\' +\r\n this.Producto +\r\n '\\\\' +\r\n this.Solicitud +\r\n '\\\\' +\r\n this.documentoSeleccionado.NMCo;\r\n }\r\n\r\n dataClientes = {\r\n Tipo: this.documentoSeleccionado.Tipo,\r\n id: '1',\r\n documento: this.documentoSeleccionado.NMCo,\r\n tdoc: this.tdoc.trim(),\r\n ndoc: this.ndoc.trim(),\r\n IdProducto: this.Solicitud,\r\n TipoProducto: this.Producto,\r\n Kasociada: this.Kasociada,\r\n archivoUpload: fileList[0],\r\n nombre: this.tdoc.trim() + '-' + this.ndoc.trim(),\r\n fileCargado: fileList[0],\r\n pathArchivo: sPath1,\r\n TipoArchivo: this.documentoSeleccionado.TipoArchivo,\r\n };\r\n sPaths = sPaths + sPath1 + ',';\r\n this.subirImagen(dataClientes, fileList);\r\n }\r\n\r\n cargarArchivo(iNodo: any) {\r\n this.scanFileList = new Array<any>();\r\n this.documentoSeleccionado = iNodo;\r\n }\r\n\r\n async seleccionoDocs(iNodo: any) {\r\n var path = iNodo.Path + iNodo.label;\r\n this.pdfUrl = '//imagenes//' + iNodo.idKatios + '//' + path;\r\n this.pdfUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfUrl);\r\n this.gotoBottom();\r\n }\r\n\r\n message(severity: string, summary: string, message: any) {\r\n this.snackBar.add({\r\n severity: severity,\r\n summary: summary,\r\n detail: message,\r\n life: 4000,\r\n });\r\n }\r\n\r\n public gotoBottom(): void {\r\n window.scrollBy(0, this.panel.nativeElement.scrollHeight);\r\n }\r\n\r\n get requestData(): any {\r\n return {\r\n action: this.accion,\r\n entity: this.entidad,\r\n tdoc: this.tdoc,\r\n ndoc: this.ndoc,\r\n request: this.Solicitud,\r\n documentProfile: this.perfilDocumentos,\r\n product: this.Producto,\r\n };\r\n }\r\n\r\n public VerDetalleTab(items: any) {\r\n this.carpetaSeleccionada = items;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.tab = 2;\r\n this.emitNavigationState();\r\n }\r\n\r\n goToTab(tab: any) {\r\n this.tab = tab;\r\n this.emitNavigationState();\r\n }\r\n\r\n private emitNavigationState(): void {\r\n if (!this.useBreadcrumb) return;\r\n const state: SfDocumentNavigationState = { tab: this.tab };\r\n if (this.tab === 2 && this.carpetaSeleccionada) {\r\n state.folderLabel = (this.carpetaSeleccionada.label || '').replace(\r\n '#toolbar=0&navpanes=0&statusbar=0',\r\n '',\r\n );\r\n }\r\n this.onNavigationChange.emit(state);\r\n }\r\n\r\n next(iValor: any) {\r\n if (iValor < 0) {\r\n this.nextTabPapa.emit(iValor);\r\n } else {\r\n var respuesta = '';\r\n if (this.files) respuesta = this.valorDocumentosPendientes(this.files[0]);\r\n\r\n if (respuesta == '') {\r\n this.nextTabPapa.emit(iValor);\r\n } else {\r\n this.message('warn', 'Ups!', respuesta);\r\n }\r\n }\r\n }\r\n\r\n valorDocumentosPendientes(carpetas: any) {\r\n var respuesta = '';\r\n if (carpetas.children) {\r\n carpetas.children.forEach((carpeta: any) => {\r\n if (\r\n carpeta.Obligatorio == 1 &&\r\n (!carpeta.children || carpeta.children.length == 0)\r\n )\r\n respuesta = 'Falta ' + carpeta.label;\r\n });\r\n }\r\n return respuesta;\r\n }\r\n\r\n filtrarDocumentos() {\r\n this.filesFilter = _.cloneDeep(this.files);\r\n for (let i = 0; i < this.files.length; i++) {\r\n let node = [];\r\n for (let j = 0; j < this.files[i].children.length; j++) {\r\n let file = this.files[i].children[j];\r\n if (\r\n file.label.toLowerCase().indexOf(this.valorFiltro.toLowerCase()) == 0\r\n )\r\n node.push(file);\r\n }\r\n this.filesFilter[i].children = node;\r\n }\r\n }\r\n\r\n openGenerateDialog() {\r\n this.selectedDocType = null;\r\n this.selectedRange = null;\r\n this.displayGenerate = true;\r\n }\r\n\r\n generateDocument() {\r\n if (!this.selectedDocType) return;\r\n\r\n // Validación mínima: si hay params, exigir que no estén vacíos\r\n for (const p of this.dynamicParams || []) {\r\n const key = p.name;\r\n const v = this.dynamicValues?.[key];\r\n if (v === null || v === undefined || v === '') {\r\n this.message('warn', '', `Falta el parámetro ${p.description}`);\r\n return;\r\n }\r\n }\r\n\r\n // construir params\r\n const paramsToSend: any = {};\r\n for (const p of this.dynamicParams || []) {\r\n const key = p.name;\r\n const raw = this.dynamicValues?.[key];\r\n\r\n paramsToSend[p.name] =\r\n (p.type || '').toLowerCase() === 'date' ? this.toYYYYMMDD(raw) : raw;\r\n }\r\n\r\n this.enProceso = true;\r\n\r\n const payload = {\r\n params: paramsToSend,\r\n };\r\n this.documentsService\r\n .generateDocument(\r\n this.idKatios,\r\n this.selectedDocType,\r\n this.Solicitud,\r\n payload,\r\n )\r\n .subscribe({\r\n next: () => {\r\n this.displayGenerate = false;\r\n this.message('success', '', 'Documento en generación');\r\n this.cargarParametros(this.tipo);\r\n this.enProceso = false;\r\n },\r\n error: (err: any) => {\r\n this.message(\r\n 'error',\r\n 'No se pudo generar el documento',\r\n err?.message || err,\r\n );\r\n this.enProceso = false;\r\n },\r\n });\r\n }\r\n private toYYYYMMDD(value: any): string | null {\r\n if (!value) return null;\r\n const d = value instanceof Date ? value : new Date(value);\r\n if (isNaN(d.getTime())) return null;\r\n\r\n // ISO: 2025-12-19T05:00:00.000Z -> 2025-12-19\r\n return d.toISOString().slice(0, 10);\r\n }\r\n onDocTypeChange() {\r\n const doc = this.selectedDocType\r\n ? this.documentsToGenerateMap[this.selectedDocType]\r\n : null;\r\n\r\n this.dynamicParams = doc?.params ?? [];\r\n this.dynamicValues = {}; // reset valores\r\n\r\n // valores default opcionales\r\n for (const p of this.dynamicParams) {\r\n const key = p.name;\r\n this.dynamicValues[key] = null;\r\n }\r\n }\r\n}\r\n","<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Parámetros dinámicos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">Sí</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n","/*\r\n * Public API Surface of sf-documents\r\n */\r\n\r\nexport * from './lib/sf-documents.service';\r\nexport * from './lib/sf-documents.component';\r\nexport * from './lib/gateways/document.port';\r\nexport * from './lib/components/folder-files/folder-files.component';\r\nexport * from './lib/models/navigation-state.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i3.SfDocumentsService","i4","i5","i6","i8","i9","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/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/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';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SfDocumentsService {\r\n _loading = new BehaviorSubject<boolean>(false);\r\n _loadingData = new BehaviorSubject<boolean>(false);\r\n loading$ = this._loading.asObservable();\r\n loadingData$ = this._loadingData.asObservable();\r\n\r\n set loading(loading: boolean) {\r\n this._loading.next(loading);\r\n }\r\n set loadingData(loading: boolean) {\r\n this._loadingData.next(loading);\r\n }\r\n get loading(): boolean {\r\n return this._loading.getValue();\r\n }\r\n get loadingData(): boolean {\r\n return this._loadingData.getValue();\r\n }\r\n constructor() { }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Pipe({ name: 'safe' })\r\n\r\nexport class SafePipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n transform(url:any) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nexport interface DocumentGatewayService{\r\n getFolders(idKatios:string, data: any): Observable<any>;\r\n updateStatus(idKatios:string, data: any): Observable<any>;\r\n uploadFiles(idKatios: string, formData: FormData): Observable<any>;\r\n generateDocument(idKatios:string, idDoc:string , noDoc:string,data: any): Observable<any>;\r\n getDocumentsToGenerate(idKatios:string, noDoc: string): Observable<any>;\r\n getFilesByFolder(idKatios: string, nmco: string, data: any, pageNumber: number, pageSize: number, search: string): Observable<any>;\r\n}\r\n\r\nexport const DOCUMENT_SERVICE = new InjectionToken<DocumentGatewayService>('DOCUMENT_SERVICE');","/**\r\n * Extensiones permitidas por defecto para subir cuando el host no configura nada.\r\n * Esto sí es configurable desde el host vía `allowedUploadTypes`, ya que es una\r\n * decisión de negocio (qué tipos de documento se aceptan).\r\n */\r\nexport const DEFAULT_ALLOWED_UPLOAD_EXTENSIONS = ['.pdf', '.xls', '.xlsx'];\r\n\r\nconst MIME_TYPES_BY_EXTENSION: Record<string, string> = {\r\n '.pdf': 'application/pdf',\r\n '.xls': 'application/vnd.ms-excel',\r\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n};\r\n\r\n/**\r\n * Extensiones que el navegador puede renderizar inline dentro de un <embed>/<iframe>.\r\n * Esto NO es configurable desde el host: es una capacidad del navegador, no una\r\n * decisión de negocio, así que la librería la conoce de antemano (evita que el host\r\n * marque como \"previsualizable\" un tipo que en realidad nunca se va a renderizar).\r\n */\r\nconst PREVIEWABLE_EXTENSIONS = ['.pdf', '.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.svg'];\r\n\r\nconst ICON_BY_EXTENSION: Record<string, string> = {\r\n '.pdf': 'pi-file-pdf',\r\n '.xls': 'pi-file-excel',\r\n '.xlsx': 'pi-file-excel',\r\n '.doc': 'pi-file-word',\r\n '.docx': 'pi-file-word',\r\n '.jpg': 'pi-image',\r\n '.jpeg': 'pi-image',\r\n '.png': 'pi-image',\r\n '.gif': 'pi-image',\r\n '.webp': 'pi-image',\r\n '.bmp': 'pi-image',\r\n '.svg': 'pi-image'\r\n};\r\n\r\n/** Normaliza una lista de extensiones dada por el host (con o sin punto, mayúsc/minúsc). */\r\nexport function normalizeExtensions(extensions: string[] | undefined | null, fallback: string[]): string[] {\r\n const list = extensions && extensions.length ? extensions : fallback;\r\n return list\r\n .map(ext => ext.trim().toLowerCase())\r\n .filter(ext => !!ext)\r\n .map(ext => (ext.startsWith('.') ? ext : `.${ext}`));\r\n}\r\n\r\n/** Arma el atributo `accept` del input file a partir de las extensiones permitidas. */\r\nexport function buildAcceptAttr(extensions: string[]): string {\r\n const mimeTypes = extensions.map(ext => MIME_TYPES_BY_EXTENSION[ext]).filter((m): m is string => !!m);\r\n return [...new Set([...mimeTypes, ...extensions])].join(',');\r\n}\r\n\r\nfunction hasExtension(fileName: string | undefined | null, extensions: string[]): boolean {\r\n if (!fileName) return false;\r\n const lower = fileName.toLowerCase();\r\n return extensions.some(ext => lower.endsWith(ext));\r\n}\r\n\r\nexport function isAllowedUploadFile(file: File, extensions: string[]): boolean {\r\n const mimeTypes = extensions.map(ext => MIME_TYPES_BY_EXTENSION[ext]).filter((m): m is string => !!m);\r\n return mimeTypes.includes(file.type) || hasExtension(file.name, extensions);\r\n}\r\n\r\n/** true si el navegador puede mostrar este archivo inline en un <embed>/<iframe>. */\r\nexport function canPreviewFile(name: string | undefined | null): boolean {\r\n return hasExtension(name, PREVIEWABLE_EXTENSIONS);\r\n}\r\n\r\n/** Ícono PrimeIcons según la extensión del archivo; 'pi-file' si no se reconoce. */\r\nexport function getFileTypeIcon(name: string | undefined | null): string {\r\n if (!name) return 'pi-file';\r\n const lower = name.toLowerCase();\r\n const match = Object.keys(ICON_BY_EXTENSION).find(ext => lower.endsWith(ext));\r\n return match ? ICON_BY_EXTENSION[match] : 'pi-file';\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { buildAcceptAttr, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS, isAllowedUploadFile, normalizeExtensions } from '../../../utils/file-type.util';\r\n\r\n@Component({\r\n selector: 'lib-upload-dialog',\r\n imports: [CommonModule, ButtonModule, DialogModule],\r\n templateUrl: './upload-dialog.component.html',\r\n styleUrl: './upload-dialog.component.scss'\r\n})\r\nexport class UploadDialogComponent {\r\n @Input() selectedDocument: any;\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\r\n @Input() allowedExtensions: string[] | undefined;\r\n @Output() onUploaded = new EventEmitter<{ fileList: File[], tagValue: any }>();\r\n @Output() loadFile = new EventEmitter<void>();\r\n @ViewChild('fileInput', { static: true })\r\n fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n constructor() { }\r\n\r\n private get normalizedExtensions(): string[] {\r\n return normalizeExtensions(this.allowedExtensions, DEFAULT_ALLOWED_UPLOAD_EXTENSIONS);\r\n }\r\n\r\n get acceptedFileTypes(): string {\r\n return buildAcceptAttr(this.normalizedExtensions);\r\n }\r\n\r\n loadFileClick() {\r\n this.loadFile.emit();\r\n this.fileInput.nativeElement.value = '';\r\n this.fileInput.nativeElement.click();\r\n }\r\n fileChange(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files?.length) return;\r\n const files = Array.from(input.files);\r\n const validFiles = files.filter(f => isAllowedUploadFile(f, this.normalizedExtensions));\r\n const imagePathInput = input.value;\r\n if(validFiles?.length) this.onUploaded.emit({ fileList: validFiles, tagValue: imagePathInput });\r\n }\r\n\r\n}\r\n","<input\r\n #fileInput\r\n type=\"file\"\r\n (change)=\"fileChange($event)\"\r\n class=\"hidden\"\r\n placeholder=\"Upload file\"\r\n [attr.accept]=\"acceptedFileTypes\"\r\n multiple\r\n/>\r\n<button\r\n pButton\r\n type=\"button\"\r\n label=\"Subir archivo\"\r\n icon=\"pi pi-upload\"\r\n class=\"p-button-outlined ff-btn-upload\"\r\n (click)=\"loadFileClick()\"\r\n></button>\r\n\r\n<!-- <p-dialog [header] = \"'Adicionar ' + selectedDocument.label\" [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '30rem' }\" [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\nposition = \"top\" [closable]=\"true\" (onHide)=\"visible=false\">\r\n <div class=\"mt-3\">\r\n <div class=\"text-center\">\r\n <input #fileInput type=\"file\" (change)=\"fileChange($event)\" class=\"hidden\"\r\n placeholder=\"Upload file\" [attr.accept]=\"acceptedFileTypes\" multiple>\r\n </div>\r\n <div class=\"text-center\">\r\n <p-button\r\n icon=\"pi pi-upload\"\r\n (click)=\"loadFileClick()\"\r\n [text] = \"true\"\r\n [rounded]=\"true\"\r\n ></p-button>\r\n\r\n <label *ngIf=\"isMobile\" (click)=\"openModal2(scanContent)\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">camera_alt</mat-icon>\r\n </label> \r\n </div>\r\n </div>\r\n</p-dialog> -->\r\n","// flexible-date.pipe.ts\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe, registerLocaleData } from '@angular/common';\r\nimport localeEs from '@angular/common/locales/es';\r\n\r\nregisterLocaleData(localeEs);\r\n\r\n@Pipe({ name: 'flexibleDate' })\r\nexport class FlexibleDatePipe implements PipeTransform {\r\n private datePipe = new DatePipe('es'); // o el locale que uses\r\n\r\n transform(value: any, format: string = 'dd/MM/yyyy HH:mm'): string {\r\n const parsed = this.parseFlexibleDate(value);\r\n if (!parsed) return value ?? ''; // fallback: mostrar el string original en vez de explotar\r\n return this.datePipe.transform(parsed, format) ?? '';\r\n }\r\n\r\n private parseFlexibleDate(value: any): Date | null {\r\n if (!value) return null;\r\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\r\n if (typeof value === 'number') return new Date(value);\r\n\r\n let str = String(value).trim();\r\n\r\n // Colapsar espacios múltiples: \"Jun 4 2026 5:03PM\" -> \"Jun 4 2026 5:03PM\"\r\n str = str.replace(/\\s+/g, ' ');\r\n\r\n // Intento 1: Date nativo (cubre ISO, \"Jun 4 2026 5:03PM\", RFC2822, etc.)\r\n let d = new Date(str);\r\n if (!isNaN(d.getTime())) return d;\r\n\r\n // Intento 2: formatos comunes tipo \"dd/MM/yyyy HH:mm\" o \"MM/dd/yyyy\"\r\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);\r\n if (slashMatch) {\r\n let [, a, b, year, hh, mm, ss, ampm] = slashMatch;\r\n if (year.length === 2) year = '20' + year;\r\n let hour = hh ? parseInt(hh, 10) : 0;\r\n if (ampm) {\r\n if (/PM/i.test(ampm) && hour < 12) hour += 12;\r\n if (/AM/i.test(ampm) && hour === 12) hour = 0;\r\n }\r\n // Asumimos dd/MM/yyyy (ajustá si tu backend manda MM/dd/yyyy)\r\n d = new Date(+year, +a - 1, +b, hour, mm ? +mm : 0, ss ? +ss : 0);\r\n if (!isNaN(d.getTime())) return d;\r\n }\r\n\r\n // Intento 3: \"yyyy-MM-dd HH:mm:ss\" sin la 'T' de ISO\r\n const isoLike = str.replace(' ', 'T');\r\n d = new Date(isoLike);\r\n if (!isNaN(d.getTime())) return d;\r\n\r\n return null; // no se pudo parsear\r\n }\r\n}","import {\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputIcon } from 'primeng/inputicon';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { UploadDialogComponent } from '../dialog/upload-dialog/upload-dialog.component';\r\nimport {\r\n DOCUMENT_SERVICE,\r\n DocumentGatewayService,\r\n} from '../../gateways/document.port';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FlexibleDatePipe } from '../../pipes/flexible-date.pipe';\r\nimport { canPreviewFile, getFileTypeIcon } from '../../utils/file-type.util';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ndeclare var cordova: any;\r\ndeclare var window: any;\r\n\r\n@Component({\r\n selector: 'lib-folder-files',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ButtonModule,\r\n CheckboxModule,\r\n InputTextModule,\r\n InputIcon,\r\n IconField,\r\n PaginatorModule,\r\n SafePipe,\r\n UploadDialogComponent,\r\n SelectModule,\r\n FlexibleDatePipe,\r\n DialogModule,\r\n ],\r\n templateUrl: './folder-files.component.html',\r\n styleUrls: ['./folder-files.component.scss'],\r\n standalone: true,\r\n})\r\nexport class FolderFilesComponent implements OnChanges, OnDestroy {\r\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\r\n private searchSubject = new Subject<string>();\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() carpeta: any;\r\n @Input() isMobile: boolean = false;\r\n @Input() idKatios: any;\r\n @Input() server: string = '';\r\n @Input() subestado: string = '';\r\n @Input() requestData: any;\r\n @Input() useBreadcrumb: boolean = false;\r\n @Input() usesApi = true;\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería. */\r\n @Input() allowedUploadTypes: string[] | undefined;\r\n @Output() onFileChange = new EventEmitter<any>();\r\n @Output() onCargarArchivo = new EventEmitter<any>();\r\n @Output() onEliminarMasivo = new EventEmitter<any[]>();\r\n @Output() onBack = new EventEmitter<void>();\r\n @Output() viewDocument = new EventEmitter<any>();\r\n\r\n items: any[] = [];\r\n page = 1;\r\n pageSize = 10;\r\n totalRecords = 0;\r\n totalPages = 0;\r\n first = 0;\r\n searchQuery = '';\r\n docsEliminables: any[] = [];\r\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n loading = false;\r\n allSelected = false;\r\n pageSizeOptions = [\r\n { label: '5/pág', value: 5 },\r\n { label: '10/pág', value: 10 },\r\n { label: '20/pág', value: 20 },\r\n ];\r\n current_path: string = '';\r\n current_label: string = '';\r\n displayView: boolean = false;\r\n\r\n constructor() {\r\n this.searchSubject\r\n .pipe(debounceTime(400), distinctUntilChanged(), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.page = 1;\r\n if (this.usesApi) {\r\n this.loadFiles();\r\n } else {\r\n if (this.searchQuery.trim() === '' || !this.searchQuery) {\r\n this.items = this.carpeta.children;\r\n } else {\r\n this.items = this.carpeta.children.filter((item: any) =>\r\n item.label.toLowerCase().includes(this.searchQuery.toLowerCase()),\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.current_path = '';\r\n this.current_label = '';\r\n this.displayView = false;\r\n if (changes['carpeta'] && this.carpeta) {\r\n this.init();\r\n }\r\n }\r\n\r\n private init(): void {\r\n this.docsEliminables = [];\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.searchQuery = '';\r\n this.page = 1;\r\n\r\n this.applyPermissions();\r\n\r\n if (!this.usesApi) {\r\n // Modo children pre-cargados\r\n if (!this.carpeta.children || this.carpeta.children.length === 0) {\r\n this.carpeta.children = [];\r\n }\r\n this.items = this.carpeta.children;\r\n this.items.forEach((item: any) => (item.delete = false));\r\n } else {\r\n // Modo API paginada\r\n this.items = [];\r\n this.loadFiles();\r\n }\r\n }\r\n\r\n private applyPermissions(): void {\r\n if (this.carpeta?.reglas && typeof this.carpeta.reglas === 'string') {\r\n this.carpeta.reglas = JSON.parse(this.carpeta.reglas);\r\n }\r\n if (\r\n !this.carpeta?.reglas?.permisos?.subestados &&\r\n this.carpeta?.reglas?.permisos\r\n ) {\r\n this.carpeta.reglas.permisos.cargarFront =\r\n this.carpeta.reglas.permisos.cargar;\r\n this.carpeta.reglas.permisos.borrarFront =\r\n this.carpeta.reglas.permisos.borrar;\r\n } else if (\r\n this.carpeta?.reglas?.permisos?.subestados &&\r\n this.subestado?.trim()\r\n ) {\r\n const sub = this.subestado.toLowerCase().trim();\r\n this.carpeta.reglas.permisos.cargarFront = Array.isArray(\r\n this.carpeta.reglas.permisos.subestados.cargar,\r\n )\r\n ? this.carpeta.reglas.permisos.subestados.cargar\r\n .map((c: any) => c.toLowerCase().trim())\r\n .includes(sub)\r\n : this.carpeta.reglas.permisos.cargar;\r\n this.carpeta.reglas.permisos.borrarFront = Array.isArray(\r\n this.carpeta.reglas.permisos.subestados.borrar,\r\n )\r\n ? this.carpeta.reglas.permisos.subestados.borrar\r\n .map((b: any) => b.toLowerCase().trim())\r\n .includes(sub)\r\n : this.carpeta.reglas.permisos.borrar;\r\n }\r\n }\r\n\r\n loadFiles(): void {\r\n this.loading = true;\r\n this.documentsService\r\n .getFilesByFolder(\r\n this.idKatios,\r\n this.carpeta.NMCo,\r\n this.requestData,\r\n this.page,\r\n this.pageSize,\r\n this.searchQuery,\r\n )\r\n .subscribe({\r\n next: (response: any) => {\r\n const res = response?.data ?? response;\r\n this.totalRecords = res.total ?? 0;\r\n this.page = res.page ?? 1;\r\n this.totalPages = res.totalPages ?? 0;\r\n this.items = res.items ?? [];\r\n this.items.forEach((item: any) => (item.delete = false));\r\n this.buildPaths(this.items);\r\n this.loading = false;\r\n },\r\n error: (error: any) => {\r\n console.error('Error loading files by folder:', error);\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n\r\n onPageChange(event: any): void {\r\n this.first = event.first ?? 0;\r\n this.page = (event.page ?? 0) + 1;\r\n this.pageSize = event.rows ?? this.pageSize;\r\n this.loadFiles();\r\n }\r\n\r\n onSearchInput(): void {\r\n this.searchSubject.next(this.searchQuery);\r\n }\r\n\r\n /** Construye la ruta completa de cada archivo usando el server */\r\n private buildPaths(items: any[]): void {\r\n if (!this.server) return;\r\n items.forEach((item: any) => {\r\n if (item.Path && !item.Path.startsWith('http')) {\r\n let path = 'Imagenes/' + item.Path + item.label;\r\n path = path.replace(/\\\\/g, '/');\r\n item.Path = this.server + path;\r\n }\r\n });\r\n }\r\n\r\n fileChange(data: any): void {\r\n this.onFileChange.emit(data);\r\n }\r\n\r\n cargarArchivo(): void {\r\n this.onCargarArchivo.emit(this.carpeta);\r\n }\r\n\r\n openVisorDoc(item: any) {\r\n this.viewDocument.emit(item);\r\n }\r\n\r\n openCurrentInNewWindow(path?: string): void {\r\n window.open(path || this.current_path, '_blank').focus();\r\n }\r\n\r\n canPreview(label?: string, path?: string): boolean {\r\n return (\r\n canPreviewFile(label || this.current_label) ||\r\n canPreviewFile(path || this.current_path)\r\n );\r\n }\r\n\r\n previewFallbackIcon(label?: string, path?: string): string {\r\n return getFileTypeIcon(\r\n label || this.current_label || path || this.current_path,\r\n );\r\n }\r\n\r\n goBack(): void {\r\n this.onBack.emit();\r\n }\r\n\r\n onClickedCheckDelete(event: any, document: any): void {\r\n if (event.checked) this.docsEliminables.push(document);\r\n else\r\n this.docsEliminables = this.docsEliminables.filter(\r\n (doc) => doc !== document,\r\n );\r\n }\r\n\r\n emitEliminarMasivo(): void {\r\n this.onEliminarMasivo.emit(this.docsEliminables);\r\n }\r\n\r\n toggleSelectAll(): void {\r\n this.items.forEach((item) => (item.delete = this.allSelected));\r\n this.docsEliminables = this.allSelected ? [...this.items] : [];\r\n }\r\n\r\n // refresh(): void {\r\n // if (this.usesApi) {\r\n // this.loadFiles();\r\n // }\r\n // }\r\n\r\n onPageSizeChange(): void {\r\n this.first = 0;\r\n this.page = 1;\r\n this.loadFiles();\r\n }\r\n}\r\n","<div class=\"ff-layout\">\r\n <!-- Header fijo -->\r\n <div class=\"ff-header\">\r\n <div class=\"ff-back-row\" *ngIf=\"!useBreadcrumb\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-arrow-left\"\r\n label=\"Volver\"\r\n (click)=\"goBack()\"\r\n ></button>\r\n </div>\r\n\r\n <!-- Toolbar: búsqueda + botones de acción -->\r\n <div class=\"ff-toolbar\">\r\n <p-iconfield class=\"ff-toolbar__search\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [placeholder]=\"\r\n 'Buscar en ' +\r\n carpeta.label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\r\n \"\r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"onSearchInput()\"\r\n class=\"w-full\"\r\n />\r\n </p-iconfield>\r\n\r\n <div class=\"ff-toolbar__actions\">\r\n <lib-upload-dialog\r\n *ngIf=\"carpeta?.reglas?.permisos?.cargarFront\"\r\n [selectedDocument]=\"carpeta\"\r\n [allowedExtensions]=\"allowedUploadTypes\"\r\n (onUploaded)=\"fileChange($event)\"\r\n (loadFile)=\"cargarArchivo()\"\r\n >\r\n </lib-upload-dialog>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-trash\"\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n (click)=\"emitEliminarMasivo()\"\r\n [disabled]=\"docsEliminables.length === 0\"\r\n class=\"p-button-outlined p-button-danger p-button-sm ff-btn-delete\"\r\n >\r\n <span class=\"ff-btn-label\"\r\n >Eliminar ({{ docsEliminables.length }})</span\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Fila seleccionar todo / total archivos -->\r\n <div class=\"ff-select-row\" *ngIf=\"!loading && items.length > 0\">\r\n <div class=\"ff-select-row__left\">\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"allSelected\"\r\n (onChange)=\"toggleSelectAll()\"\r\n >\r\n </p-checkbox>\r\n <span\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n class=\"ff-select-row__label\"\r\n >Seleccionar todo</span\r\n >\r\n </div>\r\n <span class=\"ff-select-row__count\"\r\n >{{ totalRecords || items.length }}\r\n {{\r\n (totalRecords || items.length) === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Contenido scrollable -->\r\n <div class=\"ff-file-list-wrapper\">\r\n <!-- Loading -->\r\n <div *ngIf=\"loading\" class=\"ff-loading\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <!-- Lista de archivos -->\r\n <div class=\"ff-file-list\" *ngIf=\"!loading\">\r\n <div\r\n class=\"ff-file-item\"\r\n *ngFor=\"let item of items\"\r\n (click)=\"openVisorDoc(item)\"\r\n >\r\n <p-checkbox\r\n *ngIf=\"carpeta?.reglas?.permisos?.borrarFront\"\r\n [binary]=\"true\"\r\n [(ngModel)]=\"item.delete\"\r\n (onChange)=\"onClickedCheckDelete($event, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </p-checkbox>\r\n\r\n <div class=\"ff-file-item__preview\">\r\n <i\r\n *ngIf=\"!canPreview(item.label, item.Path)\"\r\n class=\"pi ff-file-item__frame ff-file-item__icon\"\r\n [ngClass]=\"previewFallbackIcon(item.label, item.Path)\"\r\n ></i>\r\n <ng-container *ngIf=\"canPreview(item.label, item.Path)\">\r\n <embed\r\n *ngIf=\"carpeta.TipoArchivo == '2'\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n />\r\n <img\r\n *ngIf=\"carpeta.TipoArchivo == '1' && isMobile\"\r\n class=\"ff-file-item__frame\"\r\n src=\"https://macuna.tecfinanzas.com/Imagenes/pdf_icon.png\"\r\n />\r\n <iframe\r\n *ngIf=\"carpeta.TipoArchivo == '1' && !isMobile\"\r\n class=\"ff-file-item__frame\"\r\n [src]=\"item.Path | safe\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"ff-file-item__info\">\r\n <span class=\"ff-file-item__name\">{{ item.label }}</span>\r\n <span class=\"ff-file-item__date\" *ngIf=\"item.FechaSubida && !isMobile\"\r\n >Fecha Subida:\r\n {{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <span\r\n class=\"ff-file-item__date\"\r\n *ngIf=\"item.FechaSubida && isMobile\"\r\n >{{ item.FechaSubida | flexibleDate: \"dd/MM/yyyy HH:mm\" }}</span\r\n >\r\n <i\r\n class=\"pi pi-external-link ff-file-item__open\"\r\n (click)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n aria-label=\"Abrir en nueva ventana\"\r\n (keydown.enter)=\"\r\n openCurrentInNewWindow(item.Path); $event.stopPropagation()\r\n \"\r\n ></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sin resultados -->\r\n <div *ngIf=\"!loading && items.length === 0\" class=\"ff-empty\">\r\n Sin documentos cargados\r\n </div>\r\n </div>\r\n\r\n <!-- Footer fijo: paginación compacta -->\r\n <div class=\"ff-footer\" *ngIf=\"usesApi && totalRecords > 0\">\r\n <div class=\"ff-pagination\">\r\n <p-select\r\n [options]=\"pageSizeOptions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [(ngModel)]=\"pageSize\"\r\n (ngModelChange)=\"onPageSizeChange()\"\r\n >\r\n </p-select>\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"pageSize\"\r\n [totalRecords]=\"totalRecords\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [showPageLinks]=\"false\"\r\n [showFirstLastIcon]=\"false\"\r\n >\r\n </p-paginator>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n ApplicationRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ConfirmationService, MessageService, TreeNode } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport * as _ from 'lodash';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { PanelModule } from 'primeng/panel';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SafePipe } from './pipes/safe.pipe';\r\nimport {\r\n DOCUMENT_SERVICE,\r\n DocumentGatewayService,\r\n} from './gateways/document.port';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputIcon } from 'primeng/inputicon';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { FolderFilesComponent } from './components/folder-files/folder-files.component';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { SfDocumentsService } from './sf-documents.service';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { of } from 'rxjs';\r\nimport { SfDocumentNavigationState } from './models/navigation-state.model';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { canPreviewFile, getFileTypeIcon } from './utils/file-type.util';\r\n\r\ndeclare var cordova: any;\r\ndeclare var window: any;\r\n\r\n@Component({\r\n selector: 'app-sf-documents',\r\n imports: [\r\n ToastModule,\r\n ButtonModule,\r\n ConfirmDialogModule,\r\n PanelModule,\r\n CheckboxModule,\r\n DialogModule,\r\n CommonModule,\r\n FormsModule,\r\n SafePipe,\r\n InputTextModule,\r\n InputIcon,\r\n IconField,\r\n FolderFilesComponent,\r\n DropdownModule,\r\n DatePickerModule,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './sf-documents.component.html',\r\n styleUrls: ['./sf-documents.component.scss'],\r\n providers: [ConfirmationService],\r\n standalone: true,\r\n})\r\nexport class SfDocumentsComponent implements OnChanges {\r\n private documentsService = inject<DocumentGatewayService>(DOCUMENT_SERVICE);\r\n @Input() accion: string = '';\r\n @Input() entidad: string = '';\r\n @Input() ndoc: string = '';\r\n @Input() tdoc: string = '';\r\n @Input() tipo: string = '';\r\n //Información necesaria para cargar documentos de productos\r\n @Input() Kasociada: string = '';\r\n @Input() Producto: string = '';\r\n @Input() Solicitud: string = '';\r\n @Input() oSession: any;\r\n @Input() perfilDocumentos: any;\r\n @Input() subestado: string = '';\r\n @Input() isMobile: boolean = false;\r\n @Output() nextTabPapa: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @Input() bAtras: boolean = false;\r\n @Input() bFinal: boolean = false;\r\n @Input() botones: boolean = true;\r\n @Input() aplFiltro: boolean = false;\r\n\r\n @Input() nmco: string[] = [];\r\n @Input() useBreadcrumb: boolean = false;\r\n\r\n @Input() usesApi: boolean = true;\r\n\r\n /** Extensiones permitidas para subir (ej. ['.pdf', '.xlsx']). Si no se define, usa el default de la librería (pdf, xls, xlsx). */\r\n @Input() allowedUploadTypes: string[] | undefined;\r\n\r\n @Output() onNavigationChange = new EventEmitter<SfDocumentNavigationState>();\r\n\r\n @Input() server: string = '';\r\n valorFiltro: string = '';\r\n\r\n tab = 1;\r\n enProceso = false;\r\n carpetaSeleccionada: any;\r\n files: any;\r\n filesFilter: any;\r\n imagePathInput: any;\r\n documentoSeleccionado: any;\r\n totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n file: any;\r\n urlDoc: any;\r\n pdfUrl: any;\r\n scanFileList = new Array<any>();\r\n displayPDF: boolean = false;\r\n\r\n @ViewChild('pdf', { read: ElementRef }) public panel!: ElementRef<any>;\r\n UsuarioNdoc: any;\r\n UsuarioTdoc: any;\r\n @Input() idKatios: any;\r\n\r\n displayGenerate = false;\r\n\r\n canGenerate = true;\r\n\r\n documentTypes: any[] = [];\r\n documentsToGenerate: any[] = [];\r\n documentsToGenerateMap: Record<string, any> = {};\r\n dynamicParams: any[] = [];\r\n dynamicValues: Record<string, any> = {};\r\n selectedDocType: string | null = null;\r\n selectedRange: string | null = null;\r\n current_path: string = '';\r\n current_label: string = '';\r\n displayView: boolean = false;\r\n\r\n constructor(\r\n private sanitizer: DomSanitizer,\r\n public snackBar: MessageService,\r\n private appRef: ApplicationRef,\r\n private confirmationService: ConfirmationService,\r\n public documentService: SfDocumentsService,\r\n ) {}\r\n\r\n // ngOnInit() {\r\n // if (this.oSession != null && this.oSession.UsuarioSistema.TDOC !== undefined && this.oSession.UsuarioSistema.NDOC !== undefined) {\r\n // this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\r\n // this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\r\n // }\r\n // if (this.tipo && this.perfilDocumentos) {\r\n // this.cargarParametros(this.tipo)\r\n // }\r\n // }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.files = [];\r\n this.filesFilter = [];\r\n this.imagePathInput = null;\r\n this.carpetaSeleccionada = null;\r\n this.documentoSeleccionado = null;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.file = null;\r\n this.urlDoc = null;\r\n this.pdfUrl = null;\r\n this.scanFileList = new Array<any>();\r\n this.displayPDF = false;\r\n this.displayGenerate = false;\r\n this.canGenerate = true;\r\n this.documentTypes = [];\r\n this.documentsToGenerate = [];\r\n this.documentsToGenerateMap = {};\r\n this.dynamicParams = [];\r\n this.dynamicValues = {};\r\n this.selectedDocType = null;\r\n this.selectedRange = null;\r\n if (\r\n this.oSession != null &&\r\n this.oSession.UsuarioSistema.TDOC !== undefined &&\r\n this.oSession.UsuarioSistema.NDOC !== undefined\r\n ) {\r\n this.idKatios = this.oSession.UsuarioSistema.IDKATIOS.trim();\r\n this.perfilDocumentos = this.oSession.UsuarioSistema.PERDOCUMENTOS.trim();\r\n }\r\n if (this.tipo && this.perfilDocumentos) {\r\n this.cargarParametros(this.tipo);\r\n }\r\n }\r\n\r\n cargarParametros(tipo: string) {\r\n if (tipo !== '1') return;\r\n\r\n this.documentService.loadingData = true;\r\n this.documentService.loading = false;\r\n const data = {\r\n action: this.accion,\r\n entity: this.entidad,\r\n tdoc: this.tdoc,\r\n ndoc: this.ndoc,\r\n request: this.Solicitud,\r\n documentProfile: this.perfilDocumentos,\r\n product: this.Producto,\r\n };\r\n\r\n this.documentsService\r\n .getFolders(this.idKatios, data)\r\n .pipe(\r\n tap((response: any) => {\r\n let res = response.data;\r\n if (response.data.RESPUESTA) res = response.data.RESPUESTA;\r\n this.okCargoArbol(res);\r\n }),\r\n switchMap(() =>\r\n this.Solicitud\r\n ? this.documentsService.getDocumentsToGenerate(\r\n this.idKatios,\r\n this.Solicitud,\r\n )\r\n : of(null),\r\n ),\r\n tap((resp: any) => {\r\n const list = resp?.data ?? []; // según tu JSON real\r\n this.documentsToGenerate = list;\r\n\r\n this.documentsToGenerateMap = {};\r\n list.forEach((d: any) => (this.documentsToGenerateMap[d.idDoc] = d));\r\n\r\n // dropdown: usa idDoc pero mantén objeto completo en map\r\n this.documentTypes = list.map((d: any) => ({\r\n label: d.description,\r\n code: d.idDoc,\r\n }));\r\n }),\r\n finalize(() => {\r\n this.documentService.loadingData = false;\r\n }),\r\n )\r\n .subscribe({\r\n error: (error: any) => {\r\n this.errorCargarArbol(error);\r\n },\r\n });\r\n\r\n this.tab = 1;\r\n this.documentoSeleccionado = null;\r\n this.emitNavigationState();\r\n }\r\n expandAll() {\r\n this.files.forEach((node: any) => {\r\n this.expandRecursive(node, true);\r\n });\r\n }\r\n\r\n private expandRecursive(node: TreeNode, isExpand: boolean) {\r\n node.expanded = isExpand;\r\n var objeto: any;\r\n objeto = node;\r\n if (node.children && node.children?.length > 0) {\r\n node.children.forEach((childNode) => {\r\n this.expandRecursive(childNode, isExpand);\r\n });\r\n } else if (objeto.Path !== undefined) {\r\n var path = 'Imagenes/' + objeto.Path + objeto.label;\r\n var re = /[\\\\]/gi;\r\n path = path.replace(re, '/');\r\n objeto.Path = this.server + path;\r\n //this.sanitizer.bypassSecurityTrustUrl(this.server + path)\r\n }\r\n }\r\n\r\n public okCargoArbol = (iArbol: any) => {\r\n if (!iArbol.CARPETA && iArbol.length === undefined) {\r\n iArbol = new Array(iArbol);\r\n } else if (iArbol.CARPETA.length === undefined) {\r\n iArbol = new Array(iArbol.CARPETA);\r\n }\r\n\r\n iArbol.forEach((element: any) => {\r\n this.convertirArrayChildren(element);\r\n });\r\n\r\n //\r\n this.filtrarTipoDocumento(iArbol);\r\n //\r\n this.files = iArbol;\r\n this.filesFilter = iArbol;\r\n this.expandAll();\r\n this.documentService.loadingData = false;\r\n };\r\n public errorCargarArbol = (iError: any) => {\r\n this.message('error', 'Error al traer la información', iError.message);\r\n this.documentService.loadingData = false;\r\n };\r\n\r\n // onClickedCheckDelete($event: any, document: any) {\r\n // if ($event.checked) this.docsEliminables.push(document);\r\n // else this.docsEliminables = this.docsEliminables.filter(doc => doc !== document);\r\n // }\r\n\r\n funcOkDelDocumentMasivo = (docsEliminables: any[]) => {\r\n this.totalDocsEliminadosApi.existoso += 1;\r\n if (\r\n this.totalDocsEliminadosApi.existoso +\r\n this.totalDocsEliminadosApi.fallido ===\r\n docsEliminables.length\r\n ) {\r\n this.cargarParametros(this.tipo);\r\n if (this.totalDocsEliminadosApi.fallido > 0)\r\n this.message(\r\n 'warn',\r\n '',\r\n 'Algunos documentos no pudieron ser eliminados',\r\n );\r\n else\r\n this.message('success', '', 'Documentos eliminados satisfactoriamente');\r\n }\r\n };\r\n\r\n funcErrDelDocumentMasivo = (docsEliminables: any[]) => {\r\n this.totalDocsEliminadosApi.fallido += 1;\r\n if (\r\n this.totalDocsEliminadosApi.existoso +\r\n this.totalDocsEliminadosApi.fallido ===\r\n docsEliminables.length\r\n ) {\r\n this.cargarParametros(this.tipo);\r\n this.message('warn', '', 'Algunos documentos no pudieron ser eliminados');\r\n }\r\n };\r\n\r\n eliminarMasivo(docsEliminables: any[]) {\r\n this.confirmationService.confirm({\r\n message: `¿Desea eliminar los ${docsEliminables.length} documentos seleccionados?`,\r\n acceptLabel: 'Si',\r\n rejectLabel: 'No',\r\n accept: () => {\r\n this.documentService.loading = true;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n docsEliminables.forEach((doc) => {\r\n let data = { code: doc.codigo, status: 'DES' };\r\n this.documentsService.updateStatus(this.idKatios, data).subscribe({\r\n next: (response: any) => {\r\n this.funcOkDelDocumentMasivo(docsEliminables);\r\n },\r\n error: (error: any) => {\r\n this.documentService.loading = false;\r\n this.funcErrDelDocumentMasivo(docsEliminables);\r\n },\r\n });\r\n });\r\n },\r\n });\r\n }\r\n\r\n filtrarTipoDocumento(iArbol: any) {\r\n if (this.nmco.length !== 0) {\r\n iArbol.forEach((element: any) => {\r\n element.children = element.children.filter((child: any) =>\r\n this.nmco.includes(child.NMCo),\r\n );\r\n });\r\n }\r\n }\r\n\r\n convertirArrayChildren(node: any) {\r\n if (node.children === undefined) node.children = [];\r\n else if (node.children.length == undefined) {\r\n node.children = new Array(node.children);\r\n }\r\n node.children.forEach((childNode: any) => {\r\n this.convertirArrayChildren(childNode);\r\n });\r\n }\r\n\r\n // takePhotoClick() {\r\n // this.documentsService.openCamera(this.ok_openCamera, this.error_openCamera);\r\n // }\r\n /////Cuando se cargar archivos adjuntos\r\n fileChange(data: any) {\r\n const fileList = data.fileList;\r\n const tagValue = data.tagValue;\r\n this.file = fileList[0];\r\n this.imagePathInput = tagValue;\r\n this.generarData(fileList);\r\n }\r\n\r\n // ok_openCamera = (imageUri: any) => {\r\n // this.makeFileIntoBlob(imageUri)\r\n // .then((file: Blob) => {\r\n // this.appRef.tick();\r\n // if (file.size > 1000000) {\r\n // if (confirm(\"Este archivo es bastate pesado, le recomendamos bajar la calidad de la cámara. ¿Desea subir este archivo?\")) {\r\n // this.loadFileToList(file);\r\n // }\r\n // } else {\r\n // this.loadFileToList(file);\r\n // }\r\n // this.documentService.loading = false;\r\n // })\r\n // .catch((error: Error) => {\r\n // console.error('Error processing camera image:', error);\r\n // this.message(\"Error al procesar la imagen de la cámara\", \"Error\");\r\n // this.documentService.loading = false;\r\n // });\r\n // }\r\n\r\n loadFileToList(file: any) {\r\n setTimeout(() => {\r\n file['name'] = 'scan' + Date.now() + this.scanFileList.length + '.jpg';\r\n this.scanFileList.push(file);\r\n this.scanFileList = this.scanFileList.slice();\r\n this.documentService.loading = false;\r\n this.message('success', '', 'Archivo cargado exitosamente');\r\n\r\n this.appRef.tick();\r\n }, 200);\r\n }\r\n\r\n subirFotosScan() {\r\n this.generarData(this.scanFileList);\r\n }\r\n // error_openCamera = (err: any) => {\r\n // console.log(err);\r\n // this.message(\"No se pudo acceder a la camara\", \"Error\")\r\n // }\r\n\r\n noZonePatch(cb: () => void) {\r\n const orig = FileReader;\r\n const unpatched = ((window as any).FileReader as any)\r\n .__zone_symbol__OriginalDelegate;\r\n (window as any).FileReader = unpatched;\r\n cb();\r\n (window as any).FileReader = orig;\r\n }\r\n\r\n // makeFileIntoBlob(_imagePath: any): Promise<Blob> {\r\n // this.documentService.loading = true;\r\n // // INSTALL PLUGIN - cordova plugin add cordova-plugin-file\r\n // return new Promise((resolve, reject) => {\r\n // try {\r\n // window.resolveLocalFileSystemURL(_imagePath, (fileEntry: any) => {\r\n // fileEntry.file((resFile: any) => {\r\n // this.noZonePatch(() => {//! Alert 1: Comentarear esta linea y una de de abajo para ambiente de prueba\r\n // var reader = new FileReader();\r\n\r\n // reader.onloadend = (evt: any) => {\r\n // var imgBlob: any = new Blob([evt.target.result], { type: 'image/jpeg' });\r\n // imgBlob.name = 'scan.jpg';\r\n // resolve(imgBlob);\r\n // };\r\n\r\n // reader.onerror = (e) => {\r\n // console.log('Failed file read: ' + e.toString());\r\n // reject(e);\r\n // };\r\n // reader.readAsArrayBuffer(resFile);\r\n // });//!Comentarear esta linea y una de de arriba para ambiente de prueba\r\n // });\r\n // }, (error: any) => {\r\n // console.error('Error resolving file system URL:', error);\r\n // reject(error);\r\n // });\r\n // } catch (ex) {\r\n // console.error('Error in makeFileIntoBlob:', ex);\r\n // reject(ex);\r\n // }\r\n // });\r\n // }\r\n\r\n subirImagen(data: any, fileList: any) {\r\n this.documentService.loading = true;\r\n const formData: FormData = new FormData();\r\n var dataDocs;\r\n var sIdKatios = this.idKatios;\r\n dataDocs = { data: data };\r\n formData.append('data', JSON.stringify(dataDocs));\r\n formData.append('merge', 'true');\r\n\r\n for (let _i = 0; _i < fileList.length; _i++) {\r\n formData.append('files', fileList[_i], fileList[_i].name);\r\n }\r\n\r\n this.documentsService.uploadFiles(sIdKatios, formData).subscribe({\r\n next: (response: any) => {\r\n this.scanFileList = new Array<any>();\r\n this.message(\r\n 'success',\r\n 'Felicidades',\r\n 'Se almacenó el documento correctamente',\r\n );\r\n this.cargarParametros(this.tipo);\r\n this.documentService.loading = false;\r\n this.appRef.tick();\r\n },\r\n error: (err: any) => {\r\n this.documentService.loading = false;\r\n this.message(\r\n 'error',\r\n 'Se presentaron inconvenientes almacenando el documento',\r\n err.message,\r\n );\r\n console.error('Error : ' + err);\r\n },\r\n });\r\n }\r\n\r\n generarData(fileList: any) {\r\n this.documentService.loading = true;\r\n var sPath1;\r\n var dataClientes;\r\n let sPaths = '';\r\n if (this.documentoSeleccionado.Tipo.trim().toUpperCase() == 'PERSONA') {\r\n sPath1 =\r\n this.documentoSeleccionado.Tipo.trim() +\r\n '\\\\' +\r\n this.tdoc.trim() +\r\n '\\\\' +\r\n this.ndoc.trim() +\r\n '\\\\Cliente\\\\' +\r\n this.documentoSeleccionado.NMCo.trim();\r\n } else {\r\n //Kasociada\r\n //producto\r\n //Falta numero de solicitud\r\n\r\n sPath1 =\r\n this.documentoSeleccionado.Tipo.trim() +\r\n '\\\\' +\r\n this.Kasociada +\r\n '\\\\' +\r\n this.Producto +\r\n '\\\\' +\r\n this.Solicitud +\r\n '\\\\' +\r\n this.documentoSeleccionado.NMCo;\r\n }\r\n\r\n dataClientes = {\r\n Tipo: this.documentoSeleccionado.Tipo,\r\n id: '1',\r\n documento: this.documentoSeleccionado.NMCo,\r\n tdoc: this.tdoc.trim(),\r\n ndoc: this.ndoc.trim(),\r\n IdProducto: this.Solicitud,\r\n TipoProducto: this.Producto,\r\n Kasociada: this.Kasociada,\r\n archivoUpload: fileList[0],\r\n nombre: this.tdoc.trim() + '-' + this.ndoc.trim(),\r\n fileCargado: fileList[0],\r\n pathArchivo: sPath1,\r\n TipoArchivo: this.documentoSeleccionado.TipoArchivo,\r\n };\r\n sPaths = sPaths + sPath1 + ',';\r\n this.subirImagen(dataClientes, fileList);\r\n }\r\n\r\n cargarArchivo(iNodo: any) {\r\n this.scanFileList = new Array<any>();\r\n this.documentoSeleccionado = iNodo;\r\n }\r\n\r\n async seleccionoDocs(iNodo: any) {\r\n var path = iNodo.Path + iNodo.label;\r\n this.pdfUrl = '//imagenes//' + iNodo.idKatios + '//' + path;\r\n this.pdfUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfUrl);\r\n this.gotoBottom();\r\n }\r\n\r\n message(severity: string, summary: string, message: any) {\r\n this.snackBar.add({\r\n severity: severity,\r\n summary: summary,\r\n detail: message,\r\n life: 4000,\r\n });\r\n }\r\n\r\n public gotoBottom(): void {\r\n window.scrollBy(0, this.panel.nativeElement.scrollHeight);\r\n }\r\n\r\n get requestData(): any {\r\n return {\r\n action: this.accion,\r\n entity: this.entidad,\r\n tdoc: this.tdoc,\r\n ndoc: this.ndoc,\r\n request: this.Solicitud,\r\n documentProfile: this.perfilDocumentos,\r\n product: this.Producto,\r\n };\r\n }\r\n\r\n public VerDetalleTab(items: any) {\r\n this.carpetaSeleccionada = items;\r\n this.totalDocsEliminadosApi = { existoso: 0, fallido: 0 };\r\n this.tab = 2;\r\n this.emitNavigationState();\r\n }\r\n\r\n goToTab(tab: any) {\r\n this.tab = tab;\r\n this.emitNavigationState();\r\n }\r\n\r\n private emitNavigationState(): void {\r\n if (!this.useBreadcrumb) return;\r\n const state: SfDocumentNavigationState = { tab: this.tab };\r\n if (this.tab === 2 && this.carpetaSeleccionada) {\r\n state.folderLabel = (this.carpetaSeleccionada.label || '').replace(\r\n '#toolbar=0&navpanes=0&statusbar=0',\r\n '',\r\n );\r\n }\r\n this.onNavigationChange.emit(state);\r\n }\r\n\r\n next(iValor: any) {\r\n if (iValor < 0) {\r\n this.nextTabPapa.emit(iValor);\r\n } else {\r\n var respuesta = '';\r\n if (this.files) respuesta = this.valorDocumentosPendientes(this.files[0]);\r\n\r\n if (respuesta == '') {\r\n this.nextTabPapa.emit(iValor);\r\n } else {\r\n this.message('warn', 'Ups!', respuesta);\r\n }\r\n }\r\n }\r\n\r\n valorDocumentosPendientes(carpetas: any) {\r\n var respuesta = '';\r\n if (carpetas.children) {\r\n carpetas.children.forEach((carpeta: any) => {\r\n if (\r\n carpeta.Obligatorio == 1 &&\r\n (!carpeta.children || carpeta.children.length == 0)\r\n )\r\n respuesta = 'Falta ' + carpeta.label;\r\n });\r\n }\r\n return respuesta;\r\n }\r\n\r\n filtrarDocumentos() {\r\n this.filesFilter = _.cloneDeep(this.files);\r\n for (let i = 0; i < this.files.length; i++) {\r\n let node = [];\r\n for (let j = 0; j < this.files[i].children.length; j++) {\r\n let file = this.files[i].children[j];\r\n if (\r\n file.label.toLowerCase().indexOf(this.valorFiltro.toLowerCase()) == 0\r\n )\r\n node.push(file);\r\n }\r\n this.filesFilter[i].children = node;\r\n }\r\n }\r\n\r\n openGenerateDialog() {\r\n this.selectedDocType = null;\r\n this.selectedRange = null;\r\n this.displayGenerate = true;\r\n }\r\n\r\n generateDocument() {\r\n if (!this.selectedDocType) return;\r\n\r\n // Validación mínima: si hay params, exigir que no estén vacíos\r\n for (const p of this.dynamicParams || []) {\r\n const key = p.name;\r\n const v = this.dynamicValues?.[key];\r\n if (v === null || v === undefined || v === '') {\r\n this.message('warn', '', `Falta el parámetro ${p.description}`);\r\n return;\r\n }\r\n }\r\n\r\n // construir params\r\n const paramsToSend: any = {};\r\n for (const p of this.dynamicParams || []) {\r\n const key = p.name;\r\n const raw = this.dynamicValues?.[key];\r\n\r\n paramsToSend[p.name] =\r\n (p.type || '').toLowerCase() === 'date' ? this.toYYYYMMDD(raw) : raw;\r\n }\r\n\r\n this.enProceso = true;\r\n\r\n const payload = {\r\n params: paramsToSend,\r\n };\r\n this.documentsService\r\n .generateDocument(\r\n this.idKatios,\r\n this.selectedDocType,\r\n this.Solicitud,\r\n payload,\r\n )\r\n .subscribe({\r\n next: () => {\r\n this.displayGenerate = false;\r\n this.message('success', '', 'Documento en generación');\r\n this.cargarParametros(this.tipo);\r\n this.enProceso = false;\r\n },\r\n error: (err: any) => {\r\n this.message(\r\n 'error',\r\n 'No se pudo generar el documento',\r\n err?.message || err,\r\n );\r\n this.enProceso = false;\r\n },\r\n });\r\n }\r\n private toYYYYMMDD(value: any): string | null {\r\n if (!value) return null;\r\n const d = value instanceof Date ? value : new Date(value);\r\n if (isNaN(d.getTime())) return null;\r\n\r\n // ISO: 2025-12-19T05:00:00.000Z -> 2025-12-19\r\n return d.toISOString().slice(0, 10);\r\n }\r\n onDocTypeChange() {\r\n const doc = this.selectedDocType\r\n ? this.documentsToGenerateMap[this.selectedDocType]\r\n : null;\r\n\r\n this.dynamicParams = doc?.params ?? [];\r\n this.dynamicValues = {}; // reset valores\r\n\r\n // valores default opcionales\r\n for (const p of this.dynamicParams) {\r\n const key = p.name;\r\n this.dynamicValues[key] = null;\r\n }\r\n }\r\n\r\n openVisorDoc(item: any) {\r\n if (this.carpetaSeleccionada.TipoArchivo == '1' && this.isMobile) {\r\n //is mobile\r\n cordova.InAppBrowser.open(item.Path, '_system', 'location=yes');\r\n } else {\r\n this.current_path = item.Path;\r\n this.current_label = item.label;\r\n this.displayView = true;\r\n }\r\n }\r\n\r\n openCurrentInNewWindow(path?: string): void {\r\n window.open(path || this.current_path, '_blank').focus();\r\n }\r\n\r\n canPreview(label?: string, path?: string): boolean {\r\n return (\r\n canPreviewFile(label || this.current_label) ||\r\n canPreviewFile(path || this.current_path)\r\n );\r\n }\r\n\r\n previewFallbackIcon(label?: string, path?: string): string {\r\n return getFileTypeIcon(\r\n label || this.current_label || path || this.current_path,\r\n );\r\n }\r\n}\r\n","<div class=\"sf-doc-layout\">\r\n <div class=\"sf-doc-fixed\">\r\n <div class=\"buttons\" *ngIf=\"botones\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n <!-- Toolbar superior (solo tab 1) -->\r\n <div *ngIf=\"tab == 1\" class=\"doc-toolbar\">\r\n <div class=\"doc-toolbar-left\" *ngIf=\"aplFiltro\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n type=\"text\"\r\n pInputText\r\n placeholder=\"Buscar carpeta...\"\r\n [(ngModel)]=\"valorFiltro\"\r\n (keyup)=\"filtrarDocumentos()\"\r\n class=\"w-full\"\r\n [disabled]=\"documentService.loadingData\"\r\n />\r\n </p-iconfield>\r\n </div>\r\n\r\n <div class=\"doc-toolbar-right\" *ngIf=\"documentTypes.length > 0\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar documento\"\r\n icon=\"pi pi-plus\"\r\n class=\"p-button-sm\"\r\n (click)=\"openGenerateDialog()\"\r\n [disabled]=\"enProceso || !canGenerate\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n <p-confirmDialog\r\n header=\"Atencion\"\r\n icon=\"pi pi-exclamation-triangle\"\r\n ></p-confirmDialog>\r\n <div class=\"sf-doc-scrollable\" *ngIf=\"tab == 1\">\r\n <div class=\"folder-list\">\r\n @if (!documentService.loadingData) {\r\n <ng-container *ngFor=\"let carpeta of filesFilter\">\r\n <div class=\"folder-list\">\r\n <div\r\n class=\"folder-item\"\r\n *ngFor=\"let item of carpeta.children\"\r\n (click)=\"VerDetalleTab(item)\"\r\n >\r\n <i\r\n class=\"pi pi-folder folder-item__icon\"\r\n [ngStyle]=\"{\r\n color:\r\n item.children?.length > 0 || item.fileCount > 0\r\n ? 'green'\r\n : 'red',\r\n }\"\r\n ></i>\r\n <div class=\"folder-item__info\">\r\n <span class=\"folder-item__name\">{{ item.label }}</span>\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"item.children?.length > 0\"\r\n >{{ item.children.length }}\r\n {{\r\n item.children.length === 1 ? \"archivo\" : \"archivos\"\r\n }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n item.fileCount\r\n \"\r\n >{{ item.fileCount }}\r\n {{ item.fileCount === 1 ? \"archivo\" : \"archivos\" }}</span\r\n >\r\n <span\r\n class=\"folder-item__count\"\r\n *ngIf=\"\r\n (!item.children || item.children.length === 0) &&\r\n !item.fileCount\r\n \"\r\n >0 archivos</span\r\n >\r\n </div>\r\n <i class=\"pi pi-chevron-right folder-item__arrow\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n } @else {\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n <div class=\"folder-item\">\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mr-2\" />\r\n <div class=\"self-center\" style=\"flex: 1\">\r\n <p-skeleton width=\"100%\" styleClass=\"mb-2\" />\r\n <p-skeleton width=\"75%\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container *ngIf=\"botones\">\r\n <div class=\"buttons\">\r\n <div class=\"div-table-col50\" style=\"text-align: center\" *ngIf=\"bAtras\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Atras\"\r\n icon=\"pi pi-arrow-left\"\r\n (click)=\"next(-1)\"\r\n ></button>\r\n </div>\r\n <div\r\n class=\"div-table-col50\"\r\n style=\"text-align: center\"\r\n *ngIf=\"!bFinal && botones\"\r\n >\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Siguiente\"\r\n icon=\"pi pi-arrow-right\"\r\n (click)=\"next(1)\"\r\n ></button>\r\n </div>\r\n <div class=\"div-table-col50\" *ngIf=\"bFinal\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Finalizar\"\r\n icon=\"pi pi-home\"\r\n (click)=\"next(0)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"sf-doc-scrollable sf-doc-scrollable--files\" *ngIf=\"tab == 2\">\r\n <lib-folder-files\r\n [carpeta]=\"carpetaSeleccionada\"\r\n [isMobile]=\"isMobile\"\r\n [idKatios]=\"idKatios\"\r\n [server]=\"server\"\r\n [subestado]=\"subestado\"\r\n [requestData]=\"requestData\"\r\n [useBreadcrumb]=\"useBreadcrumb\"\r\n [usesApi]=\"usesApi\"\r\n [allowedUploadTypes]=\"allowedUploadTypes\"\r\n (onFileChange)=\"fileChange($event)\"\r\n (onCargarArchivo)=\"cargarArchivo($event)\"\r\n (onEliminarMasivo)=\"eliminarMasivo($event)\"\r\n (onBack)=\"goToTab('1')\"\r\n (viewDocument)=\"openVisorDoc($event)\"\r\n >\r\n </lib-folder-files>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #scanContent>\r\n <div class=\"div-table\">\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <h4>Escanear documentos</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n Archivos cargados: <h4>{{scanFileList.length}}</h4>\r\n </div>\r\n <div class=\"div-table-row\" style=\"text-align: center\">\r\n <label (click)=\"takePhotoClick()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">add_to_photos</mat-icon>\r\n </label>\r\n\r\n <label *ngIf=\"scanFileList.length != 0\" (click)=\"subirFotosScan()\" class=\"btn\">\r\n <mat-icon style=\"font-size: 2.5em; color:#0056b2\">share</mat-icon>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template> -->\r\n\r\n<p-dialog\r\n [(visible)]=\"displayView\"\r\n [header]=\"current_label.replace('#toolbar=0&navpanes=0&statusbar=0', '')\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '70vw' }\"\r\n appendTo=\"body\"\r\n>\r\n <div *ngIf=\"!canPreview()\" class=\"sf-doc-preview-fallback\">\r\n <i class=\"pi\" [ngClass]=\"previewFallbackIcon()\"></i>\r\n <p>La vista previa no está disponible para este tipo de archivo.</p>\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Abrir en una nueva ventana\"\r\n icon=\"pi pi-external-link\"\r\n (click)=\"openCurrentInNewWindow()\"\r\n ></button>\r\n </div>\r\n <ng-container *ngIf=\"canPreview()\">\r\n <embed\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '2'\"\r\n [src]=\"current_path | safe\"\r\n style=\"width: 100%; min-height: 600px\"\r\n />\r\n <iframe\r\n *ngIf=\"carpetaSeleccionada.TipoArchivo == '1'\"\r\n style=\"width: 100%; min-height: 600px\"\r\n [src]=\"current_path | safe\"\r\n ></iframe>\r\n </ng-container>\r\n</p-dialog>\r\n\r\n<p-dialog\r\n header=\"Generar documento\"\r\n [(visible)]=\"displayGenerate\"\r\n [modal]=\"true\"\r\n [closable]=\"true\"\r\n [style]=\"{ width: isMobile ? '95vw' : '520px' }\"\r\n>\r\n <div class=\"gen-form\">\r\n <!-- Tipo de documento -->\r\n <div class=\"gen-field\">\r\n <label class=\"gen-label\">Tipo de documento</label>\r\n <p-dropdown\r\n class=\"gen-control\"\r\n [options]=\"documentTypes\"\r\n optionLabel=\"label\"\r\n optionValue=\"code\"\r\n [(ngModel)]=\"selectedDocType\"\r\n placeholder=\"Seleccione un tipo\"\r\n appendTo=\"body\"\r\n (onChange)=\"onDocTypeChange()\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n\r\n <!-- Parámetros dinámicos -->\r\n <div class=\"gen-section\" *ngIf=\"dynamicParams.length\">\r\n <div class=\"gen-field\" *ngFor=\"let p of dynamicParams\">\r\n <label class=\"gen-label\">\r\n {{ p.description }}\r\n <span class=\"gen-required\" *ngIf=\"p.required\">*</span>\r\n </label>\r\n\r\n <!-- Date -->\r\n <p-datepicker\r\n *ngIf=\"(p.type || '').toLowerCase() === 'date'\"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n [showIcon]=\"true\"\r\n appendTo=\"body\"\r\n dateFormat=\"yy-mm-dd\"\r\n >\r\n </p-datepicker>\r\n\r\n <!-- String -->\r\n <input\r\n *ngIf=\"\r\n (p.type || '').toLowerCase() === 'nvarchar' ||\r\n (p.type || '').toLowerCase() === 'string'\r\n \"\r\n pInputText\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n placeholder=\"Ingrese un valor\"\r\n />\r\n\r\n <!-- Number -->\r\n <p-inputNumber\r\n *ngIf=\"\r\n ['int', 'decimal', 'number'].includes((p.type || '').toLowerCase())\r\n \"\r\n class=\"gen-control\"\r\n [(ngModel)]=\"dynamicValues[p.name]\"\r\n >\r\n </p-inputNumber>\r\n\r\n <!-- Boolean -->\r\n <div\r\n class=\"gen-control gen-checkbox\"\r\n *ngIf=\"\r\n ['boolean', 'bit', 'bool'].includes((p.type || '').toLowerCase())\r\n \"\r\n >\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"dynamicValues[p.name]\">\r\n </p-checkbox>\r\n <span class=\"gen-checkbox-label\">Sí</span>\r\n </div>\r\n\r\n <!-- helper opcional -->\r\n <small class=\"gen-help\" *ngIf=\"p.help\">{{ p.help }}</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Cancelar\"\r\n class=\"p-button-text\"\r\n (click)=\"displayGenerate = false\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Generar\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"generateDocument()\"\r\n [disabled]=\"!selectedDocType || enProceso\"\r\n ></button>\r\n </ng-template>\r\n</p-dialog>\r\n","/*\r\n * Public API Surface of sf-documents\r\n */\r\n\r\nexport * from './lib/sf-documents.service';\r\nexport * from './lib/sf-documents.component';\r\nexport * from './lib/gateways/document.port';\r\nexport * from './lib/components/folder-files/folder-files.component';\r\nexport * from './lib/models/navigation-state.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i3.SfDocumentsService","i4","i5","i6","i7","i10"],"mappings":"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"}
@@ -18,6 +18,7 @@ export declare class FolderFilesComponent implements OnChanges, OnDestroy {
18
18
  onCargarArchivo: EventEmitter<any>;
19
19
  onEliminarMasivo: EventEmitter<any[]>;
20
20
  onBack: EventEmitter<void>;
21
+ viewDocument: EventEmitter<any>;
21
22
  items: any[];
22
23
  page: number;
23
24
  pageSize: number;
@@ -61,5 +62,5 @@ export declare class FolderFilesComponent implements OnChanges, OnDestroy {
61
62
  toggleSelectAll(): void;
62
63
  onPageSizeChange(): void;
63
64
  static ɵfac: i0.ɵɵFactoryDeclaration<FolderFilesComponent, never>;
64
- static ɵcmp: i0.ɵɵComponentDeclaration<FolderFilesComponent, "lib-folder-files", never, { "carpeta": { "alias": "carpeta"; "required": false; }; "isMobile": { "alias": "isMobile"; "required": false; }; "idKatios": { "alias": "idKatios"; "required": false; }; "server": { "alias": "server"; "required": false; }; "subestado": { "alias": "subestado"; "required": false; }; "requestData": { "alias": "requestData"; "required": false; }; "useBreadcrumb": { "alias": "useBreadcrumb"; "required": false; }; "usesApi": { "alias": "usesApi"; "required": false; }; "allowedUploadTypes": { "alias": "allowedUploadTypes"; "required": false; }; }, { "onFileChange": "onFileChange"; "onCargarArchivo": "onCargarArchivo"; "onEliminarMasivo": "onEliminarMasivo"; "onBack": "onBack"; }, never, never, true, never>;
65
+ static ɵcmp: i0.ɵɵComponentDeclaration<FolderFilesComponent, "lib-folder-files", never, { "carpeta": { "alias": "carpeta"; "required": false; }; "isMobile": { "alias": "isMobile"; "required": false; }; "idKatios": { "alias": "idKatios"; "required": false; }; "server": { "alias": "server"; "required": false; }; "subestado": { "alias": "subestado"; "required": false; }; "requestData": { "alias": "requestData"; "required": false; }; "useBreadcrumb": { "alias": "useBreadcrumb"; "required": false; }; "usesApi": { "alias": "usesApi"; "required": false; }; "allowedUploadTypes": { "alias": "allowedUploadTypes"; "required": false; }; }, { "onFileChange": "onFileChange"; "onCargarArchivo": "onCargarArchivo"; "onEliminarMasivo": "onEliminarMasivo"; "onBack": "onBack"; "viewDocument": "viewDocument"; }, never, never, true, never>;
65
66
  }
@@ -65,6 +65,9 @@ export declare class SfDocumentsComponent implements OnChanges {
65
65
  dynamicValues: Record<string, any>;
66
66
  selectedDocType: string | null;
67
67
  selectedRange: string | null;
68
+ current_path: string;
69
+ current_label: string;
70
+ displayView: boolean;
68
71
  constructor(sanitizer: DomSanitizer, snackBar: MessageService, appRef: ApplicationRef, confirmationService: ConfirmationService, documentService: SfDocumentsService);
69
72
  ngOnChanges(changes: SimpleChanges): void;
70
73
  cargarParametros(tipo: string): void;
@@ -98,6 +101,10 @@ export declare class SfDocumentsComponent implements OnChanges {
98
101
  generateDocument(): void;
99
102
  private toYYYYMMDD;
100
103
  onDocTypeChange(): void;
104
+ openVisorDoc(item: any): void;
105
+ openCurrentInNewWindow(path?: string): void;
106
+ canPreview(label?: string, path?: string): boolean;
107
+ previewFallbackIcon(label?: string, path?: string): string;
101
108
  static ɵfac: i0.ɵɵFactoryDeclaration<SfDocumentsComponent, never>;
102
109
  static ɵcmp: i0.ɵɵComponentDeclaration<SfDocumentsComponent, "app-sf-documents", never, { "accion": { "alias": "accion"; "required": false; }; "entidad": { "alias": "entidad"; "required": false; }; "ndoc": { "alias": "ndoc"; "required": false; }; "tdoc": { "alias": "tdoc"; "required": false; }; "tipo": { "alias": "tipo"; "required": false; }; "Kasociada": { "alias": "Kasociada"; "required": false; }; "Producto": { "alias": "Producto"; "required": false; }; "Solicitud": { "alias": "Solicitud"; "required": false; }; "oSession": { "alias": "oSession"; "required": false; }; "perfilDocumentos": { "alias": "perfilDocumentos"; "required": false; }; "subestado": { "alias": "subestado"; "required": false; }; "isMobile": { "alias": "isMobile"; "required": false; }; "bAtras": { "alias": "bAtras"; "required": false; }; "bFinal": { "alias": "bFinal"; "required": false; }; "botones": { "alias": "botones"; "required": false; }; "aplFiltro": { "alias": "aplFiltro"; "required": false; }; "nmco": { "alias": "nmco"; "required": false; }; "useBreadcrumb": { "alias": "useBreadcrumb"; "required": false; }; "usesApi": { "alias": "usesApi"; "required": false; }; "allowedUploadTypes": { "alias": "allowedUploadTypes"; "required": false; }; "server": { "alias": "server"; "required": false; }; "idKatios": { "alias": "idKatios"; "required": false; }; }, { "nextTabPapa": "nextTabPapa"; "onNavigationChange": "onNavigationChange"; }, never, never, true, never>;
103
110
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sf-documents",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^19.2.0",
6
6
  "@angular/common": "^19.2.0",