@spothero/ui 15.10.9 → 16.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/.eslintignore +1 -1
  2. package/babel.config.js +1 -0
  3. package/dex.config.js +1 -1
  4. package/jest.config.json +4 -2
  5. package/package.json +11 -26
  6. package/v2/index.js +1 -1
  7. package/v2/index.js.map +1 -1
  8. package/backlog/Alert/Alert.js +0 -37
  9. package/backlog/AutoSuggestInput/AutoSuggestInput.js +0 -474
  10. package/backlog/AutoSuggestInput/AutoSuggestItem.js +0 -99
  11. package/backlog/AutoSuggestInput/AutoSuggestList.js +0 -126
  12. package/backlog/Badge/Badge.js +0 -28
  13. package/backlog/Chart/Chart.js +0 -211
  14. package/backlog/Checkbox/Checkbox.js +0 -167
  15. package/backlog/DateTime/DatePicker.js +0 -279
  16. package/backlog/DateTime/DatePickerCalendar.js +0 -199
  17. package/backlog/DateTime/DatePickerCalendarNavigation.js +0 -102
  18. package/backlog/DateTime/DatePickerCalendarWithRange.js +0 -241
  19. package/backlog/DateTime/DateTimePicker.js +0 -216
  20. package/backlog/DateTime/DateTimeRangePicker.js +0 -530
  21. package/backlog/DateTime/TimePicker.js +0 -180
  22. package/backlog/DateTime/date-time-assertions.js +0 -66
  23. package/backlog/DateTime/index.js +0 -55
  24. package/backlog/ErrorBoundary/ErrorBoundary.js +0 -125
  25. package/backlog/Flyout/Flyout.js +0 -198
  26. package/backlog/Form/Form.js +0 -193
  27. package/backlog/Form/FormElementError.js +0 -24
  28. package/backlog/Form/FormGroup.js +0 -30
  29. package/backlog/Form/FormGroupError.js +0 -28
  30. package/backlog/Form/index.js +0 -39
  31. package/backlog/GooglePlacesSearchInput/GooglePlacesSearchInput.js +0 -253
  32. package/backlog/GooglePlacesSearchInput/PoweredByGoogle.js +0 -38
  33. package/backlog/GooglePlacesSearchInput/index.js +0 -23
  34. package/backlog/HorizontalRule/HorizontalRule.js +0 -30
  35. package/backlog/Label/Label.js +0 -31
  36. package/backlog/Notification/Notification.js +0 -178
  37. package/backlog/Notification/NotificationContainer.js +0 -131
  38. package/backlog/Notification/NotificationPropTypes.js +0 -37
  39. package/backlog/Notification/index.js +0 -23
  40. package/backlog/PasswordControl/PasswordControl.js +0 -201
  41. package/backlog/Portal/Portal.js +0 -110
  42. package/backlog/PulseLoader/PulseLoader.js +0 -62
  43. package/backlog/Radio/Radio.js +0 -135
  44. package/backlog/Radio/RadioGroup.js +0 -123
  45. package/backlog/Radio/index.js +0 -23
  46. package/backlog/RenderInBody/RenderInBody.js +0 -103
  47. package/backlog/Select/Select.js +0 -275
  48. package/backlog/Select/SelectItemPropTypes.js +0 -32
  49. package/backlog/Select/index.js +0 -23
  50. package/backlog/SelectControlled/SelectControlled.js +0 -270
  51. package/backlog/SelectControlled/index.js +0 -15
  52. package/backlog/Sprite/Sprite.js +0 -24
  53. package/backlog/Tabs/Tab.js +0 -94
  54. package/backlog/Tabs/TabContent.js +0 -56
  55. package/backlog/Tabs/TabNavigation.js +0 -108
  56. package/backlog/Tabs/TabPanel.js +0 -29
  57. package/backlog/Tabs/Tabs.js +0 -126
  58. package/backlog/Tabs/index.js +0 -47
  59. package/backlog/TextArea/TextArea.js +0 -155
  60. package/backlog/TextInput/TextInput.js +0 -230
  61. package/backlog/TextInput/TextInputPropTypes.js +0 -114
  62. package/backlog/TextInput/index.js +0 -23
  63. package/backlog/Tooltip/Tooltip.js +0 -249
  64. package/backlog/index.js +0 -393
  65. package/backlog/v1/components/Button/Button.js +0 -64
  66. package/backlog/v1/components/Button/button-props.js +0 -48
  67. package/backlog/v1/components/Image/Image.js +0 -193
  68. package/backlog/v1/components/Loader/Loader.js +0 -51
  69. package/backlog/v1/components/Modal/Modal.js +0 -325
  70. package/backlog/v1/components/Modal/ModalContent.js +0 -154
  71. package/backlog/v1/components/Modal/ModalFooter.js +0 -89
  72. package/backlog/v1/components/Modal/index.js +0 -31
  73. package/backlog/v1/components/Panel/Panel.js +0 -209
  74. package/backlog/v1/components/Table/Table.js +0 -336
  75. package/backlog/v1/components/Table/TableCell.js +0 -28
  76. package/backlog/v1/components/Table/TableCellPropTypes.js +0 -22
  77. package/backlog/v1/components/Table/TableControls.js +0 -56
  78. package/backlog/v1/components/Table/TableFooter.js +0 -63
  79. package/backlog/v1/components/Table/TableHeading.js +0 -126
  80. package/backlog/v1/components/Table/TableHeadingPropTypes.js +0 -35
  81. package/backlog/v1/components/Table/TableSortSelector.js +0 -125
  82. package/backlog/v1/components/Table/TableSortType.js +0 -11
  83. package/backlog/v1/components/Table/index.js +0 -47
  84. package/backlog/v1/components/TextButton/TextButton.js +0 -74
  85. package/backlog/v1/components/index.js +0 -75
  86. package/backlog/v1/utils/deprecate.js +0 -61
  87. package/styles/Alert/_Alert.scss +0 -51
  88. package/styles/AutoSuggestInput/_AutoSuggestInput.scss +0 -116
  89. package/styles/Badge/_Badge.scss +0 -33
  90. package/styles/Chart/_Chart.scss +0 -105
  91. package/styles/Chart/_chartist-settings.scss +0 -131
  92. package/styles/Chart/_chartist.scss +0 -295
  93. package/styles/Checkbox/_Checkbox.scss +0 -173
  94. package/styles/DateTime/_DatePicker.scss +0 -61
  95. package/styles/DateTime/_DatePickerCalendar.scss +0 -159
  96. package/styles/DateTime/_DateTime.scss +0 -4
  97. package/styles/DateTime/_DateTimePicker.scss +0 -46
  98. package/styles/DateTime/_TimePicker.scss +0 -30
  99. package/styles/ErrorBoundary/_ErrorBoundary.scss +0 -18
  100. package/styles/Flyout/_Flyout.scss +0 -73
  101. package/styles/Form/_Form.scss +0 -53
  102. package/styles/GooglePlacesSearchInput/_GooglePlacesSearchInput.scss +0 -3
  103. package/styles/GooglePlacesSearchInput/_PoweredByGoogle.scss +0 -21
  104. package/styles/HorizontalRule/_HorizontalRule.scss +0 -48
  105. package/styles/Label/_Label.scss +0 -6
  106. package/styles/Notification/_Notification.scss +0 -113
  107. package/styles/PasswordControl/_PasswordControl.scss +0 -86
  108. package/styles/PulseLoader/_PulseLoader.scss +0 -60
  109. package/styles/Radio/_Radio.scss +0 -93
  110. package/styles/Select/_Select.scss +0 -94
  111. package/styles/Tabs/_Tabs.scss +0 -57
  112. package/styles/TextArea/_TextArea.scss +0 -26
  113. package/styles/TextInput/_TextInput.scss +0 -43
  114. package/styles/Tooltip/_Tooltip.scss +0 -108
  115. package/styles/_index.scss +0 -34
  116. package/styles/common/sass/_control-sizing.scss +0 -5
  117. package/styles/common/sass/_disable-scrolling.scss +0 -7
  118. package/styles/common/sass/_forms.scss +0 -72
  119. package/styles/index.js +0 -50
  120. package/styles/v1/components/Button/Button.jsx +0 -48
  121. package/styles/v1/components/Button/Button.spec.js +0 -76
  122. package/styles/v1/components/Button/_Button.scss +0 -178
  123. package/styles/v1/components/Button/button-props.js +0 -30
  124. package/styles/v1/components/Button/stories/button.js +0 -20
  125. package/styles/v1/components/Button/stories/index.stories.js +0 -92
  126. package/styles/v1/components/Button/stories/overview.js +0 -87
  127. package/styles/v1/components/Button/stories/types.js +0 -31
  128. package/styles/v1/components/Image/Image.jsx +0 -175
  129. package/styles/v1/components/Image/Image.spec.js +0 -113
  130. package/styles/v1/components/Image/_Image.scss +0 -24
  131. package/styles/v1/components/Image/stories/Cloudinary.stories.js +0 -39
  132. package/styles/v1/components/Image/stories/Display.stories.js +0 -92
  133. package/styles/v1/components/Loader/Loader.jsx +0 -54
  134. package/styles/v1/components/Loader/Loader.spec.js +0 -67
  135. package/styles/v1/components/Loader/_Loader.scss +0 -18
  136. package/styles/v1/components/Loader/stories/Display.stories.js +0 -55
  137. package/styles/v1/components/Modal/Modal.jsx +0 -315
  138. package/styles/v1/components/Modal/Modal.spec.js +0 -293
  139. package/styles/v1/components/Modal/ModalContent.jsx +0 -126
  140. package/styles/v1/components/Modal/ModalFooter.jsx +0 -53
  141. package/styles/v1/components/Modal/_Modal.scss +0 -262
  142. package/styles/v1/components/Modal/index.js +0 -3
  143. package/styles/v1/components/Modal/stories/Content.stories.js +0 -314
  144. package/styles/v1/components/Modal/stories/Display.stories.js +0 -208
  145. package/styles/v1/components/Modal/stories/Methods.stories.js +0 -44
  146. package/styles/v1/components/Modal/stories/Width.stories.js +0 -82
  147. package/styles/v1/components/Modal/stories/helpers/ReduxConsumer.jsx +0 -21
  148. package/styles/v1/components/Panel/Panel.jsx +0 -202
  149. package/styles/v1/components/Panel/Panel.spec.js +0 -196
  150. package/styles/v1/components/Panel/_Panel.scss +0 -55
  151. package/styles/v1/components/Panel/stories/Display.stories.js +0 -82
  152. package/styles/v1/components/Panel/stories/Methods.stories.js +0 -76
  153. package/styles/v1/components/Table/Table.jsx +0 -367
  154. package/styles/v1/components/Table/Table.spec.js +0 -526
  155. package/styles/v1/components/Table/TableCell.jsx +0 -17
  156. package/styles/v1/components/Table/TableCellPropTypes.js +0 -10
  157. package/styles/v1/components/Table/TableControls.jsx +0 -61
  158. package/styles/v1/components/Table/TableFooter.jsx +0 -72
  159. package/styles/v1/components/Table/TableHeading.jsx +0 -58
  160. package/styles/v1/components/Table/TableHeadingPropTypes.js +0 -20
  161. package/styles/v1/components/Table/TableSortSelector.jsx +0 -63
  162. package/styles/v1/components/Table/TableSortType.js +0 -4
  163. package/styles/v1/components/Table/_Table.scss +0 -263
  164. package/styles/v1/components/Table/index.js +0 -5
  165. package/styles/v1/components/Table/stories/Display.stories.js +0 -194
  166. package/styles/v1/components/Table/stories/Methods.stories.js +0 -141
  167. package/styles/v1/components/Table/stories/helpers/TableCellEmail.jsx +0 -25
  168. package/styles/v1/components/Table/stories/helpers/TableCustomRow.jsx +0 -35
  169. package/styles/v1/components/Table/stories/helpers/TableHeadingEmail.jsx +0 -20
  170. package/styles/v1/components/Table/stories/helpers/table-data.js +0 -26
  171. package/styles/v1/components/Table/stories/helpers/table-headers.js +0 -14
  172. package/styles/v1/components/TextButton/TextButton.jsx +0 -78
  173. package/styles/v1/components/TextButton/TextButton.spec.js +0 -95
  174. package/styles/v1/components/TextButton/_TextButton.scss +0 -114
  175. package/styles/v1/components/TextButton/stories/Display.stories.js +0 -46
  176. package/styles/v1/components/index.js +0 -7
  177. package/styles/v1/utils/deprecate.js +0 -45
  178. package/styles/v2/components/Accordion/Accordion.jsx +0 -1
  179. package/styles/v2/components/Accordion/Accordion.stories.js +0 -103
  180. package/styles/v2/components/Accordion/index.js +0 -7
  181. package/styles/v2/components/Accordion/styles/button.js +0 -16
  182. package/styles/v2/components/Accordion/styles/container.js +0 -9
  183. package/styles/v2/components/Accordion/styles/index.js +0 -19
  184. package/styles/v2/components/Accordion/styles/panel.js +0 -7
  185. package/styles/v2/components/Alert/Alert.jsx +0 -121
  186. package/styles/v2/components/Alert/Alert.stories.js +0 -50
  187. package/styles/v2/components/Alert/index.js +0 -1
  188. package/styles/v2/components/Alert/styles/index.js +0 -166
  189. package/styles/v2/components/AutoSuggestSelect/AutoSuggestSelect.jsx +0 -187
  190. package/styles/v2/components/AutoSuggestSelect/index.js +0 -1
  191. package/styles/v2/components/Badge/Badge.jsx +0 -1
  192. package/styles/v2/components/Badge/Badge.stories.js +0 -32
  193. package/styles/v2/components/Badge/styles/index.js +0 -29
  194. package/styles/v2/components/Button/Button.jsx +0 -31
  195. package/styles/v2/components/Button/Button.spec.js +0 -29
  196. package/styles/v2/components/Button/Button.styles.js +0 -156
  197. package/styles/v2/components/Button/button-props.js +0 -66
  198. package/styles/v2/components/Button/index.js +0 -2
  199. package/styles/v2/components/Button/stories/button.js +0 -59
  200. package/styles/v2/components/Button/stories/index.stories.js +0 -82
  201. package/styles/v2/components/Button/stories/overview.js +0 -73
  202. package/styles/v2/components/Card/Card.jsx +0 -16
  203. package/styles/v2/components/Card/Card.stories.js +0 -33
  204. package/styles/v2/components/Checkbox/Checkbox.jsx +0 -1
  205. package/styles/v2/components/Checkbox/Checkbox.stories.js +0 -41
  206. package/styles/v2/components/Checkbox/index.js +0 -1
  207. package/styles/v2/components/Checkbox/styles/index.js +0 -31
  208. package/styles/v2/components/Container/Container.jsx +0 -10
  209. package/styles/v2/components/Container/Container.stories.js +0 -52
  210. package/styles/v2/components/Container/Container.styles.js +0 -11
  211. package/styles/v2/components/Divider/Divider.jsx +0 -31
  212. package/styles/v2/components/Divider/Divider.stories.js +0 -41
  213. package/styles/v2/components/Divider/Divider.styles.js +0 -15
  214. package/styles/v2/components/FormControl/FormControl.jsx +0 -77
  215. package/styles/v2/components/Grid/Grid.jsx +0 -25
  216. package/styles/v2/components/Grid/Grid.stories.js +0 -128
  217. package/styles/v2/components/Grid/Grid.styles.js +0 -12
  218. package/styles/v2/components/Grid/GridItem.jsx +0 -10
  219. package/styles/v2/components/Grid/GridItem.styles.js +0 -8
  220. package/styles/v2/components/Grid/index.js +0 -2
  221. package/styles/v2/components/Heading/Heading.jsx +0 -23
  222. package/styles/v2/components/Heading/Heading.stories.js +0 -40
  223. package/styles/v2/components/Heading/Heading.styles.js +0 -61
  224. package/styles/v2/components/Icon/Icon.jsx +0 -1
  225. package/styles/v2/components/Icon/Icon.stories.js +0 -38
  226. package/styles/v2/components/Image/Image.jsx +0 -97
  227. package/styles/v2/components/Image/Image.spec.js +0 -100
  228. package/styles/v2/components/Image/Image.stories.js +0 -142
  229. package/styles/v2/components/Input/Input.jsx +0 -51
  230. package/styles/v2/components/Input/Input.stories.js +0 -60
  231. package/styles/v2/components/Input/index.js +0 -1
  232. package/styles/v2/components/Input/styles/index.js +0 -49
  233. package/styles/v2/components/Link/Link.jsx +0 -1
  234. package/styles/v2/components/Link/Link.stories.js +0 -82
  235. package/styles/v2/components/Link/Link.styles.js +0 -38
  236. package/styles/v2/components/List/List.jsx +0 -57
  237. package/styles/v2/components/List/List.stories.js +0 -96
  238. package/styles/v2/components/List/index.js +0 -2
  239. package/styles/v2/components/List/styles/index.js +0 -12
  240. package/styles/v2/components/List/styles/item.styles.js +0 -5
  241. package/styles/v2/components/Loader/Loader.jsx +0 -75
  242. package/styles/v2/components/Loader/Loader.stories.js +0 -145
  243. package/styles/v2/components/Modal/Modal.jsx +0 -71
  244. package/styles/v2/components/Modal/Modal.stories.js +0 -278
  245. package/styles/v2/components/Modal/index.js +0 -1
  246. package/styles/v2/components/Modal/styles/body.js +0 -24
  247. package/styles/v2/components/Modal/styles/closeButton.js +0 -17
  248. package/styles/v2/components/Modal/styles/dialog.js +0 -10
  249. package/styles/v2/components/Modal/styles/dialogContainer.js +0 -10
  250. package/styles/v2/components/Modal/styles/footer.js +0 -5
  251. package/styles/v2/components/Modal/styles/header.js +0 -7
  252. package/styles/v2/components/Modal/styles/index.js +0 -47
  253. package/styles/v2/components/Modal/styles/overlay.js +0 -4
  254. package/styles/v2/components/Popover/Popover.jsx +0 -28
  255. package/styles/v2/components/Popover/Popover.stories.js +0 -113
  256. package/styles/v2/components/Popover/PopoverArrow.jsx +0 -10
  257. package/styles/v2/components/Popover/PopoverCloseButton.jsx +0 -10
  258. package/styles/v2/components/Popover/PopoverContent.jsx +0 -41
  259. package/styles/v2/components/Popover/index.js +0 -3
  260. package/styles/v2/components/Popover/styles/index.js +0 -21
  261. package/styles/v2/components/Popover/styles/popover-arrow.js +0 -5
  262. package/styles/v2/components/Popover/styles/popover-body.js +0 -5
  263. package/styles/v2/components/Popover/styles/popover-close-button.js +0 -17
  264. package/styles/v2/components/Popover/styles/popover-content.js +0 -16
  265. package/styles/v2/components/Popover/styles/popover-header.js +0 -6
  266. package/styles/v2/components/Popover/styles/popper.js +0 -5
  267. package/styles/v2/components/Radio/Radio.jsx +0 -50
  268. package/styles/v2/components/Radio/Radio.stories.js +0 -155
  269. package/styles/v2/components/Radio/RadioGroup.jsx +0 -69
  270. package/styles/v2/components/Radio/index.js +0 -2
  271. package/styles/v2/components/Radio/styles/index.js +0 -52
  272. package/styles/v2/components/Select/Select.jsx +0 -62
  273. package/styles/v2/components/Select/Select.stories.js +0 -60
  274. package/styles/v2/components/Select/index.js +0 -1
  275. package/styles/v2/components/Select/styles/index.js +0 -29
  276. package/styles/v2/components/Skeleton/Skeleton.stories.jsx +0 -34
  277. package/styles/v2/components/Skeleton/Skeleton.styles.js +0 -3
  278. package/styles/v2/components/Skeleton/index.js +0 -1
  279. package/styles/v2/components/Spinner/Spinner.jsx +0 -40
  280. package/styles/v2/components/Spinner/Spinner.stories.js +0 -98
  281. package/styles/v2/components/Spinner/Spinner.styles.js +0 -57
  282. package/styles/v2/components/Switch/Switch.jsx +0 -52
  283. package/styles/v2/components/Switch/Switch.stories.js +0 -88
  284. package/styles/v2/components/Switch/index.js +0 -1
  285. package/styles/v2/components/Switch/styles/index.js +0 -17
  286. package/styles/v2/components/Table/Table.jsx +0 -1
  287. package/styles/v2/components/Table/Table.stories.js +0 -90
  288. package/styles/v2/components/Table/Table.styles.js +0 -66
  289. package/styles/v2/components/Table/index.js +0 -2
  290. package/styles/v2/components/Tabs/Tabs.jsx +0 -39
  291. package/styles/v2/components/Tabs/Tabs.stories.js +0 -47
  292. package/styles/v2/components/Tabs/combineSizeWithVariant.js +0 -29
  293. package/styles/v2/components/Tabs/index.js +0 -2
  294. package/styles/v2/components/Tabs/styles/index.js +0 -40
  295. package/styles/v2/components/Text/Text.jsx +0 -35
  296. package/styles/v2/components/Text/Text.stories.js +0 -47
  297. package/styles/v2/components/Text/Text.styles.js +0 -33
  298. package/styles/v2/components/Text/combineAsWithVariant.js +0 -106
  299. package/styles/v2/components/Text/options.js +0 -92
  300. package/styles/v2/components/ThemeProvider/ThemeProvider.jsx +0 -39
  301. package/styles/v2/components/ThemeProvider/ThemeProvider.stories.js +0 -85
  302. package/styles/v2/components/index.js +0 -70
  303. package/styles/v2/components/styles.js +0 -21
  304. package/styles/v2/theme/base/breakpoints.js +0 -16
  305. package/styles/v2/theme/base/colors.js +0 -136
  306. package/styles/v2/theme/base/index.js +0 -5
  307. package/styles/v2/theme/base/sizes.js +0 -48
  308. package/styles/v2/theme/base/typography.js +0 -24
  309. package/styles/v2/theme/base/zindices.js +0 -17
  310. package/styles/v2/theme/global.js +0 -118
  311. package/styles/v2/theme/index.js +0 -27
  312. package/styles/v2/utils/Spaces.js +0 -16
  313. package/v1/assets-manifest.json +0 -5
  314. package/v1/index.html +0 -1
  315. package/v1/index.js +0 -3
  316. package/v1/index.js.LICENSE.txt +0 -23
  317. package/v1/index.js.map +0 -1
