Rev 3027 | Rev 3432 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useMemo, useState } from "react";import { Link } from "react-router-dom";import { useSelector } from "react-redux";import {Avatar,Button,List,ListItem,ListItemAvatar,ListItemButton,ListItemText,} from "@mui/material";import { useFetch } from "@hooks";import colors from "@styles/colors";import Widget from "@components/UI/Widget";import Spinner from "@components/UI/Spinner";import EmptySection from "@components/UI/EmptySection";const SuggestWidget = ({ title, url }) => {const { data, loading } = useFetch(url, []);const [lookMore, setLookMore] = useState(false);const labels = useSelector(({ intl }) => intl.labels);const items = useMemo(() => (lookMore ? data : [...data].slice(0, 3)),[lookMore, data]);return (<Widget><Widget.Headertitle={title}renderAction={() => {if (data.length <= 3) return null;return (<Button onClick={() => setLookMore(!lookMore)}>{lookMore ? labels.view_less : labels.view_more}</Button>);}}/><Widget.Body styles={data.length > 0 && { padding: "0 !important" }}>{loading && <Spinner />}{!loading && data.length === 0 ? (<EmptySection message={labels?.datatable_empty} />) : (<List sx={{ maxHeight: "225px", overflow: "auto" }}>{items.map(({ name, profile, image, id }) => (<ListItemkey={id}sx={{ borderTop: `1px solid ${colors.border.primary}` }}><ListItemButton LinkComponent={Link} to={profile} disableRipple><ListItemAvatar><Avatar src={image} alt={`${name} profile avatar`} /></ListItemAvatar><ListItemText primary={name} /></ListItemButton></ListItem>))}</List>)}</Widget.Body></Widget>);};export default SuggestWidget;