collapsePanel.stories.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import {Fragment} from 'react';
  2. import CollapsePanel from 'sentry/components/collapsePanel';
  3. import JSXNode from 'sentry/components/stories/jsxNode';
  4. import JSXProperty from 'sentry/components/stories/jsxProperty';
  5. import Matrix from 'sentry/components/stories/matrix';
  6. import SideBySide from 'sentry/components/stories/sideBySide';
  7. import SizingWindow from 'sentry/components/stories/sizingWindow';
  8. import storyBook from 'sentry/stories/storyBook';
  9. export default storyBook(CollapsePanel, story => {
  10. story('Basics', () => (
  11. <Fragment>
  12. <p>
  13. The <JSXNode name="CollapsePanel" /> expanded state will be set based on whether{' '}
  14. <JSXProperty name="items" value={Number} /> is larger than{' '}
  15. <JSXProperty name="collapseCount" value={Number} /> (default: 5).
  16. </p>
  17. <p>
  18. Once expanded, <JSXNode name="CollapsePanel" /> cannot be collapsed again.
  19. </p>
  20. <SizingWindow display="block">
  21. <CollapsePanel items={6}>
  22. {({isExpanded, showMoreButton}) => (
  23. <Fragment>
  24. <p>isExpanded = {String(isExpanded)}</p>
  25. {showMoreButton}
  26. </Fragment>
  27. )}
  28. </CollapsePanel>
  29. </SizingWindow>
  30. </Fragment>
  31. ));
  32. story('Bugs', () => (
  33. <Fragment>
  34. <p>
  35. Starting with items less than or equal to the <var>collapseCount</var> will return
  36. an incorrect <var>isExpanded</var> value.
  37. </p>
  38. <SideBySide>
  39. {[6, 5, 4].map(items => (
  40. <Fragment key={items}>
  41. <JSXNode name="CollapsePanel" props={{items, collapseCount: 5}} />
  42. <SizingWindow display="block">
  43. <CollapsePanel items={items} collapseCount={5}>
  44. {({isExpanded, showMoreButton}) => (
  45. <Fragment>
  46. <p>isExpanded = {String(isExpanded)}</p>
  47. {showMoreButton}
  48. </Fragment>
  49. )}
  50. </CollapsePanel>
  51. </SizingWindow>
  52. </Fragment>
  53. ))}
  54. </SideBySide>
  55. </Fragment>
  56. ));
  57. story('Rendering a list', () => {
  58. const allItems = ['one', 'two', 'three', 'four', 'five'];
  59. const collapseCount = 3; // Show 3 items to start
  60. return (
  61. <Fragment>
  62. <p>
  63. Typically you will render a portion of the list when the panel is collapsed,
  64. then all items when the panel is expanded.
  65. </p>
  66. <SizingWindow display="block">
  67. <CollapsePanel items={allItems.length} collapseCount={collapseCount}>
  68. {({isExpanded, showMoreButton}) => {
  69. const items = isExpanded ? allItems : allItems.slice(0, collapseCount);
  70. return (
  71. <Fragment>
  72. <ul>
  73. {items.map(item => (
  74. <li key={item}>{item}</li>
  75. ))}
  76. </ul>
  77. {showMoreButton}
  78. </Fragment>
  79. );
  80. }}
  81. </CollapsePanel>
  82. </SizingWindow>
  83. </Fragment>
  84. );
  85. });
  86. story('Props', () => (
  87. <Matrix
  88. render={CollapsePanel}
  89. propMatrix={{
  90. buttonTitle: [undefined, 'Custom Title'],
  91. collapseCount: [0],
  92. disableBorder: [true, false],
  93. items: [1],
  94. children: [
  95. ({isExpanded, showMoreButton}) => (
  96. <Fragment>
  97. <p>isExpanded = {String(isExpanded)}</p>
  98. {showMoreButton}
  99. </Fragment>
  100. ),
  101. ],
  102. }}
  103. selectedProps={['buttonTitle', 'disableBorder']}
  104. sizingWindowProps={{display: 'block'}}
  105. />
  106. ));
  107. });