diff --git a/front-end/src/api/use-tournament-data.ts b/front-end/src/api/use-tournament-data.ts index 0944f249..1ff96f45 100644 --- a/front-end/src/api/use-tournament-data.ts +++ b/front-end/src/api/use-tournament-data.ts @@ -1,16 +1,21 @@ import { apiFetcher, clientFetcher } from '@toa-lib/client'; -import { Tournament, tournamentZod } from '@toa-lib/models'; +import { Tournament, toTournamentJSON, tournamentZod } from '@toa-lib/models'; import useSWR from 'swr'; export const postTournaments = async ( tournaments: Tournament[] -): Promise => clientFetcher('tournament', 'POST', tournaments); +): Promise => + clientFetcher( + 'tournament', + 'POST', + tournaments.map((t) => toTournamentJSON(t)) + ); export const patchTournament = async (tournament: Tournament): Promise => clientFetcher( `tournament/${tournament.eventKey}/${tournament.tournamentKey}`, 'POST', - tournament + toTournamentJSON(tournament) ); export const useTournamentsForEvent = (eventKey: string | null | undefined) => diff --git a/front-end/src/apps/TournamentManager/TournamentManager.tsx b/front-end/src/apps/TournamentManager/TournamentManager.tsx deleted file mode 100644 index 7570fadd..00000000 --- a/front-end/src/apps/TournamentManager/TournamentManager.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { FC } from 'react'; -import Box from '@mui/material/Box'; -import Typography from '@mui/material/Typography'; -import PaperLayout from '@layouts/PaperLayout'; -import Tournaments from './components/Tournaments'; -import TournamentForm from 'src/components/forms/TournamentForm/TournamentForm'; -import { useRecoilState, useSetRecoilState } from 'recoil'; -import { - currentTournamentKeyAtom, - currentTournamentSelector -} from 'src/stores/NewRecoil'; -import { Tournament } from '@toa-lib/models'; - -const TournamentManager: FC = () => { - const [tournamentKey, setTournamentKey] = useRecoilState( - currentTournamentKeyAtom - ); - const setTournament = useSetRecoilState(currentTournamentSelector); - - const handleSubmit = (tournament: Tournament) => { - setTournament(tournament); - setTournamentKey(null); - }; - - return ( - Tournament Manager} - padding - > - theme.spacing(2) }}> - {!tournamentKey && } - {tournamentKey && } - - - ); -}; - -export default TournamentManager; diff --git a/front-end/src/apps/TournamentManager/components/Tournaments.tsx b/front-end/src/apps/TournamentManager/components/Tournaments.tsx deleted file mode 100644 index 8a9bc7ce..00000000 --- a/front-end/src/apps/TournamentManager/components/Tournaments.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { FC, useState } from 'react'; -import UpgradedTable from 'src/components/tables/UpgradedTable/UpgradedTable'; -import { - useRecoilCallback, - useRecoilState, - useRecoilValue, - useSetRecoilState -} from 'recoil'; -import { - currentEventSelector, - currentTournamentKeyAtom, - tournamentsByEventAtomFam, - tournamentsByEventSelectorFam -} from 'src/stores/NewRecoil'; -import { defaultTournament, Tournament } from '@toa-lib/models'; -import { getDifferences, removeFromArray } from 'src/stores/Util'; -import { useModal } from '@ebay/nice-modal-react'; -import TournamentRemovalDialog from 'src/components/dialogs/TournamentRemovalDialog'; -import { patchTournament, postTournaments } from 'src/api/use-tournament-data'; -import { useSnackbar } from 'src/hooks/use-snackbar'; -import { useFlags } from 'src/stores/AppFlags'; -import SaveAddUploadLoadingFab from 'src/components/util/SaveAddUploadLoadingFab'; -import ViewReturn from 'src/components/buttons/ViewReturn/ViewReturn'; - -const Tournaments: FC = () => { - // Recoil State - const event = useRecoilValue(currentEventSelector); - const [tournaments, setTournaments] = useRecoilState( - tournamentsByEventAtomFam(event?.eventKey ?? '') - ); - const setTournamentKey = useSetRecoilState(currentTournamentKeyAtom); - - // Local State - const [loading, setLoading] = useState(false); - - // Custom Hooks - const { showSnackbar } = useSnackbar(); - const [flags, setFlags] = useFlags(); - - // Dialogs - const removeModal = useModal(TournamentRemovalDialog); - - const handlePost = useRecoilCallback(({ snapshot }) => async () => { - try { - if (!event) return; - // The following logic takes the differences and uploads the new objects. - const prevTournaments = await snapshot.getPromise( - tournamentsByEventSelectorFam(event.eventKey) - ); - const diffs = getDifferences( - tournaments, - prevTournaments, - 'tournamentKey' - ); - setLoading(true); - if (diffs.additions.length > 0) { - await postTournaments(diffs.additions); - } - for (const tournament of diffs.edits) { - await patchTournament(tournament); - } - await setFlags('createdTournaments', [ - ...flags.createdTournaments, - event.eventKey - ]); - setLoading(false); - showSnackbar( - `(${ - diffs.additions.length + diffs.edits.length - }) Tournaments successfully created` - ); - } catch (e) { - const error = e instanceof Error ? `${e.name} ${e.message}` : String(e); - setLoading(false); - showSnackbar('Error while uploading tournaments.', error); - } - }); - - const handleCreate = () => { - if (!event) return; - const { eventKey } = event; - setTournaments((prev) => [ - { - ...defaultTournament, - eventKey, - tournamentKey: tournaments.length.toString() - }, - ...prev - ]); - }; - - const handleModify = (t: Tournament) => { - setTournamentKey(t.tournamentKey); - }; - - const handleDelete = async (t: Tournament) => { - const confirm = await removeModal.show({ tournament: t }); - if (confirm) { - setTournaments( - removeFromArray(tournaments, 'tournamentKey', t.tournamentKey) - ); - } - }; - - return ( - <> - - - { - if (!event) return []; - const { eventName } = event; - const fields = `[${t.fields.toString().replaceAll(',', ', ')}]`; - return [ - eventName, - t.tournamentKey, - t.name, - t.tournamentLevel, - fields - ]; - }} - onModify={handleModify} - onDelete={handleDelete} - /> - - ); -}; - -export default Tournaments; diff --git a/front-end/src/apps/TournamentManager/index.ts b/front-end/src/apps/TournamentManager/index.ts deleted file mode 100644 index 33f8e152..00000000 --- a/front-end/src/apps/TournamentManager/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TournamentManager from './TournamentManager'; - -export default TournamentManager;