@teselagen/ui 0.7.35 → 0.8.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 (128) hide show
  1. package/index.cjs.js +1 -2
  2. package/index.es.js +1 -2
  3. package/package.json +1 -1
  4. package/src/DataTable/Columns.js +1 -1
  5. package/src/DataTable/DisplayOptions.js +1 -1
  6. package/src/DataTable/FilterAndSortMenu.js +30 -27
  7. package/src/DataTable/index.js +14 -3
  8. package/src/DataTable/utils/queryParams.js +771 -64
  9. package/src/DataTable/utils/withTableParams.js +16 -3
  10. package/src/index.js +0 -1
  11. package/src/utils/isBeingCalledExcessively.js +14 -7
  12. package/AdvancedOptions.js +0 -33
  13. package/AssignDefaultsModeContext.js +0 -22
  14. package/CellDragHandle.js +0 -132
  15. package/ColumnFilterMenu.js +0 -62
  16. package/Columns.js +0 -979
  17. package/DataTable/utils/filterLocalEntitiesToHasura.d.ts +0 -5
  18. package/DataTable/utils/initializeHasuraWhereAndFilter.d.ts +0 -2
  19. package/DataTable/utils/tableQueryParamsToHasuraClauses.d.ts +0 -26
  20. package/DisabledLoadingComponent.js +0 -15
  21. package/DisplayOptions.js +0 -199
  22. package/DropdownButton.js +0 -36
  23. package/DropdownCell.js +0 -61
  24. package/EditableCell.js +0 -44
  25. package/FillWindow.css +0 -6
  26. package/FillWindow.js +0 -69
  27. package/FilterAndSortMenu.js +0 -391
  28. package/FormSeparator.js +0 -9
  29. package/LoadingDots.js +0 -14
  30. package/MatchHeaders.js +0 -234
  31. package/PagingTool.js +0 -225
  32. package/RenderCell.js +0 -191
  33. package/SearchBar.js +0 -69
  34. package/SimpleStepViz.js +0 -22
  35. package/SortableColumns.js +0 -100
  36. package/TableFormTrackerContext.js +0 -10
  37. package/Tag.js +0 -112
  38. package/ThComponent.js +0 -44
  39. package/TimelineEvent.js +0 -31
  40. package/UploadCsvWizard.css +0 -4
  41. package/UploadCsvWizard.js +0 -719
  42. package/Uploader.js +0 -1278
  43. package/adHoc.js +0 -10
  44. package/autoTooltip.js +0 -201
  45. package/basicHandleActionsWithFullState.js +0 -14
  46. package/browserUtils.js +0 -3
  47. package/combineReducersWithFullState.js +0 -14
  48. package/commandControls.js +0 -82
  49. package/commandUtils.js +0 -112
  50. package/constants.js +0 -1
  51. package/convertSchema.js +0 -69
  52. package/customIcons.js +0 -361
  53. package/dataTableEnhancer.js +0 -41
  54. package/defaultFormatters.js +0 -32
  55. package/defaultValidators.js +0 -40
  56. package/determineBlackOrWhiteTextColor.js +0 -4
  57. package/editCellHelper.js +0 -44
  58. package/formatPasteData.js +0 -16
  59. package/getAllRows.js +0 -11
  60. package/getCellCopyText.js +0 -7
  61. package/getCellInfo.js +0 -36
  62. package/getCellVal.js +0 -20
  63. package/getDayjsFormatter.js +0 -35
  64. package/getFieldPathToField.js +0 -7
  65. package/getIdOrCodeOrIndex.js +0 -9
  66. package/getLastSelectedEntity.js +0 -11
  67. package/getNewEntToSelect.js +0 -25
  68. package/getNewName.js +0 -31
  69. package/getRowCopyText.js +0 -28
  70. package/getTableConfigFromStorage.js +0 -5
  71. package/getTextFromEl.js +0 -28
  72. package/getVals.js +0 -8
  73. package/handleCopyColumn.js +0 -21
  74. package/handleCopyHelper.js +0 -15
  75. package/handleCopyRows.js +0 -23
  76. package/handleCopyTable.js +0 -16
  77. package/handlerHelpers.js +0 -24
  78. package/hotkeyUtils.js +0 -131
  79. package/index.js +0 -1
  80. package/isBeingCalledExcessively.js +0 -32
  81. package/isBottomRightCornerOfRectangle.js +0 -20
  82. package/isEntityClean.js +0 -15
  83. package/isTruthy.js +0 -12
  84. package/isValueEmpty.js +0 -3
  85. package/itemUpload.js +0 -84
  86. package/menuUtils.js +0 -433
  87. package/popoverOverflowModifiers.js +0 -11
  88. package/primarySelectedValue.js +0 -1
  89. package/pureNoFunc.js +0 -31
  90. package/queryParams.js +0 -1058
  91. package/removeCleanRows.js +0 -22
  92. package/renderOnDoc.js +0 -32
  93. package/rerenderOnWindowResize.js +0 -26
  94. package/rowClick.js +0 -181
  95. package/selection.js +0 -8
  96. package/showAppSpinner.js +0 -12
  97. package/showDialogOnDocBody.js +0 -33
  98. package/showProgressToast.js +0 -22
  99. package/sortify.js +0 -73
  100. package/src/DataTable/utils/filterLocalEntitiesToHasura.js +0 -236
  101. package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +0 -587
  102. package/src/DataTable/utils/initializeHasuraWhereAndFilter.js +0 -26
  103. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.js +0 -253
  104. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +0 -206
  105. package/style.css +0 -29
  106. package/tagUtils.js +0 -45
  107. package/tgFormValues.js +0 -35
  108. package/tg_modalState.js +0 -47
  109. package/throwFormError.js +0 -16
  110. package/toastr.js +0 -148
  111. package/tryToMatchSchemas.js +0 -264
  112. package/typeToCommonType.js +0 -6
  113. package/useDeepEqualMemo.js +0 -15
  114. package/useDialog.js +0 -63
  115. package/useStableReference.js +0 -9
  116. package/useTableEntities.js +0 -38
  117. package/useTraceUpdate.js +0 -19
  118. package/utils.js +0 -37
  119. package/validateTableWideErrors.js +0 -160
  120. package/viewColumn.js +0 -97
  121. package/withField.js +0 -20
  122. package/withFields.js +0 -11
  123. package/withLocalStorage.js +0 -11
  124. package/withSelectTableRecords.js +0 -43
  125. package/withSelectedEntities.js +0 -65
  126. package/withStore.js +0 -10
  127. package/withTableParams.js +0 -301
  128. package/wrapDialog.js +0 -116
