This commit is contained in:
2026-04-07 06:32:40 +03:00
parent 24a44481a0
commit 11db1e6941
101 changed files with 54585 additions and 39160 deletions
@@ -1,5 +1,6 @@
"use client"
import { useMemo } from "react"
import { AlertTriangle, Plus, Save } from "lucide-react"
import { Button } from "@/shared/components/ui/button"
@@ -21,7 +22,7 @@ import {
paymentReceivedFormSchema,
type PaymentReceivedFormValues,
} from "./payment-received.schema"
import { PAYMENT_ROUTES, CUSTOMER_ROUTES, JOB_CARD_ROUTES } from "@garage/api"
import { PAYMENT_MODE_ROUTES, CUSTOMER_ROUTES, JOB_CARD_ROUTES } from "@garage/api"
// ── Props ──
@@ -29,6 +30,7 @@ export type PaymentReceivedFormProps = {
resourceId?: string | null
initialData?: unknown
onSuccess?: () => void
defaultJobCard?: { id?: number | null; title?: string | null } | null
}
// ── Default values ──
@@ -82,14 +84,24 @@ const STORE_OBJECT = { getOptionValue: (o: any) => o, getOptionLabel: (o: any) =
// ── Component ──
export function PaymentReceivedForm({ resourceId, initialData, onSuccess }: PaymentReceivedFormProps) {
export function PaymentReceivedForm({ resourceId, initialData, onSuccess, defaultJobCard }: PaymentReceivedFormProps) {
const api = useAuthApi()
const resolvedInitialData = useMemo(() => {
if (!resourceId && defaultJobCard?.id != null) {
return {
...(initialData as any),
job_card: toRelation(defaultJobCard.id, defaultJobCard.title ?? undefined),
}
}
return initialData
}, [resourceId, defaultJobCard, initialData])
const { form, isEditing } = useResourceForm<PaymentReceivedFormValues, any>({
schema: paymentReceivedFormSchema,
defaultValues: DEFAULT_VALUES,
resourceId,
initialData,
initialData: resolvedInitialData,
mapToFormValues,
})
@@ -97,8 +109,8 @@ export function PaymentReceivedForm({ resourceId, initialData, onSuccess }: Paym
mutationFn: (values: PaymentReceivedFormValues) => {
const payload = mapFormToPayload(values)
const promise = isEditing && resourceId
? api.payments.updateReceived(resourceId, payload as any)
: api.payments.createReceived(payload as any)
? api.paymentReceived.update(resourceId, payload as any)
: api.paymentReceived.create(payload as any)
toast.promise(promise, {
loading: isEditing ? "Updating payment..." : "Recording payment...",
success: isEditing ? "Payment updated successfully" : "Payment recorded successfully",
@@ -148,7 +160,7 @@ export function PaymentReceivedForm({ resourceId, initialData, onSuccess }: Paym
listFn={() => api.jobCards.list()}
mapOption={(item: any) => ({
value: String(item.id),
label: item.job_card_number || item.name || `#${item.id}`,
label: item.title,
})}
{...STORE_OBJECT}
/>
@@ -166,8 +178,8 @@ export function PaymentReceivedForm({ resourceId, initialData, onSuccess }: Paym
name="payment_mode"
label="Payment Mode"
placeholder="Select payment mode"
queryKey={[PAYMENT_ROUTES.MODES]}
listFn={() => api.payments.listModes()}
queryKey={[PAYMENT_MODE_ROUTES.INDEX]}
listFn={() => api.paymentModes.list()}
mapOption={mapLookupOption}
{...STORE_OBJECT}
/>