feat(i18n): localize asset validation messages

This commit is contained in:
2026-06-13 17:23:01 +02:00
parent 3d6b13dc1c
commit 7d5ab64653
13 changed files with 398 additions and 52 deletions
@@ -34,6 +34,7 @@ export default async function EditAssetPage({
recipients={recipients}
asset={asset as unknown as AssetWithAssignment}
formCopy={copy.form}
schemaCopy={copy.schema}
statusCopy={copy.status}
submitButtonCopy={dictionary.common.submitButton}
/>
@@ -1,6 +1,8 @@
import type { Dictionary } from "@/i18n/dictionaries"
import type { AssetSchemaCopy } from "@/schemas/asset.schema"
export type AssetListCopy = Dictionary["inventory"]["assets"]["list"]
export type AssetFormCopy = Dictionary["inventory"]["assets"]["form"]
export type AssetStatusCopy = Dictionary["inventory"]["assets"]["status"]
export type AssetFallbackCopy = Dictionary["inventory"]["assets"]["fallback"]
export type { AssetSchemaCopy }
@@ -2,6 +2,7 @@
import { zodResolver } from "@hookform/resolvers/zod"
import { useRouter } from "next/navigation"
import { useMemo } from "react"
import { useForm } from "react-hook-form"
import { toast } from "sonner"
import { updateAssetAction } from "@/actions/asset.actions"
@@ -11,8 +12,8 @@ import {
} from "@/components/forms/submitButton"
import { ITEM_STATUS } from "@/lib/constants"
import {
buildUpdateAssetSchema,
type UpdateAssetFormType,
updateAssetSchema,
} from "@/schemas/asset.schema"
import type {
AssetWithAssignment,
@@ -21,13 +22,18 @@ import type {
UpdateAssetStatus,
} from "@/types"
import type { AssetFormCopy, AssetStatusCopy } from "./asset.copy"
import type {
AssetFormCopy,
AssetSchemaCopy,
AssetStatusCopy,
} from "./asset.copy"
interface EditAssetFormProps {
asset: AssetWithAssignment
items: Item[]
recipients: Recipient[]
formCopy: AssetFormCopy
schemaCopy: AssetSchemaCopy
statusCopy: AssetStatusCopy
submitButtonCopy: SubmitButtonCopy
}
@@ -37,10 +43,12 @@ export default function EditAssetForm({
items,
recipients,
formCopy,
schemaCopy,
statusCopy,
submitButtonCopy,
}: EditAssetFormProps) {
const router = useRouter()
const schema = useMemo(() => buildUpdateAssetSchema(schemaCopy), [schemaCopy])
const {
register,
@@ -49,7 +57,7 @@ export default function EditAssetForm({
formState: { errors, isSubmitting, isSubmitSuccessful },
watch,
} = useForm<UpdateAssetFormType>({
resolver: zodResolver(updateAssetSchema),
resolver: zodResolver(schema),
defaultValues: {
id: asset.id,
itemId: asset.itemId ?? undefined,
@@ -81,7 +89,7 @@ export default function EditAssetForm({
}
if (response?.success) {
toast.success("Asset updated successfully")
toast.success(response.message)
router.push(`/inventory/assets`)
}
}
@@ -2,6 +2,7 @@
import { zodResolver } from "@hookform/resolvers/zod"
import { useRouter } from "next/navigation"
import { useMemo } from "react"
import { useForm } from "react-hook-form"
import { toast } from "sonner"
import { createAssetAction } from "@/actions/asset.actions"
@@ -11,17 +12,22 @@ import {
} from "@/components/forms/submitButton"
import { ITEM_STATUS } from "@/lib/constants"
import {
buildCreateAssetSchema,
type CreateAssetFormType,
createAssetSchema,
} from "@/schemas/asset.schema"
import type { ItemWithoutStock, Recipient } from "@/types"
import type { AssetFormCopy, AssetStatusCopy } from "./asset.copy"
import type {
AssetFormCopy,
AssetSchemaCopy,
AssetStatusCopy,
} from "./asset.copy"
interface NewAssetFormProps {
items: ItemWithoutStock[]
recipients: Recipient[]
formCopy: AssetFormCopy
schemaCopy: AssetSchemaCopy
statusCopy: AssetStatusCopy
submitButtonCopy: SubmitButtonCopy
}
@@ -30,10 +36,12 @@ export default function NewAssetForm({
items,
recipients,
formCopy,
schemaCopy,
statusCopy,
submitButtonCopy,
}: NewAssetFormProps) {
const router = useRouter()
const schema = useMemo(() => buildCreateAssetSchema(schemaCopy), [schemaCopy])
const {
register,
@@ -42,7 +50,7 @@ export default function NewAssetForm({
formState: { errors, isSubmitting, isSubmitSuccessful },
watch,
} = useForm<CreateAssetFormType>({
resolver: zodResolver(createAssetSchema),
resolver: zodResolver(schema),
defaultValues: {
status: "AVAILABLE",
},
@@ -69,7 +77,7 @@ export default function NewAssetForm({
}
if (response?.success) {
toast.success("Asset created successfully")
toast.success(response.message)
router.push(`/inventory/assets`)
}
}
@@ -21,6 +21,7 @@ export default async function NewAssetPage() {
items={items}
recipients={recipients}
formCopy={copy.form}
schemaCopy={copy.schema}
statusCopy={copy.status}
submitButtonCopy={dictionary.common.submitButton}
/>