Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ShippingDetailsForm.jsx 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { Box, Button, Paper, TextField } from '@mui/material';
  2. import { useFormik } from 'formik';
  3. import { useSession } from 'next-auth/react';
  4. import PropType from 'prop-types';
  5. import { useState } from 'react';
  6. import { shippingDetailsSchema } from '../../../schemas/shippingDetailsSchema';
  7. import ErrorMessageComponent from '../../mui/ErrorMessageComponent';
  8. const ShippingDetailsForm = ({ backBtn = false }) => {
  9. const [error] = useState({ hasError: false, errorMessage: '' });
  10. const { data: session } = useSession();
  11. const submitHandler = async (values) => {
  12. console.log(values);
  13. };
  14. const formik = useFormik({
  15. initialValues: {
  16. fullName: session.user.fullName,
  17. address: session.user.address,
  18. address2: session.user.address2,
  19. city: session.user.city,
  20. country: session.user.country,
  21. postcode: session.user.postcode,
  22. },
  23. validationSchema: shippingDetailsSchema,
  24. onSubmit: submitHandler,
  25. validateOnBlur: true,
  26. enableReinitialize: true,
  27. });
  28. return (
  29. <Paper
  30. sx={{ p: 3, width: '90%', ml: 12, backgroundColor: '#f2f2f2' }}
  31. elevation={3}
  32. >
  33. <Box
  34. sx={{
  35. width: '100%',
  36. display: 'flex',
  37. flexDirection: 'column',
  38. }}
  39. >
  40. {error.hasError && <ErrorMessageComponent error={error.errorMessage} />}
  41. <Box
  42. component="form"
  43. onSubmit={formik.handleSubmit}
  44. sx={{ position: 'relative', mt: 1, p: 1 }}
  45. >
  46. <TextField
  47. name="fullName"
  48. label="Name"
  49. margin="normal"
  50. value={formik.values.fullName}
  51. onChange={formik.handleChange}
  52. error={formik.touched.fullName && Boolean(formik.errors.fullName)}
  53. helperText={formik.touched.fullName && formik.errors.fullName}
  54. fullWidth
  55. />
  56. <TextField
  57. name="address"
  58. label="Address"
  59. margin="normal"
  60. value={formik.values.address}
  61. onChange={formik.handleChange}
  62. error={formik.touched.address && Boolean(formik.errors.address)}
  63. helperText={formik.touched.address && formik.errors.address}
  64. fullWidth
  65. />
  66. <TextField
  67. name="address2"
  68. label="Address Line 2"
  69. margin="normal"
  70. value={formik.values.address2}
  71. onChange={formik.handleChange}
  72. error={formik.touched.address2 && Boolean(formik.errors.address2)}
  73. helperText={formik.touched.address2 && formik.errors.address2}
  74. fullWidth
  75. />
  76. <TextField
  77. name="city"
  78. label="City"
  79. margin="normal"
  80. value={formik.values.city}
  81. onChange={formik.handleChange}
  82. error={formik.touched.city && Boolean(formik.errors.city)}
  83. helperText={formik.touched.city && formik.errors.city}
  84. fullWidth
  85. />
  86. <Box sx={{ display: 'flex' }}>
  87. <TextField
  88. name="country"
  89. label="Country"
  90. margin="normal"
  91. value={formik.values.country}
  92. onChange={formik.handleChange}
  93. error={formik.touched.country && Boolean(formik.errors.country)}
  94. helperText={formik.touched.country && formik.errors.country}
  95. fullWidth
  96. sx={{ mr: 1.5 }}
  97. />
  98. <TextField
  99. name="postcode"
  100. label="Postal Code"
  101. margin="normal"
  102. value={formik.values.postcode}
  103. onChange={formik.handleChange}
  104. error={formik.touched.postcode && Boolean(formik.errors.postcode)}
  105. helperText={formik.touched.postcode && formik.errors.postcode}
  106. fullWidth
  107. />
  108. </Box>
  109. {backBtn && (
  110. <Button
  111. variant="contained"
  112. sx={{
  113. mt: 3,
  114. mb: 2,
  115. height: 50,
  116. width: 150,
  117. textTransform: 'none',
  118. backgroundColor: 'primary.main',
  119. color: 'white',
  120. mr: 2,
  121. }}
  122. >
  123. Back to cart
  124. </Button>
  125. )}
  126. <Button
  127. type="submit"
  128. variant="contained"
  129. sx={{
  130. mt: 3,
  131. mb: 2,
  132. backgroundColor: '#CBA213',
  133. height: 50,
  134. width: 150,
  135. textTransform: 'none',
  136. color: 'white',
  137. }}
  138. >
  139. Submit Details
  140. </Button>
  141. </Box>
  142. </Box>
  143. </Paper>
  144. );
  145. };
  146. ShippingDetailsForm.propTypes = {
  147. backBtn: PropType.Boolean,
  148. };
  149. export default ShippingDetailsForm;