{"version":3,"file":"638.17213ff60b950baa.js","mappings":"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","names":["UploadMultipleFilesService","constructor","modalService","this","filesList","currentFilesUploaded","filesGroups","fileSizeMegaBytesLessThan","requestFilesSizeMegaBytesLessThan","fileSizeMegaBytesLessThanMsg","requestFilesSizeMegaBytesLessThanMsg","invalidRequestFiles","init","params","currentFilesUpload","validateFilesSizeMegaBytes","files","invalidFiles","filter","x","bytesToMegaBytes","file","object","size","reverse","currentFile","length","slice","currentFileSize","getFilesSizeMegaBytes1X1","isfileSizeMegaBytesLessThan","every","isRequestFilesSizeMegaBytesLessThan","invalid","getFileSizeMegaBytesLessThan","getRequestFilesSizeMegaBytesLessThan","filesSizeValidationsAlert","validations","currentFileArray","currentSize","errorMsg","showModalGeneral","title","ModalTitles","body","type","ModalType","bytes","base64IncrementNumber","roundSizeValue","sizeValue","digits","sizeStr","toString","includes","NotationComp","split","parseFloat","toFixed","parseInt","decimal","fixedDigits","getFirstNumberGreaterThanZeroIndex","decimalsList","firstNumberGreaterThanZeroIndex","findIndex","sizeMegaBytes","sizeBytes","sizeMb","isNaN","multiplicator","Math","pow","test","round","getFileSizeMegaBytes","sizeMbs","getSizeMegaBytes","groupFilesByReferenceName","forEach","index","fileGroup","name","push","newFileGroup","getFilesAll","concat","getFilesByReference","reference","filesSizeBytes","filesSizeMegaBytes","getFilesSizesBytesByReference","getFilesSizesMegaBytesByReference","getFilesCountByReference","static","_angular_core__WEBPACK_IMPORTED_MODULE_2__","factory","DocumentsPreviewModalComponent","bsModalRef","hide","getFilePreviewURL","URL","createObjectURL","core","selectors","i0","ctx","ImageCapturerComponent","stream","newStream","_stream","startCamara","_platform","EventEmitter","Subject","ngOnInit","updateTransform","video","player","nativeElement","srcObject","play","onCaptureImage","canvas","context","getContext","width","clientWidth","height","clientHeight","drawImage","imageDataUrl","toDataURL","stopVideo","isCapturing","pause","getVideoTracks","stop","onChangeZoom","event","scale","target","value","scalePercentage","minScale","maxScale","onChangeRotation","rotation","rotationPercentage","minRotation","maxRotation","transform","rotate","saveImage","base64","imageCropper","crop","captureImage","next","close","navigator","mediaDevices","getUserMedia","then","catch","console","error","ngOnDestroy","PLATFORM_ID","ImageCropperComponent","ImgBufferPipe","pure","UniFileInputComponent","Unsubscriber","setFirstFile","firstFile","some","f","setNewFile","newType","_type","multiple","required","validators","ngControl","control","validator","_required","hasOwnProperty","platform","fileHandlerService","_lightbox","bsModalService","uploadMultipleFilesService","super","valueAccessor","ngOnChanges","changes","_firstFile","currentValue","onFileDropped","fileLimit","fileEntry","isFile","checkFileSize","service","lessThan4MB","lessThan20MB","lessThan25MB","lessThan125MB","isFiduciary","isFiduciaryRequest","extention","pop","getBase64ArrayFromBuffer","subscribe","array","newFile","fileName","buffer","stripBase64StuffFromImage","validateRequestFilesSize","isImage","checkIfImage","requestFiles","extension","removeFile","clearCurrentFiles","openDocumentPreviewModal","show","ignoreBackdropClick","class","initialState","onClickUploadFile","openFileSelector","isPlatformBrowser","userAgent","onKeyPressEmptyFunc","capturerModalRef","anotherSubscription","content","pipe","first","blob","b64toBlob","globalThis","File","onHidden","onClickFile","open","src","addBase64StuffToImage","caption","thumb","writeValue","getFileFromURL","setFile","registerOnChange","fn","asObservable","registerOnTouched","onTouchedCallback","setDisabledState","isDisabled","disabled","getFilesSizeMegaBytes1x1","getFilesRoundSizesMegaBytesByReference","SetCurrentFilesListEvent","SetcurrentFilesUploadAllEvent"],"sourceRoot":"webpack:///","sources":["./src/app/Fiduciaria/RequestCreation/Services/upload-multiple-files.service.ts","./src/app/Fiduciaria/RequestCreation/Components/Documents/documents-preview-modal/documents-preview-modal.component.ts","./src/app/Fiduciaria/RequestCreation/Components/Documents/documents-preview-modal/documents-preview-modal.component.html","./src/ui/forms/file-input/image-capturer/image-capturer.component.html","./src/ui/forms/file-input/image-capturer/image-capturer.component.ts","./src/ui/forms/file-input/img-buffer.pipe.ts","./src/ui/forms/file-input/file-input.component.html","./src/ui/forms/file-input/file-input.component.ts","./src/shared/Utils/device.util.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\nimport { ModalTitles, ModalType } from \"@shared/Constantes/modal.constantes\";\nimport { File } from \"@shared/Entities/General/file.entity\";\nimport { ModalService } from \"@shared/Services/modal.service\";\n\nimport { DocumentFile } from \"../Types/document-file\";\nimport { DocumentFileGroup } from \"../Types/document-file-group\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class UploadMultipleFilesService {\n public filesList: DocumentFile[];\n public currentFilesUploaded: DocumentFile[];\n public filesGroups: DocumentFileGroup[];\n private fileSizeMegaBytesLessThan: number;\n private requestFilesSizeMegaBytesLessThan: number;\n public fileSizeMegaBytesLessThanMsg: string;\n public requestFilesSizeMegaBytesLessThanMsg: string;\n public invalidRequestFiles: boolean;\n public base64IncrementNumber = 1.4;\n\n constructor(private modalService: ModalService) {\n this.filesList = [];\n this.currentFilesUploaded = [];\n this.filesGroups = [];\n this.fileSizeMegaBytesLessThan = 5;\n this.requestFilesSizeMegaBytesLessThan = 25;\n\n this.fileSizeMegaBytesLessThanMsg = `El tamaño máximo permitido por documento es de ${this.fileSizeMegaBytesLessThan} MB. Por favor reduce el \n tamaño del archivo o elige otro`;\n\n this.requestFilesSizeMegaBytesLessThanMsg = `El tamaño máximo total permitido es ${this.requestFilesSizeMegaBytesLessThan} MB. Por favor reduce\n el tamaño de los archivos o escoge otros`;\n\n this.invalidRequestFiles = false;\n }\n\n public init(params: { filesList: DocumentFile[]; currentFilesUpload: DocumentFile[] }): void {\n const { filesList, currentFilesUpload } = params;\n this.filesList = filesList ?? [];\n this.currentFilesUploaded = currentFilesUpload ?? [];\n }\n\n public validateFilesSizeMegaBytes(\n files: DocumentFile[]\n ): [\n size: number,\n invalid: boolean,\n fileSizeMegaBytesLessThan: boolean,\n requestFilesSizeMegaBytesLessThan: boolean,\n currentFileSize: number,\n files: DocumentFile[],\n currentFile: DocumentFile\n ] {\n this.invalidRequestFiles = false;\n\n const invalidFiles: DocumentFile[] = files\n .filter((x) => this.bytesToMegaBytes(x?.file?.object?.size ?? 0) > this.fileSizeMegaBytesLessThan)\n .reverse();\n\n let currentFile: DocumentFile[] = files?.length ? files.slice(-1) : [];\n currentFile = invalidFiles?.length ? invalidFiles.slice(-1) : currentFile;\n const currentFileSize: number = this.getFilesSizeMegaBytes1X1(currentFile, 3);\n\n const isfileSizeMegaBytesLessThan: boolean = files.every(\n (x) => this.bytesToMegaBytes(x?.file?.object?.size ?? 0) <= this.fileSizeMegaBytesLessThan\n );\n\n const size: number = this.getFilesSizeMegaBytes1X1(files, 3);\n const isRequestFilesSizeMegaBytesLessThan: boolean = size <= this.requestFilesSizeMegaBytesLessThan;\n const invalid: boolean = !isfileSizeMegaBytesLessThan || !isRequestFilesSizeMegaBytesLessThan;\n this.invalidRequestFiles = invalid;\n\n const result: [number, boolean, boolean, boolean, number, DocumentFile[], DocumentFile] = [\n size,\n invalid,\n isfileSizeMegaBytesLessThan,\n isRequestFilesSizeMegaBytesLessThan,\n currentFileSize,\n files,\n currentFile.length ? currentFile[0] : null,\n ];\n\n return result;\n }\n\n public get getFileSizeMegaBytesLessThan(): number {\n return this.fileSizeMegaBytesLessThan;\n }\n\n public get getRequestFilesSizeMegaBytesLessThan(): number {\n return this.requestFilesSizeMegaBytesLessThan;\n }\n\n public filesSizeValidationsAlert(\n validations: [\n size: number,\n invalid: boolean,\n fileSizeMegaBytesLessThan: boolean,\n requestFilesSizeMegaBytesLessThan: boolean,\n currentFileSize: number,\n files: DocumentFile[],\n currentFile: DocumentFile\n ]\n ): void {\n const [, invalid, fileSizeMegaBytesLessThan, requestFilesSizeMegaBytesLessThan, , files, currentFile] = validations;\n\n if (!invalid) return;\n\n let currentFileArray: DocumentFile[] = currentFile ? [currentFile] : [];\n if (!requestFilesSizeMegaBytesLessThan) {\n currentFileArray = files\n .filter((x) => this.bytesToMegaBytes(x?.file?.object?.size ?? 0) > this.requestFilesSizeMegaBytesLessThan)\n .reverse();\n currentFileArray = currentFileArray.length ? currentFileArray.slice(-1) : [];\n }\n\n let currentSize: number = 0;\n let errorMsg: string = `Error con el tamaño de los archivos`;\n\n if (!fileSizeMegaBytesLessThan) errorMsg = this.fileSizeMegaBytesLessThanMsg;\n if (!requestFilesSizeMegaBytesLessThan) errorMsg = this.requestFilesSizeMegaBytesLessThanMsg;\n if (!fileSizeMegaBytesLessThan || !requestFilesSizeMegaBytesLessThan)\n currentSize = this.getFilesSizeMegaBytes1X1(currentFileArray, 3);\n\n if (currentSize > 0) errorMsg += `

Tamaño actual: ${currentSize} MBS`;\n\n this.modalService.showModalGeneral({\n title: ModalTitles.warning,\n body: errorMsg,\n type: ModalType.warning,\n });\n }\n\n public bytesToMegaBytes(bytes: number): number {\n const sizeMb = bytes / (1024 * 1024);\n return sizeMb * this.base64IncrementNumber;\n }\n\n public roundSizeValue(sizeValue: number, digits: number = 0): number {\n const size = sizeValue ?? 0;\n let sizeStr: string | null = size?.toString() ?? null;\n const isScientificNotation: boolean = sizeStr?.includes(\"e-\") ?? false;\n\n if (isScientificNotation) {\n const NotationComp: string[] = sizeStr?.split(\"e-\") ?? [];\n sizeStr = NotationComp[1] ? parseFloat(sizeStr).toFixed(parseInt(NotationComp[1])) : null;\n }\n\n const decimal: number = parseFloat(sizeStr ?? \"0\");\n const [, , fixedDigits]: [number, string[], number | null, number] = this.getFirstNumberGreaterThanZeroIndex(decimal);\n\n digits = fixedDigits ?? digits;\n const sizeRounded: number = parseFloat(size.toFixed(digits));\n\n return sizeRounded;\n }\n\n private getFirstNumberGreaterThanZeroIndex(decimal: number): [number, string[], number | null, number] {\n const sizeComp: string[] = decimal?.toString()?.split(\".\") ?? [];\n const decimals: string | null = sizeComp[1] ?? null;\n const decimalsList: string[] = decimals?.split(\"\") ?? [];\n const firstNumberGreaterThanZeroIndex: number = decimalsList.findIndex((x) => x !== \"0\");\n const indexIncrement: number = 1;\n const fixedDigits: number | null =\n firstNumberGreaterThanZeroIndex >= 0 ? firstNumberGreaterThanZeroIndex + indexIncrement : null;\n\n return [firstNumberGreaterThanZeroIndex, decimalsList, fixedDigits, indexIncrement];\n }\n\n private sizeMegaBytes(sizeBytes: number, digits: number): number {\n let sizeMb: number = this.bytesToMegaBytes(sizeBytes);\n\n const [, , fixedDigits]: [number, string[], number | null, number] = this.getFirstNumberGreaterThanZeroIndex(sizeMb);\n\n if (!digits || isNaN(digits)) digits = 0;\n digits = fixedDigits !== null && fixedDigits > digits ? fixedDigits : digits;\n\n const multiplicator: number = Math.pow(10, digits);\n sizeMb = parseFloat((sizeMb * multiplicator).toFixed(11));\n const test: number = Math.round(sizeMb) / multiplicator;\n\n return this.roundSizeValue(test, digits);\n }\n\n public getFileSizeMegaBytes(file: File, digits: number): number {\n return this.sizeMegaBytes(file.object.size, digits);\n }\n\n public getFilesSizeMegaBytes1X1(files: DocumentFile[], digits: number): number {\n let sizeMbs: number = 0;\n\n for (const file of files) {\n sizeMbs += this.sizeMegaBytes(file?.file?.object?.size ?? 0, digits);\n }\n\n return this.roundSizeValue(sizeMbs);\n }\n\n public getSizeMegaBytes(bytes: number, digits: number): number {\n return this.sizeMegaBytes(bytes, digits);\n }\n\n public groupFilesByReferenceName(files: DocumentFile[]): DocumentFileGroup[] {\n const filesGroups: DocumentFileGroup[] = [];\n\n files.forEach((file) => {\n const index = filesGroups.findIndex((fileGroup) => fileGroup.name === file.name);\n if (index >= 0) {\n filesGroups[index].files.push(file);\n } else {\n const newFileGroup: DocumentFileGroup = { name: file.name, files: [] };\n newFileGroup.files.push(file);\n filesGroups.push(newFileGroup);\n }\n });\n\n return filesGroups;\n }\n\n public getFilesAll(): DocumentFile[] {\n return this.filesList.concat(this.currentFilesUploaded);\n }\n\n public getFilesByReference(reference: string): DocumentFile[] {\n return this.getFilesAll().filter((x) => x.name === reference);\n }\n\n private filesSizeBytes(files: DocumentFile[]): number {\n let sizeBytes: number = 0;\n\n files.forEach((file) => {\n sizeBytes += file?.file?.object?.size ?? 0;\n });\n\n return sizeBytes;\n }\n\n private filesSizeMegaBytes(files: DocumentFile[]): number {\n return this.bytesToMegaBytes(this.filesSizeBytes(files));\n }\n\n public getFilesSizesBytesByReference(reference: string): number {\n const files: DocumentFile[] = this.getFilesAll().filter((x) => x.name === reference);\n return this.filesSizeBytes(files);\n }\n\n public getFilesSizesMegaBytesByReference(reference: string): number {\n const files: DocumentFile[] = this.getFilesAll().filter((x) => x.name === reference);\n return this.filesSizeMegaBytes(files);\n }\n\n public getFilesCountByReference(reference: string): number {\n return this.getFilesByReference(reference).length;\n }\n}\n","import { Component } from \"@angular/core\";\nimport { BsModalRef } from \"ngx-bootstrap/modal\";\n\n@Component({\n selector: \"app-documents-preview-modal\",\n templateUrl: \"./documents-preview-modal.component.html\",\n styleUrls: [\"./documents-preview-modal.component.scss\"],\n})\nexport class DocumentsPreviewModalComponent {\n public file: File;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n private getFilePreviewURL(file: File): string {\n return URL.createObjectURL(file);\n }\n\n public closeModal = (): void => this.bsModalRef.hide();\n}\n","
\n

\n Previzualizar Documento: {{ file.name }}\n

\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n","
\n

Carga de foto

\n\n \n
\n
\n \n\n \n\n
\n \n \n\n
\n
\n
\n
\n
\n {{ this.scale }}\n
\n \n
\n
\n\n
\n
\n
\n {{ this.rotation }}\n
\n \n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n \n \n
\n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n ViewChild,\n} from \"@angular/core\";\nimport { BsModalRef } from \"ngx-bootstrap/modal\";\nimport { ImageCropperComponent, ImageTransform } from \"ngx-image-cropper\";\nimport { Subject } from \"rxjs\";\n\n@Component({\n selector: \"app-image-capturer\",\n templateUrl: \"./image-capturer.component.html\",\n styleUrls: [\"./image-capturer.component.scss\"],\n})\nexport class ImageCapturerComponent implements OnInit, OnDestroy {\n @ViewChild(\"player\", { static: true }) public player: ElementRef;\n @ViewChild(\"canvas\", { static: true }) public canvas: ElementRef;\n @ViewChild(ImageCropperComponent) public imageCropper: ImageCropperComponent;\n\n @Output() public openCapturer = new EventEmitter();\n\n private _stream: MediaStream;\n @Input() public set stream(newStream: MediaStream) {\n this._stream = newStream;\n this.startCamara();\n }\n\n public get stream(): MediaStream {\n return this._stream;\n }\n\n public captureImage = new Subject();\n\n public isCapturing: boolean = true;\n public imageDataUrl: string;\n\n public scale: number = 1;\n public minScale: number = 1;\n public maxScale: number = 3;\n public scalePercentage: number = 1;\n\n public rotation: number = 0;\n public minRotation: number = -50;\n public maxRotation: number = 50;\n public rotationPercentage: number = 50;\n\n public transform: ImageTransform;\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(@Inject(PLATFORM_ID) private _platform: Object, private bsModalRef: BsModalRef) {}\n\n public ngOnInit(): void {\n this.updateTransform();\n this.startCamara();\n }\n\n public startCamara(): void {\n const video = this.player.nativeElement;\n video.srcObject = this.stream;\n video.play();\n }\n\n public onCaptureImage(): void {\n const canvas = this.canvas.nativeElement;\n const player = this.player.nativeElement;\n const context = canvas.getContext(\"2d\");\n\n canvas.width = player.clientWidth / 1.5;\n canvas.height = player.clientHeight / 1.5;\n context.drawImage(player, 0, 0, canvas.width, canvas.height);\n this.imageDataUrl = canvas.toDataURL();\n\n this.stopVideo();\n }\n\n public stopVideo(): void {\n this.isCapturing = false;\n const player = this.player.nativeElement;\n if (player) {\n player.pause();\n (player.srcObject as MediaStream)?.getVideoTracks()[0].stop();\n player.srcObject = null;\n }\n }\n\n public onChangeZoom(event: Event): void {\n this.scale = +(event.target as HTMLInputElement).value;\n this.scalePercentage = ((this.scale - this.minScale) / (this.maxScale - this.minScale)) * 100;\n this.updateTransform();\n }\n\n public onChangeRotation(event: Event): void {\n this.rotation = +(event.target as HTMLInputElement).value;\n this.rotationPercentage = ((this.rotation - this.minRotation) / (this.maxRotation - this.minRotation)) * 100;\n this.updateTransform();\n }\n\n public updateTransform(): void {\n this.transform = { scale: this.scale, rotate: this.rotation };\n }\n\n public saveImage(): void {\n const { base64 } = this.imageCropper.crop();\n this.captureImage.next(base64);\n }\n\n public close(): void {\n if (this.isCapturing) {\n this.bsModalRef.hide();\n } else {\n this.isCapturing = true;\n\n navigator.mediaDevices\n .getUserMedia({ video: true })\n .then((stream) => {\n this.stream = stream;\n this.startCamara();\n })\n .catch(console.error);\n }\n }\n\n public ngOnDestroy(): void {\n this.stopVideo();\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"imgBuffer\",\n})\nexport class ImgBufferPipe implements PipeTransform {\n public transform(value: string): string {\n if (value) {\n return \"data:image/jpg;base64,\" + value;\n } else return \"\";\n }\n}\n","
\n
\n
\n
\n \n \n
{{ placeHolder }} *
\n
\n \n  \n \n
\n
\n \n
\n\n
\n \n \n

\n {{ reference }} \n {{ getFilesCountByReference() }}\n

\n
\n
\n \n \"pict-icon-svg\"\n \n \n \"files-icon-svg\"\n \n {{ file.name }}\n
\n
\n
\n \n
\n\n \n  \n \n
\n
\n\n \n
\n \n \n Ver detalles\n \n  \n {{ getFilesSizeMegaBytes1x1(getFilesByReference()) }} mbs \n \n \n
\n Nombre: {{ otherFile.file?.name }}\n Tamaño: {{ GetFileSizeMegaBytes(otherFile.file, 3) }} mbs\n
\n
\n
\n
\n
\n\n \n
\n
\n {{ file.name }}\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n \n
\n
\n \n \n \n
\n\n
\n \n \n
\n
\n
\n\n \n
\n
\n
\n","import { isPlatformBrowser } from \"@angular/common\";\nimport { Component, Inject, Input, PLATFORM_ID, Self, TemplateRef, SimpleChanges, OnChanges } from \"@angular/core\";\nimport { AbstractControl, ControlValueAccessor, NgControl } from \"@angular/forms\";\nimport { UploadMultipleFilesService } from \"@fiduciaria/RequestCreation/Services/upload-multiple-files.service\";\nimport { DocumentFile } from \"@fiduciaria/RequestCreation/Types/document-file\";\nimport { BsModalService, BsModalRef } from \"ngx-bootstrap/modal\";\nimport { NgxFileDropEntry, FileSystemFileEntry } from \"ngx-file-drop\";\nimport { Lightbox } from \"ngx-lightbox\";\nimport { Subject } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { Unsubscriber } from \"@shared/Components/Unsubscriber/unsubscriber.component\";\nimport { ModalTitles, ModalType } from \"@shared/Constantes/modal.constantes\";\nimport { File } from \"@shared/Entities/General/file.entity\";\nimport { FileHandlerService } from \"@shared/Services/fileHandler.service\";\nimport { ModalService } from \"@shared/Services/modal.service\";\nimport { isMobile } from \"@shared/Utils/device.util\";\n\nimport { DocumentsPreviewModalComponent } from \"../../../app/Fiduciaria/RequestCreation/Components/Documents/documents-preview-modal/documents-preview-modal.component\";\n\nimport { InputType } from \"./file-input.type\";\nimport { ImageCapturerComponent } from \"./image-capturer/image-capturer.component\";\n\n//TODO: MAKE THIS COMPONENT A VALID UNIFORMFIELDCONTROL\n@Component({\n selector: \"uni-file-input\",\n templateUrl: \"./file-input.component.html\",\n styleUrls: [\"./file-input.component.scss\"],\n})\nexport class UniFileInputComponent extends Unsubscriber implements ControlValueAccessor, OnChanges {\n @Input() public accept: string;\n @Input() public reference: string;\n @Input() public placeHolder: string;\n @Input() public popover?: string | TemplateRef;\n @Input() public captureImage: boolean;\n @Input() public fileExample?: TemplateRef;\n @Input() public fileLimit?: number;\n @Input() public isFiduciary?: boolean;\n @Input() public isFiduciaryRequest?: boolean;\n\n @Input() public fileName?: string;\n @Input() public showFileDetails: boolean;\n @Input() public FileNameToName: (file: File) => string;\n @Input() public FileNameToExtension: (file: File) => string;\n @Input() public GetFileSizeMegaBytes: (file: File, digits: number) => number;\n @Input() public OpenUploadDocumentsModal: (reference: string) => void;\n @Input() public SetCurrentFilesListEvent: (files: DocumentFile[]) => void;\n @Input() public SetcurrentFilesUploadAllEvent: (files: DocumentFile[]) => void;\n @Input() private requestFiles?: DocumentFile[];\n @Input() private _firstFile?: DocumentFile = null;\n\n private setFirstFile(firstFile: DocumentFile): void {\n if (firstFile && firstFile.name === this.reference && firstFile?.file) {\n const exists: boolean = this.files.some((f) => f.name === firstFile.name);\n if (!exists) this.setNewFile(firstFile.file.object, firstFile.file.name);\n }\n }\n\n public multiple: boolean = false;\n\n @Input() public set type(newType: InputType) {\n this._type = newType;\n this.multiple = newType === \"list\";\n }\n public get type(): InputType {\n return this._type;\n }\n private _type: InputType = \"inline\";\n\n public files: File[] = [];\n public disabled: boolean;\n public file = new Subject();\n\n public isImage: boolean;\n\n public isCapturing: boolean = false;\n\n @Input()\n public get required(): boolean {\n const validators = this.ngControl?.control?.validator;\n return this._required ?? validators ? validators({} as AbstractControl)?.hasOwnProperty(\"required\") : false;\n }\n public set required(value: boolean) {\n this._required = value;\n }\n protected _required: boolean | undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedCallback = (): void => {};\n\n constructor(\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) private platform: Object,\n private fileHandlerService: FileHandlerService,\n private _lightbox: Lightbox,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n private bsModalRef: BsModalRef,\n private uploadMultipleFilesService: UploadMultipleFilesService,\n @Self() public ngControl: NgControl\n ) {\n super();\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?._firstFile) {\n const firstFile: DocumentFile = changes?._firstFile?.currentValue as DocumentFile;\n this.setFirstFile(firstFile);\n }\n }\n\n public onFileDropped(files: NgxFileDropEntry[]): void {\n if (this.fileLimit && this.files.length > this.fileLimit) {\n this.modalService.showModalGeneral({\n title: ModalTitles.warning,\n body: `Has superado el límite de ${this.fileLimit} archivos permitidos.`,\n type: ModalType.warning,\n });\n return;\n }\n\n if (!files[0]?.fileEntry?.isFile) return;\n\n const fileEntry: FileSystemFileEntry = files[0].fileEntry as FileSystemFileEntry;\n\n fileEntry.file((file) => {\n const size = this.bytesToMegaBytes(file.size);\n const [invalid, errorMsg] = this.checkFileSize(size);\n\n if (invalid) {\n this.modalService.showModalGeneral({\n type: ModalType.warning,\n title: ModalTitles.warning,\n body: `${errorMsg}.`,\n });\n return;\n }\n\n this.setNewFile(file, fileEntry.name);\n });\n }\n\n private checkFileSize(size: number): [invalid: boolean, errorMsg: string] {\n let errorMsg: string = \"\";\n let invalid: boolean;\n const service = this.uploadMultipleFilesService;\n const [lessThan4MB, lessThan20MB, lessThan25MB, lessThan125MB]: [boolean, boolean, boolean, boolean] = [\n size <= 4,\n size <= 20,\n size <= service.getFileSizeMegaBytesLessThan,\n size <= service.getRequestFilesSizeMegaBytesLessThan,\n ];\n\n if (this.isFiduciary && this.isFiduciaryRequest) {\n errorMsg = !lessThan125MB ? service.requestFilesSizeMegaBytesLessThanMsg : errorMsg;\n errorMsg = lessThan125MB && !lessThan25MB ? service.fileSizeMegaBytesLessThanMsg : errorMsg;\n invalid = !lessThan125MB || !lessThan25MB;\n\n errorMsg += `

Tamaño actual: ${service.roundSizeValue(size, 3)} MBS`;\n } else if (this.isFiduciary && !this.isFiduciaryRequest) {\n errorMsg = !lessThan20MB ? \"El archivo no puede superar los 20 MBS\" : errorMsg;\n invalid = !lessThan20MB;\n } else {\n errorMsg = lessThan4MB ? \"El archivo no puede superar los 4 MBS\" : errorMsg;\n invalid = !lessThan4MB;\n }\n\n return [invalid, errorMsg];\n }\n\n public setNewFile(file: globalThis.File, name: string): void {\n const extention = name.split(\".\").pop();\n this.fileHandlerService.getBase64ArrayFromBuffer(file).subscribe((array) => {\n const newFile: File = {\n object: file,\n name: this.fileName ? `${this.fileName}.${extention}` : name,\n buffer: this.fileHandlerService.stripBase64StuffFromImage(array),\n };\n\n let invalid: boolean = false;\n if (this.isFiduciary && this.isFiduciaryRequest) {\n invalid = this.validateRequestFilesSize(newFile);\n }\n\n if (!invalid) {\n this.isImage = this.checkIfImage(newFile);\n this.files = this.multiple ? [...this.files, newFile] : [newFile];\n this.file.next(this.multiple ? this.files : newFile);\n }\n });\n }\n\n private validateRequestFilesSize(file: File): boolean {\n const service: UploadMultipleFilesService = this.uploadMultipleFilesService;\n this.requestFiles = this.requestFiles ?? [];\n const documentfile: DocumentFile = { name: this.reference, file: file };\n\n const files = this.requestFiles.concat(documentfile);\n const validations = service.validateFilesSizeMegaBytes(files);\n\n service.filesSizeValidationsAlert(validations);\n\n return validations[1];\n }\n\n private checkIfImage(file: File): boolean {\n const extension = file.name.split(\".\").pop();\n const imageExtentions = [\"png\", \"jpg\", \"jpeg\", \"bmp\", \"avif\"];\n const isImage = file.object.type.includes(\"image\") && imageExtentions.includes(extension);\n return isImage && !file.object.type.includes(\"svg\");\n }\n\n private bytesToMegaBytes(bytes: number): number {\n return this.uploadMultipleFilesService.bytesToMegaBytes(bytes);\n }\n\n public removeFile(file: File): void {\n this.files = this.files.filter((currentFile) => currentFile !== file);\n this.file.next(this.multiple ? this.files : null);\n this.clearCurrentFiles();\n }\n\n private openDocumentPreviewModal(file: File): void {\n this.bsModalRef = this.bsModalService.show(DocumentsPreviewModalComponent, {\n ignoreBackdropClick: true,\n class: \"modal-lg\",\n initialState: { file } as Partial,\n });\n }\n\n public onClickUploadFile(openFileSelector: () => void): void {\n if (this.captureImage && isPlatformBrowser(this.platform) && \"mediaDevices\" in navigator && !isMobile()) {\n if (!this.isCapturing) {\n navigator.mediaDevices\n .getUserMedia({ video: true })\n .then((stream) => {\n this.onCaptureImage(stream);\n })\n .catch(openFileSelector);\n }\n this.isCapturing = true;\n } else {\n openFileSelector();\n }\n }\n\n private onKeyPressEmptyFunc(): void {\n return;\n }\n\n public onCaptureImage(stream: MediaStream): void {\n const capturerModalRef = this.bsModalService.show(ImageCapturerComponent, {\n class: \"modal-lg\",\n initialState: { stream },\n ignoreBackdropClick: true,\n });\n\n this.anotherSubscription = capturerModalRef.content.captureImage.pipe(first()).subscribe((base64: string) => {\n const blob = this.fileHandlerService.b64toBlob(base64);\n const file = new globalThis.File([blob], \"Capture.png\", { type: \"image/png\" });\n this.setNewFile(file, \"Capture.png\");\n capturerModalRef.hide();\n });\n\n this.anotherSubscription = capturerModalRef.onHidden.subscribe(() => {\n this.isCapturing = false;\n });\n }\n\n public onClickFile(file: File): void {\n if (this.fileHandlerService.isImage(file))\n this._lightbox.open([{ src: this.fileHandlerService.addBase64StuffToImage(file.buffer), caption: file.name, thumb: null }]);\n }\n\n public writeValue(value: File | string): void {\n if (typeof value === \"string\") {\n const extention = value.split(\".\").pop();\n this.fileHandlerService.getFileFromURL(value, `${this.fileName}.${extention}`).then((file: globalThis.File) => {\n if (!file) return;\n this.setNewFile(file, `file.${extention}`);\n });\n } else {\n this.setFile(value);\n }\n }\n\n private setFile(value: File): void {\n this.files = !value ? [] : this.multiple ? [...this.files, value] : [value];\n this.file.next(this.multiple ? this.files : value);\n }\n\n public registerOnChange(fn: (value: File | File[]) => void): void {\n this.file.asObservable().subscribe(fn);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private getFilesByReference(): DocumentFile[] {\n return this.uploadMultipleFilesService.getFilesByReference(this.reference);\n }\n\n private getFilesSizeMegaBytes1x1(files: DocumentFile[]): number {\n return this.uploadMultipleFilesService.getFilesSizeMegaBytes1X1(files, 3);\n }\n\n private getFilesSizesMegaBytesByReference(): number {\n return this.uploadMultipleFilesService.getFilesSizesMegaBytesByReference(this.reference);\n }\n\n private getFilesRoundSizesMegaBytesByReference(digits: number): number {\n const sizeBytes: number = this.uploadMultipleFilesService.getFilesSizesBytesByReference(this.reference);\n return this.uploadMultipleFilesService.getSizeMegaBytes(sizeBytes, digits);\n }\n\n private getFilesCountByReference(): number {\n return this.uploadMultipleFilesService.getFilesCountByReference(this.reference);\n }\n\n private clearCurrentFiles(): void {\n if (this.SetCurrentFilesListEvent) {\n this.SetCurrentFilesListEvent(this.uploadMultipleFilesService.filesList.filter((x) => x.name !== this.reference));\n }\n\n if (this.SetcurrentFilesUploadAllEvent) {\n this.SetcurrentFilesUploadAllEvent(\n this.uploadMultipleFilesService.currentFilesUploaded.filter((x) => x.name !== this.reference)\n );\n }\n }\n}\n","export const isMobile = (): boolean => {\n return (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\n navigator.userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n navigator.userAgent.slice(0, 4)\n )\n );\n};\n"],"x_google_ignoreList":[]}