add Ko-fi bean
Some checks failed
CI / frontend-tests (push) Has been cancelled
CI / backend-tests (push) Has been cancelled

This commit is contained in:
Julian Tabel
2026-03-20 16:39:52 +01:00
parent 6c36cbfe12
commit 088cd35002
13 changed files with 733 additions and 4 deletions

View File

@@ -0,0 +1,61 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { toast } from 'sonner'
import {
getJournalEntries,
getJournalEntry,
createJournalEntry,
updateJournalEntry,
deleteJournalEntry,
} from '../api/journal'
import type { CreateJournalEntryInput, UpdateJournalEntryInput } from '../types/journal'
export function useJournalEntries(runId: number, bossResultId?: number) {
return useQuery({
queryKey: ['runs', runId, 'journal', { bossResultId }],
queryFn: () => getJournalEntries(runId, bossResultId),
})
}
export function useJournalEntry(runId: number, entryId: string | null) {
return useQuery({
queryKey: ['runs', runId, 'journal', entryId],
queryFn: () => getJournalEntry(runId, entryId!),
enabled: entryId != null,
})
}
export function useCreateJournalEntry(runId: number) {
const qc = useQueryClient()
return useMutation({
mutationFn: (data: CreateJournalEntryInput) => createJournalEntry(runId, data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ['runs', runId, 'journal'] })
toast.success('Journal entry created')
},
onError: (err) => toast.error(`Failed to create entry: ${err.message}`),
})
}
export function useUpdateJournalEntry(runId: number, entryId: string) {
const qc = useQueryClient()
return useMutation({
mutationFn: (data: UpdateJournalEntryInput) => updateJournalEntry(runId, entryId, data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ['runs', runId, 'journal'] })
toast.success('Journal entry saved')
},
onError: (err) => toast.error(`Failed to save entry: ${err.message}`),
})
}
export function useDeleteJournalEntry(runId: number) {
const qc = useQueryClient()
return useMutation({
mutationFn: (entryId: string) => deleteJournalEntry(runId, entryId),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ['runs', runId, 'journal'] })
toast.success('Journal entry deleted')
},
onError: (err) => toast.error(`Failed to delete entry: ${err.message}`),
})
}