@pareto-engineering/design-system 4.0.0-alpha.62 → 4.0.0-alpha.63

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 (192) hide show
  1. package/dist/cjs/f/FormInput/FormInput.js +43 -13
  2. package/dist/cjs/f/common/V2/Description/Description.js +76 -0
  3. package/dist/cjs/f/common/V2/Description/index.js +13 -0
  4. package/dist/cjs/f/common/V2/Description/styles.scss +10 -0
  5. package/dist/cjs/f/common/V2/Label/Label.js +84 -0
  6. package/dist/cjs/f/common/V2/Label/index.js +13 -0
  7. package/dist/cjs/f/common/V2/Label/styles.scss +9 -0
  8. package/dist/cjs/f/common/V2/index.js +19 -0
  9. package/dist/cjs/f/common/index.js +12 -0
  10. package/dist/cjs/f/fields/V2/Checkbox/Checkbox.js +122 -0
  11. package/dist/cjs/f/fields/V2/Checkbox/index.js +13 -0
  12. package/dist/cjs/f/fields/V2/Checkbox/styles.scss +16 -0
  13. package/dist/cjs/f/fields/V2/ChoicesInput/ChoicesInput.js +154 -0
  14. package/dist/cjs/f/fields/V2/ChoicesInput/common/Choice/Choice.js +104 -0
  15. package/dist/cjs/f/fields/V2/ChoicesInput/common/Choice/index.js +13 -0
  16. package/dist/cjs/f/fields/V2/ChoicesInput/common/index.js +12 -0
  17. package/dist/cjs/f/fields/V2/ChoicesInput/index.js +13 -0
  18. package/dist/cjs/f/fields/V2/ChoicesInput/styles.scss +79 -0
  19. package/dist/cjs/f/fields/V2/EditorInput/EditorInput.js +197 -0
  20. package/dist/cjs/f/fields/V2/EditorInput/common/Toolbar.js +257 -0
  21. package/dist/cjs/f/fields/V2/EditorInput/common/TreeViewPlugin.js +18 -0
  22. package/dist/cjs/f/fields/V2/EditorInput/common/index.js +20 -0
  23. package/dist/cjs/f/fields/V2/EditorInput/index.js +13 -0
  24. package/dist/cjs/f/fields/V2/EditorInput/styles.scss +149 -0
  25. package/dist/cjs/f/fields/V2/LinkInput/LinkInput.js +156 -0
  26. package/dist/cjs/f/fields/V2/LinkInput/index.js +13 -0
  27. package/dist/cjs/f/fields/V2/LinkInput/styles.scss +90 -0
  28. package/dist/cjs/f/fields/V2/QueryChoices/QueryChoices.js +137 -0
  29. package/dist/cjs/f/fields/V2/QueryChoices/index.js +13 -0
  30. package/dist/cjs/f/fields/V2/QueryCombobox/QueryCombobox.js +229 -0
  31. package/dist/cjs/f/fields/V2/QueryCombobox/common/Combobox/Combobox.js +236 -0
  32. package/dist/cjs/f/fields/V2/QueryCombobox/common/Combobox/index.js +13 -0
  33. package/dist/cjs/f/fields/V2/QueryCombobox/common/Menu/Menu.js +83 -0
  34. package/dist/cjs/f/fields/V2/QueryCombobox/common/Menu/index.js +13 -0
  35. package/dist/cjs/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +300 -0
  36. package/dist/cjs/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +13 -0
  37. package/dist/cjs/f/fields/V2/QueryCombobox/common/index.js +26 -0
  38. package/dist/cjs/f/fields/V2/QueryCombobox/index.js +13 -0
  39. package/dist/cjs/f/fields/V2/QueryCombobox/styles.scss +127 -0
  40. package/dist/cjs/f/fields/V2/QuerySelect/QuerySelect.js +198 -0
  41. package/dist/cjs/f/fields/V2/QuerySelect/index.js +13 -0
  42. package/dist/cjs/f/fields/V2/RatingsInput/RatingsInput.js +130 -0
  43. package/dist/cjs/f/fields/V2/RatingsInput/common/Rating/Rating.js +117 -0
  44. package/dist/cjs/f/fields/V2/RatingsInput/common/Rating/index.js +13 -0
  45. package/dist/cjs/f/fields/V2/RatingsInput/common/index.js +12 -0
  46. package/dist/cjs/f/fields/V2/RatingsInput/index.js +13 -0
  47. package/dist/cjs/f/fields/V2/RatingsInput/styles.scss +48 -0
  48. package/dist/cjs/f/fields/V2/SelectInput/SelectInput.js +154 -0
  49. package/dist/cjs/f/fields/V2/SelectInput/index.js +13 -0
  50. package/dist/cjs/f/fields/V2/SelectInput/styles.scss +87 -0
  51. package/dist/cjs/f/fields/V2/TextInput/TextInput.js +155 -0
  52. package/dist/cjs/f/fields/V2/TextInput/index.js +13 -0
  53. package/dist/cjs/f/fields/V2/TextInput/styles.scss +78 -0
  54. package/dist/cjs/f/fields/V2/TextareaInput/TextareaInput.js +152 -0
  55. package/dist/cjs/f/fields/V2/TextareaInput/index.js +13 -0
  56. package/dist/cjs/f/fields/V2/TextareaInput/styles.scss +53 -0
  57. package/dist/cjs/f/fields/V2/index.js +82 -0
  58. package/dist/cjs/f/fields/index.js +26 -1
  59. package/dist/es/f/FormInput/FormInput.js +33 -3
  60. package/dist/es/f/common/V2/Description/Description.js +68 -0
  61. package/dist/es/f/common/V2/Description/index.js +2 -0
  62. package/dist/es/f/common/V2/Description/styles.scss +10 -0
  63. package/dist/es/f/common/V2/Label/Label.js +76 -0
  64. package/dist/es/f/common/V2/Label/index.js +2 -0
  65. package/dist/es/f/common/V2/Label/styles.scss +9 -0
  66. package/dist/es/f/common/V2/index.js +2 -0
  67. package/dist/es/f/common/index.js +2 -1
  68. package/dist/es/f/fields/V2/Checkbox/Checkbox.js +114 -0
  69. package/dist/es/f/fields/V2/Checkbox/index.js +2 -0
  70. package/dist/es/f/fields/V2/Checkbox/styles.scss +16 -0
  71. package/dist/es/f/fields/V2/ChoicesInput/ChoicesInput.js +148 -0
  72. package/dist/es/f/fields/V2/ChoicesInput/common/Choice/Choice.js +97 -0
  73. package/dist/es/f/fields/V2/ChoicesInput/common/Choice/index.js +2 -0
  74. package/dist/es/f/fields/V2/ChoicesInput/common/index.js +1 -0
  75. package/dist/es/f/fields/V2/ChoicesInput/index.js +2 -0
  76. package/dist/es/f/fields/V2/ChoicesInput/styles.scss +79 -0
  77. package/dist/es/f/fields/V2/EditorInput/EditorInput.js +192 -0
  78. package/dist/es/f/fields/V2/EditorInput/common/Toolbar.js +246 -0
  79. package/dist/es/f/fields/V2/EditorInput/common/TreeViewPlugin.js +11 -0
  80. package/dist/es/f/fields/V2/EditorInput/common/index.js +2 -0
  81. package/dist/es/f/fields/V2/EditorInput/index.js +2 -0
  82. package/dist/es/f/fields/V2/EditorInput/styles.scss +149 -0
  83. package/dist/es/f/fields/V2/LinkInput/LinkInput.js +148 -0
  84. package/dist/es/f/fields/V2/LinkInput/index.js +2 -0
  85. package/dist/es/f/fields/V2/LinkInput/styles.scss +90 -0
  86. package/dist/es/f/fields/V2/QueryChoices/QueryChoices.js +126 -0
  87. package/dist/es/f/fields/V2/QueryChoices/index.js +2 -0
  88. package/dist/es/f/fields/V2/QueryCombobox/QueryCombobox.js +221 -0
  89. package/dist/es/f/fields/V2/QueryCombobox/common/Combobox/Combobox.js +229 -0
  90. package/dist/es/f/fields/V2/QueryCombobox/common/Combobox/index.js +2 -0
  91. package/dist/es/f/fields/V2/QueryCombobox/common/Menu/Menu.js +73 -0
  92. package/dist/es/f/fields/V2/QueryCombobox/common/Menu/index.js +2 -0
  93. package/dist/es/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +293 -0
  94. package/dist/es/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +2 -0
  95. package/dist/es/f/fields/V2/QueryCombobox/common/index.js +3 -0
  96. package/dist/es/f/fields/V2/QueryCombobox/index.js +2 -0
  97. package/dist/es/f/fields/V2/QueryCombobox/styles.scss +127 -0
  98. package/dist/es/f/fields/V2/QuerySelect/QuerySelect.js +186 -0
  99. package/dist/es/f/fields/V2/QuerySelect/index.js +2 -0
  100. package/dist/es/f/fields/V2/RatingsInput/RatingsInput.js +124 -0
  101. package/dist/es/f/fields/V2/RatingsInput/common/Rating/Rating.js +109 -0
  102. package/dist/es/f/fields/V2/RatingsInput/common/Rating/index.js +2 -0
  103. package/dist/es/f/fields/V2/RatingsInput/common/index.js +1 -0
  104. package/dist/es/f/fields/V2/RatingsInput/index.js +2 -0
  105. package/dist/es/f/fields/V2/RatingsInput/styles.scss +48 -0
  106. package/dist/es/f/fields/V2/SelectInput/SelectInput.js +146 -0
  107. package/dist/es/f/fields/V2/SelectInput/index.js +2 -0
  108. package/dist/es/f/fields/V2/SelectInput/styles.scss +87 -0
  109. package/dist/es/f/fields/V2/TextInput/TextInput.js +147 -0
  110. package/dist/es/f/fields/V2/TextInput/index.js +2 -0
  111. package/dist/es/f/fields/V2/TextInput/styles.scss +78 -0
  112. package/dist/es/f/fields/V2/TextareaInput/TextareaInput.js +146 -0
  113. package/dist/es/f/fields/V2/TextareaInput/index.js +2 -0
  114. package/dist/es/f/fields/V2/TextareaInput/styles.scss +53 -0
  115. package/dist/es/f/fields/V2/index.js +11 -0
  116. package/dist/es/f/fields/index.js +2 -1
  117. package/package.json +3 -3
  118. package/src/stories/f/v2/Checkbox.stories.jsx +102 -0
  119. package/src/stories/f/v2/ChoicesInput.stories.jsx +139 -0
  120. package/src/stories/f/v2/EditorInput.stories.jsx +81 -0
  121. package/src/stories/f/v2/LinkInput.stories.jsx +93 -0
  122. package/src/stories/f/v2/QueryChoices.stories.jsx +144 -0
  123. package/src/stories/f/v2/QueryCombobox.stories.jsx +301 -0
  124. package/src/stories/f/v2/QuerySelect.stories.jsx +150 -0
  125. package/src/stories/f/v2/RatingsInput.stories.jsx +77 -0
  126. package/src/stories/f/v2/SelectInput.stories.jsx +95 -0
  127. package/src/stories/f/v2/TextInput.stories.jsx +120 -0
  128. package/src/stories/f/v2/TextareaInput.stories.jsx +107 -0
  129. package/src/stories/f/v2/__generated__/FormInputAllTaskStatusesQuery.graphql.js +122 -0
  130. package/src/stories/f/v2/__generated__/FormInputAllTeamsQuery.graphql.js +139 -0
  131. package/src/stories/f/v2/__generated__/QueryChoicesAllTaskStatusesQuery.graphql.js +122 -0
  132. package/src/stories/f/v2/__generated__/QueryComboboxAllTeamsQuery.graphql.js +139 -0
  133. package/src/stories/f/v2/__generated__/QuerySelectAllTaskStatusesQuery.graphql.js +122 -0
  134. package/src/ui/f/FormInput/FormInput.jsx +57 -12
  135. package/src/ui/f/common/V2/Description/Description.jsx +94 -0
  136. package/src/ui/f/common/V2/Description/index.js +2 -0
  137. package/src/ui/f/common/V2/Description/styles.scss +10 -0
  138. package/src/ui/f/common/V2/Label/Label.jsx +102 -0
  139. package/src/ui/f/common/V2/Label/index.js +2 -0
  140. package/src/ui/f/common/V2/Label/styles.scss +9 -0
  141. package/src/ui/f/common/V2/index.js +2 -0
  142. package/src/ui/f/common/index.js +1 -0
  143. package/src/ui/f/fields/V2/Checkbox/Checkbox.jsx +146 -0
  144. package/src/ui/f/fields/V2/Checkbox/index.js +2 -0
  145. package/src/ui/f/fields/V2/Checkbox/styles.scss +16 -0
  146. package/src/ui/f/fields/V2/ChoicesInput/ChoicesInput.jsx +183 -0
  147. package/src/ui/f/fields/V2/ChoicesInput/common/Choice/Choice.jsx +125 -0
  148. package/src/ui/f/fields/V2/ChoicesInput/common/Choice/index.js +2 -0
  149. package/src/ui/f/fields/V2/ChoicesInput/common/index.js +1 -0
  150. package/src/ui/f/fields/V2/ChoicesInput/index.js +2 -0
  151. package/src/ui/f/fields/V2/ChoicesInput/styles.scss +79 -0
  152. package/src/ui/f/fields/V2/EditorInput/EditorInput.jsx +244 -0
  153. package/src/ui/f/fields/V2/EditorInput/common/Toolbar.jsx +356 -0
  154. package/src/ui/f/fields/V2/EditorInput/common/TreeViewPlugin.jsx +16 -0
  155. package/src/ui/f/fields/V2/EditorInput/common/index.jsx +2 -0
  156. package/src/ui/f/fields/V2/EditorInput/index.js +2 -0
  157. package/src/ui/f/fields/V2/EditorInput/styles.scss +149 -0
  158. package/src/ui/f/fields/V2/LinkInput/LinkInput.jsx +187 -0
  159. package/src/ui/f/fields/V2/LinkInput/index.js +2 -0
  160. package/src/ui/f/fields/V2/LinkInput/styles.scss +90 -0
  161. package/src/ui/f/fields/V2/QueryChoices/QueryChoices.jsx +153 -0
  162. package/src/ui/f/fields/V2/QueryChoices/index.js +2 -0
  163. package/src/ui/f/fields/V2/QueryCombobox/QueryCombobox.jsx +254 -0
  164. package/src/ui/f/fields/V2/QueryCombobox/common/Combobox/Combobox.jsx +276 -0
  165. package/src/ui/f/fields/V2/QueryCombobox/common/Combobox/index.js +2 -0
  166. package/src/ui/f/fields/V2/QueryCombobox/common/Menu/Menu.jsx +103 -0
  167. package/src/ui/f/fields/V2/QueryCombobox/common/Menu/index.js +2 -0
  168. package/src/ui/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.jsx +362 -0
  169. package/src/ui/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +2 -0
  170. package/src/ui/f/fields/V2/QueryCombobox/common/index.js +3 -0
  171. package/src/ui/f/fields/V2/QueryCombobox/index.js +2 -0
  172. package/src/ui/f/fields/V2/QueryCombobox/styles.scss +127 -0
  173. package/src/ui/f/fields/V2/QuerySelect/QuerySelect.jsx +220 -0
  174. package/src/ui/f/fields/V2/QuerySelect/index.js +2 -0
  175. package/src/ui/f/fields/V2/RatingsInput/RatingsInput.jsx +152 -0
  176. package/src/ui/f/fields/V2/RatingsInput/common/Rating/Rating.jsx +142 -0
  177. package/src/ui/f/fields/V2/RatingsInput/common/Rating/index.js +2 -0
  178. package/src/ui/f/fields/V2/RatingsInput/common/index.js +1 -0
  179. package/src/ui/f/fields/V2/RatingsInput/index.js +2 -0
  180. package/src/ui/f/fields/V2/RatingsInput/styles.scss +48 -0
  181. package/src/ui/f/fields/V2/SelectInput/SelectInput.jsx +187 -0
  182. package/src/ui/f/fields/V2/SelectInput/index.js +2 -0
  183. package/src/ui/f/fields/V2/SelectInput/styles.scss +87 -0
  184. package/src/ui/f/fields/V2/TextInput/TextInput.jsx +192 -0
  185. package/src/ui/f/fields/V2/TextInput/index.js +2 -0
  186. package/src/ui/f/fields/V2/TextInput/styles.scss +78 -0
  187. package/src/ui/f/fields/V2/TextareaInput/TextareaInput.jsx +180 -0
  188. package/src/ui/f/fields/V2/TextareaInput/index.js +2 -0
  189. package/src/ui/f/fields/V2/TextareaInput/styles.scss +53 -0
  190. package/src/ui/f/fields/V2/index.js +11 -0
  191. package/src/ui/f/fields/index.js +1 -0
  192. package/tests/__snapshots__/Storyshots.test.js.snap +5909 -0
