eventos.tsx
En esta ruta se puede checar los eventos que se han creado y las asistencias y inasistencias de las personas a las que se invitaron.
Se obtiene los eventos de las siguiente manera:
export const getServerSideProps: GetServerSideProps = withPageAuth({
redirectTo: "/login",
async getServerSideProps(context) {
// Access the user object
// Por alguna razon con el supabase de utils no nos da el id del usuario
const supabase = createServerSupabaseClient(context);
const {
data: { session },
} = await supabase.auth.getSession();
// Get the user from the database
const user = await supabase
.from("users")
.select("*")
.eq("id", session?.user?.id)
.single();
// Check if the user is an admin
if (user.data?.role === "admin" || user.data?.role === "mod") {
// Tenemos que obtener todas las personas.
let eventos = await getEventosCount(supabase);
console.log(eventos);
return {
props: {
eventos,
},
};
} else {
console.log("No es admin");
return {
redirect: {
destination: "/",
permanent: false,
},
};
}
},
authRequired: true,
});
Se pasan los eventos a la tabla para seleccionarlo.
<DataGrid
data={eventos}
striped
highlightOnHover
withGlobalFilter
withPagination
withColumnFilters
withSorting
withColumnResizing
onRow={(row) => ({
onClick: async () => {
let { data } = await supabase
.from('event_attendance')
.select('*')
.eq('idevent', row?._valuesCache?.idevent);
let personasAsistieron = data?.filter((item) => item?.asistencia === true);
let personasNoAsistieron = data?.filter((item) => item?.asistencia === false);
setDatosEvento({
...row._valuesCache,
personasAsistieron: personasAsistieron?.length,
personasNoAsistieron: personasNoAsistieron?.length,
});
},
})}
columns={[
{
header: 'idevent',
filterFn: numberFilterFn,
accessorFn: (row) => row?.idevent.id,
},
{
header: 'Nombre',
filterFn: stringFilterFn,
accessorFn: (row) => row?.idevent.nameevent,
},
{
header: 'Fecha',
filterFn: dateFilterFn,
accessorFn: (row) => row?.idevent.dateevent,
},
{
header: 'Personas invitadas',
filterFn: stringFilterFn,
accessorFn: (row) =>
row?.personastotales ? row?.personastotales : 'No se han invitado',
},
{
header: 'Descripcion',
filterFn: stringFilterFn,
accessorFn: (row) => row?.idevent.description,
enableHiding: true,
},
{
header: 'Lugar',
filterFn: stringFilterFn,
accessorFn: (row) => row?.idevent.placeevent,
enableHiding: true,
},
]}
sx={{
td: {
backgroundColor: 'unset',
color: theme.colorScheme === 'dark' ? theme.colors.gray[1] : theme.colors.dark[6],
},
tr: {
'&:hover': {
cursor: 'pointer',
backgroundColor:
theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[5],
},
},
th: {
backgroundColor:
theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[3],
cursor: 'auto',
},
}}
/>
```
Y con el onRow podemos visualizar los datos del evento.
<Eventos
personasAsistieron={datosEventos.personasAsistieron}
personasNoAsistieron={datosEventos.personasNoAsistieron}
/>
Last updated on December 30, 2022