From 480756d83247aeded2d52bb549f19e9d58347016 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Mon, 1 Jun 2026 14:35:51 +0700 Subject: [PATCH] feat(settings): enhance revision retention minutes validation Introduced a preprocessing function to normalize input for the revision retention minutes field, ensuring it handles various input types correctly. Updated the schema to utilize this new validation method, improving data integrity and user experience. --- .../lib/settings/revision-settings.schema.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/web/src/lib/settings/revision-settings.schema.ts b/web/src/lib/settings/revision-settings.schema.ts index 3c98a61..b2d0e6c 100644 --- a/web/src/lib/settings/revision-settings.schema.ts +++ b/web/src/lib/settings/revision-settings.schema.ts @@ -1,7 +1,18 @@ import { z } from 'zod'; -export const revisionSettingsSchema = z.object({ - revision_retention_minutes: z.string().refine( +/** HTML type=number binds number; API/store may return number — normalize to string for validation. */ +function retentionMinutesInput(val: unknown): string { + if (val === undefined || val === null) return ''; + if (typeof val === 'number') { + if (!Number.isFinite(val)) return ''; + return String(Math.trunc(val)); + } + return String(val); +} + +const revisionRetentionMinutes = z.preprocess( + retentionMinutesInput, + z.string().refine( (v) => { const s = v.trim(); if (s === '') return true; @@ -10,6 +21,10 @@ export const revisionSettingsSchema = z.object({ }, { message: 'TTL ревизий должен быть целым числом от 15 до 43200 минут' } ) +); + +export const revisionSettingsSchema = z.object({ + revision_retention_minutes: revisionRetentionMinutes }); export type RevisionSettingsForm = z.infer;