Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

CheckoutContent.tsx 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { Box } from '@mui/system';
  2. import { useSession } from 'next-auth/react';
  3. import { useTranslation } from 'next-i18next';
  4. import { useRouter } from 'next/router';
  5. import { setCookie } from 'nookies';
  6. import { useEffect, useState } from 'react';
  7. import { ICart, useStore } from '../../store/cart-context';
  8. import { useCheckoutDataUpdate } from '../../store/checkout-context';
  9. import CardContainer from '../cards/card-container/CardContainer';
  10. import DataCard from '../cards/data-card/DataCard';
  11. import ShippingDetailsForm from '../forms/shipping-details/ShippingDetailsForm';
  12. import ContentContainer from '../layout/content-wrapper/ContentContainer';
  13. import PageWrapper from '../layout/page-wrapper/PageWrapper';
  14. import StepTitle from '../layout/steps-title/StepTitle';
  15. import PageDescription from '../page-description/PageDescription';
  16. interface FormValues {
  17. fullName: string;
  18. address: string;
  19. address2: string;
  20. city: string;
  21. country: string;
  22. postcode: string;
  23. }
  24. const CheckoutContent = () => {
  25. const { t } = useTranslation('cart');
  26. const { cartStorage } = useStore();
  27. const { addCheckoutValue } = useCheckoutDataUpdate();
  28. const [cartData, setCartData] = useState<ICart[]>([]);
  29. const { data: session } = useSession();
  30. const router = useRouter();
  31. useEffect(() => {
  32. setCartData(cartStorage);
  33. }, [cartStorage]);
  34. const submitHandler = (formValues: FormValues) => {
  35. if (session?.user) {
  36. addCheckoutValue(
  37. cartData,
  38. { ...formValues, email: session?.user?.email },
  39. session?.user?._id
  40. );
  41. setCookie(null, 'shipping-session', 'active', {
  42. maxAge: 3600,
  43. expires: new Date(Date.now() + 3600),
  44. path: '/',
  45. });
  46. router.push('/shipping');
  47. }
  48. };
  49. const mapProductsToDom = () => {
  50. return cartData?.map((entry, i) => (
  51. <DataCard
  52. key={i}
  53. data={entry.product}
  54. quantity={entry.quantity}
  55. ></DataCard>
  56. ));
  57. };
  58. return (
  59. <PageWrapper>
  60. <StepTitle
  61. title={t('checkout:title')}
  62. breadcrumbsArray={['Cart', 'Checkout']}
  63. />
  64. <PageDescription description={t('checkout:subtitle')} />
  65. <ContentContainer>
  66. <Box flexGrow={1} sx={{ minWidth: '65%' }}>
  67. <ShippingDetailsForm
  68. enableBtn={true}
  69. backBtn={true}
  70. isCheckout={true}
  71. submitHandler={submitHandler}
  72. ></ShippingDetailsForm>
  73. </Box>
  74. <CardContainer>{mapProductsToDom()}</CardContainer>
  75. </ContentContainer>
  76. </PageWrapper>
  77. );
  78. };
  79. export default CheckoutContent;