@linzjs/step-ag-grid 1.5.3 → 1.5.4
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/dist/index.d.ts +7 -7
- package/dist/index.js +196 -185
- package/dist/index.js.map +1 -1
- package/dist/src/components/Grid.d.ts +1 -1
- package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +3 -7
- package/dist/src/components/gridForm/GridFormPopoutMenu.d.ts +1 -1
- package/dist/src/components/gridForm/GridFormTextInput.d.ts +1 -1
- package/dist/src/contexts/GridContext.d.ts +1 -0
- package/dist/step-ag-grid.esm.js +194 -186
- package/dist/step-ag-grid.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Grid.tsx +18 -13
- package/src/components/gridForm/GridFormMultiSelect.tsx +8 -10
- package/src/components/gridForm/GridFormPopoutMenu.tsx +3 -3
- package/src/components/gridForm/GridFormTextInput.tsx +3 -2
- package/src/contexts/GridContext.tsx +4 -0
- package/src/contexts/GridContextProvider.tsx +10 -0
package/dist/index.d.ts
CHANGED
|
@@ -24,13 +24,13 @@ export { GridPopoverMessage } from "./src/components/gridPopoverEdit/GridPopover
|
|
|
24
24
|
export { GridPopoverTextArea } from "./src/components/gridPopoverEdit/GridPopoverTextArea";
|
|
25
25
|
export { GridPopoverTextInput } from "./src/components/gridPopoverEdit/GridPopoverTextInput";
|
|
26
26
|
export { GridHeaderSelect } from "./src/components/gridHeader/GridHeaderSelect";
|
|
27
|
-
export
|
|
28
|
-
export
|
|
29
|
-
export
|
|
30
|
-
export
|
|
31
|
-
export
|
|
32
|
-
export
|
|
33
|
-
export
|
|
27
|
+
export * from "./src/components/gridForm/GridFormEditBearing";
|
|
28
|
+
export * from "./src/components/gridForm/GridFormDropDown";
|
|
29
|
+
export * from "./src/components/gridForm/GridFormMessage";
|
|
30
|
+
export * from "./src/components/gridForm/GridFormMultiSelect";
|
|
31
|
+
export * from "./src/components/gridForm/GridFormPopoutMenu";
|
|
32
|
+
export * from "./src/components/gridForm/GridFormTextArea";
|
|
33
|
+
export * from "./src/components/gridForm/GridFormTextInput";
|
|
34
34
|
export { TextAreaInput } from "./src/lui/TextAreaInput";
|
|
35
35
|
export { TextInputFormatted } from "./src/lui/TextInputFormatted";
|
|
36
36
|
export { GridSubComponentTextArea } from "./src/components/GridSubComponentTextArea";
|
package/dist/index.js
CHANGED
|
@@ -1740,6 +1740,9 @@ var GridContext = react.createContext({
|
|
|
1740
1740
|
ensureSelectedRowIsVisible: function () {
|
|
1741
1741
|
console.error("no context provider for ensureSelectedRowIsVisible");
|
|
1742
1742
|
},
|
|
1743
|
+
sizeColumnsToFit: function () {
|
|
1744
|
+
console.error("no context provider for sizeColumnsToFit");
|
|
1745
|
+
},
|
|
1743
1746
|
editingCells: function () {
|
|
1744
1747
|
console.error("no context provider for editingCells");
|
|
1745
1748
|
return false;
|
|
@@ -1950,6 +1953,14 @@ var GridContextProvider = function (props) {
|
|
|
1950
1953
|
gridApi.ensureNodeVisible(lodashEs.last(selectedNodes));
|
|
1951
1954
|
});
|
|
1952
1955
|
};
|
|
1956
|
+
/**
|
|
1957
|
+
* Resize columns to fit container
|
|
1958
|
+
*/
|
|
1959
|
+
var sizeColumnsToFit = function () {
|
|
1960
|
+
gridApiOp(function (gridApi) {
|
|
1961
|
+
gridApi.sizeColumnsToFit();
|
|
1962
|
+
});
|
|
1963
|
+
};
|
|
1953
1964
|
var stopEditing = function () { return gridApiOp(function (gridApi) { return gridApi.stopEditing(); }); };
|
|
1954
1965
|
var updatingCells = function (props, fnUpdate, setSaving) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1955
1966
|
return __generator(this, function (_a) {
|
|
@@ -2016,6 +2027,7 @@ var GridContextProvider = function (props) {
|
|
|
2016
2027
|
editingCells: editingCells,
|
|
2017
2028
|
ensureRowVisible: ensureRowVisible,
|
|
2018
2029
|
ensureSelectedRowIsVisible: ensureSelectedRowIsVisible,
|
|
2030
|
+
sizeColumnsToFit: sizeColumnsToFit,
|
|
2019
2031
|
stopEditing: stopEditing,
|
|
2020
2032
|
updatingCells: updatingCells
|
|
2021
2033
|
} }, { children: props.children })));
|
|
@@ -2201,7 +2213,7 @@ var GridHeaderSelect = function (_a) {
|
|
|
2201
2213
|
*/
|
|
2202
2214
|
var Grid = function (params) {
|
|
2203
2215
|
var _a;
|
|
2204
|
-
var _b = react.useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible;
|
|
2216
|
+
var _b = react.useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible, sizeColumnsToFit = _b.sizeColumnsToFit;
|
|
2205
2217
|
var checkUpdating = react.useContext(UpdatingContext).checkUpdating;
|
|
2206
2218
|
var _c = react.useState(""), internalQuickFilter = _c[0], setInternalQuickFilter = _c[1];
|
|
2207
2219
|
var lastSelectedIds = react.useRef([]);
|
|
@@ -2300,14 +2312,6 @@ var Grid = function (params) {
|
|
|
2300
2312
|
var _a;
|
|
2301
2313
|
return (jsxRuntime.jsx("span", __assign({ className: "ag-overlay-no-rows-center" }, { children: (_a = params.noRowsOverlayText) !== null && _a !== void 0 ? _a : "There are currently no rows" })));
|
|
2302
2314
|
}, [params.noRowsOverlayText]);
|
|
2303
|
-
var sizeColumnsToFit = react.useCallback(function (event) {
|
|
2304
|
-
// @ts-ignore (gridBodyCtrl is private)
|
|
2305
|
-
if (event.api.gridBodyCtrl == undefined) {
|
|
2306
|
-
return;
|
|
2307
|
-
// this is here because ag grid was throwing api undefined error when closing POPPED OUT panel
|
|
2308
|
-
}
|
|
2309
|
-
event.api.sizeColumnsToFit();
|
|
2310
|
-
}, []);
|
|
2311
2315
|
var refreshSelectedRows = react.useCallback(function (event) {
|
|
2312
2316
|
// Force-refresh all selected rows to re-run class function, to update selection highlighting
|
|
2313
2317
|
event.api.refreshCells({
|
|
@@ -2353,6 +2357,12 @@ var Grid = function (params) {
|
|
|
2353
2357
|
var cell = event.api.getFocusedCell();
|
|
2354
2358
|
cell && event.api.setFocusedCell(cell.rowIndex, cell.column);
|
|
2355
2359
|
}, [refreshSelectedRows]);
|
|
2360
|
+
// When rows added or removed then resize columns
|
|
2361
|
+
react.useEffect(function () {
|
|
2362
|
+
if (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length) {
|
|
2363
|
+
sizeColumnsToFit();
|
|
2364
|
+
}
|
|
2365
|
+
}, [columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length, sizeColumnsToFit]);
|
|
2356
2366
|
return (jsxRuntime.jsxs("div", __assign({ "data-testid": params.dataTestId, className: clsx("Grid-container", "ag-theme-alpine", staleGrid && "Grid-sortIsStale") }, { children: [params.quickFilter && (jsxRuntime.jsx("div", __assign({ className: "Grid-quickFilter" }, { children: jsxRuntime.jsx("input", { "aria-label": "Search", className: "lui-margin-top-xxs lui-margin-bottom-xxs Grid-quickFilterBox", type: "text", placeholder: (_a = params.quickFilterPlaceholder) !== null && _a !== void 0 ? _a : "Search...", value: internalQuickFilter, onChange: function (event) {
|
|
2357
2367
|
setInternalQuickFilter(event.target.value);
|
|
2358
2368
|
} }) }))), jsxRuntime.jsx(agGridReact.AgGridReact, { getRowId: function (params) { return "".concat(params.data.id); }, suppressRowClickSelection: true, rowSelection: "multiple", suppressBrowserResizeObserver: true, colResizeDefault: "shift", onFirstDataRendered: sizeColumnsToFit, onGridSizeChanged: sizeColumnsToFit, suppressClickEdit: true, onCellKeyDown: onCellKeyDown, onCellClicked: onCellClicked, onCellDoubleClicked: onCellDoubleClick, onCellEditingStarted: refreshSelectedRows, onCellEditingStopped: onCellEditingStopped, domLayout: params.domLayout, columnDefs: columnDefs, rowData: params.rowData, noRowsOverlayComponent: noRowsOverlayComponent, onGridReady: onGridReady, onSortChanged: ensureSelectedRowIsVisible, postSortRows: postSortRows, onSelectionChanged: synchroniseExternalStateToGridSelection })] })));
|
|
@@ -2557,8 +2567,175 @@ var GridRenderPopoutMenuCell = function (props) {
|
|
|
2557
2567
|
var css_248z$3 = "@charset \"UTF-8\";\n.szh-menu {\n margin: 0;\n padding: 0;\n list-style: none;\n box-sizing: border-box;\n width: max-content;\n z-index: 100;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background-color: #fff;\n}\n.szh-menu:focus {\n outline: none;\n}\n.szh-menu__arrow {\n box-sizing: border-box;\n width: 0.75rem;\n height: 0.75rem;\n background-color: #fff;\n border: 1px solid transparent;\n border-left-color: rgba(0, 0, 0, 0.1);\n border-top-color: rgba(0, 0, 0, 0.1);\n z-index: -1;\n}\n.szh-menu__arrow--dir-left {\n right: -0.375rem;\n transform: translateY(-50%) rotate(135deg);\n}\n.szh-menu__arrow--dir-right {\n left: -0.375rem;\n transform: translateY(-50%) rotate(-45deg);\n}\n.szh-menu__arrow--dir-top {\n bottom: -0.375rem;\n transform: translateX(-50%) rotate(-135deg);\n}\n.szh-menu__arrow--dir-bottom {\n top: -0.375rem;\n transform: translateX(-50%) rotate(45deg);\n}\n.szh-menu__item {\n cursor: pointer;\n}\n.szh-menu__item:focus {\n outline: none;\n}\n.szh-menu__item--hover {\n background-color: #ebebeb;\n}\n.szh-menu__item--focusable {\n cursor: default;\n background-color: inherit;\n}\n.szh-menu__item--disabled {\n cursor: default;\n color: #aaa;\n}\n.szh-menu__group {\n box-sizing: border-box;\n}\n.szh-menu__radio-group {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.szh-menu__divider {\n height: 1px;\n margin: 0.5rem 0;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.szh-menu-button {\n box-sizing: border-box;\n}\n\n.szh-menu {\n user-select: none;\n color: #212529;\n border: none;\n border-radius: 0.25rem;\n box-shadow: 0 3px 7px rgba(0, 0, 0, 0.133), 0 0.6px 2px rgba(0, 0, 0, 0.1);\n min-width: 10rem;\n padding: 0.5rem 0;\n}\n.szh-menu__item {\n display: flex;\n align-items: center;\n position: relative;\n padding: 0.375rem 1.5rem;\n}\n.szh-menu-container--itemTransition .szh-menu__item {\n transition-property: background-color, color;\n transition-duration: 0.15s;\n transition-timing-function: ease-in-out;\n}\n.szh-menu__item--type-radio {\n padding-left: 2.2rem;\n}\n.szh-menu__item--type-radio::before {\n content: \"○\";\n position: absolute;\n left: 0.8rem;\n top: 0.55rem;\n font-size: 0.8rem;\n}\n.szh-menu__item--type-radio.szh-menu__item--checked::before {\n content: \"●\";\n}\n.szh-menu__item--type-checkbox {\n padding-left: 2.2rem;\n}\n.szh-menu__item--type-checkbox::before {\n position: absolute;\n left: 0.8rem;\n}\n.szh-menu__item--type-checkbox.szh-menu__item--checked::before {\n content: \"✔\";\n}\n.szh-menu__submenu > .szh-menu__item {\n padding-right: 2.5rem;\n}\n.szh-menu__submenu > .szh-menu__item::after {\n content: \"❯\";\n position: absolute;\n right: 1rem;\n}\n.szh-menu__header {\n color: #888;\n font-size: 0.8rem;\n padding: 0.2rem 1.5rem;\n text-transform: uppercase;\n}";
|
|
2558
2568
|
styleInject(css_248z$3);
|
|
2559
2569
|
|
|
2560
|
-
var MenuSeparatorString
|
|
2561
|
-
Object.freeze({ value: MenuSeparatorString
|
|
2570
|
+
var MenuSeparatorString = "_____MENU_SEPARATOR_____";
|
|
2571
|
+
var MenuSeparator = Object.freeze({ value: MenuSeparatorString });
|
|
2572
|
+
var GridFormDropDown = function (props) {
|
|
2573
|
+
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2574
|
+
var formProps = props.formProps;
|
|
2575
|
+
var _a = react.useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
|
|
2576
|
+
var _b = react.useState(""), filter = _b[0], setFilter = _b[1];
|
|
2577
|
+
var _c = react.useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
|
|
2578
|
+
var optionsInitialising = react.useRef(false);
|
|
2579
|
+
var _d = react.useState(null), options = _d[0], setOptions = _d[1];
|
|
2580
|
+
var selectItemHandler = react.useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2581
|
+
var field;
|
|
2582
|
+
return __generator(this, function (_a) {
|
|
2583
|
+
switch (_a.label) {
|
|
2584
|
+
case 0:
|
|
2585
|
+
field = props.field;
|
|
2586
|
+
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2587
|
+
var hasChanged;
|
|
2588
|
+
return __generator(this, function (_a) {
|
|
2589
|
+
switch (_a.label) {
|
|
2590
|
+
case 0:
|
|
2591
|
+
hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
|
|
2592
|
+
if (!hasChanged) return [3 /*break*/, 3];
|
|
2593
|
+
if (!formProps.onSelectedItem) return [3 /*break*/, 2];
|
|
2594
|
+
return [4 /*yield*/, formProps.onSelectedItem({ selectedRows: selectedRows, value: value })];
|
|
2595
|
+
case 1:
|
|
2596
|
+
_a.sent();
|
|
2597
|
+
return [3 /*break*/, 3];
|
|
2598
|
+
case 2:
|
|
2599
|
+
selectedRows.forEach(function (row) { return (row[field] = value); });
|
|
2600
|
+
_a.label = 3;
|
|
2601
|
+
case 3: return [2 /*return*/, true];
|
|
2602
|
+
}
|
|
2603
|
+
});
|
|
2604
|
+
}); })];
|
|
2605
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
2606
|
+
}
|
|
2607
|
+
});
|
|
2608
|
+
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2609
|
+
var selectFilterHandler = react.useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2610
|
+
var field;
|
|
2611
|
+
return __generator(this, function (_a) {
|
|
2612
|
+
switch (_a.label) {
|
|
2613
|
+
case 0:
|
|
2614
|
+
field = props.field;
|
|
2615
|
+
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2616
|
+
return __generator(this, function (_a) {
|
|
2617
|
+
switch (_a.label) {
|
|
2618
|
+
case 0:
|
|
2619
|
+
if (!formProps.onSelectFilter) return [3 /*break*/, 2];
|
|
2620
|
+
return [4 /*yield*/, formProps.onSelectFilter({ selectedRows: selectedRows, value: value })];
|
|
2621
|
+
case 1:
|
|
2622
|
+
_a.sent();
|
|
2623
|
+
_a.label = 2;
|
|
2624
|
+
case 2: return [2 /*return*/, true];
|
|
2625
|
+
}
|
|
2626
|
+
});
|
|
2627
|
+
}); })];
|
|
2628
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
2629
|
+
}
|
|
2630
|
+
});
|
|
2631
|
+
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2632
|
+
// Load up options list if it's async function
|
|
2633
|
+
react.useEffect(function () {
|
|
2634
|
+
var _a;
|
|
2635
|
+
if (options || optionsInitialising.current)
|
|
2636
|
+
return;
|
|
2637
|
+
optionsInitialising.current = true;
|
|
2638
|
+
var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
|
|
2639
|
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2640
|
+
var optionsList;
|
|
2641
|
+
return __generator(this, function (_a) {
|
|
2642
|
+
switch (_a.label) {
|
|
2643
|
+
case 0:
|
|
2644
|
+
if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
|
|
2645
|
+
return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
|
|
2646
|
+
case 1:
|
|
2647
|
+
optionsConf = _a.sent();
|
|
2648
|
+
_a.label = 2;
|
|
2649
|
+
case 2:
|
|
2650
|
+
optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
|
|
2651
|
+
if (item == null || typeof item == "string" || typeof item == "number") {
|
|
2652
|
+
item = { value: item, label: item, disabled: false };
|
|
2653
|
+
}
|
|
2654
|
+
return item;
|
|
2655
|
+
});
|
|
2656
|
+
if (formProps.filtered) {
|
|
2657
|
+
// This is needed otherwise when filter input is rendered and sets autofocus
|
|
2658
|
+
// the mouse up of the double click edit triggers the cell to cancel editing
|
|
2659
|
+
lodashEs.delay(function () { return setOptions(optionsList); }, 100);
|
|
2660
|
+
}
|
|
2661
|
+
else {
|
|
2662
|
+
setOptions(optionsList);
|
|
2663
|
+
}
|
|
2664
|
+
optionsInitialising.current = false;
|
|
2665
|
+
return [2 /*return*/];
|
|
2666
|
+
}
|
|
2667
|
+
});
|
|
2668
|
+
}); })();
|
|
2669
|
+
}, [filter, options, formProps.filtered, formProps.options, props.selectedRows]);
|
|
2670
|
+
// Local filtering
|
|
2671
|
+
react.useEffect(function () {
|
|
2672
|
+
if (formProps.filtered == "local") {
|
|
2673
|
+
if (options == null)
|
|
2674
|
+
return;
|
|
2675
|
+
setFilteredValues(options
|
|
2676
|
+
.map(function (option) {
|
|
2677
|
+
if (option.label != null && typeof option.label !== "string") {
|
|
2678
|
+
console.error("Cannot filter non-string labels", option);
|
|
2679
|
+
return undefined;
|
|
2680
|
+
}
|
|
2681
|
+
var str = option.label || "";
|
|
2682
|
+
return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
|
|
2683
|
+
})
|
|
2684
|
+
.filter(function (r) { return r !== undefined; }));
|
|
2685
|
+
}
|
|
2686
|
+
}, [formProps.filtered, filter, options]);
|
|
2687
|
+
var researchOnFilterChange = debounce__default["default"](react.useCallback(function () {
|
|
2688
|
+
setOptions(null);
|
|
2689
|
+
}, []), 500);
|
|
2690
|
+
var previousFilter = react.useRef(filter);
|
|
2691
|
+
// Reload filtering
|
|
2692
|
+
react.useEffect(function () {
|
|
2693
|
+
if (previousFilter.current != filter && formProps.filtered == "reload") {
|
|
2694
|
+
previousFilter.current = filter;
|
|
2695
|
+
formProps.optionsRequestCancel && formProps.optionsRequestCancel();
|
|
2696
|
+
researchOnFilterChange().then();
|
|
2697
|
+
}
|
|
2698
|
+
}, [filter, formProps, props, researchOnFilterChange]);
|
|
2699
|
+
var onFilterKeyDown = react.useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2700
|
+
var activeOptions;
|
|
2701
|
+
return __generator(this, function (_a) {
|
|
2702
|
+
switch (_a.label) {
|
|
2703
|
+
case 0:
|
|
2704
|
+
if (!options)
|
|
2705
|
+
return [2 /*return*/];
|
|
2706
|
+
if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
|
|
2707
|
+
activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
|
|
2708
|
+
if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
|
|
2709
|
+
return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
|
|
2710
|
+
case 1:
|
|
2711
|
+
_a.sent();
|
|
2712
|
+
stopEditing();
|
|
2713
|
+
return [3 /*break*/, 5];
|
|
2714
|
+
case 2:
|
|
2715
|
+
if (!formProps.onSelectFilter) return [3 /*break*/, 4];
|
|
2716
|
+
return [4 /*yield*/, selectFilterHandler(filter)];
|
|
2717
|
+
case 3:
|
|
2718
|
+
_a.sent();
|
|
2719
|
+
stopEditing();
|
|
2720
|
+
return [3 /*break*/, 5];
|
|
2721
|
+
case 4:
|
|
2722
|
+
e.preventDefault();
|
|
2723
|
+
e.stopPropagation();
|
|
2724
|
+
_a.label = 5;
|
|
2725
|
+
case 5: return [2 /*return*/];
|
|
2726
|
+
}
|
|
2727
|
+
});
|
|
2728
|
+
}); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, formProps]);
|
|
2729
|
+
return popoverWrapper(jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formProps.filtered && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
|
|
2730
|
+
var _b;
|
|
2731
|
+
var ref = _a.ref;
|
|
2732
|
+
return (jsxRuntime.jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsxRuntime.jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: filter, onChange: function (e) { return setFilter(e.target.value.toLowerCase()); }, onKeyDown: function (e) { return onFilterKeyDown(e); } }) })));
|
|
2733
|
+
} })), jsxRuntime.jsx(MenuDivider, {}, "$$divider_filter")] })), jsxRuntime.jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsxRuntime.jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2734
|
+
var _a;
|
|
2735
|
+
return item.value === MenuSeparatorString ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxRuntime.jsx(MenuItem, __assign({ disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", value: item.value, onClick: function () { return selectItemHandler(item.value); } }, { children: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)) }), "".concat(props.field, "-").concat(index)));
|
|
2736
|
+
})] }) }))] }));
|
|
2737
|
+
};
|
|
2738
|
+
|
|
2562
2739
|
var GridFormMultiSelect = function (props) {
|
|
2563
2740
|
var formProps = props.formProps;
|
|
2564
2741
|
var _a = react.useState(""), filter = _a[0], setFilter = _a[1];
|
|
@@ -2641,7 +2818,7 @@ var GridFormMultiSelect = function (props) {
|
|
|
2641
2818
|
return (jsxRuntime.jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsxRuntime.jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: "", onChange: function (e) { return setFilter(e.target.value.toLowerCase()); } }) })));
|
|
2642
2819
|
} }), "filter"), jsxRuntime.jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2643
2820
|
var _a;
|
|
2644
|
-
return item.value === MenuSeparatorString
|
|
2821
|
+
return item.value === MenuSeparatorString ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxRuntime.jsxs(react.Fragment, { children: [jsxRuntime.jsx(MenuItem, __assign({ onClick: function (e) {
|
|
2645
2822
|
e.keepOpen = true;
|
|
2646
2823
|
if (selectedValues.includes(item.value)) {
|
|
2647
2824
|
setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
|
|
@@ -2695,7 +2872,7 @@ var css_248z$2 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @depr
|
|
|
2695
2872
|
styleInject(css_248z$2);
|
|
2696
2873
|
|
|
2697
2874
|
/** Menu configuration types **/
|
|
2698
|
-
var
|
|
2875
|
+
var PopoutMenuSeparator = Object.freeze({ __isMenuSeparator__: true });
|
|
2699
2876
|
/**
|
|
2700
2877
|
* NOTE: If the popout menu doesn't appear on single click when also selecting row it's because
|
|
2701
2878
|
* you need a useMemo around your columnDefs
|
|
@@ -2758,11 +2935,11 @@ var GridFormPopoutMenu = function (props) {
|
|
|
2758
2935
|
}); }, [props.field, props.selectedRows, updatingCells]);
|
|
2759
2936
|
var selectedRowCount = props.selectedRows.length;
|
|
2760
2937
|
var filteredOptions = options === null || options === void 0 ? void 0 : options.filter(function (menuOption) {
|
|
2761
|
-
return menuOption.label ===
|
|
2938
|
+
return menuOption.label === PopoutMenuSeparator || selectedRowCount === 1 || menuOption.supportsMultiEdit;
|
|
2762
2939
|
});
|
|
2763
2940
|
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2764
2941
|
return popoverWrapper(jsxRuntime.jsx(ComponentLoadingWrapper, __assign({ loading: !filteredOptions }, { children: jsxRuntime.jsx("div", __assign({ className: "Grid-popoverContainerList" }, { children: options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2765
|
-
return item.label ===
|
|
2942
|
+
return item.label === PopoutMenuSeparator ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (jsxRuntime.jsx(MenuItem, __assign({ onClick: function () { return actionClick(item); }, disabled: !!item.disabled || !(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.includes(item)), title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "" }, { children: item.label }), "".concat(item.label))));
|
|
2766
2943
|
}) })) })));
|
|
2767
2944
|
};
|
|
2768
2945
|
|
|
@@ -2944,175 +3121,6 @@ var GridPopoverEditBearingCorrection = function (colDef) {
|
|
|
2944
3121
|
} }, init.cellEditorParams) });
|
|
2945
3122
|
};
|
|
2946
3123
|
|
|
2947
|
-
var MenuSeparatorString = "_____MENU_SEPARATOR_____";
|
|
2948
|
-
Object.freeze({ value: MenuSeparatorString });
|
|
2949
|
-
var GridFormDropDown = function (props) {
|
|
2950
|
-
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2951
|
-
var formProps = props.formProps;
|
|
2952
|
-
var _a = react.useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
|
|
2953
|
-
var _b = react.useState(""), filter = _b[0], setFilter = _b[1];
|
|
2954
|
-
var _c = react.useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
|
|
2955
|
-
var optionsInitialising = react.useRef(false);
|
|
2956
|
-
var _d = react.useState(null), options = _d[0], setOptions = _d[1];
|
|
2957
|
-
var selectItemHandler = react.useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2958
|
-
var field;
|
|
2959
|
-
return __generator(this, function (_a) {
|
|
2960
|
-
switch (_a.label) {
|
|
2961
|
-
case 0:
|
|
2962
|
-
field = props.field;
|
|
2963
|
-
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2964
|
-
var hasChanged;
|
|
2965
|
-
return __generator(this, function (_a) {
|
|
2966
|
-
switch (_a.label) {
|
|
2967
|
-
case 0:
|
|
2968
|
-
hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
|
|
2969
|
-
if (!hasChanged) return [3 /*break*/, 3];
|
|
2970
|
-
if (!formProps.onSelectedItem) return [3 /*break*/, 2];
|
|
2971
|
-
return [4 /*yield*/, formProps.onSelectedItem({ selectedRows: selectedRows, value: value })];
|
|
2972
|
-
case 1:
|
|
2973
|
-
_a.sent();
|
|
2974
|
-
return [3 /*break*/, 3];
|
|
2975
|
-
case 2:
|
|
2976
|
-
selectedRows.forEach(function (row) { return (row[field] = value); });
|
|
2977
|
-
_a.label = 3;
|
|
2978
|
-
case 3: return [2 /*return*/, true];
|
|
2979
|
-
}
|
|
2980
|
-
});
|
|
2981
|
-
}); })];
|
|
2982
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
2983
|
-
}
|
|
2984
|
-
});
|
|
2985
|
-
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2986
|
-
var selectFilterHandler = react.useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2987
|
-
var field;
|
|
2988
|
-
return __generator(this, function (_a) {
|
|
2989
|
-
switch (_a.label) {
|
|
2990
|
-
case 0:
|
|
2991
|
-
field = props.field;
|
|
2992
|
-
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2993
|
-
return __generator(this, function (_a) {
|
|
2994
|
-
switch (_a.label) {
|
|
2995
|
-
case 0:
|
|
2996
|
-
if (!formProps.onSelectFilter) return [3 /*break*/, 2];
|
|
2997
|
-
return [4 /*yield*/, formProps.onSelectFilter({ selectedRows: selectedRows, value: value })];
|
|
2998
|
-
case 1:
|
|
2999
|
-
_a.sent();
|
|
3000
|
-
_a.label = 2;
|
|
3001
|
-
case 2: return [2 /*return*/, true];
|
|
3002
|
-
}
|
|
3003
|
-
});
|
|
3004
|
-
}); })];
|
|
3005
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
3006
|
-
}
|
|
3007
|
-
});
|
|
3008
|
-
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
3009
|
-
// Load up options list if it's async function
|
|
3010
|
-
react.useEffect(function () {
|
|
3011
|
-
var _a;
|
|
3012
|
-
if (options || optionsInitialising.current)
|
|
3013
|
-
return;
|
|
3014
|
-
optionsInitialising.current = true;
|
|
3015
|
-
var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
|
|
3016
|
-
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
3017
|
-
var optionsList;
|
|
3018
|
-
return __generator(this, function (_a) {
|
|
3019
|
-
switch (_a.label) {
|
|
3020
|
-
case 0:
|
|
3021
|
-
if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
|
|
3022
|
-
return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
|
|
3023
|
-
case 1:
|
|
3024
|
-
optionsConf = _a.sent();
|
|
3025
|
-
_a.label = 2;
|
|
3026
|
-
case 2:
|
|
3027
|
-
optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
|
|
3028
|
-
if (item == null || typeof item == "string" || typeof item == "number") {
|
|
3029
|
-
item = { value: item, label: item, disabled: false };
|
|
3030
|
-
}
|
|
3031
|
-
return item;
|
|
3032
|
-
});
|
|
3033
|
-
if (formProps.filtered) {
|
|
3034
|
-
// This is needed otherwise when filter input is rendered and sets autofocus
|
|
3035
|
-
// the mouse up of the double click edit triggers the cell to cancel editing
|
|
3036
|
-
lodashEs.delay(function () { return setOptions(optionsList); }, 100);
|
|
3037
|
-
}
|
|
3038
|
-
else {
|
|
3039
|
-
setOptions(optionsList);
|
|
3040
|
-
}
|
|
3041
|
-
optionsInitialising.current = false;
|
|
3042
|
-
return [2 /*return*/];
|
|
3043
|
-
}
|
|
3044
|
-
});
|
|
3045
|
-
}); })();
|
|
3046
|
-
}, [filter, options, formProps.filtered, formProps.options, props.selectedRows]);
|
|
3047
|
-
// Local filtering
|
|
3048
|
-
react.useEffect(function () {
|
|
3049
|
-
if (formProps.filtered == "local") {
|
|
3050
|
-
if (options == null)
|
|
3051
|
-
return;
|
|
3052
|
-
setFilteredValues(options
|
|
3053
|
-
.map(function (option) {
|
|
3054
|
-
if (option.label != null && typeof option.label !== "string") {
|
|
3055
|
-
console.error("Cannot filter non-string labels", option);
|
|
3056
|
-
return undefined;
|
|
3057
|
-
}
|
|
3058
|
-
var str = option.label || "";
|
|
3059
|
-
return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
|
|
3060
|
-
})
|
|
3061
|
-
.filter(function (r) { return r !== undefined; }));
|
|
3062
|
-
}
|
|
3063
|
-
}, [formProps.filtered, filter, options]);
|
|
3064
|
-
var researchOnFilterChange = debounce__default["default"](react.useCallback(function () {
|
|
3065
|
-
setOptions(null);
|
|
3066
|
-
}, []), 500);
|
|
3067
|
-
var previousFilter = react.useRef(filter);
|
|
3068
|
-
// Reload filtering
|
|
3069
|
-
react.useEffect(function () {
|
|
3070
|
-
if (previousFilter.current != filter && formProps.filtered == "reload") {
|
|
3071
|
-
previousFilter.current = filter;
|
|
3072
|
-
formProps.optionsRequestCancel && formProps.optionsRequestCancel();
|
|
3073
|
-
researchOnFilterChange().then();
|
|
3074
|
-
}
|
|
3075
|
-
}, [filter, formProps, props, researchOnFilterChange]);
|
|
3076
|
-
var onFilterKeyDown = react.useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
3077
|
-
var activeOptions;
|
|
3078
|
-
return __generator(this, function (_a) {
|
|
3079
|
-
switch (_a.label) {
|
|
3080
|
-
case 0:
|
|
3081
|
-
if (!options)
|
|
3082
|
-
return [2 /*return*/];
|
|
3083
|
-
if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
|
|
3084
|
-
activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
|
|
3085
|
-
if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
|
|
3086
|
-
return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
|
|
3087
|
-
case 1:
|
|
3088
|
-
_a.sent();
|
|
3089
|
-
stopEditing();
|
|
3090
|
-
return [3 /*break*/, 5];
|
|
3091
|
-
case 2:
|
|
3092
|
-
if (!formProps.onSelectFilter) return [3 /*break*/, 4];
|
|
3093
|
-
return [4 /*yield*/, selectFilterHandler(filter)];
|
|
3094
|
-
case 3:
|
|
3095
|
-
_a.sent();
|
|
3096
|
-
stopEditing();
|
|
3097
|
-
return [3 /*break*/, 5];
|
|
3098
|
-
case 4:
|
|
3099
|
-
e.preventDefault();
|
|
3100
|
-
e.stopPropagation();
|
|
3101
|
-
_a.label = 5;
|
|
3102
|
-
case 5: return [2 /*return*/];
|
|
3103
|
-
}
|
|
3104
|
-
});
|
|
3105
|
-
}); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, formProps]);
|
|
3106
|
-
return popoverWrapper(jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [formProps.filtered && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
|
|
3107
|
-
var _b;
|
|
3108
|
-
var ref = _a.ref;
|
|
3109
|
-
return (jsxRuntime.jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsxRuntime.jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: filter, onChange: function (e) { return setFilter(e.target.value.toLowerCase()); }, onKeyDown: function (e) { return onFilterKeyDown(e); } }) })));
|
|
3110
|
-
} })), jsxRuntime.jsx(MenuDivider, {}, "$$divider_filter")] })), jsxRuntime.jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsxRuntime.jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
3111
|
-
var _a;
|
|
3112
|
-
return item.value === MenuSeparatorString ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxRuntime.jsx(MenuItem, __assign({ disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", value: item.value, onClick: function () { return selectItemHandler(item.value); } }, { children: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)) }), "".concat(props.field, "-").concat(index)));
|
|
3113
|
-
})] }) }))] }));
|
|
3114
|
-
};
|
|
3115
|
-
|
|
3116
3124
|
var GridPopoverEditDropDown = function (colDef) {
|
|
3117
3125
|
var _a;
|
|
3118
3126
|
return GridCell(__assign(__assign({ initialWidth: 65, maxWidth: 150, cellClass: ((_a = colDef.cellEditor) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
|
|
@@ -3224,7 +3232,7 @@ var GridFormTextInput = function (props) {
|
|
|
3224
3232
|
return "Text must be no longer than ".concat(formProps.maxlength, " characters");
|
|
3225
3233
|
}
|
|
3226
3234
|
if (formProps.validate) {
|
|
3227
|
-
return formProps.validate(trimmedValue);
|
|
3235
|
+
return formProps.validate(trimmedValue, props.data);
|
|
3228
3236
|
}
|
|
3229
3237
|
return null;
|
|
3230
3238
|
}, [formProps, value]);
|
|
@@ -3315,6 +3323,9 @@ exports.MenuGroup = MenuGroup;
|
|
|
3315
3323
|
exports.MenuHeader = MenuHeader;
|
|
3316
3324
|
exports.MenuItem = MenuItem;
|
|
3317
3325
|
exports.MenuRadioGroup = MenuRadioGroup;
|
|
3326
|
+
exports.MenuSeparator = MenuSeparator;
|
|
3327
|
+
exports.MenuSeparatorString = MenuSeparatorString;
|
|
3328
|
+
exports.PopoutMenuSeparator = PopoutMenuSeparator;
|
|
3318
3329
|
exports.SubMenu = SubMenu;
|
|
3319
3330
|
exports.TextAreaInput = TextAreaInput;
|
|
3320
3331
|
exports.TextInputFormatted = TextInputFormatted;
|