@@ -1,367 +0,0 @@
1
- import find from 'lodash/find';
2
- import isFunction from 'lodash/isFunction';
3
- import isNumber from 'lodash/isNumber';
4
- import isObject from 'lodash/isObject';
5
- import map from 'lodash/map';
6
- import some from 'lodash/some';
7
- import sortBy from 'lodash/sortBy';
8
- import React, {Component} from 'react';
9
- import PropTypes from 'prop-types';
10
- import classNames from 'classnames';
11
- import TableHeading from './TableHeading';
12
- import TableCell from './TableCell';
13
- import TableFooter from './TableFooter';
14
- import TableSortSelector from './TableSortSelector';
15
- import TableSortType from './TableSortType';
16
- import deprecate from 'v1/utils/deprecate';
17
-
18
- deprecate({
19
- name: 'Table',
20
- newName: 'Table',
21
- changes: [
22
- '---- Props ----',
23
- 'In order to accomplish the same functionality as using `footerMessage`, now use the `<Tfoot />` component in the table structure instead of passing in as a prop',
24
- 'Pagination and Sorting are not yet supported in the v2 Table component',
25
- '---- Changes in v2 component ----',
26
- 'New v2 Table component is now a paired-down in functionality compaired to v1 version',
27
- '`containerClassName`, `headers`, `data`, `currentPage`, `sortOrder`, `sortDataKey`, `totalDataRowCount`, `rowSize`, `showFooterMessage`, `footerMessage`, `pageSize`, `sorting`, `onPageChange`, `onSortChange`, and `noDataAvailableMessage` are not yet supported in the v2 Table component',
28
- '---- Additional Information ----',
29
- 'new props are documented at: https://chakra-ui.com/docs/data-display/table',
30
- ],
31
- });
32
-
33
- const PAGE_SIZE_MIN = 1;
34
- const PAGE_SIZE_MAX = 25;
35
-
36
- export default class Table extends Component {
37
- static propTypes = {
38
- /** Additional class(es) to add to the Table. */
39
- className: PropTypes.string,
40
- /** Additional class(es) to add to the container of the Table. */
41
- containerClassName: PropTypes.string,
42
- /** An array of header data for each column. */
43
- headers: PropTypes.arrayOf(
44
- PropTypes.shape({
45
- /** The header label. */
46
- label: PropTypes.string.isRequired,
47
- /** The header data key which identifies the column for other processes (such as sorting, etc). Each data key should be unique. */
48
- dataKey: PropTypes.string.isRequired,
49
- /** Additional class(es) to add to the header cell. */
50
- className: PropTypes.string,
51
- /** Determines whether or not table can sort by header cell dataKey. */
52
- isSortable: PropTypes.bool,
53
- /** A function to render a custom layout for the header cell. The function is passed the `TableHeadingPropTypes` as props. */
54
- render: PropTypes.func,
55
- })
56
- ).isRequired,
57
- /** An array of objects that captures table data for each row. An object can have key/value pairs or a key/object pair. The keys should match the `dataKey` from each column. A key/object pair can contain `value (String, required)`, `className (String)`, and `render (Function)`. The `render` function is passed `TableCellPropTypes` as props. You can also pass an object with a `customRowRender` function that will allow you to render custom row layouts (see examples). */
58
- data: PropTypes.arrayOf(PropTypes.object),
59
- /** The default page of data to display when the component is mounted. */
60
- currentPage: PropTypes.number,
61
- /** Determines if table data will be sorted in ascending or descending order. */
62
- sortOrder: PropTypes.oneOf([TableSortType.ASC, TableSortType.DESC]),
63
- /** The header data key the table will be sorted on. */
64
- sortDataKey: PropTypes.string,
65
- /** The total number of rows expected in the table. This determines if pagination should be shown and properly lays out pagination controls. */
66
- totalDataRowCount: PropTypes.number,
67
- /** Determines the default height of each row of data on larger viewports. */
68
- rowSize: PropTypes.oneOf(['normal', 'large']),
69
- /** Determines if table footer message should be shown. */
70
- showFooterMessage: PropTypes.bool,
71
- /** A custom message to display in the table footer. */
72
- footerMessage: PropTypes.node,
73
- /** The number of rows to display per page. For performance reasons, the max pageSize is 25.
74
- *
75
- * @param {Object} props - The props for the component.
76
- * @param {String} propName - The name of the prop being tested against.
77
- * @param {String} componentName - The name of the component.
78
- * @returns {Error} - An error if the prop isn't a number or not between 1 and 25.
79
- */
80
- pageSize: (props, propName, componentName) => {
81
- if (!isNumber(props[propName])) {
82
- return new Error(
83
- `Invalid type of ${propName} supplied to ${componentName}. Must be a number. Validation failed.`
84
- );
85
- }
86
-
87
- if (
88
- props[propName] < PAGE_SIZE_MIN ||
89
- props[propName] > PAGE_SIZE_MAX
90
- ) {
91
- return new Error(
92
- `Invalid prop ${propName} supplied to ${componentName}. Number must be between 1 and 25. Validation failed.`
93
- );
94
- }
95
- },
96
- /** A custom sorting function or an array of the dataKey(s) of the header(s) to sort the table by. If multiple are provided then sort order will be determined by column using the first key, then the second, and so on to sort the data with multiple keys in mind. See <a href="https://lodash.com/docs#sortBy" target="_blank">sortBy</a>. */
97
- sorting: PropTypes.oneOfType([
98
- PropTypes.func,
99
- PropTypes.arrayOf(PropTypes.string),
100
- ]),
101
- /**
102
- * A function to call when a page change occurs.
103
- *
104
- * @param {Number} currentPage - The currently visible page.
105
- * @param {Number} previousPage - The last page that was visible.
106
- */
107
- onPageChange: PropTypes.func,
108
- /**
109
- * A function to call when a header sort occurs.
110
- *
111
- * @param {Number} dataKey - The header's dataKey.
112
- * @param {Number} sortOrder - The sort order to use (ASC or DESC).
113
- */
114
- onSortChange: PropTypes.func,
115
- /** A custom message to display when there is no data available for the table. */
116
- noDataAvailableMessage: PropTypes.node,
117
- };
118
- static defaultProps = {
119
- currentPage: 1,
120
- totalDataRowCount: 0,
121
- rowSize: 'normal',
122
- pageSize: 25,
123
- noDataAvailableMessage: 'No data available at this time.',
124
- showFooterMessage: true,
125
- };
126
-
127
- constructor(props) {
128
- super(props);
129
-
130
- const {
131
- headers,
132
- currentPage,
133
- totalDataRowCount,
134
- pageSize,
135
- sortOrder,
136
- sortDataKey,
137
- } = props;
138
-
139
- this._HEADERS = headers;
140
-
141
- this.state = {
142
- sortOrder,
143
- sortDataKey,
144
- currentPage,
145
- totalPages: Math.ceil(totalDataRowCount / pageSize),
146
- };
147
- }
148
-
149
- componentDidUpdate(prevProps, prevState) {
150
- const {onPageChange, onSortChange, totalDataRowCount, pageSize} = this.props;
151
- const {
152
- currentPage: previousCurrentPage,
153
- sortOrder: previousSortOrder,
154
- sortDataKey: previousSortDataKey,
155
- } = prevState;
156
- const {totalPages, currentPage, sortOrder, sortDataKey} = this.state;
157
-
158
- if (totalDataRowCount !== prevProps.totalDataRowCount || pageSize !== prevProps.pageSize) {
159
- this.setState({
160
- totalPages: Math.ceil(totalDataRowCount / pageSize)
161
- })
162
- }
163
-
164
- if (previousCurrentPage !== currentPage && onPageChange) {
165
- onPageChange({
166
- totalPages,
167
- currentPage,
168
- previousPage: previousCurrentPage,
169
- });
170
- }
171
-
172
- if (
173
- (previousSortOrder !== sortOrder ||
174
- previousSortDataKey !== sortDataKey) &&
175
- onSortChange
176
- ) {
177
- onSortChange({
178
- sortOrder,
179
- dataKey: sortDataKey,
180
- });
181
- }
182
- }
183
-
184
- _onPageChange = ({value}) => {
185
- this.setState({
186
- currentPage: parseInt(value, 10),
187
- });
188
- };
189
-
190
- _onPreviousPage = evt => {
191
- this.setState((prevState, props) => {
192
- return {
193
- currentPage: prevState.currentPage - 1,
194
- };
195
- });
196
- };
197
-
198
- _onNextPage = evt => {
199
- this.setState((prevState, props) => {
200
- return {
201
- currentPage: prevState.currentPage + 1,
202
- };
203
- });
204
- };
205
-
206
- _onSortChange = ({dataKey, sortOrder}) => {
207
- this.setState({
208
- sortOrder,
209
- sortDataKey: dataKey,
210
- });
211
- };
212
-
213
- _renderHeadings = () => {
214
- const {sortOrder, sortDataKey} = this.state;
215
-
216
- return (
217
- <thead className="TableHead">
218
- <tr>
219
- {this._HEADERS.map(header => {
220
- const {render, ...headerProps} = header;
221
- const {dataKey, isSortable} = headerProps;
222
- const Heading = render ? render : TableHeading;
223
-
224
- if (isSortable) {
225
- headerProps.onSortClick = this._onSortChange;
226
- headerProps.sortOrder =
227
- dataKey === sortDataKey ? sortOrder : null;
228
- }
229
-
230
- return <Heading key={dataKey} {...headerProps} />;
231
- })}
232
- </tr>
233
- </thead>
234
- );
235
- };
236
-
237
- _renderRows = () => {
238
- const {data, sorting, noDataAvailableMessage} = this.props;
239
-
240
- if (!data.length) {
241
- return (
242
- <tbody className="TableBody Table-no-data">
243
- <tr>
244
- <td colSpan={this._HEADERS.length}>
245
- <div>{noDataAvailableMessage}</div>
246
- </td>
247
- </tr>
248
- </tbody>
249
- );
250
- }
251
-
252
- let sortedData = data;
253
-
254
- if (sorting) {
255
- const sort = isFunction(sorting) ? [sorting] : [...sorting];
256
-
257
- sortedData = sortBy(data, sort);
258
- }
259
-
260
- return (
261
- <tbody className="TableBody">
262
- {sortedData.map(({className: rowClass, ...row}, i) => {
263
- if (row.customRowRender) {
264
- return row.customRowRender({key: i, row});
265
- } else {
266
- return (
267
- <tr key={i} className={rowClass}>
268
- {map(row, (cell, dataKey) => {
269
- const {className, value} = cell;
270
- const Cell =
271
- isObject(cell) && cell.render
272
- ? cell.render
273
- : TableCell;
274
- const key = `${i}-${dataKey}`;
275
- const label = find(this._HEADERS, {dataKey})
276
- .label;
277
- const cellValue = isObject(cell)
278
- ? value
279
- : cell;
280
-
281
- return (
282
- <Cell
283
- key={key}
284
- className={className}
285
- headingLabel={label}
286
- value={cellValue}
287
- />
288
- );
289
- })}
290
- </tr>
291
- );
292
- }
293
- })}
294
- </tbody>
295
- );
296
- };
297
-
298
- _renderFooter = () => {
299
- const {
300
- rowSize,
301
- pageSize,
302
- data,
303
- totalDataRowCount,
304
- showFooterMessage,
305
- footerMessage,
306
- } = this.props;
307
- const {currentPage, totalPages} = this.state;
308
-
309
- return (
310
- <TableFooter
311
- rowSize={rowSize}
312
- pageSize={pageSize}
313
- totalDataRowCount={totalDataRowCount}
314
- currentPage={currentPage}
315
- totalPages={totalPages}
316
- currentPageLength={data.length}
317
- showMessage={showFooterMessage}
318
- message={footerMessage}
319
- onPageChange={this._onPageChange}
320
- onPreviousPage={this._onPreviousPage}
321
- onNextPage={this._onNextPage}
322
- />
323
- );
324
- };
325
-
326
- _renderTableSortDropdown = () => {
327
- const {sortOrder, sortDataKey} = this.state;
328
- const hasSortableHeaders = some(this._HEADERS, 'isSortable');
329
-
330
- if (!hasSortableHeaders) {
331
- return null;
332
- }
333
-
334
- return (
335
- <TableSortSelector
336
- headers={this._HEADERS}
337
- sortOrder={sortOrder}
338
- sortDataKey={sortDataKey}
339
- onSortChange={this._onSortChange}
340
- />
341
- );
342
- };
343
-
344
- render() {
345
- const {containerClassName, className, rowSize} = this.props;
346
- const containerClasses = classNames(
347
- 'Table-container',
348
- containerClassName
349
- );
350
- const tableClasses = classNames(
351
- 'Table',
352
- {'Table-large': rowSize === 'large'},
353
- className
354
- );
355
-
356
- return (
357
- <div className={containerClasses}>
358
- {this._renderTableSortDropdown()}
359
- <table className={tableClasses}>
360
- {this._renderHeadings()}
361
- {this._renderRows()}
362
- </table>
363
- {this._renderFooter()}
364
- </div>
365
- );
366
- }
367
- }