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) }) + } + })) +}