Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7260 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7260 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../utils'
7263 stevensc 3
import styled from 'styled-components'
4
import Avatar from '@mui/material/Avatar'
7260 stevensc 5
import IconButton from '@mui/material/IconButton'
6
import GroupRemoveIcon from '@mui/icons-material/GroupRemove'
7263 stevensc 7
import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'
7260 stevensc 8
 
9
import Spinner from '../UI/Spinner'
10
import LoaderContainer from '../UI/LoaderContainer'
7263 stevensc 11
import WidgetLayout from '../widgets/WidgetLayout'
7260 stevensc 12
 
7263 stevensc 13
const ContactContainer = styled(WidgetLayout)`
14
  padding: 1rem;
15
  position: relative;
16
  flex-grow: 1;
17
  ul {
18
    display: flex;
19
    flex-direction: column;
20
    gap: 0.5rem;
21
    max-height: 300px;
22
    overflow: auto;
23
  }
24
`
25
 
26
const ContactTemplate = styled.div`
27
  display: flex;
28
  align-items: center;
29
  gap: 0.5rem;
30
  h3 {
31
    font-size: 1rem;
32
    color: var(--subtitle-color);
33
  }
34
`
35
 
36
const GroupMembers = ({ group, changeTab }) => {
7260 stevensc 37
  const { url_get_contact_group_list } = group
38
  const [members, setMembers] = useState([])
39
  const [loading, setLoading] = useState(true)
40
 
41
  const getMembers = async () => {
42
    setLoading(true)
43
    const response = await axios.get(url_get_contact_group_list)
7263 stevensc 44
    const { success, data } = response.data
45
    if (!success) {
46
      return
7260 stevensc 47
    }
7263 stevensc 48
    setMembers(data)
7260 stevensc 49
    setLoading(false)
50
  }
51
 
52
  const handleRemoveMember = async (remove_url) => {
53
    setLoading(true)
54
    const response = await axios.post(remove_url)
7263 stevensc 55
    const { success } = response.data
56
    if (!success) {
57
      return
7260 stevensc 58
    }
59
    await getMembers()
60
    setLoading(false)
61
  }
62
 
63
  useEffect(() => {
64
    getMembers()
65
  }, [])
66
 
67
  return (
7263 stevensc 68
    <ContactContainer>
69
      <IconButton onClick={() => changeTab('DEFAULT')}>
70
        <ArrowBackIosIcon />
71
      </IconButton>
7260 stevensc 72
      <ul>
73
        {members.map((member, i) => (
74
          <li key={i}>
75
            <GroupMembers.Item
76
              {...member}
77
              onClick={() => handleRemoveMember(member.url_remove_from_group)}
78
            />
79
          </li>
80
        ))}
81
      </ul>
82
      {loading && (
83
        <LoaderContainer>
84
          <Spinner />
85
        </LoaderContainer>
86
      )}
7263 stevensc 87
    </ContactContainer>
7260 stevensc 88
  )
89
}
90
 
91
const Item = ({ image, name, onClick }) => {
92
  return (
7263 stevensc 93
    <ContactTemplate>
94
      <Avatar src={image} alt="user_image" />
7260 stevensc 95
      <span>{name}</span>
96
      <IconButton onClick={onClick}>
97
        <GroupRemoveIcon />
98
      </IconButton>
7263 stevensc 99
    </ContactTemplate>
7260 stevensc 100
  )
101
}
102
 
103
GroupMembers.Item = Item
104
 
105
export default GroupMembers