fix estimate table and expense items
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"use client"
|
||||
|
||||
import { useState } from "react"
|
||||
import { useEffect, useState } from "react"
|
||||
import { useMutation } from "@tanstack/react-query"
|
||||
import { toast } from "sonner"
|
||||
import { confirm } from "@/shared/components/confirm-dialog"
|
||||
@@ -42,6 +42,10 @@ export function useResourcePage<TClient extends ResourcePageClient>({
|
||||
const { open: openDialog, close: closeDialog, isOpen, resourceId } = useFormDialog(paramKey)
|
||||
const [selectedItem, setSelectedItem] = useState<TItem | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
if (!resourceId) setSelectedItem(null)
|
||||
}, [resourceId])
|
||||
|
||||
const tableQuery = useDataTableQuery({
|
||||
queryKey: [routeKey],
|
||||
client,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import { useEffect } from "react"
|
||||
import { useForm, type DefaultValues, type FieldValues, type UseFormReturn } from "react-hook-form"
|
||||
import { zodResolver } from "@hookform/resolvers/zod"
|
||||
import { useQuery, type QueryKey } from "@tanstack/react-query"
|
||||
import { useQuery, useQueryClient, type QueryKey } from "@tanstack/react-query"
|
||||
import type { ZodType } from "zod"
|
||||
|
||||
type UseResourceFormOptions<TFormValues extends FieldValues, TApiData = unknown> = {
|
||||
@@ -20,6 +20,7 @@ type UseResourceFormReturn<TFormValues extends FieldValues> = {
|
||||
form: UseFormReturn<TFormValues>
|
||||
isEditing: boolean
|
||||
isInitializing: boolean
|
||||
invalidate: () => void
|
||||
}
|
||||
|
||||
export function useResourceForm<TFormValues extends FieldValues, TApiData = unknown>({
|
||||
@@ -32,11 +33,15 @@ export function useResourceForm<TFormValues extends FieldValues, TApiData = unkn
|
||||
queryKey,
|
||||
}: UseResourceFormOptions<TFormValues, TApiData>): UseResourceFormReturn<TFormValues> {
|
||||
const isEditing = !!resourceId
|
||||
const queryClient = useQueryClient()
|
||||
const resolvedQueryKey = queryKey ?? ["resource", resourceId]
|
||||
|
||||
const { data: queriedData, isLoading: isQueryLoading } = useQuery<TApiData>({
|
||||
queryKey: queryKey ?? ["resource", resourceId],
|
||||
queryKey: resolvedQueryKey,
|
||||
queryFn: () => initialize!(resourceId!),
|
||||
enabled: isEditing && !!initialize,
|
||||
staleTime: 0,
|
||||
refetchOnMount: "always",
|
||||
})
|
||||
|
||||
const resolvedData = queriedData ?? (isEditing ? initialData : undefined)
|
||||
@@ -49,7 +54,7 @@ export function useResourceForm<TFormValues extends FieldValues, TApiData = unkn
|
||||
useEffect(() => {
|
||||
if (!isEditing) {
|
||||
if (initialData) {
|
||||
form.reset({ ...defaultValues, ...initialData } as any)
|
||||
form.reset({ ...defaultValues, ...mapToFormValues(initialData) } as any)
|
||||
} else {
|
||||
form.reset(defaultValues)
|
||||
}
|
||||
@@ -61,5 +66,9 @@ export function useResourceForm<TFormValues extends FieldValues, TApiData = unkn
|
||||
}
|
||||
}, [isEditing, resolvedData, initialData]) // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
return { form, isEditing, isInitializing: isEditing && !!initialize && isQueryLoading }
|
||||
const invalidate = () => {
|
||||
queryClient.invalidateQueries({ queryKey: resolvedQueryKey })
|
||||
}
|
||||
|
||||
return { form, isEditing, isInitializing: isEditing && !!initialize && isQueryLoading, invalidate }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user