@@ -25,6 +25,7 @@ export interface ReactUnipikaProps {
2525 showContainerSize ?: boolean ;
2626 initiallyCollapsed ?: boolean ;
2727 caseInsensitiveSearch ?: boolean ;
28+ renderError ?: ( error : unknown ) => React . ReactNode ;
2829}
2930
3031const defaultUnipikaSettings = {
@@ -51,26 +52,31 @@ export function ReactUnipika({
5152 showContainerSize,
5253 initiallyCollapsed,
5354 caseInsensitiveSearch,
55+ renderError,
5456} : ReactUnipikaProps ) {
55- const convertedValue = React . useMemo ( ( ) => {
56- // TODO: fix me later
57- // The call is required because unipika.format() applies default values to a passed settings inplace.
58- // We have to leave this call without it the behaviour will be broken.
59- if ( settings . format === 'raw-json' ) {
60- unipika . formatRaw ( value , settings ) ;
61- } else {
62- unipika . formatFromYSON ( value , settings ) ;
63- }
57+ const { convertedValue, error} = React . useMemo ( ( ) => {
58+ try {
59+ // TODO: fix me later
60+ // The call is required because unipika.format() applies default values to a passed settings inplace.
61+ // We have to leave this call without it the behaviour will be broken.
62+ if ( settings . format === 'raw-json' ) {
63+ unipika . formatRaw ( value , settings ) ;
64+ } else {
65+ unipika . formatFromYSON ( value , settings ) ;
66+ }
6467
65- if ( value === undefined ) {
66- return '' ;
67- }
68+ if ( value === undefined ) {
69+ return '' ;
70+ }
6871
69- if ( settings . format === 'raw-json' ) {
70- return unipika . converters . raw ( value , settings ) ;
71- }
72+ if ( settings . format === 'raw-json' ) {
73+ return unipika . converters . raw ( value , settings ) ;
74+ }
7275
73- return unipika . converters . yson ( value , settings ) ;
76+ return { convertedValue : unipika . converters . yson ( value , settings ) } ;
77+ } catch ( error ) {
78+ return { error} ;
79+ }
7480 } , [ value , settings ] ) ;
7581
7682 const classes = block (
@@ -80,6 +86,10 @@ export function ReactUnipika({
8086 className ,
8187 ) ;
8288
89+ if ( error ) {
90+ return renderError ?.( error ) ;
91+ }
92+
8393 function getFormattedTitle ( ) {
8494 if ( ! inline ) {
8595 return undefined ;
0 commit comments