@@ -0,0 +1,229 @@
1
+ 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); }
2
+ /* @pareto-engineering/generator-front 1.0.12 */
3
+ import * as React from 'react';
4
+ import { useEffect, useRef } from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import { useCombobox } from 'downshift';
7
+ import styleNames from '@pareto-engineering/bem/exports';
8
+ import { FormLabelV2, FormDescriptionV2 } from "../../../../..";
9
+ import { Popover, LoadingCircle } from "../../../../../../a";
10
+ import { Button } from "../../../../../../b";
11
+ import { lookUpInputValueFromFetchedOptions } from "../../../../../common";
12
+
13
+ // Local Definitions
14
+
15
+ import { Menu } from "../Menu";
16
+ const baseClassName = styleNames.base;
17
+ const componentClassName = 'combobox';
18
+
19
+ /**
20
+ * This is the component description.
21
+ */
22
+ const Combobox = ({
23
+ id,
24
+ className: userClassName,
25
+ style,
26
+ label,
27
+ labelColor,
28
+ name,
29
+ options: items,
30
+ getOptions,
31
+ setOptions,
32
+ setValue,
33
+ description,
34
+ value,
35
+ color,
36
+ minLength,
37
+ isFetching,
38
+ transformSearch,
39
+ disabled,
40
+ optional,
41
+ placeholder,
42
+ promptCreateNewOption
43
+ // ...otherProps
44
+ }) => {
45
+ const {
46
+ isOpen,
47
+ selectItem,
48
+ selectedItem,
49
+ inputValue,
50
+ setInputValue,
51
+ getLabelProps,
52
+ getMenuProps,
53
+ getInputProps,
54
+ highlightedIndex,
55
+ getComboboxProps,
56
+ getItemProps
57
+ } = useCombobox({
58
+ items,
59
+ initialSelectedItem: value,
60
+ itemToString: item => item ? item.label : '',
61
+ onInputValueChange: ({
62
+ inputValue: searchInputValue
63
+ }) => {
64
+ const transformedInput = transformSearch(searchInputValue);
65
+ if (transformedInput.length > minLength) {
66
+ getOptions(transformedInput);
67
+ }
68
+ }
69
+ });
70
+ useEffect(() => {
71
+ if (promptCreateNewOption) {
72
+ lookUpInputValueFromFetchedOptions({
73
+ items,
74
+ inputValue,
75
+ setOptions,
76
+ minLength
77
+ });
78
+ }
79
+ }, [inputValue, items, promptCreateNewOption]);
80
+
81
+ // If the user has selected an item, we'll set the value of the field
82
+ // or if the combobox state has a selected item, we'll set the value to the formik state
83
+ useEffect(() => {
84
+ if (selectedItem) {
85
+ setValue(selectedItem);
86
+ }
87
+ }, [selectedItem]);
88
+
89
+ // If the formik state has a value, we'll set the selected item to the combobox state
90
+ useEffect(() => {
91
+ if (value?.value !== selectedItem?.value) {
92
+ selectItem(value);
93
+ }
94
+ }, [value]);
95
+ const parentRef = useRef(null);
96
+ const resetInputValue = () => setInputValue('');
97
+ return /*#__PURE__*/React.createElement("div", _extends({
98
+ id: id,
99
+ className: [baseClassName, componentClassName, userClassName, `y-${color}`].filter(e => e).join(' '),
100
+ style: style,
101
+ ref: parentRef
102
+ }, getComboboxProps()), /*#__PURE__*/React.createElement(FormLabelV2, _extends({}, getLabelProps(), {
103
+ name: name,
104
+ optional: optional,
105
+ color: labelColor
106
+ }), label), /*#__PURE__*/React.createElement("input", _extends({}, getInputProps(), {
107
+ className: "input",
108
+ disabled: disabled,
109
+ placeholder: placeholder
110
+ })), isFetching && /*#__PURE__*/React.createElement(LoadingCircle, {
111
+ className: "x-main"
112
+ }), inputValue.length > minLength && !isFetching && /*#__PURE__*/React.createElement(Button, {
113
+ isSimple: true,
114
+ isCompact: true,
115
+ color: "heading",
116
+ onClick: resetInputValue
117
+ }, /*#__PURE__*/React.createElement("span", {
118
+ className: "icon"
119
+ }, "Y")), /*#__PURE__*/React.createElement(FormDescriptionV2, {
120
+ className: "s-1",
121
+ description: description,
122
+ name: name
123
+ }), /*#__PURE__*/React.createElement(Popover, {
124
+ isOpen: isOpen,
125
+ parentRef: parentRef
126
+ }, /*#__PURE__*/React.createElement(Menu, _extends({
127
+ className: `y-${color}`,
128
+ isOpen: isOpen,
129
+ getItemProps: getItemProps,
130
+ highlightedIndex: highlightedIndex,
131
+ items: items
132
+ }, getMenuProps()))));
133
+ };
134
+ Combobox.propTypes = {
135
+ /**
136
+ * The HTML id for this element
137
+ */
138
+ id: PropTypes.string,
139
+ /**
140
+ * The HTML class names for this element
141
+ */
142
+ className: PropTypes.string,
143
+ /**
144
+ * The React-written, css properties for this element.
145
+ */
146
+ style: PropTypes.objectOf(PropTypes.string),
147
+ /**
148
+ * The label of the custom select input
149
+ */
150
+ label: PropTypes.string,
151
+ /**
152
+ * The custom select input options from the backend
153
+ */
154
+ options: PropTypes.arrayOf(PropTypes.shape({
155
+ value: PropTypes.string,
156
+ label: PropTypes.string
157
+ })),
158
+ /**
159
+ * The name of the custom select input
160
+ */
161
+ name: PropTypes.string,
162
+ /**
163
+ * The function to fetch the options from the backend
164
+ */
165
+ getOptions: PropTypes.func,
166
+ /**
167
+ * The function to set the value of the custom select input
168
+ */
169
+ setValue: PropTypes.func.isRequired,
170
+ /**
171
+ * The custom select input description
172
+ */
173
+ description: PropTypes.string,
174
+ /**
175
+ * The value of the custom select input
176
+ */
177
+ value: PropTypes.shape({
178
+ value: PropTypes.string,
179
+ label: PropTypes.string
180
+ }),
181
+ /**
182
+ * The base color of the combobox custom select input
183
+ */
184
+ color: PropTypes.string,
185
+ /**
186
+ * Whether the query getting the combobox options is inFlight
187
+ */
188
+ isFetching: PropTypes.bool.isRequired,
189
+ /**
190
+ * The minimum length of the search input to start fetching the options
191
+ */
192
+ minLength: PropTypes.number,
193
+ /**
194
+ * The function to transform the search input
195
+ */
196
+ transformSearch: PropTypes.func,
197
+ /**
198
+ * Whether the input filed shpuld be disabled
199
+ */
200
+ disabled: PropTypes.bool,
201
+ /**
202
+ * The number of columns the label should span
203
+ */
204
+ labelSpan: PropTypes.number,
205
+ /**
206
+ * The number of columns the input should span
207
+ */
208
+ inputSpan: PropTypes.number,
209
+ /**
210
+ * The number of columns the label should span on desktop
211
+ */
212
+ desktopLabelSpan: PropTypes.number,
213
+ /**
214
+ * The number of columns the input should span on desktop
215
+ */
216
+ desktopInputSpan: PropTypes.number,
217
+ /**
218
+ * Whether the input is optional or not
219
+ */
220
+ optional: PropTypes.bool,
221
+ /**
222
+ * The placeholder text for the input
223
+ */
224
+ placeholder: PropTypes.string
225
+ };
226
+ Combobox.defaultProps = {
227
+ // someProp: false
228
+ };
229
+ export default Combobox;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as Combobox } from "./Combobox";
@@ -0,0 +1,73 @@
1
+ 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); }
2
+ /* @pareto-engineering/generator-front 1.0.12 */
3
+ import * as React from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import styleNames from '@pareto-engineering/bem/exports';
6
+
7
+ // Local Definitions
8
+
9
+ const baseClassName = styleNames.base;
10
+ const componentClassName = 'menu';
11
+
12
+ /**
13
+ * This is the component description.
14
+ */
15
+ const Menu = /*#__PURE__*/React.forwardRef(({
16
+ id,
17
+ className: userClassName,
18
+ style,
19
+ items,
20
+ isOpen,
21
+ highlightedIndex,
22
+ getItemProps,
23
+ ...otherProps
24
+ }, ref) => /*#__PURE__*/React.createElement("ul", _extends({
25
+ id: id,
26
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
27
+ style: style,
28
+ ref: ref
29
+ }, otherProps), isOpen && items.map((item, index) => /*#__PURE__*/React.createElement("li", _extends({
30
+ key: item.label
31
+ }, getItemProps({
32
+ item,
33
+ index
34
+ }), {
35
+ className: ['item', highlightedIndex === index && styleNames.modifierActive].filter(Boolean).join(' ')
36
+ }), /*#__PURE__*/React.createElement("p", null, item.label)))));
37
+ Menu.propTypes = {
38
+ /**
39
+ * The HTML id for this element
40
+ */
41
+ id: PropTypes.string,
42
+ /**
43
+ * The HTML class names for this element
44
+ */
45
+ className: PropTypes.string,
46
+ /**
47
+ * The React-written, css properties for this element.
48
+ */
49
+ style: PropTypes.objectOf(PropTypes.string),
50
+ /**
51
+ * The items to be displayed in the menu
52
+ */
53
+ items: PropTypes.arrayOf(PropTypes.shape({
54
+ value: PropTypes.string,
55
+ label: PropTypes.string
56
+ })),
57
+ /**
58
+ * Whether or not the menu is open
59
+ */
60
+ isOpen: PropTypes.bool,
61
+ /**
62
+ * The index of the highlighted item
63
+ */
64
+ highlightedIndex: PropTypes.number,
65
+ /**
66
+ * The function to get the item props
67
+ */
68
+ getItemProps: PropTypes.func
69
+ };
70
+ Menu.defaultProps = {
71
+ // someProp:false
72
+ };
73
+ export default Menu;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as Menu } from "./Menu";
@@ -0,0 +1,293 @@
1
+ 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); }
2
+ /* @pareto-engineering/generator-front 1.0.12 */
3
+ import * as React from 'react';
4
+ import { useState, useEffect, useRef } from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import styleNames from '@pareto-engineering/bem/exports';
7
+ import { useCombobox, useMultipleSelection } from 'downshift';
8
+ import { Button } from "../../../../../../b";
9
+ import { Popover, LoadingCircle } from "../../../../../../a";
10
+ import { FormDescriptionV2, FormLabelV2 } from "../../../../..";
11
+ import { lookUpInputValueFromFetchedOptions } from "../../../../../common";
12
+
13
+ // Local Definitions
14
+
15
+ import { Menu } from "../Menu";
16
+ const baseClassName = styleNames.base;
17
+ const componentClassName = 'multiple-combobox';
18
+
19
+ /**
20
+ * @param {Array[Object]} first - first array to check if it has an item not in the second array.
21
+ * @param {Array[Object]} second - second array to check against the first array.
22
+ *
23
+ * @returns {Boolean} - true if the first array has an item not in the second array.
24
+ */
25
+ const testIfArraysAreUnique = (first, second) => first.filter(objInFirstArray => !second.some(objInSecondArray => objInFirstArray.value === objInSecondArray.value)).length > 0;
26
+
27
+ /**
28
+ * This is the component description.
29
+ */
30
+ const MultipleCombobox = ({
31
+ id,
32
+ className: userClassName,
33
+ style,
34
+ label,
35
+ labelColor,
36
+ name,
37
+ optional,
38
+ options: items,
39
+ getOptions,
40
+ setValue,
41
+ description,
42
+ value,
43
+ color,
44
+ isFetching,
45
+ minLength,
46
+ transformSearch,
47
+ disabled,
48
+ placeholder,
49
+ setOptions,
50
+ promptCreateNewOption
51
+ // ...otherProps
52
+ }) => {
53
+ const [searchInputValue, setSearchInputValue] = useState('');
54
+ const {
55
+ getSelectedItemProps,
56
+ getDropdownProps,
57
+ addSelectedItem,
58
+ removeSelectedItem,
59
+ setSelectedItems,
60
+ selectedItems
61
+ } = useMultipleSelection({
62
+ initialSelectedItems: value || []
63
+ });
64
+
65
+ /**
66
+ * @returns {Boolean} - Unique items from the options array so that the combobox
67
+ * shows only the options that are not yet selected.
68
+ */
69
+ const getFilteredItems = () => items.filter(item => selectedItems.findIndex(e => e.label === item.label) < 0);
70
+ const {
71
+ isOpen,
72
+ getLabelProps,
73
+ getMenuProps,
74
+ getInputProps,
75
+ getComboboxProps,
76
+ highlightedIndex,
77
+ getItemProps,
78
+ inputValue,
79
+ setInputValue
80
+ } = useCombobox({
81
+ searchInputValue,
82
+ defaultHighlightedIndex: 0,
83
+ // after selection, highlight the first item.
84
+ selectedItem: null,
85
+ items: getFilteredItems(),
86
+ circularNavigation: true,
87
+ stateReducer: (state, actionAndChanges) => {
88
+ const {
89
+ changes,
90
+ type
91
+ } = actionAndChanges;
92
+ switch (type) {
93
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
94
+ case useCombobox.stateChangeTypes.ItemClick:
95
+ return {
96
+ ...changes,
97
+ isOpen: true // keep the menu open after selection.
98
+ };
99
+
100
+ default:
101
+ break;
102
+ }
103
+ return changes;
104
+ },
105
+ onStateChange: ({
106
+ inputValue: newSearchInputValue,
107
+ type,
108
+ selectedItem
109
+ }) => {
110
+ switch (type) {
111
+ case useCombobox.stateChangeTypes.InputChange:
112
+ {
113
+ const transformedInput = transformSearch(newSearchInputValue);
114
+ if (transformedInput.length > minLength) {
115
+ getOptions(transformedInput);
116
+ }
117
+ setSearchInputValue(newSearchInputValue);
118
+ break;
119
+ }
120
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
121
+ case useCombobox.stateChangeTypes.ItemClick:
122
+ case useCombobox.stateChangeTypes.InputBlur:
123
+ if (selectedItem) {
124
+ setSearchInputValue('');
125
+ addSelectedItem(selectedItem);
126
+ }
127
+ break;
128
+ default:
129
+ break;
130
+ }
131
+ }
132
+ });
133
+ useEffect(() => {
134
+ if (selectedItems?.length > 0) {
135
+ setValue(selectedItems);
136
+ }
137
+ }, [selectedItems]);
138
+ useEffect(() => {
139
+ if (promptCreateNewOption) {
140
+ lookUpInputValueFromFetchedOptions({
141
+ items,
142
+ inputValue,
143
+ setOptions,
144
+ minLength
145
+ });
146
+ }
147
+ }, [inputValue, items, promptCreateNewOption]);
148
+ useEffect(() => {
149
+ if (value?.length > 0 && (testIfArraysAreUnique(value, selectedItems) || testIfArraysAreUnique(selectedItems, value))) {
150
+ setSelectedItems(value);
151
+ }
152
+ }, [value]);
153
+ const parentRef = useRef(null);
154
+ const resetInputValue = () => setInputValue('');
155
+ return /*#__PURE__*/React.createElement("div", _extends({
156
+ id: id,
157
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
158
+ style: style,
159
+ ref: parentRef
160
+ }, getComboboxProps()), /*#__PURE__*/React.createElement(FormLabelV2, _extends({
161
+ className: [baseClassName, componentClassName].filter(e => e).join(' ')
162
+ }, getLabelProps(), {
163
+ name: name,
164
+ optional: optional,
165
+ color: labelColor
166
+ }), label), selectedItems?.length > 0 && /*#__PURE__*/React.createElement("div", {
167
+ className: "selected-items"
168
+ }, selectedItems.map((selectedItem, index) => /*#__PURE__*/React.createElement("div", _extends({
169
+ key: selectedItem.label
170
+ }, getSelectedItemProps({
171
+ selectedItem,
172
+ index
173
+ }), {
174
+ className: "item"
175
+ }), /*#__PURE__*/React.createElement(Button, {
176
+ onClick: e => {
177
+ e.stopPropagation();
178
+ removeSelectedItem(selectedItem);
179
+ },
180
+ isCompact: true,
181
+ color: color
182
+ }, /*#__PURE__*/React.createElement("span", null, selectedItem.label), /*#__PURE__*/React.createElement("span", {
183
+ className: "icon close"
184
+ }, "Y"))))), /*#__PURE__*/React.createElement("input", _extends({}, getInputProps(getDropdownProps({
185
+ preventKeyAction: isOpen
186
+ })), {
187
+ className: "input",
188
+ disabled: disabled,
189
+ placeholder: placeholder
190
+ })), isFetching && /*#__PURE__*/React.createElement(LoadingCircle, {
191
+ className: "x-main"
192
+ }), inputValue.length > minLength && !isFetching && /*#__PURE__*/React.createElement(Button, {
193
+ isSimple: true,
194
+ isCompact: true,
195
+ color: "interactive",
196
+ onClick: resetInputValue
197
+ }, /*#__PURE__*/React.createElement("span", {
198
+ className: "icon"
199
+ }, "Y")), /*#__PURE__*/React.createElement(FormDescriptionV2, {
200
+ className: "s-1",
201
+ description: description,
202
+ name: name
203
+ }), /*#__PURE__*/React.createElement(Popover, {
204
+ isOpen: isOpen,
205
+ parentRef: parentRef
206
+ }, /*#__PURE__*/React.createElement(Menu, _extends({
207
+ className: `y-${color}`,
208
+ isOpen: isOpen,
209
+ getItemProps: getItemProps,
210
+ highlightedIndex: highlightedIndex,
211
+ items: getFilteredItems()
212
+ }, getMenuProps()))));
213
+ };
214
+ MultipleCombobox.propTypes = {
215
+ /**
216
+ * The HTML id for this element
217
+ */
218
+ id: PropTypes.string,
219
+ /**
220
+ * The HTML class names for this element
221
+ */
222
+ className: PropTypes.string,
223
+ /**
224
+ * The React-written, css properties for this element.
225
+ */
226
+ style: PropTypes.objectOf(PropTypes.string),
227
+ /**
228
+ * The label of the custom select input
229
+ */
230
+ label: PropTypes.string,
231
+ /**
232
+ * The custom select input options from the backend
233
+ */
234
+ options: PropTypes.arrayOf(PropTypes.shape({
235
+ value: PropTypes.string,
236
+ label: PropTypes.string
237
+ })),
238
+ /**
239
+ * The name of the custom select input
240
+ */
241
+ name: PropTypes.string,
242
+ /**
243
+ * The function to fetch the options from the backend
244
+ */
245
+ getOptions: PropTypes.func,
246
+ /**
247
+ * The function to set the value of the custom select input
248
+ */
249
+ setValue: PropTypes.func.isRequired,
250
+ /**
251
+ * The custom select input description
252
+ */
253
+ description: PropTypes.string,
254
+ /**
255
+ * The value of the custom select input
256
+ */
257
+ value: PropTypes.arrayOf(PropTypes.shape({
258
+ value: PropTypes.string,
259
+ label: PropTypes.string
260
+ })),
261
+ /**
262
+ * The base color of the custom select input
263
+ */
264
+ color: PropTypes.string,
265
+ /**
266
+ * Whether the query getting the combobox options is inFlight
267
+ */
268
+ isFetching: PropTypes.bool.isRequired,
269
+ /**
270
+ * The minimum length of the search input to start fetching the options
271
+ */
272
+ minLength: PropTypes.number,
273
+ /**
274
+ * The function to transform the search input
275
+ */
276
+ transformSearch: PropTypes.func,
277
+ /**
278
+ * Whether the input filed shpuld be disabled
279
+ */
280
+ disabled: PropTypes.bool,
281
+ /**
282
+ * Whether the input is optional or not
283
+ */
284
+ optional: PropTypes.bool,
285
+ /**
286
+ * The placeholder text for the input
287
+ */
288
+ placeholder: PropTypes.string
289
+ };
290
+ MultipleCombobox.defaultProps = {
291
+ // someProp: false
292
+ };
293
+ export default MultipleCombobox;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as MultipleCombobox } from "./MultipleCombobox";
@@ -0,0 +1,3 @@
1
+ export { Menu } from "./Menu";
2
+ export { Combobox } from "./Combobox";
3
+ export { MultipleCombobox } from "./MultipleCombobox";
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as QueryCombobox } from "./QueryCombobox";