Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2639 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';
import { useNavigate } from 'react-router-dom';
import { Avatar, Box, Card, styled } from '@mui/material';

export const WidgetWrapper = styled(Card)(({ theme }) => ({
  boxShadow: theme.shadows[1], // 0px 0px 0px 1px rgba(0, 0, 0, 0.08);
  height: 'fit-content',
  width: '100%',
  boxSizing: 'border-box',
  overflow: 'hidden',
  position: 'relative',
  span: {
    fontSize: '0.9rem'
  },
  p: {
    color: 'var(--font-color)',
    fontSize: '14px',
    textAlign: 'justify',
    marginBottom: '0.5rem'
  },
  h2: {
    fontSize: '1rem'
  },
  [theme.breakpoints.up('sm')]: {
    borderRadius: theme.shape.borderRadius
  }
}));

WidgetWrapper.Body = styled(Box)({
  padding: '10px 1rem',
  display: 'flex',
  flexDirection: 'column'
});

WidgetWrapper.Actions = styled(Box)(({ theme }) => ({
  display: 'flex',
  justifyContent: 'space-around',
  borderTop: '1px solid rgb(211, 211, 211)',
  padding: '5px',
  gap: '0.5rem',
  '> button, > a': {
    alignItems: 'center',
    borderRadius: 'var(--border-radius)',
    cursor: 'pointer',
    display: 'inline-flex',
    flexDirection: 'column',
    fontSize: '0.9rem',
    padding: '5px',
    position: 'relative',
    '&:hover': {
      backgroundColor: 'whitesmoke'
    }
  },
  [theme.breakpoints.up('sm')]: {
    flexDirection: 'row',
    gap: '0.5rem',
    fontSize: '1rem'
  }
}));

const LayoutHeader = styled(Box)`
  display: flex;
  gap: 0.5rem;
  padding: 10px 1rem;
  align-items: center;
  justify-content: space-between;
  position: relative;
`;

const HeaderInfo = styled(Box)`
  align-items: center;
  display: inline-flex;
  gap: 0.5rem;
  width: fit-content;
`;

const HeaderContent = styled(Box)`
  display: flex;
  flex-direction: column;
`;

const Header = ({ image = '', title = '', url = '', timeElapsed = '', children, ...rest }) => {
  const navigate = useNavigate();

  const goToProfile = () => {
    if (!url) return;
    navigate(url);
  };

  return (
    <LayoutHeader {...rest}>
      <HeaderInfo>
        {image && (
          <Avatar
            src={image}
            alt={`${title} profile image`}
            sx={{ width: '50px', height: '50px' }}
          />
        )}
        <HeaderContent>
          <h2 onClick={goToProfile}>{title}</h2>

          {timeElapsed && <span>{timeElapsed}</span>}
        </HeaderContent>
      </HeaderInfo>
      {children}
    </LayoutHeader>
  );
};

WidgetWrapper.Header = Header;

export default WidgetWrapper;