import { Ionicons } from '@expo/vector-icons'; import { useFormik } from 'formik'; import i18n from 'i18n-js'; import { Box, Button, Checkbox, FormControl, Icon, Input, KeyboardAvoidingView, Stack } from 'native-base'; import PropTypes from 'prop-types'; import React, { useRef, useState } from 'react'; import { Platform } from 'react-native'; import * as Yup from 'yup'; import { FormButtons } from '../../components/FormButtons'; import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; import { usePermission } from '../../hooks/UsePermission'; import UserRoles from './UserRoles'; const validations = { userName: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), email: Yup.string() .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.') .required('AbpAccount::ThisFieldIsRequired.'), }; let roleNames = []; function onChangeRoles(roles) { roleNames = roles; } function CreateUpdateUserForm({ editingUser = {}, submit, remove }) { const [selectedTab, setSelectedTab] = useState(0); const [showPassword, setShowPassword] = useState(false); const usernameRef = useRef(); const nameRef = useRef(); const surnameRef = useRef(); const emailRef = useRef(); const phoneNumberRef = useRef(); const passwordRef = useRef(); const hasRemovePermission = usePermission('AbpIdentity.Users.Delete'); const onSubmit = (values) => { submit({ ...editingUser, ...values, roleNames, }); }; const passwordValidation = Yup.lazy(() => { if (editingUser.id) { return Yup.string(); } return Yup.string().required('AbpAccount::ThisFieldIsRequired.'); }); const formik = useFormik({ enableReinitialize: true, validationSchema: Yup.object().shape({ ...validations, password: passwordValidation, }), initialValues: { isActive: true, lockoutEnabled: false, ...editingUser, }, onSubmit, }); return ( <> {selectedTab === 0 ? ( <> {i18n.t('AbpIdentity::UserName')} nameRef.current.focus()} returnKeyType="next" onChangeText={formik.handleChange('userName')} onBlur={formik.handleBlur('userName')} value={formik.values.userName} autoCapitalize="none" /> {formik.errors.userName} {i18n.t('AbpIdentity::DisplayName:Name')} surnameRef.current.focus()} returnKeyType="next" onChangeText={formik.handleChange('name')} onBlur={formik.handleBlur('name')} value={formik.values.name} /> {i18n.t('AbpIdentity::DisplayName:Surname')} emailRef.current.focus()} returnKeyType="next" onChangeText={formik.handleChange('surname')} onBlur={formik.handleBlur('surname')} value={formik.values.surname} /> {i18n.t('AbpIdentity::EmailAddress')} phoneNumberRef.current.focus()} returnKeyType="next" onChangeText={formik.handleChange('email')} onBlur={formik.handleBlur('email')} value={formik.values.email} autoCapitalize="none" /> {formik.errors.email} {i18n.t('AbpIdentity::PhoneNumber')} passwordRef?.current?.focus()} returnKeyType={!editingUser.id ? 'next' : 'default'} onChangeText={formik.handleChange('phoneNumber')} onBlur={formik.handleBlur('phoneNumber')} value={formik.values.phoneNumber} /> {!editingUser.id ? ( {i18n.t('AbpIdentity::Password')} setShowPassword(!showPassword)} /> } /> {formik.errors.password} ) : null} formik.setFieldValue('isActive', !formik.values.isActive) } > {i18n.t('AbpIdentity::DisplayName:IsActive')} formik.setFieldValue( 'lockoutEnabled', !formik.values.lockoutEnabled ) } > {i18n.t('AbpIdentity::DisplayName:LockoutEnabled')} ) : ( )} ); } CreateUpdateUserForm.propTypes = { editingUser: PropTypes.object, submit: PropTypes.func.isRequired, remove: PropTypes.func.isRequired, }; export default CreateUpdateUserForm;