UNPKG

@freshworks/crayons

Version:
454 lines (449 loc) 41.6 kB
import { attachShadow, createEvent, h, proxyCustomElement } from '@stencil/core/internal/client'; import { T as TranslationController, i as i18n } from './Translation.js'; import { d as defineCustomElement$6 } from './file-uploader-file.js'; import { d as defineCustomElement$5 } from './file-uploader-progress.js'; import { d as defineCustomElement$2, a as defineCustomElement$4 } from './icon.js'; import { d as defineCustomElement$3 } from './spinner.js'; const fileUploaderCss = ":host{font-family:var(--fw-font-family, -apple-system, blinkmacsystemfont, \"Segoe UI\", roboto, oxygen, ubuntu, cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-box-sizing:border-box;box-sizing:border-box}:host{display:block}div.file-uploader-container{display:-ms-flexbox;display:flex;width:100%;min-height:153px;border:1px dashed var(--fw-file-uploader-border, #bbdcfe);background:#fff;-ms-flex-pack:center;justify-content:center}div.file-uploader-container .dropzone,div.file-uploader-container .progress,div.file-uploader-container .files{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;-ms-flex-pack:center;justify-content:center}div.file-uploader-container .dropzone{-ms-flex-align:center;align-items:center;cursor:pointer}div.file-uploader-container .dropzone .dropzone-center{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:500px;height:100%;-ms-flex-pack:justify;justify-content:space-between}div.file-uploader-container .dropzone .dropzone-center .drop-clickable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin:auto 0;-webkit-transform:translateY(-5px);transform:translateY(-5px)}div.file-uploader-container .dropzone .dropzone-center .drop-clickable .drop-clickable-text{line-height:20px;font-size:14px;font-weight:500;color:#2c5cc5;margin-top:9px;margin-bottom:3px}div.file-uploader-container .dropzone .dropzone-center .drop-clickable .drop-clickable-hint{line-height:20px;font-size:14px;color:#92a2b1}div.file-uploader-container .dropzone .dropzone-center .dropzone-hint{line-height:20px;font-size:10px;color:#345c7c;text-align:center}div.file-uploader-container .dropzone .dropzone-center .dropzone-error{line-height:12px;font-size:10px;text-align:center;padding:5px 0px;-webkit-box-sizing:border-box;box-sizing:border-box}div.file-uploader-container .dropzone .dropzone-center .dropzone-error span{display:block;color:#d72d30}div.file-uploader-container .progress,div.file-uploader-container .files{padding:28px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-pack:center;justify-content:center}div.file-uploader-container .progress-center,div.file-uploader-container .files-center{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}div.file-uploader-container .progress-title,div.file-uploader-container .files-title{line-height:20px;font-size:12px;color:#475867;font-weight:600;letter-spacing:0.2px}"; var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; let fileCount = 1; let FileUploader = class extends HTMLElement { constructor() { super(); this.__registerHost(); attachShadow(this); this.fwFilesUploaded = createEvent(this, "fwFilesUploaded", 7); this.fwFileReuploaded = createEvent(this, "fwFileReuploaded", 7); this.fwStageChanged = createEvent(this, "fwStageChanged", 7); /** * stage - different stages in file uploader. */ this.stage = 'dropzone'; /** * hint - file uploader hint text. */ this.hint = ''; /** * accept - comma separated string. tells us what file formats file uploader should accept. */ this.accept = ''; /** * maxFileSize - maximum file size the file uploader must accept. */ this.maxFileSize = 0; /** * actionURL - URL to make server call. */ this.actionURL = ''; /** * actionParams - additional information to send to server other than the file. */ this.actionParams = {}; /** * multiple - upload multiple files. */ this.multiple = false; /** * Max files allowed to upload. */ this.filesLimit = 10; /** * modify request * @param xhr * @returns xhr */ this.modifyRequest = (xhr) => xhr; /** * files - files collection. */ this.files = []; /** * errors - errors collection. */ this.errors = []; /** * private * fileInputElement */ this.fileInputElement = null; /** * private * isFileUploadInProgress */ this.isFileUploadInProgress = false; /** * private * fileUploadPromises */ this.fileUploadPromises = []; /** * private * formDataCollection */ this.formDataCollection = {}; } stageChange(newStage) { switch (newStage) { case 'dropzone': this.formDataCollection = {}; this.fileUploadPromises = []; this.errors = []; this.files = []; break; } this.fwStageChanged.emit({ stage: newStage }); } /** * private * uploadFileLocally - upload the files locally and add it to form for sending to server * @param file */ uploadFileLocally(file) { const formData = new FormData(); formData.append('file', file); this.formDataCollection[fileCount] = formData; this.files.push({ id: fileCount, name: file.name, progress: 0, error: '', }); fileCount = fileCount + 1; } /** * uploadFile * @param fileId * @returns fileUploadPromise */ uploadFile(fileId) { const formData = this.formDataCollection[fileId]; // adding extra information to formData before uploading for (const key in this.actionParams) { if (Object.prototype.hasOwnProperty.call(this.actionParams, key)) { formData.append(key, this.actionParams[key]); } } // creating and sending xhr requests const xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', this.progressHandler.bind(this, fileId), false); const fileUploadPromise = new Promise((resolve, reject) => { xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { resolve({ uploadStatus: xhr.status, response: xhr.response }); } else { this.setFile(fileId, { error: this.fileUploadError }); reject({ uploadStatus: xhr.status, response: xhr.response }); } } }; }); xhr.open('POST', this.actionURL); const modifiedRequest = this.modifyRequest(xhr); modifiedRequest.send(formData); return fileUploadPromise; } /** * private * retryFileUpload retry a file upload * @param fileId */ retryFileUpload(fileId) { this.setFile(fileId, { error: '' }); const uploadPromise = this.uploadFile(fileId); this.fileUploadPromises = [uploadPromise]; Promise.allSettled(this.fileUploadPromises).then((responses) => { this.fwFileReuploaded.emit(responses[0].value); }); } /** * uploadFiles - uploads the files to the server. emits an after file is uploaded. */ async uploadFiles() { if (this.files.length && !this.isFileUploadInProgress) { this.stage = 'progress'; this.isFileUploadInProgress = true; for (const fileId in this.formDataCollection) { if (Object.prototype.hasOwnProperty.call(this.formDataCollection, fileId)) { const uploadPromise = this.uploadFile(parseInt(fileId)); this.fileUploadPromises.push(uploadPromise); } } Promise.allSettled(this.fileUploadPromises).then((responses) => { const responseValues = responses.map((response) => response.value); const responseValue = this.multiple ? responseValues : responseValues[0]; this.fwFilesUploaded.emit(responseValue); this.isFileUploadInProgress = false; }); } } /** * private * removeFile - remove a file from the form and files collection. * @param fileId */ removeFile(fileId) { const fileIndex = this.files.findIndex((file) => file.id === fileId); if (fileIndex >= 0) { const beforeFiles = this.files.slice(0, fileIndex); const afterFiles = this.files.slice(fileIndex + 1, this.files.length + 1); this.files = [...beforeFiles, ...afterFiles]; delete this.formDataCollection[fileId]; if (!this.files.length) { this.stage = 'dropzone'; } } } /** * private * fileValidation validate a file for upload * @param file * @returns */ fileValidation(file) { let isPassed = true; const fileExtension = file.name; const fileSize = file.size; const errors = []; if (this.accept) { isPassed = this.accept .split(',') .filter((fileType) => fileType !== '') .some((fileType) => fileExtension.includes(fileType.trim())); if (!isPassed) { errors.push(this.acceptError); } } if (this.maxFileSize !== 0) { if (fileSize > this.maxFileSize * 1024 * 1024) { isPassed = false; errors.push(this.maxFileSizeError); } } this.errors = [...this.errors, ...errors]; return isPassed; } /** * private * setFile - update the file object in files collection. */ setFile(fileId, errorObject) { let change; const fileIndex = this.files.findIndex((file) => file.id === fileId); if (fileIndex >= 0) { this.files = [ ...this.files.slice(0, fileIndex), Object.assign(this.files[fileIndex], errorObject), ...this.files.slice(fileIndex + 1, this.files.length), ]; change = true; } else { change = false; } return change; } /** * private * drag and drop handler * @param event */ dropHandler(event) { event.preventDefault(); this.fileHandler(event); } /** * private * fileHandler - handler for both drop and input change * @param event */ fileHandler(event) { let passed = true; const tempFiles = event.target.files || event.dataTransfer.files; const files = this.multiple ? tempFiles : [tempFiles[0]]; this.errors = []; if (files.length <= this.filesLimit) { for (let index = 0; index < files.length; index++) { const file = files[index]; passed = this.fileValidation(file); if (!passed) { break; } } } else { this.errors = [this.maxFilesLimitError]; passed = false; } if (passed) { for (let index = 0; index < files.length; index++) { const file = files[index]; this.uploadFileLocally(file); this.stage = 'files'; } } } /** * private * progressHandler - update the progress on files * @param fileId * @param event */ progressHandler(fileId, event) { const fileIndex = this.files.findIndex((file) => fileId === file.id); if (fileIndex >= 0) { const progressPercentage = (event.loaded / event.total) * 100; const file = Object.assign(Object.assign({}, this.files[fileIndex]), { progress: progressPercentage }); const beforeFiles = this.files.slice(0, fileIndex); const afterFiles = this.files.slice(fileIndex + 1, this.files.length + 1); this.files = [...beforeFiles, file, ...afterFiles]; } } /** * renderFileUploader * @returns {JSX.Element} */ renderFileUploader() { let template = null; switch (this.stage) { case 'dropzone': template = this.renderDropzone(); break; case 'progress': template = this.renderProgress(); break; case 'files': template = this.renderFiles(); break; } return template; } /** * renderDropzone * @returns {JSX.Element} */ renderDropzone() { const multipleFiles = this.multiple ? { multiple: true } : {}; return (h("div", { class: 'dropzone', key: 'dropzone', tabIndex: 0, onDrop: (event) => this.dropHandler(event), onDragOver: (event) => event.preventDefault(), onClick: () => this.fileInputElement.click(), onKeyUp: (event) => { if (event.key === 'Enter' || event.key === 'Space') { this.fileInputElement.click(); } }, role: 'button' }, h("div", { class: 'dropzone-center' }, h("div", { class: 'drop-clickable' }, h("div", { class: 'drop-clickable-icon' }, h("svg", { width: '32', height: '32', viewBox: '0 0 32 32', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' }, h("rect", { width: '32', height: '32', fill: 'url(#pattern0)' }), h("defs", null, h("pattern", { id: 'pattern0', patternContentUnits: 'objectBoundingBox', width: '1', height: '1' }, h("use", { xlinkHref: '#image0_1441_50512', transform: 'scale(0.00195312)' })), h("image", { id: 'image0_1441_50512', width: '512', height: '512', xlinkHref: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAgAElEQVR4Ae2dCZQd1X3mr0FsNl4wS7BNMhMmmcSemcQ2trENlnrTvjXOKHYmGds5QUIMqw3CAoHU2qXe5JjYWAHUMlJYvB2Pc8zkJG61QTJggbExZjFgVrMjIfWr1+p+Qr5z/q/fbT3ardZ9y626Vfenc+q0ENVVr7766vt+dWt5SvEHBVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVAABVwq0Namj1iwUR81rz069Zzu3KS53bn/07oh2tC6If+t1q7o387pjn41tzvax4QGeMDOA3O6on2fuy6/76bthW0b79NHuTx+WTYKoAAKVK1Aa/fAx87pjha1bohube2KdrZ25x9v7Y5ebu3O51q7o8HW7kgzoQEesPfAnM5If/4beX3rXYXC9T8auqrqg5NfRAEUQIF6KzC7s/+k1q7c+a3d0e2t3dHTrd1RnoC3D3i0QqvxPCAA8IVv5PX3du7X37yjsG9j774lSqm3lKZ6H84sDwVQAAUOr8C87r3vntvZv7i1O/pFa3e0d7wQ4/9RcnigOg8YAPjuzoK+5ScFvfmOwsANPxq4ogwCBAb4gwIogAIxKKD1W1q79v5da3d0f2t3NECwVxfs6IZuNh4oB4Cbf1LQMt10ZyG/eRsQEEPasQoUQAGjwMy1e05v7Y7+pbU7imzCi3koOTxQmwfGAgCBgK07CvtuumPgMqXUEWWjAeZQ5ScKoAAK1EmBtrYjWtv3TDmnO3qgtTs6QKjXFuroh362HjgUAJQgoNDTG106b968I4GAOmUdi0EBFBhR4C0NbX0T5nb0/31rd/SSbWgxHwWHB+rjgfEAoAgB24cObOrNXbhgwUZ5RJCbA0eii7+g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' })))), h("div", { class: 'drop-clickable-text' }, h("input", Object.assign({ type: 'file', hidden: true }, multipleFiles, { style: { display: 'none' }, onChange: (ev) => this.fileHandler(ev), ref: (el) => (this.fileInputElement = el) })), this.text), h("div", { class: 'drop-clickable-hint' }, h("span", null, this.description))), this.errors.length ? (h("div", { class: 'dropzone-error' }, this.errors.map((message) => (h("span", null, message))))) : (h("div", { class: 'dropzone-hint' }, this.hint))))); } /** * renderProgress * @returns {JSX.Element} */ renderProgress() { return (h("div", { class: 'progress', key: 'progress' }, h("div", { class: 'progress-center' }, h("div", { class: 'progress-title' }, TranslationController.t('fileUploader.uploading')), this.files.map((file) => (h("fw-file-uploader-progress", { fileId: file.id, fileName: file.name, progress: file.progress, error: file.error, onFwRetryUpload: (event) => this.retryFileUpload(event.detail.fileId) })))))); } /** * renderFiles * @returns {JSX.Element} */ renderFiles() { return (h("div", { class: 'files', key: 'files' }, h("div", { class: 'files-center' }, h("div", { class: 'files-title' }, TranslationController.t('fileUploader.selectedFiles')), this.files.map((file) => (h("fw-file-uploader-file", { fileId: file.id, name: file.name, onFwRemoveFile: (event) => { event.stopPropagation(); this.removeFile(event.detail.fileId); } })))))); } /** * render * @returns {JSX.Element} */ render() { return (h("div", { class: 'file-uploader-container' }, this.renderFileUploader())); } static get watchers() { return { "stage": ["stageChange"] }; } static get style() { return fileUploaderCss; } }; __decorate([ i18n({ keyName: 'fileUploader.text' }) ], FileUploader.prototype, "text", void 0); __decorate([ i18n({ keyName: 'fileUploader.description' }) ], FileUploader.prototype, "description", void 0); __decorate([ i18n({ keyName: 'fileUploader.acceptError' }) ], FileUploader.prototype, "acceptError", void 0); __decorate([ i18n({ keyName: 'fileUploader.maxFileSizeError' }) ], FileUploader.prototype, "maxFileSizeError", void 0); __decorate([ i18n({ keyName: 'fileUploader.maxFilesLimitError' }) ], FileUploader.prototype, "maxFilesLimitError", void 0); __decorate([ i18n({ keyName: 'fileUploader.fileUploadError' }) ], FileUploader.prototype, "fileUploadError", void 0); FileUploader = /*@__PURE__*/ proxyCustomElement(FileUploader, [1, "fw-file-uploader", { "text": [1032], "description": [1032], "hint": [1], "accept": [1], "maxFileSize": [2, "max-file-size"], "acceptError": [1032, "accept-error"], "maxFileSizeError": [1032, "max-file-size-error"], "maxFilesLimitError": [1032, "max-files-limit-error"], "fileUploadError": [1032, "file-upload-error"], "actionURL": [1, "action-u-r-l"], "actionParams": [8, "action-params"], "multiple": [4], "filesLimit": [2, "files-limit"], "modifyRequest": [16], "stage": [32], "files": [32], "errors": [32], "uploadFiles": [64] }]); function defineCustomElement$1() { const components = ["fw-file-uploader", "fw-file-uploader-file", "fw-file-uploader-progress", "fw-icon", "fw-spinner", "fw-toast-message"]; components.forEach(tagName => { switch (tagName) { case "fw-file-uploader": if (!customElements.get(tagName)) { customElements.define(tagName, FileUploader); } break; case "fw-file-uploader-file": if (!customElements.get(tagName)) { defineCustomElement$6(); } break; case "fw-file-uploader-progress": if (!customElements.get(tagName)) { defineCustomElement$5(); } break; case "fw-icon": if (!customElements.get(tagName)) { defineCustomElement$4(); } break; case "fw-spinner": if (!customElements.get(tagName)) { defineCustomElement$3(); } break; case "fw-toast-message": if (!customElements.get(tagName)) { defineCustomElement$2(); } break; } }); } const FwFileUploader = FileUploader; const defineCustomElement = defineCustomElement$1; export { FwFileUploader, defineCustomElement };