UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

199 lines (198 loc) • 8.89 kB
/** * DevExtreme (cjs/__internal/ui/file_uploader/file_upload_strategy.base.js) * Version: 25.2.5 * Build date: Fri Feb 20 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileUploadStrategyBase = void 0; var _deferred2 = require("../../../core/utils/deferred"); var _type = require("../../../core/utils/type"); var _m_deferred = require("../../core/utils/m_deferred"); class FileUploadStrategyBase { constructor(fileUploader) { this.fileUploader = fileUploader } upload(file) { if (file.isInitialized && file.isAborted) { var _this$fileUploader; null === (_this$fileUploader = this.fileUploader) || void 0 === _this$fileUploader || _this$fileUploader._resetFileState(file) } if (file.isValid() && !file.uploadStarted) { this._prepareFileBeforeUpload(file); this._uploadCore(file) } } abortUpload(file) { var _file$request; if (file._isError || file._isLoaded || file.isAborted || !file.uploadStarted) { return } file.isAborted = true; null === (_file$request = file.request) || void 0 === _file$request || _file$request.abort(); if (this._isCustomCallback("abortUpload")) { const { abortUpload: abortUpload } = this.fileUploader.option(); const arg = this._createUploadArgument(file); let deferred = null; try { const result = null === abortUpload || void 0 === abortUpload ? void 0 : abortUpload(file.value, arg); deferred = (0, _m_deferred.fromPromise)(result) } catch (error) { deferred = (0, _deferred2.Deferred)().reject(error).promise() } if (deferred && "done" in deferred) { var _deferred; null === (_deferred = deferred) || void 0 === _deferred || _deferred.done((() => file.onAbort.fire())).fail((error => this._handleFileError(file, error))) } } } _beforeSend(xhr, file) { var _this$fileUploader$_b, _this$fileUploader2; const arg = this._createUploadArgument(file); null === (_this$fileUploader$_b = (_this$fileUploader2 = this.fileUploader)._beforeSendAction) || void 0 === _this$fileUploader$_b || _this$fileUploader$_b.call(_this$fileUploader2, { request: xhr, file: file.value, uploadInfo: arg }); file.request = xhr } _createUploadArgument(_file) { return { bytesUploaded: 0, chunkCount: 0, customData: {}, chunkBlob: new Blob, chunkIndex: 0 } } _uploadCore(_file) {} _isCustomCallback(name) { var _this$fileUploader3; const callback = null === (_this$fileUploader3 = this.fileUploader) || void 0 === _this$fileUploader3 ? void 0 : _this$fileUploader3.option(name); return callback && (0, _type.isFunction)(callback) } _handleProgress(file, e) { if (file._isError) { return } file._isProgressStarted = true; this._handleProgressCore(file, e) } _handleProgressCore(_file, _e) {} _handleFileError(file, error) { file._isError = true; file.onError.fire(error) } _prepareFileBeforeUpload(file) { if (file.$file) { var _file$progressBar; null === (_file$progressBar = file.progressBar) || void 0 === _file$progressBar || _file$progressBar.dispose(); this.fileUploader._createFileProgressBar(file) } if (file.isInitialized) { return } file.onLoadStart.add(this._onUploadStarted.bind(this, file)); file.onLoad.add(this._onLoadedHandler.bind(this, file)); file.onError.add(this._onErrorHandler.bind(this, file)); file.onAbort.add(this._onAbortHandler.bind(this, file)); file.onProgress.add(this._onProgressHandler.bind(this, file)); file.isInitialized = true } _shouldHandleError(file, e) { return (this._isStatusError(e.status) || !file._isProgressStarted) && !file.isAborted } _isStatusError(status) { return status >= 400 && status < 500 || status >= 500 && status < 600 } _onUploadStarted(file, e) { var _this$fileUploader4, _this$fileUploader4$_; file.uploadStarted = true; null === (_this$fileUploader4 = this.fileUploader) || void 0 === _this$fileUploader4 || null === (_this$fileUploader4$_ = _this$fileUploader4._uploadStartedAction) || void 0 === _this$fileUploader4$_ || _this$fileUploader4$_.call(_this$fileUploader4, { file: file.value, event: e, request: file.request }) } _onAbortHandler(file, e) { var _this$fileUploader5, _this$fileUploader$_u, _this$fileUploader6; const args = { file: file.value, event: e, request: file.request, message: null === (_this$fileUploader5 = this.fileUploader) || void 0 === _this$fileUploader5 ? void 0 : _this$fileUploader5._getUploadAbortedStatusMessage() }; null === (_this$fileUploader$_u = (_this$fileUploader6 = this.fileUploader)._uploadAbortedAction) || void 0 === _this$fileUploader$_u || _this$fileUploader$_u.call(_this$fileUploader6, args); this.fileUploader._setStatusMessage(file, args.message); this.fileUploader._handleAllFilesUploaded() } _onErrorHandler(file, error) { var _this$fileUploader$_u2, _this$fileUploader7, _this$fileUploader$_s, _this$fileUploader8; const { uploadFailedMessage: uploadFailedMessage } = this.fileUploader.option(); const args = { file: file.value, event: void 0, request: file.request, error: error, message: uploadFailedMessage }; null === (_this$fileUploader$_u2 = (_this$fileUploader7 = this.fileUploader)._uploadErrorAction) || void 0 === _this$fileUploader$_u2 || _this$fileUploader$_u2.call(_this$fileUploader7, args); null === (_this$fileUploader$_s = (_this$fileUploader8 = this.fileUploader)._setStatusMessage) || void 0 === _this$fileUploader$_s || _this$fileUploader$_s.call(_this$fileUploader8, file, args.message); this.fileUploader._handleAllFilesUploaded() } _onLoadedHandler(file, e) { var _this$fileUploader$_u3, _this$fileUploader9; const { uploadedMessage: uploadedMessage } = this.fileUploader.option(); const args = { file: file.value, event: e, request: file.request, message: uploadedMessage }; file._isLoaded = true; null === (_this$fileUploader$_u3 = (_this$fileUploader9 = this.fileUploader)._uploadedAction) || void 0 === _this$fileUploader$_u3 || _this$fileUploader$_u3.call(_this$fileUploader9, args); this.fileUploader._setStatusMessage(file, args.message); this.fileUploader._handleAllFilesUploaded() } _onProgressHandler(file, e) { if (file) { const totalFilesSize = this.fileUploader._getTotalFilesSize(); const totalLoadedFilesSize = this.fileUploader._getTotalLoadedFilesSize(); const loaded = e.loaded ?? 0; const loadedSize = Math.min(loaded, file.value.size); const segmentSize = loadedSize - file.loadedSize; file.loadedSize = loadedSize; this.fileUploader._updateTotalProgress(totalFilesSize, totalLoadedFilesSize + segmentSize); this.fileUploader._updateProgressBar(file, this._getLoadedData(loadedSize, e.total, segmentSize, e)) } } _getLoadedData(loaded, total, currentSegmentSize, _event) { return { loaded: loaded, total: total, currentSegmentSize: currentSegmentSize } } _extendFormData(formData) { const { uploadCustomData: formDataEntries } = this.fileUploader.option(); for (const entryName in formDataEntries) { if (Object.prototype.hasOwnProperty.call(formDataEntries, entryName) && (0, _type.isDefined)(formDataEntries[entryName])) { formData.append(entryName, formDataEntries[entryName]) } } } } exports.FileUploadStrategyBase = FileUploadStrategyBase;