/* eslint-disable @next/next/no-img-element */ import Input from "@/components/Low/Input"; import Select from "@/components/Low/Select"; import Tooltip from "@/components/Low/Tooltip"; import {useListSearch} from "@/hooks/useListSearch"; import usePagination from "@/hooks/usePagination"; import {EntityWithRoles} from "@/interfaces/entity"; import {User} from "@/interfaces/user"; import {sessionOptions} from "@/lib/session"; import {USER_TYPE_LABELS} from "@/resources/user"; import {filterBy, mapBy, redirect, serialize} from "@/utils"; import { getEntitiesWithRoles} from "@/utils/entities.be"; import {shouldRedirectHome} from "@/utils/navigation.disabled"; import {getUserName, isAdmin} from "@/utils/users"; import {getEntitiesUsers} from "@/utils/users.be"; import axios from "axios"; import clsx from "clsx"; import {withIronSessionSsr} from "iron-session/next"; import moment from "moment"; import Head from "next/head"; import Link from "next/link"; import {useRouter} from "next/router"; import {Divider} from "primereact/divider"; import {useEffect, useMemo, useState} from "react"; import {BsCheck, BsChevronLeft, BsClockFill, BsEnvelopeFill, BsStopwatchFill} from "react-icons/bs"; import {toast, ToastContainer} from "react-toastify"; import { requestUser } from "@/utils/api"; import { findAllowedEntities } from "@/utils/permissions"; import { capitalize } from "lodash"; export const getServerSideProps = withIronSessionSsr(async ({req, res}) => { const user = await requestUser(req, res) if (!user) return redirect("/login") if (shouldRedirectHome(user)) return redirect("/") const entities = await getEntitiesWithRoles(isAdmin(user) ? undefined : mapBy(user.entities, "id")); const users = await getEntitiesUsers(mapBy(entities, 'id')) const allowedEntities = findAllowedEntities(user, entities, "create_classroom") return { props: serialize({user, entities: allowedEntities, users: users.filter((x) => x.id !== user.id)}), }; }, sessionOptions); interface Props { user: User; users: User[]; entities: EntityWithRoles[]; } export default function Home({user, users, entities}: Props) { const [isLoading, setIsLoading] = useState(false); const [selectedUsers, setSelectedUsers] = useState([]); const [name, setName] = useState(""); const [entity, setEntity] = useState(entities[0]?.id); const entityUsers = useMemo(() => !entity ? users : users.filter(u => mapBy(u.entities, 'id').includes(entity)), [entity, users]) const {rows, renderSearch} = useListSearch( [["name"], ["type"], ["corporateInformation", "companyInformation", "name"]], entityUsers ); const {items, renderMinimal} = usePagination(rows, 16); const router = useRouter(); useEffect(() => setSelectedUsers([]), [entity]) const createGroup = () => { if (!name.trim()) return; if (!entity) return; if (!confirm(`Are you sure you want to create this group with ${selectedUsers.length} participants?`)) return; setIsLoading(true); axios .post<{id: string}>(`/api/groups`, {name, participants: selectedUsers, admin: user.id, entity}) .then((result) => { toast.success("Your group has been created successfully!"); router.replace(`/classrooms/${result.data.id}`); }) .catch((e) => { console.error(e); toast.error("Something went wrong!"); }) .finally(() => setIsLoading(false)); }; const toggleUser = (u: User) => setSelectedUsers((prev) => (prev.includes(u.id) ? prev.filter((p) => p !== u.id) : [...prev, u.id])); return ( <> Create Group | EnCoach <>

Create Classroom

Classroom Name:
Entity: