Unify category tree pickers and prefer free-text technical AI fields.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-09-21 20:02:05 +03:30
co-authored by Cursor
parent 838e84056e
commit 8465a29ce1
40 changed files with 1192 additions and 586 deletions
@@ -4,6 +4,7 @@ import type {
InvoiceItemInput,
InvoiceItemTemplate,
InvoiceKeyPointInput,
InvoicePaymentMethodInput,
InvoiceTemplate,
InvoiceTemplateItemInput,
} from '../types/invoice'
@@ -21,6 +22,8 @@ export type DraftLineItem = {
export type DraftKeyPoint = { key: string; text: string }
export type DraftPaymentMethod = { key: string; text: string }
export type DraftAccount = {
key: string
bankName: string
@@ -49,6 +52,10 @@ export function emptyDraftKeyPoint(): DraftKeyPoint {
return { key: newKey(), text: '' }
}
export function emptyDraftPaymentMethod(): DraftPaymentMethod {
return { key: newKey(), text: '' }
}
export function emptyDraftAccount(): DraftAccount {
return { key: newKey(), bankName: '', accountHolderName: '', cardNumber: '', iban: '' }
}
@@ -74,6 +81,7 @@ export function draftsFromInvoiceTemplate(template: InvoiceTemplate): {
topText: string
items: DraftLineItem[]
keyPoints: DraftKeyPoint[]
paymentMethods: DraftPaymentMethod[]
accounts: DraftAccount[]
} {
return {
@@ -99,6 +107,10 @@ export function draftsFromInvoiceTemplate(template: InvoiceTemplate): {
template.keyPoints.length > 0
? template.keyPoints.map((kp) => ({ key: newKey(), text: kp.text }))
: [],
paymentMethods:
(template.paymentMethods?.length ?? 0) > 0
? template.paymentMethods.map((pm) => ({ key: newKey(), text: pm.text }))
: [],
accounts:
template.accounts.length > 0
? template.accounts.map((acc) => ({
@@ -126,6 +138,7 @@ export function draftsFromInvoice(invoice: {
discountedPrice: number | null
}>
keyPoints?: Array<{ text: string }>
paymentMethods?: Array<{ text: string }>
accounts?: Array<{
bankName: string
accountHolderName: string | null
@@ -138,6 +151,7 @@ export function draftsFromInvoice(invoice: {
notes: string
items: DraftLineItem[]
keyPoints: DraftKeyPoint[]
paymentMethods: DraftPaymentMethod[]
accounts: DraftAccount[]
} {
return {
@@ -164,6 +178,10 @@ export function draftsFromInvoice(invoice: {
(invoice.keyPoints?.length ?? 0) > 0
? invoice.keyPoints!.map((kp) => ({ key: newKey(), text: kp.text }))
: [],
paymentMethods:
(invoice.paymentMethods?.length ?? 0) > 0
? invoice.paymentMethods!.map((pm) => ({ key: newKey(), text: pm.text }))
: [],
accounts:
(invoice.accounts?.length ?? 0) > 0
? invoice.accounts!.map((acc) => ({
@@ -223,6 +241,15 @@ export function buildKeyPointsPayload(points: DraftKeyPoint[]): InvoiceKeyPointI
.map((text) => ({ text }))
}
export function buildPaymentMethodsPayload(
methods: DraftPaymentMethod[],
): InvoicePaymentMethodInput[] {
return methods
.map((m) => m.text.trim())
.filter(Boolean)
.map((text) => ({ text }))
}
export function buildAccountsPayload(accounts: DraftAccount[]): InvoiceAccountInput[] {
return accounts
.map((acc) => ({