v5gl-form-builder
Version:
Customise form builder from ecsite
429 lines (375 loc) • 16.1 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _styles = require("@material-ui/core/styles");
var _core = require("@material-ui/core");
var _componentHeader = _interopRequireDefault(require("../form-elements/component-header"));
var _materialElementLabel = _interopRequireDefault(require("./material-element-label"));
var _colors = require("@material-ui/core/colors");
var _store = _interopRequireDefault(require("../stores/store"));
var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
var _dateFns = _interopRequireDefault(require("@date-io/date-fns"));
var _pickers = require("@material-ui/pickers");
var _icons = require("@material-ui/icons");
var _email = _interopRequireDefault(require("./email"));
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; } }
var useStyles = (0, _styles.makeStyles)(function (theme) {
return {
table: {
minWidth: 450
},
input: {
minWidth: 10,
width: '25ch'
},
margin: {
margin: theme.spacing(1)
},
tableHeaderRow: {
background: '#0000001F'
}
};
});
var theme = (0, _styles.createMuiTheme)({
palette: {
primary: _colors.green
}
});
function createData(name, calories, fat, carbs, protein) {
return {
name: name,
calories: calories,
fat: fat,
carbs: carbs,
protein: protein
};
}
var rows = [createData('Frozen yoghurt', 159, 6.0, 24, 4.0), createData('Ice cream sandwich', 237, 9.0, 37, 4.3), createData('Eclair', 262, 16.0, 24, 6.0), createData('Cupcake', 305, 3.7, 67, 4.3), createData('Gingerbread', 356, 16.0, 49, 3.9)];
var TextInputCells = function TextInputCells(props) {
var classes = useStyles();
var _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
selectedDate = _useState2[0],
setDate = _useState2[1];
var _useState3 = (0, _react.useState)(null),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
selectedTime = _useState4[0],
setTime = _useState4[1];
var setSelectedDate = function setSelectedDate(date) {
setDate(date);
};
var setSelectedTime = function setSelectedTime(time) {
setTime(time);
};
var data = '';
console.log(props.data.required);
if (props.data.type == "Short Text Field") {
data = /*#__PURE__*/_react["default"].createElement(_core.TextField, {
size: "small",
disabled: props.customOptions.editRow ? false : true,
required: props.data.required,
variant: props.fieldVariant,
helperText: props.data.required ? "This Field Is Required" : "",
placeholder: props.data.placeholder
});
} else if (props.data.type == "Long Text Field") {
data = /*#__PURE__*/_react["default"].createElement(_core.TextField, {
size: "small",
multiline: true,
disabled: props.customOptions.editRow ? false : true,
rows: 3,
required: props.data.required,
variant: props.fieldVariant,
placeholder: props.data.placeholder
});
} else if (props.data.type == "Numbers") {
data = /*#__PURE__*/_react["default"].createElement(_core.TextField, {
size: "small",
type: "number",
disabled: props.customOptions.editRow ? false : true,
required: props.data.required,
variant: props.fieldVariant,
placeholder: props.data.placeholder
});
} else if (props.data.type == "Dropdown") {
data = /*#__PURE__*/_react["default"].createElement(_core.TextField, {
size: "small",
disabled: props.customOptions.editRow ? false : true,
variant: props.fieldVariant,
style: {
width: 200
},
select: true,
label: props.data.label,
required: props.data.required,
placeholder: props.data.placeholder
}, props.data != undefined && props.data.options != undefined && props.data.options.map(function (option) {
var this_key = "preview_".concat(option.key);
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
value: option.value,
key: this_key
}, option.label);
}));
} else if (props.data.type == "checkbox") {
data = props.data.options != undefined && props.data.options.map(function (option) {
return /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
disabled: props.customOptions.editRow ? false : true,
control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
checked: props.data.options[option.value],
name: option.value,
color: "primary"
}),
label: option.label
});
});
} else if (props.data.type == "Button Radio") {
data = /*#__PURE__*/_react["default"].createElement(_core.RadioGroup, {
row: true,
"aria-label": "material",
name: "single-choice",
required: props.data.required
}, props.data.options != undefined && props.data.options.map(function (option) {
return /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
key: option.key,
label: option.label,
value: option.value,
control: /*#__PURE__*/_react["default"].createElement(_core.Radio, {
color: "primary"
})
});
}));
} else if (props.data.type == "Date Picker") {
var dateFormat = "MM/dd/yyyy";
if (props.data.dateFormat != undefined) {
var dateFormat1 = 'MM/dd/yyyy';
var dateFormat2 = 'dd/MM/yyyy';
var dateFormat3 = 'yyyy/MM/dd';
var dateFormat4 = 'yyyy/dd/MM';
if (props.data.dateFormat.toLowerCase() == "mm/dd/yyyy") {
dateFormat = dateFormat1;
} else if (props.data.dateFormat.toLowerCase() == "dd/mm/yyyy") {
dateFormat = dateFormat2;
} else if (props.data.dateFormat.toLowerCase() == "yyyy/mm/dd") {
dateFormat = dateFormat3;
} else if (props.data.dateFormat.toLowerCase() == "yyyy/dd/mm") {
dateFormat = dateFormat4;
}
}
data = /*#__PURE__*/_react["default"].createElement(_pickers.MuiPickersUtilsProvider, {
utils: _dateFns["default"]
}, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
container: true,
justifyContent: "space-around"
}, /*#__PURE__*/_react["default"].createElement(_pickers.KeyboardDatePicker, {
disableToolbar: true,
variant: "inline",
inputVariant: props.fieldVariant,
format: dateFormat,
value: selectedDate,
onChange: setSelectedDate,
margin: "normal",
id: "date-picker-inline",
autoOk: true,
size: "medium",
placeholder: dateFormat.toUpperCase(),
KeyboardButtonProps: {
'aria-label': 'change date'
}
})));
} else if (props.data.type == "Time") {
data = /*#__PURE__*/_react["default"].createElement(_pickers.MuiPickersUtilsProvider, {
utils: _dateFns["default"]
}, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
container: true,
justifyContent: "space-around"
}, /*#__PURE__*/_react["default"].createElement(_pickers.KeyboardTimePicker, {
disabled: props.customOptions.editRow ? false : true,
margin: "normal",
id: "time-picker",
variant: "inline",
value: selectedTime,
onChange: setSelectedTime,
inputVariant: props.fieldVariant,
label: "Time picker",
KeyboardButtonProps: {
'aria-label': 'change time'
}
})));
} else if (props.data.type == "static") {
data = /*#__PURE__*/_react["default"].createElement(_core.FormLabel, null, props.data.staticText);
} else if (props.data.type = "Email") {
data = /*#__PURE__*/_react["default"].createElement(_core.TextField, {
size: "small",
variant: props.fieldVariant,
required: props.data.required,
disabled: props.customOptions.editRow ? false : true,
type: "email"
});
}
return data;
};
rows.map(function (row, index) {
return /*#__PURE__*/_react["default"].createElement(_core.TableRow, {
key: row
}, /*#__PURE__*/_react["default"].createElement(_core.TableCell, {
component: "th",
scope: "row",
align: "left"
}, /*#__PURE__*/_react["default"].createElement(TextInputCells, {
id: row + '' + index
})));
});
var MyTable = function MyTable(props) {
var classes = useStyles();
return /*#__PURE__*/_react["default"].createElement(_core.TableContainer, {
component: _core.Paper
}, /*#__PURE__*/_react["default"].createElement(_core.Table, {
className: classes.table,
"aria-label": "simple table"
}, /*#__PURE__*/_react["default"].createElement(_core.TableHead, null, /*#__PURE__*/_react["default"].createElement(_core.TableRow, {
className: classes.tableHeaderRow
}, props.tableHeaders.map(function (header, index) {
return /*#__PURE__*/_react["default"].createElement(_core.TableCell, {
align: "left",
style: {
padding: "12px"
},
key: index
}, /*#__PURE__*/_react["default"].createElement("b", null, header.label + (header.required ? " *" : "")));
}), /*#__PURE__*/_react["default"].createElement(_core.TableCell, {
align: "right",
style: {
padding: "12px"
}
}, /*#__PURE__*/_react["default"].createElement("b", null, props.customOptions.headerActionLabel)))), /*#__PURE__*/_react["default"].createElement(_core.TableBody, null, props.rows.map(function (row, rowIndex) {
return /*#__PURE__*/_react["default"].createElement(_core.TableRow, {
key: row.rowId
}, props.tableHeaders.map(function (header, cellIndex) {
return /*#__PURE__*/_react["default"].createElement(_core.TableCell, {
key: row + cellIndex,
component: "th",
scope: "row",
align: "left"
}, /*#__PURE__*/_react["default"].createElement(_core.Grid, {
style: {
width: '250px'
}
}, /*#__PURE__*/_react["default"].createElement(TextInputCells, {
customOptions: props.customOptions,
data: header,
options: header.options,
type: header.type,
required: header.required,
fieldVariant: props.fieldVariant,
id: row + '' + rowIndex
})));
}), /*#__PURE__*/_react["default"].createElement(_core.TableCell, {
key: row + props.tableHeaders.length + 1,
component: "th",
scope: "row",
align: "right"
}, props.customOptions.deleteRow ? /*#__PURE__*/_react["default"].createElement(_icons.Delete, {
value: rowIndex,
onClick: props.deleteRow,
style: {
cursor: "pointer"
}
}) : null));
}))));
};
var ConfigurableList = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(ConfigurableList, _React$Component);
var _super = _createSuper(ConfigurableList);
function ConfigurableList(props) {
var _this;
(0, _classCallCheck2["default"])(this, ConfigurableList);
_this = _super.call(this, props);
var onLoad = props.onLoad,
onPost = props.onPost;
_store["default"].setExternalHandler(onLoad, onPost);
_this.state = {
data: [props.data],
headerList: [],
rows: [//{ rowId: 0 }
]
};
_this.deleteRow = _this.deleteRow.bind((0, _assertThisInitialized2["default"])(_this));
return _this;
}
(0, _createClass2["default"])(ConfigurableList, [{
key: "addRow",
value: function addRow() {
console.log("Add Row");
var data = this.state.data;
var rows = data[0].hasOwnProperty('rows') ? data[0].rows : this.state.rows; // if (data[0].customOptions.maximalRows == rows.length) {
// return;
// }
rows.push({
rowId: rows.length
});
data[0].rows = rows;
var totalList = this.props.totalItems;
_store["default"].dispatch('updateOrder', totalList);
}
}, {
key: "deleteRow",
value: function deleteRow(rowIndex) {
var index = rowIndex.currentTarget.value;
console.log("Delete Row");
var data = this.state.data;
var rows = data[0].hasOwnProperty('rows') ? data[0].rows : this.state.rows;
rows.splice(index, 1); // rows.pop();
data[0].rows = rows;
var totalList = this.props.totalItems;
_store["default"].dispatch('updateOrder', totalList);
}
}, {
key: "render",
value: function render() {
var propsData = this.props.data;
var headerList = propsData.hasOwnProperty('headerList') ? propsData.headerList : this.state.headerList;
var rows = propsData.hasOwnProperty('rows') ? propsData.rows : this.state.rows;
var fieldVariant = "";
if (this.props.globalStyles) {
fieldVariant = !this.props.globalStyles.formDefault && this.props.data.hasOwnProperty("fieldVariant") ? this.props.data.fieldVariant : this.props.globalStyles.globalFieldVariant;
} else {
if (this.props.data.fieldVariant) fieldVariant = this.props.data.fieldVariant;
}
var CHARACTER_LIMIT = propsData.isCharLimit && propsData.charLimit > 0 ? propsData.charLimit : 0;
var formPreview = this.props.hasOwnProperty('isFormPreview') ? this.props.isFormPreview : false;
var maximalRows = this.props.data.customOptions.maximalRows;
return /*#__PURE__*/_react["default"].createElement("div", {
className: "SortableItem rfb-item"
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_materialElementLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(MyTable, {
deleteRow: this.deleteRow,
customOptions: propsData.customOptions,
tableHeaders: propsData.customOptions.headerList,
rows: rows,
fieldVariant: fieldVariant
}), (rows.length < parseInt(maximalRows) || maximalRows == "0") && /*#__PURE__*/_react["default"].createElement(_core.Button, {
onClick: this.addRow.bind(this),
style: {
color: "#2C3E93"
}
}, propsData.customOptions.labelAdd))));
}
}]);
return ConfigurableList;
}(_react["default"].Component);
var _default = ConfigurableList;
exports["default"] = _default;