@@ -7,6 +7,7 @@ import AddIcon from '@mui/icons-material/Add';
7
7
8
8
export type MetadataType = 'BOOLEAN' | 'INTEGER' | 'FLOAT' | 'STRING' | 'BLOB' ;
9
9
10
+ //The format used for managing the metadata list in the component
10
11
export interface NewMetadataField {
11
12
key ?: string ;
12
13
value ?: any ;
@@ -16,6 +17,7 @@ export interface NewMetadataField {
16
17
isNewlyCreated ?: boolean ;
17
18
}
18
19
20
+ //The format the component expects to receive the metadata list
19
21
export interface MetadataField {
20
22
key : string ;
21
23
value : any ;
@@ -24,13 +26,23 @@ export interface MetadataField {
24
26
isAutoGenerated ?: boolean ;
25
27
}
26
28
29
+ //The format the component returns the metadata list
30
+ export interface DatapointMetadataInput {
31
+ datapointId ?: number ;
32
+ url ?: string ;
33
+ key : string ;
34
+ value : string ;
35
+ valueType : MetadataType ;
36
+ allowMultiple ?: boolean ;
37
+ }
38
+
27
39
export interface MetadataKeyValueListProps {
28
40
maxHeight ?: string ;
29
41
metadataList : MetadataField [ ] ;
30
42
editingEnabled : boolean ;
31
43
deletionEnabled : boolean ;
32
44
onDeleteHandler ?: ( keyName : string ) => void ;
33
- onSaveHandler ?: ( metadataList : NewMetadataField [ ] ) => void ;
45
+ onChangeHandler ?: ( metadataList : DatapointMetadataInput [ ] ) => void ;
34
46
validateValueByType ?: ( valueType : MetadataType , value : string ) => boolean ;
35
47
}
36
48
@@ -40,7 +52,7 @@ export function MetadataKeyValueList({
40
52
editingEnabled,
41
53
deletionEnabled,
42
54
onDeleteHandler,
43
- onSaveHandler ,
55
+ onChangeHandler ,
44
56
validateValueByType,
45
57
} : MetadataKeyValueListProps ) {
46
58
//Todo:
@@ -68,10 +80,16 @@ export function MetadataKeyValueList({
68
80
}
69
81
} , [ metadataList ] ) ;
70
82
71
- //Todo: create a function to save changes
72
- // if (onSaveHandler) {
73
- // onSaveHandler({ ...temporaryMetadataList });
74
- // }
83
+ const convertNewMetadataFieldToDatapointMetadataInput = ( metadataList : NewMetadataField [ ] ) : DatapointMetadataInput [ ] => {
84
+ return metadataList . map ( ( metadataField ) => {
85
+ return {
86
+ key : metadataField . key as string ,
87
+ value : metadataField . value as string ,
88
+ valueType : metadataField . valueType as MetadataType ,
89
+ allowMultiple : ! ! metadataField . multiple ,
90
+ } ;
91
+ } ) ;
92
+ }
75
93
76
94
useEffect ( ( ) => {
77
95
if ( shouldScrollToBottom && metadataFieldsSection . current ) {
@@ -82,6 +100,9 @@ export function MetadataKeyValueList({
82
100
setShouldScrollToBottom ( false ) ; //turn it off after scrolling
83
101
}
84
102
setAutoFocusNewlyCreatedFieldKey ( true ) ; //highlight again when the user adds new field
103
+
104
+ ! ! onChangeHandler && onChangeHandler ( convertNewMetadataFieldToDatapointMetadataInput ( temporaryMetadataList ) ) ;
105
+
85
106
} , [ temporaryMetadataList ] ) ;
86
107
87
108
useEffect ( ( ) => {
0 commit comments