diff --git a/src/components/forms/invoice-form.tsx b/src/components/forms/invoice-form.tsx index fa6bd35..ee0de32 100644 --- a/src/components/forms/invoice-form.tsx +++ b/src/components/forms/invoice-form.tsx @@ -195,6 +195,27 @@ export default function InvoiceForm({ invoiceId }: InvoiceFormProps) { initialized, ]); + // Update the first line item when defaultHourlyRate changes (if it hasn't been manually edited) + useEffect(() => { + if ( + formData.items.length === 1 && + formData.items[0]?.description === "" && + formData.items[0]?.hours === 1 + ) { + const newRate = formData.defaultHourlyRate ?? 0; + setFormData((prev) => ({ + ...prev, + items: [ + { + ...prev.items[0]!, + rate: newRate, + amount: newRate, + }, + ], + })); + } + }, [formData.defaultHourlyRate]); + // Update default hourly rate when client changes useEffect(() => { if (!formData.clientId || !clients) return; @@ -626,60 +647,26 @@ export default function InvoiceForm({ invoiceId }: InvoiceFormProps) { -

+ updateField("defaultHourlyRate", value) + } + min={0} + step={1} + prefix="$" + width="full" + disabled={!formData.clientId} className={cn( - "mb-2 text-xs", - formData.clientId && - clients?.find((c) => c.id === formData.clientId) - ?.defaultHourlyRate - ? "text-green-600" - : "text-muted-foreground", + !formData.clientId && + "cursor-not-allowed opacity-50", )} - > - {formData.clientId && - clients?.find((c) => c.id === formData.clientId) - ?.defaultHourlyRate - ? `✓ Inherited from ${clients.find((c) => c.id === formData.clientId)?.name}: $${clients.find((c) => c.id === formData.clientId)?.defaultHourlyRate}/hour` - : formData.clientId - ? "Client has no default rate set - enter rate manually" - : "Select a client first, or enter rate manually"} -

-
- - updateField("defaultHourlyRate", value) - } - min={0} - step={1} - prefix="$" - width="full" - className={cn( - formData.clientId && - clients?.find( - (c) => c.id === formData.clientId, - )?.defaultHourlyRate - ? "border-green-200 bg-green-50/50" - : "", - )} - placeholder={ - formData.clientId && - clients?.find((c) => c.id === formData.clientId) - ?.defaultHourlyRate - ? "Inherited from client" - : "Enter hourly rate" - } - /> - {formData.clientId && - clients?.find((c) => c.id === formData.clientId) - ?.defaultHourlyRate && ( -
- - ✓ - -
- )} -
+ placeholder={ + !formData.clientId + ? "Select client first" + : "Enter hourly rate" + } + />