Rev 2944 | Rev 2946 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useMemo, useState } from 'react'
import { useSelector } from 'react-redux'
import { IconButton, styled, Typography } from '@mui/material'
import { ExpandLess, ExpandMore } from '@mui/icons-material'
import { useFetch } from '@hooks'
import Widget from '@components/UI/Widget'
import List from '@components/UI/List'
const HelperItem = styled('div')`
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
`
const GroupsWidget = () => {
const labels = useSelector(({ intl }) => intl.labels)
return (
<Widget>
<Widget.Body>
<GroupsWidget.Item url='/helpers/my-groups' title={labels.my_groups} />
<GroupsWidget.Item
url='/helpers/groups-suggestion'
title={labels.suggest_groups}
/>
</Widget.Body>
</Widget>
)
}
const Item = ({ url = '/helpers/my-groups', title = 'Mis grupos' }) => {
const [displayMenu, setDisplayMenu] = useState(false)
const [lookMore, setLookMore] = useState(false)
const labels = useSelector(({ intl }) => intl.labels)
const { data } = useFetch(url, [])
const items = useMemo(() => {
if (!lookMore) return [...data].slice(0, 3)
return data
}, [lookMore, data])
const toggleMenu = () => setDisplayMenu(!displayMenu)
return (
<>
<HelperItem>
<Typography variant='overline'>{title}</Typography>
<IconButton onClick={toggleMenu}>
{displayMenu ? <ExpandLess /> : <ExpandMore />}
</IconButton>
</HelperItem>
<List styles={{ width: '100%', height: displayMenu ? 'auto' : 0 }}>
{items.map(({ id, name, profile, image }) => (
<List.Item key={id} image={image} title={name} url={profile} />
))}
{items.length > 3 && (
<List.Item
title={lookMore ? labels.view_less : labels.view_more}
onClick={() => setLookMore(!lookMore)}
/>
)}
</List>
</>
)
}
GroupsWidget.Item = Item
export default GroupsWidget