Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2945 | Rev 2947 | 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,
          overflow: 'hidden'
        }}
      >
        {items.map(({ id, name, profile, image }) => (
          <List.Item key={id} image={image} title={name} url={profile} />
        ))}

        {data.length > 3 && (
          <List.Item
            title={lookMore ? labels.view_less : labels.view_more}
            onClick={() => setLookMore(!lookMore)}
          />
        )}
      </List>
    </>
  )
}

GroupsWidget.Item = Item

export default GroupsWidget