fix estimate table and expense items

This commit is contained in:
2026-05-13 15:55:40 +04:00
parent cc7dc1bd17
commit 6b356d2855
11 changed files with 96 additions and 40 deletions
@@ -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 }
}