ds-form-control.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { forwardRef } from 'react'
  2. import { Form, FormControlProps } from 'react-bootstrap'
  3. import classnames from 'classnames'
  4. interface DSFormControlProps extends FormControlProps {
  5. prepend?: React.ReactNode
  6. append?: React.ReactNode
  7. }
  8. const DSFormControl = forwardRef<HTMLInputElement, DSFormControlProps>(
  9. ({ prepend, append, className, ...props }, ref) => {
  10. if (prepend || append) {
  11. const wrapperClassNames = classnames(
  12. 'form-control-wrapper-ds form-control-wrapper-lg-ds',
  13. {
  14. 'form-control-wrapper-disabled-ds': props.disabled,
  15. }
  16. )
  17. const formControlClassNames = classnames('form-control-ds', className, {
  18. 'form-control-offset-start-ds': prepend,
  19. 'form-control-offset-end-ds': append,
  20. })
  21. return (
  22. <div className={wrapperClassNames}>
  23. {prepend && (
  24. <span className="form-control-start-icon-ds">{prepend}</span>
  25. )}
  26. <Form.Control
  27. {...props}
  28. className={formControlClassNames}
  29. ref={ref}
  30. />
  31. {append && <span className="form-control-end-icon-ds">{append}</span>}
  32. </div>
  33. )
  34. }
  35. return (
  36. <Form.Control
  37. ref={ref}
  38. size="lg"
  39. className={classnames('form-control-ds', className)}
  40. {...props}
  41. />
  42. )
  43. }
  44. )
  45. DSFormControl.displayName = 'DSFormControl'
  46. export default DSFormControl