Made DynamicTable functional

This commit is contained in:
vpopescu
2022-09-22 13:01:53 +02:00
parent e8ae58f6b5
commit 0a1811e86c

View File

@@ -1,141 +1,95 @@
import React, { useState } from "react"; import React, { useState, useEffect } from "react";
import "./table-select.css"; import "./table-select.css";
import PropTypes from "prop-types";
export default class DynamicTable extends React.Component {
constructor(props) {
super(props);
this.current_propobject = props.current_propobject;
this.setProp = props.setProp;
this.setPropKeys = props.setPropKeys;
this.setPropValues = props.setPropValues;
let current_keys = []; const DynamicTable = (props) => {
let current_values = [];
for (var property in this.current_propobject) { var [message, setMessage] = useState(""),
current_keys.push(property); [message2, setMessage2] = useState("");
current_values.push(this.current_propobject[property]); var {current_propobject} = props;
}
//current_keys = this.current_propobject.propkeys
//current_values = this.current_propobject.propvalues
this.state = { var propobject = current_propobject;
message: "",
message2: "", var [propkeys, setOwnKeys] = useState(Object.keys(current_propobject));
propkeys: current_keys, var [propvalues, setOwnValues] = useState(Object.values(current_propobject));
propvalues: current_values, var updateMessageKey = (event) => {
propobject: "", setMessage(event.target.value);
};
} }
var updateMessageValue = (event) => {
updateMessageKey(event) { setMessage2(event.target.value);
this.setState({
message: event.target.value,
});
} }
const handleRefresh = () => {
updateMessageValue(event) {
this.setState({
message2: event.target.value,
});
}
handleRefresh(i) {
var propkeys = this.state.propkeys;
var propvalues = this.state.propvalues;
var propobject = {}; var propobject = {};
propkeys.forEach((key, i) => (propobject[key] = propvalues[i])); propkeys.forEach((key, i) => (propobject[key] = propvalues[i]));
props.setProp(propobject);
props.setPropKeys(propkeys);
props.setPropValues(propvalues);
setMessage("");
setMessage2("");
console.log(propobject);
this.setProp(propobject);
this.setPropKeys(propkeys);
this.setPropValues(propvalues);
this.setState({
propkeys: propkeys,
propvalues: propvalues,
message: "",
message2: "",
propobject: propobject,
});
} }
handleClick() {
var propkeys = this.state.propkeys; const handleClick = () => {
var propvalues = this.state.propvalues; if (message != "") {
if (this.state.message != "") { if (message2 != "") {
if (this.state.message2 != "") { propkeys.push(message);
propkeys.push(this.state.message); propvalues.push(message2);
propvalues.push(this.state.message2);
} else { } else {
console.log("Value not valid"); console.log("Value not valid");
} }
} else { } else {
console.log("Value not valid"); console.log("Value not valid");
} }
var propobject = {}; var propobject = {};
propkeys.forEach((key, i) => (propobject[key] = propvalues[i])); propkeys.forEach((key, i) => (propobject[key] = propvalues[i]));
props.setProp(propobject);
props.setPropKeys(propkeys);
setOwnKeys(propkeys);
props.setPropValues(propvalues);
setOwnValues(propvalues);
setMessage("");
setMessage2("");
console.log(propkeys);
console.log(propvalues);
console.log(propobject); console.log(propobject);
this.setProp(propobject);
this.setPropKeys(propkeys);
this.setPropValues(propvalues);
this.setState({
propkeys: propkeys,
propvalues: propvalues,
message: "",
message2: "",
propobject: propobject,
});
} }
handleValueChanged(i, event) {
var propvalues = this.state.propvalues;
var propkeys = this.state.propkeys;
propvalues[i] = event.target.value;
this.handleRefresh(); const renderKeyRows = () => {
this.setPropKeys(propkeys); return propkeys.map(function (o, i) {
this.setPropValues(propvalues); return (
this.setState({ <tr key={"item-" + i}>
propvalues: propvalues, <td>
<input
className="form-control"
type="text"
value={propkeys[i]}
id={o}
onChange= {(e) => {
if (e.target.value != "") {
propkeys[i] = e.target.value ;
} else{
propvalues.splice(i, 1);
propkeys.splice(i, 1);
}
setOwnKeys(propkeys);
props.setPropKeys(propkeys);
props.setProp(propobject)
handleRefresh();
}}
/>
</td>
</tr>
);
}); });
} }
handleKeyChanged(i, event) { const renderValueRows = () => {
var propkeys = this.state.propkeys;
if (event.target.value != "") { return propvalues.map(function (o, i) {
propkeys[i] = event.target.value; //console.log("ValRows" +i)
} //console.log("ValRows" +o)
console.log(event.target.value);
if (event.target.value == "") {
this.handleItemDeleted(i);
}
this.handleRefresh(i);
this.setPropKeys(propkeys);
this.setState({
propkeys: propkeys,
});
}
handleItemDeleted(i) {
var propvalues = this.state.propvalues;
var propkeys = this.state.propkeys;
propvalues.splice(i, 1);
propkeys.splice(i, 1);
this.setPropKeys(propkeys);
this.setPropValues(propvalues);
this.handleRefresh(i);
this.setState({
propvalues: propvalues,
propkeys: propkeys,
});
}
renderKeyRows() {
var context = this;
return this.state.propkeys.map(function (o, i) {
return ( return (
<tr key={"item-" + i}> <tr key={"item-" + i}>
<td> <td>
@@ -143,42 +97,38 @@ export default class DynamicTable extends React.Component {
className="form-control" className="form-control"
type="text" type="text"
value={o} value={o}
id={o + i} onChange={(e) => {
onChange={context.handleKeyChanged.bind(context, i)} propvalues[i] = e.target.value;
props.setPropValues(propvalues);
setOwnValues(propvalues);
handleRefresh();
}}
/> />
</td> </td>
</tr> </tr>
); );
}); });
} }
renderValueRows() { const renderDelete = () => {
var context = this;
return this.state.propvalues.map(function (o, i) { return propvalues.map(function (o, i) {
return (
<tr key={"item-" + i}>
<td>
<input
className="form-control"
type="text"
value={o}
onChange={context.handleValueChanged.bind(context, i)}
/>
</td>
</tr>
);
});
}
renderDelete() {
var context = this;
return this.state.propvalues.map(function (o, i) {
return ( return (
<tr key={"item-" + i}> <tr key={"item-" + i}>
<td> <td>
<button <button
className="btn btn-default" className="btn btn-default"
onClick={context.handleItemDeleted.bind(context, i)} onClick={() => {
propvalues.splice(i, 1);
propkeys.splice(i, 1);
var propobject = {};
propkeys.forEach((key, i) => (propobject[key] = propvalues[i]));
props.setProp(propobject);
props.setPropKeys(propkeys);
props.setPropValues(propvalues);
setOwnValues(propvalues);
setOwnKeys(propkeys);
handleRefresh();
}}
> >
Delete Delete
</button> </button>
@@ -188,57 +138,65 @@ export default class DynamicTable extends React.Component {
}); });
} }
render() {
return (
<div> return (
<table className=""> <div>
<thead> <table className="">
<tr> <thead>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>{this.renderKeyRows()}</td>
<td>{this.renderValueRows()}</td>
<td>{this.renderDelete()}</td>
</tr>
</tbody>
</table>
<form>
<tr> <tr>
<td> <th>Key</th>
<input <th>Value</th>
className="form-control"
type="text"
value={this.state.message}
onChange={this.updateMessageKey.bind(this)}
/>
</td>
<td>
<input
className="form-control"
type="text"
value={this.state.message2}
onChange={this.updateMessageValue.bind(this)}
/>
</td>
<td>
<button
id="add-item"
data-testid="add-item"
className="btn btn-default"
type="button"
onClick={this.handleClick.bind(this)}
>
Add Item
</button>
</td>
</tr> </tr>
</form> </thead>
<hr /> <tbody>
</div> <tr>
); <td>{renderKeyRows()}</td>
} <td>{renderValueRows()}</td>
<td>{renderDelete()}</td>
</tr>
</tbody>
</table>
<form>
<tr>
<td>
<input
className="form-control"
type="text"
value={message}
onChange={(e) => updateMessageKey(e)}
/>
</td>
<td>
<input
className="form-control"
type="text"
value={message2}
onChange={(e) => updateMessageValue(e)}
/>
</td>
<td>
<button
id="add-item"
data-testid="add-item"
className="btn btn-default"
type="button"
onClick={() => handleClick()}
>
Add Item
</button>
</td>
</tr>
</form>
<hr />
</div>
);
} }
DynamicTable.propTypes = {
current_keys: PropTypes.array,
current_values: PropTypes.array,
setPropKeys: PropTypes.array,
setPropValues: PropTypes.array,
setProp: PropTypes.func,
};
export default DynamicTable;