number.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import * as React from 'react'
  7. import { ParamDefinition as PD } from '../../../mol-util/param-definition';
  8. export interface NumberParamComponentProps {
  9. label: string
  10. param: PD.Numeric
  11. value: number
  12. onChange(v: number): void
  13. }
  14. export interface NumberParamComponentState {
  15. value: number
  16. }
  17. export class NumberParamComponent extends React.Component<NumberParamComponentProps, NumberParamComponentState> {
  18. state = {
  19. value: this.props.value
  20. }
  21. onChange(valueStr: string) {
  22. const value = this.props.param.step && Number.isInteger(this.props.param.step) ? parseInt(valueStr) : parseFloat(valueStr)
  23. this.setState({ value })
  24. this.props.onChange(value)
  25. }
  26. render() {
  27. return <div>
  28. <span>{this.props.label} </span>
  29. <input type='range'
  30. value={this.state.value}
  31. min={this.props.param.min}
  32. max={this.props.param.max}
  33. step={this.props.param.step}
  34. onChange={e => this.onChange(e.currentTarget.value)}
  35. >
  36. </input>
  37. </div>;
  38. }
  39. }