From 2f12b34635e064cd9cb507aa3e5a29f3a89fe964 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 2 Jun 2026 14:54:11 +0200 Subject: [PATCH] fix(settings): allow pagination size of 0 to disable pagination The pageSize setting described '(0 = disable)' and the inbounds table already treated 0 as show-all, but every validation layer enforced a minimum of 1. Relax the bound to gte=0 in the AllSetting struct tag (source of truth for the generated frontend schemas), regenerate zod, and lower the min on the hand-written schema and the InputNumber control. --- frontend/src/generated/zod.ts | 4 ++-- frontend/src/pages/settings/GeneralTab.tsx | 2 +- frontend/src/schemas/setting.ts | 2 +- web/entity/entity.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/generated/zod.ts b/frontend/src/generated/zod.ts index 2587b5d2..e64c26f9 100644 --- a/frontend/src/generated/zod.ts +++ b/frontend/src/generated/zod.ts @@ -28,7 +28,7 @@ export const AllSettingSchema = z.object({ ldapUserAttr: z.string(), ldapUserFilter: z.string(), ldapVlessField: z.string(), - pageSize: z.number().int().min(1).max(1000), + pageSize: z.number().int().min(0).max(1000), panelProxy: z.string(), remarkModel: z.string(), restartXrayOnClientDisable: z.boolean(), @@ -116,7 +116,7 @@ export const AllSettingViewSchema = z.object({ ldapUserAttr: z.string(), ldapUserFilter: z.string(), ldapVlessField: z.string(), - pageSize: z.number().int().min(1).max(1000), + pageSize: z.number().int().min(0).max(1000), panelProxy: z.string(), remarkModel: z.string(), restartXrayOnClientDisable: z.boolean(), diff --git a/frontend/src/pages/settings/GeneralTab.tsx b/frontend/src/pages/settings/GeneralTab.tsx index 076eb8f5..7ef47b0e 100644 --- a/frontend/src/pages/settings/GeneralTab.tsx +++ b/frontend/src/pages/settings/GeneralTab.tsx @@ -180,7 +180,7 @@ export default function GeneralTab({ allSetting, updateSetting }: GeneralTabProp - updateSetting({ pageSize: Number(v) || 0 })} /> diff --git a/frontend/src/schemas/setting.ts b/frontend/src/schemas/setting.ts index e5fd5438..66d061df 100644 --- a/frontend/src/schemas/setting.ts +++ b/frontend/src/schemas/setting.ts @@ -14,7 +14,7 @@ export const AllSettingSchema = z.object({ sessionMaxAge: z.number().int().min(1).max(525600).optional(), trustedProxyCIDRs: z.string().optional(), panelProxy: z.string().optional(), - pageSize: z.number().int().min(1).max(1000).optional(), + pageSize: z.number().int().min(0).max(1000).optional(), expireDiff: nonNegativeInt.optional(), trafficDiff: nonNegativeInt.max(100).optional(), remarkModel: z.string().optional(), diff --git a/web/entity/entity.go b/web/entity/entity.go index 8555b33a..ef9a39e9 100644 --- a/web/entity/entity.go +++ b/web/entity/entity.go @@ -32,7 +32,7 @@ type AllSetting struct { PanelProxy string `json:"panelProxy" form:"panelProxy"` // Proxy URL for the panel's own outbound requests (GitHub/Telegram) // UI settings - PageSize int `json:"pageSize" form:"pageSize" validate:"gte=1,lte=1000"` // Number of items per page in lists + PageSize int `json:"pageSize" form:"pageSize" validate:"gte=0,lte=1000"` // Number of items per page in lists (0 disables pagination) ExpireDiff int `json:"expireDiff" form:"expireDiff" validate:"gte=0"` // Expiration warning threshold in days TrafficDiff int `json:"trafficDiff" form:"trafficDiff" validate:"gte=0,lte=100"` // Traffic warning threshold percentage RemarkModel string `json:"remarkModel" form:"remarkModel"` // Remark model pattern for inbounds