diff --git a/src/app/equipo/page.tsx b/src/app/equipo/page.tsx index 7815a52..850f12c 100644 --- a/src/app/equipo/page.tsx +++ b/src/app/equipo/page.tsx @@ -3,38 +3,40 @@ import { css, cx } from '@/styled-system/css' import { Container } from '@/styled-system/jsx' import { center } from '@/styled-system/patterns' import { button, card } from '@/styled-system/recipes' -import { getClanMembers, getClanes } from 'entgamers-database/backend/clanes' -import { getUser, type UserWithPreferencesList } from 'entgamers-database/backend/users' +import { getClanMembers } from 'entgamers-database/backend/clanes' +import { ADMIN_CLAN_ID, COLLABORATOR_CLAN_ID, MODERATOR_CLAN_ID, ensureAdministrativeClans } from 'entgamers-database/backend/clanes/administrative' +import { getUser, type UserList } from 'entgamers-database/backend/users' import NextImage from 'next/image' import NextLink from 'next/link' import { type Models } from 'node-appwrite' import { type FC } from 'react' interface GetTeamsResponse { - admins: UserWithPreferencesList - moderators: UserWithPreferencesList - collaborators: UserWithPreferencesList + admins: UserList & { id: string } + moderators: UserList & { id: string } + collaborators: UserList & { id: string } } const getTeams = async (): Promise => { - const allClanes = await getClanes() - const adminClanId = allClanes.teams.find(clan => clan.name === 'Admin')?.$id - const moderatorClanId = allClanes.teams.find(clan => clan.name === 'Moderator')?.$id - const collaboratorClanId = allClanes.teams.find(clan => clan.name === 'Collaborator')?.$id - const adminMembers: Models.MembershipList = adminClanId !== undefined ? await getClanMembers(adminClanId) : { total: 0, memberships: [] } - const moderatorMembers: Models.MembershipList = moderatorClanId !== undefined ? await getClanMembers(moderatorClanId) : { total: 0, memberships: [] } - const collaboratorMembers: Models.MembershipList = collaboratorClanId !== undefined ? await getClanMembers(collaboratorClanId) : { total: 0, memberships: [] } + await ensureAdministrativeClans() + + const adminMembers: Models.MembershipList = await getClanMembers(ADMIN_CLAN_ID) + const moderatorMembers: Models.MembershipList = await getClanMembers(MODERATOR_CLAN_ID) + const collaboratorMembers: Models.MembershipList = await getClanMembers(COLLABORATOR_CLAN_ID) + const adminsPromises = adminMembers.memberships.map(async membership => await getUser(membership.userId)) const moderatorsPromises = moderatorMembers.memberships.map(async membership => await getUser(membership.userId)) const collaboratorsPromises = collaboratorMembers.memberships.map(async membership => await getUser(membership.userId)) + const [admins, moderators, collaborators] = await Promise.all([ Promise.all(adminsPromises), Promise.all(moderatorsPromises), Promise.all(collaboratorsPromises) ]) - return { admins: { total: admins.length, users: admins }, moderators: { total: moderators.length, users: moderators }, collaborators: { total: collaborators.length, users: collaborators } } + + return { admins: { id: ADMIN_CLAN_ID, total: admins.length, users: admins }, moderators: { id: MODERATOR_CLAN_ID, total: moderators.length, users: moderators }, collaborators: { id: COLLABORATOR_CLAN_ID, total: collaborators.length, users: collaborators } } } const EquipoPage: FC = async () => { - const { admins } = await getTeams() + const { admins, moderators, collaborators } = await getTeams() return ( Equipo @@ -90,87 +92,77 @@ const EquipoPage: FC = async () => { ) : ( - <> - - Ups, parece que ahora mismo no hay administradores, pero en EntGamers siempre estamos estamos buscando gente que quiera organizar cosas para la comunidad, puedes contactarnos para formar parte de nuestro equipo haciendo click en el siguiente enlace. - - + + Ups, parece que ahora mismo no hay administradores, pero en EntGamers siempre estamos estamos buscando gente que quiera organizar cosas para la comunidad, puedes contactarnos para formar parte de nuestro equipo haciendo click en el siguiente enlace. + ) }
¡Quiero ser Administrador!
- {/* - {team.map((member, index) => ( -
-
- -
-
-

{member.name}

-

{member.description}

-
- {member.socialNetworks.map((socialNetwork, index) => ( - - - - ))} -
-
-
- ))} -
*/} Moderadores Los moderadores son los encargados de mantener el orden en los grupos de la comunidad, así como de ayudar a los usuarios a resolver sus dudas. - - Ups, parece que ahora mismo no hay moderadores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser moderador, puedes hacer click en el botón de abajo. - + {moderators.total >= 1 + ? ( + + {moderators.users.map((user, index) => ( +
+
+ +
+
+ {user.name !== '' ? user.name : `Usuario ${index + 1}`} + {user.prefs.bio !== undefined && user.prefs.bio !== '' && ( + {user.prefs.bio} + )} +
+
+ ))} +
+ ) + : ( + + Ups, parece que ahora mismo no hay moderadores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser moderador, puedes hacer click en el botón de abajo. + + ) + }
¡Quiero ser moderador! @@ -179,13 +171,60 @@ const EquipoPage: FC = async () => { Los colaboradores son los encargados de crear contenido para la comunidad, como artículos, tutoriales, vídeos, eventos etc. - - Ups, parece que ahora mismo no hay colaboradores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser colaborador, puedes hacer click en el botón de abajo. - + {collaborators.total >= 1 + ? ( + + {collaborators.users.map((user, index) => ( +
+
+ +
+
+ {user.name !== '' ? user.name : `Usuario ${index + 1}`} + {user.prefs.bio !== undefined && user.prefs.bio !== '' && ( + {user.prefs.bio} + )} +
+
+ ))} +
+ ) + : ( + + Ups, parece que ahora mismo no hay colaboradores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser colaborador, puedes hacer click en el botón de abajo. + + ) + }
¡Quiero ser colaborador! @@ -193,4 +232,5 @@ const EquipoPage: FC = async () => { ) } + export default EquipoPage diff --git a/src/app/equipo/unirse/ApplyForm.tsx b/src/app/equipo/unirse/ApplyForm.tsx index 3ade809..a4c6461 100644 --- a/src/app/equipo/unirse/ApplyForm.tsx +++ b/src/app/equipo/unirse/ApplyForm.tsx @@ -11,6 +11,7 @@ import { teamApplicationDataSchema, type TeamApplicationData } from '@/utilities import { faChevronRight } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon, type FontAwesomeIconProps } from '@fortawesome/react-fontawesome' import { nanoid } from '@reduxjs/toolkit' +import { ADMIN_CLAN_ID, COLLABORATOR_CLAN_ID, MODERATOR_CLAN_ID } from 'entgamers-database/frontend/clanes/administrative' import { useFormik } from 'formik' import { AnimatePresence, motion } from 'framer-motion' import { useSearchParams } from 'next/navigation' @@ -90,31 +91,31 @@ const ApplyForm: FC = () => {