2023-11-30 17:26:17 +08:00
|
|
|
import React, {Component} from "react";
|
2023-12-12 18:21:09 +08:00
|
|
|
import {Tip} from "./Tip";
|
2024-03-27 16:14:05 +08:00
|
|
|
import {Validation} from "../validation";
|
2023-11-30 17:26:17 +08:00
|
|
|
|
|
|
|
class Line extends Component {
|
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
// Initialize the state object with the initial values from the props
|
|
|
|
this.state = {
|
2024-03-27 16:14:05 +08:00
|
|
|
text: props.outvar in props.data ? props.data[props.outvar] : (props.fallback ? props.fallback : ""),
|
|
|
|
valid: true
|
2023-11-30 17:26:17 +08:00
|
|
|
};
|
|
|
|
// Bind the event handler to this
|
2024-03-27 16:14:05 +08:00
|
|
|
this.handleChange = this.handleChange.bind(this);
|
2023-11-30 17:26:17 +08:00
|
|
|
this.props.target.construct(this.props.outvar, this.state.text);
|
|
|
|
}
|
|
|
|
|
2024-03-27 16:14:05 +08:00
|
|
|
handleChange(element) {
|
2023-11-30 17:26:17 +08:00
|
|
|
let text = element.target.value;
|
|
|
|
this.setState({
|
2024-03-27 16:14:05 +08:00
|
|
|
text: text,
|
|
|
|
valid: this.props.validator ? this.props.validator(text) : true
|
2023-11-30 17:26:17 +08:00
|
|
|
});
|
|
|
|
this.props.target.update(this.props.outvar, text);
|
|
|
|
}
|
|
|
|
|
2024-01-30 17:20:29 +08:00
|
|
|
static getDerivedStateFromProps(props, current_state) {
|
|
|
|
if (current_state.text !== props.data[props.outvar]) {
|
|
|
|
return {
|
|
|
|
text: props.data[props.outvar]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
|
2023-11-30 17:26:17 +08:00
|
|
|
render() {
|
|
|
|
let key = this.props.id + this.props.outvar;
|
|
|
|
return (
|
|
|
|
<div className="shop-line" key={this.props.id}>
|
|
|
|
<label htmlFor={key} className="form-label">
|
|
|
|
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
|
|
|
{this.props.title}:
|
|
|
|
</label>
|
|
|
|
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
2024-03-27 16:14:05 +08:00
|
|
|
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key} onChange={this.handleChange}
|
2023-11-30 17:26:17 +08:00
|
|
|
value={this.state.text}/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-27 16:14:05 +08:00
|
|
|
export function LineWrapper(target, id, data, {title, fallback, outvar, icon, tip, classes, validator}) {
|
2023-11-30 17:26:17 +08:00
|
|
|
return <Line target={target} title={title} fallback={fallback} outvar={outvar} icon={icon} tip={tip} key={id}
|
2024-03-27 16:14:05 +08:00
|
|
|
id={id} data={data} classes={classes} validator={validator && Validation[validator.name](validator.params)}/>;
|
2023-11-30 17:26:17 +08:00
|
|
|
}
|