import React, { useEffect, useState } from "react"; import PropTypes from "prop-types"; import { useFormik } from "formik"; import { CreateOfferFormContainer, DescriptionField, FieldLabel, NextButton, SelectOption, TitleField, } from "./FirstPartCreateOffer.styled"; import * as Yup from "yup"; import selectedTheme from "../../../../themes"; import { useTranslation } from "react-i18next"; import { SelectField } from "../CreateOffer.styled"; import { useSelector } from "react-redux"; import useScreenDimensions from "../../../../hooks/useScreenDimensions"; const FirstPartCreateOffer = (props) => { const [subcat, setSubcat] = useState([]); const locations = useSelector((state) => state.locations.locations); const categories = useSelector((state) => state.categories.categories); const dimensions = useScreenDimensions(); const { t } = useTranslation(); useEffect(() => { if (!props.offer) { if (Object.keys(props.informations).length !== 0) { formik.setFieldValue("nameOfProduct", props.informations.nameOfProduct); formik.setFieldValue("description", props.informations.description); formik.setFieldValue("location", props.informations.location); formik.setFieldValue("category", props.informations.category); formik.setFieldValue("subcategory", props.informations.subcategory); let scat = categories.filter( (cat) => cat.name === props.informations.category ); setSubcat(scat[0].subcategories.map((x) => x.name)); } } else { formik.setFieldValue("location", props.offer.location.city); formik.setFieldValue("category", props.offer.category.name); formik.setFieldValue("subcategory", props.offer.subcategory); } }, [props.offer, props.informations]); useEffect(() => { if (props.offer !== undefined) { let scat = categories.filter( (cat) => cat.name === props.offer.category.name ); setSubcat(scat[0].subcategories.map((x) => x.name)); } }, [props.offer]); const handleSubmit = (values) => { props.handleNext(values); }; const formik = useFormik({ initialValues: { nameOfProduct: `${!props.offer ? "" : props.offer.name}`, description: `${!props.offer ? "" : props.offer.description}`, location: "default", category: "default", subcategory: "default", }, validationSchema: Yup.object().shape({ nameOfProduct: Yup.string().required(t("login.nameOfProductRequired")), description: Yup.string().required(t("login.descriptionRequired")).min(8), location: Yup.string().oneOf(locations.map((l) => l.city)), category: Yup.string().oneOf(categories.map((c) => c.name)), // subcategory: Yup.string().oneOf( // subcat[0]?.subcategories ? subcat[0].subcategories : [] // ), }), onSubmit: handleSubmit, validateOnBlur: true, enableReinitialize: true, }); const handleSubcategories = (category) => { const filtered = categories.filter((cat) => cat.name === category); setSubcat(filtered[0].subcategories.map((c) => c.name)); }; return ( <> {dimensions.width > 600 ? ( ) : ( )} { formik.setFieldValue("location", value.target.value); }} value={formik.values.location} > {t("offer.choseLocation")} {locations.map((loc) => { return ( {loc.city} ); })} { formik.setFieldValue("category", value.target.value); }} value={formik.values.category} > {t("offer.choseCategory")} {categories.map((cat, i) => { return ( handleSubcategories(cat.name)} > {cat.name} ); })} { formik.setFieldValue("subcategory", value.target.value); }} value={formik.values.subcategory} > {t("offer.choseSubcategory")} {subcat && subcat.map((sub, i) => { return ( {sub} ); })} {t("offer.continue")} ); }; FirstPartCreateOffer.propTypes = { children: PropTypes.any, handleNext: PropTypes.func, offer: PropTypes.node, informations: PropTypes.any, }; export default FirstPartCreateOffer;