v5gl-form-builder
Version:
Customise form builder from ecsite
677 lines (608 loc) • 23.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _UUID = _interopRequireDefault(require("../UUID"));
var _core = require("@material-ui/core");
var _reactTextareaAutosize = _interopRequireDefault(require("react-textarea-autosize"));
var _CheckCircle = _interopRequireDefault(require("@material-ui/icons/CheckCircle"));
var _RadioButtonUnchecked = _interopRequireDefault(require("@material-ui/icons/RadioButtonUnchecked"));
var _icons = require("@material-ui/icons");
var _materialElementsConfig = require("../material-elements-config");
var _store = _interopRequireDefault(require("../stores/store"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function isDefaultItem(item) {
var keys = Object.keys(item);
return keys.filter(function (x) {
return x !== 'element' && x !== 'key';
}).length === 0;
}
function buildItems(items, defaultItems) {
if (!items) {
return defaultItems;
}
return items.map(function (x) {
var found;
if (isDefaultItem(x)) {
found = defaultItems.find(function (y) {
return (x.element || x.key) === (y.element || y.key);
});
}
return found || x;
});
}
var ConfigurableOptions = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(ConfigurableOptions, _React$Component);
var _super = _createSuper(ConfigurableOptions);
function ConfigurableOptions(props) {
var _this;
(0, _classCallCheck2["default"])(this, ConfigurableOptions);
_this = _super.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "checkListTextAreaHandleChange", function (e) {
var this_element = _this.state.element;
var text = e.target.value;
var optionsData = text.split('\n');
this_element.customOptions.optionsText = text;
this_element.checkListOptions = [];
var headerList = [];
for (var i = 0; i < optionsData.length; i++) {
var data = optionsData[i];
var splittedData = data.split(':');
var headerValue = {
label: splittedData[0],
headerId: i.toString(),
required: false
};
if (splittedData[1] != undefined && splittedData[1].trim() == "text") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.placeholder = splittedData[2];
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "number") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.placeholder = splittedData[2];
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "textarea") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.placeholder = splittedData[2];
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "dropdown") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
var options = splittedData[2].split(',');
headerValue.options = [];
for (var j = 0; j < options.length; j++) {
headerValue.options.push({
value: options[j],
label: options[j],
key: _UUID["default"].uuid()
});
}
}
if (splittedData[3] != undefined) {
headerValue.placeholder = splittedData[2];
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "radio") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
var _options = splittedData[2].split(',');
headerValue.options = [];
for (var _j = 0; _j < _options.length; _j++) {
headerValue.options.push({
value: _options[_j],
label: _options[_j],
key: _UUID["default"].uuid()
});
}
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "checkbox") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
var _options2 = splittedData[2].split(',');
headerValue.options = [];
for (var _j2 = 0; _j2 < _options2.length; _j2++) {
headerValue.options.push({
value: _options2[_j2],
label: _options2[_j2],
key: _UUID["default"].uuid()
});
}
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "date") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.dateFormat = splittedData[2].trim();
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "time") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.placeholder = splittedData[2];
}
} else if (splittedData[1] != undefined && splittedData[1].trim() == "static") {
headerValue.type = splittedData[1].trim();
if (splittedData[2] != undefined) {
headerValue.staticText = splittedData[2];
}
}
headerList.push(headerValue);
}
this_element.headerList = headerList;
_this.setState({
element: this_element,
dirty: true
}); // this.props.updateElement.call(this.props.preview, this_element);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "maximalRows", function (e) {
var this_element = _this.state.element;
var value = e.target.value;
this_element.customOptions.maximalRows = value;
_this.setState({
element: this_element,
dirty: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "minimalRows", function (e) {
var this_element = _this.state.element;
var value = e.target.value;
this_element.customOptions.minimalRows = value;
if (this_element.customOptions.minimalRows > 1) {
var previousData = this_element.rows;
this_element.rows = [];
for (var i = 0; i < this_element.customOptions.minimalRows; i++) {
previousData.rowId = i;
this_element.rows.push(previousData);
}
}
_this.setState({
element: this_element,
dirty: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addLabelChange", function (e) {
var this_element = _this.state.element;
var value = e.target.value;
this_element.customOptions.labelAdd = value;
_this.setState({
element: this_element,
dirty: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "removeLabelChange", function (e) {
var this_element = _this.state.element;
var value = e.target.value;
this_element.customOptions.labelRemove = value;
_this.setState({
element: this_element,
dirty: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "tableRowActions", function (elemProp) {
var this_element = _this.state.element;
if (!this_element.customOptions[elemProp]) {
this_element.customOptions[elemProp] = true;
} else {
this_element.customOptions[elemProp] = false; // this_element.customOptions.headerList.map((h, i) => {
// this_element.customOptions.headerList[i]["required"] = false;
// });
}
_this.setState({
element: this_element,
dirty: true
});
});
var items = buildItems(_this.getItemsConfig(props.items), _this._defaultItems());
_this.state = {
element: _this.props.element,
data: _this.props.data,
dirty: false,
items: items,
count: [0],
headerList: {}
};
return _this;
}
(0, _createClass2["default"])(ConfigurableOptions, [{
key: "_defaultItems",
value: function _defaultItems() {
return [{
key: 'Header',
name: 'Header Text',
icon: 'fas fa-heading',
"static": true,
content: 'Placeholder Text...'
}, {
key: 'Label',
name: 'Label',
"static": true,
icon: 'fas fa-font',
content: 'Placeholder Text...'
}, {
key: 'Paragraph',
name: 'Paragraph',
"static": true,
icon: 'fas fa-paragraph',
content: 'Placeholder Text...'
}, {
key: 'LineBreak',
name: 'Line Break',
"static": true,
icon: 'fas fa-arrows-alt-h'
}, {
key: 'Dropdown',
canHaveAnswer: true,
name: 'Dropdown',
icon: 'far fa-caret-square-down',
label: 'Placeholder Label',
fieldName: 'dropdown_',
options: []
}, {
key: 'Tags',
canHaveAnswer: true,
name: 'Tags',
icon: 'fas fa-tags',
label: 'Placeholder Label',
fieldName: 'tags_',
options: []
}, {
key: 'Checkboxes',
canHaveAnswer: true,
name: 'Checkboxes',
icon: 'far fa-check-square',
label: 'Placeholder Label',
fieldName: 'checkboxes_',
options: []
}, {
key: 'RadioButtons',
canHaveAnswer: true,
name: 'Multiple Choice',
icon: 'far fa-dot-circle',
label: 'Placeholder Label',
fieldName: 'radiobuttons_',
options: []
}, {
key: 'TextInput',
canHaveAnswer: true,
name: 'Text Input',
label: 'Placeholder Label',
icon: 'fas fa-font',
fieldName: 'text_input_'
}, {
key: 'NumberInput',
canHaveAnswer: true,
name: 'Number Input',
label: 'Placeholder Label',
icon: 'fas fa-plus',
fieldName: 'number_input_'
}, {
key: 'TextArea',
canHaveAnswer: true,
name: 'Multi-line Input',
label: 'Placeholder Label',
icon: 'fas fa-text-height',
fieldName: 'text_area_'
}, {
key: 'Image',
name: 'Image',
label: '',
icon: 'far fa-image',
fieldName: 'image_',
src: ''
}, {
key: 'Rating',
canHaveAnswer: true,
name: 'Rating',
label: 'Placeholder Label',
icon: 'fas fa-star',
fieldName: 'rating_'
}, {
key: 'DatePicker',
canDefaultToday: true,
canReadOnly: true,
dateFormat: 'MM/dd/yyyy',
timeFormat: 'hh:mm aa',
showTimeSelect: false,
showTimeSelectOnly: false,
name: 'Date',
icon: 'far fa-calendar-alt',
label: 'Placeholder Label',
fieldName: 'date_picker_'
}, {
key: 'Signature',
canReadOnly: true,
name: 'Signature',
icon: 'fas fa-pen-square',
label: 'Signature',
fieldName: 'signature_'
}, {
key: 'HyperLink',
name: 'Web site',
icon: 'fas fa-link',
"static": true,
content: 'Placeholder Web site link ...',
href: 'http://www.example.com'
}, {
key: 'Download',
name: 'File Attachment',
icon: 'fas fa-file',
"static": true,
content: 'Placeholder file name ...',
fieldName: 'download_',
file_path: '',
_href: ''
}, {
key: 'Range',
name: 'Range',
icon: 'fas fa-sliders-h',
label: 'Placeholder Label',
fieldName: 'range_',
step: 1,
default_value: 3,
min_value: 1,
max_value: 5,
min_label: 'Easy',
max_label: 'Difficult'
}, {
key: 'Camera',
name: 'Camera',
icon: 'fas fa-camera',
label: 'Placeholder Label',
fieldName: 'camera_'
}, {
key: "Button",
canHaveAnswer: true,
name: "Button",
icon: "fas fa-digital-tachograph",
label: "Placeholder Label",
fieldName: "button",
options: []
}];
}
}, {
key: "getItemsConfig",
value: function getItemsConfig(items) {
if (!items) return null;
var items_list = [];
items.map(function (item) {
if (_materialElementsConfig.ITEMS_LIST[item]) items_list.push(_materialElementsConfig.ITEMS_LIST[item]);
});
return items_list;
}
}, {
key: "updateOption",
value: function updateOption() {
var this_element = this.state.element; // to prevent ajax calls with no change
if (this.state.dirty) {
this.props.updateElement.call(this.props.preview, this_element);
this.setState({
dirty: false
});
}
}
}, {
key: "removeTableHeader",
value: function removeTableHeader(el) {
var count = (0, _toConsumableArray2["default"])(this.state.count); // make a separate copy of the array
var index = count.indexOf(el);
if (index !== -1) {
count.splice(index, 1);
this.setState({
count: count
});
}
}
}, {
key: "render",
value: function render() {
var _this2 = this;
if (this.state.dirty) {
this.state.element.dirty = true;
}
var btnStyle = {
color: "#50BEB6",
border: "1px solid #50BEB6",
backgroundColor: "#F0FBF9"
};
var gridContainer = {};
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
container: true,
spacing: 2,
className: "padding-top-10"
}, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
item: true,
xs: 12
}, /*#__PURE__*/_react["default"].createElement(_core.FormLabel, {
component: "legend"
}, "Rows Count:")), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
item: true,
xs: 12
}, /*#__PURE__*/_react["default"].createElement(_core.TextField, {
type: "number",
variant: "outlined",
style: {
width: "100%"
},
placeholder: "Size",
value: this.props.element.customOptions.maximalRows,
onChange: this.maximalRows
})), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
item: true,
xs: 12,
className: "mt-3"
}, /*#__PURE__*/_react["default"].createElement(_core.FormLabel, {
component: "legend"
}, "Table Row Actions:")), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
container: true,
className: "ml-2"
}, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
xs: 4
}, /*#__PURE__*/_react["default"].createElement(_core.Tooltip, {
title: "If Edit is deselected, user will not be allowed to enter any data"
}, /*#__PURE__*/_react["default"].createElement(_core.Button, {
variant: "contained",
onClick: function onClick() {
return _this2.tableRowActions("editRow");
},
className: "".concat(this.props.element.customOptions.editRow ? "tableButtonEnabled" : "tableButtonDisabled")
}, "Edit"))), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
xs: 4
}, /*#__PURE__*/_react["default"].createElement(_core.Button, {
variant: "contained",
onClick: function onClick() {
return _this2.tableRowActions("viewRow");
},
className: "".concat(this.props.element.customOptions.viewRow ? "tableButtonEnabled" : "tableButtonDisabled")
}, "View")), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
xs: 4
}, /*#__PURE__*/_react["default"].createElement(_core.Button, {
variant: "contained",
onClick: function onClick() {
return _this2.tableRowActions("deleteRow");
},
className: "".concat(this.props.element.customOptions.deleteRow ? "tableButtonEnabled" : "tableButtonDisabled")
}, "Delete"))), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
item: true,
xs: 12,
sm: 12,
className: " padding-top-10 padding-bottom-10 mt-4"
}, /*#__PURE__*/_react["default"].createElement(_core.FormLabel, {
component: "legend"
}, "Table Header Labels:"), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
style: {
border: '1px solid lightgrey',
padding: "1rem",
backgroundColor: "rgba(0, 0, 0, 0.020)"
}
}, this.props.element.customOptions.headerList.map(function (el, index) {
var _React$createElement;
return /*#__PURE__*/_react["default"].createElement(_core.Grid, {
item: true,
xs: 12,
className: "mt-3"
}, /*#__PURE__*/_react["default"].createElement("div", {
justifyContent: "space-around",
alignItems: "center",
style: {
marginBottom: "2rem"
}
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "mr-3",
style: {
fontWeight: 500,
opacity: "0.7"
}
}, "Mandatory Field: "), /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel // this_required={this_required}
, {
name: "is_required",
style: {
position: "relative",
top: "3px"
},
control: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
variant: "outlined",
size: "small",
name: "No",
className: "mr-3",
onClick: function onClick(e) {
return _this2.props.handleTableOptions("required", index, false);
} // color={this_required ? "default" : "primary"}
//style={{ outline: "none", textTransform: "capitalize" }}
// className={`ml-4 mr-2 ${classes.btnStyle}`}
}, /*#__PURE__*/_react["default"].createElement("span", null, "No"), /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
className: "p-0 ml-1",
color: "primary",
name: "No",
icon: /*#__PURE__*/_react["default"].createElement(_RadioButtonUnchecked["default"], {
className: "checkboxSize"
}),
checked: !el.required,
checkedIcon: /*#__PURE__*/_react["default"].createElement(_CheckCircle["default"], {
className: "checkboxSize"
})
})), /*#__PURE__*/_react["default"].createElement(_core.Button, (_React$createElement = {
variant: "outlined",
size: "small" //style={{ outline: "none" }}
,
name: "Yes" // color={this_required ? "primary" : "default"}
}, (0, _defineProperty2["default"])(_React$createElement, "name", "is_required"), (0, _defineProperty2["default"])(_React$createElement, "onClick", function onClick(e) {
return _this2.props.handleTableOptions("required", index, true);
}), _React$createElement), /*#__PURE__*/_react["default"].createElement("span", null, "Yes"), /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
className: "p-0 ml-1",
color: "primary" // name="YES"
,
name: "is_required",
icon: /*#__PURE__*/_react["default"].createElement(_RadioButtonUnchecked["default"], {
className: "checkboxSize"
}),
checked: el.required,
checkedIcon: /*#__PURE__*/_react["default"].createElement(_CheckCircle["default"], {
className: "checkboxSize"
})
})))
})), /*#__PURE__*/_react["default"].createElement(_core.TextField, {
variant: "outlined",
select: true,
style: {
width: "100%"
},
value: el.type,
onChange: function onChange(e) {
return _this2.props.handleTableOptions("type", index, e);
}
}, _this2.state.items.map(function (item) {
return /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
value: item.label,
key: item.key
}, item.label);
})), /*#__PURE__*/_react["default"].createElement(_core.Grid, {
style: {
display: "flex",
alignItems: "center"
}
}, /*#__PURE__*/_react["default"].createElement(_core.TextField, {
type: "text",
variant: "outlined",
value: el.label,
className: "mt-3",
style: {
width: "90%"
},
onChange: function onChange(e) {
return _this2.props.handleTableOptions("label", index, e);
}
}), /*#__PURE__*/_react["default"].createElement(_icons.Add, {
className: "ml-4",
style: {
cursor: "pointer"
},
onClick: function onClick(e) {
return _this2.props.addTableOptions(index, e);
}
}), index !== 0 ? /*#__PURE__*/_react["default"].createElement(_icons.Remove, {
className: "ml-4",
style: {
cursor: "pointer"
},
onClick: function onClick() {
return _this2.props.removeTableOptions(index);
}
}) : null));
})))));
}
}]);
return ConfigurableOptions;
}(_react["default"].Component);
exports["default"] = ConfigurableOptions;