@@ -1,253 +0,0 @@
1
- import { camelCase, set } from "lodash-es";
2
-
3
- export function tableQueryParamsToHasuraClauses({
4
- page,
5
- pageSize,
6
- searchTerm,
7
- filters,
8
- order,
9
- schema, // Add schema as a parameter
10
- additionalFilter
11
- }) {
12
- const ccFields = getFieldsMappedByCCDisplayName(schema);
13
- let where = {};
14
- const order_by = {};
15
- const limit = pageSize || 25;
16
- const offset = page && pageSize ? (page - 1) * pageSize : 0;
17
-
18
- if (searchTerm) {
19
- const searchTermFilters = [];
20
- schema.fields.forEach(field => {
21
- const { type, path, searchDisabled } = field;
22
- if (searchDisabled || field.filterDisabled || type === "color") return;
23
- const filterValue = searchTerm; // No cleaning needed here, we're using _ilike
24
-
25
- if (type === "string" || type === "lookup") {
26
- const o = set({}, path, { _ilike: `%${filterValue}%` });
27
- searchTermFilters.push(o);
28
- } else if (type === "boolean") {
29
- let regex;
30
- try {
31
- regex = new RegExp("^" + searchTerm, "ig");
32
- } catch (error) {
33
- //ignore
34
- }
35
- if (regex) {
36
- if ("true".replace(regex, "") !== "true") {
37
- const o = set({}, path, { _eq: true });
38
- searchTermFilters.push(o);
39
- } else if ("false".replace(regex, "") !== "false") {
40
- const o = set({}, path, { _eq: false });
41
- searchTermFilters.push(o);
42
- }
43
- }
44
- } else if (
45
- (type === "number" || type === "integer") &&
46
- !isNaN(filterValue)
47
- ) {
48
- const o = set({}, path, { _eq: parseFloat(filterValue) });
49
- searchTermFilters.push(o);
50
- }
51
- });
52
- if (searchTermFilters.length > 0) {
53
- if (Object.keys(where).length > 0) {
54
- where = { _and: [where, { _or: searchTermFilters }] };
55
- } else {
56
- where = { _or: searchTermFilters };
57
- }
58
- }
59
- }
60
-
61
- if (filters && filters.length > 0) {
62
- const filterClauses = filters
63
- .map(filter => {
64
- let { selectedFilter, filterOn, filterValue } = filter;
65
- const fieldSchema = ccFields[filterOn] || {};
66
-
67
- const { path, reference, type } = fieldSchema;
68
- let stringFilterValue =
69
- filterValue && filterValue.toString
70
- ? filterValue.toString()
71
- : filterValue;
72
- if (stringFilterValue === false) {
73
- // we still want to be able to search for the string "false" which will get parsed to false
74
- stringFilterValue = "false";
75
- } else {
76
- stringFilterValue = stringFilterValue || "";
77
- }
78
- const arrayFilterValue = Array.isArray(filterValue)
79
- ? filterValue
80
- : stringFilterValue.split(";");
81
-
82
- if (type === "number" || type === "integer") {
83
- filterValue = Array.isArray(filterValue)
84
- ? filterValue.map(val => Number(val))
85
- : Number(filterValue);
86
- }
87
-
88
- if (fieldSchema.normalizeFilter) {
89
- filterValue = fieldSchema.normalizeFilter(
90
- filterValue,
91
- selectedFilter,
92
- filterOn
93
- );
94
- }
95
-
96
- if (reference) {
97
- filterOn = reference.sourceField;
98
- } else {
99
- filterOn = path || filterOn;
100
- }
101
- switch (selectedFilter) {
102
- case "none":
103
- return {};
104
- case "startsWith":
105
- return { [filterOn]: { _ilike: `${filterValue}%` } };
106
- case "endsWith":
107
- return { [filterOn]: { _ilike: `%${filterValue}` } };
108
- case "contains":
109
- return { [filterOn]: { _ilike: `%${filterValue}%` } };
110
- case "notContains":
111
- return { [filterOn]: { _not_ilike: `%${filterValue}%` } };
112
- case "isExactly":
113
- return { [filterOn]: { _eq: filterValue } };
114
- case "isEmpty":
115
- return {
116
- _or: [
117
- { [filterOn]: { _eq: "" } },
118
- { [filterOn]: { _is_null: true } }
119
- ]
120
- };
121
- case "notEmpty":
122
- return {
123
- _and: [
124
- { [filterOn]: { _neq: "" } },
125
- { [filterOn]: { _is_null: false } }
126
- ]
127
- };
128
- case "inList":
129
- return { [filterOn]: { _in: filterValue } };
130
- case "notInList":
131
- return { [filterOn]: { _nin: filterValue } };
132
- case "true":
133
- return { [filterOn]: { _eq: true } };
134
- case "false":
135
- return { [filterOn]: { _eq: false } };
136
- case "dateIs":
137
- return { [filterOn]: { _eq: filterValue } };
138
- case "notBetween":
139
- return {
140
- _or: [
141
- {
142
- [filterOn]: {
143
- _lt: new Date(arrayFilterValue[0])
144
- }
145
- },
146
- {
147
- [filterOn]: {
148
- _gt: new Date(
149
- new Date(arrayFilterValue[1]).setHours(23, 59)
150
- )
151
- }
152
- }
153
- ]
154
- };
155
- case "isBetween":
156
- return {
157
- [filterOn]: {
158
- _gte: new Date(arrayFilterValue[0]),
159
- _lte: new Date(new Date(arrayFilterValue[1]).setHours(23, 59))
160
- }
161
- };
162
- case "isBefore":
163
- return { [filterOn]: { _lt: new Date(filterValue) } };
164
- case "isAfter":
165
- return { [filterOn]: { _gt: new Date(filterValue) } };
166
- case "greaterThan":
167
- return { [filterOn]: { _gt: parseFloat(filterValue) } };
168
- case "lessThan":
169
- return { [filterOn]: { _lt: parseFloat(filterValue) } };
170
- case "inRange":
171
- return {
172
- [filterOn]: {
173
- _gte: parseFloat(arrayFilterValue[0]),
174
- _lte: parseFloat(arrayFilterValue[1])
175
- }
176
- };
177
- case "outsideRange":
178
- return {
179
- _or: [
180
- {
181
- [filterOn]: {
182
- _lt: parseFloat(arrayFilterValue[0])
183
- }
184
- },
185
- {
186
- [filterOn]: {
187
- _gt: parseFloat(arrayFilterValue[1])
188
- }
189
- }
190
- ]
191
- };
192
- case "equalTo":
193
- return { [filterOn]: { _eq: parseFloat(filterValue) } };
194
- case "regex":
195
- return { [filterOn]: { _regex: filterValue } };
196
- default:
197
- console.warn(`Unsupported filter type: ${selectedFilter}`);
198
- return {};
199
- }
200
- })
201
- .map(filter => {
202
- const o = {};
203
- set(o, Object.keys(filter)[0], filter[Object.keys(filter)[0]]);
204
- return o;
205
- });
206
-
207
- if (filterClauses.length > 0) {
208
- if (Object.keys(where).length > 0) {
209
- where = { _and: [where, ...filterClauses] };
210
- } else {
211
- where = { _and: filterClauses };
212
- }
213
- }
214
- }
215
-
216
- if (order && order.length > 0) {
217
- order.forEach(item => {
218
- const field = item.startsWith("-") ? item.substring(1) : item;
219
- const direction = item.startsWith("-") ? "desc" : "asc";
220
- order_by[field] = direction;
221
- });
222
- }
223
-
224
- if (additionalFilter) {
225
- where = { _and: [where, additionalFilter] };
226
- }
227
- return { where, order_by, limit, offset };
228
- }
229
-
230
- /**
231
- * Takes a schema and returns an object with the fields mapped by their camelCased display name.
232
- * If the displayName is not set or is a jsx element, the path is used instead.
233
- * The same conversion must be done when using the result of this method
234
- */
235
- export function getFieldsMappedByCCDisplayName(schema) {
236
- if (!schema || !schema.fields) return {};
237
- return schema.fields.reduce((acc, field) => {
238
- const ccDisplayName = getCCDisplayName(field);
239
- acc[ccDisplayName] = field;
240
- return acc;
241
- }, {});
242
- }
243
-
244
- /**
245
- *
246
- * @param {object} field
247
- * @returns the camelCase display name of the field, to be used for filters, sorting, etc
248
- */
249
- export function getCCDisplayName(field) {
250
- return camelCase(
251
- typeof field.displayName === "string" ? field.displayName : field.path
252
- );
253
- }
@@ -1,206 +0,0 @@
1
- import { tableQueryParamsToHasuraClauses } from "./tableQueryParamsToHasuraClauses";
2
-
3
- describe("tableQueryParamsToHasuraClauses", () => {
4
- const schema = {
5
- fields: [
6
- { path: "name", type: "string" },
7
- { path: "age", type: "number" },
8
- { path: "isActive", type: "boolean" },
9
- { path: "email", type: "string" }
10
- ]
11
- };
12
-
13
- it("should handle empty query params", () => {
14
- const result = tableQueryParamsToHasuraClauses({});
15
- expect(result).toEqual({
16
- where: {},
17
- order_by: {},
18
- limit: 25,
19
- offset: 0
20
- });
21
- });
22
-
23
- it("should handle page and pageSize", () => {
24
- const result = tableQueryParamsToHasuraClauses({ page: 2, pageSize: 10 });
25
- expect(result).toEqual({
26
- where: {},
27
- order_by: {},
28
- limit: 10,
29
- offset: 10
30
- });
31
- });
32
-
33
- it("should handle searchTerm with string fields", () => {
34
- const result = tableQueryParamsToHasuraClauses({
35
- searchTerm: "test",
36
- schema
37
- });
38
- expect(result).toEqual({
39
- where: {
40
- _or: [{ name: { _ilike: "%test%" } }, { email: { _ilike: "%test%" } }]
41
- },
42
- order_by: {},
43
- limit: 25,
44
- offset: 0
45
- });
46
- });
47
-
48
- it("should handle searchTerm with number fields", () => {
49
- const result = tableQueryParamsToHasuraClauses({
50
- searchTerm: "30",
51
- schema
52
- });
53
- expect(result).toEqual({
54
- where: {
55
- _or: [
56
- { name: { _ilike: "%30%" } },
57
- { age: { _eq: 30 } },
58
- { email: { _ilike: "%30%" } }
59
- ]
60
- },
61
- order_by: {},
62
- limit: 25,
63
- offset: 0
64
- });
65
- });
66
-
67
- it("should handle searchTerm with boolean fields", () => {
68
- const result = tableQueryParamsToHasuraClauses({
69
- searchTerm: "true",
70
- schema
71
- });
72
- expect(result).toEqual({
73
- where: {
74
- _or: [
75
- { name: { _ilike: "%true%" } },
76
- { isActive: { _eq: true } },
77
- { email: { _ilike: "%true%" } }
78
- ]
79
- },
80
- order_by: {},
81
- limit: 25,
82
- offset: 0
83
- });
84
- });
85
-
86
- it("should handle searchTerm with multiple field types", () => {
87
- const result = tableQueryParamsToHasuraClauses({
88
- searchTerm: "test",
89
- schema
90
- });
91
- expect(result).toEqual({
92
- where: {
93
- _or: [{ name: { _ilike: "%test%" } }, { email: { _ilike: "%test%" } }]
94
- },
95
- order_by: {},
96
- limit: 25,
97
- offset: 0
98
- });
99
- });
100
-
101
- it("should handle contains filter", () => {
102
- const result = tableQueryParamsToHasuraClauses({
103
- filters: [
104
- {
105
- selectedFilter: "contains",
106
- filterOn: "name",
107
- filterValue: "test"
108
- }
109
- ]
110
- });
111
- expect(result).toEqual({
112
- where: { _and: [{ name: { _ilike: "%test%" } }] },
113
- order_by: {},
114
- limit: 25,
115
- offset: 0
116
- });
117
- });
118
-
119
- it("should handle equalTo filter for number", () => {
120
- const result = tableQueryParamsToHasuraClauses({
121
- filters: [
122
- { selectedFilter: "equalTo", filterOn: "age", filterValue: "30" }
123
- ],
124
- schema
125
- });
126
- expect(result).toEqual({
127
- where: { _and: [{ age: { _eq: 30 } }] },
128
- order_by: {},
129
- limit: 25,
130
- offset: 0
131
- });
132
- });
133
-
134
- it("should handle order", () => {
135
- const result = tableQueryParamsToHasuraClauses({ order: ["name", "-age"] });
136
- expect(result).toEqual({
137
- where: {},
138
- order_by: { name: "asc", age: "desc" },
139
- limit: 25,
140
- offset: 0
141
- });
142
- });
143
-
144
- it("should combine all params", () => {
145
- const result = tableQueryParamsToHasuraClauses({
146
- page: 2,
147
- pageSize: 10,
148
- searchTerm: "test",
149
- filters: [
150
- {
151
- selectedFilter: "greaterThan",
152
- filterOn: "age",
153
- filterValue: "30"
154
- }
155
- ],
156
- order: ["name"],
157
- schema
158
- });
159
- expect(result).toEqual({
160
- where: {
161
- _and: [
162
- {
163
- _or: [
164
- { name: { _ilike: "%test%" } },
165
- { email: { _ilike: "%test%" } }
166
- ]
167
- },
168
- { age: { _gt: 30 } }
169
- ]
170
- },
171
- order_by: { name: "asc" },
172
- limit: 10,
173
- offset: 10
174
- });
175
- });
176
-
177
- it("should combine searchTerm and filters", () => {
178
- const result = tableQueryParamsToHasuraClauses({
179
- searchTerm: "test",
180
- filters: [
181
- {
182
- selectedFilter: "greaterThan",
183
- filterOn: "age",
184
- filterValue: "30"
185
- }
186
- ],
187
- schema
188
- });
189
- expect(result).toEqual({
190
- where: {
191
- _and: [
192
- {
193
- _or: [
194
- { name: { _ilike: "%test%" } },
195
- { email: { _ilike: "%test%" } }
196
- ]
197
- },
198
- { age: { _gt: 30 } }
199
- ]
200
- },
201
- order_by: {},
202
- limit: 25,
203
- offset: 0
204
- });
205
- });
206
- });
package/style.css DELETED
@@ -1,29 +0,0 @@
1
- /* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
2
- .tg-timeline {
3
- position: relative;
4
- white-space: nowrap;
5
- }
6
-
7
- .tg-timeline-line {
8
- position: absolute;
9
- height: 90%;
10
- border-left: 2px solid #bfccd6;
11
- top: 3px;
12
- left: 5px;
13
- }
14
-
15
- .tg-timeline-event {
16
- margin-bottom: 15px;
17
- }
18
-
19
- .tg-timeline-circle {
20
- width: 12px;
21
- min-width: 12px;
22
- height: 12px;
23
- min-height: 12px;
24
- z-index: 1;
25
- margin-right: 10px;
26
- border-radius: 100px;
27
- background: #e1e8ed;
28
- border: 2px solid #137cbd;
29
- }
package/tagUtils.js DELETED
@@ -1,45 +0,0 @@
1
- import { flatMap, keyBy } from "lodash-es";
2
- import determineBlackOrWhiteTextColor from "./determineBlackOrWhiteTextColor";
3
-
4
- export function getTagsAndTagOptions(allTags) {
5
- return flatMap(allTags, tag => {
6
- if (tag.tagOptions && tag.tagOptions.length) {
7
- return tag.tagOptions.map(tagO => {
8
- const fullname = `${tag.name}: ${tagO.name}`;
9
- const value = `${tag.id}:${tagO.id}`;
10
- return {
11
- ...tagO,
12
- label: fullname,
13
- value,
14
- id: tagO.id
15
- };
16
- });
17
- }
18
- return {
19
- ...tag,
20
- label: tag.name,
21
- value: tag.id
22
- };
23
- });
24
- }
25
-
26
- export function getKeyedTagsAndTagOptions(tags) {
27
- return keyBy(getTagsAndTagOptions(tags), "value");
28
- }
29
-
30
- export function getTagColorStyle(color) {
31
- return color
32
- ? {
33
- style: {
34
- backgroundColor: color,
35
- color: determineBlackOrWhiteTextColor(color)
36
- }
37
- }
38
- : {};
39
- }
40
- export function getTagProps({ color, label, name }) {
41
- return {
42
- ...getTagColorStyle(color),
43
- children: label || name
44
- };
45
- }
package/tgFormValues.js DELETED
@@ -1,35 +0,0 @@
1
- import React, { useMemo } from "react";
2
- import { connect } from "react-redux";
3
- import { FormName, formValueSelector } from "redux-form";
4
-
5
- const tgFormValues =
6
- (...fieldNames) =>
7
- Component =>
8
- props => {
9
- return (
10
- <FormName>
11
- {formName => {
12
- const name = formName.form;
13
- const Wrapped = useMemo(() => {
14
- const selector = formValueSelector(name || "");
15
- const wrapper = connect(state => {
16
- const vals = {};
17
- fieldNames.forEach(name => {
18
- vals[name] = selector(state, name);
19
- });
20
- return vals;
21
- });
22
- return wrapper(Component);
23
- }, [name]);
24
- return <Wrapped {...props} />;
25
- }}
26
- </FormName>
27
- );
28
- };
29
- export default tgFormValues;
30
-
31
- export const tgFormValueSelector = (formName, ...fields) => {
32
- return connect(state => {
33
- return formValueSelector(formName)(state, ...fields);
34
- });
35
- };
package/tg_modalState.js DELETED
@@ -1,47 +0,0 @@
1
- import { omit } from "lodash-es";
2
-
3
- export default function tg_modalState(
4
- state = {},
5
- { type, name, uniqueName, props = {} }
6
- ) {
7
- const existingModalState = state[name] || {};
8
- const { __registeredAs = {} } = existingModalState;
9
- if (type === "TG_REGISTER_MODAL") {
10
- return {
11
- ...state,
12
- [name]: {
13
- ...existingModalState,
14
- __registeredAs: { ...__registeredAs, [uniqueName]: true }
15
- }
16
- };
17
- }
18
- if (type === "TG_UNREGISTER_MODAL") {
19
- return {
20
- ...state,
21
- [name]: {
22
- ...existingModalState,
23
- __registeredAs: omit(__registeredAs, uniqueName)
24
- }
25
- };
26
- }
27
- if (type === "TG_SHOW_MODAL") {
28
- return {
29
- ...state,
30
- [name]: {
31
- ...existingModalState,
32
- ...props,
33
- open: true
34
- }
35
- };
36
- }
37
- if (type === "TG_HIDE_MODAL") {
38
- return {
39
- ...state,
40
- [name]: {
41
- __registeredAs: existingModalState.__registeredAs,
42
- open: false
43
- }
44
- };
45
- }
46
- return state;
47
- }
package/throwFormError.js DELETED
@@ -1,16 +0,0 @@
1
- import { SubmissionError } from "redux-form";
2
-
3
- export const throwFormError = error => {
4
- if (error.message) {
5
- console.error("error:", error);
6
- }
7
- const errorToUse = error.message
8
- ? { _error: error.message }
9
- : typeof error === "string"
10
- ? { _error: error }
11
- : error;
12
- if (!errorToUse._error) {
13
- errorToUse._error = "Error Submitting Form";
14
- }
15
- throw new SubmissionError(errorToUse);
16
- };