coreui-form
Version:
488 lines (390 loc) • 16 kB
JavaScript
import HelperField from "../field";
import Utils from "../../utils";
import HelpersFieldsPropertiesName from "./properties/name";
import HelpersFieldsPropertiesLabel from "./properties/label";
import HelpersFieldsPropertiesDescription from "./properties/description";
import HelpersFieldsPropertiesDescriptionLabel from "./properties/descriptionLabel";
import HelpersFieldsPropertiesHelp from "./properties/help";
import HelpersFieldsPropertiesWidthLabel from "./properties/widthLabel";
import HelpersFieldsPropertiesRequired from "./properties/required";
import HelpersFieldsPropertiesReadonly from "./properties/readonly";
import HelpersFieldsPropertiesInvalidText from "./properties/invalidText";
import HelpersFieldsPropertiesValidText from "./properties/validText";
import HelpersFieldsPropertiesPrefix from "./properties/prefix";
import HelpersFieldsPropertiesSuffix from "./properties/sufix";
import HelpersFieldsPropertiesShow from "./properties/show";
import HelpersFieldsPropertiesFields from "./properties/fields";
import HelpersFieldsPropertiesNoSend from "./properties/noSend";
import HelpersFieldsPropertiesOn from "./properties/on";
import HelperFieldFileUpFile from "./fileUpload/file";
/**
* @extends {HelpersFieldsPropertiesName}
* @extends {HelpersFieldsPropertiesLabel}
* @extends {HelpersFieldsPropertiesDescription}
* @extends {HelpersFieldsPropertiesDescriptionLabel}
* @extends {HelpersFieldsPropertiesHelp}
* @extends {HelpersFieldsPropertiesReadonly}
* @extends {HelpersFieldsPropertiesRequired}
* @extends {HelpersFieldsPropertiesWidthLabel}
* @extends {HelpersFieldsPropertiesInvalidText}
* @extends {HelpersFieldsPropertiesValidText}
* @extends {HelpersFieldsPropertiesFields}
* @extends {HelpersFieldsPropertiesPrefix}
* @extends {HelpersFieldsPropertiesSuffix}
* @extends {HelpersFieldsPropertiesShow}
* @extends {HelpersFieldsPropertiesNoSend}
* @extends {HelpersFieldsPropertiesOn}
*/
class HelperFieldFileUpload extends HelperField {
_url = null;
_httpMethod = null;
_accept = null;
_showInput = null;
_showDropzone = null;
_autostart = null;
_sizeLimit = null;
_filesLimit = null;
_templateFile = null;
_extraFields = null;
_files = null;
/**
* @param {string} name
* @param {string} label
*/
constructor(name, label) {
super();
Object.assign(this, HelpersFieldsPropertiesName);
Object.assign(this, HelpersFieldsPropertiesLabel);
Object.assign(this, HelpersFieldsPropertiesDescription);
Object.assign(this, HelpersFieldsPropertiesDescriptionLabel);
Object.assign(this, HelpersFieldsPropertiesHelp);
Object.assign(this, HelpersFieldsPropertiesReadonly);
Object.assign(this, HelpersFieldsPropertiesRequired);
Object.assign(this, HelpersFieldsPropertiesWidthLabel);
Object.assign(this, HelpersFieldsPropertiesInvalidText);
Object.assign(this, HelpersFieldsPropertiesValidText);
Object.assign(this, HelpersFieldsPropertiesFields);
Object.assign(this, HelpersFieldsPropertiesPrefix);
Object.assign(this, HelpersFieldsPropertiesSuffix);
Object.assign(this, HelpersFieldsPropertiesShow);
Object.assign(this, HelpersFieldsPropertiesNoSend);
Object.assign(this, HelpersFieldsPropertiesOn);
this.setName(name);
this.setLabel(label);
}
/**
* Установка адреса для загружаемых файлов
* @param {string|null} url
* @return {HelperFieldFileUpload}
*/
setUrl(url = null) {
this._url = url;
return this;
}
/**
* Получение адреса для загружаемых файлов
* @return {string|null}
*/
getUrl() {
return this._url;
}
/**
* Установка http метода для загружаемых файлов
* @param {string|null} httpMethod
* @return {HelperFieldFileUpload}
*/
setHttpMethod(httpMethod = null) {
this._httpMethod = httpMethod;
return this;
}
/**
* Получение http метода для загружаемых файлов
* @return {string|null}
*/
getHttpMethod() {
return this._httpMethod;
}
/**
* Установка шаблона загружаемых файлов
* @param {string|null} template
* @return {HelperFieldFileUpload}
*/
setFileTemplate(template = null) {
this._templateFile = template;
return this;
}
/**
* Получение шаблона загружаемых файлов
* @return {string|null}
*/
getFileTemplate() {
return this._templateFile;
}
/**
* Установка свойства с ограничением по типу загружаемых файлов
* @param {string|null} accept
* @return {HelperFieldFileUpload}
*/
setAccept(accept = null) {
this._accept = accept;
return this;
}
/**
* Установка свойства с возможностью загружать только картинки
* @return {HelperFieldFileUpload}
*/
setAcceptImage() {
this._accept = 'image/*';
return this;
}
/**
* Установка свойства с возможностью загружать только видео
* @return {HelperFieldFileUpload}
*/
setAcceptVideo() {
this._accept = 'video/*';
return this;
}
/**
* Установка свойства с возможностью загружать только аудио
* @return {HelperFieldFileUpload}
*/
setAcceptAudio() {
this._accept = 'audio/*';
return this;
}
/**
* Установка свойства с возможностью загружать только PDF
* @return {HelperFieldFileUpload}
*/
setAcceptPDF() {
this._accept = 'application/pdf';
return this;
}
/**
* Установка свойства с возможностью загружать только zip
* @return {HelperFieldFileUpload}
*/
setAcceptZip() {
this._accept = 'application/zip, application/zip-compressed, application/x-zip-compressed, multipart/x-zip, application/octet-stream';
return this;
}
/**
* Получение свойства с ограничением по типу загружаемых файлов
* @return {string|null}
*/
getAccept() {
return this._accept;
}
/**
* Установка лимита в количестве загружаемых файлов
* @param {int|null} count
* @return this
*/
setFilesLimit(count = null) {
this._filesLimit = count;
return this;
}
/**
* Получение лимита в количестве загружаемых файлов
* @return {int|null}
*/
getFilesLimit() {
return this._filesLimit;
}
/**
* Установка лимита в размере загружаемых файлов
* @param {int|null} bytes
* @return this
*/
setSizeLimit(bytes = null) {
this._sizeLimit = bytes;
return this;
}
/**
* Получение лимита в размере загружаемых файлов
* @return {int|null}
*/
getSizeLimit() {
return this._sizeLimit;
}
/**
* Установка признака автоматической загрузки файлов
* @param {boolean|null} isAutostart
* @return this
*/
setAutostart(isAutostart = null) {
this._autostart = isAutostart;
return this;
}
/**
* Получение признака автоматической загрузки файлов
* @return {boolean|null}
*/
getAutostart() {
return this._autostart;
}
/**
* Установка признака для отображения поля для выбора файла
* @param {boolean|null} show
* @return this
*/
setShowInput(show = null) {
this._showInput = show;
return this;
}
/**
* Получение признака для отображения поля для выбора файла
* @return {boolean|null}
*/
getShowInput() {
return this._showInput;
}
/**
* Установка признака для отображения dropzone
* @param {boolean|null} show
* @return this
*/
setShowDropzone(show = null) {
this._showDropzone = show;
return this;
}
/**
* Получение признака для отображения dropzone
* @return {boolean|null}
*/
getShowDropzone() {
return this._showDropzone;
}
/**
* Установка дополнительных полей которые будут отправлены на сервер вместе с файлом
* @param {Array|null} fields
* @return this
*/
setExtraFields(fields = null) {
this._extraFields = fields;
return this;
}
/**
* Получение дополнительных полей которые будут отправлены на сервер вместе с файлом
* @return array|null
*/
getExtraFields() {
return this._extraFields;
}
/**
* Добавление загруженного ранее файла для отображения его в списке
* @param {string} name
* @return {HelperFieldFileUpFile}
*/
addFile(name) {
let file = new HelperFieldFileUpFile(name);
if ( ! Array.isArray(this._files)) {
this._files = [];
}
this._files.push(file);
return file;
}
/**
* Добавление загруженных ранее файлов для отображения их в списке
* @param {Array} files
* @return {HelperFieldFileUpload}
*/
addFiles(files) {
if ( ! Array.isArray(files)) {
return this;
}
let that = this;
files.map(function (fileData) {
if ( ! Utils.isObject(fileData) || ! fileData.name) {
return;
}
let file = new HelperFieldFileUpFile(fileData.name);
if (fileData.size && Utils.isNumeric(fileData.size)) {
file.setSize(fileData.size);
}
if (fileData.type && typeof fileData.type === 'string') {
file.setMimeType(fileData.type);
}
if (fileData.urlPreview && typeof fileData.urlPreview === 'string') {
file.setUrlPreview(fileData.urlPreview);
}
if (fileData.urlDownload && typeof fileData.urlDownload === 'string') {
file.setUrlDownload(fileData.urlDownload);
}
that._files.push(file);
});
return this;
}
/**
* Очистка ранее добавленных файлов
* @return {HelperFieldFileUpload}
*/
clearFiles() {
this._files = [];
return this;
}
/**
* Преобразование в объект
* @return {Array}
*/
toObject() {
let result = {
type : 'fileUpload'
};
if (this._name !== null) { result.name = this._name; }
if (this._label !== null) { result.label = this._label; }
if (this._help !== null) { result.help = this._help; }
if (this._description !== null) { result.description = this._description; }
if (this._descriptionLabel !== null) { result.descriptionLabel = this._descriptionLabel; }
if (this._required !== null) { result.required = this._required; }
if (this._readonly !== null) { result.readonly = this._readonly; }
if (this._widthLabel !== null) { result.widthLabel = this._widthLabel; }
if (this._invalidText !== null) { result.invalidText = this._invalidText; }
if (this._validText !== null) { result.validText = this._validText; }
if (this._prefix !== null) { result.prefix = this._prefix; }
if (this._suffix !== null) { result.suffix = this._suffix; }
if (this._show !== null) { result.show = this._show; }
if (this._position !== null) { result.position = this._position; }
if (this._noSend !== null) { result.noSend = this._noSend; }
if (this._on !== null) { result.on = this._on; }
result.options = {};
if (this._url !== null) { result.options.url = this._url; }
if (this._httpMethod !== null) { result.options.httpMethod = this._httpMethod; }
if (this._accept !== null) { result.options.accept = this._accept; }
if (this._filesLimit !== null) { result.options.filesLimit = this._filesLimit; }
if (this._sizeLimit !== null) { result.options.sizeLimit = this._sizeLimit; }
if (this._showInput !== null) { result.options.showInput = this._showInput; }
if (this._showDropzone !== null) { result.options.showDropzone = this._showDropzone; }
if (this._extraFields !== null) { result.options.extraFields = this._extraFields; }
if (this._autostart !== null) { result.options.autostart = this._autostart; }
if (this._templateFile !== null) { result.options.templateFile = this._templateFile; }
if (Array.isArray(this._files)) {
result.options.files = [];
this._files.map(function (file) {
if (Utils.isObject(file)) {
if (typeof file.toObject === 'function') {
result.options.files.push(file.toObject());
} else {
result.options.files.push(file);
}
}
});
}
if (Array.isArray(this._fields)) {
let fields = [];
this._fields.map(function (field) {
if (Utils.isObject(field)) {
if (typeof field.toObject === 'function') {
fields.push(field.toObject());
} else {
fields.push(field);
}
}
});
result.fields = fields;
}
return result;
}
}
export default HelperFieldFileUpload;