@tecsinapse/react-native-kit 1.18.5 → 1.20.0

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 (190) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/components/atoms/Avatar/Avatar.js +1 -1
  3. package/dist/components/atoms/Avatar/Avatar.js.map +1 -1
  4. package/dist/components/atoms/Avatar/index.js.map +1 -1
  5. package/dist/components/atoms/Badge/Badge.js +1 -1
  6. package/dist/components/atoms/Badge/Badge.js.map +1 -1
  7. package/dist/components/atoms/Badge/index.js.map +1 -1
  8. package/dist/components/atoms/BottomNavigator/BottomNavigator.js +1 -1
  9. package/dist/components/atoms/BottomNavigator/BottomNavigator.js.map +1 -1
  10. package/dist/components/atoms/BottomNavigator/Item.js +1 -1
  11. package/dist/components/atoms/BottomNavigator/Item.js.map +1 -1
  12. package/dist/components/atoms/BottomNavigator/index.js +1 -1
  13. package/dist/components/atoms/BottomNavigator/index.js.map +1 -1
  14. package/dist/components/atoms/BottomNavigator/styled.js +1 -1
  15. package/dist/components/atoms/BottomNavigator/styled.js.map +1 -1
  16. package/dist/components/atoms/Button/Button.d.ts +2 -2
  17. package/dist/components/atoms/Button/Button.js +1 -1
  18. package/dist/components/atoms/Button/Button.js.map +1 -1
  19. package/dist/components/atoms/Button/States/Error.js +1 -1
  20. package/dist/components/atoms/Button/States/Error.js.map +1 -1
  21. package/dist/components/atoms/Button/States/Loading.js +1 -1
  22. package/dist/components/atoms/Button/States/Loading.js.map +1 -1
  23. package/dist/components/atoms/Button/States/Success.js +1 -1
  24. package/dist/components/atoms/Button/States/Success.js.map +1 -1
  25. package/dist/components/atoms/Button/States/index.js.map +1 -1
  26. package/dist/components/atoms/Button/index.js.map +1 -1
  27. package/dist/components/atoms/GroupButton/GroupButtonOption.js +1 -1
  28. package/dist/components/atoms/GroupButton/GroupButtonOption.js.map +1 -1
  29. package/dist/components/atoms/GroupButton/index.js.map +1 -1
  30. package/dist/components/atoms/Header/Header.js +1 -1
  31. package/dist/components/atoms/Header/Header.js.map +1 -1
  32. package/dist/components/atoms/Header/index.js.map +1 -1
  33. package/dist/components/atoms/Header/styled.js +1 -1
  34. package/dist/components/atoms/Header/styled.js.map +1 -1
  35. package/dist/components/atoms/Input/Input.d.ts +3 -2
  36. package/dist/components/atoms/Input/Input.js +1 -2
  37. package/dist/components/atoms/Input/Input.js.map +1 -1
  38. package/dist/components/atoms/Input/index.js.map +1 -1
  39. package/dist/components/atoms/Input/styled.js.map +1 -1
  40. package/dist/components/atoms/InputMask/InputMask.js +1 -1
  41. package/dist/components/atoms/InputMask/InputMask.js.map +1 -1
  42. package/dist/components/atoms/InputMask/index.js.map +1 -1
  43. package/dist/components/atoms/InputMask/styled.js.map +1 -1
  44. package/dist/components/atoms/Modal/ModalGroupManager.js +2 -2
  45. package/dist/components/atoms/Modal/ModalGroupManager.js.map +1 -1
  46. package/dist/components/atoms/Modal/ModalLifecycleHandler.d.ts +2 -2
  47. package/dist/components/atoms/Modal/ModalLifecycleHandler.js +76 -85
  48. package/dist/components/atoms/Modal/ModalLifecycleHandler.js.map +1 -1
  49. package/dist/components/atoms/Modal/index.js.map +1 -1
  50. package/dist/components/atoms/Modal/ui/BaseModalView.d.ts +2 -2
  51. package/dist/components/atoms/Modal/ui/BaseModalView.js +4 -4
  52. package/dist/components/atoms/Modal/ui/BaseModalView.js.map +1 -1
  53. package/dist/components/atoms/Modal/ui/styled.js +12 -12
  54. package/dist/components/atoms/Modal/ui/styled.js.map +1 -1
  55. package/dist/components/atoms/Modal/ui/types.d.ts +1 -1
  56. package/dist/components/atoms/Modal/ui/types.js.map +1 -1
  57. package/dist/components/atoms/Modal/useLazyModalManager.d.ts +2 -2
  58. package/dist/components/atoms/Modal/useLazyModalManager.js.map +1 -1
  59. package/dist/components/atoms/Modal/useModalManager.d.ts +2 -2
  60. package/dist/components/atoms/Modal/useModalManager.js.map +1 -1
  61. package/dist/components/atoms/Modal/useModalRemoteControl.js.map +1 -1
  62. package/dist/components/atoms/Skeleton/Pulse.js.map +1 -1
  63. package/dist/components/atoms/Skeleton/Skeleton.js +1 -1
  64. package/dist/components/atoms/Skeleton/Skeleton.js.map +1 -1
  65. package/dist/components/atoms/Skeleton/Wave.js.map +1 -1
  66. package/dist/components/atoms/Skeleton/animation.js +1 -1
  67. package/dist/components/atoms/Skeleton/animation.js.map +1 -1
  68. package/dist/components/atoms/Skeleton/index.js.map +1 -1
  69. package/dist/components/atoms/Skeleton/styled.js.map +1 -1
  70. package/dist/components/atoms/Skeleton/types.js.map +1 -1
  71. package/dist/components/atoms/SnappingSlider/SnappingSlider.js +1 -1
  72. package/dist/components/atoms/SnappingSlider/SnappingSlider.js.map +1 -1
  73. package/dist/components/atoms/SnappingSlider/index.js.map +1 -1
  74. package/dist/components/atoms/Tag/Tag.js +1 -1
  75. package/dist/components/atoms/Tag/Tag.js.map +1 -1
  76. package/dist/components/atoms/Tag/index.js.map +1 -1
  77. package/dist/components/atoms/Text/Text.js.map +1 -1
  78. package/dist/components/atoms/Text/index.js.map +1 -1
  79. package/dist/components/atoms/Text/styled.js +1 -1
  80. package/dist/components/atoms/Text/styled.js.map +1 -1
  81. package/dist/components/atoms/TextArea/TextArea.js +1 -1
  82. package/dist/components/atoms/TextArea/TextArea.js.map +1 -1
  83. package/dist/components/atoms/TextArea/index.js.map +1 -1
  84. package/dist/components/atoms/TextArea/styled.js.map +1 -1
  85. package/dist/components/molecules/Calendar/Calendar.js +1 -1
  86. package/dist/components/molecules/Calendar/Calendar.js.map +1 -1
  87. package/dist/components/molecules/Calendar/index.js.map +1 -1
  88. package/dist/components/molecules/DatePicker/DatePicker.js +1 -1
  89. package/dist/components/molecules/DatePicker/DatePicker.js.map +1 -1
  90. package/dist/components/molecules/DatePicker/index.js.map +1 -1
  91. package/dist/components/molecules/DatePicker/styled.js +1 -1
  92. package/dist/components/molecules/DatePicker/styled.js.map +1 -1
  93. package/dist/components/molecules/DateTimePicker/DateTimePicker.js +1 -1
  94. package/dist/components/molecules/DateTimePicker/DateTimePicker.js.map +1 -1
  95. package/dist/components/molecules/DateTimePicker/index.js.map +1 -1
  96. package/dist/components/molecules/DateTimeSelector/DateTimeSelector.js +1 -1
  97. package/dist/components/molecules/DateTimeSelector/DateTimeSelector.js.map +1 -1
  98. package/dist/components/molecules/DateTimeSelector/index.js.map +1 -1
  99. package/dist/components/molecules/Grid/Grid.d.ts +5 -0
  100. package/dist/components/molecules/Grid/Grid.js +57 -0
  101. package/dist/components/molecules/Grid/Grid.js.map +1 -0
  102. package/dist/components/molecules/Grid/Item/Item.d.ts +7 -0
  103. package/dist/components/molecules/Grid/Item/Item.js +78 -0
  104. package/dist/components/molecules/Grid/Item/Item.js.map +1 -0
  105. package/dist/components/molecules/Grid/Item/index.d.ts +1 -0
  106. package/dist/components/molecules/Grid/Item/index.js +14 -0
  107. package/dist/components/molecules/Grid/Item/index.js.map +1 -0
  108. package/dist/components/molecules/Grid/index.d.ts +2 -0
  109. package/dist/components/molecules/Grid/index.js +15 -0
  110. package/dist/components/molecules/Grid/index.js.map +1 -0
  111. package/dist/components/molecules/IconTextButton/IconTextButton.d.ts +6 -0
  112. package/dist/components/molecules/IconTextButton/IconTextButton.js +50 -0
  113. package/dist/components/molecules/IconTextButton/IconTextButton.js.map +1 -0
  114. package/dist/components/molecules/IconTextButton/TextComponent.d.ts +12 -0
  115. package/dist/components/molecules/IconTextButton/TextComponent.js +34 -0
  116. package/dist/components/molecules/IconTextButton/TextComponent.js.map +1 -0
  117. package/dist/components/molecules/IconTextButton/index.d.ts +1 -0
  118. package/dist/components/molecules/IconTextButton/index.js +14 -0
  119. package/dist/components/molecules/IconTextButton/index.js.map +1 -0
  120. package/dist/components/molecules/IconTextButton/styled.d.ts +2 -0
  121. package/dist/components/molecules/IconTextButton/styled.js +46 -0
  122. package/dist/components/molecules/IconTextButton/styled.js.map +1 -0
  123. package/dist/components/molecules/InputPassword/InputPassword.d.ts +3 -2
  124. package/dist/components/molecules/InputPassword/InputPassword.js +1 -1
  125. package/dist/components/molecules/InputPassword/InputPassword.js.map +1 -1
  126. package/dist/components/molecules/InputPassword/index.js.map +1 -1
  127. package/dist/components/molecules/LabeledSwitch/LabelComponent.d.ts +13 -0
  128. package/dist/components/molecules/LabeledSwitch/LabelComponent.js +36 -0
  129. package/dist/components/molecules/LabeledSwitch/LabelComponent.js.map +1 -0
  130. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.d.ts +8 -0
  131. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.js +53 -0
  132. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.js.map +1 -0
  133. package/dist/components/molecules/LabeledSwitch/index.d.ts +1 -0
  134. package/dist/components/molecules/LabeledSwitch/index.js +14 -0
  135. package/dist/components/molecules/LabeledSwitch/index.js.map +1 -0
  136. package/dist/components/molecules/LabeledSwitch/styled.d.ts +9 -0
  137. package/dist/components/molecules/LabeledSwitch/styled.js +35 -0
  138. package/dist/components/molecules/LabeledSwitch/styled.js.map +1 -0
  139. package/dist/components/molecules/Select/Modal.d.ts +1 -1
  140. package/dist/components/molecules/Select/Modal.js +1 -2
  141. package/dist/components/molecules/Select/Modal.js.map +1 -1
  142. package/dist/components/molecules/Select/Select.js +3 -3
  143. package/dist/components/molecules/Select/Select.js.map +1 -1
  144. package/dist/components/molecules/Select/index.js.map +1 -1
  145. package/dist/components/molecules/Select/styled.js +1 -1
  146. package/dist/components/molecules/Select/styled.js.map +1 -1
  147. package/dist/components/molecules/Snackbar/Snackbar.js +1 -1
  148. package/dist/components/molecules/Snackbar/Snackbar.js.map +1 -1
  149. package/dist/components/molecules/Snackbar/index.js.map +1 -1
  150. package/dist/components/molecules/Snackbar/styled.js.map +1 -1
  151. package/dist/index.d.ts +17 -14
  152. package/dist/index.js +112 -91
  153. package/dist/index.js.map +1 -1
  154. package/dist/utils/date.js.map +1 -1
  155. package/package.json +5 -5
  156. package/src/components/atoms/BottomNavigator/BottomNavigator.tsx +3 -6
  157. package/src/components/atoms/Button/Button.tsx +19 -13
  158. package/src/components/atoms/Button/index.ts +1 -1
  159. package/src/components/atoms/Input/Input.tsx +8 -6
  160. package/src/components/atoms/Input/styled.ts +1 -3
  161. package/src/components/atoms/Modal/ModalGroupManager.tsx +22 -17
  162. package/src/components/atoms/Modal/ModalLifecycleHandler.ts +139 -126
  163. package/src/components/atoms/Modal/index.ts +7 -7
  164. package/src/components/atoms/Modal/ui/BaseModalView.tsx +150 -127
  165. package/src/components/atoms/Modal/ui/styled.ts +17 -17
  166. package/src/components/atoms/Modal/ui/types.ts +9 -8
  167. package/src/components/atoms/Modal/useLazyModalManager.ts +32 -31
  168. package/src/components/atoms/Modal/useModalManager.ts +28 -26
  169. package/src/components/atoms/Modal/useModalRemoteControl.ts +16 -18
  170. package/src/components/molecules/Calendar/Calendar.tsx +5 -1
  171. package/src/components/molecules/DatePicker/DatePicker.tsx +26 -17
  172. package/src/components/molecules/DatePicker/styled.ts +4 -4
  173. package/src/components/molecules/DateTimePicker/DateTimePicker.tsx +18 -16
  174. package/src/components/molecules/DateTimeSelector/DateTimeSelector.tsx +4 -1
  175. package/src/components/molecules/Grid/Grid.tsx +68 -0
  176. package/src/components/molecules/Grid/Item/Item.tsx +77 -0
  177. package/src/components/molecules/Grid/Item/index.ts +1 -0
  178. package/src/components/molecules/Grid/index.ts +2 -0
  179. package/src/components/molecules/IconTextButton/IconTextButton.tsx +55 -0
  180. package/src/components/molecules/IconTextButton/TextComponent.tsx +43 -0
  181. package/src/components/molecules/IconTextButton/index.ts +4 -0
  182. package/src/components/molecules/IconTextButton/styled.ts +35 -0
  183. package/src/components/molecules/InputPassword/InputPassword.tsx +3 -2
  184. package/src/components/molecules/LabeledSwitch/LabelComponent.tsx +46 -0
  185. package/src/components/molecules/LabeledSwitch/LabeledSwitch.tsx +59 -0
  186. package/src/components/molecules/LabeledSwitch/index.ts +4 -0
  187. package/src/components/molecules/LabeledSwitch/styled.ts +27 -0
  188. package/src/components/molecules/Select/Modal.tsx +88 -66
  189. package/src/components/molecules/Select/Select.tsx +2 -2
  190. package/src/index.ts +38 -29
