@@ -26,7 +26,9 @@ import { closeDrawerDialogBox } from '../actions/drawer';
2626import Utils from '../../Utils' ;
2727import { downloadJsonResponse , downloadPythonResponse } from './utils' ;
2828import * as Constants from '../../constants' ;
29-
29+ import * as ExperimentsApi from 'root/api/experiments' ;
30+ import { setExperimentParameters } from 'root/redux/actions/experiments' ;
31+ const SUPPORTED_TYPES = [ Constants . REAL_TYPE . INT , Constants . REAL_TYPE . FLOAT , Constants . REAL_TYPE . STR , Constants . REAL_TYPE . BOOL ] ;
3032let previousLayout = {
3133 edit : undefined ,
3234 network : undefined ,
@@ -161,18 +163,90 @@ export default (store) => (next) => (action) => {
161163 break ;
162164 }
163165 case CREATE_NETWORK : {
164- instantiateNetwork ( { } )
165- . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
166+ ExperimentsApi . getParameters ( )
167+ . then ( ( params ) => {
168+ const flattened = Utils . flatten ( params ) ;
169+ const paramKeys = Object . keys ( flattened ) ;
170+
171+ const filteredKeys = paramKeys . filter ( ( key ) => {
172+ // TODO: avoid to fetch field twice!
173+ const field = Utils . getMetadataField ( `netParams.${ key } ` ) ;
174+ if ( field && SUPPORTED_TYPES . includes ( field . type ) ) {
175+ return true ;
176+ }
177+ return false ;
178+ } ) ;
179+ next ( setExperimentParameters ( {
180+ parameters : filteredKeys ,
181+ } ) ) ;
182+ const expData = store . getState ( ) . experiments ;
183+ expData ?. inDesign ?. params ?. map ( ( param ) => {
184+ if ( filteredKeys . includes ( param . mapsTo ) ) {
185+ instantiateNetwork ( { } )
186+ . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
187+ } else {
188+ pythonErrorCallback ( { errorDetails : 'Missing Parameters' , errorMessage : 'Error' } )
189+ }
190+ } )
191+ } ) ;
166192 break ;
167193 }
168194 case CREATE_SIMULATE_NETWORK : {
169- simulateNetwork ( { allTrials : false } )
170- . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
195+ ExperimentsApi . getParameters ( )
196+ . then ( ( params ) => {
197+ const flattened = Utils . flatten ( params ) ;
198+ const paramKeys = Object . keys ( flattened ) ;
199+
200+ const filteredKeys = paramKeys . filter ( ( key ) => {
201+ // TODO: avoid to fetch field twice!
202+ const field = Utils . getMetadataField ( `netParams.${ key } ` ) ;
203+ if ( field && SUPPORTED_TYPES . includes ( field . type ) ) {
204+ return true ;
205+ }
206+ return false ;
207+ } ) ;
208+ next ( setExperimentParameters ( {
209+ parameters : filteredKeys ,
210+ } ) ) ;
211+ const expData = store . getState ( ) . experiments ;
212+ expData ?. inDesign ?. params ?. map ( ( param ) => {
213+ if ( filteredKeys . includes ( param . mapsTo ) ) {
214+ simulateNetwork ( { allTrials : false } )
215+ . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
216+ } else {
217+ pythonErrorCallback ( { errorDetails : 'Missing Parameters' , errorMessage : 'Error' } )
218+ }
219+ } )
220+ } ) ;
171221 break ;
172222 }
173223 case SIMULATE_NETWORK :
174- simulateNetwork ( { allTrials : action . payload , usePrevInst : false } )
175- . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
224+ ExperimentsApi . getParameters ( )
225+ . then ( ( params ) => {
226+ const flattened = Utils . flatten ( params ) ;
227+ const paramKeys = Object . keys ( flattened ) ;
228+
229+ const filteredKeys = paramKeys . filter ( ( key ) => {
230+ // TODO: avoid to fetch field twice!
231+ const field = Utils . getMetadataField ( `netParams.${ key } ` ) ;
232+ if ( field && SUPPORTED_TYPES . includes ( field . type ) ) {
233+ return true ;
234+ }
235+ return false ;
236+ } ) ;
237+ next ( setExperimentParameters ( {
238+ parameters : filteredKeys ,
239+ } ) ) ;
240+ const expData = store . getState ( ) . experiments ;
241+ expData ?. inDesign ?. params ?. map ( ( param ) => {
242+ if ( filteredKeys . includes ( param . mapsTo ) ) {
243+ simulateNetwork ( { allTrials : action . payload , usePrevInst : false } )
244+ . then ( toNetworkCallback ( false ) , pythonErrorCallback ) ;
245+ } else {
246+ pythonErrorCallback ( { errorDetails : 'Missing Parameters' , errorMessage : 'Error' } )
247+ }
248+ } )
249+ } ) ;
176250 break ;
177251 case PYTHON_CALL : {
178252 const callback = ( response ) => {
0 commit comments