@redsift/design-system-legacy 8.0.0-alpha.8 → 8.0.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 (136) hide show
  1. package/{index.js.map → dist/index.js.map} +1 -1
  2. package/dist/package.json +65 -0
  3. package/package.json +2 -3
  4. package/rollup.config.js +70 -0
  5. package/src/components/Alert/Alert.jsx +94 -0
  6. package/src/components/Alert/index.ts +1 -0
  7. package/src/components/Alert/readme.md +114 -0
  8. package/src/components/Button/Button.jsx +161 -0
  9. package/src/components/Button/index.ts +1 -0
  10. package/src/components/Button/readme.md +173 -0
  11. package/src/components/Card/Card.jsx +34 -0
  12. package/src/components/Card/index.ts +1 -0
  13. package/src/components/Card/readme.md +54 -0
  14. package/src/components/CardHeader/CardHeader.jsx +40 -0
  15. package/src/components/CardHeader/index.ts +1 -0
  16. package/src/components/Checkbox/Checkbox.jsx +123 -0
  17. package/src/components/Checkbox/index.ts +1 -0
  18. package/src/components/Checkbox/readme.md +54 -0
  19. package/src/components/CheckboxTree/CheckboxTree.jsx +167 -0
  20. package/src/components/CheckboxTree/CheckboxTree.styles.ts +49 -0
  21. package/src/components/CheckboxTree/index.ts +1 -0
  22. package/src/components/CheckboxTree/readme.md +60 -0
  23. package/src/components/IconContainer/IconContainer.jsx +51 -0
  24. package/src/components/IconContainer/index.ts +1 -0
  25. package/src/components/Input/Input.jsx +27 -0
  26. package/src/components/Input/OutlineInput/OutlineInput.jsx +188 -0
  27. package/src/components/Input/RegularInput/RegularInput.jsx +55 -0
  28. package/src/components/Input/RegularInput/RegularInput.styles.ts +98 -0
  29. package/src/components/Input/index.ts +1 -0
  30. package/src/components/Input/readme.md +82 -0
  31. package/src/components/Pagination/Pagination.jsx +111 -0
  32. package/src/components/Pagination/index.ts +1 -0
  33. package/src/components/Pagination/readme.md +34 -0
  34. package/src/components/Radio/Radio.jsx +121 -0
  35. package/src/components/Radio/index.ts +1 -0
  36. package/src/components/Radio/readme.md +90 -0
  37. package/src/components/Select/Select.jsx +360 -0
  38. package/src/components/Select/SelectComponents.jsx +342 -0
  39. package/src/components/Select/index.ts +1 -0
  40. package/src/components/Select/readme.md +2507 -0
  41. package/src/components/Switch/Switch.jsx +130 -0
  42. package/src/components/Switch/index.ts +1 -0
  43. package/src/components/Switch/readme.md +55 -0
  44. package/src/components/Table/ExportCSVButton.jsx +34 -0
  45. package/src/components/Table/Table.jsx +872 -0
  46. package/src/components/Table/TableComponents.jsx +239 -0
  47. package/src/components/Table/TableFilters.jsx +23 -0
  48. package/src/components/Table/TableStyles.jsx +514 -0
  49. package/src/components/Table/index.ts +1 -0
  50. package/src/components/Table/readme.md +2190 -0
  51. package/src/components/Tabs/Tabs.jsx +116 -0
  52. package/src/components/Tabs/TabsComponents.jsx +124 -0
  53. package/src/components/Tabs/index.ts +1 -0
  54. package/src/components/Tabs/readme.md +171 -0
  55. package/src/components/Typography/Typography.jsx +77 -0
  56. package/src/components/Typography/index.ts +1 -0
  57. package/src/components/Typography/readme.md +88 -0
  58. package/src/components/icons/ActionsIcon.jsx +24 -0
  59. package/src/components/icons/AddIcon.jsx +8 -0
  60. package/src/components/icons/Arrow.jsx +39 -0
  61. package/src/components/icons/ArrowDown.jsx +8 -0
  62. package/src/components/icons/ArrowIcon.jsx +25 -0
  63. package/src/components/icons/ArrowUp.jsx +8 -0
  64. package/src/components/icons/BarchartHorizontal.jsx +18 -0
  65. package/src/components/icons/BellIcon.jsx +19 -0
  66. package/src/components/icons/BimiSetupIcon.jsx +25 -0
  67. package/src/components/icons/Chevron.jsx +42 -0
  68. package/src/components/icons/ChevronLeft.jsx +8 -0
  69. package/src/components/icons/ChevronRight.jsx +8 -0
  70. package/src/components/icons/ClearIcon.jsx +8 -0
  71. package/src/components/icons/Cloud.jsx +34 -0
  72. package/src/components/icons/Cross.jsx +25 -0
  73. package/src/components/icons/DeleteIcon.jsx +19 -0
  74. package/src/components/icons/DynamicDmarcIcon.jsx +43 -0
  75. package/src/components/icons/EditOutline.jsx +8 -0
  76. package/src/components/icons/Email.jsx +68 -0
  77. package/src/components/icons/EmailSourcesIcon.jsx +36 -0
  78. package/src/components/icons/ExpandLayoutIcon.jsx +38 -0
  79. package/src/components/icons/ExportIcon.jsx +7 -0
  80. package/src/components/icons/Eye.jsx +28 -0
  81. package/src/components/icons/Facebook.jsx +31 -0
  82. package/src/components/icons/FilterList.jsx +8 -0
  83. package/src/components/icons/FindOutHowIcon.jsx +49 -0
  84. package/src/components/icons/FlatArrow.jsx +33 -0
  85. package/src/components/icons/ForwardArrowIcon.jsx +54 -0
  86. package/src/components/icons/Github.jsx +41 -0
  87. package/src/components/icons/Globe.jsx +29 -0
  88. package/src/components/icons/Hand.jsx +21 -0
  89. package/src/components/icons/InfinityLoop.jsx +22 -0
  90. package/src/components/icons/InfinityLoopBreak.jsx +35 -0
  91. package/src/components/icons/IngrainIcon.jsx +33 -0
  92. package/src/components/icons/LanguageIcon.jsx +44 -0
  93. package/src/components/icons/Linkedin.jsx +37 -0
  94. package/src/components/icons/LocationPin.jsx +34 -0
  95. package/src/components/icons/MicrosoftShield.jsx +44 -0
  96. package/src/components/icons/News.jsx +65 -0
  97. package/src/components/icons/Nodes.jsx +17 -0
  98. package/src/components/icons/OnDmarcIcon.jsx +29 -0
  99. package/src/components/icons/OnDmarcLogo.jsx +74 -0
  100. package/src/components/icons/OnDomainIcon.jsx +27 -0
  101. package/src/components/icons/OnInboxIcon.jsx +42 -0
  102. package/src/components/icons/OnInboxLogo.jsx +97 -0
  103. package/src/components/icons/OnInboxManagerIcon.jsx +46 -0
  104. package/src/components/icons/OpenInNewTabIcon.jsx +28 -0
  105. package/src/components/icons/Padlock.jsx +37 -0
  106. package/src/components/icons/PlusIcon.jsx +16 -0
  107. package/src/components/icons/Question.jsx +19 -0
  108. package/src/components/icons/Recruiting.jsx +34 -0
  109. package/src/components/icons/ReportsIcon.jsx +25 -0
  110. package/src/components/icons/SearchIcon.jsx +7 -0
  111. package/src/components/icons/Shield.jsx +17 -0
  112. package/src/components/icons/ShieldPassIcon.jsx +23 -0
  113. package/src/components/icons/ShieldSolid.jsx +33 -0
  114. package/src/components/icons/ShieldWarningIcon.jsx +40 -0
  115. package/src/components/icons/ShieldWarningInvertedIcon.jsx +36 -0
  116. package/src/components/icons/Spinner.jsx +100 -0
  117. package/src/components/icons/Team.jsx +164 -0
  118. package/src/components/icons/ThreeDotsIcon.jsx +18 -0
  119. package/src/components/icons/Thumb.jsx +17 -0
  120. package/src/components/icons/Traffic.jsx +22 -0
  121. package/src/components/icons/Twitter.jsx +47 -0
  122. package/src/components/icons/Upload.jsx +12 -0
  123. package/src/components/icons/VerticalDots.jsx +28 -0
  124. package/src/components/icons/Warning.jsx +36 -0
  125. package/src/components/icons/WarningTriangle.jsx +44 -0
  126. package/src/components/icons/Youtube.jsx +28 -0
  127. package/src/components/icons/index.ts +69 -0
  128. package/src/hooks/useDebouncedValue.jsx +19 -0
  129. package/src/hooks/useFetch.jsx +26 -0
  130. package/src/hooks/useIsMobile.jsx +25 -0
  131. package/src/hooks/useOnClickOutside.jsx +14 -0
  132. package/src/hooks/useToggle.jsx +8 -0
  133. package/src/index.ts +23 -0
  134. package/tsconfig.json +3 -0
  135. /package/{CONTRIBUTING.md → dist/CONTRIBUTING.md} +0 -0
  136. /package/{index.js → dist/index.js} +0 -0
