@bigbinary/neetoui-rn 0.0.220 → 0.0.222
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/index.d.ts +49 -5
- package/lib/components/Accordion.js +1 -1
- package/lib/components/AnimatedImage.js +1 -1
- package/lib/components/BottomSheet.js +1 -1
- package/lib/components/Button.js +1 -1
- package/lib/components/ButtonGroup.js +1 -1
- package/lib/components/Calendar.js +1 -1
- package/lib/components/Chip.js +1 -1
- package/lib/components/FAB.js +1 -1
- package/lib/components/Input.js +1 -1
- package/lib/components/Loader.js +1 -0
- package/lib/components/MultiSelect.js +1 -1
- package/lib/components/NotificationPreferenceList.js +1 -1
- package/lib/components/OrganizationItem.js +1 -1
- package/lib/components/RichTextEditor.js +1 -1
- package/lib/components/SearchBar.js +1 -1
- package/lib/components/SegmentedTopBar.js +1 -1
- package/lib/components/Select.js +1 -1
- package/lib/components/SocialButton.js +1 -1
- package/lib/components/Touchable.js +1 -1
- package/lib/components/index.js +1 -1
- package/lib/theme/index.js +1 -1
- package/package.json +1 -1
- package/src/components/Accordion.js +98 -93
- package/src/components/AnimatedImage.js +2 -6
- package/src/components/BottomSheet.js +9 -11
- package/src/components/Button.js +19 -18
- package/src/components/ButtonGroup.js +6 -4
- package/src/components/Calendar.js +1 -2
- package/src/components/Chip.js +6 -3
- package/src/components/FAB.js +9 -0
- package/src/components/Input.js +17 -18
- package/src/components/Loader.js +119 -0
- package/src/components/MultiSelect.js +4 -76
- package/src/components/NotificationPreferenceList.js +8 -10
- package/src/components/OrganizationItem.js +10 -11
- package/src/components/RichTextEditor.js +2 -0
- package/src/components/SearchBar.js +13 -11
- package/src/components/SegmentedTopBar.js +5 -10
- package/src/components/Select.js +11 -14
- package/src/components/SocialButton.js +13 -5
- package/src/components/Touchable.js +1 -0
- package/src/components/index.js +1 -0
- package/src/theme/index.js +1 -0
package/src/components/Button.js
CHANGED
|
@@ -3,9 +3,8 @@ import React, { useContext } from "react";
|
|
|
3
3
|
import propTypes from "@styled-system/prop-types";
|
|
4
4
|
import PropTypes from "prop-types";
|
|
5
5
|
import { ThemeContext } from "styled-components/native";
|
|
6
|
-
import { ActivityIndicator } from "react-native";
|
|
7
6
|
|
|
8
|
-
import { Typography, Touchable, Container } from "@components";
|
|
7
|
+
import { Typography, Touchable, Container, Loader } from "@components";
|
|
9
8
|
|
|
10
9
|
export const BUTTON_VARIANTS = Object.freeze({
|
|
11
10
|
SOLID: "solid",
|
|
@@ -68,21 +67,20 @@ export const BUTTON_VARIANTS = Object.freeze({
|
|
|
68
67
|
*
|
|
69
68
|
*/
|
|
70
69
|
|
|
71
|
-
export const Button =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
} = props;
|
|
70
|
+
export const Button = ({
|
|
71
|
+
variant,
|
|
72
|
+
label,
|
|
73
|
+
labelStyle,
|
|
74
|
+
RightIcon,
|
|
75
|
+
LeftIcon,
|
|
76
|
+
disabled,
|
|
77
|
+
isLoading,
|
|
78
|
+
loadingText,
|
|
79
|
+
fontFamily,
|
|
80
|
+
color,
|
|
81
|
+
fontSize,
|
|
82
|
+
...rest
|
|
83
|
+
}) => {
|
|
86
84
|
const theme = useContext(ThemeContext);
|
|
87
85
|
const width = variant === "text" || variant === "danger-text" ? null : "100%";
|
|
88
86
|
|
|
@@ -169,7 +167,7 @@ export const Button = props => {
|
|
|
169
167
|
>
|
|
170
168
|
{isLoading ? (
|
|
171
169
|
<Container flexDirection="row">
|
|
172
|
-
<
|
|
170
|
+
<Loader color={getButtonColors().color} />
|
|
173
171
|
{!!loadingText && (
|
|
174
172
|
<Typography
|
|
175
173
|
textAlign="center"
|
|
@@ -254,4 +252,7 @@ Button.propTypes = {
|
|
|
254
252
|
* To show loading text along with the loading indicator on the button.
|
|
255
253
|
*/
|
|
256
254
|
loadingText: PropTypes.string,
|
|
255
|
+
fontFamily: PropTypes.string,
|
|
256
|
+
color: PropTypes.string,
|
|
257
|
+
fontSize: PropTypes.string,
|
|
257
258
|
};
|
|
@@ -36,7 +36,9 @@ export const ButtonGroup = ({
|
|
|
36
36
|
buttonItems,
|
|
37
37
|
onPress,
|
|
38
38
|
currentActiveBtn,
|
|
39
|
-
|
|
39
|
+
wrapperStyle,
|
|
40
|
+
buttonStyle,
|
|
41
|
+
buttonTextStyle,
|
|
40
42
|
}) => {
|
|
41
43
|
return (
|
|
42
44
|
<Container
|
|
@@ -47,7 +49,7 @@ export const ButtonGroup = ({
|
|
|
47
49
|
flexDirection="row"
|
|
48
50
|
justifyContent="space-between"
|
|
49
51
|
alignSelf="center"
|
|
50
|
-
{...
|
|
52
|
+
{...wrapperStyle}
|
|
51
53
|
>
|
|
52
54
|
{buttonItems.map(item => {
|
|
53
55
|
return (
|
|
@@ -61,11 +63,11 @@ export const ButtonGroup = ({
|
|
|
61
63
|
onPress(item);
|
|
62
64
|
}
|
|
63
65
|
}}
|
|
64
|
-
{...
|
|
66
|
+
{...buttonStyle}
|
|
65
67
|
>
|
|
66
68
|
<Typography
|
|
67
69
|
color={item === currentActiveBtn ? inActiveColor : activeColor}
|
|
68
|
-
{...
|
|
70
|
+
{...buttonTextStyle}
|
|
69
71
|
>
|
|
70
72
|
{item}
|
|
71
73
|
</Typography>
|
|
@@ -32,8 +32,7 @@ import { Calendar as RNCalender } from "react-native-calendars";
|
|
|
32
32
|
* Checkout <a href=" https://www.npmjs.com/package/react-native-calendars">react-native-calendars</a> package for all the available props
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
|
-
export const Calendar =
|
|
36
|
-
const { selectedDate, ...rest } = props;
|
|
35
|
+
export const Calendar = ({ selectedDate, ...rest }) => {
|
|
37
36
|
delete rest.markedDates;
|
|
38
37
|
const theme = useContext(ThemeContext);
|
|
39
38
|
const isCurrentDay = dayjs(selectedDate).isSame(dayjs(), "D");
|
package/src/components/Chip.js
CHANGED
|
@@ -61,7 +61,8 @@ export const Chip = ({
|
|
|
61
61
|
isDisabled,
|
|
62
62
|
closeIconSize,
|
|
63
63
|
closeIcon,
|
|
64
|
-
|
|
64
|
+
containerStyle,
|
|
65
|
+
closeIconContainerStyle,
|
|
65
66
|
}) => {
|
|
66
67
|
return (
|
|
67
68
|
<Touchable
|
|
@@ -73,7 +74,7 @@ export const Chip = ({
|
|
|
73
74
|
disabled={!onChipPress || isDisabled}
|
|
74
75
|
{...(variant && variantStyleObj[variant])}
|
|
75
76
|
{...(isDisabled && { opacity: 0.5 })}
|
|
76
|
-
{...
|
|
77
|
+
{...containerStyle}
|
|
77
78
|
>
|
|
78
79
|
{LeftIcon && <LeftIcon />}
|
|
79
80
|
<Typography mx={2} fontFamily="sf400" color={labelColor}>
|
|
@@ -85,7 +86,7 @@ export const Chip = ({
|
|
|
85
86
|
borderRadius={10}
|
|
86
87
|
disabled={isDisabled}
|
|
87
88
|
onPress={onClose}
|
|
88
|
-
{...
|
|
89
|
+
{...closeIconContainerStyle}
|
|
89
90
|
>
|
|
90
91
|
<Icon name={closeIcon} size={closeIconSize} color={closeIconColor} />
|
|
91
92
|
</Touchable>
|
|
@@ -149,4 +150,6 @@ Chip.propTypes = {
|
|
|
149
150
|
* Whether the chip is disabled. A disabled chip has a overlay and onPress is not called on touch.
|
|
150
151
|
*/
|
|
151
152
|
isDisabled: PropTypes.bool,
|
|
153
|
+
containerStyle: PropTypes.object,
|
|
154
|
+
closeIconContainerStyle: PropTypes.object,
|
|
152
155
|
};
|
package/src/components/FAB.js
CHANGED
|
@@ -99,4 +99,13 @@ FAB.propTypes = {
|
|
|
99
99
|
* Function to execute on press.
|
|
100
100
|
*/
|
|
101
101
|
onPress: PropTypes.func.isRequired,
|
|
102
|
+
/**
|
|
103
|
+
* String to set background color.
|
|
104
|
+
*/
|
|
105
|
+
bg: PropTypes.string,
|
|
106
|
+
/**
|
|
107
|
+
* Boolean to disable button.
|
|
108
|
+
*/
|
|
109
|
+
disabled: PropTypes.bool,
|
|
110
|
+
variant: PropTypes.string,
|
|
102
111
|
};
|
package/src/components/Input.js
CHANGED
|
@@ -94,23 +94,22 @@ const AnimatedLabel = Animated.createAnimatedComponent(Typography);
|
|
|
94
94
|
*
|
|
95
95
|
*/
|
|
96
96
|
|
|
97
|
-
export const Input =
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
97
|
+
export const Input = ({
|
|
98
|
+
label,
|
|
99
|
+
value = "",
|
|
100
|
+
onChangeText = () => {},
|
|
101
|
+
onBlur = () => {},
|
|
102
|
+
errorMessage = null,
|
|
103
|
+
PrefixIcon,
|
|
104
|
+
SuffixIcon,
|
|
105
|
+
autoFocus = false,
|
|
106
|
+
disabled = false,
|
|
107
|
+
noBorder = false,
|
|
108
|
+
showInputAccessoryView = true,
|
|
109
|
+
textAlignVertical = "top",
|
|
110
|
+
containerProps,
|
|
111
|
+
...rest
|
|
112
|
+
}) => {
|
|
114
113
|
const { width } = useWindowDimensions();
|
|
115
114
|
const colors = useContext(ThemeContext).colors;
|
|
116
115
|
const inputRef = useRef();
|
|
@@ -203,7 +202,7 @@ export const Input = props => {
|
|
|
203
202
|
justifyContent="space-between"
|
|
204
203
|
{...(!rest.inputProps?.multiline && { height: 58 })}
|
|
205
204
|
overflow="hidden"
|
|
206
|
-
{...
|
|
205
|
+
{...containerProps}
|
|
207
206
|
>
|
|
208
207
|
{!!PrefixIcon && (
|
|
209
208
|
<View pl={2}>
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/* eslint-disable @bigbinary/neeto/no-dangling-constants */
|
|
2
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
3
|
+
import React, { useEffect } from "react";
|
|
4
|
+
import Animated, {
|
|
5
|
+
useSharedValue,
|
|
6
|
+
withTiming,
|
|
7
|
+
useAnimatedProps,
|
|
8
|
+
withRepeat,
|
|
9
|
+
Easing,
|
|
10
|
+
useAnimatedStyle,
|
|
11
|
+
interpolate,
|
|
12
|
+
} from "react-native-reanimated";
|
|
13
|
+
import Svg, { Circle } from "react-native-svg";
|
|
14
|
+
import PropTypes from "prop-types";
|
|
15
|
+
import { theme } from "@theme";
|
|
16
|
+
import { Container } from "@components";
|
|
17
|
+
|
|
18
|
+
const LOADER_WIDTH = {
|
|
19
|
+
s: 24,
|
|
20
|
+
m: 36,
|
|
21
|
+
l: 48,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const AnimatedCircle = Animated.createAnimatedComponent(Circle);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
** Component is used to show a loading indication to user.
|
|
28
|
+
*
|
|
29
|
+
* * <div class="screenshots">
|
|
30
|
+
* <img src="screenshots/loaders/loaders.png" />
|
|
31
|
+
* </div>
|
|
32
|
+
*
|
|
33
|
+
* ## Usage
|
|
34
|
+
* ```js
|
|
35
|
+
* import * as React from 'react';
|
|
36
|
+
* import { Container, Loader } from '@bigbinary/neetoui-rn';
|
|
37
|
+
* export default function Main() {
|
|
38
|
+
* return (
|
|
39
|
+
* <Container>
|
|
40
|
+
* <Loader size='l'/>
|
|
41
|
+
* </Container>
|
|
42
|
+
* )
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
export const Loader = ({ color, size }) => {
|
|
49
|
+
const progress = useSharedValue(0);
|
|
50
|
+
const width = LOADER_WIDTH[size];
|
|
51
|
+
const stroke_width = width * 0.15;
|
|
52
|
+
const radius = (width - stroke_width) / 2;
|
|
53
|
+
const circumference = 2 * Math.PI * radius;
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
progress.value = withRepeat(
|
|
57
|
+
withTiming(2, {
|
|
58
|
+
duration: 1500,
|
|
59
|
+
easing: Easing.linear,
|
|
60
|
+
}),
|
|
61
|
+
-1,
|
|
62
|
+
false
|
|
63
|
+
);
|
|
64
|
+
}, []);
|
|
65
|
+
|
|
66
|
+
const animatedProps = useAnimatedProps(() => ({
|
|
67
|
+
strokeDashoffset: -interpolate(
|
|
68
|
+
progress.value,
|
|
69
|
+
[0, 1, 2],
|
|
70
|
+
[0, circumference, circumference * 2]
|
|
71
|
+
),
|
|
72
|
+
}));
|
|
73
|
+
|
|
74
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
75
|
+
const scale = interpolate(progress.value, [0, 2], [0, 420]);
|
|
76
|
+
return {
|
|
77
|
+
width: width,
|
|
78
|
+
height: width,
|
|
79
|
+
alignItems: "center",
|
|
80
|
+
justifyContent: "center",
|
|
81
|
+
transform: [{ rotate: scale + "deg" }],
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<Container alignItems="center" justifyContent="center">
|
|
87
|
+
<Animated.View style={animatedStyles}>
|
|
88
|
+
<Svg width={width} height={width}>
|
|
89
|
+
<AnimatedCircle
|
|
90
|
+
cx={width / 2}
|
|
91
|
+
cy={width / 2}
|
|
92
|
+
r={radius}
|
|
93
|
+
strokeWidth={stroke_width}
|
|
94
|
+
stroke={color}
|
|
95
|
+
strokeDasharray={circumference}
|
|
96
|
+
animatedProps={animatedProps}
|
|
97
|
+
strokeLinecap="round"
|
|
98
|
+
/>
|
|
99
|
+
</Svg>
|
|
100
|
+
</Animated.View>
|
|
101
|
+
</Container>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
Loader.propTypes = {
|
|
106
|
+
/**
|
|
107
|
+
* Size variant to select the width of the loader.
|
|
108
|
+
*/
|
|
109
|
+
size: PropTypes.oneOf(["s", "m", "l"]),
|
|
110
|
+
/**
|
|
111
|
+
* Color variant to select the color from the available options.
|
|
112
|
+
*/
|
|
113
|
+
color: PropTypes.string,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
Loader.defaultProps = {
|
|
117
|
+
size: "s",
|
|
118
|
+
color: theme.colors.background.lightBlue400,
|
|
119
|
+
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
+
/* eslint-disable react-native/no-inline-styles */
|
|
1
2
|
import React, { useContext, useEffect, useState } from "react";
|
|
2
3
|
import PropTypes from "prop-types";
|
|
3
|
-
import {
|
|
4
|
-
ActivityIndicator,
|
|
5
|
-
Keyboard,
|
|
6
|
-
TouchableWithoutFeedback,
|
|
7
|
-
} from "react-native";
|
|
4
|
+
import { Keyboard, TouchableWithoutFeedback } from "react-native";
|
|
8
5
|
import Animated, {
|
|
9
6
|
interpolate,
|
|
10
7
|
useAnimatedStyle,
|
|
@@ -24,13 +21,7 @@ import {
|
|
|
24
21
|
position,
|
|
25
22
|
} from "styled-system";
|
|
26
23
|
|
|
27
|
-
import {
|
|
28
|
-
BottomSheet,
|
|
29
|
-
CheckBox,
|
|
30
|
-
Container,
|
|
31
|
-
Touchable,
|
|
32
|
-
Alert,
|
|
33
|
-
} from "@components";
|
|
24
|
+
import { BottomSheet, CheckBox, Container, Alert, Loader } from "@components";
|
|
34
25
|
|
|
35
26
|
const Typography = styled.Text`
|
|
36
27
|
${textStyle}
|
|
@@ -133,41 +124,6 @@ MultiSelectItem.propTypes = {
|
|
|
133
124
|
confirmationAlertObj: PropTypes.object,
|
|
134
125
|
};
|
|
135
126
|
|
|
136
|
-
const DropdownItem = ({
|
|
137
|
-
label,
|
|
138
|
-
onPress,
|
|
139
|
-
defaultDropdownItemHeight,
|
|
140
|
-
itemContainerStyle,
|
|
141
|
-
itemLabelStyle,
|
|
142
|
-
}) => {
|
|
143
|
-
return (
|
|
144
|
-
<Touchable bg="background.white" onPress={onPress}>
|
|
145
|
-
<Container
|
|
146
|
-
height={defaultDropdownItemHeight}
|
|
147
|
-
p={2}
|
|
148
|
-
{...itemContainerStyle}
|
|
149
|
-
>
|
|
150
|
-
<Typography
|
|
151
|
-
fontFamily="sf400"
|
|
152
|
-
fontSize="s"
|
|
153
|
-
color="font.grey"
|
|
154
|
-
{...itemLabelStyle}
|
|
155
|
-
>
|
|
156
|
-
{label}
|
|
157
|
-
</Typography>
|
|
158
|
-
</Container>
|
|
159
|
-
</Touchable>
|
|
160
|
-
);
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
DropdownItem.propTypes = {
|
|
164
|
-
label: PropTypes.string,
|
|
165
|
-
onPress: PropTypes.func,
|
|
166
|
-
defaultDropdownItemHeight: PropTypes.number,
|
|
167
|
-
itemContainerStyle: PropTypes.object,
|
|
168
|
-
itemLabelStyle: PropTypes.object,
|
|
169
|
-
};
|
|
170
|
-
|
|
171
127
|
const AnimatedLabel = Animated.createAnimatedComponent(Typography);
|
|
172
128
|
|
|
173
129
|
/**
|
|
@@ -459,10 +415,7 @@ export const MultiSelect = ({
|
|
|
459
415
|
)}
|
|
460
416
|
<Container mt={10}>
|
|
461
417
|
{isLoading ? (
|
|
462
|
-
<
|
|
463
|
-
size="small"
|
|
464
|
-
color={theme.colors.background.base}
|
|
465
|
-
/>
|
|
418
|
+
<Loader color={theme.colors.background.base} />
|
|
466
419
|
) : (
|
|
467
420
|
<Icon
|
|
468
421
|
name={`arrow-${showDropdown ? "up" : "down"}-s-line`}
|
|
@@ -564,10 +517,6 @@ MultiSelect.propTypes = {
|
|
|
564
517
|
* Show loader while creating a searched option not present in the options list
|
|
565
518
|
*/
|
|
566
519
|
showCreateOptionLoader: PropTypes.bool,
|
|
567
|
-
/**
|
|
568
|
-
* Custom label for creating searched option not present in the options list
|
|
569
|
-
*/
|
|
570
|
-
createOptionLabel: PropTypes.string,
|
|
571
520
|
/**
|
|
572
521
|
* Callback when create searched option is pressed
|
|
573
522
|
*/
|
|
@@ -592,10 +541,6 @@ MultiSelect.propTypes = {
|
|
|
592
541
|
* To customise dropdown item container styles.
|
|
593
542
|
*/
|
|
594
543
|
itemContainerStyle: PropTypes.object,
|
|
595
|
-
/**
|
|
596
|
-
* To customise dropdown item text styles.
|
|
597
|
-
*/
|
|
598
|
-
itemLabelStyle: PropTypes.object,
|
|
599
544
|
/**
|
|
600
545
|
* To customise item container styles for multi selected items.
|
|
601
546
|
*/
|
|
@@ -608,22 +553,6 @@ MultiSelect.propTypes = {
|
|
|
608
553
|
* To customise confirmation alert popup.
|
|
609
554
|
*/
|
|
610
555
|
confirmationAlertObj: PropTypes.object,
|
|
611
|
-
/**
|
|
612
|
-
* To customise search input container style.
|
|
613
|
-
*/
|
|
614
|
-
searchInputContainerStyle: PropTypes.object,
|
|
615
|
-
/**
|
|
616
|
-
* To customise search input style.
|
|
617
|
-
*/
|
|
618
|
-
searchInputStyle: PropTypes.object,
|
|
619
|
-
/**
|
|
620
|
-
* To customise empty options placeholder container style.
|
|
621
|
-
*/
|
|
622
|
-
emptyOptionsContainerStyle: PropTypes.object,
|
|
623
|
-
/**
|
|
624
|
-
* To customise empty options placeholder text style.
|
|
625
|
-
*/
|
|
626
|
-
emptyOptionsLabelStyle: PropTypes.object,
|
|
627
556
|
/**
|
|
628
557
|
* To customise empty options placeholder container style.
|
|
629
558
|
*/
|
|
@@ -694,7 +623,6 @@ MultiSelect.defaultProps = {
|
|
|
694
623
|
isSearchable: false,
|
|
695
624
|
showCreateOption: false,
|
|
696
625
|
showCreateOptionLoader: false,
|
|
697
|
-
createOptionLabel: null,
|
|
698
626
|
onPressCreateOption: () => {},
|
|
699
627
|
onDonePress: () => {},
|
|
700
628
|
maxItemSize: 5,
|
|
@@ -74,16 +74,14 @@ import { Container, Typography, Divider, ToggleSwitch } from "@components";
|
|
|
74
74
|
*
|
|
75
75
|
*/
|
|
76
76
|
|
|
77
|
-
export const NotificationPreferenceList =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
} = props;
|
|
86
|
-
|
|
77
|
+
export const NotificationPreferenceList = ({
|
|
78
|
+
data,
|
|
79
|
+
itemWrapperProps,
|
|
80
|
+
itemContainerProps,
|
|
81
|
+
labelContainerProps,
|
|
82
|
+
labelProps,
|
|
83
|
+
...rest
|
|
84
|
+
}) => {
|
|
87
85
|
return (
|
|
88
86
|
<Container bg="background.secondary" borderRadius={8} {...rest}>
|
|
89
87
|
{data?.map((item, index) => {
|
|
@@ -27,17 +27,16 @@ import { ThemeContext } from "styled-components/native";
|
|
|
27
27
|
*
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
export const OrganizationItem =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
} = props;
|
|
30
|
+
export const OrganizationItem = ({
|
|
31
|
+
label,
|
|
32
|
+
labelContainerProps,
|
|
33
|
+
iconContainerProps,
|
|
34
|
+
iconProps,
|
|
35
|
+
labelProps,
|
|
36
|
+
name,
|
|
37
|
+
nameProps,
|
|
38
|
+
...rest
|
|
39
|
+
}) => {
|
|
41
40
|
const theme = useContext(ThemeContext);
|
|
42
41
|
return (
|
|
43
42
|
<Container
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable react-native/no-inline-styles */
|
|
1
2
|
import React, { useEffect, useRef, useState } from "react";
|
|
2
3
|
import { Animated, TouchableWithoutFeedback } from "react-native";
|
|
3
4
|
import {
|
|
@@ -47,15 +48,15 @@ const TextInput = styled.TextInput`
|
|
|
47
48
|
* ```
|
|
48
49
|
*/
|
|
49
50
|
|
|
50
|
-
export const SearchBar =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
export const SearchBar = ({
|
|
52
|
+
placeholder = "Search",
|
|
53
|
+
onChangeText = () => {},
|
|
54
|
+
onCancel = () => {},
|
|
55
|
+
debounceDelay = 1000,
|
|
56
|
+
showCancelButton = true,
|
|
57
|
+
containerProps,
|
|
58
|
+
searchbarProps,
|
|
59
|
+
}) => {
|
|
59
60
|
const inputRef = useRef();
|
|
60
61
|
const [searchText, setSearchText] = useState("");
|
|
61
62
|
const debouncedSearchTextValue = useDebounce(
|
|
@@ -113,7 +114,7 @@ export const SearchBar = props => {
|
|
|
113
114
|
borderRadius={8}
|
|
114
115
|
flexDirection="row"
|
|
115
116
|
alignItems="center"
|
|
116
|
-
{...
|
|
117
|
+
{...containerProps}
|
|
117
118
|
>
|
|
118
119
|
<Container px={10}>
|
|
119
120
|
<Icon
|
|
@@ -139,7 +140,7 @@ export const SearchBar = props => {
|
|
|
139
140
|
color="font.primary"
|
|
140
141
|
autoCapitalize="none"
|
|
141
142
|
returnKeyType="search"
|
|
142
|
-
{...
|
|
143
|
+
{...searchbarProps}
|
|
143
144
|
/>
|
|
144
145
|
</Container>
|
|
145
146
|
</TouchableWithoutFeedback>
|
|
@@ -190,4 +191,5 @@ SearchBar.propTypes = {
|
|
|
190
191
|
* option to hide the cancel button. Default is true
|
|
191
192
|
*/
|
|
192
193
|
showCancelButton: PropTypes.bool,
|
|
194
|
+
containerProps: PropTypes.object,
|
|
193
195
|
};
|
|
@@ -18,7 +18,6 @@ const defaultShadowStyle = {
|
|
|
18
18
|
},
|
|
19
19
|
shadowOpacity: 0.23,
|
|
20
20
|
shadowRadius: 2.62,
|
|
21
|
-
|
|
22
21
|
elevation: 4,
|
|
23
22
|
};
|
|
24
23
|
|
|
@@ -87,7 +86,6 @@ export const SegmentedTopBar = ({
|
|
|
87
86
|
}) => {
|
|
88
87
|
const translateValue = (width - 4) / routes?.length;
|
|
89
88
|
const tabTranslateValue = useSharedValue(0);
|
|
90
|
-
|
|
91
89
|
useEffect(() => {
|
|
92
90
|
tabTranslateValue.value = withSpring(
|
|
93
91
|
index * (translateValue * 1),
|
|
@@ -113,7 +111,7 @@ export const SegmentedTopBar = ({
|
|
|
113
111
|
defaultShadowStyle,
|
|
114
112
|
StyleSheet.absoluteFill,
|
|
115
113
|
{
|
|
116
|
-
width: width / routes?.length,
|
|
114
|
+
width: (width - 4) / routes?.length,
|
|
117
115
|
},
|
|
118
116
|
tabTranslateAnimatedStyles,
|
|
119
117
|
]}
|
|
@@ -184,14 +182,9 @@ const styles = StyleSheet.create({
|
|
|
184
182
|
|
|
185
183
|
SegmentedTopBar.propTypes = {
|
|
186
184
|
/**
|
|
187
|
-
*
|
|
185
|
+
* Navigation routes and additional data.
|
|
188
186
|
*/
|
|
189
|
-
|
|
190
|
-
PropTypes.shape({
|
|
191
|
-
name: PropTypes.string,
|
|
192
|
-
Component: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
|
|
193
|
-
})
|
|
194
|
-
).isRequired,
|
|
187
|
+
state: PropTypes.object,
|
|
195
188
|
/**
|
|
196
189
|
* To change the inactive segment container style.
|
|
197
190
|
*/
|
|
@@ -209,6 +202,8 @@ SegmentedTopBar.propTypes = {
|
|
|
209
202
|
*/
|
|
210
203
|
activeTextStyle: PropTypes.object,
|
|
211
204
|
height: PropTypes.number,
|
|
205
|
+
navigation: PropTypes.object,
|
|
206
|
+
descriptors: PropTypes.object,
|
|
212
207
|
};
|
|
213
208
|
|
|
214
209
|
SegmentedTopBar.defaultProps = {
|
package/src/components/Select.js
CHANGED
|
@@ -8,15 +8,18 @@ import Animated, {
|
|
|
8
8
|
Easing,
|
|
9
9
|
runOnJS,
|
|
10
10
|
} from "react-native-reanimated";
|
|
11
|
-
import {
|
|
12
|
-
ActivityIndicator,
|
|
13
|
-
TouchableWithoutFeedback,
|
|
14
|
-
Keyboard,
|
|
15
|
-
} from "react-native";
|
|
11
|
+
import { TouchableWithoutFeedback, Keyboard } from "react-native";
|
|
16
12
|
import { ThemeContext } from "styled-components/native";
|
|
17
13
|
import { ScrollView } from "react-native-gesture-handler";
|
|
18
14
|
|
|
19
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
Card,
|
|
17
|
+
Container,
|
|
18
|
+
Input,
|
|
19
|
+
Touchable,
|
|
20
|
+
Typography,
|
|
21
|
+
Loader,
|
|
22
|
+
} from "@components";
|
|
20
23
|
|
|
21
24
|
const DropdownItem = ({
|
|
22
25
|
label,
|
|
@@ -241,10 +244,7 @@ export const Select = ({
|
|
|
241
244
|
{selectedOptionLabel || placeholder}
|
|
242
245
|
</Typography>
|
|
243
246
|
{isLoading ? (
|
|
244
|
-
<
|
|
245
|
-
size="small"
|
|
246
|
-
color={theme.colors.background.base}
|
|
247
|
-
/>
|
|
247
|
+
<Loader color={theme.colors.background.base} />
|
|
248
248
|
) : (
|
|
249
249
|
<Icon
|
|
250
250
|
name={`arrow-${showDropdown ? "up" : "down"}-s-line`}
|
|
@@ -305,10 +305,7 @@ export const Select = ({
|
|
|
305
305
|
{...createSearchedOptionContainerStyle}
|
|
306
306
|
>
|
|
307
307
|
{showCreateOptionLoader ? (
|
|
308
|
-
<
|
|
309
|
-
size="small"
|
|
310
|
-
color={theme.colors.background.base}
|
|
311
|
-
/>
|
|
308
|
+
<Loader size="s" color={theme.colors.background.base} />
|
|
312
309
|
) : (
|
|
313
310
|
<Typography
|
|
314
311
|
fontFamily="sf400"
|