// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {memo, type RefObject, useCallback} from 'react'; import {useIntl} from 'react-intl'; import {Platform, type TextInputProps, View} from 'react-native'; import FloatingTextInput, {type FloatingTextInputRef} from '@components/floating_text_input_label'; import {useTheme} from '@context/theme'; import {useIsTablet} from '@hooks/device'; import {changeOpacity, getKeyboardAppearanceFromTheme, makeStyleSheetFromTheme} from '@utils/theme'; export type FieldProps = TextInputProps & { isDisabled?: boolean; fieldKey: string; label: string; maxLength?: number; onTextChange: (fieldKey: string, value: string) => void; isOptional?: boolean; testID: string; value: string; fieldRef: RefObject; onFocusNextField: (fieldKey: string) => void; }; const getStyleSheet = makeStyleSheetFromTheme((theme) => { return { viewContainer: { marginVertical: 8, alignItems: 'center', width: '100%', }, disabledStyle: { backgroundColor: changeOpacity(theme.centerChannelColor, 0.04), }, }; }); const Field = ({ autoCapitalize = 'none', autoCorrect = false, fieldKey, isDisabled = false, isOptional = false, keyboardType = 'default', label, maxLength, onTextChange, testID, value, fieldRef, onFocusNextField, ...props }: FieldProps) => { const theme = useTheme(); const intl = useIntl(); const isTablet = useIsTablet(); const onChangeText = useCallback((text: string) => onTextChange(fieldKey, text), [fieldKey, onTextChange]); const onSubmitEditing = useCallback(() => { onFocusNextField(fieldKey); }, [fieldKey, onFocusNextField]); const style = getStyleSheet(theme); const keyboard = (Platform.OS === 'android' && keyboardType === 'url') ? 'default' : keyboardType; const optionalText = intl.formatMessage({id: 'channel_modal.optional', defaultMessage: '(optional)'}); const formattedLabel = isOptional ? `${label} ${optionalText}` : label; const textInputStyle = isDisabled ? style.disabledStyle : undefined; const subContainer = [style.viewContainer, {paddingHorizontal: isTablet ? 42 : 20}]; const fieldInputTestId = isDisabled ? `${testID}.input.disabled` : `${testID}.input`; return ( ); }; export default memo(Field);