@@ -16,6 +16,7 @@ import {
1616 Validator ,
1717 SavedValidatorConfig ,
1818 OrgContext ,
19+ buildValidatorUpdatePayload ,
1920} from "@/app/lib/types/guardrails" ;
2021import ValidatorConfigPanel from "@/app/components/guardrails/ValidatorConfigPanel" ;
2122import 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 {
0 commit comments