Skip to content

Commit ee272ae

Browse files
committed
updated the response of refresh api into the form
1 parent 68ce858 commit ee272ae

File tree

5 files changed

+76
-74
lines changed

5 files changed

+76
-74
lines changed

app/javascript/components/order-service-form/fields.schema.js

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { componentTypes } from '@@ddf';
2+
// eslint-disable-next-line import/no-cycle
3+
import { buildFields } from './helper';
24

35
let dynamicFields = {};
46

57
const generateDynamicFields = (field) => {
68
dynamicFields = { ...dynamicFields, [field.name]: null };
7-
console.log('dynamicFields=', dynamicFields);
89
};
910

1011
/** Function to build a text box. */
11-
export const buildTextBox = (field, validate, setState) => {
12+
export const buildTextBox = (field, validate, setData) => {
1213
let component = {};
13-
console.log(field);
1414
generateDynamicFields(field);
1515

1616
if (field.options.protected) {
@@ -263,52 +263,60 @@ export const buildRadioButtons = (field, validate) => {
263263
};
264264
};
265265

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. */
279267
const fieldSpinner = (fieldName, show) => {
280268
const activeSpinner = document.getElementById(`refreshSpinner_${fieldName}`);
281269
activeSpinner.style.display = show ? 'block' : 'none';
282270
};
283271

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;
295289
}
296-
}
290+
return group;
291+
});
297292
}
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) => {
301308
const newParams = {
302309
...params,
303-
resource: { ...resource, fields: [responderFieldName] },
310+
resource: { ...resource, fields: [responderName] },
304311
};
305-
refreshFields(response, newParams, responderFieldName, resource, setState, fieldPosition);
312+
fieldSpinner(fieldName, false);
313+
refreshFields(response, newParams, responderName, initialData, resource, data, setData, fieldPosition);
306314
});
307315
});
308316
};
309317

