Rev 3719 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React from 'react';
import { East } from '@mui/icons-material';
import { useAlert, useApi, useModal } from '@shared/hooks';
import {
approveMember,
cancelInvitation,
getGroupMembers,
inviteMember,
rejectMember
} from '@groups/services';
import {
Card,
CardHeader,
CardContent,
CardActions,
Button,
AvatarGroup,
Avatar,
SearchUserModal,
Spinner
} from '@shared/components';
import { MembersModal } from '@groups/components';
export function Members({ uuid = '' }) {
const { showSuccess, showError } = useAlert();
const { showModal, closeModal } = useModal();
const {
data,
loading,
execute: getMembers
} = useApi(getGroupMembers, {
autoFetch: true,
autoFetchArgs: [uuid],
onError: (error) => showError(error.message)
});
const { execute: invite } = useApi(inviteMember, {
onSuccess: (message) => {
showSuccess(message);
getMembers();
},
onError: (error) => {
showError(error.message);
}
});
const { execute: approve } = useApi(approveMember, {
onSuccess: (message) => {
closeModal();
showSuccess(message);
getMembers();
},
onError: (error) => {
showError(error.message);
}
});
const { execute: reject } = useApi(rejectMember, {
onSuccess: (message) => {
closeModal();
showSuccess(message);
getMembers();
},
onError: (error) => {
showError(error.message);
}
});
const { execute: cancel } = useApi(cancelInvitation, {
onSuccess: (message) => {
closeModal();
showSuccess(message);
getMembers();
},
onError: (error) => {
showError(error.message);
}
});
const handleInvite = () => {
showModal(
'Invitar miembros',
<SearchUserModal
renderAction={(user) => (
<Button color='primary' onClick={() => invite(data.link_invite, user.uuid)}>
Invitar
</Button>
)}
/>
);
};
const showMembers = () => {
showModal(
'Miembros',
<MembersModal members={data.items} onApprove={approve} onReject={reject} onCancel={cancel} />
);
};
if (loading || !data) return <Spinner />;
return (
<Card>
<CardHeader title={`${data.items.length} Miembros`} />
<CardContent>
<AvatarGroup max={5}>
{data.items.map(({ name, image, uuid }) => (
<Avatar key={uuid} src={image} alt={name} size={50} />
))}
</AvatarGroup>
{data.link_invite && (
<Button color='primary' onClick={handleInvite} sx={{ marginTop: 1 }}>
Invitar miembros
</Button>
)}
</CardContent>
<CardActions sx={{ padding: 0 }}>
<Button onClick={showMembers} fullWidth sx={{ borderRadius: 0 }}>
Ver más
<East />
</Button>
</CardActions>
</Card>
);
}