Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/api/sets/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { Database } from "@/integrations/supabase/types";
import type { Artist } from "@/hooks/queries/artists/useArtists";

export type FestivalSet = Database["public"]["Tables"]["sets"]["Row"] & {
artists: Artist[];
votes: { vote_type: number; user_id: string }[];
stage_name?: string | null;
};

export type Stage = Database["public"]["Tables"]["stages"]["Row"];

export const setsKeys = {
all: ["sets"] as const,
lists: () => [...setsKeys.all, "list"] as const,
list: (filters?: unknown) => [...setsKeys.lists(), filters] as const,
details: () => [...setsKeys.all, "detail"] as const,
detail: (id: string) => [...setsKeys.details(), id] as const,
bySlug: (params: unknown) => [...setsKeys.details(), params] as const,
byEdition: (editionId: string) =>
[...setsKeys.all, "edition", editionId] as const,
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import { setsKeys } from "./useSets";
import { setsKeys } from "./types";

// Mutation function
async function addArtistToSet(variables: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import type { Database } from "@/integrations/supabase/types";
import { generateSlug } from "@/lib/slug";
import { FestivalSet, setsKeys } from "./useSets";
import { FestivalSet, setsKeys } from "./types";

type SetInsert = Database["public"]["Tables"]["sets"]["Insert"];

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import { setsKeys } from "./useSets";
import { setsKeys } from "./types";

// Mutation function
async function deleteSet(id: string): Promise<void> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import { setsKeys } from "./useSets";
import { setsKeys } from "./types";

// Mutation function
async function removeArtistFromSet(variables: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useQuery } from "@tanstack/react-query";
import { queryOptions, useQuery } from "@tanstack/react-query";
import { supabase } from "@/integrations/supabase/client";
import { FestivalSet, setsKeys } from "./useSets";
import { FestivalSet, setsKeys } from "./types";

async function fetchSetBySlug({
slug,
Expand Down Expand Up @@ -51,14 +51,19 @@ async function fetchSetBySlug({
return transformedData;
}

// Hook
export function setBySlugQuery(slug: string, editionId: string) {
return queryOptions({
queryKey: setsKeys.bySlug({ slug, editionId }),
queryFn: () => fetchSetBySlug({ slug, editionId }),
});
}

export function useSetBySlugQuery({
slug,
editionId,
}: { slug?: string; editionId?: string } = {}) {
return useQuery({
queryKey: setsKeys.bySlug({ slug, editionId }),
queryFn: () => fetchSetBySlug({ slug: slug!, editionId: editionId! }),
...setBySlugQuery(slug!, editionId!),
enabled: !!slug && !!editionId,
});
}
34 changes: 8 additions & 26 deletions src/hooks/queries/sets/useSets.ts → src/api/sets/useSets.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,6 @@
import { useQuery } from "@tanstack/react-query";
import { queryOptions, useQuery } from "@tanstack/react-query";
import { supabase } from "@/integrations/supabase/client";
import type { Database } from "@/integrations/supabase/types";
import { Artist } from "../artists/useArtists";

export type FestivalSet = Database["public"]["Tables"]["sets"]["Row"] & {
artists: Artist[];
votes: { vote_type: number; user_id: string }[];
stage_name?: string | null;
};

export type Stage = Database["public"]["Tables"]["stages"]["Row"];

// Query key factory
export const setsKeys = {
all: ["sets"] as const,
lists: () => [...setsKeys.all, "list"] as const,
list: (filters?: unknown) => [...setsKeys.lists(), filters] as const,
details: () => [...setsKeys.all, "detail"] as const,
detail: (id: string) => [...setsKeys.details(), id] as const,
bySlug: (params: unknown) => [...setsKeys.details(), params] as const,
byEdition: (editionId: string) =>
[...setsKeys.all, "edition", editionId] as const,
};
import { FestivalSet, setsKeys } from "./types";

// Business logic function
async function fetchSets(): Promise<FestivalSet[]> {
Expand Down Expand Up @@ -65,10 +44,13 @@ async function fetchSets(): Promise<FestivalSet[]> {
return transformedData;
}

// Hook
export function useSetsQuery() {
return useQuery({
export function setsQuery() {
return queryOptions({
queryKey: setsKeys.lists(),
queryFn: fetchSets,
});
}

export function useSetsQuery() {
Comment thread
chiptus marked this conversation as resolved.
Outdated
return useQuery(setsQuery());
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useQuery } from "@tanstack/react-query";
import { queryOptions, useQuery } from "@tanstack/react-query";
import { supabase } from "@/integrations/supabase/client";
import { FestivalSet, setsKeys } from "./useSets";
import { FestivalSet, setsKeys } from "./types";

// Business logic function
async function fetchSetsByEdition(editionId: string): Promise<FestivalSet[]> {
Expand Down Expand Up @@ -46,11 +46,16 @@ async function fetchSetsByEdition(editionId: string): Promise<FestivalSet[]> {
return transformedData;
}

// Hook
export function setsByEditionQuery(editionId: string) {
return queryOptions({
queryKey: setsKeys.byEdition(editionId),
queryFn: () => fetchSetsByEdition(editionId),
});
}

export function useSetsByEditionQuery(editionId: string | undefined) {
return useQuery({
queryKey: setsKeys.byEdition(editionId || ""),
queryFn: () => fetchSetsByEdition(editionId!),
...setsByEditionQuery(editionId || ""),
enabled: !!editionId,
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import type { Database } from "@/integrations/supabase/types";
import { generateSlug } from "@/lib/slug";
import { setsKeys } from "./useSets";
import { setsKeys } from "./types";

type SetUpdate = Database["public"]["Tables"]["sets"]["Update"];

Expand Down
2 changes: 1 addition & 1 deletion src/components/Admin/ScheduleImport/ReviewStage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
type StageMismatchResolution,
} from "@/services/scheduleImport/types";
import { artistsKeys } from "@/hooks/queries/artists/useArtists";
import { setsKeys } from "@/hooks/queries/sets/useSets";
import { setsKeys } from "@/api/sets/types";
import { stagesKeys } from "@/hooks/queries/stages/types";
import { useStagesByEditionQuery } from "@/hooks/queries/stages/useStagesByEdition";
import type { RevealLevel } from "@/lib/scheduleReveal";
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/queries/voting/useVote.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { useToast } from "@/hooks/use-toast";
import { supabase } from "@/integrations/supabase/client";
import { userVotesKeys } from "./useUserVotes";
import { setsKeys } from "../sets/useSets";
import { setsKeys } from "@/api/sets/types";

// Mutation function
async function vote(variables: {
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/useScheduleData.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMemo } from "react";
import { formatDateTime } from "@/lib/timeUtils";
import { format, startOfDay } from "date-fns";
import type { FestivalSet } from "@/hooks/queries/sets/useSets";
import type { FestivalSet } from "@/api/sets/types";
import { Stage } from "./queries/stages/types";
import { sortStagesByOrder } from "@/lib/stageUtils";

Expand Down
2 changes: 1 addition & 1 deletion src/hooks/useVoteCount.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useCallback, useMemo } from "react";
import { FestivalSet } from "./queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

export function useVoteCount(set: FestivalSet | undefined) {
const voteCounts = useMemo(() => {
Expand Down
2 changes: 1 addition & 1 deletion src/pages/EditionView/tabs/ArtistsTab/ArtistsTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FilterSortControls } from "./filters/FilterSortControls";
import { useSetFiltering } from "./useSetFiltering";
import { useUrlState } from "@/hooks/useUrlState";
import { SetsPanel } from "./SetsPanel";
import { useSetsByEditionQuery } from "@/hooks/queries/sets/useSetsByEdition";
import { useSetsByEditionQuery } from "@/api/sets/useSetsByEdition";
import { useFestivalEdition } from "@/contexts/FestivalEditionContext";
import { PageTitle } from "@/components/PageTitle/PageTitle";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createContext, useContext, ReactNode } from "react";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

interface FestivalSetContextValue {
set: FestivalSet;
Expand Down
2 changes: 1 addition & 1 deletion src/pages/EditionView/tabs/ArtistsTab/SetsPanel.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

import { EmptyArtistsState } from "./EmptyArtistsState";
import { FestivalSetProvider } from "./FestivalSetContext";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/EditionView/tabs/ArtistsTab/useSetFiltering.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useEffect, useState, useMemo, useCallback } from "react";
import type { FilterSortState } from "@/hooks/useUrlState";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";
import { useGroupMembersQuery } from "@/hooks/queries/groups/useGroupMembers";

export function useSetFiltering(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { calculateTimelineData } from "@/lib/timelineCalculator";
import { StageLabels } from "./StageLabels";
import { TimelineContainer } from "./TimelineContainer";
import { useFestivalEdition } from "@/contexts/FestivalEditionContext";
import { useSetsByEditionQuery as useEditionSetsQuery } from "@/hooks/queries/sets/useSetsByEdition";
import { useSetsByEditionQuery as useEditionSetsQuery } from "@/api/sets/useSetsByEdition";
import { useTimelineUrlState } from "@/hooks/useTimelineUrlState";
import { format } from "date-fns";
import { useStagesByEditionQuery } from "@/hooks/queries/stages/useStagesByEdition";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMemo } from "react";
import { useScheduleData } from "@/hooks/useScheduleData";
import { useFestivalEdition } from "@/contexts/FestivalEditionContext";
import { useSetsByEditionQuery as useEditionSetsQuery } from "@/hooks/queries/sets/useSetsByEdition";
import { useSetsByEditionQuery as useEditionSetsQuery } from "@/api/sets/useSetsByEdition";
import { isSameDay, format } from "date-fns";
import { TimeSlotGroup } from "./TimeSlotGroup";
import type { ScheduleSet } from "@/hooks/useScheduleData";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/ExploreSetPage/SetExploreCard.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";
import { Card } from "@/components/ui/card";
import { motion, PanInfo } from "framer-motion";
import { useState } from "react";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/ExploreSetPage/components/CardStackContainer.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { motion, AnimatePresence } from "framer-motion";
import { SetExploreCard } from "../SetExploreCard";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

interface CardStackContainerProps {
currentSet: FestivalSet | undefined;
Expand Down
2 changes: 1 addition & 1 deletion src/pages/ExploreSetPage/components/VotingSection.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { VotingActions } from "../VotingActions";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

interface VotingSectionProps {
currentSet: FestivalSet | undefined;
Expand Down
2 changes: 1 addition & 1 deletion src/pages/ExploreSetPage/useExplorableSets.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useSetsByEditionQuery } from "@/hooks/queries/sets/useSetsByEdition";
import { useSetsByEditionQuery } from "@/api/sets/useSetsByEdition";
import { useMemo } from "react";

export function useExplorableSets({
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SetDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { ArtistLoadingState } from "./SetDetails/SetLoadingState";
import { SetGroupVoting } from "./SetDetails/SetGroupVoting";
import { SetNotes } from "./SetDetails/SetNotes";
import { useUrlState } from "@/hooks/useUrlState";
import { useSetBySlugQuery } from "@/hooks/queries/sets/useSetBySlug";
import { useSetBySlugQuery } from "@/api/sets/useSetBySlug";
import { useFestivalEdition } from "@/contexts/FestivalEditionContext";
import { useAuth } from "@/contexts/AuthContext";
import { useVoteCount } from "@/hooks/useVoteCount";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SetDetails/MultiArtistSetInfoCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
import { Badge } from "@/components/ui/badge";
import { Clock, Users } from "lucide-react";
import { SetVotingButtons } from "./SetVotingButtons";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";
import { formatDayOnly, formatTimeRange } from "@/lib/timeUtils";
import { GenreBadge } from "@/components/GenreBadge";
import { IndividualArtistCard } from "./IndividualArtistCard";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SetDetails/SetInfoCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Clock, ExternalLink, Music, Play } from "lucide-react";
import { SetVotingButtons } from "./SetVotingButtons";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";
import { formatDayOnly, formatTimeRange } from "@/lib/timeUtils";
import { GenreBadge } from "@/components/GenreBadge";
import { StagePin } from "@/components/StagePin";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SetDetails/SetVotingButtons.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button } from "@/components/ui/button";
import { useAuth } from "@/contexts/AuthContext";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";
import { useUserVotes } from "@/hooks/queries/voting/useUserVotes";
import { useVote } from "@/hooks/queries/voting/useVote";
import { useVoteCount } from "@/hooks/useVoteCount";
Expand Down
10 changes: 5 additions & 5 deletions src/pages/admin/festivals/SetFormDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
import { useArtistsQuery } from "@/hooks/queries/artists/useArtists";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { useCreateSetMutation } from "@/hooks/queries/sets/useCreateSet";
import { useUpdateSetMutation } from "@/hooks/queries/sets/useUpdateSet";
import { useAddArtistToSetMutation } from "@/hooks/queries/sets/useAddArtistToSet";
import { useRemoveArtistFromSetMutation } from "@/hooks/queries/sets/useRemoveArtistFromSet";
import { FestivalSet } from "@/api/sets/types";
import { useCreateSetMutation } from "@/api/sets/useCreateSet";
import { useUpdateSetMutation } from "@/api/sets/useUpdateSet";
import { useAddArtistToSetMutation } from "@/api/sets/useAddArtistToSet";
import { useRemoveArtistFromSetMutation } from "@/api/sets/useRemoveArtistFromSet";
import { useAuth } from "@/contexts/AuthContext";
import {
Dialog,
Expand Down
6 changes: 3 additions & 3 deletions src/pages/admin/festivals/SetsManagement/SetManagement.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import { useParams } from "@tanstack/react-router";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Loader2, Plus, Music } from "lucide-react";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { useSetsByEditionQuery } from "@/hooks/queries/sets/useSetsByEdition";
import { useDeleteSetMutation } from "@/hooks/queries/sets/useDeleteSet";
import { FestivalSet } from "@/api/sets/types";
import { useSetsByEditionQuery } from "@/api/sets/useSetsByEdition";
import { useDeleteSetMutation } from "@/api/sets/useDeleteSet";
import { useFestivalEditionBySlugQuery } from "@/api/editions/useFestivalEditionBySlug";
import { SetFormDialog } from "../SetFormDialog";
import { SetsTable } from "../SetsTable";
Expand Down
2 changes: 1 addition & 1 deletion src/pages/admin/festivals/SetsTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Edit2, Trash2 } from "lucide-react";
import { formatTimeRange } from "@/lib/timeUtils";
import { FestivalSet } from "@/hooks/queries/sets/useSets";
import { FestivalSet } from "@/api/sets/types";

interface SetsTableProps {
sets: FestivalSet[];
Expand Down
Loading