@@ -17,7 +17,7 @@ import { Skeleton } from "../ui/skeleton";
1717interface DatasetPanelProps {
1818 datasetId : string ;
1919 datapointId : string ;
20- onClose : ( ) => void ;
20+ onClose : ( updatedDatapoint ?: Datapoint ) => void ;
2121}
2222
2323// Helper function to safely parse JSON strings
@@ -60,11 +60,13 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
6060 const originalMetadataRef = useRef < Record < string , any > > ( { } ) ;
6161
6262 // Check if current values differ from original values
63- const hasChanges = useCallback ( ( ) => (
64- JSON . stringify ( newData ) !== JSON . stringify ( originalDataRef . current ) ||
65- JSON . stringify ( newTarget ) !== JSON . stringify ( originalTargetRef . current ) ||
66- JSON . stringify ( newMetadata ) !== JSON . stringify ( originalMetadataRef . current )
67- ) , [ newData , newTarget , newMetadata ] ) ;
63+ const hasChanges = useCallback (
64+ ( ) =>
65+ JSON . stringify ( newData ) !== JSON . stringify ( originalDataRef . current ) ||
66+ JSON . stringify ( newTarget ) !== JSON . stringify ( originalTargetRef . current ) ||
67+ JSON . stringify ( newMetadata ) !== JSON . stringify ( originalMetadataRef . current ) ,
68+ [ newData , newTarget , newMetadata ]
69+ ) ;
6870
6971 const saveChanges = useCallback ( async ( ) => {
7072 // don't do anything if no changes or invalid jsons
@@ -97,7 +99,19 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
9799 originalDataRef . current = newData ;
98100 originalTargetRef . current = newTarget ;
99101 originalMetadataRef . current = newMetadata ;
100- } , [ hasChanges , isValidJsonData , isValidJsonTarget , isValidJsonMetadata , newData , newTarget , newMetadata , projectId , datasetId , datapointId , toast ] ) ;
102+ } , [
103+ hasChanges ,
104+ isValidJsonData ,
105+ isValidJsonTarget ,
106+ isValidJsonMetadata ,
107+ newData ,
108+ newTarget ,
109+ newMetadata ,
110+ projectId ,
111+ datasetId ,
112+ datapointId ,
113+ toast ,
114+ ] ) ;
101115
102116 useEffect ( ( ) => {
103117 if ( ! datapoint ) return ;
@@ -117,6 +131,20 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
117131 originalMetadataRef . current = parsedMetadata ;
118132 } , [ datapoint ] ) ;
119133
134+ const handleClose = useCallback ( ( ) => {
135+ if ( datapoint ) {
136+ const updatedDatapoint : Datapoint = {
137+ ...datapoint ,
138+ data : JSON . stringify ( newData ) ,
139+ target : JSON . stringify ( newTarget ) ,
140+ metadata : JSON . stringify ( newMetadata ) ,
141+ } ;
142+ onClose ( updatedDatapoint ) ;
143+ } else {
144+ onClose ( ) ;
145+ }
146+ } , [ onClose , datapoint , newData , newTarget , newMetadata ] ) ;
147+
120148 // Debounced auto-save effect
121149 useEffect ( ( ) => {
122150 // Skip if datapoint is not loaded yet or if values are invalid
@@ -142,7 +170,17 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
142170 clearTimeout ( autoSaveFuncTimeoutId . current ) ;
143171 }
144172 } ;
145- } , [ newData , newTarget , newMetadata , hasChanges , saveChanges , datapoint , isValidJsonData , isValidJsonTarget , isValidJsonMetadata ] ) ;
173+ } , [
174+ newData ,
175+ newTarget ,
176+ newMetadata ,
177+ hasChanges ,
178+ saveChanges ,
179+ datapoint ,
180+ isValidJsonData ,
181+ isValidJsonTarget ,
182+ isValidJsonMetadata ,
183+ ] ) ;
146184
147185 if ( isLoading ) {
148186 return (
@@ -158,11 +196,7 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
158196 return (
159197 < div className = "flex flex-col h-full w-full" >
160198 < div className = "h-12 flex flex-none space-x-2 px-3 items-center border-b" >
161- < Button
162- variant = "ghost"
163- className = "px-1"
164- onClick = { onClose }
165- >
199+ < Button variant = "ghost" className = "px-1" onClick = { handleClose } >
166200 < ChevronsRight />
167201 </ Button >
168202 < div > Row</ div >
@@ -181,7 +215,7 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
181215 payload : {
182216 data : safeParseJSON ( datapoint . data , { } ) ,
183217 target : safeParseJSON ( datapoint . target , { } ) ,
184- metadata : safeParseJSON ( datapoint . metadata , { } )
218+ metadata : safeParseJSON ( datapoint . metadata , { } ) ,
185219 } ,
186220 metadata : { source : "datapoint" , id : datapoint . id , datasetId : datasetId } ,
187221 } ,
@@ -195,6 +229,7 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
195229 < div className = "flex flex-col space-y-2" >
196230 < Label className = "font-medium" > Data</ Label >
197231 < CodeHighlighter
232+ presetKey = { `dataset-data-${ datasetId } ` }
198233 className = "max-h-[400px] rounded"
199234 value = { JSON . stringify ( newData , null , 2 ) }
200235 defaultMode = "json"
@@ -225,10 +260,10 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
225260 < div className = "flex flex-col space-y-2" >
226261 < Label className = "font-medium" > Target</ Label >
227262 < CodeHighlighter
263+ presetKey = { `dataset-target-${ datasetId } ` }
228264 className = "max-h-[400px] rounded w-full"
229265 value = { JSON . stringify ( newTarget , null , 2 ) }
230266 defaultMode = "json"
231- readOnly = { false }
232267 onChange = { ( s ) => {
233268 try {
234269 setNewTarget ( JSON . parse ( s ) ) ;
@@ -243,10 +278,10 @@ export default function DatasetPanel({ datasetId, datapointId, onClose }: Datase
243278 < div className = "flex flex-col space-y-2 pb-4" >
244279 < Label className = "font-medium" > Metadata</ Label >
245280 < CodeHighlighter
281+ presetKey = { `dataset-metadata-${ datasetId } ` }
246282 className = "rounded max-h-[400px]"
247283 value = { JSON . stringify ( newMetadata , null , 2 ) }
248284 defaultMode = "json"
249- readOnly = { false }
250285 onChange = { ( s : string ) => {
251286 try {
252287 if ( s === "" ) {
0 commit comments