@pareto-engineering/design-system 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/cjs/a/ToggleSwitch/ToggleSwitch.js +10 -5
  2. package/dist/cjs/f/FormInput/FormInput.js +7 -0
  3. package/dist/cjs/f/fields/EditorInput/EditorInput.js +9 -7
  4. package/dist/cjs/f/fields/SelectInput/SelectInput.js +4 -5
  5. package/dist/cjs/f/fields/SelectInput/common/Single/Single.js +3 -3
  6. package/dist/cjs/g/FormBuilder/FormBuilder.js +77 -0
  7. package/dist/cjs/g/FormBuilder/common/Builder/Builder.js +156 -0
  8. package/dist/cjs/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.js +229 -0
  9. package/dist/cjs/g/FormBuilder/common/Builder/common/InputBuilder/index.js +13 -0
  10. package/dist/cjs/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +192 -0
  11. package/dist/cjs/g/FormBuilder/common/Builder/common/Section/Section.js +133 -0
  12. package/dist/cjs/g/FormBuilder/common/Builder/common/Section/index.js +13 -0
  13. package/dist/cjs/g/FormBuilder/common/Builder/common/index.js +19 -0
  14. package/dist/cjs/g/FormBuilder/common/Builder/index.js +13 -0
  15. package/dist/cjs/g/FormBuilder/common/Builder/styles.scss +106 -0
  16. package/dist/cjs/g/FormBuilder/common/Renderer/Renderer.js +119 -0
  17. package/dist/cjs/g/FormBuilder/common/Renderer/common/Section/Section.js +60 -0
  18. package/dist/cjs/g/FormBuilder/common/Renderer/common/Section/index.js +13 -0
  19. package/dist/cjs/g/FormBuilder/common/Renderer/common/index.js +12 -0
  20. package/dist/cjs/g/FormBuilder/common/Renderer/index.js +13 -0
  21. package/dist/cjs/g/FormBuilder/common/Renderer/styles.scss +15 -0
  22. package/dist/cjs/g/FormBuilder/common/index.js +19 -0
  23. package/dist/cjs/g/FormBuilder/index.js +13 -0
  24. package/dist/cjs/g/FormBuilder/styles.scss +7 -0
  25. package/dist/cjs/g/index.js +8 -1
  26. package/dist/es/a/ToggleSwitch/ToggleSwitch.js +10 -5
  27. package/dist/es/f/FormInput/FormInput.js +7 -0
  28. package/dist/es/f/fields/EditorInput/EditorInput.js +9 -7
  29. package/dist/es/f/fields/SelectInput/SelectInput.js +4 -3
  30. package/dist/es/f/fields/SelectInput/common/Single/Single.js +3 -3
  31. package/dist/es/g/FormBuilder/FormBuilder.js +65 -0
  32. package/dist/es/g/FormBuilder/common/Builder/Builder.js +142 -0
  33. package/dist/es/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.js +216 -0
  34. package/dist/es/g/FormBuilder/common/Builder/common/InputBuilder/index.js +2 -0
  35. package/dist/es/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +192 -0
  36. package/dist/es/g/FormBuilder/common/Builder/common/Section/Section.js +120 -0
  37. package/dist/es/g/FormBuilder/common/Builder/common/Section/index.js +2 -0
  38. package/dist/es/g/FormBuilder/common/Builder/common/index.js +2 -0
  39. package/dist/es/g/FormBuilder/common/Builder/index.js +2 -0
  40. package/dist/es/g/FormBuilder/common/Builder/styles.scss +106 -0
  41. package/dist/es/g/FormBuilder/common/Renderer/Renderer.js +113 -0
  42. package/dist/es/g/FormBuilder/common/Renderer/common/Section/Section.js +52 -0
  43. package/dist/es/g/FormBuilder/common/Renderer/common/Section/index.js +2 -0
  44. package/dist/es/g/FormBuilder/common/Renderer/common/index.js +1 -0
  45. package/dist/es/g/FormBuilder/common/Renderer/index.js +2 -0
  46. package/dist/es/g/FormBuilder/common/Renderer/styles.scss +15 -0
  47. package/dist/es/g/FormBuilder/common/index.js +2 -0
  48. package/dist/es/g/FormBuilder/index.js +2 -0
  49. package/dist/es/g/FormBuilder/styles.scss +7 -0
  50. package/dist/es/g/index.js +2 -1
  51. package/package.json +3 -3
  52. package/src/stories/a/ToggleSwitch.stories.jsx +8 -2
  53. package/src/stories/g/FormBuilder.stories.jsx +97 -0
  54. package/src/ui/a/ToggleSwitch/ToggleSwitch.jsx +9 -3
  55. package/src/ui/f/FormInput/FormInput.jsx +10 -0
  56. package/src/ui/f/fields/EditorInput/EditorInput.jsx +5 -6
  57. package/src/ui/f/fields/SelectInput/SelectInput.jsx +5 -2
  58. package/src/ui/f/fields/SelectInput/common/Single/Single.jsx +2 -1
  59. package/src/ui/g/FormBuilder/FormBuilder.jsx +85 -0
  60. package/src/ui/g/FormBuilder/common/Builder/Builder.jsx +175 -0
  61. package/src/ui/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.jsx +279 -0
  62. package/src/ui/g/FormBuilder/common/Builder/common/InputBuilder/index.js +2 -0
  63. package/src/ui/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +192 -0
  64. package/src/ui/g/FormBuilder/common/Builder/common/Section/Section.jsx +156 -0
  65. package/src/ui/g/FormBuilder/common/Builder/common/Section/index.js +2 -0
  66. package/src/ui/g/FormBuilder/common/Builder/common/index.js +2 -0
  67. package/src/ui/g/FormBuilder/common/Builder/index.js +2 -0
  68. package/src/ui/g/FormBuilder/common/Builder/styles.scss +106 -0
  69. package/src/ui/g/FormBuilder/common/Renderer/Renderer.jsx +145 -0
  70. package/src/ui/g/FormBuilder/common/Renderer/common/Section/Section.jsx +75 -0
  71. package/src/ui/g/FormBuilder/common/Renderer/common/Section/index.js +2 -0
  72. package/src/ui/g/FormBuilder/common/Renderer/common/index.js +1 -0
  73. package/src/ui/g/FormBuilder/common/Renderer/index.js +2 -0
  74. package/src/ui/g/FormBuilder/common/Renderer/styles.scss +15 -0
  75. package/src/ui/g/FormBuilder/common/index.js +2 -0
  76. package/src/ui/g/FormBuilder/index.js +2 -0
  77. package/src/ui/g/FormBuilder/styles.scss +7 -0
  78. package/src/ui/g/index.js +1 -0
  79. package/tests/__snapshots__/Storyshots.test.js.snap +793 -1
