fix(ui): сохранять устройство диагностики в URL

This commit is contained in:
Denozordec committed 2026-10-01 08:31:50 +07:00
1 parent 1b91ba4e1d
commit d0c715e93c
7 files changed
+89 -28

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
import { test } from "node:test"
import assert from "node:assert/strict"
import {readProbeUrl,patchProbeUrl} from "./probe-url"
test("URL диагностики отклоняет повтор/пустой/невалидный id",()=>{for(const q of ["server=","server=bad%20id","server=1&server=2"])assert.ok(readProbeUrl(new URLSearchParams(q)).error);assert.equal(readProbeUrl(new URLSearchParams()).server,null);assert.equal(readProbeUrl(new URLSearchParams("server=srv1")).server,"srv1")})
test("Выбор изменяет только server и сохраняет остальные параметры",()=>{assert.equal(patchProbeUrl(new URLSearchParams("server=2&keep=1"),"1"),"/probes?keep=1&server=1");assert.equal(patchProbeUrl(new URLSearchParams("server=2&keep=1"),null),"/probes?keep=1")})
+10
View File
@@ -0,0 +1,10 @@
export function readProbeUrl(params: URLSearchParams) {
const server=params.get("server")
const error=params.getAll("server").length>1?"В ссылке повторяется устройство диагностики."
:server!==null&&!/^[a-zA-Z0-9_.:-]{1,64}$/.test(server)?"В ссылке указан некорректный сервер диагностики.":null
return {server,error}
}
export function patchProbeUrl(params:URLSearchParams,server:string|null){
const next=new URLSearchParams(params);next.delete("server");if(server)next.set("server",server)
return "/probes"+(next.size?"?"+next.toString():"")
}