310318
/** 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) => {
312320
const resource = {
313321
dialog_fields: dynamicFields,
314322
fields: [field.name],
@@ -322,11 +330,11 @@ const onRefreshField = (response, field, initialData, setState, fieldPosition) =
322330
resource,
323331
};
324332

325-
refreshFields(response, params, field.name, resource, setState, fieldPosition);
333+
refreshFields(response, params, field.name, initialData, resource, data, setData, fieldPosition);
326334
};
327335

328336
/** 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) => ({
330338
component: 'refresh-button',
331339
id: `refresh_${field.id}`,
332340
name: `refresh_${field.name}`,
@@ -335,5 +343,5 @@ export const buildRefreshButton = (response, field, initialData, setState, field
335343
className: 'refresh-button',
336344
showRefreshButton: field.show_refresh_button,
337345
fieldName: field.name,
338-
onRefresh: () => onRefreshField(response, field, initialData, setState, fieldPosition),
346+
onRefresh: () => onRefreshField(response, field, initialData, data, setData, fieldPosition),
339347
});

app/javascript/components/order-service-form/helper.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const formatTimeControl = (field) => {
5050
};
5151

5252
/** Function to build the form fields. */
53-
export const buildFields = (response, setState, initialData) => {
53+
export const buildFields = (response, data, setData, initialData) => {
5454
const dialogTabs = [];
5555
let dialogSubForms = [];
5656
let dialogFields = [];
@@ -80,7 +80,7 @@ export const buildFields = (response, setState, initialData) => {
8080
}
8181
let component = {};
8282
if (field.type === 'DialogFieldTextBox') {
83-
component = buildTextBox(field, validate, setState);
83+
component = buildTextBox(field, validate, setData);
8484
}
8585

8686
if (field.type === 'DialogFieldTextAreaBox') {
@@ -109,7 +109,7 @@ export const buildFields = (response, setState, initialData) => {
109109
}
110110
const rowItems = [component];
111111
const fieldPosition = { tabIndex, groupIndex };
112-
const refreshButton = buildRefreshButton(response, field, initialData, setState, fieldPosition);
112+
const refreshButton = buildRefreshButton(response, field, initialData, data, setData, fieldPosition);
113113
rowItems.push(refreshButton);
114114
dialogFields.push(rowItems);
115115

@@ -143,7 +143,8 @@ export const buildFields = (response, setState, initialData) => {
143143
dialogTabs.push(tabComponent);
144144
dialogSubForms = [];
145145
});
146-
setState({
146+
setData({
147+
...data,
147148
fields: dialogTabs,
148149
isLoading: false,
149150
hasTime,

app/javascript/components/order-service-form/index.jsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ const OrderServiceForm = ({ initialData }) => {
1515
dialogId, resourceActionId, targetId, targetType, apiSubmitEndpoint, apiAction, openUrl, realTargetType, finishSubmitEndpoint,
1616
} = initialData;
1717

18-
const [{
19-
// eslint-disable-next-line no-unused-vars
20-
isLoading, initialValues, fields, hasTime, showPastDates, showPastDatesFieldErrors, dateErrorFields, checkBoxes, dates,
21-
}, setState] = useState({
18+
const [data, setData] = useState({
2219
isLoading: true,
2320
fields: [],
2421
hasTime: false,
@@ -32,14 +29,13 @@ const OrderServiceForm = ({ initialData }) => {
3229
const [showDateError, setShowDateError] = useState([]);
3330

3431
useEffect(() => {
35-
API.get(`/api/service_dialogs/${dialogId}?resource_action_id=${resourceActionId}&target_id=${targetId}&target_type=${targetType}`)
32+
const url = `/api/service_dialogs/${dialogId}?resource_action_id=${resourceActionId}&target_id=${targetId}&target_type=${targetType}`;
33+
API.get(url)
3634
.then((response) => {
37-
buildFields(response, setState, initialData);
35+
buildFields(response, data, setData, initialData);
3836
});
3937
}, []);
4038

41-
console.log("---fields=", fields);
42-
4339
const onSubmit = (values) => {
4440
let submitData = { action: 'order', ...values };
4541

@@ -82,12 +78,12 @@ const OrderServiceForm = ({ initialData }) => {
8278
'refresh-button': OrderServiceRefreshButton,
8379
};
8480

85-
return !isLoading && (
81+
return !data.isLoading && (
8682
<MiqFormRenderer
87-
FormTemplate={(props) => <FormTemplate {...props} fields={fields} />}
83+
FormTemplate={(props) => <FormTemplate {...props} fields={data.fields} />}
8884
componentMapper={componentMapper}
89-
schema={createSchema(fields, showDateError)}
90-
initialValues={initialValues}
85+
schema={createSchema(data.fields, showDateError)}
86+
initialValues={data.initialValues}
9187
onSubmit={onSubmit}
9288
onCancel={onCancel}
9389
/>

app/javascript/components/order-service-form/order-service-refresh-button.jsx

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,24 @@ import { Button, Loading } from 'carbon-components-react';
33
import { Renew16 } from '@carbon/icons-react';
44
import PropTypes from 'prop-types';
55

6-
const OrderServiceRefreshButton = ({ onRefresh, showRefreshButton, fieldName }) => {
7-
console.log('fieldName=', fieldName);
8-
return (
9-
<>
10-
{showRefreshButton && (
11-
<Button
12-
hasIconOnly
13-
className="refresh-button"
14-
id="order-service-refresh-button"
15-
onClick={() => onRefresh()}
16-
iconDescription={__('Refresh')}
17-
renderIcon={Renew16}
18-
/>
6+
const OrderServiceRefreshButton = ({ onRefresh, showRefreshButton, fieldName }) => (
7+
<>
8+
{showRefreshButton && (
9+
<Button
10+
hasIconOnly
11+
className="refresh-button"
12+
id="order-service-refresh-button"
13+
onClick={() => onRefresh()}
14+
iconDescription={__('Refresh')}
15+
renderIcon={Renew16}
16+
/>
1917

20-
)}
21-
<div className="refreshSpinner" id={`refreshSpinner_${fieldName}`}>
22-
<Loading active small withOverlay={false} className="loading" />
23-
</div>
24-
</>
25-
);
26-
};
18+
)}
19+
<div className="refreshSpinner" id={`refreshSpinner_${fieldName}`}>
20+
<Loading active small withOverlay={false} className="loading" />
21+
</div>
22+
</>
23+
);
2724
OrderServiceRefreshButton.propTypes = {
2825
onRefresh: PropTypes.func.isRequired,
2926
showRefreshButton: PropTypes.bool.isRequired,

app/views/shared/dialogs/_dialog_user.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
- real_target_type ||= dialog[:realTargetType]
1111
- target_id ||= dialog[:targetId]
1212
- target_type ||= dialog[:targetType]
13-
= dialog.inspect
13+
1414
= react('OrderServiceForm', :initialData => dialog)
1515

1616

0 commit comments

Comments
 (0)