Source

components/_templates/PurchasesTemplate/index.js

import React, { useEffect, useState } from "react"
import { useTranslation } from "react-i18next"
// chakra-ui
import { Flex, Text } from "@chakra-ui/react"
// components
import Card from "components/_atoms/Card"
import SubHeader from "components/_molecules/SubHeader"
import PurchasesList from "components/_organisms/PurchasesList"
// styles
import { setValueResponsiveMin1280 } from "styles/utils"
// routes
import { ROUTES } from "routes"
// hooks
import useUser from "hooks/useUser"
// firebase
import { FirebaseClient } from "firebase/client"

/**
 * PurchasesTemplate Component
 * @component
 * @author Braian D. Vaylet
 * @description Componente template del historial de compras
 */
const PurchasesTemplate = () => {
  const [t] = useTranslation("global")
  const firebase = new FirebaseClient()
  const user = useUser()
  const [data, setData] = useState([])
  const [loadingData, setLoadingData] = useState(false)

  useEffect(() => {
    setLoadingData(true)
    user &&
      firebase
        .fetchAllPurchasesByUser(user.email)
        .then((value) => {
          setData(value)
          setLoadingData(false)
        })
        .catch((error) => {
          console.error("error", error)
          setLoadingData(false)
        })
  }, [user])

  /**
   * handleStatistics
   * @function
   * @description retorna total de compras y total de productos
   * @returns {object}
   */
  const handleStatistics = () => {
    const initialValue = 0
    const totalProducts =
      data &&
      data.reduce(
        (accumulator, currentValue) =>
          accumulator + currentValue.products.length,
        initialValue
      )

    return {
      totalPurchases: data.length,
      totalProducts,
    }
  }

  return (
    <Flex
      p={4}
      mt={8}
      direction="column"
      align="center"
      justify="flex-start"
      w={setValueResponsiveMin1280("72.5%", "100%")}
    >
      <SubHeader
        withTitle
        title={t("PurchasesTemplate.title")}
        backTo={ROUTES.HOME}
        withRightContent
        rightContent={
          <Flex align="center">
            <Text>
              <b>{data.length && handleStatistics().totalPurchases}</b>{" "}
              {t("PurchasesTemplate.purchasesMade")}
            </Text>
            <Text m="0 1rem">|</Text>
            <Text>
              <b>{data.length && handleStatistics().totalProducts}</b>{" "}
              {t("PurchasesTemplate.productsPurchased")}
            </Text>
          </Flex>
        }
      />
      <Card w="100%" minH={setValueResponsiveMin1280("80vh", "100%")} p={4}>
        <PurchasesList data={data} loading={loadingData} />
      </Card>
    </Flex>
  )
}

export default PurchasesTemplate