import { Platform, StyleSheet, TextInput, TextInputProps, View, } from 'react-native' import { TouchableRipple, useTheme } from 'react-native-paper' import Color from 'color' import { inputTypes, PossibleClockTypes, PossibleInputTypes, useInputColors, } from './timeUtils' import { forwardRef, useEffect, useState } from 'react' import { sharedStyles } from '../shared/styles' interface TimeInputProps extends Omit< Omit, 'onFocus'>, 'onPress' > { value: number clockType: PossibleClockTypes onPress?: (type: PossibleClockTypes) => any pressed: boolean onChanged: (n: number) => any inputType: PossibleInputTypes inputFontSize?: number } function TimeInput( { value, clockType, pressed, onPress, onChanged, inputType, inputFontSize = 57, ...rest }: TimeInputProps, ref: any ) { const theme = useTheme() const [inputFocused, setInputFocused] = useState(false) const [controlledValue, setControlledValue] = useState(`${value}`) const highlighted = inputType === inputTypes.picker ? pressed : inputFocused const { color, backgroundColor } = useInputColors(highlighted) useEffect(() => { setControlledValue(`${value}`) }, [value]) const onInnerChange = (number: number) => { setControlledValue(`${number}`) if (number >= 0) { onChanged(Number(number)) } } let formattedValue = controlledValue if (!inputFocused) { formattedValue = controlledValue.length === 1 ? `0${controlledValue}` : `${controlledValue}` } return ( setInputFocused(true)} onBlur={() => setInputFocused(false)} keyboardAppearance={theme.dark ? 'dark' : 'default'} keyboardType="number-pad" onChangeText={(e) => onInnerChange(Number(e))} {...rest} /> {onPress && inputType === inputTypes.picker ? ( onPress(clockType)} borderless={true} > ) : null} ) } const styles = StyleSheet.create({ root: { alignItems: 'center', justifyContent: 'center', width: 96, }, input: { width: 96, }, }) export default forwardRef(TimeInput)