From ffaeb874637bc3f344ad66bf512f29685922afe7 Mon Sep 17 00:00:00 2001 From: Erik Vroon <11857441+evroon@users.noreply.github.com> Date: Sat, 20 Dec 2025 20:19:17 +0100 Subject: [PATCH] Use hey api more (#1480) --- frontend/package.json | 4 +- frontend/src/components/brackets/brackets.tsx | 16 ++++---- frontend/src/components/brackets/courts.tsx | 6 +-- frontend/src/components/brackets/match.tsx | 4 +- frontend/src/components/brackets/round.tsx | 6 +-- frontend/src/components/builder/builder.tsx | 5 +-- .../src/components/buttons/create_stage.tsx | 2 +- .../components/card_tables/tournaments.tsx | 2 +- frontend/src/components/dashboard/layout.tsx | 4 +- frontend/src/components/forms/user.tsx | 4 +- frontend/src/components/info/player_list.tsx | 4 +- .../modals/activate_next_stage_modal.tsx | 4 +- .../modals/activate_previous_stage_modal.tsx | 3 +- .../components/modals/create_stage_item.tsx | 2 +- .../src/components/modals/match_modal.tsx | 6 +-- .../components/modals/player_update_modal.tsx | 2 +- .../src/components/modals/round_modal.tsx | 6 +-- .../components/modals/team_create_modal.tsx | 2 +- .../components/modals/team_update_modal.tsx | 7 ++-- .../components/modals/tournament_modal.tsx | 3 +- .../src/components/modals/update_stage.tsx | 2 +- .../components/modals/update_stage_item.tsx | 3 +- .../src/components/scheduling/scheduling.tsx | 6 +-- .../scheduling/settings/ladder_fixed.tsx | 7 +--- .../src/components/select/ranking_select.tsx | 2 +- frontend/src/components/tables/players.tsx | 2 +- frontend/src/components/tables/teams.tsx | 8 ++-- .../components/tables/upcoming_matches.tsx | 6 +-- frontend/src/components/utils/file_upload.tsx | 5 +-- frontend/src/interfaces/player.tsx | 12 ------ frontend/src/interfaces/ranking.tsx | 10 ----- frontend/src/interfaces/round.tsx | 2 +- frontend/src/interfaces/stage_item.tsx | 4 +- frontend/src/interfaces/stage_item_input.tsx | 6 +-- frontend/src/interfaces/team.tsx | 15 -------- frontend/src/interfaces/tournament.tsx | 15 -------- frontend/src/interfaces/user.tsx | 17 --------- .../src/pages/tournaments/[id]/rankings.tsx | 11 ++++-- .../src/pages/tournaments/[id]/settings.tsx | 9 ++--- .../pages/tournaments/[id]/stages/index.tsx | 7 +++- .../[id]/stages/swiss/[stage_item_id].tsx | 12 +++--- frontend/src/pages/tournaments/[id]/teams.tsx | 4 +- .../pages/tournaments/_tournament_layout.tsx | 4 +- frontend/src/services/adapter.tsx | 38 +++++++++++++------ frontend/src/services/lookups.tsx | 7 ++-- frontend/src/services/ranking.tsx | 6 +-- frontend/src/services/tournament.tsx | 2 +- frontend/src/services/user.tsx | 6 +-- 48 files changed, 134 insertions(+), 186 deletions(-) delete mode 100644 frontend/src/interfaces/player.tsx delete mode 100644 frontend/src/interfaces/ranking.tsx delete mode 100644 frontend/src/interfaces/team.tsx delete mode 100644 frontend/src/interfaces/user.tsx diff --git a/frontend/package.json b/frontend/package.json index a8d8ada7..ee07adc0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,8 +10,8 @@ "start": "vite start", "typecheck": "tsc", "export": "vite build && vite export", - "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", - "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", + "prettier:check": "prettier --list-different --check \"**/*.{ts,tsx}\"", + "prettier:write": "prettier --list-different --write \"**/*.{ts,tsx}\"", "test": "tsc && pnpm run prettier:write" }, "dependencies": { diff --git a/frontend/src/components/brackets/brackets.tsx b/frontend/src/components/brackets/brackets.tsx index dc0f0f01..07e37100 100644 --- a/frontend/src/components/brackets/brackets.tsx +++ b/frontend/src/components/brackets/brackets.tsx @@ -18,15 +18,16 @@ import { MdOutlineAutoFixHigh } from 'react-icons/md'; import { SWRResponse } from 'swr'; import { BracketDisplaySettings } from '../../interfaces/brackets'; -import { RoundInterface } from '../../interfaces/round'; +import { Round } from '../../interfaces/round'; import { StageItemWithRounds } from '../../interfaces/stage_item'; -import { Tournament, TournamentMinimal } from '../../interfaces/tournament'; +import { TournamentMinimal } from '../../interfaces/tournament'; +import { Tournament } from '../../openapi'; import { createRound } from '../../services/round'; import ActivateNextRoundModal from '../modals/activate_next_round_modal'; import { NoContent } from '../no_content/empty_table_info'; import { Translator } from '../utils/types'; import { responseIsValid } from '../utils/util'; -import Round from './round'; +import RoundComponent from './round'; function AddRoundButton({ t, @@ -86,12 +87,9 @@ export function RoundsGridCols({ let result: React.JSX.Element[] | React.JSX.Element = stageItem.rounds .sort((r1: any, r2: any) => (r1.name > r2.name ? 1 : -1)) - .filter( - (round: RoundInterface) => - round.matches.length > 0 || displaySettings.matchVisibility === 'all' - ) - .map((round: RoundInterface) => ( - round.matches.length > 0 || displaySettings.matchVisibility === 'all') + .map((round: Round) => ( + ; swrRankingsPerStageItemResponse: SWRResponse; rankings: Ranking[]; }) { diff --git a/frontend/src/components/buttons/create_stage.tsx b/frontend/src/components/buttons/create_stage.tsx index f3b3aa9f..dffc3d82 100644 --- a/frontend/src/components/buttons/create_stage.tsx +++ b/frontend/src/components/buttons/create_stage.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { Tournament } from '../../interfaces/tournament'; +import { Tournament } from '../../openapi'; import { createStage } from '../../services/stage'; export default function CreateStageButton({ diff --git a/frontend/src/components/card_tables/tournaments.tsx b/frontend/src/components/card_tables/tournaments.tsx index b940abc9..b4a48c2a 100644 --- a/frontend/src/components/card_tables/tournaments.tsx +++ b/frontend/src/components/card_tables/tournaments.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { Tournament } from '../../interfaces/tournament'; +import { Tournament } from '../../openapi'; import { getBaseApiUrl } from '../../services/adapter'; import { EmptyTableInfo } from '../no_content/empty_table_info'; import { DateTime } from '../utils/datetime'; diff --git a/frontend/src/components/dashboard/layout.tsx b/frontend/src/components/dashboard/layout.tsx index f3502492..beba6b8d 100644 --- a/frontend/src/components/dashboard/layout.tsx +++ b/frontend/src/components/dashboard/layout.tsx @@ -12,7 +12,7 @@ import React from 'react'; import QRCode from 'react-qr-code'; import { useLocation, useNavigate } from 'react-router'; -import { Tournament } from '../../interfaces/tournament'; +import { Tournament } from '../../openapi'; import { getBaseApiUrl } from '../../services/adapter'; import PreloadLink from '../utils/link'; import { getBaseURL } from '../utils/util'; @@ -77,7 +77,7 @@ export function TournamentTitle({ tournamentDataFull }: { tournamentDataFull: To export function DoubleHeader({ tournamentData }: { tournamentData: Tournament }) { const navigate = useLocation(); - const endpoint = tournamentData.dashboard_endpoint; + const endpoint = tournamentData.dashboard_endpoint || ''; const pathName = navigate.pathname.replace('[id]', endpoint).replace(/\/+$/, ''); const mainLinks = [ diff --git a/frontend/src/components/forms/user.tsx b/frontend/src/components/forms/user.tsx index da3e6fab..b0f9a13e 100644 --- a/frontend/src/components/forms/user.tsx +++ b/frontend/src/components/forms/user.tsx @@ -5,12 +5,12 @@ import { IconHash, IconLogout, IconUser } from '@tabler/icons-react'; import React from 'react'; import { useNavigate } from 'react-router'; -import { UserInterface } from '../../interfaces/user'; +import { UserPublic } from '../../openapi'; import { performLogoutAndRedirect } from '../../services/local_storage'; import { updatePassword, updateUser } from '../../services/user'; import { PasswordStrength } from '../utils/password'; -export default function UserForm({ user, t, i18n }: { user: UserInterface; t: any; i18n: any }) { +export default function UserForm({ user, t, i18n }: { user: UserPublic; t: any; i18n: any }) { const navigate = useNavigate(); const details_form = useForm({ initialValues: { diff --git a/frontend/src/components/info/player_list.tsx b/frontend/src/components/info/player_list.tsx index a6424ff7..45657312 100644 --- a/frontend/src/components/info/player_list.tsx +++ b/frontend/src/components/info/player_list.tsx @@ -1,8 +1,8 @@ import { Text } from '@mantine/core'; -import { TeamInterface } from '../../interfaces/team'; +import { FullTeamWithPlayers } from '../../openapi'; -export default function PlayerList({ team }: { team: TeamInterface }) { +export default function PlayerList({ team }: { team: FullTeamWithPlayers }) { const getPlayerNames = () => team.players .map((p) => p.name) diff --git a/frontend/src/components/modals/activate_next_stage_modal.tsx b/frontend/src/components/modals/activate_next_stage_modal.tsx index 2f6e5e81..0ef1cbbc 100644 --- a/frontend/src/components/modals/activate_next_stage_modal.tsx +++ b/frontend/src/components/modals/activate_next_stage_modal.tsx @@ -8,13 +8,13 @@ import { SWRResponse } from 'swr'; import { StageItemWithRounds } from '../../interfaces/stage_item'; import { StageItemInput, formatStageItemInput } from '../../interfaces/stage_item_input'; -import { TeamInterface } from '../../interfaces/team'; +import { FullTeamWithPlayers } from '../../openapi'; import { getStageItemLookup } from '../../services/lookups'; import { activateNextStage } from '../../services/stage'; import RequestErrorAlert from '../utils/error_alert'; import { GenericSkeleton } from '../utils/skeletons'; -type Update = { stage_item_input: StageItemInput; team: TeamInterface }; +type Update = { stage_item_input: StageItemInput; team: FullTeamWithPlayers }; type StageItemUpdate = { updates: Update[]; stageItem: StageItemWithRounds }; function UpdatesToStageItemInputsTable({ diff --git a/frontend/src/components/modals/activate_previous_stage_modal.tsx b/frontend/src/components/modals/activate_previous_stage_modal.tsx index 89ac2f16..edf13c71 100644 --- a/frontend/src/components/modals/activate_previous_stage_modal.tsx +++ b/frontend/src/components/modals/activate_previous_stage_modal.tsx @@ -5,6 +5,7 @@ import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; +import { StageRankingResponse } from '../../openapi'; import { activateNextStage } from '../../services/stage'; export default function ActivatePreviousStageModal({ @@ -14,7 +15,7 @@ export default function ActivatePreviousStageModal({ }: { tournamentId: number; swrStagesResponse: SWRResponse; - swrRankingsPerStageItemResponse: SWRResponse; + swrRankingsPerStageItemResponse: SWRResponse; }) { const { t } = useTranslation(); const [opened, setOpened] = useState(false); diff --git a/frontend/src/components/modals/create_stage_item.tsx b/frontend/src/components/modals/create_stage_item.tsx index d552a777..90ba6a14 100644 --- a/frontend/src/components/modals/create_stage_item.tsx +++ b/frontend/src/components/modals/create_stage_item.tsx @@ -17,7 +17,7 @@ import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; import { StageWithStageItems } from '../../interfaces/stage'; -import { Tournament } from '../../interfaces/tournament'; +import { Tournament } from '../../openapi'; import { getStageItemLookup, getTeamsLookup } from '../../services/lookups'; import { createStageItem } from '../../services/stage_item'; import { Translator } from '../utils/types'; diff --git a/frontend/src/components/modals/match_modal.tsx b/frontend/src/components/modals/match_modal.tsx index 4d27301c..a2aa8a66 100644 --- a/frontend/src/components/modals/match_modal.tsx +++ b/frontend/src/components/modals/match_modal.tsx @@ -10,7 +10,7 @@ import { formatMatchInput1, formatMatchInput2, } from '../../interfaces/match'; -import { RoundInterface } from '../../interfaces/round'; +import { Round } from '../../interfaces/round'; import { TournamentMinimal } from '../../interfaces/tournament'; import { getMatchLookup, getStageItemLookup } from '../../services/lookups'; import { deleteMatch, updateMatch } from '../../services/match'; @@ -56,7 +56,7 @@ function MatchModalForm({ swrStagesResponse: SWRResponse; swrUpcomingMatchesResponse: SWRResponse | null; setOpened: any; - round: RoundInterface | null; + round: Round | null; }) { if (match == null) { return null; @@ -211,7 +211,7 @@ export default function MatchModal({ swrUpcomingMatchesResponse: SWRResponse | null; opened: boolean; setOpened: any; - round: RoundInterface | null; + round: Round | null; }) { const { t } = useTranslation(); diff --git a/frontend/src/components/modals/player_update_modal.tsx b/frontend/src/components/modals/player_update_modal.tsx index e1389889..4532fa95 100644 --- a/frontend/src/components/modals/player_update_modal.tsx +++ b/frontend/src/components/modals/player_update_modal.tsx @@ -5,7 +5,7 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { Player } from '../../interfaces/player'; +import { Player } from '../../openapi'; import { updatePlayer } from '../../services/player'; export default function PlayerUpdateModal({ diff --git a/frontend/src/components/modals/round_modal.tsx b/frontend/src/components/modals/round_modal.tsx index 4eea8030..14143c32 100644 --- a/frontend/src/components/modals/round_modal.tsx +++ b/frontend/src/components/modals/round_modal.tsx @@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'; import { LuConstruction } from 'react-icons/lu'; import { SWRResponse } from 'swr'; -import { RoundInterface } from '../../interfaces/round'; +import { Round } from '../../interfaces/round'; import { TournamentMinimal } from '../../interfaces/tournament'; import { deleteRound, updateRound } from '../../services/round'; import DeleteButton from '../buttons/delete'; @@ -18,7 +18,7 @@ function RoundDeleteButton({ swrUpcomingMatchesResponse, }: { tournamentData: TournamentMinimal; - round: RoundInterface; + round: Round; swrStagesResponse: SWRResponse; swrUpcomingMatchesResponse: SWRResponse | null; }) { @@ -45,7 +45,7 @@ export default function RoundModal({ swrUpcomingMatchesResponse, }: { tournamentData: TournamentMinimal; - round: RoundInterface; + round: Round; swrStagesResponse: SWRResponse; swrUpcomingMatchesResponse: SWRResponse | null; }) { diff --git a/frontend/src/components/modals/team_create_modal.tsx b/frontend/src/components/modals/team_create_modal.tsx index c8037c28..52e086c3 100644 --- a/frontend/src/components/modals/team_create_modal.tsx +++ b/frontend/src/components/modals/team_create_modal.tsx @@ -5,7 +5,7 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { Player } from '../../interfaces/player'; +import { Player } from '../../openapi'; import { getPlayers } from '../../services/adapter'; import { createTeam, createTeams } from '../../services/team'; import SaveButton from '../buttons/save'; diff --git a/frontend/src/components/modals/team_update_modal.tsx b/frontend/src/components/modals/team_update_modal.tsx index 24b1032a..eb2d3ddc 100644 --- a/frontend/src/components/modals/team_update_modal.tsx +++ b/frontend/src/components/modals/team_update_modal.tsx @@ -14,8 +14,7 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { Player } from '../../interfaces/player'; -import { TeamInterface } from '../../interfaces/team'; +import { FullTeamWithPlayers, Player } from '../../openapi'; import { getBaseApiUrl, getPlayers, @@ -25,7 +24,7 @@ import { import { updateTeam } from '../../services/team'; import { DropzoneButton } from '../utils/file_upload'; -function TeamLogo({ team }: { team: TeamInterface | null }) { +function TeamLogo({ team }: { team: FullTeamWithPlayers | null }) { if (team == null || team.logo_path == null) return null; return ( sortTableEntries(p1, p2, tableState)) + .sort((p1: FullTeamWithPlayers, p2: FullTeamWithPlayers) => + sortTableEntries(p1, p2, tableState) + ) .map((team) => ( diff --git a/frontend/src/components/tables/upcoming_matches.tsx b/frontend/src/components/tables/upcoming_matches.tsx index b06f40bd..d237ac46 100644 --- a/frontend/src/components/tables/upcoming_matches.tsx +++ b/frontend/src/components/tables/upcoming_matches.tsx @@ -7,8 +7,8 @@ import { FaCheck } from 'react-icons/fa6'; import { SWRResponse } from 'swr'; import { MatchCreateBodyInterface, UpcomingMatchInterface } from '../../interfaces/match'; -import { RoundInterface } from '../../interfaces/round'; -import { Tournament } from '../../interfaces/tournament'; +import { Round } from '../../interfaces/round'; +import { Tournament } from '../../openapi'; import { createMatch } from '../../services/match'; import { updateRound } from '../../services/round'; import { NoContent } from '../no_content/empty_table_info'; @@ -21,7 +21,7 @@ export default function UpcomingMatchesTable({ swrStagesResponse, swrUpcomingMatchesResponse, }: { - draftRound: RoundInterface; + draftRound: Round; tournamentData: Tournament; swrStagesResponse: SWRResponse; swrUpcomingMatchesResponse: SWRResponse; diff --git a/frontend/src/components/utils/file_upload.tsx b/frontend/src/components/utils/file_upload.tsx index 60bcc2a0..f9f193f4 100644 --- a/frontend/src/components/utils/file_upload.tsx +++ b/frontend/src/components/utils/file_upload.tsx @@ -6,8 +6,7 @@ import { useMemo, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { SWRResponse } from 'swr'; -import { TeamInterface } from '../../interfaces/team'; -import { Tournament } from '../../interfaces/tournament'; +import { FullTeamWithPlayers, Tournament } from '../../openapi'; import { handleRequestError, uploadTeamLogo, uploadTournamentLogo } from '../../services/adapter'; export function DropzoneButton({ @@ -19,7 +18,7 @@ export function DropzoneButton({ tournamentId: Tournament['id']; swrResponse: SWRResponse; variant: 'tournament' | 'team'; - teamId?: TeamInterface['id']; + teamId?: FullTeamWithPlayers['id']; }) { // const { classes, theme } = useStyles(); const openRef = useRef<() => void>(null); diff --git a/frontend/src/interfaces/player.tsx b/frontend/src/interfaces/player.tsx deleted file mode 100644 index 4940d043..00000000 --- a/frontend/src/interfaces/player.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export interface Player { - id: number; - name: string; - active: boolean; - created: string; - tournament_id: number; - elo_score: number; - swiss_score: number; - wins: number; - draws: number; - losses: number; -} diff --git a/frontend/src/interfaces/ranking.tsx b/frontend/src/interfaces/ranking.tsx deleted file mode 100644 index bc7c555c..00000000 --- a/frontend/src/interfaces/ranking.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export interface Ranking { - id: number; - tournament_id: number; - created: string; - win_points: number; - draw_points: number; - loss_points: number; - add_score_points: boolean; - position: number; -} diff --git a/frontend/src/interfaces/round.tsx b/frontend/src/interfaces/round.tsx index 2ffbd109..f9494193 100644 --- a/frontend/src/interfaces/round.tsx +++ b/frontend/src/interfaces/round.tsx @@ -1,6 +1,6 @@ import { MatchInterface } from './match'; -export interface RoundInterface { +export interface Round { id: number; stage_item_id: number; created: string; diff --git a/frontend/src/interfaces/stage_item.tsx b/frontend/src/interfaces/stage_item.tsx index 9043b3f9..85ade726 100644 --- a/frontend/src/interfaces/stage_item.tsx +++ b/frontend/src/interfaces/stage_item.tsx @@ -1,4 +1,4 @@ -import { RoundInterface } from './round'; +import { Round } from './round'; import { StageItemInput } from './stage_item_input'; export interface StageItemWithRounds { @@ -8,7 +8,7 @@ export interface StageItemWithRounds { name: string; type_name: string; team_count: number; - rounds: RoundInterface[]; + rounds: Round[]; inputs: StageItemInput[]; stage_id: number; } diff --git a/frontend/src/interfaces/stage_item_input.tsx b/frontend/src/interfaces/stage_item_input.tsx index 1c33c8d3..723d4a22 100644 --- a/frontend/src/interfaces/stage_item_input.tsx +++ b/frontend/src/interfaces/stage_item_input.tsx @@ -1,5 +1,5 @@ import { assert_not_none } from '../components/utils/assert'; -import { TeamInterface } from './team'; +import { FullTeamWithPlayers } from '../openapi'; export interface StageItemInput { id: number; @@ -11,7 +11,7 @@ export interface StageItemInput { losses: number; points: number; team_id: number | null; - team: TeamInterface | null; + team: FullTeamWithPlayers | null; winner_from_stage_item_id: number | null; winner_position: number | null; } @@ -26,7 +26,7 @@ export interface StageItemInputFinal { losses: number; points: number; team_id: number; - team: TeamInterface; + team: FullTeamWithPlayers; winner_from_stage_item_id: number | null; winner_position: number | null; } diff --git a/frontend/src/interfaces/team.tsx b/frontend/src/interfaces/team.tsx deleted file mode 100644 index 97639d88..00000000 --- a/frontend/src/interfaces/team.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Player } from './player'; - -export interface TeamInterface { - id: number; - name: string; - created: string; - active: boolean; - players: Player[]; - elo_score: number; - swiss_score: number; - wins: number; - draws: number; - losses: number; - logo_path: string; -} diff --git a/frontend/src/interfaces/tournament.tsx b/frontend/src/interfaces/tournament.tsx index 95f3c8c6..1c6d55f0 100644 --- a/frontend/src/interfaces/tournament.tsx +++ b/frontend/src/interfaces/tournament.tsx @@ -2,21 +2,6 @@ export type TournamentStatus = 'OPEN' | 'ARCHIVED'; export type TournamentFilter = 'ALL' | TournamentStatus; -export interface Tournament { - id: number; - name: string; - created: string; - start_time: string; - club_id: number; - dashboard_public: boolean; - dashboard_endpoint: string; - players_can_be_in_multiple_teams: boolean; - auto_assign_courts: boolean; - logo_path: string; - duration_minutes: number; - margin_minutes: number; - status: TournamentStatus; -} export interface TournamentMinimal { id: number; } diff --git a/frontend/src/interfaces/user.tsx b/frontend/src/interfaces/user.tsx deleted file mode 100644 index 48e0e7dd..00000000 --- a/frontend/src/interfaces/user.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export interface UserInterface { - id: number; - created: string; - name: string; - email: string; -} - -export interface UserBodyInterface { - name: string; - email: string; -} - -export interface UserToRegisterInterface { - name: string; - email: string; - password: string; -} diff --git a/frontend/src/pages/tournaments/[id]/rankings.tsx b/frontend/src/pages/tournaments/[id]/rankings.tsx index c5106e63..2d04080b 100644 --- a/frontend/src/pages/tournaments/[id]/rankings.tsx +++ b/frontend/src/pages/tournaments/[id]/rankings.tsx @@ -10,8 +10,7 @@ import RequestErrorAlert from '../../../components/utils/error_alert'; import { TableSkeletonSingleColumn } from '../../../components/utils/skeletons'; import { Translator } from '../../../components/utils/types'; import { getTournamentIdFromRouter } from '../../../components/utils/util'; -import { Ranking } from '../../../interfaces/ranking'; -import { Tournament } from '../../../interfaces/tournament'; +import { Ranking, Tournament } from '../../../openapi'; import { getRankings, getTournamentById } from '../../../services/adapter'; import { createRanking, deleteRanking, editRanking } from '../../../services/ranking'; import TournamentLayout from '../_tournament_layout'; @@ -172,10 +171,14 @@ export default function RankingsPage() { const swrRankingsResponse = getRankings(tournamentData.id); const swrTournamentResponse = getTournamentById(tournamentData.id); - const tournamentDataFull = - swrTournamentResponse.data != null ? swrTournamentResponse.data.data : null; + const tournamentDataFull = swrTournamentResponse.data?.data; const { t } = useTranslation(); + // TODO: show loading icon. + if (tournamentDataFull == null) { + return null; + } + return ( diff --git a/frontend/src/pages/tournaments/[id]/settings.tsx b/frontend/src/pages/tournaments/[id]/settings.tsx index d33005db..befe30da 100644 --- a/frontend/src/pages/tournaments/[id]/settings.tsx +++ b/frontend/src/pages/tournaments/[id]/settings.tsx @@ -30,8 +30,7 @@ import { assert_not_none } from '../../../components/utils/assert'; import { DropzoneButton } from '../../../components/utils/file_upload'; import { GenericSkeletonThreeRows } from '../../../components/utils/skeletons'; import { capitalize, getBaseURL, getTournamentIdFromRouter } from '../../../components/utils/util'; -import { Tournament } from '../../../interfaces/tournament'; -import { Club } from '../../../openapi'; +import { Club, Tournament, TournamentResponse } from '../../../openapi'; import { getBaseApiUrl, getClubs, @@ -65,7 +64,7 @@ function ArchiveTournamentButton({ }: { t: any; tournament: Tournament; - swrTournamentResponse: SWRResponse; + swrTournamentResponse: SWRResponse; }) { return (