@@ -0,0 +1,46 @@
1
+ import {
2
+ FontColor,
3
+ FontWeight,
4
+ LabelPositionOptions,
5
+ } from '@tecsinapse/react-core';
6
+ import React, { FC } from 'react';
7
+ import { Pressable, PressableProps } from 'react-native';
8
+ import { TextNativeProps } from '../../atoms/Text';
9
+ import { StyledLabel } from './styled';
10
+
11
+ export interface LabelComponentProps extends PressableProps {
12
+ label: string;
13
+ labelPosition: LabelPositionOptions;
14
+ labelProps?: TextNativeProps;
15
+ active: boolean;
16
+ switchDisabled?: boolean;
17
+ }
18
+
19
+ const LabelComponent: FC<LabelComponentProps> = ({
20
+ label,
21
+ labelPosition,
22
+ labelProps,
23
+ active,
24
+ switchDisabled = false,
25
+ ...rest
26
+ }) => {
27
+ const defaultFontColor: keyof FontColor =
28
+ active && !switchDisabled ? 'dark' : 'medium';
29
+ const defaultFontWeight: keyof FontWeight =
30
+ active && !switchDisabled ? 'bold' : 'regular';
31
+
32
+ return (
33
+ <Pressable {...rest}>
34
+ <StyledLabel
35
+ labelPosition={labelPosition}
36
+ fontColor={labelProps?.fontColor ?? defaultFontColor}
37
+ fontWeight={labelProps?.fontWeight ?? defaultFontWeight}
38
+ {...labelProps}
39
+ >
40
+ {label}
41
+ </StyledLabel>
42
+ </Pressable>
43
+ );
44
+ };
45
+
46
+ export default React.memo(LabelComponent);
@@ -0,0 +1,59 @@
1
+ import { LabeledSwitchProps, Switch } from '@tecsinapse/react-core';
2
+ import React, { FC } from 'react';
3
+ import { TextNativeProps } from '../../atoms/Text';
4
+ import LabelComponent from './LabelComponent';
5
+ import { StyledView } from './styled';
6
+
7
+ export type LabeledSwitchNativeProps = LabeledSwitchProps & {
8
+ labelProps?: TextNativeProps;
9
+ };
10
+
11
+ const LabeledSwitch: FC<LabeledSwitchNativeProps> = ({
12
+ label,
13
+ labelPosition = 'right',
14
+ labelProps,
15
+ pressableLabel = false,
16
+ active,
17
+ disabled,
18
+ onChange,
19
+ ...rest
20
+ }) => {
21
+ return (
22
+ <StyledView>
23
+ {labelPosition === 'left' ? (
24
+ <LabelComponent
25
+ active={active}
26
+ label={label}
27
+ labelPosition={'left'}
28
+ labelProps={labelProps}
29
+ disabled={!pressableLabel || disabled}
30
+ switchDisabled={disabled}
31
+ onPress={() => onChange(!active)}
32
+ />
33
+ ) : (
34
+ <></>
35
+ )}
36
+ <Switch
37
+ active={active}
38
+ onChange={onChange}
39
+ disabled={disabled}
40
+ {...rest}
41
+ />
42
+ {labelPosition === 'right' ? (
43
+ <LabelComponent
44
+ active={active}
45
+ label={label}
46
+ labelPosition={'right'}
47
+ labelProps={labelProps}
48
+ disabled={!pressableLabel || disabled}
49
+ switchDisabled={disabled}
50
+ onPress={() => onChange(!active)}
51
+ />
52
+ ) : (
53
+ <></>
54
+ )}
55
+ </StyledView>
56
+ );
57
+ };
58
+
59
+ export default LabeledSwitch;
@@ -0,0 +1,4 @@
1
+ export {
2
+ default as LabeledSwitch,
3
+ LabeledSwitchNativeProps,
4
+ } from './LabeledSwitch';
@@ -0,0 +1,27 @@
1
+ import styled, { css } from '@emotion/native';
2
+ import { LabelPositionOptions, StyleProps } from '@tecsinapse/react-core';
3
+ import { View } from 'react-native';
4
+ import { Text } from '../../atoms/Text';
5
+
6
+ export const StyledView = styled(View)`
7
+ display: flex;
8
+ flex-direction: row;
9
+ align-items: center;
10
+ `;
11
+
12
+ export const StyledLabel = styled(Text)<
13
+ Partial<StyleProps> & {
14
+ labelPosition: LabelPositionOptions;
15
+ }
16
+ >`
17
+ ${({ theme, labelPosition }) => {
18
+ if (labelPosition === 'right')
19
+ return css`
20
+ margin-left: ${theme?.spacing.centi};
21
+ `;
22
+ else if (labelPosition === 'left')
23
+ return css`
24
+ margin-right: ${theme?.spacing.centi};
25
+ `;
26
+ }}
27
+ `;
@@ -31,7 +31,6 @@ const Component = <Data, Type extends 'single' | 'multi'>({
31
31
  options,
32
32
  keyExtractor,
33
33
  labelExtractor,
34
- groupKeyExtractor,
35
34
  hideSearchBar,
36
35
  searchBarPlaceholder,
37
36
  focused,
@@ -63,39 +62,49 @@ const Component = <Data, Type extends 'single' | 'multi'>({
63
62
  );
64
63
  }, [value, focused, setSelectedValues]);
65
64
 
66
- const getData = React.useCallback((options: Data[]) => {
67
- return options?.map((option, index) => ({
68
- ...option,
69
- _checked:
70
- type === 'multi'
71
- ? !!selectedValues.find(
72
- value => keyExtractor(option, index) == keyExtractor(value, index)
73
- )
74
- : keyExtractor((selectedValues[0] || {}) as Data, index) ==
75
- keyExtractor(option, index),
76
- }));
77
- }, [keyExtractor, selectedValues, type])
78
-
79
- const data = React.useMemo(() => typeof options !== 'function' ? getData(options) : [], [options, getData]);
80
-
81
- const handlePressItem = React.useCallback((option: Data) => {
82
- setSelectedValues(selectedValues => {
83
- if (type === 'multi') {
84
- const newArr: Data[] = [];
85
- let found = false;
86
- for (const value of selectedValues) {
87
- if (keyExtractor(value) != keyExtractor(option)) newArr.push(value);
88
- else found = true;
65
+ const getData = React.useCallback(
66
+ (options: Data[]) => {
67
+ return options?.map((option, index) => ({
68
+ ...option,
69
+ _checked:
70
+ type === 'multi'
71
+ ? !!selectedValues.find(
72
+ value =>
73
+ keyExtractor(option, index) == keyExtractor(value, index)
74
+ )
75
+ : keyExtractor((selectedValues[0] || {}) as Data, index) ==
76
+ keyExtractor(option, index),
77
+ }));
78
+ },
79
+ [keyExtractor, selectedValues, type]
80
+ );
81
+
82
+ const data = React.useMemo(
83
+ () => (typeof options !== 'function' ? getData(options) : []),
84
+ [options, getData]
85
+ );
86
+
87
+ const handlePressItem = React.useCallback(
88
+ (option: Data) => {
89
+ setSelectedValues(selectedValues => {
90
+ if (type === 'multi') {
91
+ const newArr: Data[] = [];
92
+ let found = false;
93
+ for (const value of selectedValues) {
94
+ if (keyExtractor(value) != keyExtractor(option)) newArr.push(value);
95
+ else found = true;
96
+ }
97
+ if (!found) newArr.push(option);
98
+ return newArr;
89
99
  }
90
- if (!found) newArr.push(option);
91
- return newArr;
92
- }
93
- return keyExtractor((selectedValues[0] || {}) as Data) ===
94
- keyExtractor(option)
95
- ? []
96
- : [option];
97
- });
98
- }, [selectedValues, setSelectedValues, keyExtractor, type])
100
+ return keyExtractor((selectedValues[0] || {}) as Data) ===
101
+ keyExtractor(option)
102
+ ? []
103
+ : [option];
104
+ });
105
+ },
106
+ [selectedValues, setSelectedValues, keyExtractor, type]
107
+ );
99
108
 
100
109
  React.useEffect(() => {
101
110
  if (_closeOnPick && selectedValues[0] && selectedValues[0] !== value) {
@@ -109,29 +118,35 @@ const Component = <Data, Type extends 'single' | 'multi'>({
109
118
  onSelect(
110
119
  (type === 'single' ? selectedValues[0] : selectedValues) as OnSelectArg
111
120
  );
112
- close?.()
121
+ close?.();
113
122
  }, [selectedValues]);
114
123
 
115
- const optionBuilder = React.useCallback(({ item }: ListRenderItemInfo<Data & { _checked: boolean }>) => (
116
- <MemoizedOption
117
- item={item}
118
- type={type}
119
- handlePressItem={handlePressItem}
120
- labelExtractor={labelExtractor}
121
- />
122
- ), [])
123
-
124
- const anyChecked = data.filter(item => item._checked).length
125
- const dataLengthChanged = data.length
126
-
127
- const memoizedFlatlist = React.useMemo(() => (
128
- <FlatList
129
- data={data}
130
- keyExtractor={keyExtractor}
131
- fadingEdgeLength={200}
132
- renderItem={optionBuilder}
133
- />
134
- ), [selectedValues, anyChecked, dataLengthChanged])
124
+ const optionBuilder = React.useCallback(
125
+ ({ item }: ListRenderItemInfo<Data & { _checked: boolean }>) => (
126
+ <MemoizedOption
127
+ item={item}
128
+ type={type}
129
+ handlePressItem={handlePressItem}
130
+ labelExtractor={labelExtractor}
131
+ />
132
+ ),
133
+ []
134
+ );
135
+
136
+ const anyChecked = data.filter(item => item._checked).length;
137
+ const dataLengthChanged = data.length;
138
+
139
+ const memoizedFlatlist = React.useMemo(
140
+ () => (
141
+ <FlatList
142
+ data={data}
143
+ keyExtractor={keyExtractor}
144
+ fadingEdgeLength={200}
145
+ renderItem={optionBuilder}
146
+ />
147
+ ),
148
+ [selectedValues, anyChecked, dataLengthChanged]
149
+ );
135
150
 
136
151
  const titleTextModal = selectModalTitle ? (
137
152
  <TextTitleModal
@@ -180,9 +195,10 @@ const Component = <Data, Type extends 'single' | 'multi'>({
180
195
  <FetchIndicator animating={true} color={'grey'} size={'large'} />
181
196
  )}
182
197
 
183
- {memoizedFlatlist}
198
+ {memoizedFlatlist}
184
199
 
185
- { !_closeOnPick && <ModalFooter>
200
+ {!_closeOnPick && (
201
+ <ModalFooter>
186
202
  <Button
187
203
  variant={'filled'}
188
204
  color={'primary'}
@@ -193,21 +209,27 @@ const Component = <Data, Type extends 'single' | 'multi'>({
193
209
  {confirmButtonText}
194
210
  </Text>
195
211
  </Button>
196
- </ModalFooter>}
212
+ </ModalFooter>
213
+ )}
197
214
  </ModalView>
198
215
  );
199
216
  };
200
217
 
201
218
  interface IOption<T> {
202
- item: T & { _checked: boolean }
203
- type: 'single' | 'multi'
204
- labelExtractor: (option: T) => string
205
- handlePressItem: (option: T) => void
219
+ item: T & { _checked: boolean };
220
+ type: 'single' | 'multi';
221
+ labelExtractor: (option: T) => string;
222
+ handlePressItem: (option: T) => void;
206
223
  }
207
224
 
208
- const MemoizedOption: React.FC<IOption<any>> = ({ handlePressItem, labelExtractor, item, type }) => {
225
+ const MemoizedOption = <T,>({
226
+ handlePressItem,
227
+ labelExtractor,
228
+ item,
229
+ type,
230
+ }: IOption<T>): JSX.Element => {
209
231
  return React.useMemo(() => {
210
- const label = labelExtractor(item)
232
+ const label = labelExtractor(item);
211
233
  return (
212
234
  <ListItem onPress={() => handlePressItem(item)}>
213
235
  <View pointerEvents={'none'}>
@@ -234,8 +256,8 @@ const MemoizedOption: React.FC<IOption<any>> = ({ handlePressItem, labelExtracto
234
256
  )}
235
257
  </View>
236
258
  </ListItem>
237
- )
238
- }, [item._checked])
239
- }
259
+ );
260
+ }, [item._checked]);
261
+ };
240
262
 
241
263
  export const Modal = Component;
@@ -165,7 +165,7 @@ function Select<Data, Type extends 'single' | 'multi'>({
165
165
  if (Array.isArray(value)) {
166
166
  if (value.length === 0) return _placeholder;
167
167
  else {
168
- let options =
168
+ const options =
169
169
  selectOptions.length > 0 ? selectOptions : (value as Data[]);
170
170
  return options
171
171
  ?.reduce(
@@ -180,7 +180,7 @@ function Select<Data, Type extends 'single' | 'multi'>({
180
180
  .slice(0, -2);
181
181
  }
182
182
  } else {
183
- if (value === undefined) return _placeholder;
183
+ if (!value) return _placeholder;
184
184
  const selectedOption = selectOptions?.find(
185
185
  (option, index) =>
186
186
  keyExtractor(option, index) == keyExtractor(value as Data, index)
package/src/index.ts CHANGED
@@ -1,33 +1,39 @@
1
1
  export * from '@tecsinapse/react-core';
2
- export { Header, HeaderProps } from './components/atoms/Header';
3
- export { Select, SelectNativeProps } from './components/molecules/Select';
4
- export { Input, InputNativeProps } from './components/atoms/Input';
5
- export { InputMask, InputMaskNativeProps } from './components/atoms/InputMask';
6
- export { TextArea, TextAreaProps } from './components/atoms/TextArea';
7
- export { Text, TextNativeProps } from './components/atoms/Text';
2
+ export { Avatar } from './components/atoms/Avatar';
3
+ export { Badge, BadgeNativeProps } from './components/atoms/Badge';
8
4
  export {
5
+ BottomNavigator,
6
+ BottomNavigatorProps,
7
+ } from './components/atoms/BottomNavigator';
8
+ export {
9
+ Button,
10
+ ButtonNativeProps,
9
11
  Error,
10
12
  Loading,
11
13
  Success,
12
- Button,
13
- ButtonNativeProps,
14
14
  } from './components/atoms/Button';
15
15
  export { GroupButtonOption } from './components/atoms/GroupButton';
16
+ export { Header, HeaderProps } from './components/atoms/Header';
17
+ export { Input, InputNativeProps } from './components/atoms/Input';
18
+ export { InputMask, InputMaskNativeProps } from './components/atoms/InputMask';
16
19
  export {
17
- InputPassword,
18
- InputPasswordNativeProps,
19
- } from './components/molecules/InputPassword';
20
- export {
21
- BottomNavigator,
22
- BottomNavigatorProps,
23
- } from './components/atoms/BottomNavigator';
24
- export { Tag, TagProps } from './components/atoms/Tag';
20
+ IBaseModal,
21
+ ModalGroupManager,
22
+ ModalLifecycleHandler,
23
+ ModalView,
24
+ useLazyModalManager,
25
+ useModalManager,
26
+ useModalRemoteControl,
27
+ } from './components/atoms/Modal';
28
+ export { Skeleton, SkeletonProps } from './components/atoms/Skeleton';
25
29
  export {
26
30
  SnappingSlider,
27
31
  SnappingSliderProps,
28
32
  } from './components/atoms/SnappingSlider';
29
- export { Badge, BadgeNativeProps } from './components/atoms/Badge';
30
- export { Snackbar, SnackbarNativeProps } from './components/molecules/Snackbar';
33
+ export { Tag, TagProps } from './components/atoms/Tag';
34
+ export { Text, TextNativeProps } from './components/atoms/Text';
35
+ export { TextArea, TextAreaProps } from './components/atoms/TextArea';
36
+ export { Calendar } from './components/molecules/Calendar';
31
37
  export {
32
38
  DatePicker,
33
39
  NativeDatePickerProps,
@@ -36,16 +42,19 @@ export {
36
42
  DateTimePicker,
37
43
  NativeDateTimePickerProps,
38
44
  } from './components/molecules/DateTimePicker';
39
- export { Avatar } from './components/atoms/Avatar';
40
- export { Calendar } from './components/molecules/Calendar';
41
45
  export { DateTimeSelector } from './components/molecules/DateTimeSelector';
42
46
  export {
43
- ModalGroupManager,
44
- ModalView,
45
- ModalLifecycleHandler,
46
- useLazyModalManager,
47
- useModalManager,
48
- useModalRemoteControl,
49
- IBaseModal,
50
- } from './components/atoms/Modal';
51
- export { Skeleton, SkeletonProps } from './components/atoms/Skeleton';
47
+ IconTextButton,
48
+ NativeIconTextButtonProps,
49
+ } from './components/molecules/IconTextButton';
50
+ export {
51
+ InputPassword,
52
+ InputPasswordNativeProps,
53
+ } from './components/molecules/InputPassword';
54
+ export {
55
+ LabeledSwitch,
56
+ LabeledSwitchNativeProps,
57
+ } from './components/molecules/LabeledSwitch';
58
+ export { Select, SelectNativeProps } from './components/molecules/Select';
59
+ export { Snackbar, SnackbarNativeProps } from './components/molecules/Snackbar';
60
+ export { Grid, GridItem } from './components/molecules/Grid';