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;