mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-12 12:33:02 +00:00
Made DynamicTable functional
This commit is contained in:
@@ -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;
|
Reference in New Issue
Block a user