mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-28 00:34:59 +03:00
fix(frontend): key geo entries by page position and clear test-suite noise
Zod 4: use the `error` param instead of the deprecated `message`. lint:deprecated missed these because tsgolint's no-deprecated does not resolve object-literal properties on a `string | Params` union. Geodata: key geo entry rows by page position. antd deprecates rowKey's index argument, and kind:value repeats within a page because the reader drops domain attributes (22 pairs in geosite_IR.dat, 108 in geosite_RU). Nord/PIA: the "All cities/regions" option used a null value, which antd warns on. Map it through a sentinel at the Select boundary so form state stays null, with tests that fail when the sentinel is not mapped back. Tests: - Run the oxlint guard through node; .bin/oxlint is a sh shim Windows cannot spawn, and the swallowed error left both guard cases vacuous. - Start unit workers with --no-experimental-webstorage; msw's localStorage probe made Node 25+ warn once per forked worker. - Set IS_REACT_ACT_ENVIRONMENT, which RTL never sets with globals: false, and settle the async updates it exposed inside act(). The row-cells memo test now fails when memo is removed. - Disable antd's click wave in Storybook; it re-rendered inside the next story's act() and tripped "not configured to support act". - Assert InboundFormModal's validation log instead of leaking it, and give the rule-form test a well-formed clients/list response.
This commit is contained in:
@@ -360,7 +360,7 @@ export const ClientBulkAdjustFormSchema = z
|
||||
(v.limitHwid !== undefined && v.limitHwid !== null) ||
|
||||
(v.adTag !== undefined && v.adTag.trim() !== ''),
|
||||
{
|
||||
message: 'pages.clients.bulkAdjustNothing',
|
||||
error: 'pages.clients.bulkAdjustNothing',
|
||||
},
|
||||
)
|
||||
.refine(
|
||||
@@ -370,7 +370,7 @@ export const ClientBulkAdjustFormSchema = z
|
||||
return /^[0-9a-fA-F]{32}$/.test(tag);
|
||||
},
|
||||
{
|
||||
message: 'pages.inbounds.form.mtgAdTagInvalid',
|
||||
error: 'pages.inbounds.form.mtgAdTagInvalid',
|
||||
path: ['adTag'],
|
||||
},
|
||||
);
|
||||
|
||||
@@ -52,7 +52,7 @@ const InboundTlsSettingsSchema = TlsStreamSettingsSchema.extend({
|
||||
.array(InboundTlsCertSchema)
|
||||
.default([])
|
||||
.refine((certificates) => certificates.some((cert) => cert.usage !== 'verify'), {
|
||||
message: 'pages.inbounds.form.tlsServerCertificateRequired',
|
||||
error: 'pages.inbounds.form.tlsServerCertificateRequired',
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
@@ -33,12 +33,12 @@ export const SubBalancerFormSchema = z.object({
|
||||
.record(
|
||||
z.string(),
|
||||
z
|
||||
.number({ message: 'pages.settings.subBalancers.errWeightPositive' })
|
||||
.number({ error: 'pages.settings.subBalancers.errWeightPositive' })
|
||||
.positive('pages.settings.subBalancers.errWeightPositive'),
|
||||
)
|
||||
.optional(),
|
||||
sortOrder: z
|
||||
.number({ message: 'pages.settings.subBalancers.errSortOrder' })
|
||||
.number({ error: 'pages.settings.subBalancers.errSortOrder' })
|
||||
.int('pages.settings.subBalancers.errSortOrder')
|
||||
.min(1, 'pages.settings.subBalancers.errSortOrder'),
|
||||
enabled: z.boolean(),
|
||||
|
||||
@@ -132,7 +132,7 @@ export const BalancerFormSchema = z.object({
|
||||
.string()
|
||||
.trim()
|
||||
.min(1, 'pages.xray.balancerTagRequired')
|
||||
.refine((val) => !val.startsWith('_bl_'), { message: 'pages.xray.balancer.reservedPrefix' }),
|
||||
.refine((val) => !val.startsWith('_bl_'), { error: 'pages.xray.balancer.reservedPrefix' }),
|
||||
strategy: BalancerStrategyTypeSchema.default('random'),
|
||||
selector: z.array(z.string()).min(1, 'pages.xray.balancerSelectorRequired'),
|
||||
fallbackTag: z.string().default(''),
|
||||
@@ -143,7 +143,7 @@ export const OutboundTagSchema = z
|
||||
.string()
|
||||
.trim()
|
||||
.min(1, 'pages.xray.outboundTagRequired')
|
||||
.refine((val) => !val.startsWith('_bl_'), { message: 'pages.xray.balancer.reservedPrefix' });
|
||||
.refine((val) => !val.startsWith('_bl_'), { error: 'pages.xray.balancer.reservedPrefix' });
|
||||
|
||||
export type BalancerFormValues = z.infer<typeof BalancerFormSchema>;
|
||||
export type RuleFormValues = z.infer<typeof RuleFormSchema>;
|
||||
|
||||
Reference in New Issue
Block a user