1
1
import { componentTypes } from '@@ddf' ;
2
+ // eslint-disable-next-line import/no-cycle
3
+ import { buildFields } from './helper' ;
2
4
3
5
let dynamicFields = { } ;
4
6
5
7
const generateDynamicFields = ( field ) => {
6
8
dynamicFields = { ...dynamicFields , [ field . name ] : null } ;
7
- console . log ( 'dynamicFields=' , dynamicFields ) ;
8
9
} ;
9
10
10
11
/** Function to build a text box. */
11
- export const buildTextBox = ( field , validate , setState ) => {
12
+ export const buildTextBox = ( field , validate , setData ) => {
12
13
let component = { } ;
13
- console . log ( field ) ;
14
14
generateDynamicFields ( field ) ;
15
15
16
16
if ( field . options . protected ) {
@@ -263,52 +263,60 @@ export const buildRadioButtons = (field, validate) => {
263
263
} ;
264
264
} ;
265
265
266
- const updateDialogFieldData = ( field , data ) => ( {
267
- ...field ,
268
- data_type : data . data_type ,
269
- options : data . options ,
270
- read_only : data . read_only ,
271
- required : data . required ,
272
- visible : data . visible ,
273
- values : [ [ '001' , 'one' ] , [ '002' , 'two' ] ] ,
274
- default_value : data . default_value ,
275
- validator_rule : data . validator_rule ,
276
- validator_type : data . validator_type ,
277
- } ) ;
278
-
266
+ /** Function to show/hide loaders near to the fields. */
279
267
const fieldSpinner = ( fieldName , show ) => {
280
268
const activeSpinner = document . getElementById ( `refreshSpinner_${ fieldName } ` ) ;
281
269
activeSpinner . style . display = show ? 'block' : 'none' ;
282
270
} ;
283
271
284
- const refreshFields = ( response , params , fieldName , resource , setState , fieldPosition ) => {
285
- fieldSpinner ( fieldName , true ) ;
286
- API . post ( `/api/service_dialogs/${ response . id } ` , params ) . then ( ( { result } ) => {
287
- const dialogFieldResponders = result [ fieldName ] . dialog_field_responders ;
288
- const tab = response . content [ 0 ] . dialog_tabs [ fieldPosition . tabIndex ] ;
289
- if ( tab ) {
290
- const section = tab . dialog_groups [ fieldPosition . groupIndex ] ;
291
- if ( section ) {
292
- const field = section . dialog_fields . find ( ( item ) => item . name === fieldName ) ;
293
- if ( field ) {
294
- updateDialogFieldData ( field , result [ fieldName ] ) ;
272
+ /** Function to update the response and build the fileds again after field refresh. */
273
+ const updateResponseFields = ( response , fieldPosition , fieldName , result ) => {
274
+ response . content [ 0 ] . dialog_tabs . map ( ( tab , tabIndex ) => {
275
+ if ( tabIndex === fieldPosition . tabIndex ) {
276
+ tab . dialog_groups . map ( ( group , groupIndex ) => {
277
+ if ( groupIndex === fieldPosition . groupIndex ) {
278
+ const field = group . dialog_fields . find ( ( item ) => item . name === fieldName ) ;
279
+ const data = result [ fieldName ] ;
280
+ field . data_type = data . data_type ;
281
+ field . options = data . options ;
282
+ field . read_only = data . read_only ;
283
+ field . required = data . required ;
284
+ field . visible = data . visible ;
285
+ field . values = [ [ '001' , 'one' ] , [ '002' , 'two' ] ] ; // data.values;
286
+ field . default_value = data . default_value ;
287
+ field . validator_rule = data . validator_rule ;
288
+ field . validator_type = data . validator_type ;
295
289
}
296
- }
290
+ return group ;
291
+ } ) ;
297
292
}
298
- console . log ( 'updatedResponse=' , response ) ;
299
- fieldSpinner ( fieldName , false ) ;
300
- dialogFieldResponders . forEach ( ( responderFieldName ) => {
293
+ return tab ;
294
+ } ) ;
295
+ return response ;
296
+ } ;
297
+
298
+ /** Function to fetch the field information and update the field value.
299
+ * If another field is linked, the same function is called again to update the linked field.
300
+ */
301
+ const refreshFields = ( response , params , fieldName , initialData , resource , data , setData , fieldPosition ) => {
302
+ fieldSpinner ( fieldName , true ) ;
303
+ API . post ( `/api/service_dialogs/${ response . id } ` , params ) . then ( ( { result } ) => {
304
+ const responders = result [ fieldName ] . dialog_field_responders ;
305
+ const newResponse = updateResponseFields ( response , fieldPosition , fieldName , result ) ;
306
+ buildFields ( newResponse , data , setData , initialData ) ;
307
+ responders . forEach ( ( responderName ) => {
301
308
const newParams = {
302
309
...params ,
303
- resource : { ...resource , fields : [ responderFieldName ] } ,
310
+ resource : { ...resource , fields : [ responderName ] } ,
304
311
} ;
305
- refreshFields ( response , newParams , responderFieldName , resource , setState , fieldPosition ) ;
312
+ fieldSpinner ( fieldName , false ) ;
313
+ refreshFields ( response , newParams , responderName , initialData , resource , data , setData , fieldPosition ) ;
306
314
} ) ;
307
315
} ) ;
308
316
} ;
309
317
310
318
/** Function to handle the the refresh button click event. */
311
- const onRefreshField = ( response , field , initialData , setState , fieldPosition ) => {
319
+ const onRefreshField = ( response , field , initialData , data , setData , fieldPosition ) => {
312
320
const resource = {
313
321
dialog_fields : dynamicFields ,
314
322
fields : [ field . name ] ,
@@ -322,11 +330,11 @@ const onRefreshField = (response, field, initialData, setState, fieldPosition) =
322
330
resource,
323
331
} ;
324
332
325
- refreshFields ( response , params , field . name , resource , setState , fieldPosition ) ;
333
+ refreshFields ( response , params , field . name , initialData , resource , data , setData , fieldPosition ) ;
326
334
} ;
327
335
328
336
/** Function to build a refresh button near to drop down. */
329
- export const buildRefreshButton = ( response , field , initialData , setState , fieldPosition ) => ( {
337
+ export const buildRefreshButton = ( response , field , initialData , data , setData , fieldPosition ) => ( {
330
338
component : 'refresh-button' ,
331
339
id : `refresh_${ field . id } ` ,
332
340
name : `refresh_${ field . name } ` ,
@@ -335,5 +343,5 @@ export const buildRefreshButton = (response, field, initialData, setState, field
335
343
className : 'refresh-button' ,
336
344
showRefreshButton : field . show_refresh_button ,
337
345
fieldName : field . name ,
338
- onRefresh : ( ) => onRefreshField ( response , field , initialData , setState , fieldPosition ) ,
346
+ onRefresh : ( ) => onRefreshField ( response , field , initialData , data , setData , fieldPosition ) ,
339
347
} ) ;
0 commit comments