rangeField.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import RangeSlider from 'sentry/components/forms/controls/rangeSlider';
  2. import InputField, {InputFieldProps, onEvent} from 'sentry/components/forms/inputField';
  3. interface DefaultProps {
  4. formatMessageValue?: false | Function;
  5. }
  6. type DisabledFunction = (props: Omit<RangeFieldProps, 'formatMessageValue'>) => boolean;
  7. type PlaceholderFunction = (props: any) => React.ReactNode;
  8. export interface RangeFieldProps
  9. extends DefaultProps,
  10. Omit<
  11. React.ComponentProps<typeof RangeSlider>,
  12. 'value' | 'disabled' | 'placeholder' | 'css'
  13. >,
  14. Omit<
  15. InputFieldProps,
  16. | 'disabled'
  17. | 'field'
  18. | 'step'
  19. | 'onChange'
  20. | 'max'
  21. | 'min'
  22. | 'onBlur'
  23. | 'css'
  24. | 'formatMessageValue'
  25. > {
  26. disabled?: boolean | DisabledFunction;
  27. placeholder?: string | PlaceholderFunction;
  28. }
  29. function onChange(
  30. fieldOnChange: onEvent,
  31. value: number | '',
  32. e: React.FormEvent<HTMLInputElement>
  33. ) {
  34. fieldOnChange(value, e);
  35. }
  36. function defaultFormatMessageValue(value, props: RangeFieldProps) {
  37. return (typeof props.formatLabel === 'function' && props.formatLabel(value)) || value;
  38. }
  39. export default function RangeField({
  40. formatMessageValue = defaultFormatMessageValue,
  41. disabled,
  42. ...otherProps
  43. }: RangeFieldProps) {
  44. const resolvedDisabled =
  45. typeof disabled === 'function' ? disabled(otherProps) : disabled;
  46. const props: InputFieldProps = {
  47. ...otherProps,
  48. disabled: resolvedDisabled,
  49. formatMessageValue,
  50. };
  51. return (
  52. <InputField
  53. {...props}
  54. field={({onChange: fieldOnChange, onBlur, value, ...fieldProps}) => (
  55. <RangeSlider
  56. {...fieldProps}
  57. value={value}
  58. onBlur={onBlur}
  59. onChange={(val, event) => onChange(fieldOnChange, val, event)}
  60. />
  61. )}
  62. />
  63. );
  64. }