You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ThirdPartOfRegistration.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import React, { useEffect } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. FormContainer,
  5. RegisterDescription,
  6. } from "./ThirdPartOfRegistration.styled";
  7. import { useFormik } from "formik";
  8. import * as Yup from "yup";
  9. import { useTranslation } from "react-i18next";
  10. import { TextField } from "../../../../components/TextFields/TextField/TextField";
  11. import { PrimaryButton } from "../../../../components/Buttons/PrimaryButton/PrimaryButton";
  12. import selectedTheme from "../../../../themes";
  13. import AutoSuggestTextField from "../../../../components/TextFields/AutoSuggestTextField/AutoSuggestTextField";
  14. import { useSelector } from "react-redux";
  15. import { selectLocations } from "../../../../store/selectors/locationsSelectors";
  16. import { ErrorMessage } from "../FirstPart/FirstPartOfRegistration.styled";
  17. const ThirdPartOfRegistration = (props) => {
  18. const { t } = useTranslation();
  19. const locations = useSelector(selectLocations);
  20. useEffect(() => {
  21. if (props.informations?.phoneNumber) {
  22. formik.setFieldValue("phoneNumber", props.informations?.phoneNumber);
  23. }
  24. if (props.informations?.location) {
  25. formik.setFieldValue("location", props.informations?.location);
  26. }
  27. if (props.informations?.website) {
  28. formik.setFieldValue("website", props.informations?.website);
  29. }
  30. }, [props.informations]);
  31. const handleSubmit = () => {
  32. if (
  33. formik.values.website?.length !== 0 &&
  34. !formik.values.website.match(
  35. /^((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
  36. )
  37. ) {
  38. formik.setFieldError("website");
  39. } else {
  40. props.handleSubmit(formik.values);
  41. }
  42. };
  43. const formik = useFormik({
  44. initialValues: {
  45. phoneNumber: "",
  46. location: "",
  47. website: "",
  48. },
  49. validationSchema: Yup.object().shape({
  50. phoneNumber: Yup.number(),
  51. location: Yup.string().oneOf(
  52. locations.map((item) => item.city),
  53. "Greska!!!"
  54. ),
  55. website: Yup.string(),
  56. }),
  57. onSubmit: handleSubmit,
  58. validateOnBlur: true,
  59. enableReinitialize: true,
  60. });
  61. return (
  62. <FormContainer component="form" onSubmit={formik.handleSubmit}>
  63. <RegisterDescription component="p" variant="p">
  64. {t("register.descriptionThird")}
  65. </RegisterDescription>
  66. <TextField
  67. name="phoneNumber"
  68. placeholder={t("common.labelPhone")}
  69. margin="normal"
  70. type="number"
  71. value={formik.values.phoneNumber}
  72. onChange={formik.handleChange}
  73. error={formik.touched.phoneNumber && Boolean(formik.errors.phoneNumber)}
  74. helperText={formik.touched.phoneNumber && formik.errors.phoneNumber}
  75. autoFocus
  76. fullWidth
  77. />
  78. {/* <TextField
  79. name="location"
  80. placeholder={t("common.labelLocation")}
  81. margin="normal"
  82. type="text"
  83. value={formik.values.location}
  84. onChange={formik.handleChange}
  85. error={formik.touched.location && Boolean(formik.errors.location)}
  86. helperText={formik.touched.location && formik.errors.location}
  87. fullWidth
  88. /> */}
  89. <AutoSuggestTextField
  90. placeholder={t("common.labelLocation")}
  91. data={locations.map((item) => ({ name: item.city }))}
  92. value={formik.values.location}
  93. onChange={(event, { newValue }) =>
  94. formik.setFieldValue("location", newValue)
  95. }
  96. />
  97. <TextField
  98. name="website"
  99. placeholder={t("common.labelWebsite")}
  100. margin="normal"
  101. type="text"
  102. value={formik.values.website}
  103. onChange={formik.handleChange}
  104. error={formik.touched.website && Boolean(formik.errors.website)}
  105. helperText={formik.touched.website && formik.errors.website}
  106. fullWidth
  107. />
  108. <ErrorMessage>{formik.errors.phoneNumber}</ErrorMessage>
  109. <PrimaryButton
  110. type="submit"
  111. variant="contained"
  112. height="48px"
  113. fullWidth
  114. buttoncolor={selectedTheme.primaryPurple}
  115. textcolor="white"
  116. >
  117. {t("common.continue")}
  118. </PrimaryButton>
  119. </FormContainer>
  120. );
  121. };
  122. ThirdPartOfRegistration.propTypes = {
  123. children: PropTypes.node,
  124. handleSubmit: PropTypes.func,
  125. informations: PropTypes.any,
  126. };
  127. export default ThirdPartOfRegistration;