From ee2c30ffef6a190a9563c865e7011cccc132409a Mon Sep 17 00:00:00 2001 From: joshavant <830519+joshavant@users.noreply.github.com> Date: Thu, 9 Apr 2026 20:28:07 -0500 Subject: [PATCH] UI: reduce skills and usage controller boilerplate --- ui/src/ui/controllers/skills.ts | 20 ++++++++++---------- ui/src/ui/controllers/usage.ts | 24 ++++++++---------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/ui/src/ui/controllers/skills.ts b/ui/src/ui/controllers/skills.ts index 52bfc98247b..f4faa12851c 100644 --- a/ui/src/ui/controllers/skills.ts +++ b/ui/src/ui/controllers/skills.ts @@ -84,22 +84,22 @@ async function runStaleAwareRequest( onError: (err: unknown) => void, onFinally: () => void, ) { + let current = false; try { const result = await request(); - if (!isCurrent()) { - return; + current = isCurrent(); + if (current) { + onSuccess(result); } - onSuccess(result); } catch (err) { - if (!isCurrent()) { - return; - } - onError(err); - } finally { - if (isCurrent()) { - onFinally(); + current = isCurrent(); + if (current) { + onError(err); } } + if (current) { + onFinally(); + } } export function setClawHubSearchQuery(state: SkillsState, query: string) { diff --git a/ui/src/ui/controllers/usage.ts b/ui/src/ui/controllers/usage.ts index 6ff761c015c..71ddb096601 100644 --- a/ui/src/ui/controllers/usage.ts +++ b/ui/src/ui/controllers/usage.ts @@ -30,7 +30,6 @@ export type UsageState = { }; const LEGACY_USAGE_DATE_PARAMS_STORAGE_KEY = "openclaw.control.usage.date-params.v1"; -const LEGACY_USAGE_DATE_PARAMS_DEFAULT_GATEWAY_KEY = "__default__"; const LEGACY_USAGE_DATE_PARAMS_MODE_RE = /unexpected property ['"]mode['"]/i; const LEGACY_USAGE_DATE_PARAMS_OFFSET_RE = /unexpected property ['"]utcoffset['"]/i; const LEGACY_USAGE_DATE_PARAMS_INVALID_RE = /invalid sessions\.usage params/i; @@ -38,21 +37,18 @@ const LEGACY_USAGE_DATE_PARAMS_INVALID_RE = /invalid sessions\.usage params/i; let legacyUsageDateParamsCache: Set | null = null; function loadLegacyUsageDateParamsCache(): Set { - const storage = getSafeLocalStorage(); - if (!storage) { + const raw = getSafeLocalStorage()?.getItem(LEGACY_USAGE_DATE_PARAMS_STORAGE_KEY); + if (!raw) { return new Set(); } try { - const raw = storage.getItem(LEGACY_USAGE_DATE_PARAMS_STORAGE_KEY); - if (!raw) { - return new Set(); - } - const parsed = JSON.parse(raw) as { unsupportedGatewayKeys?: unknown } | null; - if (!parsed || !Array.isArray(parsed.unsupportedGatewayKeys)) { + const keys = (JSON.parse(raw) as { unsupportedGatewayKeys?: unknown } | null) + ?.unsupportedGatewayKeys; + if (!Array.isArray(keys)) { return new Set(); } return new Set( - parsed.unsupportedGatewayKeys + keys .filter((entry): entry is string => typeof entry === "string") .map((entry) => entry.trim()) .filter(Boolean), @@ -63,12 +59,8 @@ function loadLegacyUsageDateParamsCache(): Set { } function persistLegacyUsageDateParamsCache(cache: Set) { - const storage = getSafeLocalStorage(); - if (!storage) { - return; - } try { - storage.setItem( + getSafeLocalStorage()?.setItem( LEGACY_USAGE_DATE_PARAMS_STORAGE_KEY, JSON.stringify({ unsupportedGatewayKeys: Array.from(cache) }), ); @@ -87,7 +79,7 @@ function getLegacyUsageDateParamsCache(): Set { function normalizeGatewayCompatibilityKey(gatewayUrl?: string): string { const trimmed = gatewayUrl?.trim(); if (!trimmed) { - return LEGACY_USAGE_DATE_PARAMS_DEFAULT_GATEWAY_KEY; + return "__default__"; } try { const parsed = new URL(trimmed);