fix(ui): extract meaningful error messages from API responses
Introduces ApiError class in client.ts that parses Spring Boot error bodies to extract human-readable messages (message, error, detail fields). Adds errorMessage() helper used by all toast descriptions instead of raw String(err) which dumped JSON blobs to the user. Affected: all 10 page components that display error toasts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
9
ui/src/pages/vendor/CertificatesPage.tsx
vendored
9
ui/src/pages/vendor/CertificatesPage.tsx
vendored
@@ -1,4 +1,5 @@
|
||||
import { useRef, useState } from 'react';
|
||||
import { errorMessage } from '../../api/client';
|
||||
import {
|
||||
Alert,
|
||||
Badge,
|
||||
@@ -163,7 +164,7 @@ export function CertificatesPage() {
|
||||
toast({ title: 'Validation failed', description: result.errors.join(', '), variant: 'error' });
|
||||
}
|
||||
} catch (err) {
|
||||
toast({ title: 'Upload failed', description: String(err), variant: 'error' });
|
||||
toast({ title: 'Upload failed', description: errorMessage(err), variant: 'error' });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +173,7 @@ export function CertificatesPage() {
|
||||
await activateMutation.mutateAsync();
|
||||
toast({ title: 'Certificate activated', variant: 'success' });
|
||||
} catch (err) {
|
||||
toast({ title: 'Activation failed', description: String(err), variant: 'error' });
|
||||
toast({ title: 'Activation failed', description: errorMessage(err), variant: 'error' });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +182,7 @@ export function CertificatesPage() {
|
||||
await restoreMutation.mutateAsync();
|
||||
toast({ title: 'Certificate restored from archive', variant: 'success' });
|
||||
} catch (err) {
|
||||
toast({ title: 'Restore failed', description: String(err), variant: 'error' });
|
||||
toast({ title: 'Restore failed', description: errorMessage(err), variant: 'error' });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,7 +191,7 @@ export function CertificatesPage() {
|
||||
await discardMutation.mutateAsync();
|
||||
toast({ title: 'Staged certificate discarded', variant: 'success' });
|
||||
} catch (err) {
|
||||
toast({ title: 'Discard failed', description: String(err), variant: 'error' });
|
||||
toast({ title: 'Discard failed', description: errorMessage(err), variant: 'error' });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user