/* eslint-disable @next/next/no-img-element */ import Input from "@/components/Low/Input"; import Tooltip from "@/components/Low/Tooltip"; import { useListSearch } from "@/hooks/useListSearch"; import usePagination from "@/hooks/usePagination"; import { Entity } from "@/interfaces/entity"; import { User } from "@/interfaces/user"; import { sessionOptions } from "@/lib/session"; import { USER_TYPE_LABELS } from "@/resources/user"; import { redirect, serialize } from "@/utils"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getUserName } from "@/utils/users"; import { getUsers } 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 { useState } from "react"; import { BsCheck, BsChevronLeft, BsClockFill, BsEnvelopeFill, BsStopwatchFill, } from "react-icons/bs"; import { toast, ToastContainer } from "react-toastify"; import { requestUser } from "@/utils/api"; export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => { const user = await requestUser(req, res); if (!user) return redirect("/login"); if (shouldRedirectHome(user)) return redirect("/"); if (!["admin", "developer"].includes(user.type)) return redirect("/entities"); const users = await getUsers( { id: { $ne: user.id } }, 0, {}, { _id: 0, id: 1, name: 1, type: 1, profilePicture: 1, email: 1, lastLogin: 1, subscriptionExpirationDate: 1, } ); return { props: serialize({ user, users }), }; }, sessionOptions); interface Props { user: User; users: User[]; } export default function Home({ user, users }: Props) { const [isLoading, setIsLoading] = useState(false); const [selectedUsers, setSelectedUsers] = useState([]); const [label, setLabel] = useState(""); const [licenses, setLicenses] = useState(0); const { rows, renderSearch } = useListSearch( [["name"], ["corporateInformation", "companyInformation", "name"]], users ); const { items, renderMinimal } = usePagination(rows, 16); const router = useRouter(); const createGroup = () => { if (!label.trim()) return; if ( !confirm( `Are you sure you want to create this entity with ${selectedUsers.length} members?` ) ) return; setIsLoading(true); axios .post(`/api/entities`, { label, licenses, members: selectedUsers, }) .then((result) => { toast.success("Your entity has been created successfully!"); router.replace(`/entities/${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 Entity | EnCoach <>

Create Entity

Entity Label:
Licenses: setLicenses(parseInt(v))} type="number" placeholder="12" />
Members ({selectedUsers.length} selected):
{renderSearch()} {renderMinimal()}
{items.map((u) => ( ))}
); }