import { RoleList } from '@/services/manajemen/role-service' import { UserCreate, UserUpdate } from '@/services/manajemen/user-service' import { UnitKerjaList } from '@/services/referensi/unitKerja-service' import { useFormik } from 'formik' import { Button } from 'primereact/button' import { Dialog } from 'primereact/dialog' import { Dropdown } from 'primereact/dropdown' import { InputText } from 'primereact/inputtext' import { Password } from 'primereact/password' import { useEffect, useState } from 'react' import * as Yup from 'yup' export default function FormUser({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { const [optionUnitKerja, setOptionUnitKerja] = useState([]) const [optionRole, setOptionRole] = useState([]) const [showUnitKerja, setShowUnitKerja] = useState(true) const SignupSchema = Yup.object().shape({ name: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Nama is required'), username: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Username is required'), email: Yup.string().email('Invalid email').required('Email is Required'), password: Yup.string().when('old_password', { is: true, then: Yup.string() .required('Password is required') .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#%&])(?=.{8,})/, 'Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and One Special Case Character' ), }), password_retype: Yup.string().when('old_password', { is: true, then: Yup.string() .oneOf([Yup.ref('password'), null], 'Passwords must match') .required('Password confirm is required'), }), // unit: Yup.string().required('Unit kerja is required'), role: Yup.string().required('Role is required'), }) const formik = useFormik({ initialValues: { user_id: dataEdit.user_id || '', name: dataEdit.nama || '', username: dataEdit.username || '', email: dataEdit.email || '', password: '', password_retype: '', unit: dataEdit.unit || '', role: dataEdit.user_role || '', }, validationSchema: SignupSchema, onSubmit: (data) => { if (data.user_id) { UserUpdate(data).then((res) => { if (res.status === 'success') { refresh(Math.random) formik.resetForm() setDataEdit([]) setDialogForm(false) toast.current.show({ severity: 'success', detail: res.message, closable: false, }) } else { setDialogForm(false) toast.current.show({ severity: 'error', detail: res.message, closable: false, }) } }) } else { UserCreate(data).then((res) => { if (res.status === 'success') { refresh(Math.random) formik.resetForm() setDataEdit([]) setDialogForm(false) toast.current.show({ severity: 'success', detail: res.message, closable: false, }) } else { setDialogForm(false) toast.current.show({ severity: 'error', detail: res.message, closable: false, }) } }) } }, }) useEffect(() => { UnitKerjaList({ draw: 0 }).then((res) => setOptionUnitKerja(res.data)) RoleList().then((res) => setOptionRole(res.data)) }, []) const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) const errorFieldMessage = (field) => { return ( isFieldValid(field) && ( {formik.errors[field]} ) ) } const dialogFooter = (
Suggestions