@pareto-engineering/design-system 4.0.0-alpha.61 → 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 (198) hide show
  1. package/dist/cjs/a/TextSteps/TextSteps.js +4 -4
  2. package/dist/cjs/a/TextSteps/styles.scss +1 -1
  3. package/dist/cjs/f/FormInput/FormInput.js +43 -13
  4. package/dist/cjs/f/common/V2/Description/Description.js +76 -0
  5. package/dist/cjs/f/common/V2/Description/index.js +13 -0
  6. package/dist/cjs/f/common/V2/Description/styles.scss +10 -0
  7. package/dist/cjs/f/common/V2/Label/Label.js +84 -0
  8. package/dist/cjs/f/common/V2/Label/index.js +13 -0
  9. package/dist/cjs/f/common/V2/Label/styles.scss +9 -0
  10. package/dist/cjs/f/common/V2/index.js +19 -0
  11. package/dist/cjs/f/common/index.js +12 -0
  12. package/dist/cjs/f/fields/V2/Checkbox/Checkbox.js +122 -0
  13. package/dist/cjs/f/fields/V2/Checkbox/index.js +13 -0
  14. package/dist/cjs/f/fields/V2/Checkbox/styles.scss +16 -0
  15. package/dist/cjs/f/fields/V2/ChoicesInput/ChoicesInput.js +154 -0
  16. package/dist/cjs/f/fields/V2/ChoicesInput/common/Choice/Choice.js +104 -0
  17. package/dist/cjs/f/fields/V2/ChoicesInput/common/Choice/index.js +13 -0
  18. package/dist/cjs/f/fields/V2/ChoicesInput/common/index.js +12 -0
  19. package/dist/cjs/f/fields/V2/ChoicesInput/index.js +13 -0
  20. package/dist/cjs/f/fields/V2/ChoicesInput/styles.scss +79 -0
  21. package/dist/cjs/f/fields/V2/EditorInput/EditorInput.js +197 -0
  22. package/dist/cjs/f/fields/V2/EditorInput/common/Toolbar.js +257 -0
  23. package/dist/cjs/f/fields/V2/EditorInput/common/TreeViewPlugin.js +18 -0
  24. package/dist/cjs/f/fields/V2/EditorInput/common/index.js +20 -0
  25. package/dist/cjs/f/fields/V2/EditorInput/index.js +13 -0
  26. package/dist/cjs/f/fields/V2/EditorInput/styles.scss +149 -0
  27. package/dist/cjs/f/fields/V2/LinkInput/LinkInput.js +156 -0
  28. package/dist/cjs/f/fields/V2/LinkInput/index.js +13 -0
  29. package/dist/cjs/f/fields/V2/LinkInput/styles.scss +90 -0
  30. package/dist/cjs/f/fields/V2/QueryChoices/QueryChoices.js +137 -0
  31. package/dist/cjs/f/fields/V2/QueryChoices/index.js +13 -0
  32. package/dist/cjs/f/fields/V2/QueryCombobox/QueryCombobox.js +229 -0
  33. package/dist/cjs/f/fields/V2/QueryCombobox/common/Combobox/Combobox.js +236 -0
  34. package/dist/cjs/f/fields/V2/QueryCombobox/common/Combobox/index.js +13 -0
  35. package/dist/cjs/f/fields/V2/QueryCombobox/common/Menu/Menu.js +83 -0
  36. package/dist/cjs/f/fields/V2/QueryCombobox/common/Menu/index.js +13 -0
  37. package/dist/cjs/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +300 -0
  38. package/dist/cjs/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +13 -0
  39. package/dist/cjs/f/fields/V2/QueryCombobox/common/index.js +26 -0
  40. package/dist/cjs/f/fields/V2/QueryCombobox/index.js +13 -0
  41. package/dist/cjs/f/fields/V2/QueryCombobox/styles.scss +127 -0
  42. package/dist/cjs/f/fields/V2/QuerySelect/QuerySelect.js +198 -0
  43. package/dist/cjs/f/fields/V2/QuerySelect/index.js +13 -0
  44. package/dist/cjs/f/fields/V2/RatingsInput/RatingsInput.js +130 -0
  45. package/dist/cjs/f/fields/V2/RatingsInput/common/Rating/Rating.js +117 -0
  46. package/dist/cjs/f/fields/V2/RatingsInput/common/Rating/index.js +13 -0
  47. package/dist/cjs/f/fields/V2/RatingsInput/common/index.js +12 -0
  48. package/dist/cjs/f/fields/V2/RatingsInput/index.js +13 -0
  49. package/dist/cjs/f/fields/V2/RatingsInput/styles.scss +48 -0
  50. package/dist/cjs/f/fields/V2/SelectInput/SelectInput.js +154 -0
  51. package/dist/cjs/f/fields/V2/SelectInput/index.js +13 -0
  52. package/dist/cjs/f/fields/V2/SelectInput/styles.scss +87 -0
  53. package/dist/cjs/f/fields/V2/TextInput/TextInput.js +155 -0
  54. package/dist/cjs/f/fields/V2/TextInput/index.js +13 -0
  55. package/dist/cjs/f/fields/V2/TextInput/styles.scss +78 -0
  56. package/dist/cjs/f/fields/V2/TextareaInput/TextareaInput.js +152 -0
  57. package/dist/cjs/f/fields/V2/TextareaInput/index.js +13 -0
  58. package/dist/cjs/f/fields/V2/TextareaInput/styles.scss +53 -0
  59. package/dist/cjs/f/fields/V2/index.js +82 -0
  60. package/dist/cjs/f/fields/index.js +26 -1
  61. package/dist/es/a/TextSteps/TextSteps.js +4 -4
  62. package/dist/es/a/TextSteps/styles.scss +1 -1
  63. package/dist/es/f/FormInput/FormInput.js +33 -3
  64. package/dist/es/f/common/V2/Description/Description.js +68 -0
  65. package/dist/es/f/common/V2/Description/index.js +2 -0
  66. package/dist/es/f/common/V2/Description/styles.scss +10 -0
  67. package/dist/es/f/common/V2/Label/Label.js +76 -0
  68. package/dist/es/f/common/V2/Label/index.js +2 -0
  69. package/dist/es/f/common/V2/Label/styles.scss +9 -0
  70. package/dist/es/f/common/V2/index.js +2 -0
  71. package/dist/es/f/common/index.js +2 -1
  72. package/dist/es/f/fields/V2/Checkbox/Checkbox.js +114 -0
  73. package/dist/es/f/fields/V2/Checkbox/index.js +2 -0
  74. package/dist/es/f/fields/V2/Checkbox/styles.scss +16 -0
  75. package/dist/es/f/fields/V2/ChoicesInput/ChoicesInput.js +148 -0
  76. package/dist/es/f/fields/V2/ChoicesInput/common/Choice/Choice.js +97 -0
  77. package/dist/es/f/fields/V2/ChoicesInput/common/Choice/index.js +2 -0
  78. package/dist/es/f/fields/V2/ChoicesInput/common/index.js +1 -0
  79. package/dist/es/f/fields/V2/ChoicesInput/index.js +2 -0
  80. package/dist/es/f/fields/V2/ChoicesInput/styles.scss +79 -0
  81. package/dist/es/f/fields/V2/EditorInput/EditorInput.js +192 -0
  82. package/dist/es/f/fields/V2/EditorInput/common/Toolbar.js +246 -0
  83. package/dist/es/f/fields/V2/EditorInput/common/TreeViewPlugin.js +11 -0
  84. package/dist/es/f/fields/V2/EditorInput/common/index.js +2 -0
  85. package/dist/es/f/fields/V2/EditorInput/index.js +2 -0
  86. package/dist/es/f/fields/V2/EditorInput/styles.scss +149 -0
  87. package/dist/es/f/fields/V2/LinkInput/LinkInput.js +148 -0
  88. package/dist/es/f/fields/V2/LinkInput/index.js +2 -0
  89. package/dist/es/f/fields/V2/LinkInput/styles.scss +90 -0
  90. package/dist/es/f/fields/V2/QueryChoices/QueryChoices.js +126 -0
  91. package/dist/es/f/fields/V2/QueryChoices/index.js +2 -0
  92. package/dist/es/f/fields/V2/QueryCombobox/QueryCombobox.js +221 -0
  93. package/dist/es/f/fields/V2/QueryCombobox/common/Combobox/Combobox.js +229 -0
  94. package/dist/es/f/fields/V2/QueryCombobox/common/Combobox/index.js +2 -0
  95. package/dist/es/f/fields/V2/QueryCombobox/common/Menu/Menu.js +73 -0
  96. package/dist/es/f/fields/V2/QueryCombobox/common/Menu/index.js +2 -0
  97. package/dist/es/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +293 -0
  98. package/dist/es/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +2 -0
  99. package/dist/es/f/fields/V2/QueryCombobox/common/index.js +3 -0
  100. package/dist/es/f/fields/V2/QueryCombobox/index.js +2 -0
  101. package/dist/es/f/fields/V2/QueryCombobox/styles.scss +127 -0
  102. package/dist/es/f/fields/V2/QuerySelect/QuerySelect.js +186 -0
  103. package/dist/es/f/fields/V2/QuerySelect/index.js +2 -0
  104. package/dist/es/f/fields/V2/RatingsInput/RatingsInput.js +124 -0
  105. package/dist/es/f/fields/V2/RatingsInput/common/Rating/Rating.js +109 -0
  106. package/dist/es/f/fields/V2/RatingsInput/common/Rating/index.js +2 -0
  107. package/dist/es/f/fields/V2/RatingsInput/common/index.js +1 -0
  108. package/dist/es/f/fields/V2/RatingsInput/index.js +2 -0
  109. package/dist/es/f/fields/V2/RatingsInput/styles.scss +48 -0
  110. package/dist/es/f/fields/V2/SelectInput/SelectInput.js +146 -0
  111. package/dist/es/f/fields/V2/SelectInput/index.js +2 -0
  112. package/dist/es/f/fields/V2/SelectInput/styles.scss +87 -0
  113. package/dist/es/f/fields/V2/TextInput/TextInput.js +147 -0
  114. package/dist/es/f/fields/V2/TextInput/index.js +2 -0
  115. package/dist/es/f/fields/V2/TextInput/styles.scss +78 -0
  116. package/dist/es/f/fields/V2/TextareaInput/TextareaInput.js +146 -0
  117. package/dist/es/f/fields/V2/TextareaInput/index.js +2 -0
  118. package/dist/es/f/fields/V2/TextareaInput/styles.scss +53 -0
  119. package/dist/es/f/fields/V2/index.js +11 -0
  120. package/dist/es/f/fields/index.js +2 -1
  121. package/package.json +3 -3
  122. package/src/stories/f/v2/Checkbox.stories.jsx +102 -0
  123. package/src/stories/f/v2/ChoicesInput.stories.jsx +139 -0
  124. package/src/stories/f/v2/EditorInput.stories.jsx +81 -0
  125. package/src/stories/f/v2/LinkInput.stories.jsx +93 -0
  126. package/src/stories/f/v2/QueryChoices.stories.jsx +144 -0
  127. package/src/stories/f/v2/QueryCombobox.stories.jsx +301 -0
  128. package/src/stories/f/v2/QuerySelect.stories.jsx +150 -0
  129. package/src/stories/f/v2/RatingsInput.stories.jsx +77 -0
  130. package/src/stories/f/v2/SelectInput.stories.jsx +95 -0
  131. package/src/stories/f/v2/TextInput.stories.jsx +120 -0
  132. package/src/stories/f/v2/TextareaInput.stories.jsx +107 -0
  133. package/src/stories/f/v2/__generated__/FormInputAllTaskStatusesQuery.graphql.js +122 -0
  134. package/src/stories/f/v2/__generated__/FormInputAllTeamsQuery.graphql.js +139 -0
  135. package/src/stories/f/v2/__generated__/QueryChoicesAllTaskStatusesQuery.graphql.js +122 -0
  136. package/src/stories/f/v2/__generated__/QueryComboboxAllTeamsQuery.graphql.js +139 -0
  137. package/src/stories/f/v2/__generated__/QuerySelectAllTaskStatusesQuery.graphql.js +122 -0
  138. package/src/ui/a/TextSteps/TextSteps.jsx +4 -4
  139. package/src/ui/a/TextSteps/styles.scss +1 -1
  140. package/src/ui/f/FormInput/FormInput.jsx +57 -12
  141. package/src/ui/f/common/V2/Description/Description.jsx +94 -0
  142. package/src/ui/f/common/V2/Description/index.js +2 -0
  143. package/src/ui/f/common/V2/Description/styles.scss +10 -0
  144. package/src/ui/f/common/V2/Label/Label.jsx +102 -0
  145. package/src/ui/f/common/V2/Label/index.js +2 -0
  146. package/src/ui/f/common/V2/Label/styles.scss +9 -0
  147. package/src/ui/f/common/V2/index.js +2 -0
  148. package/src/ui/f/common/index.js +1 -0
  149. package/src/ui/f/fields/V2/Checkbox/Checkbox.jsx +146 -0
  150. package/src/ui/f/fields/V2/Checkbox/index.js +2 -0
  151. package/src/ui/f/fields/V2/Checkbox/styles.scss +16 -0
  152. package/src/ui/f/fields/V2/ChoicesInput/ChoicesInput.jsx +183 -0
  153. package/src/ui/f/fields/V2/ChoicesInput/common/Choice/Choice.jsx +125 -0
  154. package/src/ui/f/fields/V2/ChoicesInput/common/Choice/index.js +2 -0
  155. package/src/ui/f/fields/V2/ChoicesInput/common/index.js +1 -0
  156. package/src/ui/f/fields/V2/ChoicesInput/index.js +2 -0
  157. package/src/ui/f/fields/V2/ChoicesInput/styles.scss +79 -0
  158. package/src/ui/f/fields/V2/EditorInput/EditorInput.jsx +244 -0
  159. package/src/ui/f/fields/V2/EditorInput/common/Toolbar.jsx +356 -0
  160. package/src/ui/f/fields/V2/EditorInput/common/TreeViewPlugin.jsx +16 -0
  161. package/src/ui/f/fields/V2/EditorInput/common/index.jsx +2 -0
  162. package/src/ui/f/fields/V2/EditorInput/index.js +2 -0
  163. package/src/ui/f/fields/V2/EditorInput/styles.scss +149 -0
  164. package/src/ui/f/fields/V2/LinkInput/LinkInput.jsx +187 -0
  165. package/src/ui/f/fields/V2/LinkInput/index.js +2 -0
  166. package/src/ui/f/fields/V2/LinkInput/styles.scss +90 -0
  167. package/src/ui/f/fields/V2/QueryChoices/QueryChoices.jsx +153 -0
  168. package/src/ui/f/fields/V2/QueryChoices/index.js +2 -0
  169. package/src/ui/f/fields/V2/QueryCombobox/QueryCombobox.jsx +254 -0
  170. package/src/ui/f/fields/V2/QueryCombobox/common/Combobox/Combobox.jsx +276 -0
  171. package/src/ui/f/fields/V2/QueryCombobox/common/Combobox/index.js +2 -0
  172. package/src/ui/f/fields/V2/QueryCombobox/common/Menu/Menu.jsx +103 -0
  173. package/src/ui/f/fields/V2/QueryCombobox/common/Menu/index.js +2 -0
  174. package/src/ui/f/fields/V2/QueryCombobox/common/MultipleCombobox/MultipleCombobox.jsx +362 -0
  175. package/src/ui/f/fields/V2/QueryCombobox/common/MultipleCombobox/index.js +2 -0
  176. package/src/ui/f/fields/V2/QueryCombobox/common/index.js +3 -0
  177. package/src/ui/f/fields/V2/QueryCombobox/index.js +2 -0
  178. package/src/ui/f/fields/V2/QueryCombobox/styles.scss +127 -0
  179. package/src/ui/f/fields/V2/QuerySelect/QuerySelect.jsx +220 -0
  180. package/src/ui/f/fields/V2/QuerySelect/index.js +2 -0
  181. package/src/ui/f/fields/V2/RatingsInput/RatingsInput.jsx +152 -0
  182. package/src/ui/f/fields/V2/RatingsInput/common/Rating/Rating.jsx +142 -0
  183. package/src/ui/f/fields/V2/RatingsInput/common/Rating/index.js +2 -0
  184. package/src/ui/f/fields/V2/RatingsInput/common/index.js +1 -0
  185. package/src/ui/f/fields/V2/RatingsInput/index.js +2 -0
  186. package/src/ui/f/fields/V2/RatingsInput/styles.scss +48 -0
  187. package/src/ui/f/fields/V2/SelectInput/SelectInput.jsx +187 -0
  188. package/src/ui/f/fields/V2/SelectInput/index.js +2 -0
  189. package/src/ui/f/fields/V2/SelectInput/styles.scss +87 -0
  190. package/src/ui/f/fields/V2/TextInput/TextInput.jsx +192 -0
  191. package/src/ui/f/fields/V2/TextInput/index.js +2 -0
  192. package/src/ui/f/fields/V2/TextInput/styles.scss +78 -0
  193. package/src/ui/f/fields/V2/TextareaInput/TextareaInput.jsx +180 -0
  194. package/src/ui/f/fields/V2/TextareaInput/index.js +2 -0
  195. package/src/ui/f/fields/V2/TextareaInput/styles.scss +53 -0
  196. package/src/ui/f/fields/V2/index.js +11 -0
  197. package/src/ui/f/fields/index.js +1 -0
  198. package/tests/__snapshots__/Storyshots.test.js.snap +5910 -1
