zod schema and hook

This commit is contained in:
karenvicent committed 2026-02-12 12:13:36 -05:00
1 parent a2dfbd29c7
commit 0941f3ce1a
2 files changed
+72

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
import { useMemo } from "react";
import { settingsSchema } from "@/Validation/settings";
import type { Settings } from "@/Types/Settings";
import type { SettingsFormData } from "@/Validation/settings";
interface UseSettingsFormOptions {
data?: Settings | null;
}
export const useSettingsForm = ({ data = null }: UseSettingsFormOptions = {}) => {
return useMemo(() => {
const defaults: SettingsFormData = {
systemEmailIgnoreTLS: data?.systemEmailIgnoreTLS || false,
systemEmailRequireTLS: data?.systemEmailRequireTLS || false,
systemEmailRejectUnauthorized: data?.systemEmailRejectUnauthorized || true,
systemEmailConnectionHost: data?.systemEmailConnectionHost || "",
systemEmailSecure: data?.systemEmailSecure || true,
systemEmailPool: data?.systemEmailPool || false,
showURL: data?.showURL || false,
//timezone: data?.timezone || "UTC",
language: data?.language || "en",
//chartType: data?.chartType || "histogram",
checkTTL: data?.checkTTL || 30,
pagespeedApiKey: data?.pagespeedApiKey || "",
systemEmailHost: data?.systemEmailHost || "",
systemEmailPort: data?.systemEmailPort || "",
systemEmailAddress: data?.systemEmailAddress || "",
systemEmailUser: data?.systemEmailUser || "",
systemEmailPassword: data?.systemEmailPassword || "",
}
}
}
+37
View File
@@ -0,0 +1,37 @@
import { z } from "zod";
export const settingsSchema = z.object({
systemEmailIgnoreTLS: z.boolean(),
systemEmailRequireTLS: z.boolean(),
systemEmailRejectUnauthorized: z.boolean(),
systemEmailConnectionHost: z.string().optional().or(z.literal("")),
systemEmailSecure: z.boolean().optional(),
systemEmailPool: z.boolean().optional(),
showURL: z.boolean().optional(),
timezone: z.string().min(1, "Timezone is required").optional(),
mode: z.enum(["light", "dark"]).optional(),
language: z.string().min(2, "Language is required"),
chartType: z.enum(["histogram", "heatmap"]).optional(),
checkTTL: z.coerce.number().int().min(1, "Please enter a value"),
pagespeedApiKey: z.string().optional().or(z.literal("")),
systemEmailHost: z.string().optional().or(z.literal("")),
systemEmailPort: z.coerce.number().nullable().optional().or(z.literal("")),
systemEmailAddress: z
.email("Please enter a valid email address")
.transform((val) => val.toLowerCase().trim())
.optional()
.or(z.literal("")),
systemEmailUser: z.string().optional().or(z.literal("")),
systemEmailPassword: z.string().optional().or(z.literal("")),
systemEmailTLSServername: z.string().optional().or(z.literal("")),
globalThresholds: z
.object({
cpu: z.coerce.number().min(1).max(100).optional(),
memory: z.coerce.number().min(1).max(100).optional(),
disk: z.coerce.number().min(1).max(100).optional(),
temperature: z.coerce.number().min(1).max(150).optional(),
})
.optional(),
});
export type SettingsFormData = z.infer<typeof settingsSchema>;