@pareto-engineering/design-system 2.0.0-alpha.43 → 2.0.0-alpha.46

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 (89) hide show
  1. package/.env.scripts.example +4 -0
  2. package/.eslintrc.js +25 -1
  3. package/babel.config.js +1 -0
  4. package/dist/cjs/f/FormInput/FormInput.js +13 -3
  5. package/dist/cjs/f/FormInput/styles.scss +11 -0
  6. package/dist/cjs/f/fields/QueryCombobox/QueryCombobox.js +214 -0
  7. package/dist/cjs/f/fields/QueryCombobox/common/Combobox/Combobox.js +194 -0
  8. package/dist/cjs/f/fields/QueryCombobox/common/Combobox/index.js +15 -0
  9. package/dist/cjs/f/fields/QueryCombobox/common/Menu/Menu.js +103 -0
  10. package/dist/cjs/f/fields/QueryCombobox/common/Menu/index.js +15 -0
  11. package/dist/cjs/f/fields/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +281 -0
  12. package/dist/cjs/f/fields/QueryCombobox/common/MultipleCombobox/index.js +15 -0
  13. package/dist/cjs/f/fields/QueryCombobox/common/index.js +21 -0
  14. package/dist/cjs/f/fields/QueryCombobox/index.js +15 -0
  15. package/dist/cjs/f/fields/QueryCombobox/styles.scss +84 -0
  16. package/dist/cjs/f/fields/SelectInput/SelectInput.js +0 -1
  17. package/dist/cjs/f/fields/SelectInput/styles.scss +8 -6
  18. package/dist/cjs/f/fields/index.js +9 -1
  19. package/dist/cjs/index.js +13 -0
  20. package/dist/cjs/test/QueryLoader/QueryLoader.js +41 -0
  21. package/dist/cjs/test/QueryLoader/__generated__/QueryLoaderHelloQuery.graphql.js +71 -0
  22. package/dist/cjs/test/QueryLoader/common/PreloadedTestData/PreloadedTestData.js +49 -0
  23. package/dist/cjs/test/QueryLoader/common/PreloadedTestData/index.js +15 -0
  24. package/dist/cjs/test/QueryLoader/common/index.js +13 -0
  25. package/dist/cjs/test/QueryLoader/index.js +15 -0
  26. package/dist/cjs/test/QueryLoader/styles.scss +9 -0
  27. package/dist/cjs/test/index.js +13 -0
  28. package/dist/es/f/FormInput/FormInput.js +13 -3
  29. package/dist/es/f/FormInput/styles.scss +11 -0
  30. package/dist/es/f/fields/QueryCombobox/QueryCombobox.js +191 -0
  31. package/dist/es/f/fields/QueryCombobox/common/Combobox/Combobox.js +174 -0
  32. package/dist/es/f/fields/QueryCombobox/common/Combobox/index.js +2 -0
  33. package/dist/es/f/fields/QueryCombobox/common/Menu/Menu.js +77 -0
  34. package/dist/es/f/fields/QueryCombobox/common/Menu/index.js +2 -0
  35. package/dist/es/f/fields/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +253 -0
  36. package/dist/es/f/fields/QueryCombobox/common/MultipleCombobox/index.js +2 -0
  37. package/dist/es/f/fields/QueryCombobox/common/index.js +2 -0
  38. package/dist/es/f/fields/QueryCombobox/index.js +2 -0
  39. package/dist/es/f/fields/QueryCombobox/styles.scss +84 -0
  40. package/dist/es/f/fields/SelectInput/SelectInput.js +0 -1
  41. package/dist/es/f/fields/SelectInput/styles.scss +8 -6
  42. package/dist/es/f/fields/index.js +2 -1
  43. package/dist/es/index.js +2 -1
  44. package/dist/es/test/QueryLoader/QueryLoader.js +29 -0
  45. package/dist/es/test/QueryLoader/__generated__/QueryLoaderHelloQuery.graphql.js +71 -0
  46. package/dist/es/test/QueryLoader/common/PreloadedTestData/PreloadedTestData.js +31 -0
  47. package/dist/es/test/QueryLoader/common/PreloadedTestData/index.js +2 -0
  48. package/dist/es/test/QueryLoader/common/index.js +1 -0
  49. package/dist/es/test/QueryLoader/index.js +2 -0
  50. package/dist/es/test/QueryLoader/styles.scss +9 -0
  51. package/dist/es/test/index.js +1 -0
  52. package/package.json +16 -3
  53. package/relay.config.js +12 -0
  54. package/schema.graphql +4075 -0
  55. package/scripts/fetchSchema.js +74 -0
  56. package/src/__snapshots__/Storyshots.test.js.snap +323 -8
  57. package/src/stories/f/FormInput.stories.jsx +115 -0
  58. package/src/stories/f/QueryCombobox.stories.jsx +220 -0
  59. package/src/stories/f/__generated__/FormInputAllTeamsQuery.graphql.js +139 -0
  60. package/src/stories/f/__generated__/QueryComboboxAllTeamsQuery.graphql.js +139 -0
  61. package/src/stories/test/QueryLoader.stories.jsx +36 -0
  62. package/src/stories/utils/generateNodeId.js +12 -0
  63. package/src/stories/utils/relay/EnvironmentProvider.jsx +14 -0
  64. package/src/stories/utils/relay/environment.js +5 -0
  65. package/src/stories/utils/relay/index.js +4 -0
  66. package/src/stories/utils/relay/mockRelayOperation.js +14 -0
  67. package/src/stories/utils/relay/mockResolvers.js +299 -0
  68. package/src/stories/utils/testData.js +63 -0
  69. package/src/ui/f/FormInput/FormInput.jsx +16 -1
  70. package/src/ui/f/FormInput/styles.scss +11 -0
  71. package/src/ui/f/fields/QueryCombobox/QueryCombobox.jsx +207 -0
  72. package/src/ui/f/fields/QueryCombobox/common/Combobox/Combobox.jsx +214 -0
  73. package/src/ui/f/fields/QueryCombobox/common/Combobox/index.js +2 -0
  74. package/src/ui/f/fields/QueryCombobox/common/Menu/Menu.jsx +103 -0
  75. package/src/ui/f/fields/QueryCombobox/common/Menu/index.js +2 -0
  76. package/src/ui/f/fields/QueryCombobox/common/index.js +2 -0
  77. package/src/ui/f/fields/QueryCombobox/index.js +2 -0
  78. package/src/ui/f/fields/QueryCombobox/styles.scss +84 -0
  79. package/src/ui/f/fields/SelectInput/SelectInput.jsx +1 -1
  80. package/src/ui/f/fields/SelectInput/styles.scss +8 -6
  81. package/src/ui/f/fields/index.js +1 -0
  82. package/src/ui/index.js +1 -0
  83. package/src/ui/test/QueryLoader/QueryLoader.jsx +41 -0
  84. package/src/ui/test/QueryLoader/__generated__/QueryLoaderHelloQuery.graphql.js +68 -0
  85. package/src/ui/test/QueryLoader/common/PreloadedTestData/PreloadedTestData.jsx +51 -0
  86. package/src/ui/test/QueryLoader/common/PreloadedTestData/index.js +2 -0
  87. package/src/ui/test/QueryLoader/common/index.js +1 -0
  88. package/src/ui/test/QueryLoader/index.js +2 -0
  89. package/src/ui/test/index.js +1 -0
