ngx-dropzone-next
Version:
A highly configurable dropzone component for Angular.
1 lines • 4.97 kB
Source Map (JSON)
{"version":3,"file":"ngx-dropzone-next-ngx-dropzone.service-DgjHzr4g.mjs","sources":["../../../projects/ngx-dropzone/src/lib/ngx-dropzone/ngx-dropzone.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nexport interface FileSelectResult {\n /** The added files, emitted in the filesAdded event. */\n addedFiles: File[];\n\n /** The rejected files, emitted in the filesRejected event. */\n rejectedFiles: RejectedFile[];\n}\n\nexport interface RejectedFile extends File {\n /** The reason the file was rejected. */\n reason?: RejectReason;\n}\n\nexport type RejectReason = 'type' | 'size' | 'no_multiple';\n\n/**\n * This service contains the filtering logic to be applied to\n * any dropped or selected file. If a file matches all criteria\n * like maximum size or accept type, it will be emitted in the\n * addedFiles array, otherwise in the rejectedFiles array.\n */\n@Injectable({ providedIn: 'root' })\nexport class NgxDropzoneService {\n parseFileList(\n files: FileList,\n accept: string,\n maxFileSize: number | null | undefined,\n multiple: boolean\n ): FileSelectResult {\n const addedFiles: File[] = [];\n const rejectedFiles: RejectedFile[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i)!;\n\n if (!this.isAccepted(file, accept)) {\n this.rejectFile(rejectedFiles, file, 'type');\n continue;\n }\n\n if (maxFileSize && file.size > maxFileSize) {\n this.rejectFile(rejectedFiles, file, 'size');\n continue;\n }\n\n if (!multiple && addedFiles.length >= 1) {\n this.rejectFile(rejectedFiles, file, 'no_multiple');\n continue;\n }\n\n addedFiles.push(file);\n }\n\n const result: FileSelectResult = {\n addedFiles,\n rejectedFiles,\n };\n\n return result;\n }\n\n private isAccepted(file: File, accept: string): boolean {\n if (accept === '*') {\n return true;\n }\n\n const acceptFiletypes = accept\n .split(',')\n .map((it) => it.toLowerCase().trim());\n const filetype = file.type.toLowerCase();\n const filename = file.name.toLowerCase();\n\n const matchedFileType = acceptFiletypes.find((acceptFiletype) => {\n // check for wildcard mimetype (e.g. image/*)\n if (acceptFiletype.endsWith('/*')) {\n return filetype.split('/')[0] === acceptFiletype.split('/')[0];\n }\n\n // check for file extension (e.g. .csv)\n if (acceptFiletype.startsWith('.')) {\n return filename.endsWith(acceptFiletype);\n }\n\n // check for exact mimetype match (e.g. image/jpeg)\n return acceptFiletype == filetype;\n });\n\n return !!matchedFileType;\n }\n\n private rejectFile(\n rejectedFiles: RejectedFile[],\n file: File,\n reason: RejectReason\n ) {\n const rejectedFile = file as RejectedFile;\n rejectedFile.reason = reason;\n\n rejectedFiles.push(rejectedFile);\n }\n}\n"],"names":[],"mappings":";;;AAiBA;;;;;AAKG;MAEU,kBAAkB,CAAA;AAC7B,IAAA,aAAa,CACX,KAAe,EACf,MAAc,EACd,WAAsC,EACtC,QAAiB,EAAA;QAEjB,MAAM,UAAU,GAAW,EAAE;QAC7B,MAAM,aAAa,GAAmB,EAAE;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE;YAE3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBAClC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC;gBAC5C;;YAGF,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC;gBAC5C;;YAGF,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;gBACvC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC;gBACnD;;AAGF,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGvB,QAAA,MAAM,MAAM,GAAqB;YAC/B,UAAU;YACV,aAAa;SACd;AAED,QAAA,OAAO,MAAM;;IAGP,UAAU,CAAC,IAAU,EAAE,MAAc,EAAA;AAC3C,QAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI;;QAGb,MAAM,eAAe,GAAG;aACrB,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAExC,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,KAAI;;AAE9D,YAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;AAIhE,YAAA,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;;;YAI1C,OAAO,cAAc,IAAI,QAAQ;AACnC,SAAC,CAAC;QAEF,OAAO,CAAC,CAAC,eAAe;;AAGlB,IAAA,UAAU,CAChB,aAA6B,EAC7B,IAAU,EACV,MAAoB,EAAA;QAEpB,MAAM,YAAY,GAAG,IAAoB;AACzC,QAAA,YAAY,CAAC,MAAM,GAAG,MAAM;AAE5B,QAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;;iIA5EvB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}