import { DataSource, BoundFieldParams } from "maishu-wuzhui-helper" import * as React from "react"; import { InputControl } from "./input-control"; import { rules } from "maishu-dilu"; interface RadioFieldProps { dataField: keyof T, dataType: 'string' | 'number', defaultValue?: string | number, dataSource: DataSource, nameField: Extract, valueField: Extract, validateRules: BoundFieldParams["validateRules"], } interface RadioFieldState { items: { text: any, value: any }[], value?: any } export class RadioListInput extends InputControl, RadioFieldState>{ constructor(props: RadioListInput['props']) { super(props) this.state = { items: [], value: this.props.defaultValue } } set value(value: any) { this.setState({ value }); } get value(): any { return this.state.value; } componentDidMount() { let { nameField, valueField } = this.props; this.props.dataSource.executeSelect().then(r => { let items = r.dataItems.map(o => ({ text: o[nameField], value: o[valueField] })); this.setState({ items }); }) } render() { let { dataField, dataType } = this.props; let { items } = this.state; return
{items.map(o => <> { if (dataType == "number" && !rules.numeric().validate(e.target)) return; let value = dataType == "number" ? parseFloat(e.target.value) : e.target.value; this.setState({ value }); }} /> {o.text} )}
} }