| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import React, { useEffect } from "react";
- import PropTypes from "prop-types";
- import {
- FormContainer,
- RegisterDescription,
- } from "./ThirdPartOfRegistration.styled";
- import { useFormik } from "formik";
- import * as Yup from "yup";
- import { useTranslation } from "react-i18next";
- import { TextField } from "../../../../components/TextFields/TextField/TextField";
- import { PrimaryButton } from "../../../../components/Buttons/PrimaryButton/PrimaryButton";
- import selectedTheme from "../../../../themes";
- import AutoSuggestTextField from "../../../../components/TextFields/AutoSuggestTextField/AutoSuggestTextField";
- import { useSelector } from "react-redux";
- import { selectLocations } from "../../../../store/selectors/locationsSelectors";
- import { ErrorMessage } from "../FirstPart/FirstPartOfRegistration.styled";
-
- const ThirdPartOfRegistration = (props) => {
- const { t } = useTranslation();
- const locations = useSelector(selectLocations);
-
- useEffect(() => {
- if (props.informations?.phoneNumber) {
- formik.setFieldValue("phoneNumber", props.informations?.phoneNumber);
- }
- if (props.informations?.location) {
- formik.setFieldValue("location", props.informations?.location);
- }
- if (props.informations?.website) {
- formik.setFieldValue("website", props.informations?.website);
- }
- }, [props.informations]);
-
- const handleSubmit = () => {
- if (
- formik.values.website?.length !== 0 &&
- !formik.values.website.match(
- /^((ftp|http|https):\/\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+((\/)[\w#]+)*(\/\w+\?[a-zA-Z0-9_]+=\w+(&[a-zA-Z0-9_]+=\w+)*)?$/gm
- )
- ) {
- formik.setFieldError("website");
- } else {
- props.handleSubmit(formik.values);
- }
- };
-
- const formik = useFormik({
- initialValues: {
- phoneNumber: "",
- location: "",
- website: "",
- },
- validationSchema: Yup.object().shape({
- phoneNumber: Yup.number(),
- location: Yup.string().oneOf(
- locations.map((item) => item.city),
- "Greska!!!"
- ),
- website: Yup.string(),
- }),
- onSubmit: handleSubmit,
- validateOnBlur: true,
- enableReinitialize: true,
- });
-
- return (
- <FormContainer component="form" onSubmit={formik.handleSubmit}>
- <RegisterDescription component="p" variant="p">
- {t("register.descriptionThird")}
- </RegisterDescription>
-
- <TextField
- name="phoneNumber"
- placeholder={t("common.labelPhone")}
- margin="normal"
- type="number"
- value={formik.values.phoneNumber}
- onChange={formik.handleChange}
- error={formik.touched.phoneNumber && Boolean(formik.errors.phoneNumber)}
- helperText={formik.touched.phoneNumber && formik.errors.phoneNumber}
- autoFocus
- fullWidth
- />
-
- {/* <TextField
- name="location"
- placeholder={t("common.labelLocation")}
- margin="normal"
- type="text"
- value={formik.values.location}
- onChange={formik.handleChange}
- error={formik.touched.location && Boolean(formik.errors.location)}
- helperText={formik.touched.location && formik.errors.location}
- fullWidth
- /> */}
-
- <AutoSuggestTextField
- placeholder={t("common.labelLocation")}
- data={locations.map((item) => ({ name: item.city }))}
- value={formik.values.location}
- onChange={(event, { newValue }) =>
- formik.setFieldValue("location", newValue)
- }
- />
-
- <TextField
- name="website"
- placeholder={t("common.labelWebsite")}
- margin="normal"
- type="text"
- value={formik.values.website}
- onChange={formik.handleChange}
- error={formik.touched.website && Boolean(formik.errors.website)}
- helperText={formik.touched.website && formik.errors.website}
- fullWidth
- />
-
- <ErrorMessage>{formik.errors.phoneNumber}</ErrorMessage>
-
- <PrimaryButton
- type="submit"
- variant="contained"
- height="48px"
- fullWidth
- buttoncolor={selectedTheme.primaryPurple}
- textcolor="white"
- >
- {t("common.continue")}
- </PrimaryButton>
- </FormContainer>
- );
- };
-
- ThirdPartOfRegistration.propTypes = {
- children: PropTypes.node,
- handleSubmit: PropTypes.func,
- informations: PropTypes.any,
- };
-
- export default ThirdPartOfRegistration;
|