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;