Source

components/_organisms/MessagesList/index.js

import React from "react"
import { useTranslation } from "react-i18next"
import PropTypes from "prop-types"
// chakra-ui
import { Divider, Flex, toast } from "@chakra-ui/react"
// components
import SkItemComplete from "components/_molecules/ItemComplete/SkItemComplete"
import MessageComplete from "components/_molecules/MessageComplete"
// firebase
import { FirebaseClient } from "firebase/client"

/**
 * MessagesList Component
 * @component
 * @author Braian D. Vaylet
 * @description Componente listado de mensajes
 */
const MessagesList = ({ data, loading }) => {
  const [t] = useTranslation("global")
  const firebase = new FirebaseClient()

  /**
   * handleDelete
   * @function
   * @param {string} id
   * @description Elimina el registro de la Base de datos ⚠
   */
  const handleDeleteMessage = async (id) => {
    await firebase
      .deleteMessagesByID(id)
      .then(() => {
        toast({
          title: t("AdminTemplate.deleteMessageSuccess"),
          description: "",
          status: "success",
          position: "bottom",
          duration: 5000,
          isClosable: true,
        })
      })
      .catch(() => {
        toast({
          title: t("AdminTemplate.deleteError"),
          description: "",
          status: "error",
          position: "bottom",
          duration: 5000,
          isClosable: true,
        })
      })
  }

  return (
    <Flex
      direction="column"
      align="center"
      justify="flex-start"
      w="100%"
      p={10}
    >
      {loading ? (
        <SkItemComplete />
      ) : data && data.length > 0 ? (
        <Flex
          direction="column"
          align="flex-start"
          justify="flex-start"
          w="100%"
        >
          {data
            .map((message, index) => {
              return (
                <>
                  <Flex
                    key={index}
                    w="100%"
                    justify="space-between"
                    align="center"
                  >
                    <MessageComplete
                      message={message}
                      withDelete
                      onDelete={() => handleDeleteMessage(message.id)}
                    />
                  </Flex>
                  <Divider m="1.5rem 0" />
                </>
              )
            })
            .reverse()}
        </Flex>
      ) : (
        <Flex>{t("AdminTemplate.noItems")}</Flex>
      )}
    </Flex>
  )
}

MessagesList.propTypes = {
  data: PropTypes.any.isRequired, // 😝
  loading: PropTypes.bool.isRequired,
}

export default MessagesList