Rev 3287 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from "react";
import { axios } from "../../../utils";
import { Link } from "react-router-dom";
import { styled } from "styled-components";
import { useSelector } from "react-redux";
import IconButton from "@mui/material/IconButton";
import ExpandLessIcon from "@mui/icons-material/ExpandLess";
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
import EmptySection from "../../UI/EmptySection";
import Avatar from "@components/common/Avatar";
const GroupWidget = styled.div`
display: flex;
flex-direction: column;
width: 100%;
`;
const WidgetHeader = styled.div`
display: flex;
align-items: center;
justify-content: space-between;
flex: 1;
padding: 0 10px;
p {
font-size: 0.9rem;
font-weight: 600;
color: gray;
}
`;
const WidgetList = styled.ul`
display: flex;
flex-direction: column;
height: ${(props) => (props.$show ? "auto" : 0)};
gap: 0.5rem;
overflow: hidden;
transition: all 0.2s ease-in-out;
`;
const ListItem = styled.li`
align-items: center;
display: flex;
padding: 5px 10px;
gap: 0.5rem;
span {
font-size: 0.9rem;
font-weight: 600;
color: gray;
text-align: left;
}
&:hover {
background-color: rgba(0, 0, 0, 0.08);
}
`;
const GroupsInfo = ({
url = "/helpers/my-groups",
title = "Mis grupos",
display = false,
}) => {
const [widgetData, setWidgetData] = useState([]);
const [displayMenu, setDisplayMenu] = useState(display);
const [lookMore, setLookMore] = useState(false);
const labels = useSelector(({ intl }) => intl.labels);
const getData = () => {
axios.get(url).then((response) => {
const { success, data } = response.data;
if (success) {
setWidgetData(data.sort((a, b) => a.priority - b.priority).reverse());
}
});
};
const dataSlice = () => {
let infoFollows = [...widgetData];
if (!lookMore) {
infoFollows = infoFollows.slice(0, 3);
}
return infoFollows;
};
const toggleList = () => {
setDisplayMenu(!displayMenu);
};
useEffect(() => {
getData();
}, []);
return (
<GroupWidget>
<WidgetHeader>
<p>{title}</p>
<IconButton onClick={toggleList}>
{displayMenu ? <ExpandLessIcon /> : <ExpandMoreIcon />}
</IconButton>
</WidgetHeader>
{widgetData.length ? (
<WidgetList show={displayMenu}>
{dataSlice().map(({ id, name, profile, image }) => (
<ListItem key={id}>
<Link to={profile}>
<Avatar imageUrl={image} size="md" name={name} />
<span>{name}</span>
</Link>
</ListItem>
))}
</WidgetList>
) : (
<EmptySection message={labels.empty} />
)}
{widgetData.length >= 3 && (
<ListItem
as="button"
className="justify-content-center cursor-pointer py-2"
onClick={() => setLookMore(!lookMore)}
>
<span>{lookMore ? labels.view_less : labels.view_more}</span>
</ListItem>
)}
</GroupWidget>
);
};
export default GroupsInfo;