@@ -28,7 +28,8 @@ const ToggleSwitch = _ref => {
28
28
  style,
29
29
  handleOnChange,
30
30
  checked,
31
- size
31
+ size,
32
+ inputId
32
33
  // ...otherProps
33
34
  } = _ref;
34
35
  return /*#__PURE__*/React.createElement("button", {
@@ -42,11 +43,11 @@ const ToggleSwitch = _ref => {
42
43
  // {...otherProps}
43
44
  }, /*#__PURE__*/React.createElement("input", {
44
45
  type: "checkbox",
45
- id: "switch",
46
+ id: inputId,
46
47
  checked: checked,
47
48
  onChange: handleOnChange
48
49
  }), /*#__PURE__*/React.createElement("label", {
49
- htmlFor: "switch"
50
+ htmlFor: inputId
50
51
  }));
51
52
  };
52
53
  ToggleSwitch.propTypes = {
@@ -73,9 +74,13 @@ ToggleSwitch.propTypes = {
73
74
  /**
74
75
  * The size of this element
75
76
  */
76
- size: _propTypes.default.string
77
+ size: _propTypes.default.string,
78
+ /**
79
+ * The ID of the elelment to be toggled
80
+ */
81
+ inputId: _propTypes.default.string
77
82
  };
78
83
  ToggleSwitch.defaultProps = {
79
- // someProp:false,
84
+ inputId: 'switch'
80
85
  };
81
86
  var _default = exports.default = ToggleSwitch;
@@ -37,6 +37,13 @@ const FormInput = _ref => {
37
37
  disabled: disabled
38
38
  }, otherProps));
39
39
  }
