@hyphen/hyphen-components 2.15.6 → 2.16.1
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.
- package/dist/components/SelectInput/SelectInput.d.ts +32 -6
- package/dist/components/SelectInput/SelectInput.stories.d.ts +2 -0
- package/dist/hyphen-components.cjs.development.js +54 -47
- package/dist/hyphen-components.cjs.development.js.map +1 -1
- package/dist/hyphen-components.cjs.production.min.js +1 -1
- package/dist/hyphen-components.cjs.production.min.js.map +1 -1
- package/dist/hyphen-components.esm.js +54 -47
- package/dist/hyphen-components.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/SelectInput/SelectInput.mdx +12 -0
- package/src/components/SelectInput/SelectInput.stories.tsx +102 -0
- package/src/components/SelectInput/SelectInput.test.tsx +32 -1
- package/src/components/SelectInput/SelectInput.tsx +74 -33
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FocusEvent, ReactNode } from 'react';
|
|
2
2
|
import { OptionsOrGroups, OnChangeValue } from 'react-select';
|
|
3
3
|
import { ResponsiveProp } from '../../types';
|
|
4
4
|
import { GroupBase } from 'react-select/dist/declarations/src/types';
|
|
@@ -25,10 +25,6 @@ export interface SelectInputProps {
|
|
|
25
25
|
* Callback function to call on change event.
|
|
26
26
|
*/
|
|
27
27
|
onChange: (event: SimulatedEventPayloadType) => void;
|
|
28
|
-
/**
|
|
29
|
-
* Options for dropdown list.
|
|
30
|
-
*/
|
|
31
|
-
options: SelectInputOptions;
|
|
32
28
|
/**
|
|
33
29
|
* The value(s) of select.
|
|
34
30
|
*/
|
|
@@ -110,5 +106,35 @@ export interface SelectInputProps {
|
|
|
110
106
|
*/
|
|
111
107
|
[x: string]: any;
|
|
112
108
|
}
|
|
113
|
-
|
|
109
|
+
type AsyncOptions = (inputValue: string) => Promise<SelectInputOptions>;
|
|
110
|
+
type AsyncSelectInputProps = SelectInputProps & {
|
|
111
|
+
/**
|
|
112
|
+
* Load the input asynchronously.
|
|
113
|
+
*/
|
|
114
|
+
isAsync: true;
|
|
115
|
+
/**
|
|
116
|
+
* Load options asynchronously.
|
|
117
|
+
*/
|
|
118
|
+
options: AsyncOptions;
|
|
119
|
+
/**
|
|
120
|
+
* If cacheOptions is passed, then the loaded data will be cached.
|
|
121
|
+
*/
|
|
122
|
+
cacheOptions?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* The default set of options to show before the user starts searching.
|
|
125
|
+
*/
|
|
126
|
+
defaultOptions?: boolean;
|
|
127
|
+
};
|
|
128
|
+
type SyncSelectInputProps = SelectInputProps & {
|
|
129
|
+
/**
|
|
130
|
+
* Load the input synchronously.
|
|
131
|
+
*/
|
|
132
|
+
isAsync?: false;
|
|
133
|
+
/**
|
|
134
|
+
* Options for dropdown list.
|
|
135
|
+
*/
|
|
136
|
+
options: SelectInputOptions;
|
|
137
|
+
};
|
|
138
|
+
export declare function SelectInput(props: AsyncSelectInputProps): JSX.Element;
|
|
139
|
+
export declare function SelectInput(props: SyncSelectInputProps): JSX.Element;
|
|
114
140
|
export {};
|
|
@@ -9,6 +9,8 @@ export declare const HelpText: () => React.JSX.Element;
|
|
|
9
9
|
export declare const Placeholder: () => React.JSX.Element;
|
|
10
10
|
export declare const HiddenLabel: () => React.JSX.Element;
|
|
11
11
|
export declare const CreatableSelect: () => React.JSX.Element;
|
|
12
|
+
export declare const AsyncSelect: () => React.JSX.Element;
|
|
13
|
+
export declare const AsyncCreatableSelect: () => React.JSX.Element;
|
|
12
14
|
export declare const MultiSelect: () => React.JSX.Element;
|
|
13
15
|
export declare const MultiSelectAndPreSelected: () => React.JSX.Element;
|
|
14
16
|
export declare const MultiSelectCreatable: () => React.JSX.Element;
|
|
@@ -18,6 +18,8 @@ var FocusLock = require('react-focus-lock');
|
|
|
18
18
|
var reactRemoveScroll = require('react-remove-scroll');
|
|
19
19
|
var formik = require('formik');
|
|
20
20
|
var Select = require('react-select');
|
|
21
|
+
var AsyncCreatableSelect = require('react-select/async-creatable');
|
|
22
|
+
var AsyncSelect = require('react-select/async');
|
|
21
23
|
var CreatableSelect = require('react-select/creatable');
|
|
22
24
|
var uuid = require('uuid');
|
|
23
25
|
|
|
@@ -2223,48 +2225,50 @@ var FormikRadioGroup = function FormikRadioGroup(_ref) {
|
|
|
2223
2225
|
|
|
2224
2226
|
var styles$e = {"react-select-icon":"SelectInput-module_react-select-icon__PvocB","size-sm":"SelectInput-module_size-sm__PKB-J","size-md":"SelectInput-module_size-md__n9Fj8","size-lg":"SelectInput-module_size-lg__LQ-uG","error":"SelectInput-module_error__Avf98","size-sm-tablet":"SelectInput-module_size-sm-tablet__2Dg01","size-md-tablet":"SelectInput-module_size-md-tablet__-iOSg","size-lg-tablet":"SelectInput-module_size-lg-tablet__9xmuJ","size-sm-desktop":"SelectInput-module_size-sm-desktop__tOWI4","size-md-desktop":"SelectInput-module_size-md-desktop__vo-UC","size-lg-desktop":"SelectInput-module_size-lg-desktop__nxQdj","size-sm-hd":"SelectInput-module_size-sm-hd__qamTH","size-md-hd":"SelectInput-module_size-md-hd__Cf8hk","size-lg-hd":"SelectInput-module_size-lg-hd__E4-mZ","disabled":"SelectInput-module_disabled__4ezAy","select-input-label":"SelectInput-module_select-input-label__eqEYa"};
|
|
2225
2227
|
|
|
2226
|
-
var _excluded$k = ["id", "label", "onChange", "options", "value", "autoFocus", "className", "error", "helpText", "hideLabel", "isClearable", "isCreatable", "isDisabled", "isMulti", "isRequired", "menuPortalTarget", "name", "onFocus", "onBlur", "placeholder", "requiredIndicator", "size"];
|
|
2227
|
-
|
|
2228
|
-
var
|
|
2229
|
-
var id =
|
|
2230
|
-
label =
|
|
2231
|
-
onChange =
|
|
2232
|
-
options =
|
|
2233
|
-
value =
|
|
2234
|
-
|
|
2235
|
-
autoFocus =
|
|
2236
|
-
|
|
2237
|
-
className =
|
|
2238
|
-
|
|
2239
|
-
error =
|
|
2240
|
-
helpText =
|
|
2241
|
-
|
|
2242
|
-
hideLabel =
|
|
2243
|
-
|
|
2244
|
-
isClearable =
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2228
|
+
var _excluded$k = ["id", "label", "onChange", "options", "value", "autoFocus", "className", "error", "helpText", "hideLabel", "isClearable", "isAsync", "isCreatable", "isDisabled", "isMulti", "isRequired", "menuPortalTarget", "name", "onFocus", "onBlur", "placeholder", "requiredIndicator", "size"];
|
|
2229
|
+
function SelectInput(props) {
|
|
2230
|
+
var _ref, _classNames;
|
|
2231
|
+
var id = props.id,
|
|
2232
|
+
label = props.label,
|
|
2233
|
+
onChange = props.onChange,
|
|
2234
|
+
options = props.options,
|
|
2235
|
+
value = props.value,
|
|
2236
|
+
_props$autoFocus = props.autoFocus,
|
|
2237
|
+
autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,
|
|
2238
|
+
_props$className = props.className,
|
|
2239
|
+
className = _props$className === void 0 ? '' : _props$className,
|
|
2240
|
+
_props$error = props.error,
|
|
2241
|
+
error = _props$error === void 0 ? false : _props$error,
|
|
2242
|
+
helpText = props.helpText,
|
|
2243
|
+
_props$hideLabel = props.hideLabel,
|
|
2244
|
+
hideLabel = _props$hideLabel === void 0 ? false : _props$hideLabel,
|
|
2245
|
+
_props$isClearable = props.isClearable,
|
|
2246
|
+
isClearable = _props$isClearable === void 0 ? false : _props$isClearable,
|
|
2247
|
+
_props$isAsync = props.isAsync,
|
|
2248
|
+
isAsync = _props$isAsync === void 0 ? false : _props$isAsync,
|
|
2249
|
+
_props$isCreatable = props.isCreatable,
|
|
2250
|
+
isCreatable = _props$isCreatable === void 0 ? false : _props$isCreatable,
|
|
2251
|
+
_props$isDisabled = props.isDisabled,
|
|
2252
|
+
isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled,
|
|
2253
|
+
_props$isMulti = props.isMulti,
|
|
2254
|
+
isMulti = _props$isMulti === void 0 ? false : _props$isMulti,
|
|
2255
|
+
_props$isRequired = props.isRequired,
|
|
2256
|
+
isRequired = _props$isRequired === void 0 ? false : _props$isRequired,
|
|
2257
|
+
_props$menuPortalTarg = props.menuPortalTarget,
|
|
2258
|
+
menuPortalTarget = _props$menuPortalTarg === void 0 ? null : _props$menuPortalTarg,
|
|
2259
|
+
_props$name = props.name,
|
|
2260
|
+
name = _props$name === void 0 ? '' : _props$name,
|
|
2261
|
+
_props$onFocus = props.onFocus,
|
|
2262
|
+
onFocus = _props$onFocus === void 0 ? null : _props$onFocus,
|
|
2263
|
+
_props$onBlur = props.onBlur,
|
|
2264
|
+
onBlur = _props$onBlur === void 0 ? null : _props$onBlur,
|
|
2265
|
+
_props$placeholder = props.placeholder,
|
|
2266
|
+
placeholder = _props$placeholder === void 0 ? undefined : _props$placeholder,
|
|
2267
|
+
_props$requiredIndica = props.requiredIndicator,
|
|
2268
|
+
requiredIndicator = _props$requiredIndica === void 0 ? ' *' : _props$requiredIndica,
|
|
2269
|
+
_props$size = props.size,
|
|
2270
|
+
size = _props$size === void 0 ? 'md' : _props$size,
|
|
2271
|
+
restProps = _objectWithoutPropertiesLoose(props, _excluded$k);
|
|
2268
2272
|
var handleChange = function handleChange(values) {
|
|
2269
2273
|
var simulatedEventPayloadType = {
|
|
2270
2274
|
target: {
|
|
@@ -2283,7 +2287,7 @@ var SelectInput = function SelectInput(_ref) {
|
|
|
2283
2287
|
var responsiveClasses = generateResponsiveClasses('size', size);
|
|
2284
2288
|
var wrapperClasses = classNames.apply(void 0, ['hyphen-components__variables__form-control', 'select-input-wrapper', className].concat(responsiveClasses.map(function (c) {
|
|
2285
2289
|
return styles$e[c];
|
|
2286
|
-
}), [(
|
|
2290
|
+
}), [(_ref = {}, _ref[styles$e.disabled] = isDisabled, _ref)]));
|
|
2287
2291
|
var inputClasses = classNames('react-select', (_classNames = {}, _classNames[styles$e.error] = error, _classNames));
|
|
2288
2292
|
var labelProps = {
|
|
2289
2293
|
inputId: id,
|
|
@@ -2298,11 +2302,15 @@ var SelectInput = function SelectInput(_ref) {
|
|
|
2298
2302
|
name: "remove"
|
|
2299
2303
|
}));
|
|
2300
2304
|
};
|
|
2301
|
-
var Component = isCreatable ? CreatableSelect : Select;
|
|
2305
|
+
var Component = isCreatable && isAsync ? AsyncCreatableSelect : isCreatable ? CreatableSelect : isAsync ? AsyncSelect : Select;
|
|
2302
2306
|
return React.createElement(Box, {
|
|
2303
2307
|
width: "100%",
|
|
2304
2308
|
className: wrapperClasses
|
|
2305
|
-
}, label && !hideLabel && React.createElement(FormLabel, _extends({}, labelProps), label), React.createElement(Component, _extends({}, restProps, {
|
|
2309
|
+
}, label && !hideLabel && React.createElement(FormLabel, _extends({}, labelProps), label), React.createElement(Component, _extends({}, restProps, isAsync ? {
|
|
2310
|
+
loadOptions: options
|
|
2311
|
+
} : {
|
|
2312
|
+
options: options
|
|
2313
|
+
}, {
|
|
2306
2314
|
inputId: id,
|
|
2307
2315
|
"aria-label": label,
|
|
2308
2316
|
components: {
|
|
@@ -2318,7 +2326,6 @@ var SelectInput = function SelectInput(_ref) {
|
|
|
2318
2326
|
menuPortalTarget: menuPortalTarget,
|
|
2319
2327
|
name: name,
|
|
2320
2328
|
autoFocus: autoFocus,
|
|
2321
|
-
options: options,
|
|
2322
2329
|
onChange: handleChange,
|
|
2323
2330
|
onFocus: handleFocus,
|
|
2324
2331
|
onBlur: handleBlur,
|
|
@@ -2331,7 +2338,7 @@ var SelectInput = function SelectInput(_ref) {
|
|
|
2331
2338
|
},
|
|
2332
2339
|
value: value
|
|
2333
2340
|
})), error && typeof error !== 'boolean' && React.createElement(InputValidationMessage, null, error));
|
|
2334
|
-
}
|
|
2341
|
+
}
|
|
2335
2342
|
|
|
2336
2343
|
var _excluded$j = ["field", "form", "onChange", "id", "label", "options", "error"];
|
|
2337
2344
|
var FormikSelectInput = function FormikSelectInput(_ref) {
|