| 3719 |
stevensc |
1 |
import React, { useState } from 'react';
|
|
|
2 |
import { useDispatch } from 'react-redux';
|
|
|
3 |
import { Avatar, AvatarGroup, Button } from '@mui/material';
|
|
|
4 |
import { East } from '@mui/icons-material';
|
|
|
5 |
|
|
|
6 |
import { axios } from '@utils';
|
|
|
7 |
import { useFetch } from '@hooks';
|
|
|
8 |
import { addNotification } from '@store/notification/notification.actions';
|
|
|
9 |
|
|
|
10 |
import Widget from '@components/UI/Widget';
|
|
|
11 |
import MembersModal from '@components/modals/MembersModal';
|
|
|
12 |
import AddMemberModal from '@components/modals/AddMemberModal';
|
|
|
13 |
|
|
|
14 |
const Members = ({ id = '' }) => {
|
|
|
15 |
const {
|
|
|
16 |
data: { items: members, link_invite: linkInvite },
|
|
|
17 |
refetch
|
|
|
18 |
} = useFetch(`/helpers/group-members/${id}`);
|
|
|
19 |
|
|
|
20 |
const [addModalShow, setAddModalShow] = useState(false);
|
|
|
21 |
const [showMembersModal, setShowMembersModal] = useState(false);
|
|
|
22 |
|
|
|
23 |
const dispatch = useDispatch();
|
|
|
24 |
|
|
|
25 |
const handleAction = (url) => {
|
|
|
26 |
const params = new FormData();
|
|
|
27 |
axios
|
|
|
28 |
.post(url, params)
|
|
|
29 |
.then((response) => {
|
|
|
30 |
const { data, success } = response.data;
|
|
|
31 |
|
|
|
32 |
if (!success) {
|
|
|
33 |
throw new Error(data);
|
|
|
34 |
}
|
|
|
35 |
|
|
|
36 |
dispatch(addNotification({ style: 'success', msg: data }));
|
|
|
37 |
})
|
|
|
38 |
.then(() => refetch())
|
|
|
39 |
.catch((err) => {
|
|
|
40 |
dispatch(addNotification({ style: 'danger', msg: err.message }));
|
|
|
41 |
});
|
|
|
42 |
};
|
|
|
43 |
|
|
|
44 |
const toggleAddMemberModal = () => setAddModalShow(!addModalShow);
|
|
|
45 |
|
|
|
46 |
const toggleMembersModal = () => setShowMembersModal(!showMembersModal);
|
|
|
47 |
|
|
|
48 |
return (
|
|
|
49 |
<>
|
|
|
50 |
<Widget>
|
|
|
51 |
<Widget.Header title={`${members?.length ?? 0} Miembros`} />
|
|
|
52 |
|
|
|
53 |
<Widget.Body>
|
|
|
54 |
<AvatarGroup max={5}>
|
|
|
55 |
{members?.map(({ name, image }) => (
|
|
|
56 |
<Avatar key={name} src={image} alt={name} />
|
|
|
57 |
))}
|
|
|
58 |
</AvatarGroup>
|
|
|
59 |
{linkInvite && (
|
|
|
60 |
<Button color='primary' onClick={toggleAddMemberModal} sx={{ marginTop: 1 }}>
|
|
|
61 |
Invitar miembros
|
|
|
62 |
</Button>
|
|
|
63 |
)}
|
|
|
64 |
</Widget.Body>
|
|
|
65 |
<Widget.Actions styles={{ padding: 0 }}>
|
|
|
66 |
<Button onClick={toggleMembersModal} fullWidth sx={{ borderRadius: 0 }}>
|
|
|
67 |
Ver más
|
|
|
68 |
<East />
|
|
|
69 |
</Button>
|
|
|
70 |
</Widget.Actions>
|
|
|
71 |
</Widget>
|
|
|
72 |
<AddMemberModal
|
|
|
73 |
isShow={addModalShow}
|
|
|
74 |
handleClose={toggleAddMemberModal}
|
|
|
75 |
linkInvite={linkInvite}
|
|
|
76 |
/>
|
|
|
77 |
<MembersModal
|
|
|
78 |
isShow={showMembersModal}
|
|
|
79 |
handleClose={toggleMembersModal}
|
|
|
80 |
members={members}
|
|
|
81 |
handleAction={handleAction}
|
|
|
82 |
/>
|
|
|
83 |
</>
|
|
|
84 |
);
|
|
|
85 |
};
|
|
|
86 |
|
|
|
87 |
export default Members;
|