import React, { useState } from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { CustomIcon, TIconsName } from '../../CustomIcon'; import i18n from '../../../i18n'; import { isIOS } from '../../../lib/methods/helpers'; import { useTheme } from '../../../theme'; import sharedStyles from '../../../views/Styles'; import Button from '../../Button'; import { FormTextInput } from '../../TextInput/FormTextInput'; import { useActionSheet } from '../Provider'; const styles = StyleSheet.create({ subtitleText: { fontSize: 14, ...sharedStyles.textRegular, marginBottom: 10 }, buttonSeparator: { marginRight: 8 }, footerButtonsContainer: { flexDirection: 'row', paddingTop: 16 }, titleContainerText: { fontSize: 16, ...sharedStyles.textSemibold }, titleContainer: { paddingRight: 80, marginBottom: 16, flexDirection: 'row', alignItems: 'center' } }); const FooterButtons = ({ cancelAction = () => {}, confirmAction = () => {}, cancelTitle = '', confirmTitle = '', disabled = false, cancelBackgroundColor = '', confirmBackgroundColor = '' }): React.ReactElement => { const { colors } = useTheme(); return ( <View style={styles.footerButtonsContainer}> <Button style={[styles.buttonSeparator, { flex: 1, backgroundColor: cancelBackgroundColor || colors.cancelButton }]} color={colors.backdropColor} title={cancelTitle} onPress={cancelAction} /> <Button style={{ flex: 1, backgroundColor: confirmBackgroundColor || colors.dangerColor }} title={confirmTitle} onPress={confirmAction} disabled={disabled} /> </View> ); }; const ActionSheetContentWithInputAndSubmit = ({ onSubmit = () => {}, onCancel, title = '', description = '', testID = '', secureTextEntry = true, placeholder = '', confirmTitle, iconName, iconColor, customText, confirmBackgroundColor, showInput = true }: { onSubmit: (inputValue: string) => void; onCancel?: () => void; title: string; description: string; testID: string; secureTextEntry?: boolean; placeholder: string; confirmTitle?: string; iconName?: TIconsName; iconColor?: string; customText?: React.ReactElement; confirmBackgroundColor?: string; showInput?: boolean; }): React.ReactElement => { const { colors } = useTheme(); const [inputValue, setInputValue] = useState(''); const { hideActionSheet } = useActionSheet(); return ( <View style={sharedStyles.containerScrollView} testID='action-sheet-content-with-input-and-submit'> <> <View style={styles.titleContainer}> {iconName ? <CustomIcon name={iconName} size={32} color={iconColor || colors.dangerColor} /> : null} <Text style={[styles.titleContainerText, { color: colors.passcodePrimary, paddingLeft: iconName ? 16 : 0 }]}> {title} </Text> </View> <Text style={[styles.subtitleText, { color: colors.titleText }]}>{description}</Text> {customText} </> {showInput ? ( <FormTextInput value={inputValue} placeholder={placeholder} onChangeText={value => setInputValue(value)} onSubmitEditing={() => { // fix android animation setTimeout(() => { hideActionSheet(); }, 100); if (inputValue) onSubmit(inputValue); }} testID={testID} secureTextEntry={secureTextEntry} inputStyle={{ borderWidth: 2 }} bottomSheet={isIOS} /> ) : null} <FooterButtons confirmBackgroundColor={confirmBackgroundColor || colors.actionTintColor} cancelAction={onCancel || hideActionSheet} confirmAction={() => onSubmit(inputValue)} cancelTitle={i18n.t('Cancel')} confirmTitle={confirmTitle || i18n.t('Save')} disabled={!showInput ? false : !inputValue} /> </View> ); }; export default ActionSheetContentWithInputAndSubmit;