colorComponentEntry.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import * as React from "react";
  2. export interface IColorComponentEntryProps {
  3. value: number,
  4. label: string,
  5. max?: number,
  6. min?: number,
  7. onChange: (value: number) => void
  8. }
  9. export class ColorComponentEntry extends React.Component<IColorComponentEntryProps> {
  10. constructor(props: IColorComponentEntryProps) {
  11. super(props);
  12. }
  13. updateValue(valueString: string) {
  14. if (/[^0-9\.\-]/g.test(valueString)) {
  15. return;
  16. }
  17. let valueAsNumber = parseInt(valueString);
  18. if (isNaN(valueAsNumber)) {
  19. return;
  20. }
  21. if(this.props.max != undefined && (valueAsNumber > this.props.max)) {
  22. valueAsNumber = this.props.max;
  23. }
  24. if(this.props.min != undefined && (valueAsNumber < this.props.min)) {
  25. valueAsNumber = this.props.min;
  26. }
  27. this.props.onChange(valueAsNumber);
  28. }
  29. public render() {
  30. return (
  31. <div className="color-picker-component">
  32. <div className="color-picker-component-value">
  33. <input type="number" step={1} className="numeric-input"
  34. value={this.props.value}
  35. onChange={(evt) => this.updateValue(evt.target.value)} />
  36. </div>
  37. <div className="color-picker-component-label">
  38. {
  39. this.props.label
  40. }
  41. </div>
  42. </div>
  43. )
  44. }
  45. }