UNPKG

12.5 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
8
9var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
10
11var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12
13var _react = require('react');
14
15var _react2 = _interopRequireDefault(_react);
16
17var _lodash = require('lodash');
18
19var _reactBootstrap = require('react-bootstrap');
20
21var _MultiSelectInput = require('./InputComponents/MultiSelectInput');
22
23var _MultiSelectInput2 = _interopRequireDefault(_MultiSelectInput);
24
25var _CheckBoxInput = require('./InputComponents/CheckBoxInput');
26
27var _CheckBoxInput2 = _interopRequireDefault(_CheckBoxInput);
28
29var _RadioButtonInput = require('./InputComponents/RadioButtonInput');
30
31var _RadioButtonInput2 = _interopRequireDefault(_RadioButtonInput);
32
33var _SelectInput = require('./InputComponents/SelectInput');
34
35var _SelectInput2 = _interopRequireDefault(_SelectInput);
36
37var _TextInput = require('./InputComponents/TextInput');
38
39var _TextInput2 = _interopRequireDefault(_TextInput);
40
41var _TextAreaInput = require('./InputComponents/TextAreaInput');
42
43var _TextAreaInput2 = _interopRequireDefault(_TextAreaInput);
44
45function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
47function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
48
49function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
50
51function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
52
53var FORM_TYPES = {
54 TEXT_AREA: "TEXT_AREA",
55 TEXT_FIELD: "TEXT_FIELD",
56 CHECKBOX: "CHECKBOX",
57 RADIO: "RADIO",
58 SELECT: "SELECT",
59 MULTI: "MULTI"
60};
61
62var FormBuilder = function (_React$Component) {
63 _inherits(FormBuilder, _React$Component);
64
65 function FormBuilder() {
66 _classCallCheck(this, FormBuilder);
67
68 return _possibleConstructorReturn(this, (FormBuilder.__proto__ || Object.getPrototypeOf(FormBuilder)).apply(this, arguments));
69 }
70
71 _createClass(FormBuilder, [{
72 key: 'componentWillMount',
73 value: function componentWillMount() {
74 var newState = _extends({}, this.props.editAttributes);
75
76 this.setState({ item: newState });
77 }
78 }, {
79 key: 'componentWillReceiveProps',
80 value: function componentWillReceiveProps(newProps) {
81 var newState = _extends({}, newProps.editAttributes);
82
83 this.setState({ item: newState });
84 }
85 /***************************FORM GENERATORS*****************************/
86
87 }, {
88 key: 'generateForm',
89 value: function generateForm() {
90 var formData = arguments.length <= 0 || arguments[0] === undefined ? this.state.item : arguments[0];
91
92 var formItems = [];
93 var attributes = formData;
94 var selectorOptions = this.props.selectorOptions;
95 for (var key in attributes) {
96 var currentVal = attributes[key];
97 if ((typeof currentVal === 'undefined' ? 'undefined' : _typeof(currentVal)) == 'object') {
98 if (!(0, _lodash.isEmpty)(currentVal)) {
99 formItems.push(_react2.default.createElement(
100 'h4',
101 { key: key },
102 key
103 ));
104 formItems = formItems.concat(this.generateForm(currentVal));
105 }
106 } else if (selectorOptions.hasOwnProperty(key)) {
107 var options = selectorOptions[key];
108 if (options.length <= 4) {
109 if (currentVal instanceof Array) {
110 formItems.push(this.generateInputField(FORM_TYPES.CHECKBOX, key, currentVal, options));
111 } else {
112 formItems.push(this.generateInputField(FORM_TYPES.RADIO, key, currentVal, options));
113 }
114 } else {
115 if (currentVal instanceof Array) {
116 formItems.push(this.generateInputField(FORM_TYPES.MULTI, key, currentVal, options));
117 } else {
118 formItems.push(this.generateInputField(FORM_TYPES.SELECT, key, currentVal, options));
119 }
120 }
121 } else {
122 if (typeof currentVal == 'string' && (/\r|\n/.exec(currentVal) || currentVal.length > 50)) {
123 formItems.push(this.generateInputField(FORM_TYPES.TEXT_AREA, key, currentVal, null));
124 } else {
125 formItems.push(this.generateInputField(FORM_TYPES.TEXT_FIELD, key, currentVal, null));
126 }
127 }
128 }
129 return formItems;
130 }
131 }, {
132 key: 'generateInputField',
133 value: function generateInputField(inputType, inputLabel, inputValues, inputOptions) {
134 var inputComponent = null;
135 switch (inputType) {
136 case FORM_TYPES.TEXT_AREA:
137 inputComponent = _react2.default.createElement(_TextAreaInput2.default, {
138 key: inputLabel,
139 value: inputValues,
140 label: inputLabel,
141 onChange: this.textAreaChangeHandler.bind(this) });
142 break;
143 case FORM_TYPES.TEXT_FIELD:
144 inputComponent = _react2.default.createElement(_TextInput2.default, {
145 key: inputLabel,
146 value: inputValues,
147 label: inputLabel,
148 onChange: this.textFieldChangeHandler.bind(this) });
149 break;
150 case FORM_TYPES.CHECKBOX:
151 inputComponent = _react2.default.createElement(_CheckBoxInput2.default, {
152 key: inputLabel,
153 selected: inputValues,
154 options: inputOptions,
155 label: inputLabel,
156 onChange: this.checkboxChangeHandler.bind(this) });
157 break;
158 case FORM_TYPES.RADIO:
159 inputComponent = _react2.default.createElement(_RadioButtonInput2.default, {
160 key: inputLabel,
161 selected: inputValues,
162 options: inputOptions,
163 label: inputLabel,
164 onChange: this.radioChangeHandler.bind(this) });
165 break;
166 case FORM_TYPES.SELECT:
167 inputComponent = _react2.default.createElement(_SelectInput2.default, {
168 key: inputLabel,
169 selected: inputValues,
170 options: inputOptions,
171 label: inputLabel,
172 onChange: this.selectChangeHandler.bind(this) });
173 break;
174 case FORM_TYPES.MULTI:
175 inputComponent = _react2.default.createElement(_MultiSelectInput2.default, {
176 key: inputLabel,
177 selected: inputValues,
178 options: inputOptions,
179 label: inputLabel,
180 onChange: this.multiSelectChangeHandler.bind(this) });
181 break;
182 default:
183 }
184 return inputComponent;
185 }
186
187 /***************************CHANGE HANDLERS*****************************/
188
189 }, {
190 key: 'textAreaChangeHandler',
191 value: function textAreaChangeHandler(ev) {
192 var newState = _extends({}, this.state.item);
193 newState[ev.target.id] = ev.target.value;
194 this.setState({ item: newState });
195 }
196 }, {
197 key: 'textFieldChangeHandler',
198 value: function textFieldChangeHandler(ev) {
199 var newState = _extends({}, this.state.item);
200 newState[ev.target.id] = ev.target.value;
201 this.setState({ item: newState });
202 }
203 }, {
204 key: 'selectChangeHandler',
205 value: function selectChangeHandler(ev) {
206 var selectedIndex = ev.target.options.selectedIndex;
207 var newState = _extends({}, this.state.item);
208 if (typeof newState[ev.target.id] == 'number') {
209 newState[ev.target.id] = Number(ev.target.options[selectedIndex].value);
210 } else {
211 newState[ev.target.id] = ev.target.options[selectedIndex].value;
212 }
213 this.setState({ item: newState });
214 }
215 }, {
216 key: 'multiSelectChangeHandler',
217 value: function multiSelectChangeHandler(ev) {
218 var selectedOptions = [];
219 var options = ev.target.options;
220 var newState = _extends({}, this.state.item);
221 for (var i = 0; i < options.length; i++) {
222 if (options[i].selected) {
223 if (Number(options[i].value)) {
224 selectedOptions.push(Number(options[i].value));
225 } else {
226 selectedOptions.push(options[i].value);
227 }
228 }
229 }
230
231 newState[ev.target.id] = selectedOptions;
232 this.setState({ item: newState });
233 }
234 }, {
235 key: 'radioChangeHandler',
236 value: function radioChangeHandler(ev) {
237 var newState = _extends({}, this.state.item);
238 var newData = ev.target.id.split("-");
239 if (Number(newData[1])) {
240 newState[newData[0]] = Number(newData[1]);
241 } else {
242 newState[newData[0]] = newData[1];
243 }
244
245 this.setState({ item: newState });
246 }
247 }, {
248 key: 'checkboxChangeHandler',
249 value: function checkboxChangeHandler(ev) {
250 var newState = _extends({}, this.state.item);
251 var newData = ev.target.id.split("-");
252 newState[newData[0]] = newState[newData[0]].map(function (selectedItem) {
253 return selectedItem;
254 });
255
256 var selectedValues = newState[newData[0]];
257 if (Number(newData[1])) {
258 if ((0, _lodash.includes)(selectedValues, Number(newData[1]))) {
259 (0, _lodash.pull)(selectedValues, Number(newData[1]));
260 } else {
261 selectedValues.push(Number(newData[1]));
262 }
263 } else {
264 if ((0, _lodash.includes)(selectedValues, newData[1])) {
265 (0, _lodash.pull)(selectedValues, newData[1]);
266 } else {
267 selectedValues.push(newData[1]);
268 }
269 }
270 this.setState({ item: newState });
271 }
272
273 /***************************BUTTON HANDLERS*****************************/
274
275 }, {
276 key: 'onResetPressed',
277 value: function onResetPressed() {
278 this.setState({ item: this.props.editAttributes });
279 }
280
281 /***************************RENDER FUNCTION*****************************/
282
283 }, {
284 key: 'render',
285 value: function render() {
286 return _react2.default.createElement(
287 'form',
288 null,
289 this.generateForm(),
290 _react2.default.createElement(
291 _reactBootstrap.ButtonToolbar,
292 null,
293 _react2.default.createElement(
294 _reactBootstrap.Button,
295 {
296 bsStyle: 'danger',
297 bsSize: 'xs'
298 },
299 'Delete'
300 ),
301 _react2.default.createElement(
302 _reactBootstrap.Button,
303 {
304 bsStyle: 'info',
305 bsSize: 'xs', onClick: this.onResetPressed.bind(this) },
306 'Reset'
307 ),
308 _react2.default.createElement(
309 _reactBootstrap.Button,
310 {
311 bsStyle: 'success',
312 bsSize: 'xs'
313 },
314 'Save'
315 )
316 )
317 );
318 }
319 }]);
320
321 return FormBuilder;
322}(_react2.default.Component);
323
324exports.default = FormBuilder;
325
326
327FormBuilder.propTypes = {
328 editAttributes: _react2.default.PropTypes.object.isRequired,
329 selectorOptions: _react2.default.PropTypes.object.isRequired,
330 onDeletePressed: _react2.default.PropTypes.func.isRequired,
331 onSavePressed: _react2.default.PropTypes.func.isRequired
332};
\No newline at end of file