Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

ShippingContent.tsx 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { Checkbox, FormControlLabel } from '@mui/material';
  2. import { Box } from '@mui/system';
  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 {
  8. CheckoutData,
  9. useCheckoutData,
  10. useCheckoutDataUpdate,
  11. } from '../../store/checkout-context';
  12. import { stripe } from '../../utils/helpers/stripe';
  13. import { ShippingData as IShippingData } from '../../utils/interface/orderInterface';
  14. import CardContainer from '../cards/card-container/CardContainer';
  15. import DataCard from '../cards/data-card/DataCard';
  16. import { FormValues } from '../forms/shipping-details/ShippingDetailsForm';
  17. import ContentContainer from '../layout/content-wrapper/ContentContainer';
  18. import PageWrapper from '../layout/page-wrapper/PageWrapper';
  19. import StepTitle from '../layout/steps-title/StepTitle';
  20. import PageDescription from '../page-description/PageDescription';
  21. import ButtonGroup from './shipping-btnGroup/ButtonGroup';
  22. import ShippingData from './shipping-data/ShippingData';
  23. import ShippingModal from './shipping-modal/ShippingModal';
  24. const ShippingContent = () => {
  25. const { t } = useTranslation('shipping');
  26. const { checkoutStorage } = useCheckoutData();
  27. const { changeContact, changeShippingData } = useCheckoutDataUpdate();
  28. const [open, setOpen] = useState({ isOpen: false, type: '' });
  29. const [checkoutData, setCheckoutData] = useState<CheckoutData>(
  30. {} as CheckoutData
  31. );
  32. const router = useRouter();
  33. useEffect(() => {
  34. setCheckoutData(checkoutStorage);
  35. }, [checkoutStorage]);
  36. const handleOpen = (type: string) => setOpen({ isOpen: true, type });
  37. const handleClose = () => setOpen({ isOpen: false, type: '' });
  38. const handleChangeShipping = (values: IShippingData | FormValues) => {
  39. changeShippingData(values as IShippingData);
  40. handleClose();
  41. };
  42. const handleChangeContact = (values: string) => {
  43. changeContact(values);
  44. handleClose();
  45. };
  46. const handleStripePayment = () => {
  47. stripe({
  48. lineItems: checkoutData.products.map((el) => ({
  49. price: el.product.stripeID,
  50. quantity: el.quantity,
  51. })),
  52. });
  53. setCookie(null, 'review-session', 'active', {
  54. maxAge: 3600,
  55. expires: new Date(Date.now() + 3600),
  56. path: '/',
  57. });
  58. };
  59. const handleBackToCart = () => {
  60. router.replace('/cart');
  61. };
  62. const mapProductsToDom = () => {
  63. return checkoutData?.products?.map((entry, i) => (
  64. <DataCard
  65. key={i}
  66. data={entry.product}
  67. quantity={entry.quantity}
  68. ></DataCard>
  69. ));
  70. };
  71. return (
  72. <PageWrapper>
  73. <StepTitle
  74. title={t('shipping:title')}
  75. breadcrumbsArray={['Cart', 'Checkout', 'Shipping']}
  76. />
  77. <PageDescription description={t('shipping:subtitle')} />
  78. <ContentContainer>
  79. <Box flexGrow={1} sx={{ minWidth: '65%' }}>
  80. <ShippingData
  81. email={checkoutData?.userInfo?.email}
  82. address={checkoutData?.userInfo?.address}
  83. city={checkoutData?.userInfo?.city}
  84. postcode={checkoutData?.userInfo?.postcode}
  85. handleOpen={handleOpen}
  86. />
  87. <Box
  88. sx={{
  89. display: 'flex',
  90. justifyContent: 'space-between',
  91. backgroundColor: '#f2f2f2',
  92. alignItems: 'center',
  93. mb: 2,
  94. width: { sm: '200px' },
  95. borderRadius: 2,
  96. p: 1,
  97. }}
  98. >
  99. <FormControlLabel
  100. control={<Checkbox checked disabled />}
  101. label={t('shipping:shippingCost')}
  102. sx={{ color: 'black', ml: 2 }}
  103. />
  104. </Box>
  105. <ButtonGroup
  106. handleStripePayment={handleStripePayment}
  107. handleBackToCart={handleBackToCart}
  108. />
  109. </Box>
  110. <CardContainer>{mapProductsToDom()}</CardContainer>
  111. </ContentContainer>
  112. <ShippingModal
  113. open={open}
  114. handleClose={handleClose}
  115. handleChangeShipping={handleChangeShipping}
  116. handleChangeContact={handleChangeContact}
  117. />
  118. </PageWrapper>
  119. );
  120. };
  121. export default ShippingContent;