import type { Key } from "~/i18n" export const formError = { invalidPlan: "error.invalidPlan", workspaceRequired: "error.workspaceRequired", alreadySubscribed: "error.alreadySubscribed", limitRequired: "error.limitRequired", monthlyLimitInvalid: "error.monthlyLimitInvalid", workspaceNameRequired: "error.workspaceNameRequired", nameTooLong: "error.nameTooLong", emailRequired: "error.emailRequired", roleRequired: "error.roleRequired", idRequired: "error.idRequired", nameRequired: "error.nameRequired", providerRequired: "error.providerRequired", apiKeyRequired: "error.apiKeyRequired", modelRequired: "error.modelRequired", } as const const map = { [formError.invalidPlan]: "error.invalidPlan", [formError.workspaceRequired]: "error.workspaceRequired", [formError.alreadySubscribed]: "error.alreadySubscribed", [formError.limitRequired]: "error.limitRequired", [formError.monthlyLimitInvalid]: "error.monthlyLimitInvalid", [formError.workspaceNameRequired]: "error.workspaceNameRequired", [formError.nameTooLong]: "error.nameTooLong", [formError.emailRequired]: "error.emailRequired", [formError.roleRequired]: "error.roleRequired", [formError.idRequired]: "error.idRequired", [formError.nameRequired]: "error.nameRequired", [formError.providerRequired]: "error.providerRequired", [formError.apiKeyRequired]: "error.apiKeyRequired", [formError.modelRequired]: "error.modelRequired", "Invalid plan": "error.invalidPlan", "Workspace ID is required": "error.workspaceRequired", "Workspace ID is required.": "error.workspaceRequired", "This workspace already has a subscription": "error.alreadySubscribed", "Limit is required.": "error.limitRequired", "Set a valid monthly limit": "error.monthlyLimitInvalid", "Set a valid monthly limit.": "error.monthlyLimitInvalid", "Workspace name is required.": "error.workspaceNameRequired", "Name must be 255 characters or less.": "error.nameTooLong", "Email is required": "error.emailRequired", "Role is required": "error.roleRequired", "ID is required": "error.idRequired", "Name is required": "error.nameRequired", "Provider is required": "error.providerRequired", "API key is required": "error.apiKeyRequired", "Model is required": "error.modelRequired", "workspace.reload.error.paymentFailed": "workspace.reload.error.paymentFailed", "Payment failed": "workspace.reload.error.paymentFailed", "Payment failed.": "workspace.reload.error.paymentFailed", } as const satisfies Record export function formErrorReloadAmountMin(amount: number) { return `error.reloadAmountMin:${amount}` } export function formErrorReloadTriggerMin(amount: number) { return `error.reloadTriggerMin:${amount}` } export function localizeError(t: (key: Key, params?: Record) => string, error?: string) { if (!error) return "" if (error.startsWith("error.reloadAmountMin:")) { const amount = Number(error.split(":")[1] ?? 0) return t("error.reloadAmountMin", { amount }) } if (error.startsWith("error.reloadTriggerMin:")) { const amount = Number(error.split(":")[1] ?? 0) return t("error.reloadTriggerMin", { amount }) } const amount = error.match(/^Reload amount must be at least \$(\d+)$/) if (amount) return t("error.reloadAmountMin", { amount: Number(amount[1]) }) const trigger = error.match(/^Balance trigger must be at least \$(\d+)$/) if (trigger) return t("error.reloadTriggerMin", { amount: Number(trigger[1]) }) const key = map[error as keyof typeof map] if (key) return t(key) return error }