Proyectos de Subversion LeadersLinked - SPA

Rev

Autoría | Ultima modificación | Ver Log |

import React, { useEffect, useState } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { useDispatch } from 'react-redux';
import { ButtonGroup, IconButton, Box } from '@mui/material';
import { Delete, Block, Reply } from '@mui/icons-material';

import { useInmail } from '@hooks';
import { deleteInmail } from '@app/services/inmail';
import { showReportModal } from '@app/redux/report/report.actions';
import { addNotification } from '@app/redux/notification/notification.actions';
import ComposeButton from './compose-button';
import ReplyModal from './reply-modal';
import ConfirmModal from '@components/modals/ConfirmModal';
import ReportModal from '@components/modals/ReportModal';

export default function ActionsRow() {
  const { uuid } = useParams();
  const { selectedMessage, messages, selectMessage, replyMessage } = useInmail();
  const [showConfirmModal, setShowConfirmModal] = useState(false);
  const dispatch = useDispatch();
  const navigate = useNavigate();

  const navigateToImbox = () => navigate('/inmail');

  const handleDelete = async () => {
    try {
      const result = await deleteInmail(selectedMessage.delete_link);
      dispatch(addNotification({ style: 'success', msg: result }));
      navigateToImbox();
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }));
    }
  };

  const handleReport = () => {
    dispatch(
      showReportModal({
        reportUrl: selectedMessage?.block_link,
        type: 'Inmail',
        onComplete: navigateToImbox
      })
    );
  };

  const toggleConfirmModal = () => setShowConfirmModal(!showConfirmModal);

  useEffect(() => {
    if (selectedMessage) return;
    const currentMessage = messages.find((message) => message.email_id === uuid);
    selectMessage(currentMessage);
  }, [selectedMessage, messages, uuid]);

  return (
    <>
      <Box
        sx={{
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'space-between',
          gap: 0.5,
          mb: 1
        }}
      >
        <ComposeButton />

        {uuid && selectedMessage ? (
          <ButtonGroup>
            <IconButton onClick={() => replyMessage(selectedMessage)}>
              <Reply />
            </IconButton>
            <ReplyModal />

            <IconButton onClick={toggleConfirmModal}>
              <Delete />
            </IconButton>

            <IconButton onClick={handleReport}>
              <Block />
            </IconButton>
          </ButtonGroup>
        ) : null}
      </Box>
      <ConfirmModal show={showConfirmModal} onAccept={handleDelete} onClose={toggleConfirmModal} />
      <ReportModal />
    </>
  );
}