From f62bc4a52633af9fbf5ee26469c00c40950dc901 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 2 Apr 2026 22:55:57 +0000 Subject: [PATCH] feat(ops-view-routes): add priority support and list-based domain editing for routes --- changelog.md | 6 ++++++ ts/00_commitinfo_data.ts | 2 +- ts_web/00_commitinfo_data.ts | 2 +- ts_web/elements/ops-view-routes.ts | 32 ++++++++++++++++++------------ 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/changelog.md b/changelog.md index d1d496b..ea1d3ca 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,11 @@ # Changelog +## 2026-04-02 - 12.5.0 - feat(ops-view-routes) +add priority support and list-based domain editing for routes + +- Adds a priority field to route create and edit forms so route matching order can be configured. +- Replaces comma-separated domain text input with a list-based domain editor and updates form handling to persist domains as arrays. + ## 2026-04-02 - 12.4.0 - feat(routes) add route edit and delete actions to the ops routes view diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 9461bf9..e64099d 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/dcrouter', - version: '12.4.0', + version: '12.5.0', description: 'A multifaceted routing service handling mail and SMS delivery functions.' } diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 9461bf9..e64099d 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/dcrouter', - version: '12.4.0', + version: '12.5.0', description: 'A multifaceted routing service handling mail and SMS delivery functions.' } diff --git a/ts_web/elements/ops-view-routes.ts b/ts_web/elements/ops-view-routes.ts index c32da34..11bfade 100644 --- a/ts_web/elements/ops-view-routes.ts +++ b/ts_web/elements/ops-view-routes.ts @@ -414,9 +414,9 @@ export class OpsViewRoutes extends DeesElement { const currentPorts = Array.isArray(route.match.ports) ? route.match.ports.map((p: any) => typeof p === 'number' ? String(p) : `${p.from}-${p.to}`).join(', ') : String(route.match.ports); - const currentDomains = route.match.domains - ? (Array.isArray(route.match.domains) ? route.match.domains.join(', ') : route.match.domains) - : ''; + const currentDomains: string[] = route.match.domains + ? (Array.isArray(route.match.domains) ? route.match.domains : [route.match.domains]) + : []; const firstTarget = route.action.targets?.[0]; const currentTargetHost = firstTarget ? (Array.isArray(firstTarget.host) ? firstTarget.host[0] : firstTarget.host) @@ -429,7 +429,8 @@ export class OpsViewRoutes extends DeesElement { - + + @@ -452,15 +453,16 @@ export class OpsViewRoutes extends DeesElement { if (!formData.name || !formData.ports) return; const ports = formData.ports.split(',').map((p: string) => parseInt(p.trim(), 10)).filter((p: number) => !isNaN(p)); - const domains = formData.domains - ? formData.domains.split(',').map((d: string) => d.trim()).filter(Boolean) - : undefined; + const domains: string[] = Array.isArray(formData.domains) + ? formData.domains.filter(Boolean) + : []; + const priority = formData.priority ? parseInt(formData.priority, 10) : undefined; const updatedRoute: any = { name: formData.name, match: { ports, - ...(domains && domains.length > 0 ? { domains } : {}), + ...(domains.length > 0 ? { domains } : {}), }, action: { type: 'forward', @@ -471,6 +473,7 @@ export class OpsViewRoutes extends DeesElement { }, ], }, + ...(priority != null && !isNaN(priority) ? { priority } : {}), }; const metadata: any = {}; @@ -523,7 +526,8 @@ export class OpsViewRoutes extends DeesElement { - + + @@ -546,15 +550,16 @@ export class OpsViewRoutes extends DeesElement { if (!formData.name || !formData.ports) return; const ports = formData.ports.split(',').map((p: string) => parseInt(p.trim(), 10)).filter((p: number) => !isNaN(p)); - const domains = formData.domains - ? formData.domains.split(',').map((d: string) => d.trim()).filter(Boolean) - : undefined; + const domains: string[] = Array.isArray(formData.domains) + ? formData.domains.filter(Boolean) + : []; + const priority = formData.priority ? parseInt(formData.priority, 10) : undefined; const route: any = { name: formData.name, match: { ports, - ...(domains && domains.length > 0 ? { domains } : {}), + ...(domains.length > 0 ? { domains } : {}), }, action: { type: 'forward', @@ -565,6 +570,7 @@ export class OpsViewRoutes extends DeesElement { }, ], }, + ...(priority != null && !isNaN(priority) ? { priority } : {}), }; // Build metadata if profile/target selected