import { useFormik } from "formik"; import * as Yup from "yup"; import WithAuth from "../../../components/WithAuth"; import Layout from "../../../components/Layout"; import AppBar from "../../../components/AppBar"; import { Select } from "../../../components/Fields"; import { useEffect, useState } from "react"; import apiOdoo from "../../../helpers/apiOdoo"; import { useAuth } from "../../../helpers/auth"; import { toast } from "react-hot-toast"; import { useRouter } from "next/router"; const initialValues = { type: '', name: '', email: '', mobile: '', street: '', city: '', district: '', subDistrict: '', zip: '', }; const validationSchema = Yup.object().shape({ type: Yup.string().required('Harus di-pilih'), name: Yup.string().min(3, 'Minimal 3 karakter').required('Harus di-isi'), email: Yup.string().email('Format harus seperti johndoe@example.com').required('Harus di-isi'), mobile: Yup.string().required('Harus di-isi'), street: Yup.string().required('Harus di-isi'), zip: Yup.string().required('Harus di-isi'), city: Yup.number().required('Harus di-pilih'), }); const types = [ { value: 'contact', label: 'Contact Address' }, { value: 'invoice', label: 'Invoice Address' }, { value: 'delivery', label: 'Delivery Address' }, { value: 'other', label: 'Other Address' }, ]; export default function CreateAddress() { const [auth] = useAuth(); const router = useRouter(); const onSubmit = async (values) => { const parameters = { ...values, city_id: values.city, district_id: values.district, sub_district_id: values.subDistrict, parent_id: auth.partner_id } const address = await apiOdoo('POST', '/api/v1/partner/address', parameters); if (address?.id) { toast.success('Berhasil menambahkan alamat'); router.back(); } }; const form = useFormik({ initialValues, validationSchema, onSubmit }); const { values, errors, touched, handleChange, handleSubmit, setFieldValue, } = form; const [ cities, setCities ] = useState([]); const [ districts, setDistricts ] = useState([]); const [ subDistricts, setSubDistricts ] = useState([]); useEffect(() => { const loadCities = async () => { let dataCities = await apiOdoo('GET', '/api/v1/city'); dataCities = dataCities.map((city) => ({ value: city.id, label: city.name })); setCities(dataCities); }; loadCities(); }, []); useEffect(() => { setFieldValue('district', ''); if (values.city) { const loadDistricts = async () => { let dataDistricts = await apiOdoo('GET', `/api/v1/district?city_id=${values.city}`); dataDistricts = dataDistricts.map((district) => ({ value: district.id, label: district.name })); setDistricts(dataDistricts); }; loadDistricts(); } }, [ values.city, setFieldValue ]); useEffect(() => { setFieldValue('subDistrict', ''); if (values.district) { const loadSubDistricts = async () => { let dataSubDistricts = await apiOdoo('GET', `/api/v1/sub_district?district_id=${values.district}`); dataSubDistricts = dataSubDistricts.map((district) => ({ value: district.id, label: district.name })); setSubDistricts(dataSubDistricts); }; loadSubDistricts(); } }, [ values.district, setFieldValue ]); return (
{ errors.name && touched.name && (
{ errors.name }
) } { errors.email && touched.email && (
{ errors.email }
) } { errors.mobile && touched.mobile && (
{ errors.mobile }
) } { errors.street && touched.street && (
{ errors.street }
) } { errors.zip && touched.zip && (
{ errors.zip }
) }