{"version":3,"file":"pepperi-addons-ngx-lib-files-uploader.mjs","sources":["../../../projects/ngx-lib/files-uploader/files-uploader.component.ts","../../../projects/ngx-lib/files-uploader/files-uploader.component.html","../../../projects/ngx-lib/files-uploader/files-uploader.module.ts","../../../projects/ngx-lib/files-uploader/public-api.ts","../../../projects/ngx-lib/files-uploader/pepperi-addons-ngx-lib-files-uploader.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport {\n    Component,\n    OnInit,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n    ViewChild,\n    ChangeDetectorRef,\n    ChangeDetectionStrategy,\n    Optional,\n} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FileUploader } from 'ng2-file-upload';\nimport { FormGroup } from '@angular/forms';\nimport {\n    PepFileService,\n    PepLayoutType,\n    PepCustomizationService,\n    PepHorizontalAlignment,\n    DEFAULT_HORIZONTAL_ALIGNMENT,\n    IPepFieldClickEvent,\n} from '@pepperi-addons/ngx-lib';\nimport {\n    PepDialogService,\n    PepDialogData,\n} from '@pepperi-addons/ngx-lib/dialog';\nimport { pepIconNoImage2 } from '@pepperi-addons/ngx-lib/icon';\n\nexport interface IPepFileChangeEvent {\n    acceptedExtensions?: string;\n    fileStr?: string;\n    fileName?: string;\n    fileExt?: string;\n}\n\n@Component({\n    selector: 'pep-files-uploader',\n    templateUrl: './files-uploader.component.html',\n    styleUrls: ['./files-uploader.component.scss', './files-uploader.component.theme.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\n@Injectable()\nexport class PepFilesUploaderComponent implements OnInit {\n    @Input() key = '';\n    @Input() src = '';\n    @Input() label = '';\n    @Input() mandatory = false;\n    @Input() disabled = false;\n    @Input() xAlignment: PepHorizontalAlignment = DEFAULT_HORIZONTAL_ALIGNMENT;\n\n    private _rowSpan = 1;\n    @Input()\n    set rowSpan(value) {\n        this._rowSpan = value;\n    }\n    get rowSpan(): number {\n        return this._rowSpan;\n    }\n\n    @Input() controlType = '';\n    @Input() sizeLimitMB = 5;\n\n    @Input() form: FormGroup;\n    @Input() standAlone = false;\n    @Input() acceptedExtensions = 'bmp,jpg,jpeg,png,gif,ico,svg,html,css';\n    @Input() layoutType: PepLayoutType = 'form';\n\n    @Output()\n    fileChange: EventEmitter<IPepFileChangeEvent> = new EventEmitter<IPepFileChangeEvent>();\n    @Output()\n    elementClick: EventEmitter<IPepFieldClickEvent> = new EventEmitter<IPepFieldClickEvent>();\n\n    @ViewChild('fileInput') fileInput: any;\n    @ViewChild('imagePreview') imagePreview: any;\n\n    @Input() fieldHeight = '';\n\n    // multiple = false;\n    uploader: FileUploader;\n    progress = 0;\n    // response: string;\n    intervalID: any = null;\n\n    constructor(\n        private dialogService: PepDialogService,\n        private customizationService: PepCustomizationService,\n        private fileService: PepFileService,\n        private translate: TranslateService\n    ) {\n        this.uploader = new FileUploader({ removeAfterUpload: true });\n\n        this.uploader.onAfterAddingFile = (item) => {\n            if (this.fileInput?.nativeElement) {\n                this.fileInput.nativeElement.value = '';\n            }\n            const reader = new FileReader();\n\n            reader.onload = (event: any) => {\n                // fix for DI-19376 - when there is a dot on the file name (not include the extantion one)\n                //const fileNameArray = item._file.name.split('.');\n                const fileName = this.getFileName(item._file.name); //fileNameArray[0];\n                const fileExt = this.getFileExtension(item._file.name); //fileNameArray[1]; // item._file.name.split('.').pop();\n                const target = event.target || event.srcElement;\n                const fileStr = target.result;\n                const errorMsg = this.isValidFile(\n                    fileStr,\n                    fileExt,\n                    this.acceptedExtensions,\n                    this.sizeLimitMB\n                );\n                if (errorMsg === '') {\n                    this.src = fileStr;\n                    // this.setIntervalX(25, 75);\n                    // this.setProgress(5);\n                    this.fileChange.emit({\n                        acceptedExtensions: this.acceptedExtensions,\n                        fileStr,\n                        fileName,\n                        fileExt,\n                    });\n                } else {\n                    const title = this.translate.instant(\n                        'MESSAGES.TITLE_NOTICE'\n                    );\n                    const data = new PepDialogData({\n                        title,\n                        content: errorMsg,\n                    });\n                    this.dialogService.openDefaultDialog(data);\n                }\n            };\n            reader.readAsDataURL(item._file);\n\n            \n        };\n    }\n\n    getFileName(filename){\n        // get file name\n        const fileName = filename.substring(0,filename.lastIndexOf('.'));\n        return fileName;\n    }\n\n    getFileExtension(filename){\n        // get file extension\n        const extension = filename.substring(filename.lastIndexOf('.') + 1, filename.length);\n        return extension;\n    }\n    ngOnInit(): void {\n        /*this.uploader.onCompleteAll = () => {\n            this.fileInput.nativeElement.value = '';\n        }*/\n    }\n\n    isValidFile(\n        fileStr,\n        fileExtension,\n        acceptedExtensions,\n        sizeLimitMB = 5\n    ): string {\n        const file: any = fileStr;\n        let fileSize = 0;\n        let content = '';\n        // check if got file as Base64\n        if (typeof fileStr === 'string' && fileStr.indexOf('data:') > -1) {\n            fileSize = this.getBase64FileSize(fileStr);\n        } else {\n            fileSize = file.size;\n        }\n        // check the size and the extension\n        const sizeOK: boolean =\n            fileSize !== -1 && file != null && fileSize < sizeLimitMB * 1048576;\n        const extensionOK =\n            acceptedExtensions === '' ||\n            acceptedExtensions.indexOf(fileExtension.toLowerCase()) !== -1;\n        if (!extensionOK) {\n            content = this.translate.instant(\n                'MESSAGES.ERROR_FAILD_TO_LOAD_EXTENSION',\n                {\n                    fileExtension:\n                        \"<label class='uppercase bold'>\" +\n                        fileExtension +\n                        '</label>',\n                }\n            );\n        } else if (!sizeOK) {\n            content = this.translate.instant(\n                'MESSAGES.ERROR_FAILD_TO_LOAD_SIZE',\n                {\n                    fileSize:\n                        \"<label class='uppercase bold'>\" +\n                        sizeLimitMB.toString() +\n                        '</label>',\n                }\n            );\n        }\n        return content;\n    }\n\n    getBase64FileSize(base64String: string): number {\n        let fileSize: number;\n\n        try {\n            base64String = base64String.substr(base64String.indexOf(',') + 1);\n            fileSize = atob(base64String).length;\n        } catch (e) {\n            fileSize = -1;\n        }\n\n        return fileSize; // return size in bytes;\n    }\n\n    // setIntervalX(delay, repetitions): void {\n    //     let x = 0;\n    //     this.intervalID = window.setInterval(() => {\n    //         // this.setProgress(this.progress + 5);\n    //         if (++x === repetitions || this.uploader.progress >= 100) {\n    //             window.clearInterval(this.intervalID);\n    //         }\n    //     }, delay);\n    // }\n\n    errorHandler(event): void {\n        event.target.src = this.fileService.getSvgAsImageSrc(\n            pepIconNoImage2.data\n        );\n        event.target.title = this.translate.instant('IMAGE.NO_IMAGE');\n    }\n\n    private setProgress(progress): void {\n        this.progress = progress;\n        this.uploader.progress = progress;\n    }\n\n    deleteFile(): void {\n        this.uploader.clearQueue();\n        window.clearInterval(this.intervalID);\n        this.setProgress(0);\n\n        const empltValue = '';\n        this.src = empltValue;\n\n        this.fileChange.emit(null);\n\n        // this.fileChange.emit({\n        //     acceptedExtensions: this.acceptedExtensions,\n        //     fileStr: null,\n        //     fileExt: null,\n        // });\n    }\n\n    onElementClicked(event): void {\n        this.elementClick.emit({\n            key: this.key,\n            controlType: this.controlType,\n            eventWhich: event.which,\n        });\n    }\n\n    onClick_ChooseFile(event): void {\n        if (this.fileInput?.nativeElement) {\n            this.fileInput.nativeElement.click();\n        }\n    }\n\n    onKeyPress_ChooseFile(event): void {\n        const e = event as KeyboardEvent;\n\n        if ([13, 32].indexOf(e.which) !== -1) {\n            if (this.fileInput?.nativeElement) {\n                this.fileInput.nativeElement.click();\n            }\n        }\n        e.preventDefault();\n    }\n}\n","<ng-template #pepTemplate>\n    <mat-form-field [formGroup]=\"form\" appearance=\"outline\">\n        <div class=\"pep-file-wrapper\">\n            <div class=\"pep-file body-sm\" [style.height]=\"fieldHeight\" [ngClass]=\"{\n                    'one-row': rowSpan == 1,\n                    disable: disabled\n                }\">\n                <ng-container *ngIf=\"src != ''; then withImg; else noImg\"></ng-container>\n                <ng-template #withImg>\n                    <button *ngIf=\"!disabled\" mat-button (click)=\"deleteFile()\"\n                        class=\"pep-button icon-button weak md delete\" tabindex=\"-1\"\n                        [ngClass]=\"{ 'right-alignment': xAlignment == 'right' }\">\n                        <mat-icon>\n                            <pep-icon name=\"system_bin\"></pep-icon>\n                        </mat-icon>\n                    </button>\n                    <div class=\"pep-file-preview\" (click)=\"onElementClicked($event)\">\n                        <img *ngIf=\"controlType === 'image'\" #imagePreview [src]=\"src\" class=\"pep-file-preview-img\"\n                            [style.max-height]=\"fieldHeight\" (error)=\"errorHandler($event)\" [alt]=\"label\"\n                            [ngClass]=\"['text-align-' + xAlignment]\" />\n                        <div *ngIf=\"controlType === 'attachment'\" class=\"ellipsis pep-file-message\">\n                            <a *ngIf=\"src != ''\" href=\"javascript:void(0)\">\n                                <mat-icon class=\"pep-spacing-element\">\n                                    <pep-icon name=\"system_attach\"></pep-icon>\n                                </mat-icon>\n                                <span class=\"body-sm ellipsis\">{{ 'FILE.SEE_ORIGINAL' | translate }}</span>\n                            </a>\n                        </div>\n                    </div>\n                </ng-template>\n                <ng-template #noImg>\n                    <div class=\"ellipsis pep-file-message\">\n                        <mat-icon *ngIf=\"controlType === 'attachment'\" class=\"pep-spacing-element\">\n                            <pep-icon name=\"system_attach\"></pep-icon>\n                        </mat-icon>\n                        <mat-icon *ngIf=\"controlType === 'image'\" class=\"pep-spacing-element\">\n                            <pep-icon name=\"system_file_upload_cloud\"></pep-icon>\n                        </mat-icon>\n                        <span class=\"body-sm ellipsis\" *ngIf=\"progress == 0\">\n                            {{ (disabled ? (controlType === 'image' ? 'MESSAGES.INFO_MISSING_IMAGE' :\n                            'MESSAGES.INFO_MISSING_FILE') : 'FILE.HINT') | translate }}\n                        </span>\n                        <!-- <p *ngIf=\"progress != 0\" class=\"pull-left flip\"\n                            [ngClass]=\"{ 'pull-left flip': rowSpan == 1, image: controlType == 'image', attachment: controlType == 'attachment' }\">\n                            {{ 'FILE.UPLOADING_FILE' | translate }}\n                        </p> -->\n                    </div>\n                    <ng-container *ngIf=\"!disabled\">\n                        <input #fileInput id=\"pep-file-{{ key }}\" tabindex=\"-1\" type=\"file\" accept=\"acceptedExtensions\"\n                            ng2FileSelect [uploader]=\"uploader\" autocomplete=\"off\" />\n                        <button *ngIf=\"progress != 0\" mat-button class=\"pep-button icon-button weak md delete\"\n                            [ngClass]=\"{ 'right-alignment': xAlignment == 'right' }\">\n                            <mat-icon>\n                                <pep-icon name=\"system_processing\" [spin]=\"true\">\n                                </pep-icon>\n                            </mat-icon>\n                        </button>\n                    </ng-container>\n                </ng-template>\n            </div>\n            <input [id]=\"key\" matInput [name]=\"key\" [formControlName]=\"key\" class=\"hidden-input\" type=\"text\"\n                [value]=\"src\" (click)=\"onClick_ChooseFile($event)\" (keypress)=\"onKeyPress_ChooseFile($event)\"\n                autocomplete=\"off\" />\n        </div>\n\n        <mat-error><span class=\"body-xs\"\n                [title]=\"mandatory && src.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"\n                [innerText]=\"mandatory && src.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"></span>\n        </mat-error>\n    </mat-form-field>\n</ng-template>\n\n<ng-container *ngIf=\"layoutType === 'form'\">\n    <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"layoutType === 'card'\">\n    <!-- <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container> -->\n</ng-container>\n\n<ng-container *ngIf=\"layoutType === 'table'\">\n    <!-- <ng-container *ngTemplateOutlet=\"pepTemplate\"></ng-container> -->\n</ng-container>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { FileUploadModule } from 'ng2-file-upload';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport {\n    PepIconModule,\n    PepIconRegistry,\n    pepIconSystemBin,\n    pepIconSystemAttach,\n    pepIconSystemFileUploadCloud,\n    pepIconSystemProcessing,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepDialogModule } from '@pepperi-addons/ngx-lib/dialog';\n\nimport { PepFilesUploaderComponent } from './files-uploader.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        // Material modules,\n        MatCommonModule,\n        MatButtonModule,\n        MatFormFieldModule,\n        MatInputModule,\n        MatIconModule,\n        // External modules\n        FileUploadModule,\n        // ngx-lib modules\n        PepNgxLibModule,\n        PepIconModule,\n        PepDialogModule,\n    ],\n    exports: [PepFilesUploaderComponent],\n    declarations: [PepFilesUploaderComponent],\n})\nexport class PepFilesUploaderModule {\n    constructor(private pepIconRegistry: PepIconRegistry) {\n        this.pepIconRegistry.registerIcons([\n            pepIconSystemBin,\n            pepIconSystemAttach,\n            pepIconSystemFileUploadCloud,\n            pepIconSystemProcessing,\n        ]);\n    }\n}\n","/*\n * Public API Surface of ngx-lib/files-uploader\n */\nexport * from './files-uploader.module';\nexport * from './files-uploader.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i11","i1"],"mappings":"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"}