@@ -0,0 +1,126 @@
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, useState } from 'react';
5
+ import { useRelayEnvironment, fetchQuery } from 'react-relay';
6
+ import { useField } from 'formik';
7
+ import PropTypes from 'prop-types';
8
+ import { ChoicesInput } from "../ChoicesInput";
9
+
10
+ /**
11
+ * This is the component description.
12
+ */
13
+ const QueryChoices = ({
14
+ name,
15
+ optionsKeyMap,
16
+ query,
17
+ variables,
18
+ validate,
19
+ loadingOption,
20
+ extraVariables,
21
+ ...otherProps
22
+ }) => {
23
+ const [,, helpers] = useField({
24
+ name,
25
+ validate
26
+ });
27
+ const {
28
+ setError
29
+ } = helpers;
30
+ const environment = useRelayEnvironment();
31
+ const [isFetching, setIsFetching] = useState(false);
32
+ const [options, setOptions] = useState([loadingOption]);
33
+ const {
34
+ graphql,
35
+ accessor
36
+ } = query;
37
+ const getOptions = () => {
38
+ if (isFetching) return;
39
+ let searchVariables = variables;
40
+ if (extraVariables) {
41
+ searchVariables = {
42
+ ...variables,
43
+ ...extraVariables
44
+ };
45
+ }
46
+ fetchQuery(environment, graphql, searchVariables).subscribe({
47
+ start: () => {
48
+ setIsFetching(true);
49
+ },
50
+ complete: () => {
51
+ setIsFetching(false);
52
+ },
53
+ error: fetchError => {
54
+ setIsFetching(false);
55
+ if (setError) setError(fetchError.message);
56
+ },
57
+ next: data => {
58
+ setOptions([...data[accessor].edges.map(({
59
+ node
60
+ }) => ({
61
+ value: node[optionsKeyMap.value],
62
+ label: optionsKeyMap.getLabel(node)
63
+ }))]);
64
+ }
65
+ });
66
+ };
67
+ useEffect(() => {
68
+ getOptions();
69
+ }, [variables]);
70
+ return /*#__PURE__*/React.createElement(ChoicesInput, _extends({
71
+ name: name,
72
+ validate: validate,
73
+ options: options
74
+ }, otherProps));
75
+ };
76
+ QueryChoices.propTypes = {
77
+ /**
78
+ * The choices name
79
+ */
80
+ name: PropTypes.string.isRequired,
81
+ /**
82
+ * The select option keys to be used to map the data to the select options.
83
+ * i.e `{ value: 'id', label: 'name' }`
84
+ */
85
+ optionsKeyMap: PropTypes.shape({
86
+ value: PropTypes.string.isRequired,
87
+ getLabel: PropTypes.func.isRequired
88
+ }).isRequired,
89
+ /**
90
+ * The graphql query to fetch the options and the accessor to destructure the results from
91
+ */
92
+ query: PropTypes.shape({
93
+ accessor: PropTypes.string,
94
+ graphql: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired
95
+ }),
96
+ /**
97
+ * The variables that might be required to be used in the query to fetch
98
+ * select options.
99
+ */
100
+ variables: PropTypes.objectOf(PropTypes.string),
101
+ /**
102
+ * The option to displayed when the select options are being fetched
103
+ */
104
+ loadingOption: PropTypes.shape({
105
+ value: PropTypes.string.isRequired,
106
+ label: PropTypes.string.isRequired,
107
+ disabled: PropTypes.bool.isRequired
108
+ }),
109
+ /**
110
+ * The input field validator function
111
+ */
112
+ validate: PropTypes.string,
113
+ /**
114
+ * The extra variables that might be required to be used in the query to fetch
115
+ * select options.
116
+ */
117
+ extraVariables: PropTypes.objectOf(PropTypes.string)
118
+ };
119
+ QueryChoices.defaultProps = {
120
+ loadingOption: {
121
+ value: '',
122
+ label: 'Fetching Options',
123
+ disabled: true
124
+ }
125
+ };
126
+ export default QueryChoices;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as QueryChoices } from "./QueryChoices";
@@ -0,0 +1,221 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ import * as React from 'react';
3
+ import { useState, useInsertionEffect } from 'react';
4
+ import { useField } from 'formik';
5
+ import { useRelayEnvironment, fetchQuery } from 'react-relay';
6
+ import PropTypes from 'prop-types';
7
+
8
+ // Local Definitions
9
+
10
+ import { Combobox, MultipleCombobox } from "./common";
11
+
12
+ /**
13
+ * This is the component description.
14
+ */
15
+ const QueryCombobox = ({
16
+ id,
17
+ style,
18
+ className,
19
+ query,
20
+ multiple,
21
+ name,
22
+ label,
23
+ labelColor,
24
+ color,
25
+ optional,
26
+ description,
27
+ disabled,
28
+ debounceMs,
29
+ searchVariable,
30
+ extraVariables,
31
+ optionsKeyMap,
32
+ minLength,
33
+ transformSearch,
34
+ validate,
35
+ placeholder,
36
+ promptCreateNewOption
37
+ // ...otherProps
38
+ }) => {
39
+ useInsertionEffect(() => {
40
+ import("./styles.scss");
41
+ }, []);
42
+ const [, meta, helpers] = useField({
43
+ name,
44
+ validate
45
+ });
46
+ const {
47
+ setValue,
48
+ setError
49
+ } = helpers;
50
+ const {
51
+ value
52
+ } = meta;
53
+ const environment = useRelayEnvironment();
54
+ const [isFetching, setIsFetching] = useState(false);
55
+ const [options, setOptions] = useState([]);
56
+ const {
57
+ graphql,
58
+ accessor
59
+ } = query;
60
+ const getOptions = inputValue => {
61
+ if (isFetching) return;
62
+ let variables = {
63
+ [searchVariable]: inputValue
64
+ };
65
+ if (extraVariables) {
66
+ variables = {
67
+ ...variables,
68
+ ...extraVariables
69
+ };
70
+ }
71
+ fetchQuery(environment, graphql, variables).subscribe({
72
+ start: () => {
73
+ setIsFetching(true);
74
+ },
75
+ complete: () => {
76
+ setIsFetching(false);
77
+ },
78
+ error: fetchError => {
79
+ setIsFetching(false);
80
+ if (setError) setError(fetchError.message);
81
+ },
82
+ next: data => {
83
+ setOptions(data[accessor].edges.map(({
84
+ node
85
+ }) => ({
86
+ value: node[optionsKeyMap.value],
87
+ label: optionsKeyMap.getLabel(node)
88
+ })));
89
+ }
90
+ });
91
+ };
92
+ const comboboxProps = {
93
+ id,
94
+ style,
95
+ options,
96
+ getOptions,
97
+ setOptions,
98
+ debounceMs,
99
+ disabled,
100
+ name,
101
+ label,
102
+ labelColor,
103
+ optional,
104
+ description,
105
+ setValue,
106
+ value,
107
+ color,
108
+ isFetching,
109
+ className,
110
+ minLength,
111
+ transformSearch,
112
+ placeholder,
113
+ promptCreateNewOption
114
+ };
115
+ const Input = multiple ? MultipleCombobox : Combobox;
116
+ return /*#__PURE__*/React.createElement(Input, comboboxProps);
117
+ };
118
+ QueryCombobox.propTypes = {
119
+ /**
120
+ * The HTML id for this element
121
+ */
122
+ id: PropTypes.string,
123
+ /**
124
+ * The HTML class names for this element
125
+ */
126
+ className: PropTypes.string,
127
+ /**
128
+ * The React-written, css properties for this element.
129
+ */
130
+ style: PropTypes.objectOf(PropTypes.string),
131
+ /**
132
+ * The name of the custom select input
133
+ */
134
+ name: PropTypes.string,
135
+ /**
136
+ * The label of the custom select input
137
+ */
138
+ label: PropTypes.string,
139
+ /**
140
+ * The label color of the custom select input
141
+ */
142
+ labelColor: PropTypes.string,
143
+ /**
144
+ * The custom select input description
145
+ */
146
+ description: PropTypes.string,
147
+ /**
148
+ * Whether the input should be disabled
149
+ */
150
+ disabled: PropTypes.bool,
151
+ /**
152
+ * The base color of the tiles
153
+ */
154
+ color: PropTypes.string,
155
+ /**
156
+ * The debounce time in milliseconds
157
+ */
158
+ debounceMs: PropTypes.number,
159
+ /**
160
+ * The graphql query to fetch the options and the accessor to destructure the results from
161
+ */
162
+ query: PropTypes.shape({
163
+ accessor: PropTypes.string,
164
+ graphql: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired
165
+ }),
166
+ /**
167
+ * The extra variables required to be used in the query.
168
+ */
169
+ extraVariables: PropTypes.objectOf(PropTypes.string),
170
+ /**
171
+ * The select option keys to be used to map the data to the select options.
172
+ * i.e `{ value: 'id', label: 'name' }`
173
+ */
174
+ optionsKeyMap: PropTypes.shape({
175
+ value: PropTypes.string.isRequired,
176
+ getLabel: PropTypes.func.isRequired
177
+ }),
178
+ /**
179
+ * Whether to allow multiple items selection
180
+ */
181
+ multiple: PropTypes.bool,
182
+ /**
183
+ * The variable to be used to search the data
184
+ */
185
+ searchVariable: PropTypes.string,
186
+ /**
187
+ * The minimum length of the search input to start fetching the options
188
+ */
189
+ minLength: PropTypes.number,
190
+ /**
191
+ * The function to transform the search input
192
+ */
193
+ transformSearch: PropTypes.func,
194
+ /**
195
+ * The query combobox field validator function
196
+ */
197
+ validate: PropTypes.func,
198
+ /*
199
+ * Whether the input is optional or not
200
+ */
201
+ optional: PropTypes.bool,
202
+ /**
203
+ * Whether to prompt the user to create a new option if the search input
204
+ * does not match any of the options
205
+ */
206
+ promptCreateNewOption: PropTypes.bool
207
+ };
208
+ QueryCombobox.defaultProps = {
209
+ optionsKeyMap: {
210
+ value: 'id',
211
+ getLabel: node => node.name
212
+ },
213
+ multiple: false,
214
+ color: 'interactive',
215
+ searchVariable: 'search',
216
+ transformSearch: search => search,
217
+ minLength: 2,
218
+ disabled: false,
219
+ promptCreateNewOption: false
220
+ };
221
+ export default QueryCombobox;
@@ -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";