From 43f9f37ccc6e83a388968fda7273354ee39f6631 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Wed, 3 Dec 2025 22:52:31 -0800 Subject: [PATCH] add sync mutations for grid items --- src/lib/api/mutations/artifact.mutations.ts | 22 +++++++ src/lib/api/mutations/grid.mutations.ts | 72 +++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/src/lib/api/mutations/artifact.mutations.ts b/src/lib/api/mutations/artifact.mutations.ts index 8a20fffa..7660cfe3 100644 --- a/src/lib/api/mutations/artifact.mutations.ts +++ b/src/lib/api/mutations/artifact.mutations.ts @@ -199,3 +199,25 @@ export function useGradeArtifact() { mutationFn: (input: ArtifactGradeInput) => artifactAdapter.gradeArtifact(input) })) } + +// ============================================================================ +// Sync Mutations (Collection -> Grid) +// ============================================================================ + +/** + * Sync grid artifact from collection mutation + * + * Syncs a grid artifact's properties from its linked collection source. + */ +export function useSyncGridArtifact() { + const queryClient = useQueryClient() + + return createMutation(() => ({ + mutationFn: (params: { id: string; partyShortcode: string }) => + artifactAdapter.syncGridArtifact(params.id), + onSuccess: (_data, { partyShortcode }) => { + // Invalidate party queries to reflect the synced artifact + queryClient.invalidateQueries({ queryKey: ['parties', 'detail', partyShortcode] }) + } + })) +} diff --git a/src/lib/api/mutations/grid.mutations.ts b/src/lib/api/mutations/grid.mutations.ts index 18567802..9b5ba42b 100644 --- a/src/lib/api/mutations/grid.mutations.ts +++ b/src/lib/api/mutations/grid.mutations.ts @@ -654,3 +654,75 @@ export function useSwapSummons() { } })) } + +// ============================================================================ +// Sync Mutations (Collection -> Grid) +// ============================================================================ + +/** + * Sync grid character from collection mutation + * + * Syncs a grid character's customizations from its linked collection source. + */ +export function useSyncGridCharacter() { + const queryClient = useQueryClient() + + return createMutation(() => ({ + mutationFn: (params: { id: string; partyShortcode: string }) => + gridAdapter.syncCharacter(params.id), + onSuccess: (_data, { partyShortcode }) => { + queryClient.invalidateQueries({ queryKey: partyKeys.detail(partyShortcode) }) + } + })) +} + +/** + * Sync grid weapon from collection mutation + * + * Syncs a grid weapon's customizations from its linked collection source. + */ +export function useSyncGridWeapon() { + const queryClient = useQueryClient() + + return createMutation(() => ({ + mutationFn: (params: { id: string; partyShortcode: string }) => + gridAdapter.syncWeapon(params.id), + onSuccess: (_data, { partyShortcode }) => { + queryClient.invalidateQueries({ queryKey: partyKeys.detail(partyShortcode) }) + } + })) +} + +/** + * Sync grid summon from collection mutation + * + * Syncs a grid summon's customizations from its linked collection source. + */ +export function useSyncGridSummon() { + const queryClient = useQueryClient() + + return createMutation(() => ({ + mutationFn: (params: { id: string; partyShortcode: string }) => + gridAdapter.syncSummon(params.id), + onSuccess: (_data, { partyShortcode }) => { + queryClient.invalidateQueries({ queryKey: partyKeys.detail(partyShortcode) }) + } + })) +} + +/** + * Sync all party items from collection mutation + * + * Syncs all linked grid items in a party from their collection sources. + */ +export function useSyncAllPartyItems() { + const queryClient = useQueryClient() + + return createMutation(() => ({ + mutationFn: (params: { partyId: string; partyShortcode: string }) => + gridAdapter.syncAllPartyItems(params.partyId), + onSuccess: (_data, { partyShortcode }) => { + queryClient.invalidateQueries({ queryKey: partyKeys.detail(partyShortcode) }) + } + })) +}