@teselagen/ui 0.7.34 → 0.7.36

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 (161) hide show
  1. package/isBeingCalledExcessively.js +2 -0
  2. package/package.json +1 -1
  3. package/style.css +26 -10
  4. package/DataTable/utils/filterLocalEntitiesToHasura.d.ts +0 -5
  5. package/DataTable/utils/initializeHasuraWhereAndFilter.d.ts +0 -2
  6. package/DataTable/utils/tableQueryParamsToHasuraClauses.d.ts +0 -26
  7. package/src/AdvancedOptions.js +0 -33
  8. package/src/AdvancedOptions.spec.js +0 -26
  9. package/src/AssignDefaultsModeContext.js +0 -22
  10. package/src/AsyncValidateFieldSpinner/index.js +0 -12
  11. package/src/BlueprintError/index.js +0 -14
  12. package/src/BounceLoader/index.js +0 -16
  13. package/src/BounceLoader/style.css +0 -45
  14. package/src/CollapsibleCard/index.js +0 -68
  15. package/src/CollapsibleCard/style.css +0 -23
  16. package/src/DNALoader/index.js +0 -20
  17. package/src/DNALoader/style.css +0 -251
  18. package/src/DataTable/CellDragHandle.js +0 -132
  19. package/src/DataTable/ColumnFilterMenu.js +0 -62
  20. package/src/DataTable/Columns.js +0 -979
  21. package/src/DataTable/DisabledLoadingComponent.js +0 -15
  22. package/src/DataTable/DisplayOptions.js +0 -199
  23. package/src/DataTable/DropdownCell.js +0 -61
  24. package/src/DataTable/EditableCell.js +0 -44
  25. package/src/DataTable/FilterAndSortMenu.js +0 -388
  26. package/src/DataTable/PagingTool.js +0 -225
  27. package/src/DataTable/RenderCell.js +0 -191
  28. package/src/DataTable/SearchBar.js +0 -69
  29. package/src/DataTable/SortableColumns.js +0 -100
  30. package/src/DataTable/TableFormTrackerContext.js +0 -10
  31. package/src/DataTable/ThComponent.js +0 -44
  32. package/src/DataTable/dataTableEnhancer.js +0 -41
  33. package/src/DataTable/defaultFormatters.js +0 -32
  34. package/src/DataTable/defaultValidators.js +0 -40
  35. package/src/DataTable/editCellHelper.js +0 -44
  36. package/src/DataTable/getCellVal.js +0 -20
  37. package/src/DataTable/getVals.js +0 -8
  38. package/src/DataTable/index.js +0 -3209
  39. package/src/DataTable/isTruthy.js +0 -12
  40. package/src/DataTable/isValueEmpty.js +0 -3
  41. package/src/DataTable/style.css +0 -608
  42. package/src/DataTable/utils/convertSchema.js +0 -69
  43. package/src/DataTable/utils/filterLocalEntitiesToHasura.js +0 -236
  44. package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +0 -587
  45. package/src/DataTable/utils/formatPasteData.js +0 -16
  46. package/src/DataTable/utils/getAllRows.js +0 -11
  47. package/src/DataTable/utils/getCellCopyText.js +0 -7
  48. package/src/DataTable/utils/getCellInfo.js +0 -36
  49. package/src/DataTable/utils/getFieldPathToField.js +0 -7
  50. package/src/DataTable/utils/getIdOrCodeOrIndex.js +0 -9
  51. package/src/DataTable/utils/getLastSelectedEntity.js +0 -11
  52. package/src/DataTable/utils/getNewEntToSelect.js +0 -25
  53. package/src/DataTable/utils/getRowCopyText.js +0 -28
  54. package/src/DataTable/utils/getTableConfigFromStorage.js +0 -5
  55. package/src/DataTable/utils/handleCopyColumn.js +0 -21
  56. package/src/DataTable/utils/handleCopyHelper.js +0 -15
  57. package/src/DataTable/utils/handleCopyRows.js +0 -23
  58. package/src/DataTable/utils/handleCopyTable.js +0 -16
  59. package/src/DataTable/utils/index.js +0 -55
  60. package/src/DataTable/utils/initializeHasuraWhereAndFilter.js +0 -26
  61. package/src/DataTable/utils/isBottomRightCornerOfRectangle.js +0 -20
  62. package/src/DataTable/utils/isEntityClean.js +0 -15
  63. package/src/DataTable/utils/primarySelectedValue.js +0 -1
  64. package/src/DataTable/utils/queryParams.js +0 -350
  65. package/src/DataTable/utils/removeCleanRows.js +0 -22
  66. package/src/DataTable/utils/rowClick.js +0 -181
  67. package/src/DataTable/utils/selection.js +0 -8
  68. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.js +0 -253
  69. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +0 -206
  70. package/src/DataTable/utils/useTableEntities.js +0 -38
  71. package/src/DataTable/utils/utils.js +0 -37
  72. package/src/DataTable/utils/withSelectedEntities.js +0 -65
  73. package/src/DataTable/utils/withTableParams.js +0 -288
  74. package/src/DataTable/validateTableWideErrors.js +0 -160
  75. package/src/DataTable/viewColumn.js +0 -97
  76. package/src/DialogFooter/index.js +0 -86
  77. package/src/DialogFooter/style.css +0 -9
  78. package/src/DropdownButton.js +0 -36
  79. package/src/FillWindow.css +0 -6
  80. package/src/FillWindow.js +0 -69
  81. package/src/FormComponents/FormSeparator.js +0 -9
  82. package/src/FormComponents/LoadingDots.js +0 -14
  83. package/src/FormComponents/Uploader.js +0 -1278
  84. package/src/FormComponents/getNewName.js +0 -31
  85. package/src/FormComponents/index.js +0 -1266
  86. package/src/FormComponents/itemUpload.js +0 -84
  87. package/src/FormComponents/sortify.js +0 -73
  88. package/src/FormComponents/style.css +0 -275
  89. package/src/FormComponents/tryToMatchSchemas.js +0 -264
  90. package/src/FormComponents/utils.js +0 -6
  91. package/src/HotkeysDialog/index.js +0 -79
  92. package/src/HotkeysDialog/style.css +0 -54
  93. package/src/InfoHelper/index.js +0 -78
  94. package/src/InfoHelper/style.css +0 -7
  95. package/src/IntentText/index.js +0 -18
  96. package/src/Loading/index.js +0 -70
  97. package/src/Loading/style.css +0 -4
  98. package/src/MatchHeaders.js +0 -234
  99. package/src/MenuBar/index.js +0 -423
  100. package/src/MenuBar/style.css +0 -45
  101. package/src/PromptUnsavedChanges/index.js +0 -38
  102. package/src/ResizableDraggableDialog/index.js +0 -141
  103. package/src/ResizableDraggableDialog/style.css +0 -42
  104. package/src/ScrollToTop/index.js +0 -72
  105. package/src/SimpleStepViz.js +0 -22
  106. package/src/Tag.js +0 -112
  107. package/src/TagSelect/index.js +0 -69
  108. package/src/TagSelect/style.css +0 -13
  109. package/src/TgHtmlSelect/index.js +0 -20
  110. package/src/TgSelect/index.js +0 -537
  111. package/src/TgSelect/style.css +0 -61
  112. package/src/TgSuggest/index.js +0 -124
  113. package/src/Timeline/TimelineEvent.js +0 -31
  114. package/src/Timeline/index.js +0 -15
  115. package/src/Timeline/style.css +0 -29
  116. package/src/UploadCsvWizard.css +0 -4
  117. package/src/UploadCsvWizard.js +0 -719
  118. package/src/autoTooltip.js +0 -201
  119. package/src/constants.js +0 -1
  120. package/src/customIcons.js +0 -361
  121. package/src/enhancers/withDialog/index.js +0 -196
  122. package/src/enhancers/withDialog/tg_modalState.js +0 -47
  123. package/src/enhancers/withField.js +0 -20
  124. package/src/enhancers/withFields.js +0 -11
  125. package/src/enhancers/withLocalStorage.js +0 -11
  126. package/src/index.js +0 -88
  127. package/src/rerenderOnWindowResize.js +0 -26
  128. package/src/showAppSpinner.js +0 -12
  129. package/src/showConfirmationDialog/index.js +0 -148
  130. package/src/showDialogOnDocBody.js +0 -33
  131. package/src/style.css +0 -265
  132. package/src/throwFormError.js +0 -16
  133. package/src/toastr.js +0 -148
  134. package/src/typeToCommonType.js +0 -6
  135. package/src/useDialog.js +0 -63
  136. package/src/utils/adHoc.js +0 -10
  137. package/src/utils/basicHandleActionsWithFullState.js +0 -14
  138. package/src/utils/browserUtils.js +0 -3
  139. package/src/utils/combineReducersWithFullState.js +0 -14
  140. package/src/utils/commandControls.js +0 -82
  141. package/src/utils/commandUtils.js +0 -112
  142. package/src/utils/determineBlackOrWhiteTextColor.js +0 -4
  143. package/src/utils/getDayjsFormatter.js +0 -35
  144. package/src/utils/getTextFromEl.js +0 -28
  145. package/src/utils/handlerHelpers.js +0 -24
  146. package/src/utils/hooks/index.js +0 -1
  147. package/src/utils/hooks/useDeepEqualMemo.js +0 -15
  148. package/src/utils/hooks/useStableReference.js +0 -9
  149. package/src/utils/hotkeyUtils.js +0 -131
  150. package/src/utils/isBeingCalledExcessively.js +0 -24
  151. package/src/utils/menuUtils.js +0 -433
  152. package/src/utils/popoverOverflowModifiers.js +0 -11
  153. package/src/utils/pureNoFunc.js +0 -31
  154. package/src/utils/renderOnDoc.js +0 -32
  155. package/src/utils/showProgressToast.js +0 -22
  156. package/src/utils/tagUtils.js +0 -45
  157. package/src/utils/tgFormValues.js +0 -35
  158. package/src/utils/useTraceUpdate.js +0 -19
  159. package/src/utils/withSelectTableRecords.js +0 -43
  160. package/src/utils/withStore.js +0 -10
  161. package/src/wrapDialog.js +0 -116
