@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
|
@@ -15,7 +15,7 @@ export interface GridProps {
|
|
|
15
15
|
externalSelectedItems?: any[];
|
|
16
16
|
setExternalSelectedItems?: (items: any[]) => void;
|
|
17
17
|
onGridReady?: GridOptions["onGridReady"];
|
|
18
|
-
defaultColDef
|
|
18
|
+
defaultColDef?: GridOptions["defaultColDef"];
|
|
19
19
|
columnDefs: GridOptions["columnDefs"];
|
|
20
20
|
rowData: GridOptions["rowData"];
|
|
21
21
|
noRowsOverlayText?: string;
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
import "../../react-menu3/styles/index.scss";
|
|
3
3
|
import { GridBaseRow } from "../Grid";
|
|
4
4
|
import { GenericCellEditorParams, GridFormProps } from "../GridCell";
|
|
5
|
-
interface
|
|
5
|
+
interface MultiFinalSelectOption<ValueType> {
|
|
6
6
|
value: ValueType;
|
|
7
7
|
label?: JSX.Element | string;
|
|
8
8
|
subComponent?: (props: any, ref: any) => any;
|
|
9
9
|
}
|
|
10
|
-
export declare
|
|
11
|
-
export declare const MenuSeparator: Readonly<{
|
|
12
|
-
value: "_____MENU_SEPARATOR_____";
|
|
13
|
-
}>;
|
|
14
|
-
export declare type SelectOption<ValueType> = ValueType | FinalSelectOption<ValueType>;
|
|
10
|
+
export declare type MultiSelectOption<ValueType> = ValueType | MultiFinalSelectOption<ValueType>;
|
|
15
11
|
export interface MultiSelectResult<RowType> {
|
|
16
12
|
selectedRows: RowType[];
|
|
17
13
|
values: Record<string, any>;
|
|
@@ -20,7 +16,7 @@ export interface GridFormMultiSelectProps<RowType extends GridBaseRow, ValueType
|
|
|
20
16
|
filtered?: boolean;
|
|
21
17
|
filterPlaceholder?: string;
|
|
22
18
|
onSave?: (props: MultiSelectResult<RowType>) => Promise<boolean>;
|
|
23
|
-
options:
|
|
19
|
+
options: MultiSelectOption<ValueType>[] | ((selectedRows: RowType[]) => Promise<MultiSelectOption<ValueType>[]> | MultiSelectOption<ValueType>[]);
|
|
24
20
|
initialSelectedValues?: (selectedRows: RowType[]) => any[];
|
|
25
21
|
}
|
|
26
22
|
export declare const GridFormMultiSelect: <RowType extends GridBaseRow, ValueType>(props: GridFormProps<RowType>) => JSX.Element;
|
|
@@ -5,7 +5,7 @@ export interface GridFormPopoutMenuProps<RowType extends GridBaseRow> extends Ge
|
|
|
5
5
|
options: (selectedRows: RowType[]) => Promise<MenuOption<RowType>[]>;
|
|
6
6
|
}
|
|
7
7
|
/** Menu configuration types **/
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const PopoutMenuSeparator: Readonly<{
|
|
9
9
|
__isMenuSeparator__: true;
|
|
10
10
|
}>;
|
|
11
11
|
interface MenuSeparatorType {
|
|
@@ -7,7 +7,7 @@ export interface GridFormTextInputProps<RowType extends GridBaseRow> extends Gen
|
|
|
7
7
|
required?: boolean;
|
|
8
8
|
maxlength?: number;
|
|
9
9
|
width?: string | number;
|
|
10
|
-
validate?: (value: string) => string | null;
|
|
10
|
+
validate?: (value: string, data: RowType) => string | null;
|
|
11
11
|
onSave?: (selectedRows: RowType[], value: string) => Promise<boolean>;
|
|
12
12
|
}
|
|
13
13
|
export declare const GridFormTextInput: <RowType extends GridBaseRow>(props: GridFormProps<RowType>) => JSX.Element;
|
|
@@ -16,6 +16,7 @@ export interface GridContextType {
|
|
|
16
16
|
flashRowsDiff: (updateFn: () => Promise<any>) => Promise<void>;
|
|
17
17
|
ensureRowVisible: (id: number) => void;
|
|
18
18
|
ensureSelectedRowIsVisible: () => void;
|
|
19
|
+
sizeColumnsToFit: () => void;
|
|
19
20
|
stopEditing: () => void;
|
|
20
21
|
updatingCells: (props: {
|
|
21
22
|
selectedRows: GridBaseRow[];
|
package/dist/step-ag-grid.esm.js
CHANGED
|
@@ -1732,6 +1732,9 @@ var GridContext = createContext({
|
|
|
1732
1732
|
ensureSelectedRowIsVisible: function () {
|
|
1733
1733
|
console.error("no context provider for ensureSelectedRowIsVisible");
|
|
1734
1734
|
},
|
|
1735
|
+
sizeColumnsToFit: function () {
|
|
1736
|
+
console.error("no context provider for sizeColumnsToFit");
|
|
1737
|
+
},
|
|
1735
1738
|
editingCells: function () {
|
|
1736
1739
|
console.error("no context provider for editingCells");
|
|
1737
1740
|
return false;
|
|
@@ -1942,6 +1945,14 @@ var GridContextProvider = function (props) {
|
|
|
1942
1945
|
gridApi.ensureNodeVisible(last(selectedNodes));
|
|
1943
1946
|
});
|
|
1944
1947
|
};
|
|
1948
|
+
/**
|
|
1949
|
+
* Resize columns to fit container
|
|
1950
|
+
*/
|
|
1951
|
+
var sizeColumnsToFit = function () {
|
|
1952
|
+
gridApiOp(function (gridApi) {
|
|
1953
|
+
gridApi.sizeColumnsToFit();
|
|
1954
|
+
});
|
|
1955
|
+
};
|
|
1945
1956
|
var stopEditing = function () { return gridApiOp(function (gridApi) { return gridApi.stopEditing(); }); };
|
|
1946
1957
|
var updatingCells = function (props, fnUpdate, setSaving) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1947
1958
|
return __generator(this, function (_a) {
|
|
@@ -2008,6 +2019,7 @@ var GridContextProvider = function (props) {
|
|
|
2008
2019
|
editingCells: editingCells,
|
|
2009
2020
|
ensureRowVisible: ensureRowVisible,
|
|
2010
2021
|
ensureSelectedRowIsVisible: ensureSelectedRowIsVisible,
|
|
2022
|
+
sizeColumnsToFit: sizeColumnsToFit,
|
|
2011
2023
|
stopEditing: stopEditing,
|
|
2012
2024
|
updatingCells: updatingCells
|
|
2013
2025
|
} }, { children: props.children })));
|
|
@@ -2193,7 +2205,7 @@ var GridHeaderSelect = function (_a) {
|
|
|
2193
2205
|
*/
|
|
2194
2206
|
var Grid = function (params) {
|
|
2195
2207
|
var _a;
|
|
2196
|
-
var _b = useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible;
|
|
2208
|
+
var _b = useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible, sizeColumnsToFit = _b.sizeColumnsToFit;
|
|
2197
2209
|
var checkUpdating = useContext(UpdatingContext).checkUpdating;
|
|
2198
2210
|
var _c = useState(""), internalQuickFilter = _c[0], setInternalQuickFilter = _c[1];
|
|
2199
2211
|
var lastSelectedIds = useRef([]);
|
|
@@ -2292,14 +2304,6 @@ var Grid = function (params) {
|
|
|
2292
2304
|
var _a;
|
|
2293
2305
|
return (jsx("span", __assign({ className: "ag-overlay-no-rows-center" }, { children: (_a = params.noRowsOverlayText) !== null && _a !== void 0 ? _a : "There are currently no rows" })));
|
|
2294
2306
|
}, [params.noRowsOverlayText]);
|
|
2295
|
-
var sizeColumnsToFit = useCallback(function (event) {
|
|
2296
|
-
// @ts-ignore (gridBodyCtrl is private)
|
|
2297
|
-
if (event.api.gridBodyCtrl == undefined) {
|
|
2298
|
-
return;
|
|
2299
|
-
// this is here because ag grid was throwing api undefined error when closing POPPED OUT panel
|
|
2300
|
-
}
|
|
2301
|
-
event.api.sizeColumnsToFit();
|
|
2302
|
-
}, []);
|
|
2303
2307
|
var refreshSelectedRows = useCallback(function (event) {
|
|
2304
2308
|
// Force-refresh all selected rows to re-run class function, to update selection highlighting
|
|
2305
2309
|
event.api.refreshCells({
|
|
@@ -2345,6 +2349,12 @@ var Grid = function (params) {
|
|
|
2345
2349
|
var cell = event.api.getFocusedCell();
|
|
2346
2350
|
cell && event.api.setFocusedCell(cell.rowIndex, cell.column);
|
|
2347
2351
|
}, [refreshSelectedRows]);
|
|
2352
|
+
// When rows added or removed then resize columns
|
|
2353
|
+
useEffect(function () {
|
|
2354
|
+
if (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length) {
|
|
2355
|
+
sizeColumnsToFit();
|
|
2356
|
+
}
|
|
2357
|
+
}, [columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length, sizeColumnsToFit]);
|
|
2348
2358
|
return (jsxs("div", __assign({ "data-testid": params.dataTestId, className: clsx("Grid-container", "ag-theme-alpine", staleGrid && "Grid-sortIsStale") }, { children: [params.quickFilter && (jsx("div", __assign({ className: "Grid-quickFilter" }, { children: 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) {
|
|
2349
2359
|
setInternalQuickFilter(event.target.value);
|
|
2350
2360
|
} }) }))), jsx(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 })] })));
|
|
@@ -2549,8 +2559,175 @@ var GridRenderPopoutMenuCell = function (props) {
|
|
|
2549
2559
|
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}";
|
|
2550
2560
|
styleInject(css_248z$3);
|
|
2551
2561
|
|
|
2552
|
-
var MenuSeparatorString
|
|
2553
|
-
Object.freeze({ value: MenuSeparatorString
|
|
2562
|
+
var MenuSeparatorString = "_____MENU_SEPARATOR_____";
|
|
2563
|
+
var MenuSeparator = Object.freeze({ value: MenuSeparatorString });
|
|
2564
|
+
var GridFormDropDown = function (props) {
|
|
2565
|
+
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2566
|
+
var formProps = props.formProps;
|
|
2567
|
+
var _a = useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
|
|
2568
|
+
var _b = useState(""), filter = _b[0], setFilter = _b[1];
|
|
2569
|
+
var _c = useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
|
|
2570
|
+
var optionsInitialising = useRef(false);
|
|
2571
|
+
var _d = useState(null), options = _d[0], setOptions = _d[1];
|
|
2572
|
+
var selectItemHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2573
|
+
var field;
|
|
2574
|
+
return __generator(this, function (_a) {
|
|
2575
|
+
switch (_a.label) {
|
|
2576
|
+
case 0:
|
|
2577
|
+
field = props.field;
|
|
2578
|
+
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2579
|
+
var hasChanged;
|
|
2580
|
+
return __generator(this, function (_a) {
|
|
2581
|
+
switch (_a.label) {
|
|
2582
|
+
case 0:
|
|
2583
|
+
hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
|
|
2584
|
+
if (!hasChanged) return [3 /*break*/, 3];
|
|
2585
|
+
if (!formProps.onSelectedItem) return [3 /*break*/, 2];
|
|
2586
|
+
return [4 /*yield*/, formProps.onSelectedItem({ selectedRows: selectedRows, value: value })];
|
|
2587
|
+
case 1:
|
|
2588
|
+
_a.sent();
|
|
2589
|
+
return [3 /*break*/, 3];
|
|
2590
|
+
case 2:
|
|
2591
|
+
selectedRows.forEach(function (row) { return (row[field] = value); });
|
|
2592
|
+
_a.label = 3;
|
|
2593
|
+
case 3: return [2 /*return*/, true];
|
|
2594
|
+
}
|
|
2595
|
+
});
|
|
2596
|
+
}); })];
|
|
2597
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
2598
|
+
}
|
|
2599
|
+
});
|
|
2600
|
+
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2601
|
+
var selectFilterHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2602
|
+
var field;
|
|
2603
|
+
return __generator(this, function (_a) {
|
|
2604
|
+
switch (_a.label) {
|
|
2605
|
+
case 0:
|
|
2606
|
+
field = props.field;
|
|
2607
|
+
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2608
|
+
return __generator(this, function (_a) {
|
|
2609
|
+
switch (_a.label) {
|
|
2610
|
+
case 0:
|
|
2611
|
+
if (!formProps.onSelectFilter) return [3 /*break*/, 2];
|
|
2612
|
+
return [4 /*yield*/, formProps.onSelectFilter({ selectedRows: selectedRows, value: value })];
|
|
2613
|
+
case 1:
|
|
2614
|
+
_a.sent();
|
|
2615
|
+
_a.label = 2;
|
|
2616
|
+
case 2: return [2 /*return*/, true];
|
|
2617
|
+
}
|
|
2618
|
+
});
|
|
2619
|
+
}); })];
|
|
2620
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
2621
|
+
}
|
|
2622
|
+
});
|
|
2623
|
+
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2624
|
+
// Load up options list if it's async function
|
|
2625
|
+
useEffect(function () {
|
|
2626
|
+
var _a;
|
|
2627
|
+
if (options || optionsInitialising.current)
|
|
2628
|
+
return;
|
|
2629
|
+
optionsInitialising.current = true;
|
|
2630
|
+
var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
|
|
2631
|
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2632
|
+
var optionsList;
|
|
2633
|
+
return __generator(this, function (_a) {
|
|
2634
|
+
switch (_a.label) {
|
|
2635
|
+
case 0:
|
|
2636
|
+
if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
|
|
2637
|
+
return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
|
|
2638
|
+
case 1:
|
|
2639
|
+
optionsConf = _a.sent();
|
|
2640
|
+
_a.label = 2;
|
|
2641
|
+
case 2:
|
|
2642
|
+
optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
|
|
2643
|
+
if (item == null || typeof item == "string" || typeof item == "number") {
|
|
2644
|
+
item = { value: item, label: item, disabled: false };
|
|
2645
|
+
}
|
|
2646
|
+
return item;
|
|
2647
|
+
});
|
|
2648
|
+
if (formProps.filtered) {
|
|
2649
|
+
// This is needed otherwise when filter input is rendered and sets autofocus
|
|
2650
|
+
// the mouse up of the double click edit triggers the cell to cancel editing
|
|
2651
|
+
delay(function () { return setOptions(optionsList); }, 100);
|
|
2652
|
+
}
|
|
2653
|
+
else {
|
|
2654
|
+
setOptions(optionsList);
|
|
2655
|
+
}
|
|
2656
|
+
optionsInitialising.current = false;
|
|
2657
|
+
return [2 /*return*/];
|
|
2658
|
+
}
|
|
2659
|
+
});
|
|
2660
|
+
}); })();
|
|
2661
|
+
}, [filter, options, formProps.filtered, formProps.options, props.selectedRows]);
|
|
2662
|
+
// Local filtering
|
|
2663
|
+
useEffect(function () {
|
|
2664
|
+
if (formProps.filtered == "local") {
|
|
2665
|
+
if (options == null)
|
|
2666
|
+
return;
|
|
2667
|
+
setFilteredValues(options
|
|
2668
|
+
.map(function (option) {
|
|
2669
|
+
if (option.label != null && typeof option.label !== "string") {
|
|
2670
|
+
console.error("Cannot filter non-string labels", option);
|
|
2671
|
+
return undefined;
|
|
2672
|
+
}
|
|
2673
|
+
var str = option.label || "";
|
|
2674
|
+
return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
|
|
2675
|
+
})
|
|
2676
|
+
.filter(function (r) { return r !== undefined; }));
|
|
2677
|
+
}
|
|
2678
|
+
}, [formProps.filtered, filter, options]);
|
|
2679
|
+
var researchOnFilterChange = debounce(useCallback(function () {
|
|
2680
|
+
setOptions(null);
|
|
2681
|
+
}, []), 500);
|
|
2682
|
+
var previousFilter = useRef(filter);
|
|
2683
|
+
// Reload filtering
|
|
2684
|
+
useEffect(function () {
|
|
2685
|
+
if (previousFilter.current != filter && formProps.filtered == "reload") {
|
|
2686
|
+
previousFilter.current = filter;
|
|
2687
|
+
formProps.optionsRequestCancel && formProps.optionsRequestCancel();
|
|
2688
|
+
researchOnFilterChange().then();
|
|
2689
|
+
}
|
|
2690
|
+
}, [filter, formProps, props, researchOnFilterChange]);
|
|
2691
|
+
var onFilterKeyDown = useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2692
|
+
var activeOptions;
|
|
2693
|
+
return __generator(this, function (_a) {
|
|
2694
|
+
switch (_a.label) {
|
|
2695
|
+
case 0:
|
|
2696
|
+
if (!options)
|
|
2697
|
+
return [2 /*return*/];
|
|
2698
|
+
if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
|
|
2699
|
+
activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
|
|
2700
|
+
if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
|
|
2701
|
+
return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
|
|
2702
|
+
case 1:
|
|
2703
|
+
_a.sent();
|
|
2704
|
+
stopEditing();
|
|
2705
|
+
return [3 /*break*/, 5];
|
|
2706
|
+
case 2:
|
|
2707
|
+
if (!formProps.onSelectFilter) return [3 /*break*/, 4];
|
|
2708
|
+
return [4 /*yield*/, selectFilterHandler(filter)];
|
|
2709
|
+
case 3:
|
|
2710
|
+
_a.sent();
|
|
2711
|
+
stopEditing();
|
|
2712
|
+
return [3 /*break*/, 5];
|
|
2713
|
+
case 4:
|
|
2714
|
+
e.preventDefault();
|
|
2715
|
+
e.stopPropagation();
|
|
2716
|
+
_a.label = 5;
|
|
2717
|
+
case 5: return [2 /*return*/];
|
|
2718
|
+
}
|
|
2719
|
+
});
|
|
2720
|
+
}); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, formProps]);
|
|
2721
|
+
return popoverWrapper(jsxs(Fragment$1, { children: [formProps.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
|
|
2722
|
+
var _b;
|
|
2723
|
+
var ref = _a.ref;
|
|
2724
|
+
return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: 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); } }) })));
|
|
2725
|
+
} })), jsx(MenuDivider, {}, "$$divider_filter")] })), jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs(Fragment$1, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2726
|
+
var _a;
|
|
2727
|
+
return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (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)));
|
|
2728
|
+
})] }) }))] }));
|
|
2729
|
+
};
|
|
2730
|
+
|
|
2554
2731
|
var GridFormMultiSelect = function (props) {
|
|
2555
2732
|
var formProps = props.formProps;
|
|
2556
2733
|
var _a = useState(""), filter = _a[0], setFilter = _a[1];
|
|
@@ -2633,7 +2810,7 @@ var GridFormMultiSelect = function (props) {
|
|
|
2633
2810
|
return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: 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()); } }) })));
|
|
2634
2811
|
} }), "filter"), jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2635
2812
|
var _a;
|
|
2636
|
-
return item.value === MenuSeparatorString
|
|
2813
|
+
return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxs(Fragment, { children: [jsx(MenuItem, __assign({ onClick: function (e) {
|
|
2637
2814
|
e.keepOpen = true;
|
|
2638
2815
|
if (selectedValues.includes(item.value)) {
|
|
2639
2816
|
setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
|
|
@@ -2687,7 +2864,7 @@ var css_248z$2 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @depr
|
|
|
2687
2864
|
styleInject(css_248z$2);
|
|
2688
2865
|
|
|
2689
2866
|
/** Menu configuration types **/
|
|
2690
|
-
var
|
|
2867
|
+
var PopoutMenuSeparator = Object.freeze({ __isMenuSeparator__: true });
|
|
2691
2868
|
/**
|
|
2692
2869
|
* NOTE: If the popout menu doesn't appear on single click when also selecting row it's because
|
|
2693
2870
|
* you need a useMemo around your columnDefs
|
|
@@ -2750,11 +2927,11 @@ var GridFormPopoutMenu = function (props) {
|
|
|
2750
2927
|
}); }, [props.field, props.selectedRows, updatingCells]);
|
|
2751
2928
|
var selectedRowCount = props.selectedRows.length;
|
|
2752
2929
|
var filteredOptions = options === null || options === void 0 ? void 0 : options.filter(function (menuOption) {
|
|
2753
|
-
return menuOption.label ===
|
|
2930
|
+
return menuOption.label === PopoutMenuSeparator || selectedRowCount === 1 || menuOption.supportsMultiEdit;
|
|
2754
2931
|
});
|
|
2755
2932
|
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2756
2933
|
return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: !filteredOptions }, { children: jsx("div", __assign({ className: "Grid-popoverContainerList" }, { children: options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
2757
|
-
return item.label ===
|
|
2934
|
+
return item.label === PopoutMenuSeparator ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (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))));
|
|
2758
2935
|
}) })) })));
|
|
2759
2936
|
};
|
|
2760
2937
|
|
|
@@ -2936,175 +3113,6 @@ var GridPopoverEditBearingCorrection = function (colDef) {
|
|
|
2936
3113
|
} }, init.cellEditorParams) });
|
|
2937
3114
|
};
|
|
2938
3115
|
|
|
2939
|
-
var MenuSeparatorString = "_____MENU_SEPARATOR_____";
|
|
2940
|
-
Object.freeze({ value: MenuSeparatorString });
|
|
2941
|
-
var GridFormDropDown = function (props) {
|
|
2942
|
-
var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
|
|
2943
|
-
var formProps = props.formProps;
|
|
2944
|
-
var _a = useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
|
|
2945
|
-
var _b = useState(""), filter = _b[0], setFilter = _b[1];
|
|
2946
|
-
var _c = useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
|
|
2947
|
-
var optionsInitialising = useRef(false);
|
|
2948
|
-
var _d = useState(null), options = _d[0], setOptions = _d[1];
|
|
2949
|
-
var selectItemHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2950
|
-
var field;
|
|
2951
|
-
return __generator(this, function (_a) {
|
|
2952
|
-
switch (_a.label) {
|
|
2953
|
-
case 0:
|
|
2954
|
-
field = props.field;
|
|
2955
|
-
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2956
|
-
var hasChanged;
|
|
2957
|
-
return __generator(this, function (_a) {
|
|
2958
|
-
switch (_a.label) {
|
|
2959
|
-
case 0:
|
|
2960
|
-
hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
|
|
2961
|
-
if (!hasChanged) return [3 /*break*/, 3];
|
|
2962
|
-
if (!formProps.onSelectedItem) return [3 /*break*/, 2];
|
|
2963
|
-
return [4 /*yield*/, formProps.onSelectedItem({ selectedRows: selectedRows, value: value })];
|
|
2964
|
-
case 1:
|
|
2965
|
-
_a.sent();
|
|
2966
|
-
return [3 /*break*/, 3];
|
|
2967
|
-
case 2:
|
|
2968
|
-
selectedRows.forEach(function (row) { return (row[field] = value); });
|
|
2969
|
-
_a.label = 3;
|
|
2970
|
-
case 3: return [2 /*return*/, true];
|
|
2971
|
-
}
|
|
2972
|
-
});
|
|
2973
|
-
}); })];
|
|
2974
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
2975
|
-
}
|
|
2976
|
-
});
|
|
2977
|
-
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
2978
|
-
var selectFilterHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2979
|
-
var field;
|
|
2980
|
-
return __generator(this, function (_a) {
|
|
2981
|
-
switch (_a.label) {
|
|
2982
|
-
case 0:
|
|
2983
|
-
field = props.field;
|
|
2984
|
-
return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2985
|
-
return __generator(this, function (_a) {
|
|
2986
|
-
switch (_a.label) {
|
|
2987
|
-
case 0:
|
|
2988
|
-
if (!formProps.onSelectFilter) return [3 /*break*/, 2];
|
|
2989
|
-
return [4 /*yield*/, formProps.onSelectFilter({ selectedRows: selectedRows, value: value })];
|
|
2990
|
-
case 1:
|
|
2991
|
-
_a.sent();
|
|
2992
|
-
_a.label = 2;
|
|
2993
|
-
case 2: return [2 /*return*/, true];
|
|
2994
|
-
}
|
|
2995
|
-
});
|
|
2996
|
-
}); })];
|
|
2997
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
2998
|
-
}
|
|
2999
|
-
});
|
|
3000
|
-
}); }, [formProps, props.field, props.selectedRows, updatingCells]);
|
|
3001
|
-
// Load up options list if it's async function
|
|
3002
|
-
useEffect(function () {
|
|
3003
|
-
var _a;
|
|
3004
|
-
if (options || optionsInitialising.current)
|
|
3005
|
-
return;
|
|
3006
|
-
optionsInitialising.current = true;
|
|
3007
|
-
var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
|
|
3008
|
-
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
3009
|
-
var optionsList;
|
|
3010
|
-
return __generator(this, function (_a) {
|
|
3011
|
-
switch (_a.label) {
|
|
3012
|
-
case 0:
|
|
3013
|
-
if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
|
|
3014
|
-
return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
|
|
3015
|
-
case 1:
|
|
3016
|
-
optionsConf = _a.sent();
|
|
3017
|
-
_a.label = 2;
|
|
3018
|
-
case 2:
|
|
3019
|
-
optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
|
|
3020
|
-
if (item == null || typeof item == "string" || typeof item == "number") {
|
|
3021
|
-
item = { value: item, label: item, disabled: false };
|
|
3022
|
-
}
|
|
3023
|
-
return item;
|
|
3024
|
-
});
|
|
3025
|
-
if (formProps.filtered) {
|
|
3026
|
-
// This is needed otherwise when filter input is rendered and sets autofocus
|
|
3027
|
-
// the mouse up of the double click edit triggers the cell to cancel editing
|
|
3028
|
-
delay(function () { return setOptions(optionsList); }, 100);
|
|
3029
|
-
}
|
|
3030
|
-
else {
|
|
3031
|
-
setOptions(optionsList);
|
|
3032
|
-
}
|
|
3033
|
-
optionsInitialising.current = false;
|
|
3034
|
-
return [2 /*return*/];
|
|
3035
|
-
}
|
|
3036
|
-
});
|
|
3037
|
-
}); })();
|
|
3038
|
-
}, [filter, options, formProps.filtered, formProps.options, props.selectedRows]);
|
|
3039
|
-
// Local filtering
|
|
3040
|
-
useEffect(function () {
|
|
3041
|
-
if (formProps.filtered == "local") {
|
|
3042
|
-
if (options == null)
|
|
3043
|
-
return;
|
|
3044
|
-
setFilteredValues(options
|
|
3045
|
-
.map(function (option) {
|
|
3046
|
-
if (option.label != null && typeof option.label !== "string") {
|
|
3047
|
-
console.error("Cannot filter non-string labels", option);
|
|
3048
|
-
return undefined;
|
|
3049
|
-
}
|
|
3050
|
-
var str = option.label || "";
|
|
3051
|
-
return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
|
|
3052
|
-
})
|
|
3053
|
-
.filter(function (r) { return r !== undefined; }));
|
|
3054
|
-
}
|
|
3055
|
-
}, [formProps.filtered, filter, options]);
|
|
3056
|
-
var researchOnFilterChange = debounce(useCallback(function () {
|
|
3057
|
-
setOptions(null);
|
|
3058
|
-
}, []), 500);
|
|
3059
|
-
var previousFilter = useRef(filter);
|
|
3060
|
-
// Reload filtering
|
|
3061
|
-
useEffect(function () {
|
|
3062
|
-
if (previousFilter.current != filter && formProps.filtered == "reload") {
|
|
3063
|
-
previousFilter.current = filter;
|
|
3064
|
-
formProps.optionsRequestCancel && formProps.optionsRequestCancel();
|
|
3065
|
-
researchOnFilterChange().then();
|
|
3066
|
-
}
|
|
3067
|
-
}, [filter, formProps, props, researchOnFilterChange]);
|
|
3068
|
-
var onFilterKeyDown = useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
3069
|
-
var activeOptions;
|
|
3070
|
-
return __generator(this, function (_a) {
|
|
3071
|
-
switch (_a.label) {
|
|
3072
|
-
case 0:
|
|
3073
|
-
if (!options)
|
|
3074
|
-
return [2 /*return*/];
|
|
3075
|
-
if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
|
|
3076
|
-
activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
|
|
3077
|
-
if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
|
|
3078
|
-
return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
|
|
3079
|
-
case 1:
|
|
3080
|
-
_a.sent();
|
|
3081
|
-
stopEditing();
|
|
3082
|
-
return [3 /*break*/, 5];
|
|
3083
|
-
case 2:
|
|
3084
|
-
if (!formProps.onSelectFilter) return [3 /*break*/, 4];
|
|
3085
|
-
return [4 /*yield*/, selectFilterHandler(filter)];
|
|
3086
|
-
case 3:
|
|
3087
|
-
_a.sent();
|
|
3088
|
-
stopEditing();
|
|
3089
|
-
return [3 /*break*/, 5];
|
|
3090
|
-
case 4:
|
|
3091
|
-
e.preventDefault();
|
|
3092
|
-
e.stopPropagation();
|
|
3093
|
-
_a.label = 5;
|
|
3094
|
-
case 5: return [2 /*return*/];
|
|
3095
|
-
}
|
|
3096
|
-
});
|
|
3097
|
-
}); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, formProps]);
|
|
3098
|
-
return popoverWrapper(jsxs(Fragment$1, { children: [formProps.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
|
|
3099
|
-
var _b;
|
|
3100
|
-
var ref = _a.ref;
|
|
3101
|
-
return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: 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); } }) })));
|
|
3102
|
-
} })), jsx(MenuDivider, {}, "$$divider_filter")] })), jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs(Fragment$1, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
|
|
3103
|
-
var _a;
|
|
3104
|
-
return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (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)));
|
|
3105
|
-
})] }) }))] }));
|
|
3106
|
-
};
|
|
3107
|
-
|
|
3108
3116
|
var GridPopoverEditDropDown = function (colDef) {
|
|
3109
3117
|
var _a;
|
|
3110
3118
|
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) && {
|
|
@@ -3216,7 +3224,7 @@ var GridFormTextInput = function (props) {
|
|
|
3216
3224
|
return "Text must be no longer than ".concat(formProps.maxlength, " characters");
|
|
3217
3225
|
}
|
|
3218
3226
|
if (formProps.validate) {
|
|
3219
|
-
return formProps.validate(trimmedValue);
|
|
3227
|
+
return formProps.validate(trimmedValue, props.data);
|
|
3220
3228
|
}
|
|
3221
3229
|
return null;
|
|
3222
3230
|
}, [formProps, value]);
|
|
@@ -3268,5 +3276,5 @@ var GridSubComponentTextArea = function (props) {
|
|
|
3268
3276
|
return (jsx("div", __assign({ className: "FreeTextInput LuiDeprecatedForms" }, { children: jsx("textarea", { autoFocus: true, maxLength: 10000, spellCheck: true, className: "free-text-input", onChange: function (e) { return setValue(e.target.value); }, defaultValue: value }) })));
|
|
3269
3277
|
};
|
|
3270
3278
|
|
|
3271
|
-
export { ComponentLoadingWrapper, ControlledMenu, FocusableItem, GenericCellEditorComponent, GenericCellEditorComponentFr, GenericMultiEditCellClass, Grid, GridCell, GridCellRenderer, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, GridSubComponentTextArea, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuItem, MenuRadioGroup, SubMenu, TextAreaInput, TextInputFormatted, UpdatingContext, UpdatingContextProvider, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait };
|
|
3279
|
+
export { ComponentLoadingWrapper, ControlledMenu, FocusableItem, GenericCellEditorComponent, GenericCellEditorComponentFr, GenericMultiEditCellClass, Grid, GridCell, GridCellRenderer, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, GridSubComponentTextArea, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuItem, MenuRadioGroup, MenuSeparator, MenuSeparatorString, PopoutMenuSeparator, SubMenu, TextAreaInput, TextInputFormatted, UpdatingContext, UpdatingContextProvider, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait };
|
|
3272
3280
|
//# sourceMappingURL=step-ag-grid.esm.js.map
|