1- import { useMutation , useQueryClient } from '@tanstack/react-query'
21import { Minus , Plus } from 'lucide-react'
32import { useMemo , useState } from 'react'
4- import { toast } from 'sonner'
53
64import { AccountSelect } from '@/components/account-select'
75import { FabForm } from '@/components/fab-form'
@@ -19,9 +17,7 @@ import { SheetHeader, SheetTitle } from '@/components/ui/sheet'
1917import {
2018 type AccountRead ,
2119 type TransactionCreate ,
22- type TransactionRead ,
23- createTransaction ,
24- updateTransactions
20+ type TransactionRead
2521} from '@/lib/client'
2622import type { Client } from '@/lib/client/client'
2723import { CLIENT_TIMEZONE } from '@/lib/constants'
@@ -33,21 +29,26 @@ interface TransactionFabProps {
3329 open : boolean
3430 onOpenChange : ( open : boolean ) => void
3531 editingTransaction : TransactionRead | null
32+ onSubmit : ( body : TransactionCreate ) => void
33+ isPending : boolean
3634}
3735
3836interface TransactionFabBodyProps {
3937 client : Client
4038 account ?: AccountRead
4139 editingTransaction : TransactionRead | null
42- onClose : ( ) => void
40+ onSubmit : ( body : TransactionCreate ) => void
41+ isPending : boolean
4342}
4443
4544export function TransactionFab ( {
4645 client,
4746 account,
4847 open,
4948 onOpenChange,
50- editingTransaction
49+ editingTransaction,
50+ onSubmit,
51+ isPending
5152} : TransactionFabProps ) {
5253 return (
5354 < FabSheet
@@ -67,7 +68,8 @@ export function TransactionFab({
6768 client = { client }
6869 account = { account }
6970 editingTransaction = { editingTransaction }
70- onClose = { ( ) => onOpenChange ( false ) }
71+ onSubmit = { onSubmit }
72+ isPending = { isPending }
7173 />
7274 </ FabSheet >
7375 )
@@ -77,9 +79,9 @@ function TransactionFabBody({
7779 client,
7880 account,
7981 editingTransaction,
80- onClose
82+ onSubmit,
83+ isPending
8184} : TransactionFabBodyProps ) {
82- const queryClient = useQueryClient ( )
8385 const isEditing = editingTransaction != null
8486 const [ amount , setAmount ] = useState ( ( ) =>
8587 isEditing ? Math . abs ( parseFloat ( editingTransaction . amount ) ) . toString ( ) : ''
@@ -103,39 +105,9 @@ function TransactionFabBody({
103105 [ createdAt , selectedAccount ]
104106 )
105107
106- const { mutate, isPending } = useMutation ( {
107- mutationFn : async ( body : TransactionCreate ) => {
108- const response = isEditing
109- ? await updateTransactions ( {
110- client,
111- body : [ { ...body , id : editingTransaction . id } ]
112- } )
113- : await createTransaction ( { client, body } )
114- if ( response . error )
115- throw new Error (
116- `Failed to ${ isEditing ? 'update' : 'create' } transaction`
117- )
118- if ( ! response . data ) throw new Error ( 'No data returned' )
119- return response . data
120- } ,
121- onSuccess : ( ) => {
122- toast . success ( `Transaction ${ isEditing ? 'updated' : 'created' } ` )
123- queryClient . invalidateQueries ( { queryKey : [ 'events' ] } )
124- queryClient . invalidateQueries ( { queryKey : [ 'transactions' ] } )
125- onClose ( )
126- } ,
127- onError : ( error ) => {
128- console . error ( error )
129- toast . error ( `Failed to ${ isEditing ? 'update' : 'create' } transaction` , {
130- description :
131- error instanceof Error ? error . message : 'An unknown error occurred'
132- } )
133- }
134- } )
135-
136108 const handleSubmit = ( ) => {
137109 if ( selectedAccount == null || zonedCreatedAt == null ) return
138- mutate ( {
110+ onSubmit ( {
139111 account_id : selectedAccount . id ,
140112 amount : negative ? `-${ amount } ` : amount ,
141113 created_at : zonedCreatedAt
0 commit comments