@tecsinapse/react-web-kit 1.21.2 → 1.21.3
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/CHANGELOG.md +11 -0
- package/dist/components/molecules/Select/Select.js +4 -9
- package/dist/components/molecules/Select/Select.js.map +1 -1
- package/esm/components/molecules/Select/Select.js +4 -9
- package/esm/components/molecules/Select/Select.js.map +1 -1
- package/package.json +2 -2
- package/src/components/molecules/Select/Select.tsx +4 -10
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.21.3](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.21.2...@tecsinapse/react-web-kit@1.21.3) (2022-09-23)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* dependencies and verification lazy select ([3cb68af](https://github.com/tecsinapse/design-system/commit/3cb68af91d8df6b487c6cab8f707b2604fb9e55e))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [1.21.2](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.21.1...@tecsinapse/react-web-kit@1.21.2) (2022-09-16)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -67,11 +67,6 @@ const Select = _ref => {
|
|
|
67
67
|
const _label = hasValue ? label : undefined;
|
|
68
68
|
|
|
69
69
|
const displayValue = (0, _functions.getDisplayValue)(type, value, selectOptions, _placeholder, keyExtractor, labelExtractor);
|
|
70
|
-
(0, _react.useEffect)(() => {
|
|
71
|
-
if (typeof options !== 'function') {
|
|
72
|
-
setSelectOptions(options);
|
|
73
|
-
}
|
|
74
|
-
}, [options]);
|
|
75
70
|
|
|
76
71
|
const handleLazyFocus = _react.default.useCallback(async () => {
|
|
77
72
|
if (!dropDownVisible && typeof options === 'function') {
|
|
@@ -79,14 +74,14 @@ const Select = _ref => {
|
|
|
79
74
|
const result = await options();
|
|
80
75
|
|
|
81
76
|
if (result) {
|
|
82
|
-
setSelectOptions(result);
|
|
77
|
+
setSelectOptions(result !== null && result !== void 0 ? result : []);
|
|
83
78
|
}
|
|
84
79
|
} catch (e) {}
|
|
85
80
|
}
|
|
86
|
-
}, [options,
|
|
81
|
+
}, [options, setSelectOptions, dropDownVisible]);
|
|
87
82
|
|
|
88
83
|
const handleOnSearch = _react.default.useCallback(async searchInput => {
|
|
89
|
-
if (searchInput !== undefined && onSearch) {
|
|
84
|
+
if (searchInput !== undefined && onSearch && dropDownVisible) {
|
|
90
85
|
try {
|
|
91
86
|
const result = await onSearch(searchInput);
|
|
92
87
|
|
|
@@ -106,7 +101,7 @@ const Select = _ref => {
|
|
|
106
101
|
}
|
|
107
102
|
} catch (e) {}
|
|
108
103
|
}
|
|
109
|
-
}, [
|
|
104
|
+
}, [onSearch, value, keyExtractor, dropDownVisible, setSelectOptions]);
|
|
110
105
|
|
|
111
106
|
const handlePressInput = async () => {
|
|
112
107
|
await handleLazyFocus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","names":["Select","value","options","keyExtractor","onSelect","type","labelExtractor","placeholder","onSearch","searchBarPlaceholder","hideSearchBar","label","disabled","anchor","displayTextProps","selectAllLabel","rest","dropDownVisible","setDropDownVisible","React","useState","selectOptions","setSelectOptions","refDropDown","useRef","useClickAwayListener","useEffect","onlyLabel","hasValue","length","_placeholder","_label","undefined","displayValue","getDisplayValue","handleLazyFocus","useCallback","result","e","handleOnSearch","searchInput","find","v","selectedValues","filter","current","handlePressInput","onPress","prev","RightComponent","state","defaultStyles","transition"],"sources":["../../../../src/components/molecules/Select/Select.tsx"],"sourcesContent":["import {\n PressableInputContainer,\n Text,\n TextProps,\n} from '@tecsinapse/react-core';\nimport React, { useEffect, useState } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { useClickAwayListener } from '../../../hooks';\nimport { defaultStyles, transition } from './animations';\nimport { Dropdown } from './Dropdown';\nimport { getDisplayValue } from './functions';\nimport {\n RightComponent,\n StyledContainer,\n StyledInputContainer,\n} from './styled';\n\nexport interface SelectProps<Data, Type extends 'single' | 'multi'>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n options: ((searchInput?: string) => Promise<Data[]>) | Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n value: Type extends 'single' ? Data | undefined : Data[];\n type: Type;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n placeholder?: string;\n onSearch?:\n | ((searchArg: string) => void)\n | ((searchInput?: string) => Promise<Data[]>)\n | never;\n searchBarPlaceholder?: string;\n hideSearchBar?: boolean;\n selectAllLabel?: string;\n disabled?: boolean;\n label?: string;\n anchor?: 'top' | 'bottom';\n displayTextProps?: TextProps;\n}\n\n/** NOTE: For better performance, you should memoize options and handlers */\nexport const Select = <Data, Type extends 'single' | 'multi'>({\n value,\n options,\n keyExtractor,\n onSelect,\n type,\n labelExtractor,\n placeholder,\n onSearch,\n searchBarPlaceholder = 'Busque a opção desejada',\n hideSearchBar = true,\n label,\n disabled = false,\n anchor = 'bottom',\n displayTextProps,\n selectAllLabel = 'Selecionar todos',\n ...rest\n}: SelectProps<Data, Type>): JSX.Element => {\n const [dropDownVisible, setDropDownVisible] = React.useState<boolean>(false);\n const [selectOptions, setSelectOptions] = useState<Data[]>([]);\n const refDropDown = React.useRef(null);\n useClickAwayListener(refDropDown, setDropDownVisible);\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n // TODO: Add Skeleton to modal height when loading is true\n\n const onlyLabel = label && !placeholder;\n const hasValue =\n type === 'single' ? !!value : ((value || []) as []).length > 0;\n const _placeholder = onlyLabel ? label : placeholder;\n const _label = hasValue ? label : undefined;\n\n const displayValue = getDisplayValue<Data>(\n type,\n value,\n selectOptions,\n _placeholder,\n keyExtractor,\n labelExtractor\n );\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n const handleLazyFocus = React.useCallback(async () => {\n if (!dropDownVisible && typeof options === 'function') {\n try {\n const result = await options();\n if (result) {\n setSelectOptions(result);\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n }, [options, value, setSelectOptions, dropDownVisible]);\n\n const handleOnSearch = React.useCallback(\n async (searchInput: string | undefined) => {\n if (searchInput !== undefined && onSearch) {\n try {\n //TODO: Remove code duplicated below (Select in react-native-kit)\n const result = await onSearch(searchInput);\n if (result) {\n if (type === 'single') {\n if (\n value &&\n !result.find(\n v => keyExtractor(value as Data) === keyExtractor(v)\n )\n ) {\n setSelectOptions([value as Data, ...result]);\n } else setSelectOptions(result);\n } else {\n if ((value as Data[]).length > 0) {\n const selectedValues =\n (value as Data[]).filter(\n v =>\n !result.find(\n current =>\n keyExtractor(v as Data) === keyExtractor(current)\n )\n ) || [];\n setSelectOptions([...selectedValues, ...result]);\n } else {\n setSelectOptions(result);\n }\n }\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n },\n [options, value, keyExtractor]\n );\n\n const handlePressInput = async () => {\n await handleLazyFocus();\n };\n\n const onPress = React.useCallback(\n () => setDropDownVisible(prev => !prev),\n [setDropDownVisible]\n );\n\n return (\n <StyledContainer ref={refDropDown} {...rest}>\n <StyledInputContainer onFocus={handlePressInput}>\n <PressableInputContainer\n label={_label}\n onPress={onPress}\n disabled={disabled}\n rightComponent={RightComponent}\n >\n <Text\n {...displayTextProps}\n ellipsizeMode=\"tail\"\n numberOfLines={1}\n fontWeight={'bold'}\n >\n {displayValue}\n </Text>\n </PressableInputContainer>\n </StyledInputContainer>\n <Transition in={dropDownVisible} timeout={300}>\n {state => (\n <Dropdown\n options={selectOptions ?? []}\n onSelect={onSelect}\n value={value}\n type={type}\n keyExtractor={keyExtractor}\n labelExtractor={labelExtractor}\n hideSearchBar={hideSearchBar}\n searchBarPlaceholder={searchBarPlaceholder}\n onSearch={handleOnSearch}\n style={{ ...defaultStyles, ...transition[anchor][state] }}\n setDropDownVisible={setDropDownVisible}\n anchor={anchor}\n selectAllLabel={selectAllLabel}\n />\n )}\n </Transition>\n </StyledContainer>\n );\n};\n\nexport default Select;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","names":["Select","value","options","keyExtractor","onSelect","type","labelExtractor","placeholder","onSearch","searchBarPlaceholder","hideSearchBar","label","disabled","anchor","displayTextProps","selectAllLabel","rest","dropDownVisible","setDropDownVisible","React","useState","selectOptions","setSelectOptions","refDropDown","useRef","useClickAwayListener","useEffect","onlyLabel","hasValue","length","_placeholder","_label","undefined","displayValue","getDisplayValue","handleLazyFocus","useCallback","result","e","handleOnSearch","searchInput","find","v","selectedValues","filter","current","handlePressInput","onPress","prev","RightComponent","state","defaultStyles","transition"],"sources":["../../../../src/components/molecules/Select/Select.tsx"],"sourcesContent":["import {\n PressableInputContainer,\n Text,\n TextProps,\n} from '@tecsinapse/react-core';\nimport React, { useEffect, useState } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { useClickAwayListener } from '../../../hooks';\nimport { defaultStyles, transition } from './animations';\nimport { Dropdown } from './Dropdown';\nimport { getDisplayValue } from './functions';\nimport {\n RightComponent,\n StyledContainer,\n StyledInputContainer,\n} from './styled';\n\nexport interface SelectProps<Data, Type extends 'single' | 'multi'>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n options: ((searchInput?: string) => Promise<Data[]>) | Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n value: Type extends 'single' ? Data | undefined : Data[];\n type: Type;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n placeholder?: string;\n onSearch?:\n | ((searchArg: string) => void)\n | ((searchInput?: string) => Promise<Data[]>)\n | never;\n searchBarPlaceholder?: string;\n hideSearchBar?: boolean;\n selectAllLabel?: string;\n disabled?: boolean;\n label?: string;\n anchor?: 'top' | 'bottom';\n displayTextProps?: TextProps;\n}\n\n/** NOTE: For better performance, you should memoize options and handlers */\nexport const Select = <Data, Type extends 'single' | 'multi'>({\n value,\n options,\n keyExtractor,\n onSelect,\n type,\n labelExtractor,\n placeholder,\n onSearch,\n searchBarPlaceholder = 'Busque a opção desejada',\n hideSearchBar = true,\n label,\n disabled = false,\n anchor = 'bottom',\n displayTextProps,\n selectAllLabel = 'Selecionar todos',\n ...rest\n}: SelectProps<Data, Type>): JSX.Element => {\n const [dropDownVisible, setDropDownVisible] = React.useState<boolean>(false);\n const [selectOptions, setSelectOptions] = useState<Data[]>([]);\n const refDropDown = React.useRef(null);\n useClickAwayListener(refDropDown, setDropDownVisible);\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n // TODO: Add Skeleton to modal height when loading is true\n\n const onlyLabel = label && !placeholder;\n const hasValue =\n type === 'single' ? !!value : ((value || []) as []).length > 0;\n const _placeholder = onlyLabel ? label : placeholder;\n const _label = hasValue ? label : undefined;\n\n const displayValue = getDisplayValue<Data>(\n type,\n value,\n selectOptions,\n _placeholder,\n keyExtractor,\n labelExtractor\n );\n\n const handleLazyFocus = React.useCallback(async () => {\n if (!dropDownVisible && typeof options === 'function') {\n try {\n const result = await options();\n if (result) {\n setSelectOptions(result ?? []);\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n }, [options, setSelectOptions, dropDownVisible]);\n\n const handleOnSearch = React.useCallback(\n async (searchInput: string | undefined) => {\n if (searchInput !== undefined && onSearch && dropDownVisible) {\n try {\n //TODO: Remove code duplicated below (Select in react-native-kit)\n const result = await onSearch(searchInput);\n if (result) {\n if (type === 'single') {\n if (\n value &&\n !result.find(\n v => keyExtractor(value as Data) === keyExtractor(v)\n )\n ) {\n setSelectOptions([value as Data, ...result]);\n } else setSelectOptions(result);\n } else {\n if ((value as Data[]).length > 0) {\n const selectedValues =\n (value as Data[]).filter(\n v =>\n !result.find(\n current =>\n keyExtractor(v as Data) === keyExtractor(current)\n )\n ) || [];\n setSelectOptions([...selectedValues, ...result]);\n } else {\n setSelectOptions(result);\n }\n }\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n },\n [onSearch, value, keyExtractor, dropDownVisible, setSelectOptions]\n );\n\n const handlePressInput = async () => {\n await handleLazyFocus();\n };\n\n const onPress = React.useCallback(\n () => setDropDownVisible(prev => !prev),\n [setDropDownVisible]\n );\n\n return (\n <StyledContainer ref={refDropDown} {...rest}>\n <StyledInputContainer onFocus={handlePressInput}>\n <PressableInputContainer\n label={_label}\n onPress={onPress}\n disabled={disabled}\n rightComponent={RightComponent}\n >\n <Text\n {...displayTextProps}\n ellipsizeMode=\"tail\"\n numberOfLines={1}\n fontWeight={'bold'}\n >\n {displayValue}\n </Text>\n </PressableInputContainer>\n </StyledInputContainer>\n <Transition in={dropDownVisible} timeout={300}>\n {state => (\n <Dropdown\n options={selectOptions ?? []}\n onSelect={onSelect}\n value={value}\n type={type}\n keyExtractor={keyExtractor}\n labelExtractor={labelExtractor}\n hideSearchBar={hideSearchBar}\n searchBarPlaceholder={searchBarPlaceholder}\n onSearch={handleOnSearch}\n style={{ ...defaultStyles, ...transition[anchor][state] }}\n setDropDownVisible={setDropDownVisible}\n anchor={anchor}\n selectAllLabel={selectAllLabel}\n />\n )}\n </Transition>\n </StyledContainer>\n );\n};\n\nexport default Select;\n"],"mappings":"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"}
|
|
@@ -96,11 +96,6 @@ export var Select = function Select(_ref) {
|
|
|
96
96
|
var _label = hasValue ? label : undefined;
|
|
97
97
|
|
|
98
98
|
var displayValue = getDisplayValue(type, value, selectOptions, _placeholder, keyExtractor, labelExtractor);
|
|
99
|
-
useEffect(function () {
|
|
100
|
-
if (typeof options !== 'function') {
|
|
101
|
-
setSelectOptions(options);
|
|
102
|
-
}
|
|
103
|
-
}, [options]);
|
|
104
99
|
var handleLazyFocus = React.useCallback(_asyncToGenerator(_regeneratorRuntime().mark(function _callee() {
|
|
105
100
|
var result;
|
|
106
101
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
@@ -120,7 +115,7 @@ export var Select = function Select(_ref) {
|
|
|
120
115
|
result = _context.sent;
|
|
121
116
|
|
|
122
117
|
if (result) {
|
|
123
|
-
setSelectOptions(result);
|
|
118
|
+
setSelectOptions(result !== null && result !== void 0 ? result : []);
|
|
124
119
|
}
|
|
125
120
|
|
|
126
121
|
_context.next = 10;
|
|
@@ -136,7 +131,7 @@ export var Select = function Select(_ref) {
|
|
|
136
131
|
}
|
|
137
132
|
}
|
|
138
133
|
}, _callee, null, [[1, 8]]);
|
|
139
|
-
})), [options,
|
|
134
|
+
})), [options, setSelectOptions, dropDownVisible]);
|
|
140
135
|
var handleOnSearch = React.useCallback(function () {
|
|
141
136
|
var _ref3 = _asyncToGenerator(_regeneratorRuntime().mark(function _callee2(searchInput) {
|
|
142
137
|
var result, selectedValues;
|
|
@@ -144,7 +139,7 @@ export var Select = function Select(_ref) {
|
|
|
144
139
|
while (1) {
|
|
145
140
|
switch (_context2.prev = _context2.next) {
|
|
146
141
|
case 0:
|
|
147
|
-
if (!(searchInput !== undefined && onSearch)) {
|
|
142
|
+
if (!(searchInput !== undefined && onSearch && dropDownVisible)) {
|
|
148
143
|
_context2.next = 10;
|
|
149
144
|
break;
|
|
150
145
|
}
|
|
@@ -195,7 +190,7 @@ export var Select = function Select(_ref) {
|
|
|
195
190
|
return function (_x) {
|
|
196
191
|
return _ref3.apply(this, arguments);
|
|
197
192
|
};
|
|
198
|
-
}(), [
|
|
193
|
+
}(), [onSearch, value, keyExtractor, dropDownVisible, setSelectOptions]);
|
|
199
194
|
|
|
200
195
|
var handlePressInput = function () {
|
|
201
196
|
var _ref4 = _asyncToGenerator(_regeneratorRuntime().mark(function _callee3() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","names":["PressableInputContainer","Text","React","useEffect","useState","Transition","useClickAwayListener","defaultStyles","transition","Dropdown","getDisplayValue","RightComponent","StyledContainer","StyledInputContainer","Select","value","options","keyExtractor","onSelect","type","labelExtractor","placeholder","onSearch","searchBarPlaceholder","hideSearchBar","label","disabled","anchor","displayTextProps","selectAllLabel","rest","dropDownVisible","setDropDownVisible","selectOptions","setSelectOptions","refDropDown","useRef","onlyLabel","hasValue","length","_placeholder","_label","undefined","displayValue","handleLazyFocus","useCallback","result","handleOnSearch","searchInput","find","v","selectedValues","filter","current","handlePressInput","onPress","prev","state"],"sources":["../../../../src/components/molecules/Select/Select.tsx"],"sourcesContent":["import {\n PressableInputContainer,\n Text,\n TextProps,\n} from '@tecsinapse/react-core';\nimport React, { useEffect, useState } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { useClickAwayListener } from '../../../hooks';\nimport { defaultStyles, transition } from './animations';\nimport { Dropdown } from './Dropdown';\nimport { getDisplayValue } from './functions';\nimport {\n RightComponent,\n StyledContainer,\n StyledInputContainer,\n} from './styled';\n\nexport interface SelectProps<Data, Type extends 'single' | 'multi'>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n options: ((searchInput?: string) => Promise<Data[]>) | Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n value: Type extends 'single' ? Data | undefined : Data[];\n type: Type;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n placeholder?: string;\n onSearch?:\n | ((searchArg: string) => void)\n | ((searchInput?: string) => Promise<Data[]>)\n | never;\n searchBarPlaceholder?: string;\n hideSearchBar?: boolean;\n selectAllLabel?: string;\n disabled?: boolean;\n label?: string;\n anchor?: 'top' | 'bottom';\n displayTextProps?: TextProps;\n}\n\n/** NOTE: For better performance, you should memoize options and handlers */\nexport const Select = <Data, Type extends 'single' | 'multi'>({\n value,\n options,\n keyExtractor,\n onSelect,\n type,\n labelExtractor,\n placeholder,\n onSearch,\n searchBarPlaceholder = 'Busque a opção desejada',\n hideSearchBar = true,\n label,\n disabled = false,\n anchor = 'bottom',\n displayTextProps,\n selectAllLabel = 'Selecionar todos',\n ...rest\n}: SelectProps<Data, Type>): JSX.Element => {\n const [dropDownVisible, setDropDownVisible] = React.useState<boolean>(false);\n const [selectOptions, setSelectOptions] = useState<Data[]>([]);\n const refDropDown = React.useRef(null);\n useClickAwayListener(refDropDown, setDropDownVisible);\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n // TODO: Add Skeleton to modal height when loading is true\n\n const onlyLabel = label && !placeholder;\n const hasValue =\n type === 'single' ? !!value : ((value || []) as []).length > 0;\n const _placeholder = onlyLabel ? label : placeholder;\n const _label = hasValue ? label : undefined;\n\n const displayValue = getDisplayValue<Data>(\n type,\n value,\n selectOptions,\n _placeholder,\n keyExtractor,\n labelExtractor\n );\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n const handleLazyFocus = React.useCallback(async () => {\n if (!dropDownVisible && typeof options === 'function') {\n try {\n const result = await options();\n if (result) {\n setSelectOptions(result);\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n }, [options, value, setSelectOptions, dropDownVisible]);\n\n const handleOnSearch = React.useCallback(\n async (searchInput: string | undefined) => {\n if (searchInput !== undefined && onSearch) {\n try {\n //TODO: Remove code duplicated below (Select in react-native-kit)\n const result = await onSearch(searchInput);\n if (result) {\n if (type === 'single') {\n if (\n value &&\n !result.find(\n v => keyExtractor(value as Data) === keyExtractor(v)\n )\n ) {\n setSelectOptions([value as Data, ...result]);\n } else setSelectOptions(result);\n } else {\n if ((value as Data[]).length > 0) {\n const selectedValues =\n (value as Data[]).filter(\n v =>\n !result.find(\n current =>\n keyExtractor(v as Data) === keyExtractor(current)\n )\n ) || [];\n setSelectOptions([...selectedValues, ...result]);\n } else {\n setSelectOptions(result);\n }\n }\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n },\n [options, value, keyExtractor]\n );\n\n const handlePressInput = async () => {\n await handleLazyFocus();\n };\n\n const onPress = React.useCallback(\n () => setDropDownVisible(prev => !prev),\n [setDropDownVisible]\n );\n\n return (\n <StyledContainer ref={refDropDown} {...rest}>\n <StyledInputContainer onFocus={handlePressInput}>\n <PressableInputContainer\n label={_label}\n onPress={onPress}\n disabled={disabled}\n rightComponent={RightComponent}\n >\n <Text\n {...displayTextProps}\n ellipsizeMode=\"tail\"\n numberOfLines={1}\n fontWeight={'bold'}\n >\n {displayValue}\n </Text>\n </PressableInputContainer>\n </StyledInputContainer>\n <Transition in={dropDownVisible} timeout={300}>\n {state => (\n <Dropdown\n options={selectOptions ?? []}\n onSelect={onSelect}\n value={value}\n type={type}\n keyExtractor={keyExtractor}\n labelExtractor={labelExtractor}\n hideSearchBar={hideSearchBar}\n searchBarPlaceholder={searchBarPlaceholder}\n onSearch={handleOnSearch}\n style={{ ...defaultStyles, ...transition[anchor][state] }}\n setDropDownVisible={setDropDownVisible}\n anchor={anchor}\n selectAllLabel={selectAllLabel}\n />\n )}\n </Transition>\n </StyledContainer>\n );\n};\n\nexport default Select;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","names":["PressableInputContainer","Text","React","useEffect","useState","Transition","useClickAwayListener","defaultStyles","transition","Dropdown","getDisplayValue","RightComponent","StyledContainer","StyledInputContainer","Select","value","options","keyExtractor","onSelect","type","labelExtractor","placeholder","onSearch","searchBarPlaceholder","hideSearchBar","label","disabled","anchor","displayTextProps","selectAllLabel","rest","dropDownVisible","setDropDownVisible","selectOptions","setSelectOptions","refDropDown","useRef","onlyLabel","hasValue","length","_placeholder","_label","undefined","displayValue","handleLazyFocus","useCallback","result","handleOnSearch","searchInput","find","v","selectedValues","filter","current","handlePressInput","onPress","prev","state"],"sources":["../../../../src/components/molecules/Select/Select.tsx"],"sourcesContent":["import {\n PressableInputContainer,\n Text,\n TextProps,\n} from '@tecsinapse/react-core';\nimport React, { useEffect, useState } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { useClickAwayListener } from '../../../hooks';\nimport { defaultStyles, transition } from './animations';\nimport { Dropdown } from './Dropdown';\nimport { getDisplayValue } from './functions';\nimport {\n RightComponent,\n StyledContainer,\n StyledInputContainer,\n} from './styled';\n\nexport interface SelectProps<Data, Type extends 'single' | 'multi'>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n options: ((searchInput?: string) => Promise<Data[]>) | Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n value: Type extends 'single' ? Data | undefined : Data[];\n type: Type;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n placeholder?: string;\n onSearch?:\n | ((searchArg: string) => void)\n | ((searchInput?: string) => Promise<Data[]>)\n | never;\n searchBarPlaceholder?: string;\n hideSearchBar?: boolean;\n selectAllLabel?: string;\n disabled?: boolean;\n label?: string;\n anchor?: 'top' | 'bottom';\n displayTextProps?: TextProps;\n}\n\n/** NOTE: For better performance, you should memoize options and handlers */\nexport const Select = <Data, Type extends 'single' | 'multi'>({\n value,\n options,\n keyExtractor,\n onSelect,\n type,\n labelExtractor,\n placeholder,\n onSearch,\n searchBarPlaceholder = 'Busque a opção desejada',\n hideSearchBar = true,\n label,\n disabled = false,\n anchor = 'bottom',\n displayTextProps,\n selectAllLabel = 'Selecionar todos',\n ...rest\n}: SelectProps<Data, Type>): JSX.Element => {\n const [dropDownVisible, setDropDownVisible] = React.useState<boolean>(false);\n const [selectOptions, setSelectOptions] = useState<Data[]>([]);\n const refDropDown = React.useRef(null);\n useClickAwayListener(refDropDown, setDropDownVisible);\n\n useEffect(() => {\n if (typeof options !== 'function') {\n setSelectOptions(options);\n }\n }, [options]);\n\n // TODO: Add Skeleton to modal height when loading is true\n\n const onlyLabel = label && !placeholder;\n const hasValue =\n type === 'single' ? !!value : ((value || []) as []).length > 0;\n const _placeholder = onlyLabel ? label : placeholder;\n const _label = hasValue ? label : undefined;\n\n const displayValue = getDisplayValue<Data>(\n type,\n value,\n selectOptions,\n _placeholder,\n keyExtractor,\n labelExtractor\n );\n\n const handleLazyFocus = React.useCallback(async () => {\n if (!dropDownVisible && typeof options === 'function') {\n try {\n const result = await options();\n if (result) {\n setSelectOptions(result ?? []);\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n }, [options, setSelectOptions, dropDownVisible]);\n\n const handleOnSearch = React.useCallback(\n async (searchInput: string | undefined) => {\n if (searchInput !== undefined && onSearch && dropDownVisible) {\n try {\n //TODO: Remove code duplicated below (Select in react-native-kit)\n const result = await onSearch(searchInput);\n if (result) {\n if (type === 'single') {\n if (\n value &&\n !result.find(\n v => keyExtractor(value as Data) === keyExtractor(v)\n )\n ) {\n setSelectOptions([value as Data, ...result]);\n } else setSelectOptions(result);\n } else {\n if ((value as Data[]).length > 0) {\n const selectedValues =\n (value as Data[]).filter(\n v =>\n !result.find(\n current =>\n keyExtractor(v as Data) === keyExtractor(current)\n )\n ) || [];\n setSelectOptions([...selectedValues, ...result]);\n } else {\n setSelectOptions(result);\n }\n }\n }\n } catch (e) {\n // TODO: Catch error\n }\n }\n },\n [onSearch, value, keyExtractor, dropDownVisible, setSelectOptions]\n );\n\n const handlePressInput = async () => {\n await handleLazyFocus();\n };\n\n const onPress = React.useCallback(\n () => setDropDownVisible(prev => !prev),\n [setDropDownVisible]\n );\n\n return (\n <StyledContainer ref={refDropDown} {...rest}>\n <StyledInputContainer onFocus={handlePressInput}>\n <PressableInputContainer\n label={_label}\n onPress={onPress}\n disabled={disabled}\n rightComponent={RightComponent}\n >\n <Text\n {...displayTextProps}\n ellipsizeMode=\"tail\"\n numberOfLines={1}\n fontWeight={'bold'}\n >\n {displayValue}\n </Text>\n </PressableInputContainer>\n </StyledInputContainer>\n <Transition in={dropDownVisible} timeout={300}>\n {state => (\n <Dropdown\n options={selectOptions ?? []}\n onSelect={onSelect}\n value={value}\n type={type}\n keyExtractor={keyExtractor}\n labelExtractor={labelExtractor}\n hideSearchBar={hideSearchBar}\n searchBarPlaceholder={searchBarPlaceholder}\n onSearch={handleOnSearch}\n style={{ ...defaultStyles, ...transition[anchor][state] }}\n setDropDownVisible={setDropDownVisible}\n anchor={anchor}\n selectAllLabel={selectAllLabel}\n />\n )}\n </Transition>\n </StyledContainer>\n );\n};\n\nexport default Select;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tecsinapse/react-web-kit",
|
|
3
3
|
"description": "TecSinapse React components",
|
|
4
|
-
"version": "1.21.
|
|
4
|
+
"version": "1.21.3",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
42
42
|
"react-native-web": "^0.17.1 || ^0.18.0"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "73b880b17f2fbd116fa873b579f8dfcb22cc2ddd"
|
|
45
45
|
}
|
|
@@ -86,28 +86,22 @@ export const Select = <Data, Type extends 'single' | 'multi'>({
|
|
|
86
86
|
labelExtractor
|
|
87
87
|
);
|
|
88
88
|
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
if (typeof options !== 'function') {
|
|
91
|
-
setSelectOptions(options);
|
|
92
|
-
}
|
|
93
|
-
}, [options]);
|
|
94
|
-
|
|
95
89
|
const handleLazyFocus = React.useCallback(async () => {
|
|
96
90
|
if (!dropDownVisible && typeof options === 'function') {
|
|
97
91
|
try {
|
|
98
92
|
const result = await options();
|
|
99
93
|
if (result) {
|
|
100
|
-
setSelectOptions(result);
|
|
94
|
+
setSelectOptions(result ?? []);
|
|
101
95
|
}
|
|
102
96
|
} catch (e) {
|
|
103
97
|
// TODO: Catch error
|
|
104
98
|
}
|
|
105
99
|
}
|
|
106
|
-
}, [options,
|
|
100
|
+
}, [options, setSelectOptions, dropDownVisible]);
|
|
107
101
|
|
|
108
102
|
const handleOnSearch = React.useCallback(
|
|
109
103
|
async (searchInput: string | undefined) => {
|
|
110
|
-
if (searchInput !== undefined && onSearch) {
|
|
104
|
+
if (searchInput !== undefined && onSearch && dropDownVisible) {
|
|
111
105
|
try {
|
|
112
106
|
//TODO: Remove code duplicated below (Select in react-native-kit)
|
|
113
107
|
const result = await onSearch(searchInput);
|
|
@@ -142,7 +136,7 @@ export const Select = <Data, Type extends 'single' | 'multi'>({
|
|
|
142
136
|
}
|
|
143
137
|
}
|
|
144
138
|
},
|
|
145
|
-
[
|
|
139
|
+
[onSearch, value, keyExtractor, dropDownVisible, setSelectOptions]
|
|
146
140
|
);
|
|
147
141
|
|
|
148
142
|
const handlePressInput = async () => {
|