import { isString } from 'lodash'; import React from 'react'; import { Tooltip } from '../../presentation'; export interface INumberInputProps { value: number | string; onChange: (value: number | string) => void; min?: number; max?: number; required?: boolean; error?: string; disabled?: boolean; } export interface INumberInputState { expressionActive: boolean; glowing: boolean; } export class SpelNumberInput extends React.Component { constructor(props: INumberInputProps) { super(props); this.state = { expressionActive: isString(props.value), glowing: false, }; } public componentWillReceiveProps(nextProps: INumberInputProps) { const expressionActive = isString(nextProps.value); if (this.state.expressionActive !== expressionActive) { this.setState({ expressionActive }); } } private setExpressionActive(expressionActive: boolean): void { this.setState({ expressionActive }); } private setGlow(glowing: boolean): void { this.setState({ glowing }); } private valueChanged = ({ target: { value } }: React.ChangeEvent): void => { const num = parseInt(value, 10); this.props.onChange(isNaN(num) ? value : num); }; public render() { const { expressionActive, glowing } = this.state; const { value, min, max, required = false, error, disabled } = this.props; return (
this.setGlow(true)} onBlur={() => this.setGlow(false)} required={required} />
); } }