@@ -17,7 +17,9 @@ import {
1717 DropdownMenuContent ,
1818 DropdownMenuItem ,
1919 DropdownMenuTrigger ,
20- } from "@/components/ui/dropdown-menu" ;
20+ } from '@/components/ui/dropdown-menu' ;
21+ import { downloadFile } from '@/lib/download-file' ;
22+ import { SyntheticDataParameters } from '@/components/synthetic-data-interfaces/SyntheticDataParameters' ;
2123
2224const PAGE_STYLE = `
2325 @page {
@@ -67,8 +69,8 @@ export default function SyntheticDataGeneration() {
6769 runPython,
6870 sendData,
6971 error,
70- } = usePython < SyntheticDataInfo , SyntheticDataInfo > ( {
71- dataType : 'numeric' ,
72+ clusterInfo ,
73+ } = usePython < SyntheticDataParameters , SyntheticDataInfo > ( {
7274 isDemo : false ,
7375 sdgMethod : 'gc' ,
7476 samples : 1000 ,
@@ -106,7 +108,6 @@ export default function SyntheticDataGeneration() {
106108 }
107109 if ( data . demo ) {
108110 onRun ( {
109- dataType : 'numeric' ,
110111 isDemo : true ,
111112 sdgMethod : 'cart' ,
112113 samples : 1000 ,
@@ -115,7 +116,6 @@ export default function SyntheticDataGeneration() {
115116 } , [ initialised , data ] ) ;
116117
117118 const onRun = ( props : {
118- dataType : string ;
119119 isDemo : boolean ;
120120 sdgMethod : string ;
121121 samples : number ;
@@ -124,7 +124,6 @@ export default function SyntheticDataGeneration() {
124124 type : 'start' ,
125125 params : {
126126 parameters : {
127- dataType : props . dataType ,
128127 isDemo : props . isDemo ,
129128 sdgMethod : props . sdgMethod ,
130129 samples : props . samples ,
@@ -156,19 +155,42 @@ export default function SyntheticDataGeneration() {
156155 < div className = "ml-auto flex flex-row gap-2 hideonprint" >
157156 < DropdownMenu >
158157 < DropdownMenuTrigger asChild >
159- < Button variant = "outline" size = "sm" className = "p-4 text-sm" >
158+ < Button
159+ variant = "outline"
160+ size = "sm"
161+ className = "p-4 text-sm"
162+ >
160163 { t ( 'downloadButton' ) }
161164 </ Button >
162165 </ DropdownMenuTrigger >
163166 < DropdownMenuContent align = "end" >
164- < DropdownMenuItem onClick = { ( ) => reactToPrintFn ( ) } >
167+ < DropdownMenuItem
168+ onClick = { ( ) => reactToPrintFn ( ) }
169+ >
165170 < Share className = "size-3.5 mr-2" />
166171 { t ( 'syntheticData.exportToPDF' ) }
167172 </ DropdownMenuItem >
168- < DropdownMenuItem >
169- < Share className = "size-3.5 mr-2" />
170- { t ( 'syntheticData.exportToJSON' ) }
171- </ DropdownMenuItem >
173+ { clusterInfo && (
174+ < DropdownMenuItem
175+ onClick = { ( ) => {
176+ downloadFile (
177+ JSON . stringify (
178+ {
179+ fileName : data . fileName ,
180+ ...clusterInfo ,
181+ } ,
182+ null ,
183+ 2
184+ ) ,
185+ `${ data . fileName . replace ( '.csv' , '' ) || 'cluster-info' } -${ clusterInfo . date . toISOString ( ) } .json` ,
186+ 'application/json'
187+ ) ;
188+ } }
189+ >
190+ < Share className = "size-3.5 mr-2" />
191+ { t ( 'syntheticData.exportToJSON' ) }
192+ </ DropdownMenuItem >
193+ ) }
172194 </ DropdownMenuContent >
173195 </ DropdownMenu >
174196 </ div >
0 commit comments