import { NotifyContext, TranslateContext } from "#/Modules/context"; import { Autocomplete, Box, Button, Checkbox, FormControlLabel, InputAdornment, TextField, } from "@mui/material"; import { ReactNode, SyntheticEvent, useContext, useState } from "react"; import { UserChip } from "./Username"; import { BoxTypeMap } from "@mui/system"; import { useRouter } from "next/router"; import { leagueSettings as leagueSettingsDB } from "#/types/database"; import { useSession } from "next-auth/react"; export interface AdminUserData { user: number; admin: number; } export interface AdminPanelProps { league: number; leagueName: string; setLeagueName: (name: string) => void; admin: boolean; leagueSettings: leagueSettingsDB; adminUsers: AdminUserData[]; } /** * Renders the admin panel or a view only panel of the settings based on the given props. * * @param {AdminPanelProps} props - The props for the admin panel. * @return {ReactNode} The rendered admin panel component. */ export default function AdminPanel(props: AdminPanelProps): ReactNode { if (props.admin && !props.leagueSettings.archived) { return ; } else { return ; } } function AdminPanelAdmin({ league, leagueName, setLeagueName, leagueSettings, adminUsers, }: AdminPanelProps) { const notify = useContext(NotifyContext); const t = useContext(TranslateContext); const data = useSession().data?.user; const userid = data?.id; const username = data?.username; const [startingMoney, setStartingMoney] = useState( leagueSettings.startMoney / 1000000, ); const [users, setUsers] = useState(adminUsers); // Checks if the user is removing themselves from being an admin const removingSelfFromAdmin = !!userid && !users.every((user) => user.user !== userid || user.admin); const [transfers, setTransfers] = useState(leagueSettings.transfers); const [duplicatePlayers, setDuplicatePlayers] = useState( leagueSettings.duplicatePlayers, ); const [starredPercentage, setStarredPercentage] = useState( leagueSettings.starredPercentage, ); const [confirmationAdmin, setConfirmationAdmin] = useState(""); const [archive, setArchive] = useState(false); const [confirmationArchive, setConfirmationArchive] = useState(""); const [matchdayTransfers, setMatchdayTransfers] = useState( Boolean(leagueSettings.matchdayTransfers), ); const [top, setTop] = useState(Boolean(leagueSettings.top11)); const [fantasyEnabled, setFantasyEnabled] = useState( Boolean(leagueSettings.fantasyEnabled), ); const [predictionsEnabled, setPredictionsEnabled] = useState( Boolean(leagueSettings.predictionsEnabled), ); const [predictWinner, setPredictWinner] = useState( leagueSettings.predictWinner, ); const [predictDifference, setPredictDifference] = useState( leagueSettings.predictDifference, ); const [predictExact, setPredictExact] = useState(leagueSettings.predictExact); const Router = useRouter(); return ( <>

{t("Admin Panel")}

{t("League Type Used: {leagueType}", { leagueType: t(leagueSettings.league), })}

{ // Used to change the invite link setLeagueName(val.target.value); }} value={leagueName} />
{t("Enable Fantasy Manager")}} control={ { setFantasyEnabled((e) => !e); }} /> } />
{!!fantasyEnabled && ( <> { setStartingMoney(parseInt(val.target.value)); }} value={startingMoney} />
{ setTransfers(parseInt(val.target.value)); }} value={transfers} />
{ setDuplicatePlayers(parseInt(val.target.value)); }} value={duplicatePlayers} />

%, }, }} type="number" onChange={(val) => { setStarredPercentage(parseFloat(val.target.value)); }} value={starredPercentage} />

{ setMatchdayTransfers((e) => !e); }} /> } />
{ setTop((e) => !e); }} /> } />
)} {t("Enable Predictions")}} control={ { setPredictionsEnabled((e) => !e); }} /> } />
{!!predictionsEnabled && ( <> { setPredictWinner(parseInt(val.target.value)); }} value={predictWinner} />
{ setPredictDifference(parseInt(val.target.value)); }} value={predictDifference} />
{ setPredictExact(parseInt(val.target.value)); }} value={predictExact} />
)} sx={{ width: "99%" }} multiple id="admins" options={users} freeSolo value={users.filter((e) => e.admin)} renderValue={(value, getItemProps) => value.map((option, index) => { const userid = typeof option === "string" ? parseInt(option) : option.user; return ( ); }) } onChange={( e: SyntheticEvent, value: readonly (string | AdminUserData)[], ): void => { const admins = value.map((e) => (typeof e === "string" ? e : e.user)); setUsers((e2) => { // Updates the value for all of the users e2.forEach((e3) => { e3.admin = +admins.includes(e3.user); }); return [...e2]; }); }} renderOption={(props, option: AdminUserData) => { const newprops = props as unknown as BoxTypeMap; return ( ); }} getOptionLabel={(option) => typeof option === "string" ? option : String(option.user) } renderInput={(params) => ( )} /> {removingSelfFromAdmin && ( <> { setConfirmationAdmin(e.target.value); }} value={confirmationAdmin} />
)} { setArchive((e) => !e); }} /> } />
{archive && ( { setConfirmationArchive(e.target.value); }} value={confirmationArchive} /> )}



); } function AdminPanelView({ leagueSettings }: AdminPanelProps) { const t = useContext(TranslateContext); return ( <>

{t("Settings")}

{t("League Type Used: {leagueType}", { leagueType: t(leagueSettings.league), })}

{leagueSettings.fantasyEnabled ? t("Fantasy is Enabled") : t("Fantasy is Disabled")}

{leagueSettings.fantasyEnabled && ( <>

{t("Starting money : {amount} M", { amount: leagueSettings.startMoney / 1000000, })}

{t("Transfer limit : {amount}", { amount: leagueSettings?.transfers, })}

{t("Amount of squads a player can be in : {duplicatePlayers}", { duplicatePlayers: leagueSettings?.duplicatePlayers, })}

{t("Point boost for starred players : {starBoost}%", { starBoost: leagueSettings.starredPercentage, })}

{t("Transfers on matchdays are {allowed}", { allowed: leagueSettings.matchdayTransfers ? t("Allowed") : t("Forbidden"), })}

{t("Top 11 is {enabled}", { enabled: leagueSettings.top11 ? t("enabled") : t("disabled"), })}

)}

{leagueSettings.predictionsEnabled ? t("Predictions are Enabled") : t("Predictions are Disabled")}

{leagueSettings.predictionsEnabled && ( <>

{t("{label}: {value}", { label: t("Points for Predicting Winner"), value: leagueSettings.predictWinner, })}

{t("{label}: {value}", { label: t("Points for Predicting Goal Difference"), value: leagueSettings.predictDifference, })}

{t("{label}: {value}", { label: t("Points for Predicting Exact Score"), value: leagueSettings.predictExact, })}

)} {Boolean(leagueSettings.archived) && (

{t( "This league is {archived}", leagueSettings.archived ? { archived: t("archived") } : { archived: t("not archived") }, )}

)} ); }