@@ -1,25 +0,0 @@
1
- export const getNewEntToSelect = ({
2
- type,
3
- lastSelectedIndex,
4
- entities,
5
- isEntityDisabled
6
- }) => {
7
- let newIndexToSelect;
8
- if (type === "up") {
9
- newIndexToSelect = lastSelectedIndex - 1;
10
- } else {
11
- newIndexToSelect = lastSelectedIndex + 1;
12
- }
13
- const newEntToSelect = entities[newIndexToSelect];
14
- if (!newEntToSelect) return;
15
- if (isEntityDisabled && isEntityDisabled(newEntToSelect)) {
16
- return getNewEntToSelect({
17
- type,
18
- lastSelectedIndex: newIndexToSelect,
19
- entities,
20
- isEntityDisabled
21
- });
22
- } else {
23
- return newEntToSelect;
24
- }
25
- };
@@ -1,28 +0,0 @@
1
- import { getCellCopyText } from "./getCellCopyText";
2
- import { flatMap } from "lodash-es";
3
-
4
- export const getRowCopyText = (rowEl, { specificColumn } = {}) => {
5
- //takes in a row element
6
- if (!rowEl) return [];
7
- const textContent = [];
8
- const jsonText = [];
9
-
10
- for (const cellEl of rowEl.children) {
11
- const cellChild = cellEl.querySelector(`[data-copy-text]`);
12
- if (!cellChild) {
13
- if (specificColumn) continue; //strip it
14
- continue; //just leave it blank
15
- }
16
- if (
17
- specificColumn &&
18
- cellChild.getAttribute("data-test") !== specificColumn
19
- ) {
20
- continue;
21
- }
22
- const [t, j] = getCellCopyText(cellChild);
23
- textContent.push(t);
24
- jsonText.push(j);
25
- }
26
-
27
- return [flatMap(textContent).join("\t"), jsonText];
28
- };
@@ -1,5 +0,0 @@
1
- export default function getTableConfigFromStorage(formName) {
2
- let tableConfig = window.localStorage.getItem(formName);
3
- tableConfig = tableConfig && JSON.parse(tableConfig);
4
- return tableConfig;
5
- }
@@ -1,21 +0,0 @@
1
- import { getAllRows } from "./getAllRows";
2
- import { getIdOrCodeOrIndex } from "./getIdOrCodeOrIndex";
3
- import { handleCopyRows } from "./handleCopyRows";
4
-
5
- export const handleCopyColumn = (e, cellWrapper, selectedRecords) => {
6
- const specificColumn = cellWrapper.getAttribute("data-test");
7
- let rowElsToCopy = getAllRows(e);
8
- if (!rowElsToCopy) return;
9
- if (selectedRecords) {
10
- const ids = selectedRecords.map(e => getIdOrCodeOrIndex(e)?.toString());
11
- rowElsToCopy = Array.from(rowElsToCopy).filter(rowEl => {
12
- const id = rowEl.closest(".rt-tr-group")?.getAttribute("data-test-id");
13
- return id !== undefined && ids.includes(id);
14
- });
15
- }
16
- if (!rowElsToCopy) return;
17
- handleCopyRows(rowElsToCopy, {
18
- specificColumn,
19
- onFinishMsg: "Column Copied"
20
- });
21
- };
@@ -1,15 +0,0 @@
1
- import copy from "copy-to-clipboard";
2
-
3
- export const handleCopyHelper = (stringToCopy, jsonToCopy, message) => {
4
- !window.Cypress &&
5
- copy(stringToCopy, {
6
- onCopy: clipboardData => {
7
- clipboardData.setData("application/json", JSON.stringify(jsonToCopy));
8
- },
9
- // keep this so that pasting into spreadsheets works.
10
- format: "text/plain"
11
- });
12
- if (message) {
13
- window.toastr.success(message);
14
- }
15
- };
@@ -1,23 +0,0 @@
1
- import download from "downloadjs";
2
- import { getRowCopyText } from "./getRowCopyText";
3
- import { handleCopyHelper } from "./handleCopyHelper";
4
-
5
- export const handleCopyRows = (
6
- rowElsToCopy,
7
- { specificColumn, onFinishMsg, isDownload } = {}
8
- ) => {
9
- let textToCopy = [];
10
- const jsonToCopy = [];
11
- rowElsToCopy.forEach(rowEl => {
12
- const [t, j] = getRowCopyText(rowEl, { specificColumn });
13
- textToCopy.push(t);
14
- jsonToCopy.push(j);
15
- });
16
- textToCopy = textToCopy.filter(text => text).join("\n");
17
- if (!textToCopy) return window.toastr.warning("No text to copy");
18
- if (isDownload) {
19
- download(textToCopy.replaceAll("\t", ","), "tableData.csv", "text/csv");
20
- } else {
21
- handleCopyHelper(textToCopy, jsonToCopy, onFinishMsg || "Row Copied");
22
- }
23
- };
@@ -1,16 +0,0 @@
1
- import { getAllRows } from "./getAllRows";
2
- import { handleCopyRows } from "./handleCopyRows";
3
-
4
- export const handleCopyTable = (e, opts) => {
5
- try {
6
- const allRowEls = getAllRows(e);
7
- if (!allRowEls) return;
8
- handleCopyRows(allRowEls, {
9
- ...opts,
10
- onFinishMsg: "Table Copied"
11
- });
12
- } catch (error) {
13
- console.error(`error:`, error);
14
- window.toastr.error("Error copying rows.");
15
- }
16
- };
@@ -1,55 +0,0 @@
1
- import { isEntityClean } from "./isEntityClean";
2
- import { getSelectedRowsFromEntities } from "./selection";
3
- import { removeCleanRows } from "./removeCleanRows";
4
- import { getIdOrCodeOrIndex } from "./getIdOrCodeOrIndex";
5
- import { getRecordsFromIdMap } from "./withSelectedEntities";
6
- import { formatPasteData } from "./formatPasteData";
7
- import { getFieldPathToField } from "./getFieldPathToField";
8
- import {
9
- defaultParsePaste,
10
- getEntityIdToEntity,
11
- getFieldPathToIndex,
12
- getNumberStrAtEnd,
13
- stripNumberAtEnd
14
- } from "./utils";
15
- import { getAllRows } from "./getAllRows";
16
- import { getNewEntToSelect } from "./getNewEntToSelect";
17
- import { getLastSelectedEntity } from "./getLastSelectedEntity";
18
- import { getCellInfo } from "./getCellInfo";
19
- import { getCellCopyText } from "./getCellCopyText";
20
- import { getRowCopyText } from "./getRowCopyText";
21
- import { handleCopyHelper } from "./handleCopyHelper";
22
- import { handleCopyRows } from "./handleCopyRows";
23
- import { handleCopyColumn } from "./handleCopyColumn";
24
- import { isBottomRightCornerOfRectangle } from "./isBottomRightCornerOfRectangle";
25
- import { handleCopyTable } from "./handleCopyTable";
26
- import { PRIMARY_SELECTED_VAL } from "./primarySelectedValue";
27
- import { useTableEntities } from "./useTableEntities";
28
-
29
- export {
30
- defaultParsePaste,
31
- formatPasteData,
32
- getAllRows,
33
- getCellCopyText,
34
- getCellInfo,
35
- getEntityIdToEntity,
36
- getFieldPathToIndex,
37
- getFieldPathToField,
38
- getIdOrCodeOrIndex,
39
- getLastSelectedEntity,
40
- getNewEntToSelect,
41
- getNumberStrAtEnd,
42
- getRecordsFromIdMap,
43
- getRowCopyText,
44
- getSelectedRowsFromEntities,
45
- handleCopyColumn,
46
- handleCopyHelper,
47
- handleCopyRows,
48
- handleCopyTable,
49
- isBottomRightCornerOfRectangle,
50
- isEntityClean,
51
- PRIMARY_SELECTED_VAL,
52
- removeCleanRows,
53
- stripNumberAtEnd,
54
- useTableEntities
55
- };
@@ -1,26 +0,0 @@
1
- export function initializeHasuraWhereAndFilter(
2
- additionalFilter,
3
- where = {},
4
- currentParams
5
- ) {
6
- where._and = where._and || [];
7
- where._or = where._or || [];
8
- if (typeof additionalFilter === "function") {
9
- const newWhere = additionalFilter(where, currentParams);
10
- if (newWhere) {
11
- where = {
12
- ...where,
13
- ...newWhere
14
- };
15
- }
16
- } else if (typeof additionalFilter === "object")
17
- where._and.push(additionalFilter);
18
- }
19
-
20
- export const addCustomColumnFilters = (where, fields, currentParams) => {
21
- fields.forEach(field => {
22
- const { customColumnFilter, filterDisabled } = field;
23
- if (filterDisabled || !customColumnFilter) return;
24
- customColumnFilter(where, currentParams);
25
- });
26
- };
@@ -1,20 +0,0 @@
1
- export const isBottomRightCornerOfRectangle = ({
2
- cellId,
3
- selectionGrid,
4
- lastRowIndex,
5
- lastCellIndex,
6
- entityMap,
7
- pathToIndex
8
- }) => {
9
- selectionGrid.forEach(row => {
10
- // remove undefineds from start of row
11
- while (row[0] === undefined && row.length) row.shift();
12
- });
13
- const [rowId, cellPath] = cellId.split(":");
14
- const ent = entityMap[rowId];
15
- if (!ent) return;
16
- const { i } = ent;
17
- const cellIndex = pathToIndex[cellPath];
18
- const isBottomRight = i === lastRowIndex && cellIndex === lastCellIndex;
19
- return isBottomRight;
20
- };
@@ -1,15 +0,0 @@
1
- export function isEntityClean(e) {
2
- if (typeof e !== "object" || e === null) {
3
- return true; // or return false depending on what you want for non-object inputs
4
- }
5
- let isClean = true;
6
- for (const [key, val] of Object.entries(e)) {
7
- if (key === "id") continue;
8
- if (key === "_isClean") continue;
9
- if (val) {
10
- isClean = false;
11
- break;
12
- }
13
- }
14
- return isClean;
15
- }
@@ -1 +0,0 @@
1
- export const PRIMARY_SELECTED_VAL = "main_cell";
@@ -1,350 +0,0 @@
1
- import queryString from "qs";
2
- import { uniqBy, clone, camelCase } from "lodash-es";
3
- import {
4
- getFieldsMappedByCCDisplayName,
5
- tableQueryParamsToHasuraClauses
6
- } from "./tableQueryParamsToHasuraClauses";
7
- import { filterLocalEntitiesToHasura } from "./filterLocalEntitiesToHasura";
8
- import {
9
- addCustomColumnFilters,
10
- initializeHasuraWhereAndFilter
11
- } from "./initializeHasuraWhereAndFilter";
12
-
13
- const defaultPageSizes = [5, 10, 15, 25, 50, 100, 200, 400];
14
-
15
- export { defaultPageSizes };
16
-
17
- export function getMergedOpts(topLevel = {}, instanceLevel = {}) {
18
- const merged = {
19
- ...topLevel,
20
- ...instanceLevel
21
- };
22
- return {
23
- formName: "tgDataTable",
24
- ...merged,
25
- pageSize: merged.controlled_pageSize || merged.pageSize,
26
- defaults: {
27
- pageSize: merged.controlled_pageSize || 25,
28
- order: [], //[-name, statusCode] //an array of camelCase display names with - sign to denote reverse
29
- searchTerm: "",
30
- page: 1,
31
- filters: [
32
- //filters look like this:
33
- // {
34
- // selectedFilter: 'textContains', //camel case
35
- // filterOn: ccDisplayName, //camel case display name if available and string, otherwise path
36
- // filterValue: 'thomas',
37
- // }
38
- ],
39
- ...(topLevel.defaults || {}),
40
- ...(instanceLevel.defaults || {})
41
- }
42
- };
43
- }
44
-
45
- function safeStringify(val) {
46
- if (val !== null && typeof val === "object") {
47
- return JSON.stringify(val);
48
- }
49
- return val;
50
- }
51
-
52
- function safeParse(val) {
53
- try {
54
- return JSON.parse(val);
55
- } catch (e) {
56
- return val;
57
- }
58
- }
59
-
60
- export function getCurrentParamsFromUrl(location, isSimple) {
61
- let { search } = location;
62
- if (isSimple) {
63
- search = window.location.href.split("?")[1] || "";
64
- }
65
-
66
- return parseFilters(queryString.parse(search, { ignoreQueryPrefix: true }));
67
- }
68
-
69
- export function setCurrentParamsOnUrl(newParams, replace, isSimple) {
70
- const stringifiedFilters = stringifyFilters(newParams);
71
- const search = `?${queryString.stringify(stringifiedFilters)}`;
72
- if (isSimple) {
73
- return window.location.replace(
74
- `${window.location.href.split("?")[0]}${search}`
75
- );
76
- }
77
- replace({
78
- search
79
- });
80
- }
81
-
82
- function stringifyFilters(newParams) {
83
- let filters;
84
- if (newParams.filters && newParams.filters.length) {
85
- filters = newParams.filters.reduce(
86
- (acc, { filterOn, selectedFilter, filterValue }, index) => {
87
- acc +=
88
- (index > 0 ? "::" : "") +
89
- `${filterOn}__${camelCase(selectedFilter)}__${safeStringify(
90
- Array.isArray(filterValue) ? filterValue.join(";") : filterValue
91
- )}`;
92
- return acc;
93
- },
94
- ""
95
- );
96
- }
97
- let order;
98
- if (newParams.order && newParams.order.length) {
99
- order = newParams.order.reduce((acc, order, index) => {
100
- acc += (index > 0 ? "___" : "") + order;
101
- return acc;
102
- }, "");
103
- }
104
- return {
105
- ...newParams,
106
- filters,
107
- order
108
- };
109
- }
110
- function parseFilters(newParams) {
111
- return {
112
- ...newParams,
113
- order: newParams.order && newParams.order.split("___"),
114
- filters:
115
- newParams.filters &&
116
- newParams.filters.split("::").map(filter => {
117
- const splitFilter = filter.split("__");
118
- const [filterOn, selectedFilter, filterValue] = splitFilter;
119
- const parseFilterValue = filterValue => {
120
- if (selectedFilter === "inList" || selectedFilter === "notInList") {
121
- return filterValue.split(";");
122
- }
123
- if (
124
- selectedFilter === "inRange" ||
125
- selectedFilter === "outsideRange"
126
- ) {
127
- return filterValue.split(";").map(Number);
128
- }
129
- return safeParse(filterValue);
130
- };
131
- return {
132
- filterOn,
133
- selectedFilter,
134
- filterValue: parseFilterValue(filterValue)
135
- };
136
- })
137
- };
138
- }
139
-
140
- export function makeDataTableHandlers({
141
- setNewParams,
142
- defaults,
143
- onlyOneFilter
144
- }) {
145
- //all of these actions have currentParams bound to them as their last arg in withTableParams
146
- const setSearchTerm = searchTerm => {
147
- setNewParams(prev => ({
148
- ...(prev ?? {}),
149
- page: undefined, //set page undefined to return the table to page 1
150
- searchTerm: searchTerm === defaults.searchTerm ? undefined : searchTerm
151
- }));
152
- onlyOneFilter && clearFilters();
153
- };
154
-
155
- const addFilters = newFilters => {
156
- if (!newFilters) return;
157
- setNewParams(prev => {
158
- const filters = uniqBy(
159
- [...newFilters, ...(onlyOneFilter ? [] : prev?.filters || [])],
160
- "filterOn"
161
- );
162
- return {
163
- ...(prev ?? {}),
164
- page: undefined, //set page undefined to return the table to page 1
165
- filters
166
- };
167
- });
168
- };
169
-
170
- const removeSingleFilter = filterOn =>
171
- setNewParams(prev => {
172
- const filters = prev?.filters
173
- ? prev.filters.filter(filter => {
174
- return filter.filterOn !== filterOn;
175
- })
176
- : undefined;
177
- return { ...(prev ?? {}), filters };
178
- });
179
-
180
- const clearFilters = (additionalFilterKeys = []) => {
181
- const toClear = {
182
- filters: undefined,
183
- searchTerm: undefined,
184
- tags: undefined
185
- };
186
- additionalFilterKeys.forEach(key => {
187
- toClear[key] = undefined;
188
- });
189
- setNewParams(toClear);
190
- };
191
-
192
- const setPageSize = pageSize =>
193
- setNewParams(prev => ({
194
- ...(prev ?? {}),
195
- pageSize: pageSize === defaults.pageSize ? undefined : pageSize,
196
- page: undefined //set page undefined to return the table to page 1
197
- }));
198
-
199
- const setOrder = (order, isRemove, shiftHeld) =>
200
- setNewParams(prev => {
201
- let newOrder = [];
202
- if (shiftHeld) {
203
- //first remove the old order
204
- newOrder = [...(prev?.order || [])].filter(value => {
205
- const shouldRemove =
206
- value.replace(/^-/, "") === order.replace(/^-/, "");
207
- return !shouldRemove;
208
- });
209
- //then, if we are adding, pop the order onto the array
210
- if (!isRemove) {
211
- newOrder.push(order);
212
- }
213
- } else {
214
- if (isRemove) {
215
- newOrder = [];
216
- } else {
217
- newOrder = [order];
218
- }
219
- }
220
- return {
221
- ...(prev ?? {}),
222
- order: newOrder
223
- };
224
- });
225
-
226
- const setPage = page => {
227
- setNewParams(prev => ({
228
- ...(prev ?? {}),
229
- page: page === defaults.page ? undefined : page
230
- }));
231
- };
232
-
233
- return {
234
- setSearchTerm,
235
- addFilters,
236
- clearFilters,
237
- removeSingleFilter,
238
- setPageSize,
239
- setPage,
240
- setOrder,
241
- setNewParams
242
- };
243
- }
244
-
245
- export function getQueryParams({
246
- currentParams,
247
- // urlConnected,
248
- defaults,
249
- schema,
250
- isInfinite,
251
- entities,
252
- isLocalCall,
253
- additionalFilter,
254
- doNotCoercePageSize,
255
- noOrderError,
256
- // isCodeModel,
257
- ownProps
258
- }) {
259
- Object.keys(currentParams).forEach(function (key) {
260
- if (currentParams[key] === undefined) {
261
- delete currentParams[key]; //we want to use the default value if any of these are undefined
262
- }
263
- });
264
- const tableQueryParams = {
265
- ...defaults,
266
- ...currentParams
267
- };
268
- let { page, pageSize, searchTerm, filters, order } = tableQueryParams;
269
- if (page <= 0 || isNaN(page)) {
270
- page = undefined;
271
- }
272
- if (isInfinite) {
273
- page = undefined;
274
- pageSize = undefined;
275
- }
276
- if (pageSize !== undefined && !doNotCoercePageSize) {
277
- //pageSize might come in as an unexpected number so we coerce it to be one of the nums in our pageSizes array
278
- const closest = clone(window.tgPageSizes || defaultPageSizes).sort(
279
- (a, b) => Math.abs(pageSize - a) - Math.abs(pageSize - b)
280
- )[0];
281
- pageSize = closest;
282
- }
283
-
284
- const cleanedOrder = [];
285
- if (order && order.length) {
286
- const ccFields = getFieldsMappedByCCDisplayName(schema);
287
- order.forEach(orderVal => {
288
- const ccDisplayName = orderVal.replace(/^-/gi, "");
289
- const schemaForField = ccFields[ccDisplayName];
290
- if (schemaForField) {
291
- const { path } = schemaForField;
292
- const reversed = ccDisplayName !== orderVal;
293
- const prefix = reversed ? "-" : "";
294
- cleanedOrder.push(prefix + path);
295
- } else {
296
- !noOrderError &&
297
- console.error(
298
- "No schema for field found!",
299
- ccDisplayName,
300
- JSON.stringify(schema.fields, null, 2)
301
- );
302
- }
303
- });
304
- }
305
-
306
- let toRet = {
307
- //these are values that might be generally useful for the wrapped component
308
- page,
309
- pageSize: ownProps.controlled_pageSize || pageSize,
310
- order: cleanedOrder,
311
- filters,
312
- searchTerm
313
- };
314
-
315
- const { where, order_by, limit, offset } = tableQueryParamsToHasuraClauses({
316
- page,
317
- pageSize,
318
- searchTerm,
319
- filters,
320
- order: cleanedOrder,
321
- schema
322
- });
323
- initializeHasuraWhereAndFilter(additionalFilter, where, currentParams);
324
- addCustomColumnFilters(where, schema.fields, currentParams);
325
- if (isLocalCall) {
326
- //if the table is local (aka not directly connected to a db) then we need to
327
- //handle filtering/paging/sorting all on the front end
328
- toRet = {
329
- ...toRet,
330
- ...filterLocalEntitiesToHasura(entities, {
331
- where,
332
- order_by,
333
- limit,
334
- offset,
335
- isInfinite
336
- })
337
- };
338
- return toRet;
339
- } else {
340
- return {
341
- ...toRet,
342
- variables: {
343
- where,
344
- order_by,
345
- limit,
346
- offset
347
- }
348
- };
349
- }
350
- }
@@ -1,22 +0,0 @@
1
- import { isEntityClean } from "./isEntityClean";
2
- import { getIdOrCodeOrIndex } from "./getIdOrCodeOrIndex";
3
-
4
- export const removeCleanRows = (entities, cellValidation) => {
5
- const toFilterOut = {};
6
- const entsToUse = (entities || []).filter(e => {
7
- if (!(e._isClean || isEntityClean(e))) return true;
8
- else {
9
- toFilterOut[getIdOrCodeOrIndex(e)] = true;
10
- return false;
11
- }
12
- });
13
-
14
- const validationToUse = {};
15
- Object.entries(cellValidation || {}).forEach(([k, v]) => {
16
- const [rowId] = k.split(":");
17
- if (!toFilterOut[rowId]) {
18
- validationToUse[k] = v;
19
- }
20
- });
21
- return { entsToUse, validationToUse };
22
- };