From df9dba9742a84dfe06cdfe03e64684c2b999303b Mon Sep 17 00:00:00 2001 From: divocat Date: Fri, 3 Oct 2025 01:53:03 +0300 Subject: [PATCH] feat: implement bulk validate --- fe-app-podkop/src/validators/bulkValidate.ts | 13 +++++++++++++ fe-app-podkop/src/validators/index.ts | 1 + fe-app-podkop/src/validators/types.ts | 9 +++++++++ .../luci-static/resources/view/podkop/main.js | 10 ++++++++++ 4 files changed, 33 insertions(+) create mode 100644 fe-app-podkop/src/validators/bulkValidate.ts diff --git a/fe-app-podkop/src/validators/bulkValidate.ts b/fe-app-podkop/src/validators/bulkValidate.ts new file mode 100644 index 0000000..fce12c2 --- /dev/null +++ b/fe-app-podkop/src/validators/bulkValidate.ts @@ -0,0 +1,13 @@ +import { BulkValidationResult, ValidationResult } from './types'; + +export function bulkValidate( + values: T[], + validate: (value: T) => ValidationResult, +): BulkValidationResult { + const results = values.map((value) => ({ ...validate(value), value })); + + return { + valid: results.every((r) => r.valid), + results, + }; +} diff --git a/fe-app-podkop/src/validators/index.ts b/fe-app-podkop/src/validators/index.ts index b7ee5af..291795e 100644 --- a/fe-app-podkop/src/validators/index.ts +++ b/fe-app-podkop/src/validators/index.ts @@ -4,3 +4,4 @@ export * from './validateDns'; export * from './validateUrl'; export * from './validatePath'; export * from './validateSubnet'; +export * from './bulkValidate'; diff --git a/fe-app-podkop/src/validators/types.ts b/fe-app-podkop/src/validators/types.ts index c2308c6..b9263b3 100644 --- a/fe-app-podkop/src/validators/types.ts +++ b/fe-app-podkop/src/validators/types.ts @@ -2,3 +2,12 @@ export interface ValidationResult { valid: boolean; message: string; } + +export interface BulkValidationResultItem extends ValidationResult { + value: T; +} + +export interface BulkValidationResult { + valid: boolean; + results: BulkValidationResultItem[]; +} diff --git a/luci-app-podkop/htdocs/luci-static/resources/view/podkop/main.js b/luci-app-podkop/htdocs/luci-static/resources/view/podkop/main.js index 18912a3..1e5db3c 100644 --- a/luci-app-podkop/htdocs/luci-static/resources/view/podkop/main.js +++ b/luci-app-podkop/htdocs/luci-static/resources/view/podkop/main.js @@ -109,6 +109,15 @@ function validateSubnet(value) { return { valid: true, message: "Valid" }; } +// src/validators/bulkValidate.ts +function bulkValidate(values, validate) { + const results = values.map((value) => ({ ...validate(value), value })); + return { + valid: results.every((r) => r.valid), + results + }; +} + // src/constants.ts var STATUS_COLORS = { SUCCESS: "#4caf50", @@ -242,6 +251,7 @@ return baseclass.extend({ REGIONAL_OPTIONS, STATUS_COLORS, UPDATE_INTERVAL_OPTIONS, + bulkValidate, getBaseUrl, validateDNS, validateDomain,