Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useState } from 'react';
import { useSelector } from 'react-redux';
import { IconButton, Menu, MenuItem, styled, Typography } from '@mui/material';
import { MoreVert } from '@mui/icons-material';

import { parse } from '@app/utils';

import { Card, CardContent, CardMedia } from '@shared/components';

const OptionsButton = styled(IconButton)(({ theme }) => ({
  position: 'absolute',
  top: theme.spacing(1),
  right: theme.spacing(1),
  zIndex: 1
}));

export function KnowledgeCard({
  knowledge: { link_delete, link_edit, category, description, image, title },
  onEdit,
  onDelete
}) {
  const labels = useSelector(({ intl }) => intl.labels);
  const [anchorEl, setAnchorEl] = useState();
  const open = Boolean(anchorEl);

  const handleClick = (event) => {
    event.stopPropagation();
    setAnchorEl(event.currentTarget);
  };

  const handleClose = () => {
    setAnchorEl(null);
  };

  const handleMenuItemClick = (onClick) => {
    handleClose();
    onClick();
  };

  return (
    <Card>
      <OptionsButton onClick={handleClick}>
        <MoreVert />
      </OptionsButton>
      <Menu
        anchorEl={anchorEl}
        open={open}
        onClose={handleClose}
        anchorOrigin={{
          vertical: 'bottom',
          horizontal: 'left'
        }}
        transformOrigin={{
          vertical: 'top',
          horizontal: 'right'
        }}
      >
        <MenuItem
          onClick={(e) => {
            e.stopPropagation();
            handleMenuItemClick(() => onEdit(link_edit));
          }}
        >
          {labels.edit}
        </MenuItem>
        <MenuItem
          onClick={(e) => {
            e.stopPropagation();
            handleMenuItemClick(() => onDelete(link_delete));
          }}
        >
          {labels.delete}
        </MenuItem>
      </Menu>

      <CardMedia height={200} src={image} alt={`${title} image`} />

      <CardContent>
        <Typography variant='h2'>{title}</Typography>
        <Typography variant='overline'>{category}</Typography>
        <Typography>{parse(description)}</Typography>
      </CardContent>
    </Card>
  );
}