UNPKG

33.4 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Form = undefined;
7
8var _regenerator = require("babel-runtime/regenerator");
9
10var _regenerator2 = _interopRequireDefault(_regenerator);
11
12var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
13
14var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
15
16var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties");
17
18var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
19
20var _defineProperty2 = require("babel-runtime/helpers/defineProperty");
21
22var _defineProperty3 = _interopRequireDefault(_defineProperty2);
23
24var _extends4 = require("babel-runtime/helpers/extends");
25
26var _extends5 = _interopRequireDefault(_extends4);
27
28var _keys = require("babel-runtime/core-js/object/keys");
29
30var _keys2 = _interopRequireDefault(_keys);
31
32var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray");
33
34var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
35
36var _taggedTemplateLiteral2 = require("babel-runtime/helpers/taggedTemplateLiteral");
37
38var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
39
40var _templateObject = (0, _taggedTemplateLiteral3.default)(["\n display: flex;\n flex-direction: row;\n width: 100%;\n"], ["\n display: flex;\n flex-direction: row;\n width: 100%;\n"]),
41 _templateObject2 = (0, _taggedTemplateLiteral3.default)(["\n width: ", "rem;\n height: ", "rem;\n margin-left: 1rem;\n background-image: ", ";\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n"], ["\n width: ", "rem;\n height: ", "rem;\n margin-left: 1rem;\n background-image: ", ";\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n"]),
42 _templateObject3 = (0, _taggedTemplateLiteral3.default)(["\n display: flex;\n width: 100%;\n flex-direction: column;\n"], ["\n display: flex;\n width: 100%;\n flex-direction: column;\n"]),
43 _templateObject4 = (0, _taggedTemplateLiteral3.default)(["\n display: flex;\n justify-content: space-between;\n"], ["\n display: flex;\n justify-content: space-between;\n"]),
44 _templateObject5 = (0, _taggedTemplateLiteral3.default)([""], [""]),
45 _templateObject6 = (0, _taggedTemplateLiteral3.default)(["\n padding: 0.75rem 0.5rem;\n justify-content: flex-start;\n"], ["\n padding: 0.75rem 0.5rem;\n justify-content: flex-start;\n"]);
46
47var _react = require("react");
48
49var _react2 = _interopRequireDefault(_react);
50
51var _Checkbox = require("./Checkbox");
52
53var _Checkbox2 = _interopRequireDefault(_Checkbox);
54
55var _styledComponents = require("styled-components");
56
57var _styledComponents2 = _interopRequireDefault(_styledComponents);
58
59var _helperFunctions = require("./helperFunctions");
60
61var _recompose = require("recompose");
62
63var _Button = require("./Button");
64
65var _Button2 = _interopRequireDefault(_Button);
66
67var _SelectOne = require("./SelectOne");
68
69var _SelectOne2 = _interopRequireDefault(_SelectOne);
70
71var _SelectMany = require("./SelectMany");
72
73var _SelectMany2 = _interopRequireDefault(_SelectMany);
74
75var _MultipleChoice = require("./MultipleChoice");
76
77var _MultipleChoice2 = _interopRequireDefault(_MultipleChoice);
78
79var _ = require(".");
80
81var _StyledForm = require("./StyledForm");
82
83var _InputBox = require("./InputBox");
84
85var _InputBox2 = _interopRequireDefault(_InputBox);
86
87var _SVGAlertCircleOutline = require("./svg/SVGAlertCircleOutline");
88
89var _SVGAlertCircleOutline2 = _interopRequireDefault(_SVGAlertCircleOutline);
90
91function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
92
93var defaultBorder = "1px solid #dadce0";
94var errorBorder = "1px solid #d93025";
95
96var OPTION_CONTAINER = (0, _styledComponents2.default)("div")(_templateObject);
97var OPTION_ICON = (0, _styledComponents2.default)("div")(_templateObject2, function (_ref) {
98 var iconSize = _ref.iconSize;
99 return iconSize;
100}, function (_ref2) {
101 var iconSize = _ref2.iconSize;
102 return iconSize;
103}, function (_ref3) {
104 var src = _ref3.src;
105 return "url(\"" + src + "\")";
106});
107
108var OPTION_LABEL = (0, _styledComponents2.default)("div")(_templateObject3);
109var OPTION_ROW = (0, _styledComponents2.default)("div")(_templateObject4);
110var OPTION_SUBLABEL = (0, _styledComponents2.default)("div")(_templateObject5);
111
112var SELECT_MANY_BUTTON = (0, _styledComponents2.default)(_Button2.default)(_templateObject6);
113
114var signValueLabelMaps = [{
115 value: -1,
116 label: "<"
117}, {
118 value: 0,
119 label: "="
120}, {
121 value: 1,
122 label: ">"
123}];
124
125var sumOf = function sumOf(arrayOfNumbers) {
126 return arrayOfNumbers.reduce(function (acc, v) {
127 acc = acc + v;
128 return acc;
129 });
130};
131
132var Form = function Form(props) {
133 var _props$className = props.className,
134 className = _props$className === undefined ? "form" : _props$className,
135 style = props.style,
136 values = props.values,
137 touched = props.touched,
138 errors = props.errors,
139 children = props.children,
140 handleChange = props.handleChange,
141 validateForm = props.validateForm,
142 handleSubmit = props.handleSubmit,
143 setFieldValue = props.setFieldValue,
144 setFieldTouched = props.setFieldTouched,
145 isSubmitting = props.isSubmitting;
146
147 var _useState = (0, _react.useState)(false),
148 _useState2 = (0, _slicedToArray3.default)(_useState, 2),
149 hasBeenSubmitted = _useState2[0],
150 setHasBeenSubmittedTo = _useState2[1];
151
152 (0, _react.useEffect)(function () {
153 if (hasBeenSubmitted === false && isSubmitting === true) {
154 setHasBeenSubmittedTo(true);
155 }
156 }, [isSubmitting]);
157 var getClassName = function getClassName(primary, secondary) {
158 return (0, _helperFunctions.advancedMulti)({
159 unflattenedBases: ["form", className],
160 suffixes: ["__" + primary, "__" + secondary + "__" + primary]
161 });
162 };
163
164 var renderError = function renderError(type) {
165 return errors && errors[type] && (touched && touched[type] || hasBeenSubmitted) && _react2.default.createElement(
166 _StyledForm.ERROR,
167 {
168 className: className ? "form__error " + className + "__error" : "form__error"
169 },
170 _react2.default.createElement(_SVGAlertCircleOutline2.default, { fill: "#d93025" }),
171 " ",
172 errors[type]
173 );
174 };
175
176 var renderTextareaInputSocket = function renderTextareaInputSocket(_ref4) {
177 var type = _ref4.type,
178 label = _ref4.label,
179 _ref4$required = _ref4.required,
180 required = _ref4$required === undefined ? true : _ref4$required,
181 placeholder = _ref4.placeholder;
182
183 var getLocalClassName = function getLocalClassName(primary) {
184 return getClassName(primary, "textarea");
185 };
186 var SOCKET = _StyledForm.TEXTAREA.SOCKET,
187 LABEL = _StyledForm.TEXTAREA.LABEL,
188 INPUT = _StyledForm.TEXTAREA.INPUT;
189
190 var onChange = function onChange(e) {
191 return setFieldValue(type, e.target.value);
192 };
193 return _react2.default.createElement(
194 SOCKET,
195 {
196 className: getLocalClassName("socket")
197 },
198 _react2.default.createElement(
199 _react.Fragment,
200 null,
201 _react2.default.createElement(
202 LABEL,
203 {
204 className: getLocalClassName("label")
205 },
206 label
207 ),
208 _react2.default.createElement(INPUT, {
209 className: getLocalClassName("input"),
210 "data-testid": type.toLowerCase() + "-input",
211 id: type,
212 required: required,
213 value: values[type],
214 onChange: onChange,
215 placeholder: placeholder
216 }),
217 errors[type] && touched[type] && _react2.default.createElement(
218 _StyledForm.ERROR,
219 null,
220 errors[type]
221 )
222 )
223 );
224 };
225
226 var renderSelectManyWithAdvancedCompositionSocket = function renderSelectManyWithAdvancedCompositionSocket(_ref5) {
227 var _ref5$isSigned = _ref5.isSigned,
228 isSigned = _ref5$isSigned === undefined ? true : _ref5$isSigned,
229 _ref5$isVertical = _ref5.isVertical,
230 isVertical = _ref5$isVertical === undefined ? false : _ref5$isVertical,
231 type = _ref5.type,
232 label = _ref5.label,
233 optionLabels = _ref5.optionLabels,
234 renderTrigger = _ref5.renderTrigger;
235 var OPTIONS = _StyledForm.COMPOSITION.OPTIONS,
236 CURRENT_OPTION = _StyledForm.COMPOSITION.CURRENT_OPTION,
237 RANGE_INPUT = _StyledForm.COMPOSITION.RANGE_INPUT,
238 NUMBER_INPUT = _StyledForm.COMPOSITION.NUMBER_INPUT,
239 HEAD = _StyledForm.COMPOSITION.HEAD,
240 LABEL = _StyledForm.COMPOSITION.LABEL,
241 SOCKET = _StyledForm.COMPOSITION.SOCKET;
242
243 var getLocalClassName = function getLocalClassName(primary) {
244 return getClassName(primary, "composition");
245 };
246 // Draw currentOptions from labels and current values:
247 var currentOptions = values[type] ? (0, _keys2.default)(values[type]).map(function (compositionID) {
248 var currentOptionLabelMap = optionLabels.find(function (optionLabel) {
249 return optionLabel.value === compositionID;
250 });
251 if (!currentOptionLabelMap) {
252 throw new Error("optionLabels prop lacks one or more of the form values");
253 }
254 return {
255 value: compositionID,
256 label: currentOptionLabelMap.label
257 };
258 }) : [];
259 var getSharedInputProps = function getSharedInputProps(_ref6) {
260 var currentOption = _ref6.currentOption;
261
262 var id = currentOption.value;
263 var value = values[type][id];
264 return {
265 onClick: function onClick(e) {
266 e.stopPropagation();
267 e.nativeEvent.stopImmediatePropagation();
268 },
269 id: id,
270 value: value ? value[0] : 0,
271 onChange: function onChange(v) {
272 var integerValue = parseInt(v.target.value, 10);
273 var integerSign = value ? value[1] : 0;
274 setFieldValue(type, (0, _extends5.default)({}, values[type], (0, _defineProperty3.default)({}, id, [integerValue, integerSign])));
275 }
276 };
277 };
278 var renderSignDropdown = function renderSignDropdown(_ref7) {
279 var option = _ref7.option;
280
281 //signValueLabelMapExists =
282 var id = option.value;
283 var value = values[type][id];
284 return value && _react2.default.createElement(
285 _SelectOne2.default,
286 {
287 renderTrigger: function renderTrigger(_ref8) {
288 var currentOption = _ref8.currentOption,
289 isOn = _ref8.isOn,
290 getTriggerProps = _ref8.getTriggerProps;
291 return _react2.default.createElement(
292 _Button2.default,
293 (0, _extends5.default)({ isOn: isOn }, getTriggerProps()),
294 currentOption ? currentOption.label : optionLabels[0].label
295 );
296 },
297 currentOption: signValueLabelMaps.find(function (signValueLabelMap) {
298 return signValueLabelMap.value === value[1];
299 }),
300 onChange: function onChange(signValueLabelMap) {
301 setFieldValue(type, (0, _extends5.default)({}, values[type], (0, _defineProperty3.default)({}, id, [value[0], signValueLabelMap.value])));
302 },
303 options: signValueLabelMaps
304 },
305 signValueLabelMaps
306 );
307 };
308
309 var renderCurrentOptionLabel = function renderCurrentOptionLabel(_ref9) {
310 var currentOption = _ref9.currentOption;
311
312 return _react2.default.createElement(
313 LABEL,
314 {
315 isVertical: isVertical,
316 className: (0, _helperFunctions.advancedMulti)({
317 unflattenedBases: ["form", "" + className],
318 suffixes: ["__composition__label"],
319 flipVars: [[isVertical, "vertical", "horizontal"]]
320 })
321 },
322 currentOption.label
323 );
324 };
325 var renderCurrentOptionInputs = function renderCurrentOptionInputs(_ref10) {
326 var currentOption = _ref10.currentOption;
327
328 var renderRangeInput = function renderRangeInput() {
329 return _react2.default.createElement(RANGE_INPUT, (0, _extends5.default)({}, getSharedInputProps({ currentOption: currentOption }), {
330 className: (0, _helperFunctions.advancedMulti)({
331 unflattenedBases: ["form", "" + className],
332 suffixes: ["__input", "__input__range"],
333 flipVars: [[isVertical, "vertical", "horizontal"]]
334 }),
335 isVertical: isVertical
336 }));
337 };
338 var renderNumberInput = function renderNumberInput() {
339 return _react2.default.createElement(NUMBER_INPUT, (0, _extends5.default)({}, getSharedInputProps({ currentOption: currentOption }), {
340 isVertical: isVertical,
341 className: className + "__composition__input " + className + "__composition__input__number"
342 }));
343 };
344 var renderEmptyDiv = function renderEmptyDiv(_ref11) {
345 var size = _ref11.size;
346 return _react2.default.createElement("div", { style: { height: size, width: size } });
347 };
348 return _react2.default.createElement(
349 _react.Fragment,
350 null,
351 renderRangeInput(),
352 isSigned ? renderSignDropdown({ option: currentOption }) : renderEmptyDiv({ size: "3rem" }),
353 renderNumberInput()
354 );
355 };
356
357 var renderHead = function renderHead() {
358 return _react2.default.createElement(
359 HEAD,
360 { className: className + "__label " + className + "__composition__label" },
361 (0, _helperFunctions.capitalizeEveryWord)(label)
362 );
363 };
364 var handleOnChange = function handleOnChange(value) {
365 console.log("onChange", value);
366 setFieldValue(type, value.reduce(function (acc, v) {
367 if ((0, _keys2.default)(values[type]).length === 0) {
368 acc[v.value] = [100, -1];
369 } else if (values[type][v.value]) {
370 acc[v.value] = values[type][v.value];
371 } else {
372 acc[v.value] = [0, 1];
373 }
374 return acc;
375 }, {}));
376 };
377 var handleRenderCurrentOption = function handleRenderCurrentOption(currentOption) {
378 return _react2.default.createElement(
379 CURRENT_OPTION,
380 {
381 isVertical: isVertical,
382 className: (0, _helperFunctions.flippyClass)(isVertical, className + "__composition__currentoption", "vertical", "horizontal")
383 },
384 renderCurrentOptionLabel({
385 currentOption: currentOption
386 }),
387 renderCurrentOptionInputs({
388 currentOption: currentOption
389 })
390 );
391 };
392 return _react2.default.createElement(
393 SOCKET,
394 {
395 className: className + "__socket " + className + "__composition__socket"
396 },
397 label && renderHead(),
398 _react2.default.createElement(
399 _SelectMany2.default,
400 {
401 initialOptions: currentOptions,
402 options: optionLabels,
403 renderTrigger: renderTrigger,
404 onChange: handleOnChange,
405 transitionType: ["dropdown", "fade"],
406 pivotFrom: "DOWNRIGHT",
407 renderCurrentOption: handleRenderCurrentOption
408 },
409 function (_ref12) {
410 var getChildProps = _ref12.getChildProps,
411 getChildrenProps = _ref12.getChildrenProps,
412 currentOptions = _ref12.currentOptions;
413 return _react2.default.createElement(
414 OPTIONS,
415 (0, _extends5.default)({}, getChildrenProps({
416 className: className + "__composition__options"
417 })),
418 optionLabels.map(function (optionLabel) {
419 return _react2.default.createElement(
420 _Button2.default,
421 (0, _extends5.default)({
422 colors: "neutral",
423 isOn: currentOptions.map(function (currentOption) {
424 return currentOption.value;
425 }).includes(optionLabel.value)
426 }, getChildProps({
427 option: optionLabel
428 }), {
429 key: optionLabel.value
430 }),
431 optionLabel.label
432 );
433 })
434 );
435 }
436 )
437 );
438 };
439
440 var renderMultipleChoiceSocket = function renderMultipleChoiceSocket(_ref13) {
441 var type = _ref13.type,
442 label = _ref13.label,
443 sublabel = _ref13.sublabel,
444 footer = _ref13.footer,
445 options = _ref13.options,
446 _ref13$border = _ref13.border,
447 border = _ref13$border === undefined ? renderError(type) ? errorBorder : defaultBorder : _ref13$border,
448 required = _ref13.required,
449 props = (0, _objectWithoutProperties3.default)(_ref13, ["type", "label", "sublabel", "footer", "options", "border", "required"]);
450 var SOCKET = _StyledForm.MULTIPLECHOICE.SOCKET,
451 LABEL = _StyledForm.MULTIPLECHOICE.LABEL,
452 SUBLABEL = _StyledForm.MULTIPLECHOICE.SUBLABEL,
453 FOOTER = _StyledForm.MULTIPLECHOICE.FOOTER;
454
455 var getLocalClassName = function getLocalClassName(primary) {
456 return getClassName(primary, "multiplechoice");
457 };
458 var renderAsterisk = function renderAsterisk() {
459 return required && _react2.default.createElement(
460 _StyledForm.ASTERISK,
461 null,
462 " *"
463 );
464 };
465 var renderLabel = function renderLabel() {
466 return label && _react2.default.createElement(
467 LABEL,
468 { className: getLocalClassName("label") },
469 label,
470 renderAsterisk()
471 );
472 };
473 var renderSublabel = function renderSublabel() {
474 return sublabel && _react2.default.createElement(
475 SUBLABEL,
476 { className: getLocalClassName("sublabel") },
477 typeof sublabel === "string" ? sublabel : sublabel()
478 );
479 };
480 var renderFooter = function renderFooter() {
481 return footer && _react2.default.createElement(
482 FOOTER,
483 { className: getLocalClassName("footer") },
484 typeof footer === "string" ? footer : footer()
485 );
486 };
487 return _react2.default.createElement(
488 SOCKET,
489 { id: type, border: border, className: getLocalClassName("socket") },
490 renderLabel(),
491 renderSublabel(),
492 _react2.default.createElement(_MultipleChoice2.default, (0, _extends5.default)({
493 error: renderError(type),
494 initialOptions: values[type],
495 options: options,
496 onChange: function onChange(value) {
497 setFieldValue(type, value);
498 }
499
500 }, props)),
501 renderFooter(),
502 renderError(type)
503 );
504 };
505
506 var InfoSocket = function InfoSocket() {
507 var SOCKET = _StyledForm.INFO.SOCKET,
508 LABEL = _StyledForm.INFO.LABEL,
509 SUBLABEL = _StyledForm.INFO.SUBLABEL,
510 FOOTER = _StyledForm.INFO.FOOTER,
511 TEXT = _StyledForm.INFO.TEXT;
512
513 return children({ SOCKET: SOCKET, LABEL: LABEL, SUBLABEL: SUBLABEL, FOOTER: FOOTER, TEXT: TEXT });
514 };
515 var renderInfoSocket = function renderInfoSocket(_ref14) {
516 var id = _ref14.id,
517 label = _ref14.label,
518 sublabel = _ref14.sublabel,
519 footer = _ref14.footer,
520 content = _ref14.content,
521 props = (0, _objectWithoutProperties3.default)(_ref14, ["id", "label", "sublabel", "footer", "content"]);
522 var SOCKET = _StyledForm.INFO.SOCKET,
523 LABEL = _StyledForm.INFO.LABEL,
524 SUBLABEL = _StyledForm.INFO.SUBLABEL,
525 FOOTER = _StyledForm.INFO.FOOTER;
526
527 var getLocalClassName = function getLocalClassName(primary) {
528 return getClassName(primary, "multiplechoice");
529 };
530
531 var renderLabel = function renderLabel() {
532 return label && _react2.default.createElement(
533 LABEL,
534 { className: getLocalClassName("label") },
535 label
536 );
537 };
538 var renderSublabel = function renderSublabel() {
539 return sublabel && _react2.default.createElement(
540 SUBLABEL,
541 { className: getLocalClassName("sublabel") },
542 typeof sublabel === "string" ? sublabel : sublabel()
543 );
544 };
545 var renderFooter = function renderFooter() {
546 return footer && _react2.default.createElement(
547 FOOTER,
548 { className: getLocalClassName("footer") },
549 typeof footer === "string" ? footer : footer()
550 );
551 };
552 return _react2.default.createElement(
553 SOCKET,
554 { id: id, className: getLocalClassName("socket") },
555 renderLabel(),
556 renderSublabel(),
557 content,
558 renderFooter()
559 );
560 };
561
562 var renderSelectManySocket = function renderSelectManySocket(_ref15) {
563 var type = _ref15.type,
564 label = _ref15.label,
565 options = _ref15.options,
566 renderTrigger = _ref15.renderTrigger,
567 _ref15$iconSize = _ref15.iconSize,
568 iconSize = _ref15$iconSize === undefined ? 4 : _ref15$iconSize,
569 _ref15$shouldRenderCl = _ref15.shouldRenderClearSelection,
570 shouldRenderClearSelection = _ref15$shouldRenderCl === undefined ? true : _ref15$shouldRenderCl;
571 var SOCKET = _StyledForm.SELECTMANY.SOCKET,
572 LABEL = _StyledForm.SELECTMANY.LABEL,
573 DROPDOWN = _StyledForm.SELECTMANY.DROPDOWN;
574
575 var getLocalClassName = function getLocalClassName(primary) {
576 return getClassName(primary, "selectmany");
577 };
578 return _react2.default.createElement(
579 SOCKET,
580 { className: getLocalClassName("socket") },
581 _react2.default.createElement(
582 LABEL,
583 { className: getLocalClassName("label") },
584 label
585 ),
586 _react2.default.createElement(
587 _SelectMany2.default,
588 {
589 shouldRenderClearSelection: shouldRenderClearSelection,
590 defaultIsOn: true,
591 currentOptions: values[type],
592 options: options,
593 renderTrigger: renderTrigger,
594 onChange: function onChange(value) {
595 setFieldValue(type, value);
596 },
597 transitionType: ["dropdown", "fade"],
598 pivotFrom: "DOWNRIGHT"
599 },
600 function (_ref16) {
601 var getChildProps = _ref16.getChildProps,
602 getChildrenProps = _ref16.getChildrenProps;
603 return _react2.default.createElement(
604 DROPDOWN,
605 (0, _extends5.default)({}, getChildrenProps({
606 className: className + "__dropdown",
607 style: { width: "25.5rem" }
608 })),
609 options.map(function (option) {
610 return _react2.default.createElement(
611 SELECT_MANY_BUTTON,
612 (0, _extends5.default)({}, getChildProps({
613 option: { value: option.value, label: option.label }
614 }), {
615 style: { width: 25.5 + iconSize + "rem" },
616 colors: "neutral",
617 key: option.value,
618 isOn: values[type] && values[type].map(function (currentOption) {
619 return currentOption.value;
620 }).includes(option.value)
621 }),
622 typeof option.label === "string" ? option.label : _react2.default.createElement(
623 OPTION_CONTAINER,
624 null,
625 _react2.default.createElement(
626 OPTION_LABEL,
627 null,
628 option.label.map(function (row, i) {
629 return _react2.default.createElement(
630 OPTION_ROW,
631 { key: i },
632 row.map(function (sublabel, i) {
633 return _react2.default.createElement(
634 OPTION_SUBLABEL,
635 { key: i },
636 sublabel
637 );
638 })
639 );
640 })
641 ),
642 _react2.default.createElement(OPTION_ICON, { src: option.iconSrc, iconSize: iconSize })
643 )
644 );
645 })
646 );
647 }
648 )
649 );
650 };
651
652 var renderSelectOneSocket = function renderSelectOneSocket(_ref17) {
653 var type = _ref17.type,
654 label = _ref17.label,
655 options = _ref17.options;
656 var SOCKET = _StyledForm.SELECTONE.SOCKET,
657 LABEL = _StyledForm.SELECTONE.LABEL,
658 DROPDOWN = _StyledForm.SELECTONE.DROPDOWN;
659
660 var getLocalClassName = function getLocalClassName(primary) {
661 return getClassName(primary, "selectone");
662 };
663 return _react2.default.createElement(
664 SOCKET,
665 { className: getLocalClassName("socket") },
666 _react2.default.createElement(
667 LABEL,
668 { className: getLocalClassName("label") },
669 (0, _helperFunctions.capitalizeEveryWord)(label)
670 ),
671 _react2.default.createElement(
672 _SelectOne2.default,
673 {
674 renderTrigger: function renderTrigger(_ref18) {
675 var isOn = _ref18.isOn,
676 currentOption = _ref18.currentOption,
677 getTriggerProps = _ref18.getTriggerProps;
678 return _react2.default.createElement(
679 _Button2.default,
680 (0, _extends5.default)({
681 type: "caretdown",
682 isOn: isOn
683 }, getTriggerProps({
684 className: "selectone__trigger",
685 style: { border: "1px solid #ccc" }
686 }), {
687 colors: _.buttonStyles.monochrome
688 }),
689 currentOption ? currentOption.label : ""
690 );
691 },
692 options: options,
693 currentOption: values[type],
694 onChange: function onChange(value) {
695 setFieldValue(type, value);
696 },
697 transitionType: ["dropdown", "fade"],
698 pivotFrom: "DOWNRIGHT"
699 },
700 function (_ref19) {
701 var getChildProps = _ref19.getChildProps,
702 getChildrenProps = _ref19.getChildrenProps,
703 currentOption = _ref19.currentOption,
704 toggleIsOn = _ref19.toggleIsOn;
705 return _react2.default.createElement(
706 DROPDOWN,
707 (0, _extends5.default)({}, getChildrenProps({ style: { width: "25.5rem" } })),
708 options.map(function (option) {
709 return _react2.default.createElement(
710 _Button2.default,
711 (0, _extends5.default)({}, getChildProps({
712 option: { value: option.value, label: option.label },
713 onClick: toggleIsOn
714 }), {
715 isOn: currentOption.value === option.value,
716 key: option.value
717 }),
718 option.label
719 );
720 })
721 );
722 }
723 )
724 );
725 };
726
727 var renderSubmitButton = function renderSubmitButton() {
728 var _ref20 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
729
730 var label = _ref20.label,
731 props = (0, _objectWithoutProperties3.default)(_ref20, ["label"]);
732 var TRIGGER = _StyledForm.SUBMIT.TRIGGER,
733 CONTAINER = _StyledForm.SUBMIT.CONTAINER;
734
735 return _react2.default.createElement(
736 CONTAINER,
737 null,
738 _react2.default.createElement(
739 TRIGGER,
740 (0, _extends5.default)({
741 id: "submit",
742 onClick: function () {
743 var _ref21 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(props) {
744 var errors, errorKeys, el;
745 return _regenerator2.default.wrap(function _callee$(_context) {
746 while (1) {
747 switch (_context.prev = _context.next) {
748 case 0:
749 handleSubmit(props);
750 _context.next = 3;
751 return validateForm();
752
753 case 3:
754 errors = _context.sent;
755 errorKeys = (0, _keys2.default)(errors);
756
757 if (errorKeys.length > 0) {
758 el = document.getElementById(errorKeys[0]);
759
760 if (el) {
761 console.log(el);
762 el.scrollIntoView({ behavior: "smooth" });
763 el.focus();
764 }
765 }
766
767 case 6:
768 case "end":
769 return _context.stop();
770 }
771 }
772 }, _callee, undefined);
773 }));
774
775 function onClick(_x2) {
776 return _ref21.apply(this, arguments);
777 }
778
779 return onClick;
780 }(),
781 dataTestId: "submit",
782 disabled: isSubmitting
783
784 }, props),
785 label
786 )
787 );
788 };
789
790 var renderTextInputSocket = function renderTextInputSocket(_ref22) {
791 var type = _ref22.type,
792 _ref22$inputType = _ref22.inputType,
793 inputType = _ref22$inputType === undefined ? "text" : _ref22$inputType,
794 label = _ref22.label,
795 sublabel = _ref22.sublabel,
796 _ref22$required = _ref22.required,
797 required = _ref22$required === undefined ? false : _ref22$required,
798 _ref22$autoFocus = _ref22.autoFocus,
799 autoFocus = _ref22$autoFocus === undefined ? false : _ref22$autoFocus,
800 _ref22$autocomplete = _ref22.autocomplete,
801 autocomplete = _ref22$autocomplete === undefined ? "" : _ref22$autocomplete,
802 width = _ref22.width,
803 _ref22$margin = _ref22.margin,
804 margin = _ref22$margin === undefined ? "0 0 4rem 0" : _ref22$margin,
805 _ref22$border = _ref22.border,
806 border = _ref22$border === undefined ? renderError(type) ? errorBorder : defaultBorder : _ref22$border,
807 props = (0, _objectWithoutProperties3.default)(_ref22, ["type", "inputType", "label", "sublabel", "required", "autoFocus", "autocomplete", "width", "margin", "border"]);
808 var CONTAINER = _StyledForm.INPUTBOX.CONTAINER;
809
810 var getLocalClassName = function getLocalClassName(primary) {
811 return getClassName(className, primary, "inputbox");
812 };
813 return _react2.default.createElement(
814 CONTAINER,
815 {
816 id: type,
817 width: width,
818 margin: margin,
819 border: border,
820 className: getLocalClassName("container")
821 },
822 _react2.default.createElement(_InputBox2.default, (0, _extends5.default)({
823 label: label,
824 sublabel: sublabel,
825
826 children: renderError(type),
827 id: type,
828 className: className,
829 type: inputType,
830 required: required ? required : false,
831 autoFocus: autoFocus ? autoFocus : false,
832 autocomplete: autocomplete,
833 value: values[type],
834 onChange: handleChange,
835 onBlur: function onBlur() {
836 return setFieldTouched(type);
837 }
838 }, props))
839 );
840 };
841
842 var renderGroup = function renderGroup(_ref23) {
843 var label = _ref23.label,
844 renderChildren = _ref23.renderChildren;
845 var SOCKET = _StyledForm.GROUP.SOCKET,
846 LABEL = _StyledForm.GROUP.LABEL,
847 CHILDREN = _StyledForm.GROUP.CHILDREN;
848
849 var getLocalClassName = function getLocalClassName(primary) {
850 return getClassName(primary, "group");
851 };
852 return _react2.default.createElement(
853 SOCKET,
854 { className: getLocalClassName("socket") },
855 _react2.default.createElement(
856 LABEL,
857 { className: getLocalClassName("label") },
858 label
859 ),
860 _react2.default.createElement(
861 CHILDREN,
862 { className: getLocalClassName("children") },
863 renderChildren()
864 )
865 );
866 };
867
868 var renderCheckboxSocket = function renderCheckboxSocket(_ref24) {
869 var label = _ref24.label,
870 type = _ref24.type;
871 var SOCKET = _StyledForm.CHECKBOX.SOCKET,
872 LABEL = _StyledForm.CHECKBOX.LABEL,
873 INPUT = _StyledForm.CHECKBOX.INPUT;
874
875 var getLocalClassName = function getLocalClassName(primary) {
876 return getClassName(primary, "checkbox");
877 };
878 return _react2.default.createElement(
879 SOCKET,
880 { className: getLocalClassName("socket") },
881 _react2.default.createElement(
882 LABEL,
883 { className: getLocalClassName("label") },
884 label
885 ),
886 _react2.default.createElement(INPUT, {
887 className: getLocalClassName("input"),
888 id: type,
889 checked: values[type],
890 onChange: handleChange
891 })
892 );
893 };
894
895 return _react2.default.createElement(
896 _StyledForm.CONTAINER,
897 {
898 onSubmit: handleSubmit,
899 className: className ? className : "form",
900 style: style
901 },
902 children({
903 renderTextInputSocket: renderTextInputSocket,
904 renderTextareaInputSocket: renderTextareaInputSocket,
905 renderSelectManyWithAdvancedCompositionSocket: renderSelectManyWithAdvancedCompositionSocket,
906 renderSelectOneSocket: renderSelectOneSocket,
907 renderSelectManySocket: renderSelectManySocket,
908 renderMultipleChoiceSocket: renderMultipleChoiceSocket,
909 renderCheckboxSocket: renderCheckboxSocket,
910 renderInfoSocket: renderInfoSocket,
911
912 renderGroup: renderGroup,
913 renderSubmitButton: renderSubmitButton,
914 InfoSocket: InfoSocket
915 }),
916 _react2.default.createElement("input", {
917 type: "submit",
918 style: { visibility: "hidden", height: 0, width: 0 }
919 })
920 );
921};
922
923exports.Form = Form;
924Form.defaultProps = {
925 handleSubmit: function handleSubmit() {
926 return console.log("Form: handleSubmit");
927 },
928 style: {}
929};
930
931var enhance = (0, _recompose.compose)();
932//onlyUpdateForKeys([`values`, `touched`, `errors`, `children`])
933
934exports.default = enhance(Form);
\No newline at end of file