40
+ if (type === 'multiple') {
41
+ return /*#__PURE__*/React.createElement(_fields.ChoicesInput, _extends({
42
+ className: newClassName,
43
+ disabled: disabled,
44
+ multiple: true
45
+ }, otherProps));
46
+ }
40
47
  if (type === 'choices') {
41
48
  return /*#__PURE__*/React.createElement(_fields.ChoicesInput, _extends({
42
49
  className: newClassName,
@@ -70,11 +70,15 @@ const EditorInput = _ref2 => {
70
70
  showDebugger,
71
71
  stopPropagationKeys,
72
72
  setEditorState
73
+ // handleOnChange,
73
74
  // ...otherProps
74
75
  } = _ref2;
75
- const formik = (0, _formik.useFormikContext)();
76
+ const {
77
+ values,
78
+ setFieldValue
79
+ } = (0, _formik.useFormikContext)();
76
80
  const setInitialValue = () => {
77
- const value = formik.values[name];
81
+ const value = values[name];
78
82
  try {
79
83
  JSON.parse(value);
80
84
  return value;
@@ -109,10 +113,7 @@ const EditorInput = _ref2 => {
109
113
  }
110
114
  };
111
115
  const onChange = state => {
112
- formik.setValues({
113
- ...formik.values,
114
- [name]: JSON.stringify(state)
115
- });
116
+ setFieldValue(name, JSON.stringify(state));
116
117
  };
117
118
  const initialConfig = {
118
119
  nameSpace: name,
@@ -149,7 +150,8 @@ const EditorInput = _ref2 => {
149
150
  }, label), !disabled && /*#__PURE__*/React.createElement(_common2.ToolbarPlugin, null), /*#__PURE__*/React.createElement(_LexicalRichTextPlugin.RichTextPlugin, {
150
151
  contentEditable: /*#__PURE__*/React.createElement(_LexicalContentEditable.ContentEditable, {
151
152
  className: "content-editable",
152
- id: name
153
+ id: name,
154
+ name: name
153
155
  }),
154
156
  ErrorBoundary: _LexicalErrorBoundary.default
155
157
  }), /*#__PURE__*/React.createElement(_LexicalListPlugin.ListPlugin, null), /*#__PURE__*/React.createElement(_LexicalCheckListPlugin.CheckListPlugin, null), /*#__PURE__*/React.createElement(_LexicalOnChangePlugin.OnChangePlugin, {
@@ -13,8 +13,7 @@ var _common = require("./common");
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
- /* @pareto-engineering/generator-front 1.0.12 */
17
-
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); } /* @pareto-engineering/generator-front 1.0.12 */
18
17
  // Local Definitions
19
18
 
20
19
  const baseClassName = _exports.default.base;
@@ -42,8 +41,8 @@ const SelectInput = _ref => {
42
41
  autoComplete,
43
42
  placeholder,
44
43
  getTagColor,
45
- multiple
46
- // ...otherProps
44
+ multiple,
45
+ ...otherProps
47
46
  } = _ref;
48
47
  const inputProps = {
49
48
  name,
@@ -66,7 +65,7 @@ const SelectInput = _ref => {
66
65
  id: id,
67
66
  className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
68
67
  style: style
69
- }, /*#__PURE__*/React.createElement(Input, inputProps));
68
+ }, /*#__PURE__*/React.createElement(Input, _extends({}, inputProps, otherProps)));
70
69
  };
71
70
  SelectInput.propTypes = {
72
71
  /**
@@ -39,8 +39,8 @@ const Single = _ref => {
39
39
  description,
40
40
  disabled,
41
41
  isLoading,
42
- autoComplete
43
- // ...otherProps
42
+ autoComplete,
43
+ ...otherProps
44
44
  } = _ref;
45
45
  const [field,, helpers] = (0, _formik.useField)({
46
46
  name,
@@ -72,7 +72,7 @@ const Single = _ref => {
72
72
  id: name,
73
73
  disabled: disabled,
74
74
  autoComplete: autoComplete
75
- }), options.map(option => {
75
+ }, otherProps), options.map(option => {
76
76
  // i.e if option is a string like "blah", return { value: "blah", label: "blah" }
77
77
  const newOption = typeof option === 'string' ? {
78
78
  value: option,
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
10
+ require("./styles.scss");
11
+ var _common = require("./common");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ /* @pareto-engineering/generator-front 1.1.1-alpha.2 */
16
+
17
+ // Local Definitions
18
+
19
+ const baseClassName = _exports.default.base;
20
+ const componentClassName = 'form-builder';
21
+
22
+ /**
23
+ * This is the component description.
24
+ */
25
+ const FormBuilder = _ref => {
26
+ let {
27
+ id,
28
+ className: userClassName,
29
+ style,
30
+ mode,
31
+ formData,
32
+ formBuilderId,
33
+ onBuilderFormSave,
34
+ onRendererFormSave
35
+ // ...otherProps
36
+ } = _ref;
37
+ return /*#__PURE__*/React.createElement("div", {
38
+ id: id,
39
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
40
+ style: style
41
+ // {...otherProps}
42
+ }, mode === 'build' && /*#__PURE__*/React.createElement(_common.Builder, {
43
+ formBuilderId: formBuilderId,
44
+ onSave: onBuilderFormSave
45
+ }), mode === 'render' && /*#__PURE__*/React.createElement(_common.Renderer, {
46
+ formData: formData,
47
+ onSave: onRendererFormSave
48
+ }));
49
+ };
50
+ FormBuilder.propTypes = {
51
+ /**
52
+ * The HTML id for this element
53
+ */
54
+ id: _propTypes.default.string,
55
+ /**
56
+ * The HTML class names for this element
57
+ */
58
+ className: _propTypes.default.string,
59
+ /**
60
+ * The React-written, css properties for this element.
61
+ */
62
+ style: _propTypes.default.objectOf(_propTypes.default.string),
63
+ /**
64
+ * The mode of the form builder to determine whether to render a form or build a form
65
+ */
66
+ mode: _propTypes.default.oneOf(['build', 'render']),
67
+ /**
68
+ * This is the ID of the form element in the <Builder /> component
69
+ */
70
+ formBuilderId: _propTypes.default.string.isRequired
71
+ };
72
+ FormBuilder.defaultProps = {
73
+ mode: 'build'
74
+ };
75
+ FormBuilder.Builder = _common.Builder;
76
+ FormBuilder.Renderer = _common.Renderer;
77
+ var _default = exports.default = FormBuilder;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _formik = require("formik");
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
11
+ var _f = require("../../../../f");
12
+ var _common = require("./common");
13
+ require("./styles.scss");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ /* @pareto-engineering/generator-front 1.1.1-alpha.2 */
18
+
19
+ // Local Definitions
20
+
21
+ const baseClassName = _exports.default.base;
22
+ const componentClassName = 'builder';
23
+ const reorderInputs = values => {
24
+ const valuesCopy = JSON.parse(JSON.stringify(values));
25
+ valuesCopy.sections.forEach(section => {
26
+ const orderMap = new Map();
27
+ section.orderedInputDragIds.forEach((id, index) => orderMap.set(id, index));
28
+ section.inputs.sort((a, b) => orderMap.get(a.name) - orderMap.get(b.name));
29
+ });
30
+ return valuesCopy;
31
+ };
32
+
33
+ /**
34
+ */
35
+ const Builder = _ref => {
36
+ let {
37
+ id,
38
+ className: userClassName,
39
+ style,
40
+ onSave,
41
+ formBuilderId
42
+ // ...otherProps
43
+ } = _ref;
44
+ const handleSubmit = values => {
45
+ const reOrderedValues = reorderInputs(values);
46
+ onSave(reOrderedValues);
47
+ };
48
+ return /*#__PURE__*/React.createElement("div", {
49
+ id: id,
50
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
51
+ style: style
52
+ }, /*#__PURE__*/React.createElement("p", {
53
+ className: "h3"
54
+ }, "Form Builder"), /*#__PURE__*/React.createElement(_formik.Formik, {
55
+ initialValues: {
56
+ sections: [{
57
+ title: '',
58
+ description: '',
59
+ key: 'section-0',
60
+ inputs: [],
61
+ orderedInputDragIds: [],
62
+ navigation: {
63
+ nextSection: 'next'
64
+ }
65
+ }]
66
+ },
67
+ onSubmit: handleSubmit
68
+ }, _ref2 => {
69
+ let {
70
+ values
71
+ } = _ref2;
72
+ const availableSections = values.sections.map((section, idx) => ({
73
+ value: idx,
74
+ label: `Go to ${section.title || `Untitled Section ${idx + 1}`}`
75
+ }));
76
+ return /*#__PURE__*/React.createElement(_formik.Form, {
77
+ id: formBuilderId
78
+ }, /*#__PURE__*/React.createElement(_formik.FieldArray, {
79
+ name: "sections"
80
+ }, _ref3 => {
81
+ let {
82
+ push
83
+ } = _ref3;
84
+ return /*#__PURE__*/React.createElement(React.Fragment, null, values.sections.map((section, index) => /*#__PURE__*/React.createElement(_common.Section, {
85
+ key: section.key,
86
+ index: index
87
+ })), /*#__PURE__*/React.createElement("div", {
88
+ className: "section-footer"
89
+ }, /*#__PURE__*/React.createElement("button", {
90
+ className: "add-section-cta",
91
+ type: "button",
92
+ onClick: () => {
93
+ const currentIndex = values.sections.length;
94
+ return push({
95
+ title: '',
96
+ description: '',
97
+ key: `section-${currentIndex}`,
98
+ inputs: [{
99
+ type: 'text',
100
+ options: [],
101
+ required: true,
102
+ description: '',
103
+ name: `section_${values.sections.length}_input_0`,
104
+ label: ''
105
+ }],
106
+ orderedInputDragIds: [],
107
+ navigation: {
108
+ nextSection: 'next'
109
+ }
110
+ });
111
+ }
112
+ }, /*#__PURE__*/React.createElement("div", {
113
+ className: "icon-container"
114
+ }, /*#__PURE__*/React.createElement("span", {
115
+ className: "icon"
116
+ }, "+")), /*#__PURE__*/React.createElement("span", {
117
+ className: "text x-paragraph c-x"
118
+ }, "Add Section")), /*#__PURE__*/React.createElement("div", {
119
+ className: "section-navigation"
120
+ }, /*#__PURE__*/React.createElement("span", {
121
+ className: "x-paragraph c-x"
122
+ }, "After Section", ' ', values.sections.length), /*#__PURE__*/React.createElement(_f.SelectInput, {
123
+ name: `sections.${values.sections.length - 1}.navigation.nextSection`,
124
+ options: [{
125
+ label: 'Select section',
126
+ value: '',
127
+ disabled: true
128
+ }, {
129
+ label: 'Continue to next section',
130
+ value: 'next'
131
+ }, ...availableSections, {
132
+ label: 'Submit form',
133
+ value: 'submit'
134
+ }]
135
+ }))));
136
+ }));
137
+ }));
138
+ };
139
+ Builder.propTypes = {
140
+ /**
141
+ * The HTML id for this element
142
+ */
143
+ id: _propTypes.default.string,
144
+ /**
145
+ * The HTML class names for this element
146
+ */
147
+ className: _propTypes.default.string,
148
+ /**
149
+ * The React-written, css properties for this element.
150
+ */
151
+ style: _propTypes.default.objectOf(_propTypes.default.string)
152
+ };
153
+ Builder.defaultProps = {
154
+ // someProp:false
155
+ };
156
+ var _default = exports.default = Builder;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var React = _react;
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _formik = require("formik");
11
+ var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
12
+ var _f = require("../../../../../../f");
13
+ var _a = require("../../../../../../a");
14
+ var _utils = require("../../../../../../utils");
15
+ require("./styles.scss");
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
+ /* @pareto-engineering/generator-front 1.1.1-alpha.2 */
20
+
21
+ // Local Definitions
22
+
23
+ const baseClassName = _exports.default.base;
24
+ const componentClassName = 'input-builder';
25
+
26
+ /**
27
+ * This is the component description.
28
+ */
29
+ const InputBuilder = _ref => {
30
+ let {
31
+ id,
32
+ className: userClassName,
33
+ style,
34
+ sectionIndex,
35
+ inputIndex,
36
+ onDelete,
37
+ // onCopy,
38
+ preferredPopoverOrder
39
+ // ...otherProps
40
+ } = _ref;
41
+ const {
42
+ values,
43
+ setFieldValue
44
+ } = (0, _formik.useFormikContext)();
45
+ const input = values.sections[sectionIndex].inputs[inputIndex];
46
+ const handleToggleRequired = () => {
47
+ setFieldValue(`sections.${sectionIndex}.inputs.${inputIndex}.required`, !input.required);
48
+ };
49
+ const toggleSwitchStyles = {
50
+ ...(!input?.required ? {
51
+ '--slider-background-color': 'var(--disabled)'
52
+ } : {})
53
+ };
54
+ const parentRef = (0, _react.useRef)(null);
55
+ const [isOpen, setIsOpen] = (0, _react.useState)(false);
56
+ (0, _utils.useOutsideClick)(parentRef, () => setIsOpen(false));
57
+ const [hasDescription, setHasDescription] = (0, _react.useState)(false);
58
+ const handleToggleConditionalNavigation = () => {
59
+ setFieldValue(`sections.${sectionIndex}.inputs.${inputIndex}.conditionalNavigation`, !input.conditionalNavigation);
60
+ };
61
+ const availableSections = values.sections.map((section, idx) => ({
62
+ value: idx,
63
+ label: `Go to ${section.title || `Untitled Section ${idx + 1}`}`
64
+ }));
65
+ const shouldRenderOptions = input?.type === 'select' || input?.type === 'multiple' || input?.type === 'choices';
66
+ const handleSelectOptionBlur = (e, optionIndex) => {
67
+ const {
68
+ value
69
+ } = e.target;
70
+ setFieldValue(`sections.${sectionIndex}.inputs.${inputIndex}.options.${optionIndex}.label`, value);
71
+ };
72
+ return /*#__PURE__*/React.createElement("div", {
73
+ id: id,
74
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
75
+ style: style
76
+ }, /*#__PURE__*/React.createElement("div", {
77
+ className: "drag-icon"
78
+ }, /*#__PURE__*/React.createElement("span", {
79
+ className: "ai-icon"
80
+ }, "H")), /*#__PURE__*/React.createElement("div", {
81
+ className: "input-options-container"
82
+ }, /*#__PURE__*/React.createElement("div", {
83
+ className: "controls-container"
84
+ }, /*#__PURE__*/React.createElement(_f.SelectInput, {
85
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.type`,
86
+ options: [{
87
+ value: '',
88
+ label: 'Select an option',
89
+ disabled: true
90
+ }, {
91
+ value: 'text',
92
+ label: 'Basic input'
93
+ }, {
94
+ value: 'textarea',
95
+ label: 'Long paragraph'
96
+ }, {
97
+ value: 'select',
98
+ label: 'Dropdown select'
99
+ }, {
100
+ value: 'editor',
101
+ label: 'Editor input'
102
+ }, {
103
+ value: 'multiple',
104
+ label: 'Checkboxes'
105
+ }, {
106
+ value: 'choices',
107
+ label: 'Radio buttons'
108
+ }]
109
+ }), /*#__PURE__*/React.createElement("div", {
110
+ className: "controls"
111
+ }, /*#__PURE__*/React.createElement("button", {
112
+ type: "button",
113
+ onClick: () => onDelete(inputIndex)
114
+ }, /*#__PURE__*/React.createElement("span", {
115
+ className: "icon x-ui-icons c-x"
116
+ }, "D")), /*#__PURE__*/React.createElement("div", {
117
+ className: "is-required"
118
+ }, /*#__PURE__*/React.createElement("span", {
119
+ className: "s0"
120
+ }, "Required"), /*#__PURE__*/React.createElement(_a.ToggleSwitch, {
121
+ handleOnChange: handleToggleRequired,
122
+ checked: input?.required,
123
+ style: toggleSwitchStyles,
124
+ inputId: `sections_${sectionIndex}_inputs.${inputIndex}_toggle`
125
+ })), /*#__PURE__*/React.createElement("div", {
126
+ className: "actions",
127
+ ref: parentRef
128
+ }, /*#__PURE__*/React.createElement("button", {
129
+ type: "button",
130
+ onClick: () => setIsOpen(!isOpen)
131
+ }, /*#__PURE__*/React.createElement("span", {
132
+ className: "icon x-ui-icons c-x"
133
+ }, "!")), /*#__PURE__*/React.createElement(_a.Popover, {
134
+ isOpen: isOpen,
135
+ parentRef: parentRef,
136
+ preferredPrimaryOrder: preferredPopoverOrder
137
+ }, /*#__PURE__*/React.createElement("p", null, "Show"), /*#__PURE__*/React.createElement("ul", null, /*#__PURE__*/React.createElement("li", {
138
+ className: `option ${hasDescription ? 'with-check-mark' : ''}`
139
+ }, hasDescription && /*#__PURE__*/React.createElement("span", {
140
+ className: "x-ui-icons c-x icon"
141
+ }, "I"), /*#__PURE__*/React.createElement("button", {
142
+ onClick: () => setHasDescription(!hasDescription),
143
+ type: "button"
144
+ }, "Description")), /*#__PURE__*/React.createElement("li", {
145
+ className: `option ${input?.conditionalNavigation ? 'with-check-mark' : ''}`
146
+ }, input?.conditionalNavigation && /*#__PURE__*/React.createElement("span", {
147
+ className: "x-ui-icons c-x icon"
148
+ }, "I"), /*#__PURE__*/React.createElement("button", {
149
+ onClick: handleToggleConditionalNavigation,
150
+ type: "button"
151
+ }, "Go to section based on answer"))))))), /*#__PURE__*/React.createElement("div", {
152
+ className: "input-name-description"
153
+ }, /*#__PURE__*/React.createElement(_f.TextInput, {
154
+ label: "Input name",
155
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.label`,
156
+ placeholder: "Question"
157
+ }), hasDescription && /*#__PURE__*/React.createElement(_f.TextInput, {
158
+ label: "Description(optional)",
159
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.description`,
160
+ placeholder: "Describe details for the question"
161
+ })), shouldRenderOptions && /*#__PURE__*/React.createElement(_formik.FieldArray, {
162
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.options`
163
+ }, _ref2 => {
164
+ let {
165
+ push,
166
+ remove
167
+ } = _ref2;
168
+ return /*#__PURE__*/React.createElement("div", {
169
+ className: "input-options"
170
+ }, /*#__PURE__*/React.createElement("p", null, "Options"), input?.options.map((option, optionIndex) => /*#__PURE__*/React.createElement("div", {
171
+ key: option.key,
172
+ className: "option-container"
173
+ }, input.type !== 'select' && /*#__PURE__*/React.createElement("div", {
174
+ className: `input-icon-sample ${input.type}`
175
+ }), /*#__PURE__*/React.createElement(_f.TextInput, {
176
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.options.${optionIndex}.value`,
177
+ placeholder: `Option ${optionIndex + 1}`,
178
+ onBlur: e => handleSelectOptionBlur(e, optionIndex)
179
+ }), input?.conditionalNavigation && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_f.SelectInput, {
180
+ options: [{
181
+ label: 'Select section',
182
+ value: '',
183
+ disabled: true
184
+ }, ...availableSections],
185
+ name: `sections.${sectionIndex}.inputs.${inputIndex}.options.${optionIndex}.nextSection`
186
+ })), /*#__PURE__*/React.createElement("button", {
187
+ className: "icon",
188
+ type: "button",
189
+ onClick: () => remove(optionIndex)
190
+ }, "Y"))), /*#__PURE__*/React.createElement("button", {
191
+ className: "add-option-cta",
192
+ type: "button",
193
+ onClick: () => push({
194
+ key: `sections-${sectionIndex}-inputs-${inputIndex}-options-${input.options.length - 1}`,
195
+ value: '',
196
+ label: '',
197
+ nextSection: ''
198
+ })
199
+ }, /*#__PURE__*/React.createElement("div", {
200
+ className: "icon-container"
201
+ }, /*#__PURE__*/React.createElement("span", {
202
+ className: "icon"
203
+ }, "+")), /*#__PURE__*/React.createElement("span", {
204
+ className: "text x-paragraph c-x"
205
+ }, "Add Option")));
206
+ })));
207
+ };
208
+ InputBuilder.propTypes = {
209
+ /**
210
+ * The HTML id for this element
211
+ */
212
+ id: _propTypes.default.string,
213
+ /**
214
+ * The HTML class names for this element
215
+ */
216
+ className: _propTypes.default.string,
217
+ /**
218
+ * The React-written, css properties for this element.
219
+ */
220
+ style: _propTypes.default.objectOf(_propTypes.default.string),
221
+ /**
222
+ * The preferred primary order of the popover
223
+ */
224
+ preferredPopoverOrder: _propTypes.default.arrayOf(_propTypes.default.string)
225
+ };
226
+ InputBuilder.defaultProps = {
227
+ preferredPopoverOrder: ['right', 'bottom', 'left', 'top']
228
+ };
229
+ var _default = exports.default = InputBuilder;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "InputBuilder", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _InputBuilder.default;
10
+ }
11
+ });
12
+ var _InputBuilder = _interopRequireDefault(require("./InputBuilder"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }