Source

components/_templates/CheckoutTemplate/index.js

import React, { useState, useEffect } from "react"
import { useTranslation } from "react-i18next"
// chakra-ui
import { Flex, Grid, GridItem, Text, useMediaQuery } from "@chakra-ui/react"
// styles
import { setValueResponsiveMin1280 } from "styles/utils"
import { MY_BREAKPOINTS } from "styles/theme"
// components
import Card from "components/_atoms/Card"
import SubHeader from "components/_molecules/SubHeader"
import PaymentForm from "components/_organisms/PaymentForm"
import PaymentMenuTemplate from "components/_templates/PaymentMenuTemplate"
// routes
import { ROUTES } from "routes"
import LoginAlert from "components/_organisms/LoginAlert"
// hooks
import useUser from "hooks/useUser"
import CustomAvatar from "components/_atoms/AvatarText"

/**
 * CheckoutTemplate Component
 * @component
 * @author Braian D. Vaylet
 * @description template del checkout
 */
const CheckoutTemplate = () => {
  const [t] = useTranslation("global")
  const user = useUser()
  const [mediaQueryMin1280] = useMediaQuery(MY_BREAKPOINTS.BREAK_MIN_1280)
  const [mediaQueryMax600] = useMediaQuery(MY_BREAKPOINTS.BREAK_MAX_600)
  const [showLogin, setShowLogin] = useState(false)

  useEffect(() => (user ? setShowLogin(false) : setShowLogin(true)), [user])

  /**
   * handleRows
   * @function
   * @returns {number} number of columns
   */
  const handleRows = () => (mediaQueryMin1280 ? 3 : mediaQueryMax600 ? 1 : 2)

  return (
    <>
      <Flex
        p={4}
        mt={8}
        direction="column"
        align="center"
        justify="flex-start"
        w={setValueResponsiveMin1280("72.5%", "100%")}
      >
        <SubHeader
          backTo={ROUTES.CART}
          withHelp
          withTitle
          title={t("CheckoutTemplate.title")}
          withRightContent
          rightContent={
            user &&
            !mediaQueryMax600 && (
              <CustomAvatar
                src={user.avatar}
                alt={user.username}
                text={`${t("Checkout.hello")}, ${user.username}`}
              />
            )
          }
        >
          <Flex direction="column" align="flex-start" justify="flex-start">
            <Text mb={4}>
              <b>1.</b> {t("Checkout.helpStage1")}
            </Text>
            <Text mb={4}>
              <b>2.</b> {t("Checkout.helpStage2")}
            </Text>
            <Text mb={4}>
              <b>3.</b> {t("Checkout.helpStage3")}
            </Text>
          </Flex>
        </SubHeader>
        <Card w="100%" minH={setValueResponsiveMin1280("80vh", "100%")} p={4}>
          <Grid w="100%" templateColumns={`repeat(${handleRows()}, 1fr)`}>
            <GridItem colSpan={1} colStart={1} colEnd={3} p={6}>
              <PaymentForm />
            </GridItem>
            <GridItem colSpan={1} p={6}>
              <PaymentMenuTemplate />
            </GridItem>
          </Grid>
        </Card>
      </Flex>
      {showLogin && <LoginAlert />}
    </>
  )
}

export default CheckoutTemplate