@teselagen/ui 0.0.11 → 0.0.13

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 (125) hide show
  1. package/README.md +7 -0
  2. package/cypress.config.ts +6 -0
  3. package/index.html +12 -0
  4. package/package.json +5 -11
  5. package/project.json +74 -0
  6. package/src/AdvancedOptions.js +33 -0
  7. package/src/AdvancedOptions.spec.js +24 -0
  8. package/src/AssignDefaultsModeContext.js +21 -0
  9. package/src/AsyncValidateFieldSpinner/index.js +12 -0
  10. package/src/BlueprintError/index.js +14 -0
  11. package/src/BounceLoader/index.js +16 -0
  12. package/src/BounceLoader/style.css +45 -0
  13. package/src/CollapsibleCard/index.js +92 -0
  14. package/src/CollapsibleCard/style.css +21 -0
  15. package/src/DNALoader/index.js +20 -0
  16. package/src/DNALoader/style.css +251 -0
  17. package/src/DataTable/CellDragHandle.js +130 -0
  18. package/src/DataTable/DisabledLoadingComponent.js +15 -0
  19. package/src/DataTable/DisplayOptions.js +218 -0
  20. package/src/DataTable/FilterAndSortMenu.js +397 -0
  21. package/src/DataTable/PagingTool.js +232 -0
  22. package/src/DataTable/SearchBar.js +57 -0
  23. package/src/DataTable/SortableColumns.js +53 -0
  24. package/src/DataTable/TableFormTrackerContext.js +10 -0
  25. package/src/DataTable/dataTableEnhancer.js +291 -0
  26. package/src/DataTable/defaultFormatters.js +32 -0
  27. package/src/DataTable/defaultProps.js +45 -0
  28. package/src/DataTable/defaultValidators.js +40 -0
  29. package/src/DataTable/editCellHelper.js +44 -0
  30. package/src/DataTable/getCellVal.js +20 -0
  31. package/src/DataTable/getVals.js +8 -0
  32. package/src/DataTable/index.js +3537 -0
  33. package/src/DataTable/isTruthy.js +12 -0
  34. package/src/DataTable/isValueEmpty.js +3 -0
  35. package/src/DataTable/style.css +600 -0
  36. package/src/DataTable/utils/computePresets.js +42 -0
  37. package/src/DataTable/utils/convertSchema.js +69 -0
  38. package/src/DataTable/utils/getIdOrCodeOrIndex.js +9 -0
  39. package/src/DataTable/utils/getTableConfigFromStorage.js +5 -0
  40. package/src/DataTable/utils/queryParams.js +1032 -0
  41. package/src/DataTable/utils/rowClick.js +156 -0
  42. package/src/DataTable/utils/selection.js +8 -0
  43. package/src/DataTable/utils/withSelectedEntities.js +65 -0
  44. package/src/DataTable/utils/withTableParams.js +328 -0
  45. package/src/DataTable/validateTableWideErrors.js +135 -0
  46. package/src/DataTable/viewColumn.js +37 -0
  47. package/src/DialogFooter/index.js +79 -0
  48. package/src/DialogFooter/style.css +9 -0
  49. package/src/DropdownButton.js +36 -0
  50. package/src/FillWindow.css +6 -0
  51. package/src/FillWindow.js +69 -0
  52. package/src/FormComponents/Uploader.js +1197 -0
  53. package/src/FormComponents/getNewName.js +31 -0
  54. package/src/FormComponents/index.js +1384 -0
  55. package/src/FormComponents/itemUpload.js +84 -0
  56. package/src/FormComponents/sortify.js +73 -0
  57. package/src/FormComponents/style.css +247 -0
  58. package/src/FormComponents/tryToMatchSchemas.js +222 -0
  59. package/src/FormComponents/utils.js +6 -0
  60. package/src/HotkeysDialog/index.js +79 -0
  61. package/src/HotkeysDialog/style.css +54 -0
  62. package/src/InfoHelper/index.js +83 -0
  63. package/src/InfoHelper/style.css +7 -0
  64. package/src/IntentText/index.js +18 -0
  65. package/src/Loading/index.js +74 -0
  66. package/src/Loading/style.css +4 -0
  67. package/src/MatchHeaders.js +223 -0
  68. package/src/MenuBar/index.js +416 -0
  69. package/src/MenuBar/style.css +45 -0
  70. package/src/PromptUnsavedChanges/index.js +40 -0
  71. package/src/ResizableDraggableDialog/index.js +138 -0
  72. package/src/ResizableDraggableDialog/style.css +42 -0
  73. package/src/ScrollToTop/index.js +72 -0
  74. package/src/SimpleStepViz.js +26 -0
  75. package/src/TgSelect/index.js +465 -0
  76. package/src/TgSelect/style.css +34 -0
  77. package/src/TgSuggest/index.js +121 -0
  78. package/src/Timeline/TimelineEvent.js +31 -0
  79. package/src/Timeline/index.js +22 -0
  80. package/src/Timeline/style.css +29 -0
  81. package/src/UploadCsvWizard.css +4 -0
  82. package/src/UploadCsvWizard.js +731 -0
  83. package/src/autoTooltip.js +89 -0
  84. package/src/constants.js +1 -0
  85. package/src/customIcons.js +361 -0
  86. package/src/enhancers/withDialog/index.js +196 -0
  87. package/src/enhancers/withDialog/tg_modalState.js +46 -0
  88. package/src/enhancers/withField.js +20 -0
  89. package/src/enhancers/withFields.js +11 -0
  90. package/src/enhancers/withLocalStorage.js +11 -0
  91. package/src/index.js +76 -0
  92. package/src/rerenderOnWindowResize.js +27 -0
  93. package/src/showAppSpinner.js +12 -0
  94. package/src/showConfirmationDialog/index.js +116 -0
  95. package/src/showDialogOnDocBody.js +37 -0
  96. package/src/style.css +214 -0
  97. package/src/toastr.js +92 -0
  98. package/src/typeToCommonType.js +6 -0
  99. package/src/useDialog.js +64 -0
  100. package/src/utils/S3Download.js +14 -0
  101. package/src/utils/adHoc.js +10 -0
  102. package/src/utils/basicHandleActionsWithFullState.js +14 -0
  103. package/src/utils/combineReducersWithFullState.js +14 -0
  104. package/src/utils/commandControls.js +83 -0
  105. package/src/utils/commandUtils.js +112 -0
  106. package/src/utils/determineBlackOrWhiteTextColor.js +4 -0
  107. package/src/utils/getDayjsFormatter.js +35 -0
  108. package/src/utils/getTextFromEl.js +28 -0
  109. package/src/utils/handlerHelpers.js +30 -0
  110. package/src/utils/hotkeyUtils.js +129 -0
  111. package/src/utils/menuUtils.js +402 -0
  112. package/src/utils/popoverOverflowModifiers.js +11 -0
  113. package/src/utils/pureNoFunc.js +31 -0
  114. package/src/utils/renderOnDoc.js +29 -0
  115. package/src/utils/showProgressToast.js +22 -0
  116. package/src/utils/tagUtils.js +45 -0
  117. package/src/utils/tgFormValues.js +32 -0
  118. package/src/utils/withSelectTableRecords.js +38 -0
  119. package/src/utils/withStore.js +10 -0
  120. package/src/wrapDialog.js +112 -0
  121. package/tsconfig.json +4 -0
  122. package/vite.config.ts +7 -0
  123. package/index.mjs +0 -109378
  124. package/index.umd.js +0 -109381
  125. package/style.css +0 -10421
