Untitled
unknown
javascript
2 years ago
5.1 kB
7
Indexable
import { useEffect, useState } from "react"; import { Convite } from "../../types/types"; import { Button, LinearProgress, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, ThemeProvider, createTheme, Box, AlertColor } from "@mui/material"; import TableToolbar from "../TableToolbar/TableToolbar"; import { SpaceBar } from "@mui/icons-material"; export type AdminConviteProps = { setAlert: (alert: { message: string; severity: AlertColor | undefined }) => void; }; function AdminConvites(props: AdminConviteProps) { const [convites, setConvites] = useState<Convite[]>(); const handleAprovarOuNegar = async(convite:Convite, situacao:Boolean) => { const apiBaseUrl = import.meta.env.VITE_API_BASE_URL const sendData = { accept: situacao, communityId: convite.communityId, userEmail: convite.userEmail }; try { const token = localStorage.getItem("vigilancia-token"); const apiRequestUrl = `${apiBaseUrl}/admin`; const requestConfig = { method: "PUT", headers: { Authorization: token ?? "", 'Content-Type': 'application/json', }, body: JSON.stringify(sendData), }; const response = await fetch(apiRequestUrl, requestConfig); setConvites(convites); if (response.ok) { if(situacao){ props.setAlert({ message: "Aprovado com sucesso!", severity: "success" }); } else{ props.setAlert({ message: "Negado com sucesso!", severity: "success" }); } } else { props.setAlert({ message: "Erro ao realizar operação!", severity: "error", }); return; } } catch (error) { alert(`Erro ao efetuar ação: ${error}`); } } const columns = [ { title: "Id comunidade", selector: "communityId", }, { title: "Nome comunidade", selector: "communityName", }, { title: "Nome usuário", selector: "userName", }, { title: "Email usuário", selector: "userEmail", }, { title: "Aprovar/Negar", selector: "status", } ]; useEffect(() => { const getConvites = async () => { const apiBaseUrl = import.meta.env.VITE_API_BASE_URL; try { const token = localStorage.getItem("vigilancia-token"); const requestConfig = { method: "GET", headers: { Authorization: token ?? "", }, }; const requestUrl = `${apiBaseUrl}/admin/invites`; const response = await fetch(requestUrl, requestConfig); const data = await response.json(); setConvites(data); } catch (error) { console.error(error); } } getConvites(); }, [convites]); const theme = createTheme({ palette: { secondary: { main: '#3C096C' } } }); return ( <TableContainer component={Paper} sx={{ height: "100%" }}> {!convites ? <ThemeProvider theme={theme}> <LinearProgress color="secondary" /> </ThemeProvider> : <> <TableToolbar title={"Convites pendentes"} /> <Table> <TableHead> <TableRow> {columns.map(column => ( <TableCell key={column.title}>{column.title}</TableCell> ))} </TableRow> </TableHead> <TableBody> {convites.map(convite => ( <TableRow key={convite.userEmail}> {columns.map(column => ( column.title == "Aprovar/Negar"? <TableCell key={column.title}> <Box> <Button variant="contained" color="success" onClick={() => handleAprovarOuNegar(convite, true)} > Aprovar </Button> <SpaceBar sx={{ width: 4 }} /> <Button variant="contained" color="error" onClick={() => handleAprovarOuNegar(convite, false)} > Negar </Button> </Box> </TableCell> : <TableCell key={column.title}>{convite[column.selector as keyof Convite]}</TableCell> ))} </TableRow> ))} </TableBody> </Table> </> } </TableContainer> ) } export default AdminConvites;
Editor is loading...
Leave a Comment