{"version":3,"file":"ngx-jsonapi-material-upload.component-B8NMeLM-.mjs","sources":["../../../../libs/ngx-jsonapi-material/src/lib/picture-manager/upload/upload.component.ts","../../../../libs/ngx-jsonapi-material/src/lib/picture-manager/upload/upload.component.html"],"sourcesContent":["import { Component, EventEmitter, Output, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { HttpClient } from '@angular/common/http';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { UploadOutput, UploadInput, UploadFile, humanizeBytes, UploaderOptions, NgxUploaderModule } from 'ngx-uploader';\n\n@Component({\n    selector: 'jam-upload',\n    standalone: true,\n    imports: [CommonModule, MatProgressSpinnerModule, NgxUploaderModule],\n    templateUrl: './upload.component.html',\n    styleUrls: ['./upload.component.scss']\n})\nexport class UploadComponent {\n    @Input() public limit: number;\n    @Input() public multiple: boolean = true;\n    @Input() public dropzone: boolean = true;\n    @Input() public disabled: boolean = false;\n    @Input() public source: string;\n    @Input() public deleteUrl: string;\n    @Input() public uploadUrl: string;\n    @Input() public showDeleteOption: boolean = true;\n    @Input() public jamHeaders: { [key: string]: string };\n    @Input() public textDelete: string = '';\n    @Input() public disableMatDialog: boolean = false;\n    @Input() public showBtnOption: boolean = false;\n    @Input() public deletePreview: boolean = false;\n    @Input() public cropper: boolean = false;\n    @Input() public cropper_ratio: number = 16 / 9;\n    @Input() public callback: () => void;\n    @Input() public redirect: boolean = false;\n    @Input() public data: { [key: string]: string | Blob } = {};\n    public destroyed: boolean = false;\n    public httpClient: HttpClient;\n    public options: UploaderOptions;\n    public formData: FormData;\n    public files: Array<UploadFile>;\n    @Output() public uploadInput: EventEmitter<UploadInput>;\n    @Output() public showPreview: EventEmitter<string | ArrayBuffer | null> = new EventEmitter<string | ArrayBuffer | null>();\n    @Output() public response: EventEmitter<UploadOutput> = new EventEmitter();\n    @Output() public dragAndDropChange: EventEmitter<boolean> = new EventEmitter();\n    public humanizeBytesFunction: (bytes: number) => string;\n    public dragOver: boolean = false;\n\n    public constructor(public router: Router) {\n        this.files = []; // local uploading files array\n        this.uploadInput = new EventEmitter<UploadInput>(); // input events, we use this to emit data to ngx-uploader\n        this.humanizeBytesFunction = humanizeBytes;\n    }\n\n    public onUploadOutput(output: UploadOutput): void {\n        switch (output.type) {\n            case 'allAddedToQueue':\n                this.startUpload();\n                break;\n            case 'addedToQueue':\n                if (typeof output.file !== 'undefined') {\n                    this.previewImage(output.file);\n                    this.files.push(output.file);\n                }\n                break;\n            case 'uploading':\n                if (typeof output.file !== 'undefined') {\n                    // update current data in files array for uploading file\n                    const index: number = this.files.findIndex(\n                        (file): boolean => typeof output.file !== 'undefined' && file.id === output.file.id\n                    );\n                    this.files[index] = output.file;\n                }\n                break;\n            case 'removed':\n                // remove file from array when removed\n                this.files = this.files.filter((file: UploadFile): boolean => JSON.stringify(file) !== JSON.stringify(output.file));\n                break;\n            case 'dragOver':\n                this.dragOver = true;\n                this.dragAndDropChange.emit(this.dragOver);\n                break;\n            case 'dragOut':\n            case 'drop':\n                this.dragOver = false;\n                this.dragAndDropChange.emit(this.dragOver);\n                break;\n            case 'done':\n                if (this.redirect) {\n                    if (!output.file?.response?.id) {\n                        return;\n                    }\n                    this.router.navigate([this.router.url + '/' + output.file.response.id]);\n                }\n                break;\n        }\n        this.response.emit(output);\n    }\n\n    // The preview function\n    public previewImage(file: { nativeFile?: File; target?: { files: FileList } }): void {\n        const fileReader: FileReader = new FileReader();\n        const fileToRead: File | undefined = file.nativeFile || file.target?.files[0];\n\n        if (!fileToRead) {\n            return;\n        }\n\n        fileReader.readAsDataURL(fileToRead);\n        fileReader.onload = (image: Event): void => {\n            this.showPreview.emit((image.target as FileReader)?.result);\n        };\n    }\n\n    public startUpload(): void {\n        const event: UploadInput = {\n            type: 'uploadAll',\n            url: this.uploadUrl,\n            method: 'POST',\n            data: this.data, // agergar datos\n            headers: this.jamHeaders\n        };\n        this.uploadInput.emit(event);\n    }\n\n    public cancelUpload(id: string): void {\n        this.uploadInput.emit({ type: 'cancel', id: id });\n    }\n\n    public removeFile(id: string): void {\n        this.uploadInput.emit({ type: 'remove', id: id });\n    }\n\n    public removeAllFiles(): void {\n        this.uploadInput.emit({ type: 'removeAll' });\n    }\n}\n","<div>\n    <div class=\"upload-container\" ngFileDrop [options]=\"options\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\n        <label class=\"upload-button margin-0\"\n            style=\"display: inline-block;\n                border: none;\n                outline: none;\n                cursor: pointer;\"\n            >\n            <input style=\"display: none\" type=\"file\" class=\"layout-margin\" ngFileSelect\n                [uploadInput]=\"uploadInput\"\n                [disabled]=\"disabled\"\n                [options]=\"options\"\n                (change)=\"previewImage($event)\"\n                (uploadOutput)=\"onUploadOutput($event)\"\n                multiple>\n            <ng-content></ng-content>\n        </label>\n    </div>\n</div>\n@for (f of files; track $index) {\n    <div>\n        @if (f.progress.data < 100) {\n            <mat-spinner></mat-spinner>\n        }\n    </div>\n}\n"],"names":[],"mappings":";;;;;;;;;MAca,eAAe,CAAA;AA+BxB,IAAA,WAAA,CAA0B,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;QA7BhB,IAAA,CAAA,QAAQ,GAAY,IAAI;QACxB,IAAA,CAAA,QAAQ,GAAY,IAAI;QACxB,IAAA,CAAA,QAAQ,GAAY,KAAK;QAIzB,IAAA,CAAA,gBAAgB,GAAY,IAAI;QAEhC,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,OAAO,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,aAAa,GAAW,EAAE,GAAG,CAAC;QAE9B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,IAAI,GAAqC,EAAE;QACpD,IAAA,CAAA,SAAS,GAAY,KAAK;AAMhB,QAAA,IAAA,CAAA,WAAW,GAA8C,IAAI,YAAY,EAA+B;AACxG,QAAA,IAAA,CAAA,QAAQ,GAA+B,IAAI,YAAY,EAAE;AACzD,QAAA,IAAA,CAAA,iBAAiB,GAA0B,IAAI,YAAY,EAAE;QAEvE,IAAA,CAAA,QAAQ,GAAY,KAAK;AAG5B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAe,CAAC;AACnD,QAAA,IAAI,CAAC,qBAAqB,GAAG,aAAa;IAC9C;AAEO,IAAA,cAAc,CAAC,MAAoB,EAAA;AACtC,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,iBAAiB;gBAClB,IAAI,CAAC,WAAW,EAAE;gBAClB;AACJ,YAAA,KAAK,cAAc;AACf,gBAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChC;gBACA;AACJ,YAAA,KAAK,WAAW;AACZ,gBAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;;AAEpC,oBAAA,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,SAAS,CACtC,CAAC,IAAI,KAAc,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CACtF;oBACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI;gBACnC;gBACA;AACJ,YAAA,KAAK,SAAS;;AAEV,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAgB,KAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnH;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1C;AACJ,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;gBACrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1C;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;wBAC5B;oBACJ;oBACA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3E;gBACA;;AAER,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B;;AAGO,IAAA,YAAY,CAAC,IAAyD,EAAA;AACzE,QAAA,MAAM,UAAU,GAAe,IAAI,UAAU,EAAE;AAC/C,QAAA,MAAM,UAAU,GAAqB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE7E,IAAI,CAAC,UAAU,EAAE;YACb;QACJ;AAEA,QAAA,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;AACpC,QAAA,UAAU,CAAC,MAAM,GAAG,CAAC,KAAY,KAAU;YACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAE,KAAK,CAAC,MAAqB,EAAE,MAAM,CAAC;AAC/D,QAAA,CAAC;IACL;IAEO,WAAW,GAAA;AACd,QAAA,MAAM,KAAK,GAAgB;AACvB,YAAA,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,IAAI,CAAC,SAAS;AACnB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC;SACjB;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEO,IAAA,YAAY,CAAC,EAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACrD;AAEO,IAAA,UAAU,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACrD;IAEO,cAAc,GAAA;QACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChD;+GAtHS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,upBCd5B,m7BA0BA,EAAA,MAAA,EAAA,CAAA,mGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,wBAAwB,kOAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACI,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,m7BAAA,EAAA,MAAA,EAAA,CAAA,mGAAA,CAAA,EAAA;;sBAKnE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;sBACA;;sBACA;;sBACA;;;;;"}