refactor: update Zod schemas to v4
This commit is contained in:
@@ -2,8 +2,12 @@ import { z } from "zod"
|
|||||||
|
|
||||||
export const assetSchema = z.object({
|
export const assetSchema = z.object({
|
||||||
id: z.string().optional(),
|
id: z.string().optional(),
|
||||||
itemId: z.string().min(1, { message: "Item is required" }),
|
itemId: z.string().min(1, {
|
||||||
serialNumber: z.string().min(1, { message: "Serial number is required" }),
|
error: "Item is required"
|
||||||
|
}),
|
||||||
|
serialNumber: z.string().min(1, {
|
||||||
|
error: "Serial number is required"
|
||||||
|
}),
|
||||||
deliveryNote: z.string().optional(),
|
deliveryNote: z.string().optional(),
|
||||||
notes: z.string().optional(),
|
notes: z.string().optional(),
|
||||||
recipientId: z.string().optional(),
|
recipientId: z.string().optional(),
|
||||||
@@ -16,7 +20,9 @@ export const createAssetSchema = assetSchema.extend({
|
|||||||
export type CreateAssetFormType = z.infer<typeof createAssetSchema>
|
export type CreateAssetFormType = z.infer<typeof createAssetSchema>
|
||||||
|
|
||||||
export const updateAssetSchema = assetSchema.extend({
|
export const updateAssetSchema = assetSchema.extend({
|
||||||
id: z.string().min(1, { message: "ID is required" }),
|
id: z.string().min(1, {
|
||||||
|
error: "ID is required"
|
||||||
|
}),
|
||||||
status: z.enum(["AVAILABLE", "ASSIGNED", "RESERVED", "IN_REPAIR"]),
|
status: z.enum(["AVAILABLE", "ASSIGNED", "RESERVED", "IN_REPAIR"]),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,17 @@ export const assignmentSchema = z.object({
|
|||||||
.number()
|
.number()
|
||||||
.int()
|
.int()
|
||||||
.nonnegative()
|
.nonnegative()
|
||||||
.min(1, { message: "Quantity is required" }),
|
.min(1, {
|
||||||
|
error: "Quantity is required"
|
||||||
|
}),
|
||||||
notes: z.string().optional(),
|
notes: z.string().optional(),
|
||||||
itemId: z.string().min(1, { message: "Item is required" }).optional(),
|
itemId: z.string().min(1, {
|
||||||
|
error: "Item is required"
|
||||||
|
}).optional(),
|
||||||
assetId: z.string().optional(),
|
assetId: z.string().optional(),
|
||||||
recipientId: z.string().min(1, { message: "Recipient is required" }),
|
recipientId: z.string().min(1, {
|
||||||
|
error: "Recipient is required"
|
||||||
|
}),
|
||||||
assignmentDate: z.date().optional(),
|
assignmentDate: z.date().optional(),
|
||||||
returnDate: z.date().optional(),
|
returnDate: z.date().optional(),
|
||||||
})
|
})
|
||||||
@@ -28,7 +34,7 @@ export const updateAssignmentSchema = assignmentSchema
|
|||||||
.superRefine((data, ctx) => {
|
.superRefine((data, ctx) => {
|
||||||
if (data.itemId && !data.assetId) {
|
if (data.itemId && !data.assetId) {
|
||||||
ctx.addIssue({
|
ctx.addIssue({
|
||||||
code: z.ZodIssueCode.custom,
|
code: "custom",
|
||||||
message: "Asset ID is required when item ID is provided",
|
message: "Asset ID is required when item ID is provided",
|
||||||
path: ["assetId"],
|
path: ["assetId"],
|
||||||
})
|
})
|
||||||
@@ -38,6 +44,8 @@ export const updateAssignmentSchema = assignmentSchema
|
|||||||
export type UpdateAssignmentFormType = z.infer<typeof updateAssignmentSchema>
|
export type UpdateAssignmentFormType = z.infer<typeof updateAssignmentSchema>
|
||||||
|
|
||||||
export const returnAssignmentSchema = z.object({
|
export const returnAssignmentSchema = z.object({
|
||||||
id: z.string().min(1, { message: "Assignment ID is required" }),
|
id: z.string().min(1, {
|
||||||
|
error: "Assignment ID is required"
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
export type ReturnAssignmentFormType = z.infer<typeof returnAssignmentSchema>
|
export type ReturnAssignmentFormType = z.infer<typeof returnAssignmentSchema>
|
||||||
|
|||||||
@@ -3,11 +3,15 @@ import { z } from "zod"
|
|||||||
export const signInSchema = z.object({
|
export const signInSchema = z.object({
|
||||||
username: z
|
username: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Invalid username" })
|
.min(1, {
|
||||||
|
error: "Invalid username"
|
||||||
|
})
|
||||||
.nonempty("Username is required"),
|
.nonempty("Username is required"),
|
||||||
password: z
|
password: z
|
||||||
.string()
|
.string()
|
||||||
.min(3, { message: "Password is too short" })
|
.min(3, {
|
||||||
|
error: "Password is too short"
|
||||||
|
})
|
||||||
.nonempty("Password is required"),
|
.nonempty("Password is required"),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export const createCategorySchema = z.object({
|
|||||||
name: z
|
name: z
|
||||||
.string()
|
.string()
|
||||||
.min(3, {
|
.min(3, {
|
||||||
message: "Name is required and must be at least 3 characters long",
|
error: "Name is required and must be at least 3 characters long"
|
||||||
})
|
})
|
||||||
.nonempty("Name is required and must be at least 3 characters long"),
|
.nonempty("Name is required and must be at least 3 characters long"),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,10 +3,9 @@ import { z } from "zod"
|
|||||||
const ACCEPTED_MIME_TYPES = ["text/csv", "text/comma-separated-values"]
|
const ACCEPTED_MIME_TYPES = ["text/csv", "text/comma-separated-values"]
|
||||||
|
|
||||||
export const importSchema = z.object({
|
export const importSchema = z.object({
|
||||||
file: z
|
file: z.file()
|
||||||
.instanceof(File)
|
|
||||||
.refine((file) => ACCEPTED_MIME_TYPES.includes(file.type), {
|
.refine((file) => ACCEPTED_MIME_TYPES.includes(file.type), {
|
||||||
message: "File must be a CSV",
|
error: "File must be a CSV"
|
||||||
}),
|
}),
|
||||||
categoryId: z.string().optional(),
|
categoryId: z.string().optional(),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,25 +1,35 @@
|
|||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
|
||||||
export const createItemSchema = z.object({
|
export const createItemSchema = z.object({
|
||||||
name: z.string().min(1, { message: "Name is required" }),
|
name: z.string().min(1, {
|
||||||
categoryId: z.string().min(1, { message: "Category is required" }),
|
error: "Name is required"
|
||||||
|
}),
|
||||||
|
categoryId: z.string().min(1, {
|
||||||
|
error: "Category is required"
|
||||||
|
}),
|
||||||
stock: z.coerce
|
stock: z.coerce
|
||||||
.number()
|
.number()
|
||||||
.int()
|
.int()
|
||||||
.nonnegative()
|
.nonnegative()
|
||||||
.min(0, { message: "Stock is required" }),
|
.min(0, {
|
||||||
|
error: "Stock is required"
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type CreateItemFormType = z.infer<typeof createItemSchema>
|
export type CreateItemFormType = z.infer<typeof createItemSchema>
|
||||||
|
|
||||||
export const updateItemSchema = createItemSchema.extend({
|
export const updateItemSchema = createItemSchema.extend({
|
||||||
id: z.string().min(1, { message: "Item is required" }),
|
id: z.string().min(1, {
|
||||||
|
error: "Item is required"
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type UpdateItemFormType = z.infer<typeof updateItemSchema>
|
export type UpdateItemFormType = z.infer<typeof updateItemSchema>
|
||||||
|
|
||||||
export const getItemByIdSchema = z.object({
|
export const getItemByIdSchema = z.object({
|
||||||
id: z.string().min(1, { message: "Item is required" }),
|
id: z.string().min(1, {
|
||||||
|
error: "Item is required"
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type GetItemByIdFormType = z.infer<typeof getItemByIdSchema>
|
export type GetItemByIdFormType = z.infer<typeof getItemByIdSchema>
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ export const movementSchema = z.object({
|
|||||||
.number()
|
.number()
|
||||||
.int()
|
.int()
|
||||||
.nonnegative()
|
.nonnegative()
|
||||||
.min(1, { message: "Quantity is required" }),
|
.min(1, {
|
||||||
|
error: "Quantity is required"
|
||||||
|
}),
|
||||||
details: z.string().optional(),
|
details: z.string().optional(),
|
||||||
notes: z.string().optional(),
|
notes: z.string().optional(),
|
||||||
itemId: z.string().optional(),
|
itemId: z.string().optional(),
|
||||||
|
|||||||
@@ -4,10 +4,16 @@ export const recipientSchema = z.object({
|
|||||||
id: z.string().optional(),
|
id: z.string().optional(),
|
||||||
username: z
|
username: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Username is required" })
|
.min(1, {
|
||||||
|
error: "Username is required"
|
||||||
|
})
|
||||||
.nonempty("Username is required"),
|
.nonempty("Username is required"),
|
||||||
firstName: z.string().min(1, { message: "First name is required" }),
|
firstName: z.string().min(1, {
|
||||||
lastName: z.string().min(1, { message: "Last name is required" }),
|
error: "First name is required"
|
||||||
|
}),
|
||||||
|
lastName: z.string().min(1, {
|
||||||
|
error: "Last name is required"
|
||||||
|
}),
|
||||||
department: z.enum(
|
department: z.enum(
|
||||||
[
|
[
|
||||||
"IT",
|
"IT",
|
||||||
@@ -20,7 +26,7 @@ export const recipientSchema = z.object({
|
|||||||
"OTHER",
|
"OTHER",
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
message: "Department is required",
|
error: "Department is required"
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
email: z.string().optional().nullable(),
|
email: z.string().optional().nullable(),
|
||||||
@@ -31,7 +37,7 @@ export const createRecipientSchema = recipientSchema.superRefine(
|
|||||||
(data, ctx) => {
|
(data, ctx) => {
|
||||||
if (data.email && !z.string().email().safeParse(data.email).success) {
|
if (data.email && !z.string().email().safeParse(data.email).success) {
|
||||||
ctx.addIssue({
|
ctx.addIssue({
|
||||||
code: z.ZodIssueCode.custom,
|
code: "custom",
|
||||||
message: "Email format is invalid",
|
message: "Email format is invalid",
|
||||||
path: ["email"],
|
path: ["email"],
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user