nfttrace-form-builder
Version:
A complete form builder for react.
1,421 lines (1,157 loc) • 75.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
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 _isomorphicFetch = _interopRequireDefault(require("isomorphic-fetch"));
var _fileSaver = require("file-saver");
var _react = _interopRequireDefault(require("react"));
var _reactSelect = _interopRequireDefault(require("react-select"));
var _reactSignatureCanvas = _interopRequireDefault(require("react-signature-canvas"));
var _reactBootstrapSlider = _interopRequireDefault(require("react-bootstrap-slider"));
var _starRating = _interopRequireDefault(require("./star-rating"));
var _datePicker = _interopRequireDefault(require("./date-picker"));
var _componentHeader = _interopRequireDefault(require("./component-header"));
var _componentLabel = _interopRequireDefault(require("./component-label"));
var _myxss = _interopRequireDefault(require("./myxss"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
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 { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var FormElements = {};
var Header = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(Header, _React$Component);
var _super = _createSuper(Header);
function Header() {
(0, _classCallCheck2["default"])(this, Header);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(Header, [{
key: "render",
value: function render() {
// const headerClasses = `dynamic-input ${this.props.data.element}-input`;
var classNames = "static";
if (this.props.data.bold) {
classNames += " bold";
}
if (this.props.data.italic) {
classNames += " italic";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("h3", {
className: classNames,
dangerouslySetInnerHTML: {
__html: _myxss["default"].process(this.props.data.content)
}
}));
}
}]);
return Header;
}(_react["default"].Component);
var Paragraph = /*#__PURE__*/function (_React$Component2) {
(0, _inherits2["default"])(Paragraph, _React$Component2);
var _super2 = _createSuper(Paragraph);
function Paragraph() {
(0, _classCallCheck2["default"])(this, Paragraph);
return _super2.apply(this, arguments);
}
(0, _createClass2["default"])(Paragraph, [{
key: "render",
value: function render() {
var classNames = "static";
if (this.props.data.bold) {
classNames += " bold";
}
if (this.props.data.italic) {
classNames += " italic";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("p", {
className: classNames,
dangerouslySetInnerHTML: {
__html: _myxss["default"].process(this.props.data.content)
}
}));
}
}]);
return Paragraph;
}(_react["default"].Component);
var Label = /*#__PURE__*/function (_React$Component3) {
(0, _inherits2["default"])(Label, _React$Component3);
var _super3 = _createSuper(Label);
function Label() {
(0, _classCallCheck2["default"])(this, Label);
return _super3.apply(this, arguments);
}
(0, _createClass2["default"])(Label, [{
key: "render",
value: function render() {
var classNames = "static";
if (this.props.data.bold) {
classNames += " bold";
}
if (this.props.data.italic) {
classNames += " italic";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("label", {
className: "".concat(classNames, " form-label"),
dangerouslySetInnerHTML: {
__html: _myxss["default"].process(this.props.data.content)
}
}));
}
}]);
return Label;
}(_react["default"].Component);
var LineBreak = /*#__PURE__*/function (_React$Component4) {
(0, _inherits2["default"])(LineBreak, _React$Component4);
var _super4 = _createSuper(LineBreak);
function LineBreak() {
(0, _classCallCheck2["default"])(this, LineBreak);
return _super4.apply(this, arguments);
}
(0, _createClass2["default"])(LineBreak, [{
key: "render",
value: function render() {
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("hr", null));
}
}]);
return LineBreak;
}(_react["default"].Component);
var TextInput = /*#__PURE__*/function (_React$Component5) {
(0, _inherits2["default"])(TextInput, _React$Component5);
var _super5 = _createSuper(TextInput);
function TextInput(props) {
var _this;
(0, _classCallCheck2["default"])(this, TextInput);
_this = _super5.call(this, props);
_this.inputField = /*#__PURE__*/_react["default"].createRef();
return _this;
}
(0, _createClass2["default"])(TextInput, [{
key: "render",
value: function render() {
var props = {};
props.type = "text";
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
if (this.props.read_only) {
props.disabled = "disabled";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
}
}]);
return TextInput;
}(_react["default"].Component);
var EmailInput = /*#__PURE__*/function (_React$Component6) {
(0, _inherits2["default"])(EmailInput, _React$Component6);
var _super6 = _createSuper(EmailInput);
function EmailInput(props) {
var _this2;
(0, _classCallCheck2["default"])(this, EmailInput);
_this2 = _super6.call(this, props);
_this2.inputField = /*#__PURE__*/_react["default"].createRef();
return _this2;
}
(0, _createClass2["default"])(EmailInput, [{
key: "render",
value: function render() {
var props = {};
props.type = "text";
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
if (this.props.read_only) {
props.disabled = "disabled";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
}
}]);
return EmailInput;
}(_react["default"].Component);
var PhoneNumber = /*#__PURE__*/function (_React$Component7) {
(0, _inherits2["default"])(PhoneNumber, _React$Component7);
var _super7 = _createSuper(PhoneNumber);
function PhoneNumber(props) {
var _this3;
(0, _classCallCheck2["default"])(this, PhoneNumber);
_this3 = _super7.call(this, props);
_this3.inputField = /*#__PURE__*/_react["default"].createRef();
return _this3;
}
(0, _createClass2["default"])(PhoneNumber, [{
key: "render",
value: function render() {
var props = {};
props.type = "tel";
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
if (this.props.read_only) {
props.disabled = "disabled";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
}
}]);
return PhoneNumber;
}(_react["default"].Component);
var NumberInput = /*#__PURE__*/function (_React$Component8) {
(0, _inherits2["default"])(NumberInput, _React$Component8);
var _super8 = _createSuper(NumberInput);
function NumberInput(props) {
var _this4;
(0, _classCallCheck2["default"])(this, NumberInput);
_this4 = _super8.call(this, props);
_this4.inputField = /*#__PURE__*/_react["default"].createRef();
return _this4;
}
(0, _createClass2["default"])(NumberInput, [{
key: "render",
value: function render() {
var props = {};
props.type = "number";
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
if (this.props.read_only) {
props.disabled = "disabled";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("input", props)));
}
}]);
return NumberInput;
}(_react["default"].Component);
var TextArea = /*#__PURE__*/function (_React$Component9) {
(0, _inherits2["default"])(TextArea, _React$Component9);
var _super9 = _createSuper(TextArea);
function TextArea(props) {
var _this5;
(0, _classCallCheck2["default"])(this, TextArea);
_this5 = _super9.call(this, props);
_this5.inputField = /*#__PURE__*/_react["default"].createRef();
return _this5;
}
(0, _createClass2["default"])(TextArea, [{
key: "render",
value: function render() {
var props = {};
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.read_only) {
props.disabled = "disabled";
}
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("textarea", props)));
}
}]);
return TextArea;
}(_react["default"].Component);
var Dropdown = /*#__PURE__*/function (_React$Component10) {
(0, _inherits2["default"])(Dropdown, _React$Component10);
var _super10 = _createSuper(Dropdown);
function Dropdown(props) {
var _this6;
(0, _classCallCheck2["default"])(this, Dropdown);
_this6 = _super10.call(this, props);
_this6.inputField = /*#__PURE__*/_react["default"].createRef();
return _this6;
}
(0, _createClass2["default"])(Dropdown, [{
key: "render",
value: function render() {
var props = {};
props.className = "form-control";
props.name = this.props.data.field_name;
if (this.props.mutable) {
props.defaultValue = this.props.defaultValue;
props.ref = this.inputField;
}
if (this.props.read_only) {
props.disabled = "disabled";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement("select", props, this.props.data.options.map(function (option) {
var this_key = "preview_".concat(option.key);
return /*#__PURE__*/_react["default"].createElement("option", {
value: option.value,
key: this_key
}, option.text);
}))));
}
}]);
return Dropdown;
}(_react["default"].Component);
var Signature = /*#__PURE__*/function (_React$Component11) {
(0, _inherits2["default"])(Signature, _React$Component11);
var _super11 = _createSuper(Signature);
function Signature(props) {
var _this7;
(0, _classCallCheck2["default"])(this, Signature);
_this7 = _super11.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "clear", function () {
if (_this7.state.defaultValue) {
_this7.setState({
defaultValue: ""
});
} else if (_this7.canvas.current && _this7.canvas.current.clear) {
_this7.canvas.current.clear();
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "preventTouchScroll", function (e) {
var canvasEl = _this7.canvas.current && typeof _this7.canvas.current.getCanvas === "function" ? _this7.canvas.current.getCanvas() : null;
if (e.target === canvasEl) {
e.preventDefault();
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "isTouchDevice", function () {
return "ontouchstart" in window || navigator.maxTouchPoints > 0;
});
_this7.state = {
defaultValue: props.defaultValue
};
_this7.inputField = /*#__PURE__*/_react["default"].createRef();
_this7.canvas = /*#__PURE__*/_react["default"].createRef();
return _this7;
}
(0, _createClass2["default"])(Signature, [{
key: "componentDidMount",
value: function componentDidMount() {
if (this.isTouchDevice() && this.canvas.current && typeof this.canvas.current.getCanvas === "function") {
var canvas = this.canvas.current.getCanvas();
canvas.addEventListener("touchstart", this.preventTouchScroll, {
passive: false
});
canvas.addEventListener("touchmove", this.preventTouchScroll, {
passive: false
});
canvas.addEventListener("touchend", this.preventTouchScroll, {
passive: false
});
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.isTouchDevice() && this.canvas.current && typeof this.canvas.current.getCanvas === "function") {
var canvas = this.canvas.current.getCanvas();
canvas.removeEventListener("touchstart", this.preventTouchScroll);
canvas.removeEventListener("touchmove", this.preventTouchScroll);
canvas.removeEventListener("touchend", this.preventTouchScroll);
}
}
}, {
key: "render",
value: function render() {
var defaultValue = this.state.defaultValue;
var canClear = !!defaultValue;
var props = {
type: "hidden",
name: this.props.data.field_name
};
if (this.props.mutable) {
props.defaultValue = defaultValue;
props.ref = this.inputField;
}
var pad_props = {};
if (this.props.mutable) {
pad_props.defaultValue = defaultValue;
pad_props.ref = this.canvas;
canClear = !this.props.read_only;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
var sourceDataURL;
if (defaultValue && defaultValue.length > 0) {
sourceDataURL = "data:image/png;base64,".concat(defaultValue);
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "d-flex justify-content-between w-100"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), canClear && /*#__PURE__*/_react["default"].createElement("div", {
className: "btn btn-image-clear m-0 p-0",
onClick: this.clear
}, /*#__PURE__*/_react["default"].createElement("i", {
className: "fas fa-times clear-signature",
title: "Clear Signature"
}), "\xA0 Clear")), this.props.read_only === true || !!sourceDataURL ? /*#__PURE__*/_react["default"].createElement("img", {
src: sourceDataURL,
alt: "signature-preview"
}) : /*#__PURE__*/_react["default"].createElement(_reactSignatureCanvas["default"], pad_props), /*#__PURE__*/_react["default"].createElement("input", props)));
}
}]);
return Signature;
}(_react["default"].Component);
var Tags = /*#__PURE__*/function (_React$Component12) {
(0, _inherits2["default"])(Tags, _React$Component12);
var _super12 = _createSuper(Tags);
function Tags(props) {
var _this8;
(0, _classCallCheck2["default"])(this, Tags);
_this8 = _super12.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "handleChange", function (e) {
_this8.setState({
value: e || []
});
});
_this8.inputField = /*#__PURE__*/_react["default"].createRef();
var defaultValue = props.defaultValue,
data = props.data;
_this8.state = {
value: _this8.getDefaultValue(defaultValue, data.options)
};
return _this8;
}
(0, _createClass2["default"])(Tags, [{
key: "getDefaultValue",
value: function getDefaultValue(defaultValue, options) {
if (defaultValue) {
if (typeof defaultValue === "string") {
var vals = defaultValue.split(",").map(function (x) {
return x.trim();
});
return options.filter(function (x) {
return vals.indexOf(x.value) > -1;
});
}
return options.filter(function (x) {
return defaultValue.indexOf(x.value) > -1;
});
}
return [];
} // state = { value: this.props.defaultValue !== undefined ? this.props.defaultValue.split(',') : [] };
}, {
key: "render",
value: function render() {
var options = this.props.data.options.map(function (option) {
option.label = option.text;
return option;
});
var props = {};
props.isMulti = true;
props.name = this.props.data.field_name;
props.onChange = this.handleChange;
props.options = options;
if (!this.props.mutable) {
props.value = options[0].text;
} // to show a sample of what tags looks like
if (this.props.mutable) {
props.isDisabled = this.props.read_only;
props.value = this.state.value;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement(_reactSelect["default"], props)));
}
}]);
return Tags;
}(_react["default"].Component);
var Checkboxes = /*#__PURE__*/function (_React$Component13) {
(0, _inherits2["default"])(Checkboxes, _React$Component13);
var _super13 = _createSuper(Checkboxes);
function Checkboxes(props) {
var _this9;
(0, _classCallCheck2["default"])(this, Checkboxes);
_this9 = _super13.call(this, props);
_this9.options = {};
return _this9;
}
(0, _createClass2["default"])(Checkboxes, [{
key: "render",
value: function render() {
var _this10 = this;
var self = this;
var classNames = "custom-control custom-checkbox";
if (this.props.data.inline) {
classNames += " option-inline";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.data.options.map(function (option) {
var this_key = "preview_".concat(option.key);
var props = {};
props.name = "option_".concat(option.key);
props.type = "checkbox";
props.value = option.value;
if (self.props.mutable) {
props.defaultChecked = self.props.defaultValue !== undefined && self.props.defaultValue.indexOf(option.key) > -1;
}
if (_this10.props.read_only) {
props.disabled = "disabled";
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: classNames,
key: this_key
}, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
id: "fid_".concat(this_key),
className: "custom-control-input",
ref: function ref(c) {
if (c && self.props.mutable) {
self.options["child_ref_".concat(option.key)] = c;
}
}
}, props)), /*#__PURE__*/_react["default"].createElement("label", {
className: "custom-control-label",
htmlFor: "fid_".concat(this_key)
}, option.text));
})));
}
}]);
return Checkboxes;
}(_react["default"].Component);
var RadioButtons = /*#__PURE__*/function (_React$Component14) {
(0, _inherits2["default"])(RadioButtons, _React$Component14);
var _super14 = _createSuper(RadioButtons);
function RadioButtons(props) {
var _this11;
(0, _classCallCheck2["default"])(this, RadioButtons);
_this11 = _super14.call(this, props);
_this11.options = {};
return _this11;
}
(0, _createClass2["default"])(RadioButtons, [{
key: "render",
value: function render() {
var _this12 = this;
var self = this;
var classNames = "custom-control custom-radio";
if (this.props.data.inline) {
classNames += " option-inline";
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.data.options.map(function (option) {
var this_key = "preview_".concat(option.key);
var props = {};
props.name = self.props.data.field_name;
props.type = "radio";
props.value = option.value;
if (self.props.mutable) {
props.defaultChecked = self.props.defaultValue !== undefined && (self.props.defaultValue.indexOf(option.key) > -1 || self.props.defaultValue.indexOf(option.value) > -1);
}
if (_this12.props.read_only) {
props.disabled = "disabled";
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: classNames,
key: this_key
}, /*#__PURE__*/_react["default"].createElement("input", (0, _extends2["default"])({
id: "fid_".concat(this_key),
className: "custom-control-input",
ref: function ref(c) {
if (c && self.props.mutable) {
self.options["child_ref_".concat(option.key)] = c;
}
}
}, props)), /*#__PURE__*/_react["default"].createElement("label", {
className: "custom-control-label",
htmlFor: "fid_".concat(this_key)
}, option.text));
})));
}
}]);
return RadioButtons;
}(_react["default"].Component);
var Image = /*#__PURE__*/function (_React$Component15) {
(0, _inherits2["default"])(Image, _React$Component15);
var _super15 = _createSuper(Image);
function Image() {
(0, _classCallCheck2["default"])(this, Image);
return _super15.apply(this, arguments);
}
(0, _createClass2["default"])(Image, [{
key: "render",
value: function render() {
var style = this.props.data.center ? {
textAlign: "center"
} : null;
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread(_objectSpread({}, this.props.style), style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), this.props.data.src && /*#__PURE__*/_react["default"].createElement("img", {
src: this.props.data.src,
width: this.props.data.width,
height: this.props.data.height
}), !this.props.data.src && /*#__PURE__*/_react["default"].createElement("div", {
className: "no-image"
}, "No Image"));
}
}]);
return Image;
}(_react["default"].Component);
var Rating = /*#__PURE__*/function (_React$Component16) {
(0, _inherits2["default"])(Rating, _React$Component16);
var _super16 = _createSuper(Rating);
function Rating(props) {
var _this13;
(0, _classCallCheck2["default"])(this, Rating);
_this13 = _super16.call(this, props);
_this13.inputField = /*#__PURE__*/_react["default"].createRef();
return _this13;
}
(0, _createClass2["default"])(Rating, [{
key: "render",
value: function render() {
var props = {};
props.name = this.props.data.field_name;
props.ratingAmount = 5;
if (this.props.mutable) {
props.rating = this.props.defaultValue !== undefined ? parseFloat(this.props.defaultValue, 10) : 0;
props.editing = true;
props.disabled = this.props.read_only;
props.ref = this.inputField;
}
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), /*#__PURE__*/_react["default"].createElement(_starRating["default"], props)));
}
}]);
return Rating;
}(_react["default"].Component);
var HyperLink = /*#__PURE__*/function (_React$Component17) {
(0, _inherits2["default"])(HyperLink, _React$Component17);
var _super17 = _createSuper(HyperLink);
function HyperLink() {
(0, _classCallCheck2["default"])(this, HyperLink);
return _super17.apply(this, arguments);
}
(0, _createClass2["default"])(HyperLink, [{
key: "render",
value: function render() {
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement("label", {
className: "form-label"
}, /*#__PURE__*/_react["default"].createElement("a", {
target: "_blank",
href: this.props.data.href,
dangerouslySetInnerHTML: {
__html: _myxss["default"].process(this.props.data.content)
}
}))));
}
}]);
return HyperLink;
}(_react["default"].Component);
var Download = /*#__PURE__*/function (_React$Component18) {
(0, _inherits2["default"])(Download, _React$Component18);
var _super18 = _createSuper(Download);
function Download() {
(0, _classCallCheck2["default"])(this, Download);
return _super18.apply(this, arguments);
}
(0, _createClass2["default"])(Download, [{
key: "render",
value: function render() {
var baseClasses = "SortableItem rfb-item";
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "".concat(this.props.download_path, "?id=").concat(this.props.data.file_path)
}, this.props.data.content)));
}
}]);
return Download;
}(_react["default"].Component);
var Camera = /*#__PURE__*/function (_React$Component19) {
(0, _inherits2["default"])(Camera, _React$Component19);
var _super19 = _createSuper(Camera);
function Camera(props) {
var _this14;
(0, _classCallCheck2["default"])(this, Camera);
_this14 = _super19.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "displayImage", function (e) {
var file = e.target.files[0];
if (!file) {
console.error("No file selected");
return;
}
_this14.setState({
isImageLoading: true,
isImagePreview: URL.createObjectURL(file)
});
var reader = new FileReader();
reader.onload = function (event) {
var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
var img = document.createElement("img"); // Use `document.createElement` for better compatibility
img.src = event.target.result; // Set the src
setTimeout(function () {
canvas.width = 500; // Set a fixed width (or use img.width if needed)
canvas.height = 500;
context.drawImage(img, 0, 0, canvas.width, canvas.height);
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
var latitude = position.coords.latitude.toFixed(5);
var longitude = position.coords.longitude.toFixed(5);
var locationText = "Lat: ".concat(latitude, ", Lng: ").concat(longitude);
_this14.addWatermark(canvas, context, locationText);
}, function (error) {
console.error("Error getting location:", error);
_this14.addWatermark(canvas, context, "Location not available");
});
} else {
console.error("Geolocation not supported");
_this14.addWatermark(canvas, context, "Location not supported");
}
}, 100); // Delay to allow rendering
};
reader.onerror = function () {
console.error("Error reading file");
};
reader.readAsDataURL(file);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "clearImage", function () {
_this14.setState({
img: null,
previewImg: null,
isImageCapturing: false,
imageUploading: false,
openCamera: false,
stream: null,
capturedImage: null,
locationError: null,
isImagePreview: null
});
_this14.stopCamera();
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "startCamera", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var isMobile, constraints, userStream;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_this14.setState({
isImageCapturing: true,
openCamera: true
});
if (!navigator.mediaDevices) {
_context.next = 15;
break;
}
_context.prev = 2;
// Check if the device is mobile
isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); // Set constraints based on device type
constraints = {
video: {
facingMode: isMobile ? {
exact: "environment"
} : "user" // Back camera for mobile, default for laptop
}
}; // Get user media with constraints
_context.next = 7;
return navigator.mediaDevices.getUserMedia(constraints);
case 7:
userStream = _context.sent;
_this14.setState({
stream: userStream
}); // Attach the stream to the video element
if (_this14.videoRef.current) {
_this14.videoRef.current.srcObject = userStream;
}
_context.next = 15;
break;
case 12:
_context.prev = 12;
_context.t0 = _context["catch"](2);
console.error("Error accessing the camera:", _context.t0);
case 15:
case "end":
return _context.stop();
}
}
}, _callee, null, [[2, 12]]);
})));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "stopCamera", function () {
var stream = _this14.state.stream;
if (stream) {
stream.getTracks().forEach(function (track) {
return track.stop();
});
}
_this14.setState({
stream: null,
isImageCapturing: false
});
if (_this14.videoRef.current) {
_this14.videoRef.current.srcObject = null;
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "checkLocationEnabled", function () {
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(function (position) {
// Geolocation is enabled
_this14.captureImageFromCamera();
_this14.setState({
locationError: null
});
}, function (error) {
// Handle geolocation errors
_this14.setState({
locationError: "Location access is required. Please enable location services."
});
});
} else {
_this14.setState({
locationError: "Geolocation is not supported by your browser."
});
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "captureImageFromCamera", function () {
var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this14),
videoRef = _assertThisInitialize.videoRef,
canvasRef = _assertThisInitialize.canvasRef,
inputRef = _assertThisInitialize.inputRef;
if (videoRef.current && canvasRef.current) {
var canvas = canvasRef.current;
var context = canvas.getContext("2d"); // Clear previous content
context.clearRect(0, 0, canvas.width, canvas.height); // Draw the video frame onto the canvas
context.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height); // Get user location
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
var latitude = position.coords.latitude.toFixed(5);
var longitude = position.coords.longitude.toFixed(5);
var locationText = "Lat: ".concat(latitude, ", Lng: ").concat(longitude); // Add date-time and location watermark
_this14.addWatermark(canvas, context, locationText);
}, function (error) {
console.error("Error getting location:", error);
_this14.addWatermark(canvas, context, "Location not available");
}, {
enableHighAccuracy: true
});
} else {
_this14.addWatermark(canvas, context, "Location not supported");
}
_this14.setState({
isImageCapturing: false,
imageUploading: true,
openCamera: false
});
_this14.stopCamera();
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "addWatermark", function (canvas, context, locationText) {
// Add watermark (current date & time)
var date = new Date().toLocaleDateString();
var time = new Date().toLocaleTimeString();
var dateTime = "".concat(date, " ").concat(time);
context.font = "10px Arial";
context.fillStyle = "white"; // Adjust color based on background
context.textAlign = "right"; // Add date-time at bottom-right
context.fillText(dateTime, canvas.width - 10, canvas.height - 22);
if (locationText) {
// Add location at bottom-left
context.fillText(locationText, canvas.width - 10, canvas.height - 8);
} // Convert canvas to image URL
var imageUrl = canvas.toDataURL("image/jpeg");
_this14.setState({
capturedImage: imageUrl
}); // Convert to Blob & File
canvas.toBlob(function (blob) {
var randomName = "mahakumbh-".concat(Math.floor(Math.random() * 100000), ".jpg");
var file = new File([blob], randomName, {
type: "image/jpeg"
});
var dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
if (_this14.inputRef.current) {
_this14.inputRef.current.files = dataTransfer.files;
}
_this14.setState({
img: _this14.inputRef.current.files[0],
previewImg: URL.createObjectURL(_this14.inputRef.current.files[0]),
isImageLoading: false,
isImagePreview: null
});
}, "image/jpeg");
});
_this14.state = {
img: null,
previewImg: null,
isImageCapturing: false,
imageUploading: false,
openCamera: false,
stream: null,
capturedImage: null,
fileError: null,
isImageLoading: false,
isImagePreview: null
};
_this14.videoRef = /*#__PURE__*/_react["default"].createRef();
_this14.canvasRef = /*#__PURE__*/_react["default"].createRef();
_this14.inputRef = /*#__PURE__*/_react["default"].createRef();
return _this14;
}
(0, _createClass2["default"])(Camera, [{
key: "getImageSizeProps",
value: function getImageSizeProps(_ref2) {
var width = _ref2.width,
height = _ref2.height;
var imgProps = {
width: "100%"
};
if (width) {
imgProps.width = width < window.innerWidth ? width : 0.9 * window.innerWidth;
}
if (height) {
imgProps.height = height;
}
return imgProps;
}
}, {
key: "render",
value: function render() {
var _this15 = this;
var openCamera = this.state.openCamera;
var imageStyle = {
objectFit: "scale-down",
objectPosition: this.props.data.center ? "center" : "left"
};
var baseClasses = "SortableItem rfb-item";
var name = this.props.data.field_name;
var fileInputStyle = this.state.img ? {
display: "none"
} : null;
if (this.props.data.pageBreakBefore) {
baseClasses += " alwaysbreak";
}
var sourceDataURL;
if (this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0) {
if (this.props.defaultValue.indexOf(name > -1)) {
sourceDataURL = this.props.defaultValue;
} else {
sourceDataURL = "data:image/png;base64,".concat(this.props.defaultValue);
}
}
return /*#__PURE__*/_react["default"].createElement("div", {
style: _objectSpread({}, this.props.style),
className: baseClasses
}, /*#__PURE__*/_react["default"].createElement(_componentHeader["default"], this.props), /*#__PURE__*/_react["default"].createElement("div", {
className: "form-group"
}, /*#__PURE__*/_react["default"].createElement(_componentLabel["default"], this.props), this.props.read_only === true && this.props.defaultValue && this.props.defaultValue.length > 0 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("img", (0, _extends2["default"])({
style: imageStyle,
src: sourceDataURL
}, this.getImageSizeProps(this.props.data)))) : /*#__PURE__*/_react["default"].createElement("div", {
className: "image-upload-container"
}, this.state.locationError && /*#__PURE__*/_react["default"].createElement("p", {
className: "alert alert-danger mt-3"
}, this.state.locationError), /*#__PURE__*/_react["default"].createElement("p", {
className: "alert alert-info mt-3"
}, "Please enable location services before capturing the image."), this.state.isImageLoading && /*#__PURE__*/_react["default"].createElement("div", {
className: "position-relative"
}, /*#__PURE__*/_react["default"].createElement("img", {
src: this.state.isImagePreview,
alt: "preview",
style: {
width: "100%",
filter: "blur(10px)",
height: 300,
padding: 10
}
}), /*#__PURE__*/_react["default"].createElement("div", {
className: "position-absolute",
style: {
top: "45%",
left: "45%",
transform: "translate(-50%, -50%)"
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "spinner-border text-primary position-absolute",
role: "status"
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "sr-only"
}, "Loading...")))), /*#__PURE__*/_react["default"].createElement("input", {
ref: this.inputRef,
type: "file",
style: {
display: "none"
}
}), /*#__PURE__*/_react["default"].createElement("div", {
style: fileInputStyle
}, /*#__PURE__*/_react["default"].createElement("input", {
name: name,
type: "file",
accept: "image/*",
capture: "camera",
className: "image-upload",
onChange: this.displayImage,
hidden: true,
id: "camera_field"
}), /*#__PURE__*/_react["default"].createElement("label", {
className: "image-upload-controls d-md-none",
htmlFor: "camera_field" // onClick={this.checkLocationEnabled}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "btn btn-default"
}, /*#__PURE__*/_react["default"].createElement("i", {
className: "fas fa-camera"
}), " Open Camera"), /*#__PURE__*/_react["default"].createElement("p", null, "Tap to open the camera and take a photo.")), /*#__PURE__*/_react["default"].createElement("div", {
className: "d-none d-md-block"
}, openCamera && /*#__PURE__*/_react["default"].createElement("video", {
ref: this.videoRef,
autoPlay: true,
style: {
width: "100%"
}
}), /*#__PURE__*/_react["default"].createElement("canvas", {
ref: this.canvasRef,
style: {
display: "none"
}
}), !this.state.capturedImage &&