Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3475 | Rev 3611 | Ir a la última revisión | Autoría | Comparar con el anterior | 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: { category, description, image, title },
  onClick,
  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 = (event) => {
    event.stopPropagation();
    setAnchorEl(null);
  };

  const handleMenuItemClick = (onClick, event) => {
    event.stopPropagation();
    handleClose();
    onClick();
  };

  return (
    <Card onClick={onClick} styles={{ cursor: 'pointer' }}>
      <OptionsButton onClick={handleClick}>
        <MoreVert />
      </OptionsButton>
      <Menu
        anchorEl={anchorEl}
        open={open}
        onClose={handleClose}
        anchorOrigin={{
          vertical: 'bottom',
          horizontal: 'left'
        }}
        transformOrigin={{
          vertical: 'top',
          horizontal: 'right'
        }}
      >
        <MenuItem onClick={(event) => handleMenuItemClick(onEdit, event)}>{labels.edit}</MenuItem>
        <MenuItem onClick={(event) => handleMenuItemClick(onDelete, event)}>
          {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>
  );
}