@@ -0,0 +1,2190 @@
1
+ ### Notes
2
+
3
+ - This component has been built based on https://github.com/tannerlinsley/react-table (v7), which is the same library as the ui-kit `<Table />` was built on.
4
+ - **PLEASE NOTE:** the following may need to be added to the app you are using Table with xOverflow:
5
+ `import "simplebar/dist/simplebar.min.css";`
6
+
7
+ ### Table Props
8
+
9
+ | Prop | Default | Options |
10
+ | :-----------------------: | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
11
+ | columns | | Array, See React Table for structure |
12
+ | data | | Array, See React Table for structure |
13
+ | bordered | false | If true, adds cell borders |
14
+ | iconButtonsHoverColor | #00000019 | Sets a special hover background color when hovering an icon button |
15
+ | iconButtonsActiveColor | #00000032 | Sets a special hover background color when clicking an icon button |
16
+ | primaryButtonsHoverColor | #00000019 | Sets a special hover background color when hovering a primary button |
17
+ | primaryButtonsActiveColor | #00000032 | Sets a special hover background color when clicking a primary button |
18
+ | noPagination | false | If true, disables pagination |
19
+ | onSelectionChange | Function | If true, adds checkboxes. Returns the `_id` for the data entries of the currently selected items |
20
+ | onSearchChange | Function | Returns the current string of the Searchfield |
21
+ | onDelete | Function | If present, enables the delete function. Returns an array of `_id` for the items to delete |
22
+ | onPageSizeChange | Function | If present, enables page size change detection. Returns a number with new page size |
23
+ | onPageChange | Function | If present, enables page index change detection. Returns a number with the current index page |
24
+ | showDeleteColumn | false | If true, shows the delete action row |
25
+ | gotoPageIndex | null | If !null, force table to nav to index page |
26
+ | onPreviousPage | function | Event handler for onPreviousPage |
27
+ | onNextPage | function | Event handler for onNextPage |
28
+ | selectHighlight | | Specify a colour to highlight selected rows |
29
+ | checkboxProps | | For customising the checkbox |
30
+ | inputProps | | For customising the input fields |
31
+ | searchID | | Enables searching by specifying an accessor |
32
+ | searchLabel | | Label for the search input |
33
+ | title | | |
34
+ | filterable | | If true, enables filtering |
35
+ | sortable | true | If true, enables column sorting |
36
+ | staticPageSize | | Set a static Page Size for pagination |
37
+ | CustomFilterButton | | Custom filter button. Requires `filterable` prop. Displays just before CustomActions |
38
+ | CustomActions | | Custom action buttons |
39
+ | CustomSelectedActions | | Custom action buttons that are only usable when items are selected. Make sure to disable them when selection is null |
40
+ | AddComponent | | Custom Component that is visible when the add button is pressed, receiving a `closeAddComponent` prop to close the AddComponent when done (i.e. cancel, done) |
41
+ | CustomHeaderComponent | | Custom Component that sits underneath the table header/title/actions row |
42
+ | color | | Is used to define the colour of the pagination |
43
+ | rowSubComponent | | Custom Component that receives { row } as props, that enables expandable rows that show a sub-component (triggered by chevron) |
44
+ | rowSubComponentEditMode | false | Changes the rowSubComponent to be triggered by an edit button, rather than a chevron |
45
+ | customOnEdit | | Function triggered when edit button is pressed |
46
+ | rowSpacing | 10 | Space each row, and add a solid grey border with radius 4px to each. Set the spacing by passing in an integer |
47
+ | sortableRows | | Make each row sortable, with sort function handled in internal state of the table |
48
+ | onSort | | Custom sorting function to override table's own `handleSortGeneric` function. Use this for extra actions such as api calls |
49
+ | onRowsLengthChange | Function | Returns the current number of rows being displayed |
50
+ | footerRow | | Additional row displayed at the end of the table, usually used as summary |
51
+ | defaultSorted | | Object in a single item array, e.g. `[{ id: 'firstName', desc: false }]`. The id is the column to sort by, desc denotes order |
52
+ | defaultPageSize | 10 | Number that must be one of the following: 10, 20, 30, 40, 50. |
53
+ | xOverflow | | If using many columns, set an `xOverflow` prop to determine the width of the first column. A permanent scrollbar will appear. In addition, you may need to `import "simplebar/dist/simplebar.min.css"` in the app |
54
+ | xOverflowBg | `white` | Set the background colour of the first column when using `xOverflow` |
55
+ | locales | | Provides multilingual support, by passing in an object such as { search, show-search, toggle-filter, add, delete-selected, select, edit, clear-search, remove, cancel, delete, delete-select-are-you-sure, confirm, rows } |
56
+ | smallTableButtonDesign | | Boolean (true) to force small layout where search bar always use the entire table's width |
57
+ | ...rest | | Add anything extra to the html table |
58
+
59
+ ### Custom Data Props (see React Table for the builtins)
60
+
61
+ | Prop | Info |
62
+ | :--------------: | -------------------------------------------------------------------: |
63
+ | isNumber | If true, aligns cell text to the right |
64
+ | \_id | Number - Required when using onSelectionChange |
65
+ | \_noSelect | If true, disables the selection and deletion options for the row |
66
+ | \_customRowColor | Sets an individual row colour |
67
+ | \_onClick | Function - makes the entire row clickable |
68
+ | CustomNoSelect | React Component - shows a custom icon instead of a disabled checkbox |
69
+
70
+ ### Custom Column Props (see React Table for the builtins)
71
+
72
+ | Prop | Info |
73
+ | :------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
74
+ | filter | Define a custom filter. Current support: 'fuzzyText' |
75
+ | size | Sets a fixed size for the column. Sets as pixels if an integer, i.e. size={60} would equal 60px wide. Alternatively, specify the unit and measurement as a string, i.e. size={'5rem'} |
76
+ | sortType | Define a custom sorting function. Sort by a property of an accessor, for example |
77
+ | disableSortBy | Boolean (true). Disable sorting on a particular column |
78
+ | disableFilters | Boolean (true). Disable filtering on a particular column |
79
+
80
+ ### Column sort types
81
+
82
+ More details at: https://react-table.tanstack.com/docs/api/useSortBy#column-options
83
+
84
+ - basic
85
+ - datetime
86
+ - alphanumeric (default)\*
87
+ - Function(rowA: Row, rowB: Row, columnId: String, desc: Bool)
88
+
89
+ If a function is passed, it must be memoized. The sortType function should return -1 if rowA is larger, and 1 if rowB is larger. react-table will take care of the rest.
90
+
91
+ \*Note: alphanumeric doesn't work well with boolean columns, you should `basic` instead.
92
+
93
+ ### Examples
94
+
95
+ ```js
96
+ <Table
97
+ title="[Empty State] Table"
98
+ sortable={false}
99
+ columns={[
100
+ {
101
+ Header: "Name",
102
+ accessor: "name",
103
+ },
104
+ {
105
+ Header: "Info",
106
+ accessor: "info",
107
+ },
108
+ ]}
109
+ data={[]}
110
+ />
111
+ ```
112
+
113
+ ```js
114
+ <Table
115
+ bordered
116
+ noPagination
117
+ title="[Bordered] [Numbers] [Sort] Table"
118
+ columns={[
119
+ {
120
+ Header: "First Name",
121
+ accessor: "firstName",
122
+ },
123
+ {
124
+ Header: "Last Name",
125
+ accessor: "lastName",
126
+ },
127
+ {
128
+ Header: "Percent %",
129
+ accessor: "percent",
130
+ isNumber: true,
131
+ },
132
+ ]}
133
+ data={[
134
+ {
135
+ firstName: "John",
136
+ lastName: "Doe",
137
+ percent: "100%",
138
+ },
139
+ {
140
+ firstName: "Jane",
141
+ lastName: "Doe",
142
+ percent: "4%",
143
+ },
144
+ {
145
+ firstName: "James",
146
+ lastName: "Doe",
147
+ },
148
+ ]}
149
+ />
150
+ ```
151
+
152
+ ```js
153
+ <Table
154
+ bordered
155
+ noPagination
156
+ title="[Bordered] [Numbers] [Sort] Table - overflowing text"
157
+ columns={[
158
+ {
159
+ Header: "First Name",
160
+ accessor: "firstName",
161
+ size: 60,
162
+ },
163
+ {
164
+ Header: "Last Name",
165
+ accessor: "lastName",
166
+ },
167
+ {
168
+ Header: "Percent %",
169
+ accessor: "percent",
170
+ isNumber: true,
171
+ },
172
+ ]}
173
+ data={[
174
+ {
175
+ firstName: "John",
176
+ lastName: "Doe",
177
+ percent: "100%",
178
+ },
179
+ {
180
+ firstName: "Jane",
181
+ lastName: "Doe",
182
+ percent: "4%",
183
+ },
184
+ {
185
+ firstName: "Alexander",
186
+ lastName: "Doe",
187
+ },
188
+ ]}
189
+ />
190
+ ```
191
+
192
+ ```js
193
+ <Table
194
+ bordered
195
+ noPagination
196
+ title="[Bordered] [Numbers] [Sort] [Exportable] Table"
197
+ color="#33b222"
198
+ iconButtonsHoverColor="#33b22219"
199
+ iconButtonsActiveColor="#33b22232"
200
+ export={{
201
+ filename: "sample-filename.csv",
202
+ }}
203
+ columns={[
204
+ {
205
+ Header: "First Name",
206
+ accessor: "firstName",
207
+ },
208
+ {
209
+ Header: "Last Name",
210
+ accessor: "lastName",
211
+ },
212
+ {
213
+ Header: "Percent %",
214
+ accessor: "percent",
215
+ isNumber: true,
216
+ },
217
+ ]}
218
+ data={[
219
+ {
220
+ firstName: "John",
221
+ lastName: "Doe",
222
+ percent: "100%",
223
+ },
224
+ {
225
+ firstName: "Jane",
226
+ lastName: "Doe",
227
+ percent: "4%",
228
+ },
229
+ {
230
+ firstName: "James",
231
+ lastName: "Doe",
232
+ },
233
+ ]}
234
+ />
235
+ ```
236
+
237
+ ```js
238
+ <Table
239
+ bordered
240
+ noPagination
241
+ title="[Bordered] [Numbers] [Sort] [Exportable extended] Table"
242
+ color="#33b222"
243
+ iconButtonsHoverColor="#33b22219"
244
+ iconButtonsActiveColor="#33b22232"
245
+ export={{
246
+ filename: "sample-filename.csv",
247
+ headers: [
248
+ { key: "firstName", label: "First name" },
249
+ { key: "percent", label: "Percent %" },
250
+ ],
251
+ data: [
252
+ {
253
+ firstName: "John",
254
+ lastName: "Doe",
255
+ percent: "100%",
256
+ },
257
+ {
258
+ firstName: "James",
259
+ lastName: "Doe",
260
+ },
261
+ ],
262
+ }}
263
+ columns={[
264
+ {
265
+ Header: "First Name",
266
+ accessor: "firstName",
267
+ },
268
+ {
269
+ Header: "Last Name",
270
+ accessor: "lastName",
271
+ },
272
+ {
273
+ Header: "Percent %",
274
+ accessor: "percent",
275
+ isNumber: true,
276
+ },
277
+ ]}
278
+ data={[
279
+ {
280
+ firstName: "John",
281
+ lastName: "Doe",
282
+ percent: "100%",
283
+ },
284
+ {
285
+ firstName: "Jane",
286
+ lastName: "Doe",
287
+ percent: "4%",
288
+ },
289
+ {
290
+ firstName: "James",
291
+ lastName: "Doe",
292
+ },
293
+ ]}
294
+ />
295
+ ```
296
+
297
+ ```js
298
+ <Table
299
+ bordered
300
+ noPagination
301
+ title="[Bordered] [Numbers] [Sort] [Exportable extended] Table"
302
+ color="#33b222"
303
+ iconButtonsHoverColor="#33b22219"
304
+ iconButtonsActiveColor="#33b22232"
305
+ export={{
306
+ filename: "sample-filename.csv",
307
+ headers: [
308
+ { key: "firstName", label: "First name" },
309
+ { key: "percent", label: "Percent %" },
310
+ ],
311
+ data: [
312
+ {
313
+ firstName: "John",
314
+ lastName: "Doe",
315
+ percent: "100%",
316
+ },
317
+ {
318
+ firstName: "James",
319
+ lastName: "Doe",
320
+ },
321
+ ],
322
+ }}
323
+ columns={[
324
+ {
325
+ Header: "First Name",
326
+ accessor: "firstName",
327
+ },
328
+ {
329
+ Header: "Last Name",
330
+ accessor: "lastName",
331
+ },
332
+ {
333
+ Header: "Percent %",
334
+ accessor: "percent",
335
+ isNumber: true,
336
+ },
337
+ ]}
338
+ data={[
339
+ {
340
+ firstName: "John",
341
+ lastName: "Doe",
342
+ percent: "100%",
343
+ },
344
+ {
345
+ firstName: "Jane",
346
+ lastName: "Doe",
347
+ percent: "4%",
348
+ },
349
+ {
350
+ firstName: "James",
351
+ lastName: "Doe",
352
+ },
353
+ ]}
354
+ />
355
+ ```
356
+
357
+ ```js
358
+ <Table
359
+ defaultSorted={[{ id: "firstName", desc: false }]}
360
+ bordered
361
+ noPagination
362
+ title="[Bordered] [Numbers] [defaultSorted] Table"
363
+ columns={[
364
+ {
365
+ Header: "First Name",
366
+ accessor: "firstName",
367
+ },
368
+ {
369
+ Header: "Last Name",
370
+ accessor: "lastName",
371
+ },
372
+ {
373
+ Header: "Percent %",
374
+ accessor: "percent",
375
+ isNumber: true,
376
+ },
377
+ ]}
378
+ data={[
379
+ {
380
+ firstName: "John",
381
+ lastName: "Doe",
382
+ percent: "100%",
383
+ },
384
+ {
385
+ firstName: "Jane",
386
+ lastName: "Doe",
387
+ percent: "4%",
388
+ },
389
+ {
390
+ firstName: "James",
391
+ lastName: "Doe",
392
+ },
393
+ ]}
394
+ />
395
+ ```
396
+
397
+ ```js
398
+ <Table
399
+ bordered
400
+ noPagination
401
+ title="[Bordered] [Numbers] [Sort] [Footer] Table"
402
+ columns={[
403
+ {
404
+ Header: "First Name",
405
+ accessor: "firstName",
406
+ },
407
+ {
408
+ Header: "Last Name",
409
+ accessor: "lastName",
410
+ },
411
+ {
412
+ Header: "Percent %",
413
+ accessor: "percent",
414
+ isNumber: true,
415
+ Footer: (row) => <span style={{ fontWeight: "bold" }}>{row.value}</span>,
416
+ },
417
+ ]}
418
+ data={[
419
+ {
420
+ firstName: "John",
421
+ lastName: "Doe",
422
+ percent: "100%",
423
+ },
424
+ {
425
+ firstName: "Jane",
426
+ lastName: "Doe",
427
+ percent: "4%",
428
+ },
429
+ {
430
+ firstName: "James",
431
+ lastName: "Doe",
432
+ },
433
+ ]}
434
+ footerRow={{
435
+ percent: "100%",
436
+ }}
437
+ />
438
+ ```
439
+
440
+ ```js
441
+ <Table
442
+ noPagination
443
+ color="#33b222"
444
+ iconButtonsHoverColor="#33b22219"
445
+ iconButtonsActiveColor="#33b22232"
446
+ title="[Select] [Sort] [Delete] [ClickableRow] Table"
447
+ onSelectionChange={(selection) => console.log("selected", selection)}
448
+ onDelete={(selection) => console.log("delete", selection)}
449
+ showDeleteColumn
450
+ selectHighlight="rgba(51, 178, 34,0.1)"
451
+ checkboxProps={{ color: "#33b222" }}
452
+ columns={[
453
+ {
454
+ Header: "First Name",
455
+ accessor: "firstName",
456
+ },
457
+ {
458
+ Header: "Last Name",
459
+ accessor: "lastName",
460
+ },
461
+ ]}
462
+ data={[
463
+ {
464
+ _id: 0,
465
+ _onClick: () => alert("click"),
466
+ firstName: "Click",
467
+ lastName: "Me",
468
+ },
469
+ {
470
+ _id: 1,
471
+ firstName: "Jane",
472
+ lastName: "Doe",
473
+ },
474
+ {
475
+ _id: 2,
476
+ firstName: "Jason",
477
+ lastName: "Doe",
478
+ _noSelect: true,
479
+ },
480
+ {
481
+ _id: 2,
482
+ firstName: "Custom",
483
+ lastName: "Doe",
484
+ _noSelect: true,
485
+ _customRowColor: "rgba(191, 85, 236, 0.5)",
486
+ CustomNoSelect: () => <div>🙃</div>,
487
+ },
488
+ ]}
489
+ />
490
+ ```
491
+
492
+ ```js
493
+ import Button from "../Button/Button";
494
+ <Table
495
+ searchID="firstName"
496
+ searchLabel="Search (first name)"
497
+ title="[Search] [Sort] [CustomActions] Table"
498
+ noPagination
499
+ CustomActions={() => <Button color="#02ac61">Custom Action</Button>}
500
+ columns={[
501
+ {
502
+ Header: "First Name",
503
+ accessor: "firstName",
504
+ },
505
+ {
506
+ Header: "Last Name",
507
+ accessor: "lastName",
508
+ },
509
+ ]}
510
+ data={[
511
+ {
512
+ _id: 0,
513
+ firstName: "John",
514
+ lastName: "Doe",
515
+ },
516
+ {
517
+ _id: 1,
518
+ firstName: "Jane",
519
+ lastName: "Doe",
520
+ },
521
+ ]}
522
+ />;
523
+ ```
524
+
525
+ ```js
526
+ import Button from "../Button/Button";
527
+ <Table
528
+ searchID="firstName"
529
+ searchLabel="Search (first name)"
530
+ title="[Search] [Sort] [CustomActions] [CustomPrimaryActions] Table"
531
+ noPagination
532
+ CustomActions={() => <Button color="#02ac61">Custom Action</Button>}
533
+ CustomPrimaryActions={() => (
534
+ <Button color="#02ac61">Custom Primary Action</Button>
535
+ )}
536
+ columns={[
537
+ {
538
+ Header: "First Name",
539
+ accessor: "firstName",
540
+ },
541
+ {
542
+ Header: "Last Name",
543
+ accessor: "lastName",
544
+ },
545
+ ]}
546
+ data={[
547
+ {
548
+ _id: 0,
549
+ firstName: "John",
550
+ lastName: "Doe",
551
+ },
552
+ {
553
+ _id: 1,
554
+ firstName: "Jane",
555
+ lastName: "Doe",
556
+ },
557
+ ]}
558
+ />;
559
+ ```
560
+
561
+ ```js
562
+ import Button from "../Button/Button";
563
+ <div style={{ display: "flex" }}>
564
+ <div style={{ width: "300px" }}>
565
+ <Table
566
+ searchID="firstName"
567
+ searchLabel="Search (first name)"
568
+ title="[Search] [Sort] Limited width table"
569
+ noPagination
570
+ columns={[
571
+ {
572
+ Header: "First Name",
573
+ accessor: "firstName",
574
+ },
575
+ {
576
+ Header: "Last Name",
577
+ accessor: "lastName",
578
+ },
579
+ ]}
580
+ data={[
581
+ {
582
+ _id: 0,
583
+ firstName: "John",
584
+ lastName: "Doe",
585
+ },
586
+ {
587
+ _id: 1,
588
+ firstName: "Jane",
589
+ lastName: "Doe",
590
+ },
591
+ ]}
592
+ />
593
+ </div>
594
+ <div style={{ flex: 1, marginLeft: 10 }}>
595
+ <Table
596
+ searchID="firstName"
597
+ searchLabel="Search (first name)"
598
+ title="[Search] [Sort] [CustomActions] [CustomSelectedActions] [smallTableButtonDesign] Limited width table"
599
+ noPagination
600
+ smallTableButtonDesign
601
+ onSelectionChange={(selection) => console.log("selected", selection)}
602
+ CustomActions={() => <Button color="#02ac61">Custom Action</Button>}
603
+ CustomPrimaryActions={() => (
604
+ <>
605
+ <Button color="#02ac61" outlined style={{ marginRight: "8px" }}>
606
+ Thumb up
607
+ </Button>
608
+ <Button color="#02ac61" outlined style={{ marginRight: "8px" }}>
609
+ Thumb down
610
+ </Button>
611
+ </>
612
+ )}
613
+ onDelete={(items) => console.log("items", items)}
614
+ columns={[
615
+ {
616
+ Header: "First Name",
617
+ accessor: "firstName",
618
+ },
619
+ {
620
+ Header: "Last Name",
621
+ accessor: "lastName",
622
+ },
623
+ ]}
624
+ data={[
625
+ {
626
+ _id: 0,
627
+ firstName: "John",
628
+ lastName: "Doe",
629
+ },
630
+ {
631
+ _id: 1,
632
+ firstName: "Jane",
633
+ lastName: "Doe",
634
+ },
635
+ ]}
636
+ />
637
+ </div>
638
+ </div>;
639
+ ```
640
+
641
+ ```js
642
+ import Button from "../Button/Button";
643
+ <Table
644
+ searchID="firstName"
645
+ searchLabel="Search (first name)"
646
+ title="[Search] [Filterable] [CustomSelectedActions] [Sort] Table"
647
+ noPagination
648
+ filterable
649
+ color="#33b222"
650
+ iconButtonsHoverColor="#33b22219"
651
+ iconButtonsActiveColor="#33b22232"
652
+ onSelectionChange={(selection) => console.log("selected", selection)}
653
+ CustomSelectedActions={() => <Button color="#02ac61">Custom action</Button>}
654
+ columns={[
655
+ {
656
+ Header: "First Name",
657
+ accessor: "firstName",
658
+ },
659
+ {
660
+ Header: "Last Name",
661
+ accessor: "lastName",
662
+ },
663
+ ]}
664
+ data={[
665
+ {
666
+ _id: 0,
667
+ firstName: "John",
668
+ lastName: "Doe",
669
+ },
670
+ {
671
+ _id: 1,
672
+ firstName: "Jane",
673
+ lastName: "Doe",
674
+ },
675
+ ]}
676
+ />;
677
+ ```
678
+
679
+ ```js
680
+ <Table
681
+ title="[Pagination Default] [Search] [Sort] Table"
682
+ searchID="name"
683
+ color="#33b222"
684
+ buttonsHoverColor="#33b22219"
685
+ columns={[
686
+ {
687
+ Header: "Name",
688
+ accessor: "name",
689
+ },
690
+ {
691
+ Header: "Number",
692
+ accessor: "number",
693
+ isNumber: true,
694
+ },
695
+ ]}
696
+ data={[
697
+ {
698
+ name: "Apple",
699
+ number: "1",
700
+ },
701
+ {
702
+ name: "Orange",
703
+ number: "3",
704
+ },
705
+ {
706
+ name: "Pineapple",
707
+ number: "4",
708
+ },
709
+ {
710
+ name: "Mango",
711
+ number: "5",
712
+ },
713
+ {
714
+ name: "Passionfruit",
715
+ number: "5",
716
+ },
717
+ {
718
+ name: "Lemon",
719
+ number: "6",
720
+ },
721
+ {
722
+ name: "Lime",
723
+ number: "7",
724
+ },
725
+ {
726
+ name: "Watermelon",
727
+ number: "8",
728
+ },
729
+ ]}
730
+ />
731
+ ```
732
+
733
+ ```js
734
+ import Button from "../Button/Button";
735
+ import Input from "../Input/Input";
736
+ <Table
737
+ title="[Pagination Static] [Search] [Filter] [Select] [Sort] [Add] [Size] Table"
738
+ searchID="name"
739
+ onSelectionChange={(selection) => console.log("selected", selection)}
740
+ color="#33b222"
741
+ iconButtonsHoverColor="#33b22219"
742
+ iconButtonsActiveColor="#33b22232"
743
+ primaryButtonsHoverColor="#268519"
744
+ primaryButtonsActiveColor="#1F7015"
745
+ staticPageSize={5}
746
+ filterable
747
+ AddComponent={({ closeAddComponent }) => {
748
+ return (
749
+ <div style={{ display: "flex", alignItems: "center" }} color="#02ac61">
750
+ <Input />
751
+ <Button
752
+ onClick={closeAddComponent}
753
+ flat
754
+ style={{ marginLeft: 10 }}
755
+ color="#222"
756
+ >
757
+ Cancel
758
+ </Button>
759
+ <Button
760
+ onClick={() => {
761
+ alert("Added!");
762
+ closeAddComponent();
763
+ }}
764
+ style={{ marginLeft: 10 }}
765
+ color="#02ac61"
766
+ >
767
+ Add
768
+ </Button>
769
+ </div>
770
+ );
771
+ }}
772
+ columns={[
773
+ {
774
+ Header: "Name",
775
+ accessor: "name",
776
+ },
777
+ {
778
+ Header: "Num",
779
+ accessor: "number",
780
+ isNumber: true,
781
+ size: 80,
782
+ },
783
+ ]}
784
+ data={[
785
+ {
786
+ name: "Apple",
787
+ number: "1",
788
+ },
789
+ {
790
+ name: "Orange",
791
+ number: "3",
792
+ },
793
+ {
794
+ name: "Pineapple",
795
+ number: "4",
796
+ },
797
+ {
798
+ name: "Mango",
799
+ number: "5",
800
+ },
801
+ {
802
+ name: "Passionfruit",
803
+ number: "5",
804
+ },
805
+ {
806
+ name: "Lemon",
807
+ number: "6",
808
+ },
809
+ {
810
+ name: "Lime",
811
+ number: "7",
812
+ },
813
+ {
814
+ name: "Watermelon",
815
+ number: "8",
816
+ },
817
+ {
818
+ name: "Apple",
819
+ number: "1",
820
+ },
821
+ {
822
+ name: "Orange",
823
+ number: "3",
824
+ },
825
+ {
826
+ name: "Pineapple",
827
+ number: "4",
828
+ },
829
+ {
830
+ name: "Mango",
831
+ number: "5",
832
+ },
833
+ {
834
+ name: "Passionfruit",
835
+ number: "5",
836
+ },
837
+ {
838
+ name: "Lemon",
839
+ number: "6",
840
+ },
841
+ {
842
+ name: "Lime",
843
+ number: "7",
844
+ },
845
+ {
846
+ name: "Watermelon",
847
+ number: "8",
848
+ },
849
+ {
850
+ name: "Apple",
851
+ number: "1",
852
+ },
853
+ {
854
+ name: "Orange",
855
+ number: "3",
856
+ },
857
+ {
858
+ name: "Pineapple",
859
+ number: "4",
860
+ },
861
+ {
862
+ name: "Mango",
863
+ number: "5",
864
+ },
865
+ {
866
+ name: "Passionfruit",
867
+ number: "5",
868
+ },
869
+ {
870
+ name: "Lemon",
871
+ number: "6",
872
+ },
873
+ {
874
+ name: "Lime",
875
+ number: "7",
876
+ },
877
+ {
878
+ name: "Watermelon",
879
+ number: "8",
880
+ },
881
+ {
882
+ name: "Apple",
883
+ number: "1",
884
+ },
885
+ {
886
+ name: "Orange",
887
+ number: "3",
888
+ },
889
+ {
890
+ name: "Pineapple",
891
+ number: "4",
892
+ },
893
+ {
894
+ name: "Mango",
895
+ number: "5",
896
+ },
897
+ {
898
+ name: "Passionfruit",
899
+ number: "5",
900
+ },
901
+ {
902
+ name: "Lemon",
903
+ number: "6",
904
+ },
905
+ {
906
+ name: "Lime",
907
+ number: "7",
908
+ },
909
+ {
910
+ name: "Watermelon",
911
+ number: "8",
912
+ },
913
+ {
914
+ name: "Apple",
915
+ number: "1",
916
+ },
917
+ {
918
+ name: "Orange",
919
+ number: "3",
920
+ },
921
+ {
922
+ name: "Pineapple",
923
+ number: "4",
924
+ },
925
+ {
926
+ name: "Mango",
927
+ number: "5",
928
+ },
929
+ {
930
+ name: "Passionfruit",
931
+ number: "5",
932
+ },
933
+ ]}
934
+ />;
935
+ ```
936
+
937
+ ```js
938
+ import Button from "../Button/Button";
939
+ <Table
940
+ title="[Sort] [Filter] [CustomFilterButton] Table"
941
+ color="#33b222"
942
+ buttonsHoverColor="#33b22219"
943
+ filterable
944
+ CustomFilterButton={(props) => (
945
+ <Button color="#33b222" onClick={props.onClick}>
946
+ Custom Filter Button
947
+ </Button>
948
+ )}
949
+ columns={[
950
+ {
951
+ Header: "Name",
952
+ accessor: "name",
953
+ disableFilters: true,
954
+ },
955
+ {
956
+ Header: "Num",
957
+ accessor: "number",
958
+ isNumber: true,
959
+ size: 80,
960
+ },
961
+ ]}
962
+ data={[
963
+ {
964
+ name: "Apple",
965
+ number: "1",
966
+ },
967
+ {
968
+ name: "Orange",
969
+ number: "3",
970
+ },
971
+ {
972
+ name: "Pineapple",
973
+ number: "4",
974
+ },
975
+ {
976
+ name: "Mango",
977
+ number: "5",
978
+ },
979
+ {
980
+ name: "Passionfruit",
981
+ number: "5",
982
+ },
983
+ {
984
+ name: "Lemon",
985
+ number: "6",
986
+ },
987
+ {
988
+ name: "Lime",
989
+ number: "7",
990
+ },
991
+ {
992
+ name: "Watermelon",
993
+ number: "8",
994
+ },
995
+ {
996
+ name: "Apple",
997
+ number: "1",
998
+ },
999
+ {
1000
+ name: "Orange",
1001
+ number: "3",
1002
+ },
1003
+ {
1004
+ name: "Pineapple",
1005
+ number: "4",
1006
+ },
1007
+ {
1008
+ name: "Mango",
1009
+ number: "5",
1010
+ },
1011
+ {
1012
+ name: "Passionfruit",
1013
+ number: "5",
1014
+ },
1015
+ {
1016
+ name: "Lemon",
1017
+ number: "6",
1018
+ },
1019
+ {
1020
+ name: "Lime",
1021
+ number: "7",
1022
+ },
1023
+ {
1024
+ name: "Watermelon",
1025
+ number: "8",
1026
+ },
1027
+ {
1028
+ name: "Apple",
1029
+ number: "1",
1030
+ },
1031
+ {
1032
+ name: "Orange",
1033
+ number: "3",
1034
+ },
1035
+ {
1036
+ name: "Pineapple",
1037
+ number: "4",
1038
+ },
1039
+ {
1040
+ name: "Mango",
1041
+ number: "5",
1042
+ },
1043
+ {
1044
+ name: "Passionfruit",
1045
+ number: "5",
1046
+ },
1047
+ {
1048
+ name: "Lemon",
1049
+ number: "6",
1050
+ },
1051
+ {
1052
+ name: "Lime",
1053
+ number: "7",
1054
+ },
1055
+ {
1056
+ name: "Watermelon",
1057
+ number: "8",
1058
+ },
1059
+ {
1060
+ name: "Apple",
1061
+ number: "1",
1062
+ },
1063
+ {
1064
+ name: "Orange",
1065
+ number: "3",
1066
+ },
1067
+ {
1068
+ name: "Pineapple",
1069
+ number: "4",
1070
+ },
1071
+ {
1072
+ name: "Mango",
1073
+ number: "5",
1074
+ },
1075
+ {
1076
+ name: "Passionfruit",
1077
+ number: "5",
1078
+ },
1079
+ {
1080
+ name: "Lemon",
1081
+ number: "6",
1082
+ },
1083
+ {
1084
+ name: "Lime",
1085
+ number: "7",
1086
+ },
1087
+ {
1088
+ name: "Watermelon",
1089
+ number: "8",
1090
+ },
1091
+ {
1092
+ name: "Apple",
1093
+ number: "1",
1094
+ },
1095
+ {
1096
+ name: "Orange",
1097
+ number: "3",
1098
+ },
1099
+ {
1100
+ name: "Pineapple",
1101
+ number: "4",
1102
+ },
1103
+ {
1104
+ name: "Mango",
1105
+ number: "5",
1106
+ },
1107
+ {
1108
+ name: "Passionfruit",
1109
+ number: "5",
1110
+ },
1111
+ ]}
1112
+ />;
1113
+ ```
1114
+
1115
+ ```js
1116
+ import Button from "../Button/Button";
1117
+ import Input from "../Input/Input";
1118
+ import Typography from "../Typography/Typography";
1119
+ <Table
1120
+ title="[Add] [CustomHeader] [Delete] [Expand] Table"
1121
+ sortable={false}
1122
+ onSelectionChange={(selection) => console.log("selected", selection)}
1123
+ onDelete={() => {}}
1124
+ CustomHeaderComponent={() => {
1125
+ return (
1126
+ <div>
1127
+ <Typography size="h1">Custom header</Typography>
1128
+ </div>
1129
+ );
1130
+ }}
1131
+ AddComponent={({ closeAddComponent }) => {
1132
+ return (
1133
+ <div style={{ display: "flex", alignItems: "center" }} color="#02ac61">
1134
+ <Input />
1135
+ <Button
1136
+ onClick={closeAddComponent}
1137
+ flat
1138
+ style={{ marginLeft: 10 }}
1139
+ color="#222"
1140
+ >
1141
+ Cancel
1142
+ </Button>
1143
+ <Button
1144
+ onClick={() => {
1145
+ alert("Added!");
1146
+ closeAddComponent();
1147
+ }}
1148
+ style={{ marginLeft: 10 }}
1149
+ color="#02ac61"
1150
+ >
1151
+ Add
1152
+ </Button>
1153
+ </div>
1154
+ );
1155
+ }}
1156
+ rowSubComponent={({ row }) => (
1157
+ <pre
1158
+ style={{
1159
+ fontSize: "10px",
1160
+ }}
1161
+ >
1162
+ <code>{JSON.stringify({ values: row.values }, null, 2)}</code>
1163
+ </pre>
1164
+ )}
1165
+ columns={[
1166
+ {
1167
+ Header: "Name",
1168
+ accessor: "name",
1169
+ },
1170
+ {
1171
+ Header: "Info",
1172
+ accessor: "info",
1173
+ },
1174
+ ]}
1175
+ data={[
1176
+ {
1177
+ name: "Test",
1178
+ info: "Hello",
1179
+ _id: 1,
1180
+ },
1181
+ {
1182
+ name: "Bob",
1183
+ info: "32904",
1184
+ _id: 2,
1185
+ },
1186
+ ]}
1187
+ />;
1188
+ ```
1189
+
1190
+ ```js
1191
+ <Table
1192
+ title="[Editable] [DeleteColumn] Table"
1193
+ sortable={false}
1194
+ onDelete={(selection) => console.log("delete", selection)}
1195
+ showDeleteColumn
1196
+ rowSubComponentEditMode
1197
+ rowSubComponent={({ row }) => (
1198
+ <pre
1199
+ style={{
1200
+ fontSize: "10px",
1201
+ }}
1202
+ >
1203
+ <code>{JSON.stringify({ values: row.values }, null, 2)}</code>
1204
+ </pre>
1205
+ )}
1206
+ columns={[
1207
+ {
1208
+ Header: "Name",
1209
+ accessor: "name",
1210
+ },
1211
+ {
1212
+ Header: "Info",
1213
+ accessor: "info",
1214
+ },
1215
+ ]}
1216
+ data={[
1217
+ {
1218
+ name: "Test",
1219
+ info: "Hello",
1220
+ },
1221
+ {
1222
+ name: "Bob",
1223
+ info: "32904",
1224
+ },
1225
+ ]}
1226
+ />
1227
+ ```
1228
+
1229
+ ```js
1230
+ <Table
1231
+ title="[Editable] Table"
1232
+ sortable={false}
1233
+ rowSubComponentEditMode
1234
+ rowSubComponent={({ row }) => (
1235
+ <pre
1236
+ style={{
1237
+ fontSize: "10px",
1238
+ }}
1239
+ >
1240
+ <code>{JSON.stringify({ values: row.values }, null, 2)}</code>
1241
+ </pre>
1242
+ )}
1243
+ columns={[
1244
+ {
1245
+ Header: "Name",
1246
+ accessor: "name",
1247
+ },
1248
+ {
1249
+ Header: "Info",
1250
+ accessor: "info",
1251
+ },
1252
+ ]}
1253
+ data={[
1254
+ {
1255
+ name: "Test",
1256
+ info: "Hello",
1257
+ },
1258
+ {
1259
+ name: "Bob",
1260
+ info: "32904",
1261
+ },
1262
+ ]}
1263
+ />
1264
+ ```
1265
+
1266
+ ```js
1267
+ <Table
1268
+ title="[Editable] [customOnEdit] Table"
1269
+ sortable={false}
1270
+ customOnEdit={() => alert("[Editable] [customOnEdit] Table: customOnEdit")}
1271
+ rowSubComponentEditMode
1272
+ rowSubComponent={({ row }) => (
1273
+ <pre
1274
+ style={{
1275
+ fontSize: "10px",
1276
+ }}
1277
+ >
1278
+ <code>{JSON.stringify({ values: row.values }, null, 2)}</code>
1279
+ </pre>
1280
+ )}
1281
+ columns={[
1282
+ {
1283
+ Header: "Custom",
1284
+ accessor: "name",
1285
+ },
1286
+ {
1287
+ Header: "Edit",
1288
+ accessor: "info",
1289
+ },
1290
+ ]}
1291
+ data={[
1292
+ {
1293
+ name: "Test",
1294
+ info: "Hello",
1295
+ },
1296
+ {
1297
+ name: "Bob",
1298
+ info: "32904",
1299
+ },
1300
+ ]}
1301
+ />
1302
+ ```
1303
+
1304
+ ```js
1305
+ <Table
1306
+ title="[Spaced Rows] Table (10px default)"
1307
+ sortable={false}
1308
+ rowSpacing
1309
+ columns={[
1310
+ {
1311
+ Header: "Name",
1312
+ accessor: "name",
1313
+ },
1314
+ {
1315
+ Header: "Info",
1316
+ accessor: "info",
1317
+ },
1318
+ ]}
1319
+ data={[
1320
+ {
1321
+ name: "Test",
1322
+ info: "Hello",
1323
+ },
1324
+ {
1325
+ name: "Bob",
1326
+ info: "32904",
1327
+ },
1328
+ ]}
1329
+ />
1330
+ ```
1331
+
1332
+ ```js
1333
+ <Table
1334
+ title="[Spaced Rows] Table (20px example)"
1335
+ sortable={false}
1336
+ rowSpacing={20}
1337
+ columns={[
1338
+ {
1339
+ Header: "Name",
1340
+ accessor: "name",
1341
+ },
1342
+ {
1343
+ Header: "Info",
1344
+ accessor: "info",
1345
+ },
1346
+ ]}
1347
+ data={[
1348
+ {
1349
+ name: "Test",
1350
+ info: "Hello",
1351
+ },
1352
+ {
1353
+ name: "Bob",
1354
+ info: "32904",
1355
+ },
1356
+ ]}
1357
+ />
1358
+ ```
1359
+
1360
+ ```js
1361
+ <Table
1362
+ title="[Sortable Rows] Table"
1363
+ sortableRows
1364
+ columns={[
1365
+ {
1366
+ Header: "Name",
1367
+ accessor: "name",
1368
+ },
1369
+ {
1370
+ Header: "Info",
1371
+ accessor: "info",
1372
+ },
1373
+ ]}
1374
+ data={[
1375
+ {
1376
+ name: "Row 1",
1377
+ info: "Hello",
1378
+ },
1379
+ {
1380
+ name: "Row 2",
1381
+ info: "lalalal",
1382
+ },
1383
+ {
1384
+ name: "Row 3",
1385
+ info: "waaasssup",
1386
+ },
1387
+ ]}
1388
+ />
1389
+ ```
1390
+
1391
+ ```js
1392
+ <Table
1393
+ title="[Sortable Rows] [onSort - custom function] [rowSpacing] Table"
1394
+ sortableRows
1395
+ onSort={() => {
1396
+ alert("custom sorting function - could include api call");
1397
+ }}
1398
+ rowSpacing
1399
+ columns={[
1400
+ {
1401
+ Header: "Name",
1402
+ accessor: "name",
1403
+ },
1404
+ {
1405
+ Header: "Info",
1406
+ accessor: "info",
1407
+ },
1408
+ ]}
1409
+ data={[
1410
+ {
1411
+ name: "Row 1",
1412
+ info: "Hello",
1413
+ },
1414
+ {
1415
+ name: "Row 2",
1416
+ info: "lalalal",
1417
+ },
1418
+ {
1419
+ name: "Row 3",
1420
+ info: "waaasssup",
1421
+ },
1422
+ ]}
1423
+ />
1424
+ ```
1425
+
1426
+ ```js
1427
+ <Table
1428
+ title="[onRowsLengthChange - custom function] Table"
1429
+ searchID="name"
1430
+ searchLabel="Search customer"
1431
+ inputProps={{ color: "#02ac61" }}
1432
+ onRowsLengthChange={(rowsLength) => console.log(rowsLength)}
1433
+ columns={[
1434
+ {
1435
+ Header: "Name",
1436
+ accessor: "name",
1437
+ },
1438
+ {
1439
+ Header: "Info",
1440
+ accessor: "info",
1441
+ },
1442
+ ]}
1443
+ data={[
1444
+ {
1445
+ name: "John",
1446
+ info: "Active",
1447
+ },
1448
+ {
1449
+ name: "Mary",
1450
+ info: "Inactive",
1451
+ },
1452
+ {
1453
+ name: "Susan",
1454
+ info: "Active",
1455
+ },
1456
+ ]}
1457
+ />
1458
+ ```
1459
+
1460
+ ```js
1461
+ <Table
1462
+ title="[xOverflow - first column width = 200px] Table."
1463
+ xOverflow={200}
1464
+ noPadding
1465
+ columns={[
1466
+ {
1467
+ Header: "Name",
1468
+ accessor: "name",
1469
+ },
1470
+ {
1471
+ Header: "Info",
1472
+ accessor: "info",
1473
+ },
1474
+ {
1475
+ Header: "Age",
1476
+ accessor: "age",
1477
+ },
1478
+ {
1479
+ Header: "Date of birth",
1480
+ accessor: "dob",
1481
+ size: 140,
1482
+ },
1483
+ {
1484
+ Header: "Place of birth",
1485
+ accessor: "place",
1486
+ size: 160,
1487
+ },
1488
+ {
1489
+ Header: "Email",
1490
+ accessor: "email",
1491
+ size: 250,
1492
+ },
1493
+ {
1494
+ Header: "Music",
1495
+ accessor: "music",
1496
+ size: 200,
1497
+ },
1498
+ ]}
1499
+ data={[
1500
+ {
1501
+ name: "John",
1502
+ info: "Active",
1503
+ age: 23,
1504
+ dob: "11/04/1997",
1505
+ place: "Redditch, U.K.",
1506
+ email: "john23@hotmail.com",
1507
+ music: "rock",
1508
+ },
1509
+ {
1510
+ name: "Mary",
1511
+ info: "Inactive",
1512
+ age: 43,
1513
+ dob: "18/03/1977",
1514
+ place: "",
1515
+ email: "contrary-mary@gmail.com",
1516
+ music: "folk",
1517
+ },
1518
+ {
1519
+ name: "Susan",
1520
+ info: "Active",
1521
+ age: 35,
1522
+ dob: "13/12/1984",
1523
+ place: "Detriot, U.S.A.",
1524
+ email: "susie-q@gmail.co.uk",
1525
+ music: "Jazz / funk",
1526
+ },
1527
+ {
1528
+ name: "Jane",
1529
+ info: "Active",
1530
+ age: 17,
1531
+ dob: "27/11/2002",
1532
+ place: "Brixton, London, U.K.",
1533
+ email: "janejaney@live.com",
1534
+ music: "rock",
1535
+ },
1536
+ {
1537
+ name: "Englebert",
1538
+ info: "Active",
1539
+ age: 73,
1540
+ dob: "16/02/1947",
1541
+ place: "Madras, India",
1542
+ email: "mr_humperdinck@.whatever.com",
1543
+ music: "ballroom",
1544
+ },
1545
+ {
1546
+ name: "Eileen",
1547
+ info: "Inactive",
1548
+ age: 83,
1549
+ dob: "03/01/1937",
1550
+ place: "Birmingham, U.K.",
1551
+ email: "comeon@.midnightrunners.com",
1552
+ music: "popular",
1553
+ },
1554
+ {
1555
+ name: "Dave",
1556
+ info: "Inactive",
1557
+ age: 32,
1558
+ dob: "03/02/1988",
1559
+ place: "Slough, U.K.",
1560
+ email: "niceoned@.ve.co.uk",
1561
+ music: "speed garage",
1562
+ },
1563
+ {
1564
+ name: "John",
1565
+ info: "Active",
1566
+ age: 23,
1567
+ dob: "11/04/1997",
1568
+ place: "Redditch, U.K.",
1569
+ email: "john23@hotmail.com",
1570
+ music: "rock",
1571
+ },
1572
+ {
1573
+ name: "Mary",
1574
+ info: "Inactive",
1575
+ age: 43,
1576
+ dob: "18/03/1977",
1577
+ place: "",
1578
+ email: "contrary-mary@gmail.com",
1579
+ music: "folk",
1580
+ },
1581
+ {
1582
+ name: "Susan",
1583
+ info: "Active",
1584
+ age: 35,
1585
+ dob: "13/12/1984",
1586
+ place: "Detriot, U.S.A.",
1587
+ email: "susie-q@gmail.co.uk",
1588
+ music: "Jazz / funk",
1589
+ },
1590
+ {
1591
+ name: "Jane",
1592
+ info: "Active",
1593
+ age: 17,
1594
+ dob: "27/11/2002",
1595
+ place: "Brixton, London, U.K.",
1596
+ email: "janejaney@live.com",
1597
+ music: "rock",
1598
+ },
1599
+ {
1600
+ name: "Englebert",
1601
+ info: "Active",
1602
+ age: 73,
1603
+ dob: "16/02/1947",
1604
+ place: "Madras, India",
1605
+ email: "mr_humperdinck@.whatever.com",
1606
+ music: "ballroom",
1607
+ },
1608
+ {
1609
+ name: "Eileen",
1610
+ info: "Inactive",
1611
+ age: 83,
1612
+ dob: "03/01/1937",
1613
+ place: "Birmingham, U.K.",
1614
+ email: "comeon@.midnightrunners.com",
1615
+ music: "popular",
1616
+ },
1617
+ {
1618
+ name: "Dave",
1619
+ info: "Inactive",
1620
+ age: 32,
1621
+ dob: "03/02/1988",
1622
+ place: "Slough, U.K.",
1623
+ email: "niceoned@.ve.co.uk",
1624
+ music: "speed garage",
1625
+ },
1626
+ {
1627
+ name: "John",
1628
+ info: "Active",
1629
+ age: 23,
1630
+ dob: "11/04/1997",
1631
+ place: "Redditch, U.K.",
1632
+ email: "john23@hotmail.com",
1633
+ music: "rock",
1634
+ },
1635
+ {
1636
+ name: "Mary",
1637
+ info: "Inactive",
1638
+ age: 43,
1639
+ dob: "18/03/1977",
1640
+ place: "",
1641
+ email: "contrary-mary@gmail.com",
1642
+ music: "folk",
1643
+ },
1644
+ {
1645
+ name: "Susan",
1646
+ info: "Active",
1647
+ age: 35,
1648
+ dob: "13/12/1984",
1649
+ place: "Detriot, U.S.A.",
1650
+ email: "susie-q@gmail.co.uk",
1651
+ music: "Jazz / funk",
1652
+ },
1653
+ {
1654
+ name: "Jane",
1655
+ info: "Active",
1656
+ age: 17,
1657
+ dob: "27/11/2002",
1658
+ place: "Brixton, London, U.K.",
1659
+ email: "janejaney@live.com",
1660
+ music: "rock",
1661
+ },
1662
+ {
1663
+ name: "Englebert",
1664
+ info: "Active",
1665
+ age: 73,
1666
+ dob: "16/02/1947",
1667
+ place: "Madras, India",
1668
+ email: "mr_humperdinck@.whatever.com",
1669
+ music: "ballroom",
1670
+ },
1671
+ {
1672
+ name: "Eileen",
1673
+ info: "Inactive",
1674
+ age: 83,
1675
+ dob: "03/01/1937",
1676
+ place: "Birmingham, U.K.",
1677
+ email: "comeon@.midnightrunners.com",
1678
+ music: "popular",
1679
+ },
1680
+ {
1681
+ name: "Dave",
1682
+ info: "Inactive",
1683
+ age: 32,
1684
+ dob: "03/02/1988",
1685
+ place: "Slough, U.K.",
1686
+ email: "niceoned@.ve.co.uk",
1687
+ music: "speed garage",
1688
+ },
1689
+ ]}
1690
+ />
1691
+ ```
1692
+
1693
+ ```js
1694
+ <Table
1695
+ title="[sortType] - sort by property on cell accessor"
1696
+ columns={[
1697
+ {
1698
+ Header: "First name",
1699
+ accessor: "firstName",
1700
+ },
1701
+ {
1702
+ Header: "Last name",
1703
+ accessor: "lastName",
1704
+ },
1705
+ {
1706
+ Header: "Stats",
1707
+ accessor: "stats",
1708
+ sortType: (a, b) => {
1709
+ if (a.original.stats.average === b.original.stats.average) {
1710
+ return a > b ? 1 : -1;
1711
+ }
1712
+ return a.original.stats.average > b.original.stats.average ? 1 : -1;
1713
+ },
1714
+ Cell: ({ cell, value }) => {
1715
+ return <span>{value.average}</span>;
1716
+ },
1717
+ },
1718
+ ]}
1719
+ data={[
1720
+ {
1721
+ firstName: "John",
1722
+ lastName: "Doe",
1723
+ stats: {
1724
+ average: "50%",
1725
+ numbers: [50, 100, 0],
1726
+ },
1727
+ },
1728
+ {
1729
+ firstName: "Jane",
1730
+ lastName: "Doe",
1731
+ stats: {
1732
+ average: "80%",
1733
+ numbers: [60, 100, 80],
1734
+ },
1735
+ },
1736
+ {
1737
+ firstName: "James",
1738
+ lastName: "Doe",
1739
+ stats: {
1740
+ average: "40%",
1741
+ numbers: [80, 30, 10],
1742
+ },
1743
+ },
1744
+ ]}
1745
+ />
1746
+ ```
1747
+
1748
+ ```js
1749
+ import Button from "../Button/Button";
1750
+ import Input from "../Input/Input";
1751
+ import Typography from "../Typography/Typography";
1752
+
1753
+ const [data, setData] = React.useState([
1754
+ {
1755
+ name: "Test",
1756
+ info: "Hello",
1757
+ _id: 1,
1758
+ },
1759
+ {
1760
+ name: "Bob",
1761
+ info: "32904",
1762
+ _id: 2,
1763
+ },
1764
+ ]);
1765
+
1766
+ const addUser = () =>
1767
+ setData((currentData) => [
1768
+ ...currentData,
1769
+ { name: "Frank", info: "Recently added", _id: currentData.length + 1 },
1770
+ ]);
1771
+
1772
+ <Table
1773
+ title="[Add] [CustomAction] [Delete] [Dynamic data] Table"
1774
+ sortable={false}
1775
+ onSelectionChange={(selection) => console.log("selected", selection)}
1776
+ onDelete={(ids) =>
1777
+ setData((currentData) => currentData.filter((i) => !ids.includes(i._id)))
1778
+ }
1779
+ showDeleteColumn
1780
+ CustomPrimaryActions={() => (
1781
+ <Button onClick={addUser} lat style={{ marginRight: 8 }} color="#222">
1782
+ Add new user
1783
+ </Button>
1784
+ )}
1785
+ CustomHeaderComponent={() => {
1786
+ return (
1787
+ <div>
1788
+ <Typography size="h1">Custom header</Typography>
1789
+ </div>
1790
+ );
1791
+ }}
1792
+ AddComponent={({ closeAddComponent }) => {
1793
+ return (
1794
+ <div style={{ display: "flex", alignItems: "center" }} color="#02ac61">
1795
+ <Input />
1796
+ <Button
1797
+ onClick={closeAddComponent}
1798
+ flat
1799
+ style={{ marginLeft: 10 }}
1800
+ color="#222"
1801
+ >
1802
+ Cancel
1803
+ </Button>
1804
+ <Button
1805
+ onClick={() => {
1806
+ addUser();
1807
+ closeAddComponent();
1808
+ }}
1809
+ style={{ marginLeft: 10 }}
1810
+ color="#02ac61"
1811
+ >
1812
+ Add
1813
+ </Button>
1814
+ </div>
1815
+ );
1816
+ }}
1817
+ rowSubComponent={({ row }) => (
1818
+ <pre
1819
+ style={{
1820
+ fontSize: "10px",
1821
+ }}
1822
+ >
1823
+ <code>{JSON.stringify({ values: row.values }, null, 2)}</code>
1824
+ </pre>
1825
+ )}
1826
+ columns={[
1827
+ {
1828
+ Header: "Name",
1829
+ accessor: "name",
1830
+ },
1831
+ {
1832
+ Header: "Info",
1833
+ accessor: "info",
1834
+ },
1835
+ ]}
1836
+ data={data}
1837
+ />;
1838
+ ```
1839
+
1840
+ ```js
1841
+ const [pageIndex, setPageIndex] = React.useState(0);
1842
+
1843
+ const onPreviousPage = (page) => {
1844
+ setPageIndex(page);
1845
+ };
1846
+
1847
+ const onNextPage = (page) => {
1848
+ setPageIndex(page);
1849
+ };
1850
+
1851
+ return (
1852
+ <Table
1853
+ gotoPageIndex={pageIndex}
1854
+ onPreviousPage={onPreviousPage}
1855
+ onNextPage={onNextPage}
1856
+ title="[gotoPageIndex] - Control page index manually"
1857
+ columns={[
1858
+ {
1859
+ Header: "Name",
1860
+ accessor: "name",
1861
+ },
1862
+ {
1863
+ Header: "Num",
1864
+ accessor: "number",
1865
+ isNumber: true,
1866
+ size: 80,
1867
+ },
1868
+ ]}
1869
+ data={[
1870
+ {
1871
+ name: "Apple",
1872
+ number: "1",
1873
+ },
1874
+ {
1875
+ name: "Orange",
1876
+ number: "3",
1877
+ },
1878
+ {
1879
+ name: "Pineapple",
1880
+ number: "4",
1881
+ },
1882
+ {
1883
+ name: "Mango",
1884
+ number: "5",
1885
+ },
1886
+ {
1887
+ name: "Passionfruit",
1888
+ number: "5",
1889
+ },
1890
+ {
1891
+ name: "Lemon",
1892
+ number: "6",
1893
+ },
1894
+ {
1895
+ name: "Lime",
1896
+ number: "7",
1897
+ },
1898
+ {
1899
+ name: "Watermelon",
1900
+ number: "8",
1901
+ },
1902
+ {
1903
+ name: "Apple",
1904
+ number: "1",
1905
+ },
1906
+ {
1907
+ name: "Orange",
1908
+ number: "3",
1909
+ },
1910
+ {
1911
+ name: "Pineapple",
1912
+ number: "4",
1913
+ },
1914
+ {
1915
+ name: "Mango",
1916
+ number: "5",
1917
+ },
1918
+ {
1919
+ name: "Passionfruit",
1920
+ number: "5",
1921
+ },
1922
+ {
1923
+ name: "Lemon",
1924
+ number: "6",
1925
+ },
1926
+ {
1927
+ name: "Lime",
1928
+ number: "7",
1929
+ },
1930
+ {
1931
+ name: "Watermelon",
1932
+ number: "8",
1933
+ },
1934
+ {
1935
+ name: "Apple",
1936
+ number: "1",
1937
+ },
1938
+ {
1939
+ name: "Orange",
1940
+ number: "3",
1941
+ },
1942
+ {
1943
+ name: "Pineapple",
1944
+ number: "4",
1945
+ },
1946
+ {
1947
+ name: "Mango",
1948
+ number: "5",
1949
+ },
1950
+ {
1951
+ name: "Passionfruit",
1952
+ number: "5",
1953
+ },
1954
+ {
1955
+ name: "Lemon",
1956
+ number: "6",
1957
+ },
1958
+ {
1959
+ name: "Lime",
1960
+ number: "7",
1961
+ },
1962
+ {
1963
+ name: "Watermelon",
1964
+ number: "8",
1965
+ },
1966
+ {
1967
+ name: "Apple",
1968
+ number: "1",
1969
+ },
1970
+ {
1971
+ name: "Orange",
1972
+ number: "3",
1973
+ },
1974
+ {
1975
+ name: "Pineapple",
1976
+ number: "4",
1977
+ },
1978
+ {
1979
+ name: "Mango",
1980
+ number: "5",
1981
+ },
1982
+ {
1983
+ name: "Passionfruit",
1984
+ number: "5",
1985
+ },
1986
+ {
1987
+ name: "Lemon",
1988
+ number: "6",
1989
+ },
1990
+ {
1991
+ name: "Lime",
1992
+ number: "7",
1993
+ },
1994
+ {
1995
+ name: "Watermelon",
1996
+ number: "8",
1997
+ },
1998
+ {
1999
+ name: "Apple",
2000
+ number: "1",
2001
+ },
2002
+ {
2003
+ name: "Orange",
2004
+ number: "3",
2005
+ },
2006
+ {
2007
+ name: "Pineapple",
2008
+ number: "4",
2009
+ },
2010
+ {
2011
+ name: "Mango",
2012
+ number: "5",
2013
+ },
2014
+ {
2015
+ name: "Passionfruit",
2016
+ number: "5",
2017
+ },
2018
+ ]}
2019
+ />
2020
+ );
2021
+ ```
2022
+
2023
+ ```js
2024
+ <Table
2025
+ onVisibleRowsChange={(r) => console.log("visible rows", r)}
2026
+ title="[onVisibleRowsChange] Table"
2027
+ columns={[
2028
+ {
2029
+ Header: "Name",
2030
+ accessor: "name",
2031
+ },
2032
+ {
2033
+ Header: "Num",
2034
+ accessor: "number",
2035
+ isNumber: true,
2036
+ size: 80,
2037
+ },
2038
+ ]}
2039
+ data={[
2040
+ {
2041
+ name: "Apple",
2042
+ number: "1",
2043
+ },
2044
+ {
2045
+ name: "Orange",
2046
+ number: "3",
2047
+ },
2048
+ {
2049
+ name: "Pineapple",
2050
+ number: "4",
2051
+ },
2052
+ {
2053
+ name: "Mango",
2054
+ number: "5",
2055
+ },
2056
+ {
2057
+ name: "Passionfruit",
2058
+ number: "5",
2059
+ },
2060
+ {
2061
+ name: "Lemon",
2062
+ number: "6",
2063
+ },
2064
+ {
2065
+ name: "Lime",
2066
+ number: "7",
2067
+ },
2068
+ {
2069
+ name: "Watermelon",
2070
+ number: "8",
2071
+ },
2072
+ {
2073
+ name: "Apple",
2074
+ number: "1",
2075
+ },
2076
+ {
2077
+ name: "Orange",
2078
+ number: "3",
2079
+ },
2080
+ {
2081
+ name: "Pineapple",
2082
+ number: "4",
2083
+ },
2084
+ {
2085
+ name: "Mango",
2086
+ number: "5",
2087
+ },
2088
+ {
2089
+ name: "Passionfruit",
2090
+ number: "5",
2091
+ },
2092
+ {
2093
+ name: "Lemon",
2094
+ number: "6",
2095
+ },
2096
+ {
2097
+ name: "Lime",
2098
+ number: "7",
2099
+ },
2100
+ {
2101
+ name: "Watermelon",
2102
+ number: "8",
2103
+ },
2104
+ {
2105
+ name: "Apple",
2106
+ number: "1",
2107
+ },
2108
+ {
2109
+ name: "Orange",
2110
+ number: "3",
2111
+ },
2112
+ {
2113
+ name: "Pineapple",
2114
+ number: "4",
2115
+ },
2116
+ {
2117
+ name: "Mango",
2118
+ number: "5",
2119
+ },
2120
+ {
2121
+ name: "Passionfruit",
2122
+ number: "5",
2123
+ },
2124
+ {
2125
+ name: "Lemon",
2126
+ number: "6",
2127
+ },
2128
+ {
2129
+ name: "Lime",
2130
+ number: "7",
2131
+ },
2132
+ {
2133
+ name: "Watermelon",
2134
+ number: "8",
2135
+ },
2136
+ {
2137
+ name: "Apple",
2138
+ number: "1",
2139
+ },
2140
+ {
2141
+ name: "Orange",
2142
+ number: "3",
2143
+ },
2144
+ {
2145
+ name: "Pineapple",
2146
+ number: "4",
2147
+ },
2148
+ {
2149
+ name: "Mango",
2150
+ number: "5",
2151
+ },
2152
+ {
2153
+ name: "Passionfruit",
2154
+ number: "5",
2155
+ },
2156
+ {
2157
+ name: "Lemon",
2158
+ number: "6",
2159
+ },
2160
+ {
2161
+ name: "Lime",
2162
+ number: "7",
2163
+ },
2164
+ {
2165
+ name: "Watermelon",
2166
+ number: "8",
2167
+ },
2168
+ {
2169
+ name: "Apple",
2170
+ number: "1",
2171
+ },
2172
+ {
2173
+ name: "Orange",
2174
+ number: "3",
2175
+ },
2176
+ {
2177
+ name: "Pineapple",
2178
+ number: "4",
2179
+ },
2180
+ {
2181
+ name: "Mango",
2182
+ number: "5",
2183
+ },
2184
+ {
2185
+ name: "Passionfruit",
2186
+ number: "5",
2187
+ },
2188
+ ]}
2189
+ />
2190
+ ```