Skip to content

Commit 331d4c6

Browse files
committed
Fixes array index mismatch issues
1 parent 12ffd19 commit 331d4c6

File tree

2 files changed

+23
-19
lines changed

2 files changed

+23
-19
lines changed

app/javascript/components/data-tables/datastore/schema/class-fields-editor.jsx

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import React, {
2-
useState, useEffect, useMemo, useCallback,
2+
useState, useEffect, useCallback,
33
} from 'react';
44
import PropTypes from 'prop-types';
55
import { Modal } from 'carbon-components-react';
66
import MiqFormRenderer from '@@ddf';
77
import debounce from 'lodash/debounce';
88
import { schemaHeaders, createEditableRows } from '../helper';
99
import createClassFieldsSchema from './modal-form.schema';
10-
// import miqRedirectBack from '../../helpers/miq-redirect-back';
1110
import createSchemaEditSchema from './class-fields-schema';
1211
import mapper from '../../../../forms/mappers/componentMapper';
1312
import { SchemaTableComponent } from './schema-table';
@@ -33,11 +32,12 @@ export const ClassFieldsEditor = (props) => {
3332
// eslint-disable-next-line camelcase
3433
id, field_id, cells, clickable,
3534
}) => {
35+
// eslint-disable-next-line camelcase
36+
const fieldId = field_id;
3637
const reducedItems = cells.reduce((result, item, index) => {
3738
result[headers[index].name] = item;
38-
result.id = id;
39-
// eslint-disable-next-line camelcase
40-
result.field_id = field_id;
39+
result.id = fieldId.toString();
40+
result.field_id = fieldId;
4141
result.clickable = clickable;
4242
return result;
4343
}, {});
@@ -60,7 +60,7 @@ export const ClassFieldsEditor = (props) => {
6060
}, [state.rows]);
6161

6262
const handleModalClose = () => {
63-
setState((state) => ({ ...state, isModalOpen: false }));
63+
setState((state) => ({ ...state, isModalOpen: false, selectedRowId: undefined }));
6464
};
6565

6666
const formatFieldValues = (field, rowId) => {
@@ -80,8 +80,6 @@ export const ClassFieldsEditor = (props) => {
8080
return [aeTypeIcon, dTypeIcon, subIcon];
8181
};
8282

83-
debugger
84-
8583
const row = {
8684
id: rowId.toString(),
8785
field_id: field.id,
@@ -150,10 +148,10 @@ export const ClassFieldsEditor = (props) => {
150148
};
151149

152150
const updateFieldValueInState = (fieldName, newValue) => {
153-
// Update existing field in rows
151+
// Update existing field in state attr - rows
154152
setState((prevState) => {
155-
const updatedRow = prevState.rows.map((row) => {
156-
if (row.id === prevState.selectedRowId) {
153+
const updatedRow = prevState.rows.map((row, index) => {
154+
if (index === prevState.selectedRowId) {
157155
return {
158156
...row,
159157
[fieldName]: {
@@ -204,8 +202,6 @@ export const ClassFieldsEditor = (props) => {
204202
[aeClassId, state.selectedRowId]
205203
);
206204

207-
208-
209205
const onSchemaReset = () => {
210206
http.post(`/miq_ae_class/update_fields/${aeClassId}?button=reset`, { skipErrors: [400] })
211207
.then((response) => {
@@ -232,6 +228,7 @@ export const ClassFieldsEditor = (props) => {
232228
.catch(miqSparkleOff);
233229
};
234230

231+
// On cancelling the edit schema action
235232
const onCancel = () => {
236233
http.post(`/miq_ae_class/update_fields/${aeClassId}?button=cancel`, { skipErrors: [400] })
237234
.then((response) => {
@@ -272,12 +269,14 @@ export const ClassFieldsEditor = (props) => {
272269
aeTypeOptions,
273270
dTypeOptions,
274271
state.rows[state.selectedRowId],
272+
// state.rows.find((row) => row.id === state.selectedRowId),
275273
handleSchemaFieldChange,
276274
updateFieldValueInState,
277275
)}
278276
onSubmit={onModalSubmit}
279277
onCancel={handleModalClose}
280-
// canReset
278+
canReset
279+
disableSubmit={['invalid']}
281280
buttonsLabels={{ submitLabel: __('Save') }}
282281
/>
283282
</Modal>

app/javascript/components/data-tables/datastore/schema/class-fields-schema.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ const createSchemaEditSchema = (rows, setState, isSchemaModified) => {
1717
});
1818
};
1919

20-
const handleFieldDelete = (index) => {
21-
const field = rows.find((field) => field.id === index);
22-
const arrId = rows.findIndex((field) => field.id === index);
20+
const handleFieldDelete = (rowId) => {
21+
const field = rows.find((field) => field.id === rowId);
22+
// const field = rows.find((field, rowIndex) => rowIndex === index);
23+
const arrId = rows.findIndex((field) => field.id === rowId);
2324
const fId = field.field_id;
2425
const url = `/miq_ae_class/field_delete${fId ? `/${fId}` : ''}?arr_id=${arrId}`;
26+
// const url = `/miq_ae_class/field_delete${fId ? `/${fId}` : ''}?arr_id=${rowId}`;
2527
http.post(url, { skipErrors: [400] })
2628
.then(() => {
2729
setState((prev) => ({
2830
...prev,
29-
rows: prev.rows.filter((field) => field.id !== index),
31+
selectedRowId: undefined,
32+
rows: prev.rows.filter((field) => field.id !== rowId),
3033
}));
3134
})
3235
.catch((error) => {
@@ -49,11 +52,13 @@ const createSchemaEditSchema = (rows, setState, isSchemaModified) => {
4952
rows,
5053
headers: schemaHeaders(true),
5154
onCellClick: (selectedRow) => {
55+
debugger
5256
switch (selectedRow.callbackAction) {
5357
case 'editClassField':
5458
setState((prev) => ({
5559
...prev,
56-
selectedRowId: selectedRow.id,
60+
// selectedRowId: selectedRow.id,
61+
selectedRowId: rows.findIndex((row) => row.id === selectedRow.id),
5762
isModalOpen: true,
5863
formKey: !prev.formKey,
5964
}));

0 commit comments

Comments
 (0)