example/src/components/SettingsInputItem.tsx (47 lines of code) (raw):
import * as React from 'react';
import { useEffect, useState } from 'react';
import { StyleSheet } from 'react-native';
import { TextInput } from 'react-native-paper';
import { useDebounce } from '../hooks';
import SettingsItem from './SettingsItem';
type Props = {
testID?: string;
label: string;
onChangeText: (text: string) => void;
value: string;
multiline?: boolean;
};
const SettingsInputItem = ({
label,
onChangeText,
value,
multiline,
}: Props) => {
const [internalValue, setInternalValue] = useState(value);
const finalValue = useDebounce(internalValue, 1000);
useEffect(() => {
if (finalValue.trim().length > 0) {
onChangeText(finalValue.trim());
}
}, [finalValue, onChangeText]);
return (
<SettingsItem label={label}>
<TextInput
testID={`${label}Input`}
mode="outlined"
textAlign="center"
value={internalValue}
onChangeText={setInternalValue}
style={styles.input}
dense
multiline={multiline}
/>
</SettingsItem>
);
};
const styles = StyleSheet.create({
input: {
flex: 1,
},
});
export default SettingsInputItem;