Skip to content

Commit eb2a0e1

Browse files
committed
fixing updating validator
1 parent c4b6bfe commit eb2a0e1

2 files changed

Lines changed: 55 additions & 24 deletions

File tree

app/(main)/guardrails/page.tsx

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
Validator,
1717
SavedValidatorConfig,
1818
OrgContext,
19+
buildValidatorUpdatePayload,
1920
} from "@/app/lib/types/guardrails";
2021
import ValidatorConfigPanel from "@/app/components/guardrails/ValidatorConfigPanel";
2122
import SavedConfigsList from "@/app/components/guardrails/SavedConfigsList";
@@ -74,28 +75,34 @@ export default function GuardrailsPage() {
7475
? `?organization_id=${parseInt(String(orgContext.organization_id), 10)}&project_id=${parseInt(String(orgContext.project_id), 10)}`
7576
: null;
7677

77-
const fetchSavedConfigs = useCallback(() => {
78-
if (!configsQueryString) return;
78+
const fetchSavedConfigs = useCallback(async (): Promise<
79+
SavedValidatorConfig[]
80+
> => {
81+
if (!configsQueryString) return [];
7982
setSavedConfigsLoading(true);
80-
guardrailsFetch<{
81-
data?: { configs?: SavedValidatorConfig[] } | SavedValidatorConfig[];
82-
configs?: SavedValidatorConfig[];
83-
}>(`/api/guardrails/validators/configs${configsQueryString}`, apiKey)
84-
.then((data) => {
85-
const nested = data?.data;
86-
const list: SavedValidatorConfig[] = Array.isArray(
87-
(nested as { configs?: SavedValidatorConfig[] })?.configs,
88-
)
89-
? (nested as { configs: SavedValidatorConfig[] }).configs
90-
: Array.isArray(nested)
91-
? (nested as SavedValidatorConfig[])
92-
: Array.isArray(data?.configs)
93-
? data.configs!
94-
: [];
95-
setSavedConfigs(list);
96-
})
97-
.catch(() => toast.error("Failed to load saved configs"))
98-
.finally(() => setSavedConfigsLoading(false));
83+
try {
84+
const data = await guardrailsFetch<{
85+
data?: { configs?: SavedValidatorConfig[] } | SavedValidatorConfig[];
86+
configs?: SavedValidatorConfig[];
87+
}>(`/api/guardrails/validators/configs${configsQueryString}`, apiKey);
88+
const nested = data?.data;
89+
const list: SavedValidatorConfig[] = Array.isArray(
90+
(nested as { configs?: SavedValidatorConfig[] })?.configs,
91+
)
92+
? (nested as { configs: SavedValidatorConfig[] }).configs
93+
: Array.isArray(nested)
94+
? (nested as SavedValidatorConfig[])
95+
: Array.isArray(data?.configs)
96+
? data.configs!
97+
: [];
98+
setSavedConfigs(list);
99+
return list;
100+
} catch {
101+
toast.error("Failed to load saved configs");
102+
return [];
103+
} finally {
104+
setSavedConfigsLoading(false);
105+
}
99106
}, [configsQueryString, apiKey]);
100107

101108
useEffect(() => {
@@ -150,7 +157,9 @@ export default function GuardrailsPage() {
150157
? `${base}/${selectedSavedConfig!.id}${configsQueryString}`
151158
: `${base}${configsQueryString}`;
152159

153-
const body = configValues;
160+
const body = isUpdate
161+
? buildValidatorUpdatePayload(configValues)
162+
: configValues;
154163

155164
await guardrailsFetch(url, apiKey, {
156165
method: isUpdate ? "PATCH" : "POST",
@@ -159,8 +168,15 @@ export default function GuardrailsPage() {
159168
toast.success(
160169
isUpdate ? `Config "${name}" updated` : `Config "${name}" saved`,
161170
);
162-
fetchSavedConfigs();
163-
setSelectedSavedConfig(null);
171+
const savedConfigId = selectedSavedConfig?.id;
172+
const freshList = await fetchSavedConfigs();
173+
if (isUpdate && savedConfigId) {
174+
setSelectedSavedConfig(
175+
freshList.find((c) => c.id === savedConfigId) ?? null,
176+
);
177+
} else {
178+
setSelectedSavedConfig(null);
179+
}
164180
} catch (e) {
165181
toast.error(e instanceof Error ? e.message : "Failed to save config");
166182
} finally {

app/lib/types/guardrails.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,18 @@ export interface OrgContext {
6262
organization_id: number;
6363
project_id: number;
6464
}
65+
66+
export interface ValidatorUpdatePayload {
67+
name?: unknown;
68+
type?: unknown;
69+
stage?: unknown;
70+
on_fail_action?: unknown;
71+
is_enabled?: unknown;
72+
}
73+
74+
export function buildValidatorUpdatePayload(
75+
configValues: Record<string, unknown>,
76+
): ValidatorUpdatePayload {
77+
const { name, type, stage, on_fail_action, is_enabled } = configValues;
78+
return { name, type, stage, on_fail_action, is_enabled };
79+
}

0 commit comments

Comments
 (0)