@@ -0,0 +1,4 @@
1
+ DEBUG=False
2
+ GITHUB_BACKEND_ORG=
3
+ GITHUB_BACKEND_REPO=
4
+ GITHUB_READONLY_PAT=
package/.eslintrc.js CHANGED
@@ -1,3 +1,5 @@
1
+ const fs = require('fs')
2
+
1
3
  module.exports = {
2
4
  settings:{
3
5
  'import/resolver':{
@@ -8,9 +10,15 @@ module.exports = {
8
10
  browser:true,
9
11
  node :true,
10
12
  },
13
+ globals:{
14
+ graphql:'readonly',
15
+ },
11
16
  parser :'@babel/eslint-parser',
12
17
  extends:['airbnb'],
13
- rules :{
18
+ plugins:[
19
+ 'graphql',
20
+ ],
21
+ rules:{
14
22
  semi:[
15
23
  2,
16
24
  'never',
@@ -37,5 +45,21 @@ module.exports = {
37
45
  'import/prefer-default-export':[
38
46
  0,
39
47
  ],
48
+ 'graphql/template-strings':[2, {
49
+ // Import default settings for your GraphQL client. Supported values:
50
+ // 'apollo', 'relay', 'lokka', 'fraql', 'literal'
51
+ env:'relay',
52
+ // Import your schema JSON here
53
+ // schemaJson: require('./schema.graphql'),
54
+
55
+ // OR provide absolute path to your schema JSON (but not if using `eslint --cache`!)
56
+ // schemaJsonFilepath: path.resolve(__dirname, './schema.json'),
57
+
58
+ // OR provide the schema in the Schema Language format
59
+ schemaString:fs.readFileSync('./schema.graphql', { encoding: 'utf8', flag: 'r' }),
60
+
61
+ tagName:'graphql',
62
+ // tagName is set for you to Relay.QL
63
+ }],
40
64
  },
41
65
  }
package/babel.config.js CHANGED
@@ -29,6 +29,7 @@ module.exports = function (api) {
29
29
  '@babel/preset-react',
30
30
  ]
31
31
  const plugins = [
32
+ 'relay',
32
33
  ['module-resolver', {
33
34
  root:['./src'],
34
35
  }],
@@ -15,12 +15,12 @@ var _excluded = ["className", "type", "extraTypes", "disabled"];
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
+
18
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
21
 
20
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
23
 
22
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
-
24
24
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
25
25
 
26
26
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -41,6 +41,9 @@ var FormInput = _ref => {
41
41
  } = _ref,
42
42
  otherProps = _objectWithoutProperties(_ref, _excluded);
43
43
 
44
+ (0, React.useLayoutEffect)(() => {
45
+ Promise.resolve().then(() => _interopRequireWildcard(require("./styles.scss")));
46
+ }, []);
44
47
  var newClassName = [className, componentClassName].filter(Boolean).join(' ');
45
48
 
46
49
  if (type === 'textarea') {
@@ -64,6 +67,13 @@ var FormInput = _ref => {
64
67
  }, otherProps));
65
68
  }
66
69
 
70
+ if (type === 'query-combobox') {
71
+ return /*#__PURE__*/React.createElement(_fields.QueryCombobox, _extends({
72
+ className: newClassName,
73
+ disabled: disabled
74
+ }, otherProps));
75
+ }
76
+
67
77
  if (extraTypes !== null && extraTypes !== void 0 && extraTypes[type]) {
68
78
  var Component = extraTypes[type];
69
79
  return /*#__PURE__*/React.createElement(Component, _extends({
@@ -88,7 +98,7 @@ FormInput.propTypes = {
88
98
  /**
89
99
  * The HTML class names for this element
90
100
  */
91
- type: _propTypes.default.oneOf(['text', 'email', 'password', 'number', 'date', 'datetime', 'month', 'tel', 'hidden', 'select', 'choices', 'textarea', // to be removed
101
+ type: _propTypes.default.oneOf(['text', 'email', 'password', 'number', 'date', 'datetime', 'month', 'tel', 'hidden', 'select', 'choices', 'textarea', 'query-combobox', // to be removed
92
102
  'extendedTypeInput']),
93
103
 
94
104
  /**
@@ -0,0 +1,11 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+
3
+ @use "@pareto-engineering/bem";
4
+
5
+ $default-margin: 1em;
6
+
7
+ .#{bem.$base}.form-input {
8
+ &+& {
9
+ margin-top: $default-margin;
10
+ }
11
+ }
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _formik = require("formik");
11
+
12
+ var _reactRelay = require("react-relay");
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _common = require("./common");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
+
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
30
+ /**
31
+ * This is the component description.
32
+ */
33
+ var QueryCombobox = _ref => {
34
+ var {
35
+ id,
36
+ style,
37
+ className,
38
+ query,
39
+ // multiple,
40
+ name,
41
+ label,
42
+ color,
43
+ description,
44
+ disabled,
45
+ debounceMs,
46
+ graphQlNode,
47
+ searchVariable,
48
+ extraVariables,
49
+ optionsKeyMap // ...otherProps
50
+
51
+ } = _ref;
52
+ (0, React.useLayoutEffect)(() => {
53
+ Promise.resolve().then(() => _interopRequireWildcard(require("./styles.scss")));
54
+ }, []);
55
+ var [, meta, helpers] = (0, _formik.useField)(name);
56
+ var {
57
+ setValue,
58
+ setError
59
+ } = helpers;
60
+ var {
61
+ error,
62
+ value
63
+ } = meta;
64
+ var environment = (0, _reactRelay.useRelayEnvironment)();
65
+ var [isFetching, setIsFetching] = (0, React.useState)(false);
66
+ var [options, setOptions] = (0, React.useState)([]);
67
+
68
+ var getOptions = inputValue => {
69
+ if (isFetching) return;
70
+ var variables = {
71
+ [searchVariable]: inputValue
72
+ };
73
+
74
+ if (extraVariables) {
75
+ variables = _objectSpread(_objectSpread({}, variables), extraVariables);
76
+ }
77
+
78
+ (0, _reactRelay.fetchQuery)(environment, query, variables).subscribe({
79
+ start: () => {
80
+ setIsFetching(true);
81
+ },
82
+ complete: () => {
83
+ setIsFetching(false);
84
+ },
85
+ error: fetchError => {
86
+ setIsFetching(false);
87
+ if (setError) setError(fetchError.message);
88
+ },
89
+ next: data => {
90
+ setOptions(data[graphQlNode].edges.map(_ref2 => {
91
+ var {
92
+ node
93
+ } = _ref2;
94
+ return {
95
+ value: node[optionsKeyMap.value],
96
+ label: node[optionsKeyMap.label]
97
+ };
98
+ }));
99
+ }
100
+ });
101
+ };
102
+
103
+ var comboboxProps = {
104
+ id,
105
+ style,
106
+ options,
107
+ getOptions,
108
+ debounceMs,
109
+ disabled,
110
+ name,
111
+ label,
112
+ description,
113
+ setValue,
114
+ error,
115
+ value,
116
+ color,
117
+ isFetching,
118
+ className
119
+ };
120
+ var Input = _common.Combobox;
121
+ return /*#__PURE__*/React.createElement(Input, comboboxProps);
122
+ };
123
+
124
+ QueryCombobox.propTypes = {
125
+ /**
126
+ * The HTML id for this element
127
+ */
128
+ id: _propTypes.default.string,
129
+
130
+ /**
131
+ * The HTML class names for this element
132
+ */
133
+ className: _propTypes.default.string,
134
+
135
+ /**
136
+ * The React-written, css properties for this element.
137
+ */
138
+ style: _propTypes.default.objectOf(_propTypes.default.string),
139
+
140
+ /**
141
+ * The name of the custom select input
142
+ */
143
+ name: _propTypes.default.string,
144
+
145
+ /**
146
+ * The label of the custom select input
147
+ */
148
+ label: _propTypes.default.string,
149
+
150
+ /**
151
+ * The custom select input description
152
+ */
153
+ description: _propTypes.default.string,
154
+
155
+ /**
156
+ * Whether the input should be disabled
157
+ */
158
+ disabled: _propTypes.default.bool,
159
+
160
+ /**
161
+ * The base color of the custom select input
162
+ */
163
+ color: _propTypes.default.string,
164
+
165
+ /**
166
+ * The debounce time in milliseconds
167
+ */
168
+ debounceMs: _propTypes.default.number,
169
+
170
+ /**
171
+ * The query to fetch the options
172
+ */
173
+ query: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]).isRequired,
174
+
175
+ /**
176
+ * The extra variables required to be used in the query.
177
+ */
178
+ extraVariables: _propTypes.default.objectOf(_propTypes.default.string),
179
+
180
+ /**
181
+ * The select option keys to be used to map the data to the select options.
182
+ * i.e `{ value: 'id', label: 'name' }`
183
+ */
184
+ optionsKeyMap: _propTypes.default.shape({
185
+ value: _propTypes.default.string.isRequired,
186
+ label: _propTypes.default.string.isRequired
187
+ }),
188
+
189
+ /**
190
+ * Whether to allow multiple items selection
191
+ */
192
+ multiple: _propTypes.default.bool,
193
+
194
+ /**
195
+ * The graphql node to be used to destructure the fetched data
196
+ */
197
+ graphQlNode: _propTypes.default.string.isRequired,
198
+
199
+ /**
200
+ * The variable to be used to search the data
201
+ */
202
+ searchVariable: _propTypes.default.string
203
+ };
204
+ QueryCombobox.defaultProps = {
205
+ optionsKeyMap: {
206
+ value: 'id',
207
+ label: 'name'
208
+ },
209
+ multiple: false,
210
+ color: 'background2',
211
+ searchVariable: 'search'
212
+ };
213
+ var _default = QueryCombobox;
214
+ exports.default = _default;
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _downshift = require("downshift");
13
+
14
+ var _bem = _interopRequireDefault(require("@pareto-engineering/bem"));
15
+
16
+ var _ = require("../../../..");
17
+
18
+ var _a = require("../../../../../a");
19
+
20
+ var _Menu = require("../Menu");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
29
+
30
+ var baseClassName = _bem.default.base;
31
+ var componentClassName = 'combobox';
32
+ /**
33
+ * This is the component description.
34
+ */
35
+
36
+ var Combobox = _ref => {
37
+ var {
38
+ id,
39
+ className: userClassName,
40
+ style,
41
+ label,
42
+ name,
43
+ options: items,
44
+ getOptions,
45
+ setValue,
46
+ error,
47
+ description,
48
+ value,
49
+ color,
50
+ loadingCircleColor,
51
+ isFetching // ...otherProps
52
+
53
+ } = _ref;
54
+ var {
55
+ isOpen,
56
+ selectItem,
57
+ selectedItem,
58
+ getLabelProps,
59
+ getMenuProps,
60
+ getInputProps,
61
+ highlightedIndex,
62
+ getComboboxProps,
63
+ getItemProps
64
+ } = (0, _downshift.useCombobox)({
65
+ items,
66
+ initialSelectedItem: value,
67
+ itemToString: item => item ? item.label : '',
68
+ onInputValueChange: _ref2 => {
69
+ var {
70
+ inputValue
71
+ } = _ref2;
72
+ getOptions(inputValue);
73
+ }
74
+ }); // If the user has selected an item, we'll set the value of the field
75
+ // or if the combobox state has a selected item, we'll set the value to the formik state
76
+
77
+ (0, React.useEffect)(() => {
78
+ if (selectedItem) {
79
+ setValue(selectedItem);
80
+ }
81
+ }, [selectedItem]); // If the formik state has a value, we'll set the selected item to the combobox state
82
+
83
+ (0, React.useEffect)(() => {
84
+ if ((value === null || value === void 0 ? void 0 : value.value) !== (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.value)) {
85
+ selectItem(value);
86
+ }
87
+ }, [value]);
88
+ var parentRef = (0, React.useRef)(null);
89
+ return /*#__PURE__*/React.createElement("div", {
90
+ id: id,
91
+ className: [baseClassName, componentClassName, userClassName, "y-".concat(color), "x-".concat(loadingCircleColor)].filter(e => e).join(' '),
92
+ style: style,
93
+ ref: parentRef
94
+ }, /*#__PURE__*/React.createElement(_.FormLabel, _extends({}, getLabelProps(), {
95
+ name: name
96
+ }), label), /*#__PURE__*/React.createElement("div", _extends({}, getComboboxProps(), {
97
+ className: "input-wrapper"
98
+ }), /*#__PURE__*/React.createElement("input", _extends({}, getInputProps(), {
99
+ className: "input"
100
+ })), isFetching && /*#__PURE__*/React.createElement(_a.LoadingCircle, null)), /*#__PURE__*/React.createElement(_a.Popover, {
101
+ isOpen: isOpen,
102
+ parentRef: parentRef
103
+ }, /*#__PURE__*/React.createElement(_Menu.Menu, _extends({
104
+ isOpen: isOpen,
105
+ getItemProps: getItemProps,
106
+ highlightedIndex: highlightedIndex,
107
+ items: items
108
+ }, getMenuProps()))), (description || error) && /*#__PURE__*/React.createElement(_.FormDescription, {
109
+ isError: !!error
110
+ }, error || description));
111
+ };
112
+
113
+ Combobox.propTypes = {
114
+ /**
115
+ * The HTML id for this element
116
+ */
117
+ id: _propTypes.default.string,
118
+
119
+ /**
120
+ * The HTML class names for this element
121
+ */
122
+ className: _propTypes.default.string,
123
+
124
+ /**
125
+ * The React-written, css properties for this element.
126
+ */
127
+ style: _propTypes.default.objectOf(_propTypes.default.string),
128
+
129
+ /**
130
+ * The label of the custom select input
131
+ */
132
+ label: _propTypes.default.string,
133
+
134
+ /**
135
+ * The custom select input options from the backend
136
+ */
137
+ options: _propTypes.default.arrayOf(_propTypes.default.shape({
138
+ value: _propTypes.default.string,
139
+ label: _propTypes.default.string
140
+ })),
141
+
142
+ /**
143
+ * The name of the custom select input
144
+ */
145
+ name: _propTypes.default.string,
146
+
147
+ /**
148
+ * The function to fetch the options from the backend
149
+ */
150
+ getOptions: _propTypes.default.func,
151
+
152
+ /**
153
+ * The function to set the value of the custom select input
154
+ */
155
+ setValue: _propTypes.default.func.isRequired,
156
+
157
+ /**
158
+ * The custom select input description
159
+ */
160
+ description: _propTypes.default.string,
161
+
162
+ /**
163
+ * The error object
164
+ */
165
+ error: _propTypes.default.objectOf(_propTypes.default.string),
166
+
167
+ /**
168
+ * The value of the custom select input
169
+ */
170
+ value: _propTypes.default.shape({
171
+ value: _propTypes.default.string,
172
+ label: _propTypes.default.string
173
+ }),
174
+
175
+ /**
176
+ * The base color of the combobox custom select input
177
+ */
178
+ color: _propTypes.default.string,
179
+
180
+ /**
181
+ * Whether the query getting the combobox options is inFlight
182
+ */
183
+ isFetching: _propTypes.default.bool.isRequired,
184
+
185
+ /**
186
+ * The loading circle color
187
+ */
188
+ loadingCircleColor: _propTypes.default.string
189
+ };
190
+ Combobox.defaultProps = {
191
+ loadingCircleColor: 'main2'
192
+ };
193
+ var _default = Combobox;
194
+ exports.default = _default;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Combobox", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Combobox.default;
10
+ }
11
+ });
12
+
13
+ var _Combobox = _interopRequireDefault(require("./Combobox"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _bem = _interopRequireDefault(require("@pareto-engineering/bem"));
13
+
14
+ var _excluded = ["id", "className", "style", "items", "isOpen", "highlightedIndex", "getItemProps"];
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
+
24
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
25
+
26
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
27
+
28
+ // Local Definitions
29
+ var baseClassName = _bem.default.base;
30
+ var componentClassName = 'menu';
31
+ /**
32
+ * This is the component description.
33
+ */
34
+
35
+ var Menu = /*#__PURE__*/React.forwardRef((_ref, ref) => {
36
+ var {
37
+ id,
38
+ className: userClassName,
39
+ style,
40
+ items,
41
+ isOpen,
42
+ highlightedIndex,
43
+ getItemProps
44
+ } = _ref,
45
+ otherProps = _objectWithoutProperties(_ref, _excluded);
46
+
47
+ return /*#__PURE__*/React.createElement("ul", _extends({
48
+ id: id,
49
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
50
+ style: style,
51
+ ref: ref
52
+ }, otherProps), isOpen && items.map((item, index) => /*#__PURE__*/React.createElement("li", _extends({
53
+ key: item.label
54
+ }, getItemProps({
55
+ item,
56
+ index
57
+ }), {
58
+ className: ['item', highlightedIndex === index && _bem.default.modifierActive].filter(Boolean).join(' ')
59
+ }), /*#__PURE__*/React.createElement("p", null, item.label))));
60
+ });
61
+ Menu.propTypes = {
62
+ /**
63
+ * The HTML id for this element
64
+ */
65
+ id: _propTypes.default.string,
66
+
67
+ /**
68
+ * The HTML class names for this element
69
+ */
70
+ className: _propTypes.default.string,
71
+
72
+ /**
73
+ * The React-written, css properties for this element.
74
+ */
75
+ style: _propTypes.default.objectOf(_propTypes.default.string),
76
+
77
+ /**
78
+ * The items to be displayed in the menu
79
+ */
80
+ items: _propTypes.default.arrayOf(_propTypes.default.shape({
81
+ value: _propTypes.default.string,
82
+ label: _propTypes.default.string
83
+ })),
84
+
85
+ /**
86
+ * Whether or not the menu is open
87
+ */
88
+ isOpen: _propTypes.default.bool,
89
+
90
+ /**
91
+ * The index of the highlighted item
92
+ */
93
+ highlightedIndex: _propTypes.default.number,
94
+
95
+ /**
96
+ * The function to get the item props
97
+ */
98
+ getItemProps: _propTypes.default.func
99
+ };
100
+ Menu.defaultProps = {// someProp:false
101
+ };
102
+ var _default = Menu;
103
+ exports.default = _default;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Menu", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Menu.default;
10
+ }
11
+ });
12
+
13
+ var _Menu = _interopRequireDefault(require("./Menu"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }