mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 13:25:18 +00:00
(squash) init
feat: filters, settings, backups fix: ts compile errors feat: new dashboard, webp previews and settings feat: use webp for pdfs feat: use webp fix: analyze resets old data fix: switch to corsproxy fix: switch to free cors fix: max upload limit fix: currency conversion feat: transaction export fix: currency conversion feat: refactor settings actions feat: new loader feat: README + LICENSE doc: update readme doc: update readme doc: update readme doc: update screenshots ci: bump prisma
This commit is contained in:
49
forms/transactions.ts
Normal file
49
forms/transactions.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export const transactionFormSchema = z
|
||||
.object({
|
||||
name: z.string().max(128).optional(),
|
||||
merchant: z.string().max(128).optional(),
|
||||
description: z.string().max(256).optional(),
|
||||
type: z.string().optional(),
|
||||
total: z
|
||||
.string()
|
||||
.transform((val) => {
|
||||
const num = parseFloat(val)
|
||||
if (isNaN(num)) {
|
||||
throw new z.ZodError([{ message: "Invalid total", path: ["total"], code: z.ZodIssueCode.custom }])
|
||||
}
|
||||
return Math.round(num * 100) // convert to cents
|
||||
})
|
||||
.optional(),
|
||||
currencyCode: z.string().max(5).optional(),
|
||||
convertedTotal: z
|
||||
.string()
|
||||
.transform((val) => {
|
||||
const num = parseFloat(val)
|
||||
if (isNaN(num)) {
|
||||
throw new z.ZodError([
|
||||
{ message: "Invalid coverted total", path: ["convertedTotal"], code: z.ZodIssueCode.custom },
|
||||
])
|
||||
}
|
||||
return Math.round(num * 100) // convert to cents
|
||||
})
|
||||
.optional(),
|
||||
convertedCurrencyCode: z.string().max(5).optional(),
|
||||
categoryCode: z.string().optional(),
|
||||
projectCode: z.string().optional(),
|
||||
issuedAt: z
|
||||
.union([
|
||||
z.date(),
|
||||
z
|
||||
.string()
|
||||
.refine((val) => !isNaN(Date.parse(val)), {
|
||||
message: "Invalid date format",
|
||||
})
|
||||
.transform((val) => new Date(val)),
|
||||
])
|
||||
.optional(),
|
||||
text: z.string().optional(),
|
||||
note: z.string().optional(),
|
||||
})
|
||||
.catchall(z.string())
|
||||
Reference in New Issue
Block a user