Skip to content

Commit 7b939c0

Browse files
adids1221M-i-k-e-l
andauthored
Picker support showLoader, customLoaderElement props (#3234)
* Picker support showLoader, customLoaderElement props * removed loader exmaple from picker screen * customLoaderElement type change --------- Co-authored-by: M-i-k-e-l <[email protected]>
1 parent 14932c7 commit 7b939c0

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

src/components/picker/PickerItemsList.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import _ from 'lodash';
22
import React, {useCallback, useContext, useState, useMemo} from 'react';
3-
import {StyleSheet, FlatList, TextInput, ListRenderItemInfo} from 'react-native';
3+
import {StyleSheet, FlatList, TextInput, ListRenderItemInfo, ActivityIndicator} from 'react-native';
44
import {Typography, Colors} from '../../style';
55
import Assets from '../../assets';
66
import Modal from '../modal';
@@ -32,7 +32,9 @@ const PickerItemsList = (props: PickerItemsListProps) => {
3232
useSafeArea,
3333
useDialog,
3434
mode,
35-
testID
35+
testID,
36+
showLoader,
37+
customLoaderElement
3638
} = props;
3739
const context = useContext(PickerContext);
3840

@@ -156,6 +158,16 @@ const PickerItemsList = (props: PickerItemsListProps) => {
156158
);
157159
};
158160

161+
const renderLoader = () => {
162+
return (
163+
customLoaderElement || (
164+
<View flex centerV useSafeArea>
165+
<ActivityIndicator/>
166+
</View>
167+
)
168+
);
169+
};
170+
159171
const renderContent = () => {
160172
return useWheelPicker ? (
161173
renderWheel()
@@ -170,7 +182,7 @@ const PickerItemsList = (props: PickerItemsListProps) => {
170182
return (
171183
<View style={wrapperContainerStyle} useSafeArea={useSafeArea}>
172184
{renderPickerHeader()}
173-
{renderContent()}
185+
{showLoader ? renderLoader() : renderContent()}
174186
</View>
175187
);
176188
};

src/components/picker/api/picker.api.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@
9292
},
9393
{"name": "pickerModalProps", "type": "ModalProps", "description": "Pass props to the picker modal"},
9494
{"name": "useSafeArea", "type": "boolean", "description": "Add safe area in the Picker modal view"},
95-
{"name": "items", "type": "{label: string, value: string | number}[]", "description": "Data source for Picker"}
95+
{"name": "items", "type": "{label: string, value: string | number}[]", "description": "Data source for Picker"},
96+
{"name": "showLoader", "type": "boolean", "description": "Show a loader (while items are loading/fetching)"},
97+
{"name": "customLoaderElement", "type": "ReactNode", "description": "Custom loader element"}
9698
],
9799
"snippet": [
98100
"<Picker",

src/components/picker/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
7676
accessibilityLabel,
7777
accessibilityHint,
7878
items: propItems,
79+
showLoader,
80+
customLoaderElement,
7981
...others
8082
} = themeProps;
8183
const {preset, placeholder, style, trailingAccessory, label: propsLabel} = others;
@@ -242,6 +244,8 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
242244
renderHeader={renderHeader}
243245
listProps={listProps}
244246
useSafeArea={useSafeArea}
247+
showLoader={showLoader}
248+
customLoaderElement={customLoaderElement}
245249
>
246250
{filteredChildren}
247251
</PickerItemsList>
@@ -265,7 +269,8 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
265269
filteredChildren,
266270
useSafeArea,
267271
useWheelPicker,
268-
items
272+
items,
273+
showLoader
269274
]);
270275

271276
return (

src/components/picker/types.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,14 @@ export type PickerBaseProps = Omit<TextFieldProps, 'value' | 'onChange'> &
225225
* Component test id
226226
*/
227227
testID?: string;
228+
/**
229+
* Show a loader (while items are loading/fetching)
230+
*/
231+
showLoader?: boolean;
232+
/**
233+
* Custom loader element
234+
*/
235+
customLoaderElement?: JSX.Element;
228236
};
229237

230238
export type PickerPropsWithSingle = PickerBaseProps & {
@@ -304,6 +312,8 @@ export type PickerItemsListProps = Pick<
304312
| 'listProps'
305313
| 'renderHeader'
306314
| 'useSafeArea'
315+
| 'showLoader'
316+
| 'customLoaderElement'
307317
| 'showSearch'
308318
| 'searchStyle'
309319
| 'searchPlaceholder'

0 commit comments

Comments
 (0)