import AppBar from "../../../components/AppBar"; import Layout from "../../../components/Layout"; import WithAuth from "../../../components/WithAuth"; import apiOdoo from "../../../helpers/apiOdoo"; import ReactSelect from "react-select"; import { useEffect, useState } from "react"; import { useAuth } from "../../../helpers/auth"; import useFormValidation from "../../../helpers/formValidation"; import { toast } from "react-hot-toast"; import { useRouter } from "next/router"; const initialFormValue = { type: null, name: '', email: '', mobile: '', street: '', city: null, district: null, subDistrict: null, zip: '' } const validationScheme = { type: ['label:Label Alamat', 'required'], name: ['label:Nama', 'required'], email: ['label:Email', 'required', 'email'], mobile: ['label:No. Handphone', 'required', 'maxLength:16'], street: ['label:Alamat', 'required'], city: ['label:Kota', 'required'], zip: ['label:Kode Pos', 'required'] }; export default function CreateAddress() { const [auth] = useAuth(); const router = useRouter(); // Master Data const [cities, setCities] = useState([]); const [districts, setDistricts] = useState([]); const [subDistricts, setSubDistricts] = useState([]); // Input Data const { formInputs, formErrors, handleInputChange, handleSelectChange, handleFormSubmit, handleFormReset } = useFormValidation({ validationScheme, initialFormValue }); useEffect(() => { if (cities.length == 0) { const loadCities = async () => { let dataCities = await apiOdoo('GET', '/api/v1/city'); dataCities = dataCities.map((city) => ({ value: city.id, label: city.name })); setCities(dataCities); }; loadCities(); } }, [cities]); useEffect(() => { handleSelectChange('district', null); if (formInputs.city) { const loadDistricts = async () => { let dataDistricts = await apiOdoo('GET', `/api/v1/district?city_id=${formInputs.city.value}`); dataDistricts = dataDistricts.map((district) => ({ value: district.id, label: district.name })); setDistricts(dataDistricts); }; loadDistricts(); } }, [ formInputs.city, handleSelectChange ]); useEffect(() => { handleSelectChange('subDistrict', null); if (formInputs.district) { const loadSubDistricts = async () => { let dataSubDistricts = await apiOdoo('GET', `/api/v1/sub_district?district_id=${formInputs.district.value}`); dataSubDistricts = dataSubDistricts.map((subDistrict) => ({ value: subDistrict.id, label: subDistrict.name })); setSubDistricts(dataSubDistricts); }; loadSubDistricts(); } }, [ formInputs.district, handleSelectChange ]); const addressTypes = [ { value: 'contact', label: 'Contact Address' }, { value: 'invoice', label: 'Invoice Address' }, { value: 'delivery', label: 'Delivery Address' }, { value: 'other', label: 'Other Address' }, ]; const onSubmit = async () => { const parameters = { ...formInputs, city_id: formInputs.city?.value, district_id: formInputs.district?.value, sub_district_id: formInputs.subDistrict?.value, type: formInputs.type?.value, user_id: auth.id, partner_id: auth.partner_id, }; const address = await apiOdoo('POST', '/api/v1/partner', parameters); if (address?.id) { handleFormReset(); toast.success('Berhasil menambahkan alamat'); router.push('/my/address'); } } return (
handleFormSubmit(e, onSubmit)}> handleSelectChange('type', value)} value={formInputs?.type} />
{formErrors?.type}
{formErrors?.name}
{formErrors?.email}
{formErrors?.mobile}
{formErrors?.street}
state.menuIsOpen || state.isFocused ? '!border-yellow_r-9' : '' }} options={cities} value={formInputs.city} onChange={(value) => handleSelectChange('city', value)} />
{formErrors?.city}
state.menuIsOpen || state.isFocused ? '!border-yellow_r-9' : '' }} options={districts} value={formInputs.district} onChange={(value) => handleSelectChange('district', value)} isDisabled={!formInputs.city} /> state.menuIsOpen || state.isFocused ? '!border-yellow_r-9' : '' }} options={subDistricts} onChange={(value) => handleSelectChange('subDistrict', value)} value={formInputs.subDistrict} isDisabled={!formInputs.district} />
{formErrors?.zip}
); }