@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.
- package/index.cjs.js +1 -2
- package/index.es.js +1 -2
- package/package.json +1 -1
- package/src/DataTable/Columns.js +1 -1
- package/src/DataTable/DisplayOptions.js +1 -1
- package/src/DataTable/FilterAndSortMenu.js +30 -27
- package/src/DataTable/index.js +14 -3
- package/src/DataTable/utils/queryParams.js +771 -64
- package/src/DataTable/utils/withTableParams.js +16 -3
- package/src/index.js +0 -1
- package/src/utils/isBeingCalledExcessively.js +14 -7
- package/AdvancedOptions.js +0 -33
- package/AssignDefaultsModeContext.js +0 -22
- package/CellDragHandle.js +0 -132
- package/ColumnFilterMenu.js +0 -62
- package/Columns.js +0 -979
- package/DataTable/utils/filterLocalEntitiesToHasura.d.ts +0 -5
- package/DataTable/utils/initializeHasuraWhereAndFilter.d.ts +0 -2
- package/DataTable/utils/tableQueryParamsToHasuraClauses.d.ts +0 -26
- package/DisabledLoadingComponent.js +0 -15
- package/DisplayOptions.js +0 -199
- package/DropdownButton.js +0 -36
- package/DropdownCell.js +0 -61
- package/EditableCell.js +0 -44
- package/FillWindow.css +0 -6
- package/FillWindow.js +0 -69
- package/FilterAndSortMenu.js +0 -391
- package/FormSeparator.js +0 -9
- package/LoadingDots.js +0 -14
- package/MatchHeaders.js +0 -234
- package/PagingTool.js +0 -225
- package/RenderCell.js +0 -191
- package/SearchBar.js +0 -69
- package/SimpleStepViz.js +0 -22
- package/SortableColumns.js +0 -100
- package/TableFormTrackerContext.js +0 -10
- package/Tag.js +0 -112
- package/ThComponent.js +0 -44
- package/TimelineEvent.js +0 -31
- package/UploadCsvWizard.css +0 -4
- package/UploadCsvWizard.js +0 -719
- package/Uploader.js +0 -1278
- package/adHoc.js +0 -10
- package/autoTooltip.js +0 -201
- package/basicHandleActionsWithFullState.js +0 -14
- package/browserUtils.js +0 -3
- package/combineReducersWithFullState.js +0 -14
- package/commandControls.js +0 -82
- package/commandUtils.js +0 -112
- package/constants.js +0 -1
- package/convertSchema.js +0 -69
- package/customIcons.js +0 -361
- package/dataTableEnhancer.js +0 -41
- package/defaultFormatters.js +0 -32
- package/defaultValidators.js +0 -40
- package/determineBlackOrWhiteTextColor.js +0 -4
- package/editCellHelper.js +0 -44
- package/formatPasteData.js +0 -16
- package/getAllRows.js +0 -11
- package/getCellCopyText.js +0 -7
- package/getCellInfo.js +0 -36
- package/getCellVal.js +0 -20
- package/getDayjsFormatter.js +0 -35
- package/getFieldPathToField.js +0 -7
- package/getIdOrCodeOrIndex.js +0 -9
- package/getLastSelectedEntity.js +0 -11
- package/getNewEntToSelect.js +0 -25
- package/getNewName.js +0 -31
- package/getRowCopyText.js +0 -28
- package/getTableConfigFromStorage.js +0 -5
- package/getTextFromEl.js +0 -28
- package/getVals.js +0 -8
- package/handleCopyColumn.js +0 -21
- package/handleCopyHelper.js +0 -15
- package/handleCopyRows.js +0 -23
- package/handleCopyTable.js +0 -16
- package/handlerHelpers.js +0 -24
- package/hotkeyUtils.js +0 -131
- package/index.js +0 -1
- package/isBeingCalledExcessively.js +0 -32
- package/isBottomRightCornerOfRectangle.js +0 -20
- package/isEntityClean.js +0 -15
- package/isTruthy.js +0 -12
- package/isValueEmpty.js +0 -3
- package/itemUpload.js +0 -84
- package/menuUtils.js +0 -433
- package/popoverOverflowModifiers.js +0 -11
- package/primarySelectedValue.js +0 -1
- package/pureNoFunc.js +0 -31
- package/queryParams.js +0 -1058
- package/removeCleanRows.js +0 -22
- package/renderOnDoc.js +0 -32
- package/rerenderOnWindowResize.js +0 -26
- package/rowClick.js +0 -181
- package/selection.js +0 -8
- package/showAppSpinner.js +0 -12
- package/showDialogOnDocBody.js +0 -33
- package/showProgressToast.js +0 -22
- package/sortify.js +0 -73
- package/src/DataTable/utils/filterLocalEntitiesToHasura.js +0 -236
- package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +0 -587
- package/src/DataTable/utils/initializeHasuraWhereAndFilter.js +0 -26
- package/src/DataTable/utils/tableQueryParamsToHasuraClauses.js +0 -253
- package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +0 -206
- package/style.css +0 -29
- package/tagUtils.js +0 -45
- package/tgFormValues.js +0 -35
- package/tg_modalState.js +0 -47
- package/throwFormError.js +0 -16
- package/toastr.js +0 -148
- package/tryToMatchSchemas.js +0 -264
- package/typeToCommonType.js +0 -6
- package/useDeepEqualMemo.js +0 -15
- package/useDialog.js +0 -63
- package/useStableReference.js +0 -9
- package/useTableEntities.js +0 -38
- package/useTraceUpdate.js +0 -19
- package/utils.js +0 -37
- package/validateTableWideErrors.js +0 -160
- package/viewColumn.js +0 -97
- package/withField.js +0 -20
- package/withFields.js +0 -11
- package/withLocalStorage.js +0 -11
- package/withSelectTableRecords.js +0 -43
- package/withSelectedEntities.js +0 -65
- package/withStore.js +0 -10
- package/withTableParams.js +0 -301
- package/wrapDialog.js +0 -116
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { getIdOrCodeOrIndex } from "./utils";
|
|
2
|
-
import { getCellVal } from "./getCellVal";
|
|
3
|
-
import { forEach, isArray } from "lodash-es";
|
|
4
|
-
import { startCase } from "lodash-es";
|
|
5
|
-
import { camelCase } from "lodash-es";
|
|
6
|
-
|
|
7
|
-
const uniqueMsg = "This value must be unique";
|
|
8
|
-
export function validateTableWideErrors({
|
|
9
|
-
entities,
|
|
10
|
-
schema,
|
|
11
|
-
optionalUserSchema,
|
|
12
|
-
newCellValidate
|
|
13
|
-
}) {
|
|
14
|
-
forEach(newCellValidate, (err, cellId) => {
|
|
15
|
-
if (err && err._isTableWideError) {
|
|
16
|
-
delete newCellValidate[cellId];
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
if (schema.tableWideValidation) {
|
|
20
|
-
const newErrs = schema.tableWideValidation({
|
|
21
|
-
entities
|
|
22
|
-
});
|
|
23
|
-
forEach(newErrs, (err, cellId) => {
|
|
24
|
-
newCellValidate[cellId] = {
|
|
25
|
-
message: err,
|
|
26
|
-
_isTableWideError: true
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
const displayNameMap = {};
|
|
31
|
-
const fieldUpperToPath = {};
|
|
32
|
-
|
|
33
|
-
forEach(schema.fields, f => {
|
|
34
|
-
fieldUpperToPath[f.path.toUpperCase()] = f.path;
|
|
35
|
-
displayNameMap[f.path] = f.displayName || startCase(camelCase(f.path));
|
|
36
|
-
});
|
|
37
|
-
function getDisplayName(path) {
|
|
38
|
-
return displayNameMap[path] || startCase(camelCase(path));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (schema.requireAtLeastOneOf) {
|
|
42
|
-
//make sure at least one of the required fields is present
|
|
43
|
-
(isArray(schema.requireAtLeastOneOf[0])
|
|
44
|
-
? schema.requireAtLeastOneOf
|
|
45
|
-
: [schema.requireAtLeastOneOf]
|
|
46
|
-
).forEach(alo => {
|
|
47
|
-
entities.forEach(entity => {
|
|
48
|
-
if (!alo.some(path => getCellVal(entity, path))) {
|
|
49
|
-
alo.forEach(path => {
|
|
50
|
-
const cellId = `${getIdOrCodeOrIndex(entity)}:${path}`;
|
|
51
|
-
newCellValidate[cellId] = {
|
|
52
|
-
message: `At least one of these fields must be present - ${alo
|
|
53
|
-
.map(getDisplayName)
|
|
54
|
-
.join(", ")}`,
|
|
55
|
-
_isTableWideError: true
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
if (schema.requireExactlyOneOf) {
|
|
63
|
-
(isArray(schema.requireExactlyOneOf[0])
|
|
64
|
-
? schema.requireExactlyOneOf
|
|
65
|
-
: [schema.requireExactlyOneOf]
|
|
66
|
-
).forEach(reqs => {
|
|
67
|
-
entities.forEach(entity => {
|
|
68
|
-
const present = reqs.filter(path => getCellVal(entity, path));
|
|
69
|
-
if (present.length !== 1) {
|
|
70
|
-
reqs.forEach(path => {
|
|
71
|
-
const cellId = `${getIdOrCodeOrIndex(entity)}:${path}`;
|
|
72
|
-
const fields = reqs.map(getDisplayName).join(", ");
|
|
73
|
-
const err = {
|
|
74
|
-
message:
|
|
75
|
-
present.length === 0
|
|
76
|
-
? `One of these fields is required - ${fields}`
|
|
77
|
-
: `Cannot have more than one of these fields - ${fields}`,
|
|
78
|
-
_isTableWideError: true
|
|
79
|
-
};
|
|
80
|
-
newCellValidate[cellId] = err;
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const requireIfs = [];
|
|
88
|
-
schema.fields.forEach(col => {
|
|
89
|
-
const { path, requireIf } = col;
|
|
90
|
-
if (requireIf) {
|
|
91
|
-
const requireIfPath = fieldUpperToPath[requireIf.toUpperCase()];
|
|
92
|
-
requireIfs.push([requireIfPath, path]);
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
requireIfs.forEach(([requireIfPath, path]) => {
|
|
96
|
-
entities.forEach(entity => {
|
|
97
|
-
const requireIfVal = getCellVal(entity, requireIfPath);
|
|
98
|
-
const pathVal = getCellVal(entity, path);
|
|
99
|
-
if (requireIfVal && !pathVal) {
|
|
100
|
-
const cellId = `${getIdOrCodeOrIndex(entity)}:${path}`;
|
|
101
|
-
newCellValidate[cellId] = {
|
|
102
|
-
message: `This field is required if ${displayNameMap[requireIfPath]} is present`,
|
|
103
|
-
_isTableWideError: true
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
if (schema.requireAllOrNone) {
|
|
109
|
-
(isArray(schema.requireAllOrNone[0])
|
|
110
|
-
? schema.requireAllOrNone
|
|
111
|
-
: [schema.requireAllOrNone]
|
|
112
|
-
).forEach(reqs => {
|
|
113
|
-
entities.forEach(entity => {
|
|
114
|
-
const present = reqs.filter(path => getCellVal(entity, path));
|
|
115
|
-
if (present.length && present.length !== reqs.length) {
|
|
116
|
-
reqs.forEach(path => {
|
|
117
|
-
const cellId = `${getIdOrCodeOrIndex(entity)}:${path}`;
|
|
118
|
-
const fields = reqs.map(getDisplayName).join(", ");
|
|
119
|
-
const err = {
|
|
120
|
-
message: `Please specify either ALL of the following fields or NONE of them - ${fields}`,
|
|
121
|
-
_isTableWideError: true
|
|
122
|
-
};
|
|
123
|
-
newCellValidate[cellId] = err;
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
schema.fields.forEach(col => {
|
|
131
|
-
let { path, isUnique } = col;
|
|
132
|
-
if (isUnique) {
|
|
133
|
-
if (optionalUserSchema) {
|
|
134
|
-
path = col.matches[0].item.path;
|
|
135
|
-
}
|
|
136
|
-
const existingVals = {};
|
|
137
|
-
entities.forEach(entity => {
|
|
138
|
-
const val = getCellVal(entity, path, col);
|
|
139
|
-
if (!val) return;
|
|
140
|
-
const cellId = `${getIdOrCodeOrIndex(entity)}:${path}`;
|
|
141
|
-
if (existingVals[val]) {
|
|
142
|
-
newCellValidate[cellId] = {
|
|
143
|
-
message: uniqueMsg,
|
|
144
|
-
_isTableWideError: true
|
|
145
|
-
};
|
|
146
|
-
newCellValidate[existingVals[val]] = {
|
|
147
|
-
message: uniqueMsg,
|
|
148
|
-
_isTableWideError: true
|
|
149
|
-
};
|
|
150
|
-
} else {
|
|
151
|
-
if (newCellValidate[cellId] === uniqueMsg) {
|
|
152
|
-
delete newCellValidate[cellId];
|
|
153
|
-
}
|
|
154
|
-
existingVals[val] = cellId;
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
return newCellValidate;
|
|
160
|
-
}
|
package/viewColumn.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Icon, Button, Tooltip } from "@blueprintjs/core";
|
|
3
|
-
import { reduce } from "lodash-es";
|
|
4
|
-
|
|
5
|
-
export const viewColumn = {
|
|
6
|
-
width: 35,
|
|
7
|
-
noEllipsis: true,
|
|
8
|
-
hideInMenu: true,
|
|
9
|
-
immovable: true,
|
|
10
|
-
type: "action",
|
|
11
|
-
render: () => {
|
|
12
|
-
return <Icon className="dt-eyeIcon" icon="eye-open" />;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export const openColumn = ({ onDoubleClick, history }) => ({
|
|
17
|
-
...viewColumn,
|
|
18
|
-
render: (val, record, rowInfo) => {
|
|
19
|
-
return (
|
|
20
|
-
<Tooltip content="Open">
|
|
21
|
-
<Button
|
|
22
|
-
onClick={e => {
|
|
23
|
-
e.stopPropagation();
|
|
24
|
-
onDoubleClick &&
|
|
25
|
-
onDoubleClick(rowInfo.original, rowInfo.index, history);
|
|
26
|
-
}}
|
|
27
|
-
minimal
|
|
28
|
-
small
|
|
29
|
-
className="dt-eyeIcon"
|
|
30
|
-
icon="document-open"
|
|
31
|
-
/>
|
|
32
|
-
</Tooltip>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
export const multiViewColumn = {
|
|
38
|
-
...viewColumn,
|
|
39
|
-
columnHeader: ({ recordIdToIsVisibleMap, setRecordIdToIsVisibleMap }) => {
|
|
40
|
-
const allVisible = reduce(
|
|
41
|
-
recordIdToIsVisibleMap,
|
|
42
|
-
(acc, val) => acc && val,
|
|
43
|
-
true
|
|
44
|
-
);
|
|
45
|
-
return (
|
|
46
|
-
<Tooltip content={allVisible ? "Hide All" : "Show All"}>
|
|
47
|
-
<Button
|
|
48
|
-
className={`showHideAllButton-${allVisible ? "visible" : "hidden"}`}
|
|
49
|
-
minimal
|
|
50
|
-
onClick={() => {
|
|
51
|
-
setRecordIdToIsVisibleMap(
|
|
52
|
-
reduce(
|
|
53
|
-
recordIdToIsVisibleMap,
|
|
54
|
-
(acc, val, key) => {
|
|
55
|
-
acc[key] = !allVisible;
|
|
56
|
-
return acc;
|
|
57
|
-
},
|
|
58
|
-
{}
|
|
59
|
-
)
|
|
60
|
-
);
|
|
61
|
-
}}
|
|
62
|
-
icon={allVisible ? "eye-open" : "eye-off"}
|
|
63
|
-
/>
|
|
64
|
-
</Tooltip>
|
|
65
|
-
);
|
|
66
|
-
},
|
|
67
|
-
render: (
|
|
68
|
-
val,
|
|
69
|
-
record,
|
|
70
|
-
row,
|
|
71
|
-
{ recordIdToIsVisibleMap, setRecordIdToIsVisibleMap }
|
|
72
|
-
) => {
|
|
73
|
-
if (!recordIdToIsVisibleMap) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
const isVisible = recordIdToIsVisibleMap[record.id];
|
|
77
|
-
return (
|
|
78
|
-
<Tooltip content={isVisible ? "Hide" : "Show"}>
|
|
79
|
-
<Button
|
|
80
|
-
onClick={e => {
|
|
81
|
-
e.stopPropagation();
|
|
82
|
-
e.preventDefault();
|
|
83
|
-
setRecordIdToIsVisibleMap(
|
|
84
|
-
Object.assign({}, recordIdToIsVisibleMap, {
|
|
85
|
-
[record.id]: !isVisible
|
|
86
|
-
})
|
|
87
|
-
);
|
|
88
|
-
}}
|
|
89
|
-
minimal
|
|
90
|
-
small
|
|
91
|
-
className={`showHideButton-${isVisible ? "visible" : "hidden"}-${record.id}`}
|
|
92
|
-
icon={isVisible ? "eye-open" : "eye-off"}
|
|
93
|
-
/>
|
|
94
|
-
</Tooltip>
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
};
|
package/withField.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Field } from "redux-form";
|
|
3
|
-
import { fieldRequired } from "../FormComponents/utils";
|
|
4
|
-
|
|
5
|
-
//simple enhancer that wraps a component in a redux <Field/> component
|
|
6
|
-
//all options are passed as props to <Field/>
|
|
7
|
-
export default function WithField(fieldProps) {
|
|
8
|
-
return function AddFieldHOC(Component) {
|
|
9
|
-
return function AddField({ isRequired, ...rest }) {
|
|
10
|
-
return (
|
|
11
|
-
<Field
|
|
12
|
-
{...(isRequired && { validate: fieldRequired })}
|
|
13
|
-
{...fieldProps}
|
|
14
|
-
{...rest}
|
|
15
|
-
component={Component}
|
|
16
|
-
/>
|
|
17
|
-
);
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
}
|
package/withFields.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Fields } from "redux-form";
|
|
3
|
-
//simple enhancer that wraps a component in a redux <Fields/> component
|
|
4
|
-
//all options are passed as props to <Fields/>
|
|
5
|
-
export default function WithFields(fieldsProps) {
|
|
6
|
-
return function AddFieldsHOC(Component) {
|
|
7
|
-
return function AddFields(props) {
|
|
8
|
-
return <Fields {...fieldsProps} {...props} component={Component} />;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
}
|
package/withLocalStorage.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Field } from "redux-form";
|
|
3
|
-
//simple enhancer that wraps a component in a redux <Field/> component
|
|
4
|
-
//all options are passed as props to <Field/>
|
|
5
|
-
export default function WithField(fieldProps) {
|
|
6
|
-
return function AddFieldHOC(Component) {
|
|
7
|
-
return function AddField(props) {
|
|
8
|
-
return <Field {...fieldProps} {...props} component={Component} />;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
|
|
2
|
-
import { compose, withHandlers } from "recompose";
|
|
3
|
-
import { connect } from "react-redux";
|
|
4
|
-
import { change, initialize } from "redux-form";
|
|
5
|
-
|
|
6
|
-
export default function (_tableFormName, propName = "selectTableRecords") {
|
|
7
|
-
return compose(
|
|
8
|
-
connect(null, {
|
|
9
|
-
changeFormValue: change,
|
|
10
|
-
initializeForm: initialize
|
|
11
|
-
}),
|
|
12
|
-
withHandlers({
|
|
13
|
-
[propName]:
|
|
14
|
-
props =>
|
|
15
|
-
(_records = []) => {
|
|
16
|
-
let tableFormName = _tableFormName;
|
|
17
|
-
if (typeof _tableFormName === "function") {
|
|
18
|
-
tableFormName = _tableFormName(props);
|
|
19
|
-
}
|
|
20
|
-
// initialize if needed so that the values will stay
|
|
21
|
-
props.initializeForm(tableFormName, {}, true, {
|
|
22
|
-
keepDirty: true,
|
|
23
|
-
updateUnregisteredFields: true,
|
|
24
|
-
keepValues: true
|
|
25
|
-
});
|
|
26
|
-
const selectedEntityIdMap = {};
|
|
27
|
-
let records = _records;
|
|
28
|
-
if (_records && !Array.isArray(_records)) records = [records];
|
|
29
|
-
records.forEach(record => {
|
|
30
|
-
selectedEntityIdMap[record.id] = {
|
|
31
|
-
entity: record,
|
|
32
|
-
time: Date.now()
|
|
33
|
-
};
|
|
34
|
-
});
|
|
35
|
-
props.changeFormValue(
|
|
36
|
-
tableFormName,
|
|
37
|
-
"reduxFormSelectedEntityIdMap",
|
|
38
|
-
selectedEntityIdMap
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
})
|
|
42
|
-
);
|
|
43
|
-
}
|
package/withSelectedEntities.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { formValueSelector } from "redux-form";
|
|
2
|
-
import { reduce } from "lodash-es";
|
|
3
|
-
import { connect } from "react-redux";
|
|
4
|
-
/**
|
|
5
|
-
* @param {*string} formName
|
|
6
|
-
* @param {*string} formName
|
|
7
|
-
* @param {*string} formName
|
|
8
|
-
* @param {*string} ...etc
|
|
9
|
-
* adds a new prop `${formName}SelectedEntities` eg sequenceTableSelectedEntities
|
|
10
|
-
*/
|
|
11
|
-
export default function withSelectedEntities(...formNames) {
|
|
12
|
-
if (!formNames.length) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
"You need to pass at least one arg to withSelectedEntities"
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
if (typeof formNames[0] === "string") {
|
|
18
|
-
//NEW WAY
|
|
19
|
-
return connect(state => {
|
|
20
|
-
return formNames.reduce((acc, formName) => {
|
|
21
|
-
acc[formName + "SelectedEntities"] = getRecordsFromReduxForm(
|
|
22
|
-
state,
|
|
23
|
-
formName
|
|
24
|
-
);
|
|
25
|
-
return acc;
|
|
26
|
-
}, {});
|
|
27
|
-
});
|
|
28
|
-
} else {
|
|
29
|
-
//OLD WAY:
|
|
30
|
-
const { formName, name } = formNames[0];
|
|
31
|
-
if (!formName) {
|
|
32
|
-
throw new Error(
|
|
33
|
-
"Please pass a {formName} option when using withSelectedEntities"
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
return connect(state => {
|
|
37
|
-
return {
|
|
38
|
-
[name || "selectedEntities"]: getRecordsFromReduxForm(state, formName)
|
|
39
|
-
};
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function getRecordsFromReduxForm(state, formName) {
|
|
45
|
-
const selector = formValueSelector(formName);
|
|
46
|
-
return getRecordsFromIdMap(selector(state, "reduxFormSelectedEntityIdMap"));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function getRecordsFromIdMap(idMap = {}) {
|
|
50
|
-
return reduce(
|
|
51
|
-
idMap,
|
|
52
|
-
(acc, item) => {
|
|
53
|
-
if (item && item.entity) acc.push(item);
|
|
54
|
-
return acc;
|
|
55
|
-
},
|
|
56
|
-
[]
|
|
57
|
-
)
|
|
58
|
-
.sort((a, b) => a.rowIndex - b.rowIndex)
|
|
59
|
-
.map(item => item.entity);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function getSelectedEntities(storeOrState, formName) {
|
|
63
|
-
const state = storeOrState.getState ? storeOrState.getState() : storeOrState;
|
|
64
|
-
return getRecordsFromReduxForm(state, formName);
|
|
65
|
-
}
|
package/withStore.js
DELETED