@@ -20,13 +20,30 @@ import { castScalarToModelValue, serializeModelValueToScalar } from "../../core/
2020import { useDataCollection } from "../../hooks/useDataCollection" ;
2121import { DEFAULT_LINKIFY_PROPS } from "../../utils/url" ;
2222import ColorPicker , { InlineColorPicker } from "../ColorPicker" ;
23- import { FieldModelIcon } from "../common-icons" ;
23+ import MessageTooltip from "../MessageTooltip" ;
24+ import { FieldModelIcon , InvalidDataIcon } from "../common-icons" ;
2425import { BaseOption , CreatableSelect , optionize } from "../forms/Select" ;
2526
2627/**
2728 * Render values:
2829 * **************
2930 */
31+ export const InvalidAttributeRenderer : FC < { value : Scalar ; expectedType : FieldModelType } > = ( {
32+ value,
33+ expectedType,
34+ } ) => {
35+ const { t } = useTranslation ( "translation" ) ;
36+ return (
37+ < span className = "invalid-value" >
38+ < span > { value } </ span > { " " }
39+ < MessageTooltip
40+ className = "message-tooltip"
41+ message = { t ( "graph.model.warnings.invalid_data" , { value, type : expectedType } ) }
42+ icon = { InvalidDataIcon }
43+ />
44+ </ span >
45+ ) ;
46+ } ;
3047export const AttributeRenderers : {
3148 [ K in keyof FieldModelAbstraction ] : FC <
3249 {
@@ -71,11 +88,13 @@ export const RenderKeywords = AttributeRenderers.keywords;
7188export const RenderDate = AttributeRenderers . date ;
7289export const RenderColor = AttributeRenderers . color ;
7390
74- export const RenderItemAttribute : FC < { field : FieldModelTypeSpec ; value : Scalar } > = ( { field, value } ) =>
75- createElement ( AttributeRenderers [ field . type ] as FC < { value ?: ModelValueType } > , {
76- ...field ,
77- value : castScalarToModelValue ( value , field ) ,
78- } ) ;
91+ export const RenderItemAttribute : FC < { field : FieldModelTypeSpec ; value : Scalar } > = ( { field, value } ) => {
92+ const castValue = castScalarToModelValue ( value , field ) ;
93+ const AttributeRenderer = AttributeRenderers [ field . type ] as FC < { value ?: ModelValueType } > ;
94+
95+ if ( ! isNil ( value ) && isNil ( castValue ) ) return < InvalidAttributeRenderer value = { value } expectedType = { field . type } /> ;
96+ return < AttributeRenderer { ...field } value = { castValue } /> ;
97+ } ;
7998
8099/**
81100 * Edit values:
0 commit comments