range.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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 { RangeParam } from 'mol-util/parameter';
  8. export interface RangeParamComponentProps {
  9. param: RangeParam
  10. value: number
  11. onChange(v: number): void
  12. }
  13. export interface RangeParamComponentState {
  14. value: number
  15. }
  16. export class RangeParamComponent extends React.Component<RangeParamComponentProps, RangeParamComponentState> {
  17. state = {
  18. value: this.props.value
  19. }
  20. onChange(valueStr: string) {
  21. const value = Number.isInteger(this.props.param.step) ? parseInt(valueStr) : parseFloat(valueStr)
  22. this.setState({ value })
  23. this.props.onChange(value)
  24. }
  25. render() {
  26. return <div>
  27. <span>{this.props.param.label} </span>
  28. <input type='range'
  29. value={this.state.value}
  30. min={this.props.param.min}
  31. max={this.props.param.max}
  32. step={this.props.param.step}
  33. onChange={e => this.onChange(e.currentTarget.value)}
  34. >
  35. </input>
  36. </div>;
  37. }
  38. }