growingInput.stories.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import {Fragment, useState} from 'react';
  2. import styled from '@emotion/styled';
  3. import {GrowingInput} from 'sentry/components/growingInput';
  4. import Input from 'sentry/components/input';
  5. import {Slider} from 'sentry/components/slider';
  6. import SizingWindow from 'sentry/components/stories/sizingWindow';
  7. import storyBook from 'sentry/stories/storyBook';
  8. export default storyBook('GrowingInput', story => {
  9. story('Uncontrolled', () => {
  10. return (
  11. <SizingWindow display="block">
  12. <GrowingInput defaultValue="Lorem ipsum dolor sit amat" />
  13. </SizingWindow>
  14. );
  15. });
  16. story('Controlled', () => {
  17. const [value, setValue] = useState('Lorem ipsum dolor sit amat');
  18. return (
  19. <Fragment>
  20. This input is synced with the growing one:
  21. <Input value={value} onChange={e => setValue(e.target.value)} />
  22. <br />
  23. <br />
  24. <SizingWindow display="block">
  25. <GrowingInput value={value} onChange={e => setValue(e.target.value)} />
  26. </SizingWindow>
  27. </Fragment>
  28. );
  29. });
  30. story('Style with min and max width', () => {
  31. const [minWidth, setMinWidth] = useState(20);
  32. const [maxWidth, setMaxWidth] = useState(60);
  33. return (
  34. <Fragment>
  35. <p>The input respects the min and max width styles.</p>
  36. <SizingWindow display="block">
  37. <Slider
  38. label="Min width"
  39. min={0}
  40. max={100}
  41. step={1}
  42. value={minWidth}
  43. onChange={value => setMinWidth(value as number)}
  44. />
  45. <Slider
  46. label="Max width"
  47. min={0}
  48. max={100}
  49. step={1}
  50. value={maxWidth}
  51. onChange={value => setMaxWidth(value as number)}
  52. />
  53. <br />
  54. <StyledGrowingInput
  55. defaultValue={'Lorem ipsum dolor sit amat'}
  56. minWidth={minWidth}
  57. maxWidth={maxWidth}
  58. placeholder="Type something here..."
  59. />
  60. </SizingWindow>
  61. </Fragment>
  62. );
  63. });
  64. });
  65. const StyledGrowingInput = styled(GrowingInput)<{maxWidth: number; minWidth: number}>`
  66. min-width: ${p => p.minWidth}%;
  67. max-width: ${p => p.maxWidth}%;
  68. `;