mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-08 21:18:14 -05:00
* chore(INJI-195): upgrade react native version and dependencies * chore(INJI-195): upgrade expo version and dependencies * chore(INJI-195): modify associated files on version upgrade * chore(INJI-295): fixed react native flipper and patch packages * chore(INJI-195): fix for expo prebuild * chore(INJI-195): expo linked to android/ios projects * chore(INJI-195): update metro config * chore(INJI-195): fix ios build with mmkv storage patch * chore(INJI-195): gradle version modified * chore(INJI-195): fixed rn version 0.71.8 due to mmkv library issue * chore(INJI-195): removed files in android * chore(INJI-195): fix 0.71.8 for iOS project through pods with expo linking * chore(INJI-195): fix for custom fonts added through pods due to rn linkage * chore(INJI-195): fix for removing assets.car generated from pods * Modify Node version in pipeline (#806) * chore(INJI-195): fix for android splash screen not shown up * chore(INJI-195): upgraded to node 18 in pipeline * chore(INJI-195): add the pod install twice to remove duplicates via script workaround (#807) Signed-off-by: dhivya0413 <120356578+dhivya0413@users.noreply.github.com> * INJI-195 Set the signing team for iOS (#810) * chore(INJI-195): add the pod install twice to remove duplicates via script workaround * chore(INJI-195): set the signing team for ios build --------- Signed-off-by: dhivya0413 <120356578+dhivya0413@users.noreply.github.com> * Modify github runner to self hosted runner (#811) * chore(INJI-195): add the pod install twice to remove duplicates via script workaround * chore(INJI-195): set the signing team for ios build * chore(INJI-195): set the self hosted runner for ios build --------- Signed-off-by: dhivya0413 <120356578+dhivya0413@users.noreply.github.com> * Modify self hosted runner to github hosted runner (#813) * chore(INJI-195): add the pod install twice to remove duplicates via script workaround * chore(INJI-195): set the signing team for ios build * chore(INJI-195): set the self hosted runner for ios build * chore(INJI-195): modify the self hosted to github hosted runner --------- Signed-off-by: dhivya0413 <120356578+dhivya0413@users.noreply.github.com> * chore(INJI-195): modify the self hosted to github hosted runner * chore(INJI-195): set the code signing identity for ios build * chore(INJI-195): assigned app icon files to asset --------- Signed-off-by: dhivya0413 <120356578+dhivya0413@users.noreply.github.com> Signed-off-by: Swati Goel <meet2swati@gmail.com> Co-authored-by: Swati Goel <meet2swati@gmail.com>
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import React, {useEffect, useState} from 'react';
|
|
import {Dimensions, Pressable} from 'react-native';
|
|
import {Icon, ListItem, Overlay} from 'react-native-elements';
|
|
import {Column} from './Layout';
|
|
import {Text} from './Text';
|
|
|
|
interface Picker extends React.VFC<PickerProps<unknown>> {
|
|
<T>(props: PickerProps<T>): ReturnType<React.FC>;
|
|
}
|
|
|
|
export const Picker: Picker = (props: PickerProps<unknown>) => {
|
|
const [isContentVisible, setIsContentVisible] = useState(false);
|
|
const [selectedIndex, setSelectedIndex] = useState(-1);
|
|
|
|
useEffect(() => {
|
|
setSelectedIndex(
|
|
props.items.findIndex(({value}) => value === props.selectedValue),
|
|
);
|
|
}, [props.selectedValue]);
|
|
|
|
const toggleContent = () => setIsContentVisible(!isContentVisible);
|
|
|
|
const selectItem = (index: number) => {
|
|
setSelectedIndex(index);
|
|
props.onValueChange(props.items[index].value, index);
|
|
toggleContent();
|
|
};
|
|
|
|
return (
|
|
<React.Fragment>
|
|
<Pressable onPress={toggleContent}>{props.triggerComponent}</Pressable>
|
|
<Overlay
|
|
isVisible={isContentVisible}
|
|
onBackdropPress={toggleContent}
|
|
overlayStyle={{padding: 1}}>
|
|
<Column
|
|
testID={props.testID}
|
|
width={Dimensions.get('window').width * 0.8}>
|
|
{props.items.map((item, index) => (
|
|
<ListItem
|
|
testID={item.value}
|
|
topDivider={index !== 0}
|
|
onPress={() => selectItem(index)}
|
|
key={index}>
|
|
<ListItem.Content>
|
|
<ListItem.Title>
|
|
<Text>{item.label}</Text>
|
|
</ListItem.Title>
|
|
</ListItem.Content>
|
|
{selectedIndex === index && <Icon name="check" />}
|
|
</ListItem>
|
|
))}
|
|
</Column>
|
|
</Overlay>
|
|
</React.Fragment>
|
|
);
|
|
};
|
|
|
|
interface PickerProps<T> {
|
|
testID?: string;
|
|
items: PickerItem<T>[];
|
|
selectedValue: T;
|
|
triggerComponent: React.ReactElement;
|
|
onValueChange: (value: T, index: number) => void;
|
|
}
|
|
|
|
interface PickerItem<T> {
|
|
label: string;
|
|
value: T;
|
|
}
|