@@ -0,0 +1,12 @@
1
+ export function isTruthy(v) {
2
+ if (!v) return false;
3
+ if (typeof v === "string") {
4
+ if (v.toLowerCase() === "false") {
5
+ return false;
6
+ }
7
+ if (v.toLowerCase() === "no") {
8
+ return false;
9
+ }
10
+ }
11
+ return true;
12
+ }
@@ -0,0 +1,3 @@
1
+ export function isValueEmpty(val) {
2
+ return val === undefined || val === null || val === "";
3
+ }
@@ -0,0 +1,600 @@
1
+ /* DataTable style.css */
2
+ .custom-menu-item {
3
+ text-overflow: ellipsis;
4
+ white-space: nowrap;
5
+ word-wrap: normal;
6
+ display: block;
7
+ border-radius: 2px;
8
+ padding: 7px;
9
+ line-height: 16px;
10
+ color: inherit;
11
+ user-select: none;
12
+ }
13
+
14
+ .menu-buttons {
15
+ display: flex;
16
+ justify-content: space-between;
17
+ }
18
+
19
+ .data-table-header-menu {
20
+ min-width: 210px;
21
+ }
22
+
23
+ .data-table-search-and-filter {
24
+ display: flex;
25
+ }
26
+
27
+ .datatable-search-input.bp3-form-group {
28
+ margin-bottom: 0;
29
+ }
30
+
31
+ .data-table-header {
32
+ display: flex;
33
+ flex-wrap: wrap;
34
+ margin-bottom: 10px;
35
+ justify-content: space-between;
36
+ align-items: center;
37
+ }
38
+
39
+ .data-table-header-and-buttons .bp3-button-group {
40
+ overflow: auto;
41
+ }
42
+
43
+ .data-table-title {
44
+ font-size: 1.8em;
45
+ font-weight: 300;
46
+ margin-right: 10px;
47
+ }
48
+ .data-table-header {
49
+ min-height: 30px;
50
+ flex-shrink: 0;
51
+ }
52
+ .data-table-footer {
53
+ min-height: 18px;
54
+ }
55
+
56
+ .data-table-container {
57
+ padding: 20px;
58
+ position: relative;
59
+ height: 100%;
60
+ width: 100%;
61
+ display: flex;
62
+ flex-direction: column;
63
+ }
64
+ @media only screen and (max-width: 600px) {
65
+ .data-table-container {
66
+ padding: 0px;
67
+ }
68
+ }
69
+
70
+ .data-table-container.fullscreen {
71
+ background: white;
72
+ position: fixed;
73
+ z-index: 50;
74
+ padding: 20px !important;
75
+ left: 0;
76
+ top: 0;
77
+ width: 100vw;
78
+ height: 100vh;
79
+ }
80
+
81
+ .data-table-container.fullscreen .ReactTable {
82
+ max-height: 100% !important;
83
+ }
84
+
85
+ .data-table-container.no-padding {
86
+ padding: 0;
87
+ }
88
+
89
+ .data-table-container.hide-column-header .rt-thead.-header {
90
+ display: none;
91
+ }
92
+
93
+ .data-table-title-and-buttons {
94
+ display: flex;
95
+ align-items: center;
96
+ }
97
+
98
+ .datatable-search-input {
99
+ width: 200px;
100
+ }
101
+
102
+ .clickable-cell {
103
+ height: 100%;
104
+ width: 100%;
105
+ display: flex;
106
+ align-items: center;
107
+ }
108
+
109
+ .paging-toolbar-container {
110
+ margin-left: 5px;
111
+ display: flex;
112
+ justify-content: flex-end;
113
+ align-items: center;
114
+ }
115
+
116
+ .paging-page-size {
117
+ width: 62px;
118
+ }
119
+
120
+ .ReactTable.ReactTable .rt-tbody .rt-tr-group {
121
+ border-bottom: 1px solid rgb(233, 233, 233);
122
+ }
123
+ .ReactTable.ReactTable.isCellEditable .rt-tbody .rt-tr-group {
124
+ border-right: 4px solid #d4d4d433;
125
+ border-bottom: none;
126
+ }
127
+ .ReactTable.ReactTable.isCellEditable .rt-thead .rt-tr {
128
+ border-right: 4px solid #d4d4d433;
129
+ }
130
+ .ReactTable.ReactTable.isCellEditable .rt-thead .rt-th {
131
+ border: var(--cell-border-width) solid rgba(212, 212, 212, 0);
132
+ }
133
+
134
+ /* tgreen: we don't want the border for rows that don't have any data */
135
+ .ReactTable.ReactTable .rt-tbody .rt-tr-group.no-row-data {
136
+ min-height: 0px;
137
+ border-bottom: none;
138
+ }
139
+
140
+ .ReactTable.ReactTable .rt-tbody .rt-tr {
141
+ border: none;
142
+ }
143
+
144
+ .bp3-dark .ReactTable.ReactTable .rt-tbody .rt-tr-group {
145
+ border-bottom-color: rgba(16, 22, 26, 0.15);
146
+ }
147
+
148
+ .ReactTable.ReactTable .rt-tbody .rt-tr-group .-padRow {
149
+ display: none;
150
+ }
151
+
152
+ /* Prevent rows from expanding vertically to fill available space */
153
+ .ReactTable.ReactTable .rt-tbody .rt-tr-group,
154
+ .ReactTable.ReactTable .rt-tbody .rt-tr-group .rt-tr {
155
+ min-height: 28px;
156
+ flex: 0 0 auto;
157
+ }
158
+
159
+ /* add margin bottom to last row so it does not get covered by scrollbar */
160
+ .ReactTable .rt-tr-group:last-child {
161
+ margin-bottom: 20px;
162
+ }
163
+
164
+ .bp3-icon-standard.bp3-disabled {
165
+ cursor: not-allowed;
166
+ opacity: 0.7;
167
+ }
168
+
169
+ .data-table-search-and-clear-filter-container {
170
+ display: flex;
171
+ align-items: center;
172
+ }
173
+
174
+ .data-table-clear-filters {
175
+ margin-right: 10px;
176
+ }
177
+
178
+ .tg-react-table-column-header {
179
+ display: flex;
180
+ align-items: center;
181
+ justify-content: flex-start;
182
+ }
183
+
184
+ .tg-react-table-name {
185
+ white-space: nowrap;
186
+ overflow: hidden;
187
+ min-width: 0px;
188
+ padding: 6px;
189
+ text-overflow: ellipsis;
190
+ font-size: 13px;
191
+ font-weight: 400;
192
+ color: rgba(0, 0, 0, 0.65);
193
+ }
194
+
195
+ .tg-sort-arrow-container {
196
+ margin-left: 4px;
197
+ display: flex;
198
+ flex-direction: column;
199
+ }
200
+
201
+ .tg-sort-arrow-container .bp3-icon {
202
+ display: none;
203
+ }
204
+
205
+ .tg-sort-arrow-container > *:hover {
206
+ background: rgba(167, 182, 194, 0.3);
207
+ }
208
+
209
+ .tg-filter-menu-button {
210
+ cursor: pointer;
211
+ display: none;
212
+ color: darkgrey;
213
+ margin-right: 4px;
214
+ }
215
+
216
+ .tg-filter-menu-button:hover {
217
+ color: #5c7080;
218
+ }
219
+
220
+ .tg-filter-menu-button.tg-active-filter {
221
+ color: #106ba3;
222
+ }
223
+
224
+ /* this keeps the buttons from jumping around on hover */
225
+ .tg-react-table-column-header.sort-active .tg-filter-menu-button {
226
+ display: block !important;
227
+ opacity: 0;
228
+ }
229
+
230
+ .tg-filter-menu-button.tg-active-filter,
231
+ .tg-sort-arrow-container .bp3-icon.active,
232
+ .tg-react-table-column-header:hover .tg-sort-arrow-container .bp3-icon,
233
+ .tg-react-table-column-header:hover .tg-filter-menu-button,
234
+ .tg-filter-menu-button.tg-active-filter,
235
+ .tg-react-table-column-header .bp3-popover-open .tg-filter-menu-button {
236
+ display: block !important;
237
+ opacity: 1 !important;
238
+ }
239
+
240
+ .data-table-footer {
241
+ display: flex;
242
+ flex-wrap: wrap;
243
+ align-items: center;
244
+ margin-top: 20px;
245
+ }
246
+
247
+ .ReactTable {
248
+ user-select: none;
249
+ background: #f7f7f7;
250
+ }
251
+
252
+ .ReactTable .rt-thead {
253
+ box-shadow: none;
254
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
255
+ position: sticky;
256
+ top: 0px;
257
+ background: #ebf1f5;
258
+ z-index: 2;
259
+ }
260
+ /* tnr: this is a hack to make cypress be able to correctly click the table without the sticky header getting in the way. remove me once https://github.com/cypress-io/cypress/issues/871 is fixed */
261
+ .in_cypress_test .ReactTable .rt-thead {
262
+ position: unset;
263
+ }
264
+
265
+ .bp3-dark .ReactTable .rt-thead {
266
+ background: #202b33;
267
+ }
268
+
269
+ .ReactTable .rt-tbody {
270
+ background: white;
271
+ overflow: visible !important;
272
+ }
273
+
274
+ .ReactTable .rt-tbody .rt-td {
275
+ cursor: pointer;
276
+ border-right: none;
277
+ color: rgba(0, 0, 0, 0.65);
278
+ font-size: 12px;
279
+ display: flex;
280
+ align-items: center;
281
+ padding: 12px 12px;
282
+ }
283
+ /* .ReactTable .rt-tbody .rt-td.isCleanRow {
284
+ opacity: 0.5;
285
+ } */
286
+
287
+ /* fix padding in custom row expander cell */
288
+ .ReactTable .rt-tbody .rt-expandable {
289
+ padding: 3px 5px;
290
+ }
291
+
292
+ .ReactTable .rt-tbody .rt-tr-group {
293
+ border-bottom-color: rgb(233, 233, 233);
294
+ }
295
+
296
+ .ReactTable .rt-tr-group.selected {
297
+ background: lightblue !important;
298
+ }
299
+
300
+ .ReactTable .rt-tr-group.disabled {
301
+ opacity: 0.6;
302
+ }
303
+
304
+ .ReactTable .rt-tr-group.disabled .rt-td {
305
+ cursor: not-allowed;
306
+ }
307
+
308
+ .dt-isViewable .ReactTable .rt-tr-group.selected .dt-eyeIcon {
309
+ color: #137cbd;
310
+ transform: scale(1.2);
311
+ }
312
+
313
+ .ReactTable .rt-tbody .rt-td {
314
+ padding: 8px 8px;
315
+ }
316
+ :root {
317
+ --cell-border-width: 1px;
318
+ --cell-no-border: var(--cell-border-width) solid rgba(212, 212, 212, 0.07);
319
+ --cell-border-color: rgb(75, 137, 255);
320
+ }
321
+
322
+ .ReactTable.isCellEditable .rt-td {
323
+ border: var(--cell-border-width) solid rgba(212, 212, 212, 0.2);
324
+ }
325
+
326
+ .ReactTable .rt-tbody .rt-td.isSelectedCell {
327
+ overflow: visible;
328
+ z-index: 1;
329
+ background: #005eff1e;
330
+ }
331
+
332
+ .ReactTable .rt-tbody .rt-td.isSelectedCell.isPrimarySelected {
333
+ border: var(--cell-border-width) solid var(--cell-border-color);
334
+ box-shadow: 0 0 0 1px rgb(75 137 255);
335
+ }
336
+
337
+ .ReactTable .rt-tbody .rt-td.isSelectedCell.isSecondarySelected {
338
+ border: var(--cell-border-width) solid var(--cell-border-color);
339
+ }
340
+
341
+ .ReactTable
342
+ .rt-tbody
343
+ .rt-td.isSelectedCell.isSecondarySelected.noSelectedTopBorder {
344
+ border-top: var(--cell-no-border);
345
+ }
346
+ .ReactTable
347
+ .rt-tbody
348
+ .rt-td.isSelectedCell.isSecondarySelected.noSelectedRightBorder {
349
+ border-right: var(--cell-no-border);
350
+ }
351
+ .ReactTable
352
+ .rt-tbody
353
+ .rt-td.isSelectedCell.isSecondarySelected.noSelectedBottomBorder {
354
+ border-bottom: var(--cell-no-border);
355
+ }
356
+ .ReactTable
357
+ .rt-tbody
358
+ .rt-td.isSelectedCell.isSecondarySelected.noSelectedLeftBorder {
359
+ border-left: var(--cell-no-border);
360
+ }
361
+
362
+ .ReactTable .rt-tbody .rt-td.isSelectedCell.isDropdownCell {
363
+ padding-top: 0px;
364
+ padding-bottom: 0px;
365
+ }
366
+ .ReactTable .rt-tbody .rt-td.hasCellError {
367
+ background-color: rgba(226, 50, 50, 0.61);
368
+ }
369
+ .ReactTable .rt-tbody .rt-td.isBooleanCell {
370
+ overflow: visible;
371
+ }
372
+ .ReactTable .rt-tbody .rt-td.selectedForUpdate {
373
+ border: var(--cell-border-width) dashed var(--cell-border-color);
374
+ }
375
+
376
+ .tg-compact-table .rt-tbody .rt-td {
377
+ padding: 4px 4px;
378
+ display: flex;
379
+ align-items: center;
380
+ }
381
+
382
+ .tg-extra-compact-table .rt-tbody .rt-td {
383
+ padding: 0px 0px;
384
+ display: flex;
385
+ align-items: center;
386
+ }
387
+
388
+ .ReactTable .rt-thead .rt-th.tg-react-table-checkbox-header-container,
389
+ .ReactTable .rt-tbody .rt-td.tg-react-table-checkbox-cell-container {
390
+ display: flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ padding: 0;
394
+ }
395
+
396
+ .tg-react-table-checkbox-header-container .bp3-control,
397
+ .tg-react-table-checkbox-cell-container .bp3-control {
398
+ margin-bottom: 0;
399
+ margin-top: 0;
400
+ /* there is a weird padding on the blueprint checkbox, so this centers it some */
401
+ padding-left: 18px;
402
+ }
403
+
404
+ .tg-react-table-checkbox-header-container .bp3-control-indicator,
405
+ .tg-react-table-checkbox-cell-container .bp3-control-indicator {
406
+ margin-left: -10px !important;
407
+ }
408
+
409
+ .tg-compact-table .tg-react-table-name {
410
+ padding: 6px;
411
+ padding-left: 4px;
412
+ }
413
+
414
+ .tg-extra-compact-table .tg-react-table-name {
415
+ padding: 4px;
416
+ padding-left: 2px;
417
+ }
418
+
419
+ .ReactTable .-loading.disabled {
420
+ cursor: not-allowed;
421
+ }
422
+
423
+ /* to get the height to resize based on its container: */
424
+ .ReactTable {
425
+ height: 100%;
426
+ display: flex;
427
+ flex-direction: column;
428
+ }
429
+
430
+ .ReactTable .rt-table {
431
+ /* flex: 100000 0 auto; */
432
+ overflow: auto !important;
433
+ }
434
+
435
+ .-pagination,
436
+ .rt-body {
437
+ flex: 1 0 auto;
438
+ }
439
+
440
+ .tg-dropdown-cell-edit-container {
441
+ width: 100%;
442
+ }
443
+
444
+ .rt-td.isDropdownCell {
445
+ transition: 0s;
446
+ }
447
+ .rt-td.isEditingCell.isDropdownCell {
448
+ padding: 0;
449
+ max-height: 24px;
450
+ }
451
+
452
+ .tg-dropdown-cell-edit-container .bp3-tag-input .bp3-button {
453
+ margin: 0;
454
+ }
455
+ .tg-dropdown-cell-edit-container .bp3-tag-input .bp3-tag-input-values > * {
456
+ margin-bottom: 0;
457
+ }
458
+ .tg-dropdown-cell-edit-container:not(.tg-dropdown-cell-edit-container-multi)
459
+ .bp3-tag-input {
460
+ min-height: 0;
461
+ max-height: 22px;
462
+ }
463
+
464
+ .tg-dropdown-cell-edit-container .bp3-tag-input-values {
465
+ margin-top: 0;
466
+ margin-right: 0;
467
+ }
468
+
469
+ .tg-dropdown-cell-edit-container .bp3-input {
470
+ background: #f7f7f7 !important;
471
+ box-shadow: none !important;
472
+ }
473
+
474
+ .ReactTable .rt-thead .rt-th {
475
+ padding: 0;
476
+ }
477
+
478
+ .ReactTable .rt-thead .rt-th,
479
+ .ReactTable .rt-thead .rt-td {
480
+ border-right: none;
481
+ }
482
+
483
+ .ReactTable .rt-thead .rt-resizable-header {
484
+ border-right: 1px solid #e1e8ed;
485
+ }
486
+
487
+ .bp3-dark .ReactTable .rt-thead .rt-resizable-header {
488
+ border-right: 1px solid #202b33;
489
+ }
490
+
491
+ .ReactTable .rt-thead .rt-resizable-header:hover {
492
+ border-right: 1px solid #ced9e0;
493
+ }
494
+
495
+ .show-on-hover {
496
+ color: #fff;
497
+ font-size: 13px !important;
498
+ }
499
+
500
+ .hoverable:hover .show-on-hover {
501
+ display: inline !important;
502
+ color: #ccc;
503
+ }
504
+
505
+ .ReactTable .rt-noData {
506
+ z-index: unset;
507
+ margin-top: 5px;
508
+ }
509
+
510
+ /* dark styles */
511
+ .bp3-dark .ReactTable {
512
+ background: #182026 !important;
513
+ color: #f5f8fa !important;
514
+ border-color: #293742;
515
+ }
516
+ /* dark styles */
517
+ .bp3-dark .ReactTable .rt-tbody {
518
+ background: #30404d !important;
519
+ }
520
+
521
+ .bp3-dark .ReactTable .rt-thead.-header {
522
+ color: #f5f8fa !important;
523
+ }
524
+
525
+ .bp3-dark .ReactTable .rt-tbody .rt-td,
526
+ .bp3-dark .tg-react-table-name {
527
+ color: #f5f8fa !important;
528
+ }
529
+
530
+ .bp3-dark .ReactTable .rt-noData {
531
+ background: #202b33 !important;
532
+ color: inherit !important;
533
+ }
534
+
535
+ .bp3-dark .ReactTable .-loading {
536
+ background: #30404d !important;
537
+ }
538
+
539
+ .bp3-dark .ReactTable .-loading > div {
540
+ color: #f5f8fa !important;
541
+ }
542
+
543
+ .bp3-dark .ReactTable .rt-tr-group.selected {
544
+ background: #26738cb0 !important;
545
+ }
546
+
547
+ .dt-isViewable .ReactTable .rt-tr-group.selected {
548
+ background: inherit !important;
549
+ }
550
+
551
+ .bp3-dark .ReactTable .rt-thead .rt-resizable-header:hover {
552
+ border-right-color: #738694;
553
+ }
554
+
555
+ .bp3-dark .data-table-container.fullscreen {
556
+ background: #293742;
557
+ }
558
+
559
+ .data-table-container .ReactTable .rt-resizer {
560
+ width: 10px;
561
+ right: -5px;
562
+ }
563
+
564
+ .bp3-dark .dt-minimalStyle .ReactTable {
565
+ background: transparent !important;
566
+ }
567
+ .bp3-dark .dt-minimalStyle .ReactTable {
568
+ border-color: transparent !important;
569
+ }
570
+ .bp3-dark .dt-minimalStyle .ReactTable * {
571
+ border-color: transparent !important ;
572
+ }
573
+ .dt-minimalStyle .ReactTable {
574
+ background: transparent !important;
575
+ }
576
+ .dt-minimalStyle .ReactTable {
577
+ border-color: transparent !important;
578
+ }
579
+ .dt-minimalStyle .ReactTable * {
580
+ border-color: transparent !important ;
581
+ }
582
+
583
+ .bp3-dark .tg-dropdown-cell-edit-container .bp3-input {
584
+ background: rgb(48, 64, 77) !important;
585
+ }
586
+
587
+ .cell-edit-dropdown:hover {
588
+ color: var(--cell-border-color);
589
+ }
590
+ .tgBorderBlue {
591
+ outline: 1px solid rgb(75, 149, 210);
592
+ }
593
+ .data-table-container-inner {
594
+ min-height: 150px;
595
+ position: relative;
596
+ height: 100%;
597
+ width: 100%;
598
+ display: flex;
599
+ flex-direction: column;
600
+ }
@@ -0,0 +1,42 @@
1
+ import { omitBy, isNil } from "lodash";
2
+ //we use this to make adding preset prop groups simpler
3
+ export default function computePresets(props = {}) {
4
+ const { isSimple } = props;
5
+ let toReturn = omitBy(props, isNil);
6
+ toReturn.pageSize = toReturn.controlled_pageSize || toReturn.pageSize;
7
+ if (isSimple) {
8
+ //isSimplePreset
9
+ toReturn = {
10
+ noHeader: true,
11
+ noFooter: !props.withPaging,
12
+ noPadding: true,
13
+ noFullscreenButton: true,
14
+ hidePageSizeWhenPossible: !props.withPaging,
15
+ isInfinite: !props.withPaging,
16
+ hideSelectedCount: true,
17
+ withTitle: false,
18
+ withSearch: false,
19
+ compact: true,
20
+ withPaging: false,
21
+ withFilter: false,
22
+ ...toReturn
23
+ };
24
+ } else {
25
+ toReturn = {
26
+ // the usual defaults:
27
+ noFooter: false,
28
+ noPadding: false,
29
+ compact: true,
30
+ noFullscreenButton: false,
31
+ hidePageSizeWhenPossible: false,
32
+ isInfinite: false,
33
+ hideSelectedCount: false,
34
+ withTitle: true,
35
+ withSearch: true,
36
+ withPaging: true,
37
+ withFilter: true,
38
+ ...toReturn
39
+ };
40
+ }
41
+ return toReturn || {};
42
+ }
@@ -0,0 +1,69 @@
1
+ import { camelCase } from "lodash";
2
+ import { startCase, keyBy, map } from "lodash";
3
+
4
+ function convertSchema(schema) {
5
+ let schemaToUse = schema;
6
+ if (!schemaToUse.fields && Array.isArray(schema)) {
7
+ schemaToUse = {
8
+ fields: schema
9
+ };
10
+ }
11
+ schemaToUse = {
12
+ ...schemaToUse
13
+ };
14
+ schemaToUse.fields = schemaToUse.fields.map((field, i) => {
15
+ let fieldToUse = field;
16
+ if (typeof field === "string") {
17
+ fieldToUse = {
18
+ displayName: startCase(camelCase(field)),
19
+ path: field,
20
+ type: "string"
21
+ };
22
+ } else if (!field.type) {
23
+ fieldToUse = {
24
+ ...field,
25
+ type: "string"
26
+ };
27
+ }
28
+ if (!fieldToUse.displayName) {
29
+ fieldToUse = {
30
+ ...fieldToUse,
31
+ displayName: startCase(camelCase(fieldToUse.path))
32
+ };
33
+ }
34
+ // paths are needed for column resizing
35
+ if (!fieldToUse.path) {
36
+ fieldToUse = {
37
+ ...fieldToUse,
38
+ filterDisabled: true,
39
+ sortDisabled: true,
40
+ path: "fake-path" + i
41
+ };
42
+ }
43
+ return fieldToUse;
44
+ });
45
+ return schemaToUse;
46
+ }
47
+
48
+ export function mergeSchemas(_originalSchema, _overrideSchema) {
49
+ const originalSchema = convertSchema(_originalSchema);
50
+ const overrideSchema = convertSchema(_overrideSchema);
51
+
52
+ const overridesByKey = keyBy(overrideSchema.fields, "path");
53
+ return {
54
+ ...originalSchema,
55
+ ...overrideSchema,
56
+ fields: originalSchema.fields
57
+ .map(f => {
58
+ const override = overridesByKey[f.path];
59
+ if (override) {
60
+ delete overridesByKey[f.path];
61
+ return override;
62
+ }
63
+ return f;
64
+ })
65
+ .concat(map(overridesByKey))
66
+ };
67
+ }
68
+
69
+ export default convertSchema;