upcoming tournament page, minor changes
This commit is contained in:
43
src/features/teams/hooks/use-available-players.ts
Normal file
43
src/features/teams/hooks/use-available-players.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { useMemo } from 'react';
|
||||
import { listPlayers } from '@/features/players/server';
|
||||
import { useServerSuspenseQuery } from '@/lib/tanstack-query/hooks';
|
||||
|
||||
export const playerKeys = {
|
||||
all: ['players'] as const,
|
||||
available: (excludedIds: string[] = []) => [...playerKeys.all, 'available', excludedIds] as const,
|
||||
};
|
||||
|
||||
export const playerQueries = {
|
||||
all: () => ({
|
||||
queryKey: playerKeys.all,
|
||||
queryFn: listPlayers
|
||||
}),
|
||||
};
|
||||
|
||||
export const useAvailablePlayers = (excludedPlayerIds: string[] = []) => {
|
||||
const { data: allPlayers } = useServerSuspenseQuery(playerQueries.all());
|
||||
|
||||
const availablePlayers = useMemo(() => {
|
||||
if (!allPlayers) return [];
|
||||
|
||||
return allPlayers.filter(player =>
|
||||
!excludedPlayerIds.includes(player.id) &&
|
||||
player.first_name &&
|
||||
player.last_name
|
||||
);
|
||||
}, [allPlayers, excludedPlayerIds]);
|
||||
|
||||
const playerOptions = useMemo(() =>
|
||||
availablePlayers.map(player => ({
|
||||
value: player.id,
|
||||
label: `${player.first_name} ${player.last_name}`.trim() || 'Unnamed Player'
|
||||
})),
|
||||
[availablePlayers]
|
||||
);
|
||||
|
||||
return {
|
||||
availablePlayers,
|
||||
playerOptions,
|
||||
allPlayers
|
||||
};
|
||||
};
|
||||
22
src/features/teams/hooks/use-create-team.ts
Normal file
22
src/features/teams/hooks/use-create-team.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { createTeam } from "@/features/teams/server";
|
||||
import { TeamInput } from "@/features/teams/types";
|
||||
import { logger } from "@/lib/logger";
|
||||
import { useServerMutation } from "@/lib/tanstack-query/hooks";
|
||||
|
||||
const useCreateTeam = () => {
|
||||
const navigate = useNavigate();
|
||||
|
||||
return useServerMutation({
|
||||
mutationFn: (data: TeamInput) => createTeam({ data }),
|
||||
onMutate: (data) => {
|
||||
logger.info('Creating team', data);
|
||||
},
|
||||
onSuccess: (team) => {
|
||||
navigate({ to: '/teams/$id', params: { id: team.id } });
|
||||
},
|
||||
successMessage: 'Team created successfully!',
|
||||
});
|
||||
};
|
||||
|
||||
export default useCreateTeam;
|
||||
17
src/features/teams/hooks/use-update-team.ts
Normal file
17
src/features/teams/hooks/use-update-team.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { updateTeam } from "@/features/teams/server";
|
||||
import { TeamUpdateInput } from "@/features/teams/types";
|
||||
import { useServerMutation } from "@/lib/tanstack-query/hooks";
|
||||
import { logger } from "@/lib/logger";
|
||||
|
||||
const useUpdateTeam = (teamId: string) => {
|
||||
return useServerMutation({
|
||||
mutationFn: (data: TeamUpdateInput) =>
|
||||
updateTeam({ data: { id: teamId, updates: data } }),
|
||||
onMutate: (data) => {
|
||||
logger.info('Updating team', { teamId, updates: Object.keys(data) });
|
||||
},
|
||||
successMessage: 'Team updated successfully!',
|
||||
});
|
||||
};
|
||||
|
||||
export default useUpdateTeam;
|
||||
Reference in New Issue
Block a user