udp-stencil-component-library 26.2.0-beta.0 → 26.2.0-beta.2
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/cjs/{SearchBuilder-BsB_257b.js → SearchBuilder-aqpLQz8E.js} +4 -0
- package/dist/cjs/ag-grid-base_63.cjs.entry.js +40 -13
- package/dist/cjs/api-method-instance-grid.cjs.entry.js +7 -2
- package/dist/cjs/{apiMethodInstance-B_zfUIFl.js → apiMethodInstance-DymTfku4.js} +1 -1
- package/dist/cjs/{configureUdpColumnMods-MGNO-bXn.js → configureUdpColumnMods-DtsJ11YI.js} +17 -2
- package/dist/cjs/index.cjs.js +4 -3
- package/dist/cjs/lookupHelper-fokGJbeb.js +86 -0
- package/dist/cjs/resource-timeline-calendar.cjs.entry.js +14 -2
- package/dist/cjs/resource-timeline-primary-bar.cjs.entry.js +5 -1
- package/dist/cjs/search-method-grid.cjs.entry.js +2 -69
- package/dist/cjs/udp-forms-renderer.cjs.entry.js +1 -1
- package/dist/collection/components/grid/new-grid/gridFunctions/savedViews.js +33 -6
- package/dist/collection/components/grid/new-grid/helperFunctions/configureUdpColumnMods.js +16 -2
- package/dist/collection/components/grid/new-grid/helperFunctions/lookupHelper.js +54 -47
- package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-calendar.js +14 -2
- package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-primary-bar.js +5 -1
- package/dist/collection/udp-utilities/search/SearchBuilder.js +4 -0
- package/dist/components/SearchBuilder.js +1 -1
- package/dist/components/ag-grid-base2.js +1 -1
- package/dist/components/configureUdpColumnMods.js +1 -1
- package/dist/components/resource-timeline-calendar.js +1 -1
- package/dist/components/resource-timeline-primary-bar2.js +1 -1
- package/dist/components/search-method-grid2.js +1 -1
- package/dist/docs.json +8 -1
- package/dist/esm/{SearchBuilder-CiCHnrfs.js → SearchBuilder-DlL9u8ku.js} +4 -0
- package/dist/esm/ag-grid-base_63.entry.js +35 -8
- package/dist/esm/api-method-instance-grid.entry.js +7 -2
- package/dist/esm/{apiMethodInstance-WU8uISWJ.js → apiMethodInstance-BVrO2muA.js} +1 -1
- package/dist/esm/{configureUdpColumnMods-UsX5iItH.js → configureUdpColumnMods-CKOL0XD9.js} +17 -2
- package/dist/esm/index.js +4 -3
- package/dist/esm/lookupHelper-C0n7Ube1.js +81 -0
- package/dist/esm/resource-timeline-calendar.entry.js +14 -2
- package/dist/esm/resource-timeline-primary-bar.entry.js +5 -1
- package/dist/esm/search-method-grid.entry.js +2 -69
- package/dist/esm/udp-forms-renderer.entry.js +1 -1
- package/dist/stencil-library/{SearchBuilder-CiCHnrfs.js → SearchBuilder-DlL9u8ku.js} +1 -1
- package/dist/stencil-library/ag-grid-base_63.entry.js +1 -1
- package/dist/stencil-library/api-method-instance-grid.entry.js +1 -1
- package/dist/stencil-library/{apiMethodInstance-WU8uISWJ.js → apiMethodInstance-BVrO2muA.js} +1 -1
- package/dist/stencil-library/configureUdpColumnMods-CKOL0XD9.js +1 -0
- package/dist/stencil-library/index.esm.js +1 -1
- package/dist/stencil-library/lookupHelper-C0n7Ube1.js +1 -0
- package/dist/stencil-library/resource-timeline-calendar.entry.js +1 -1
- package/dist/stencil-library/resource-timeline-primary-bar.entry.js +1 -1
- package/dist/stencil-library/search-method-grid.entry.js +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
- package/dist/types/components/grid/new-grid/gridFunctions/savedViews.d.ts +2 -0
- package/dist/types/components/grid/new-grid/helperFunctions/lookupHelper.d.ts +7 -0
- package/package.json +1 -1
- package/dist/cjs/getCurrentApiCatalogId-D7xHCEzs.js +0 -7
- package/dist/esm/getCurrentApiCatalogId-DeurXd9l.js +0 -5
- package/dist/stencil-library/configureUdpColumnMods-UsX5iItH.js +0 -1
- package/dist/stencil-library/getCurrentApiCatalogId-DeurXd9l.js +0 -1
|
@@ -309,6 +309,10 @@ class SearchUtilities {
|
|
|
309
309
|
if (!validation.isValid) {
|
|
310
310
|
throw new Error(`Invalid search: ${validation.errors.join(', ')}`);
|
|
311
311
|
}
|
|
312
|
+
// Wait for ConfigService to be initialized — callers may invoke this from
|
|
313
|
+
// top-level effects that mount before the app sets PRODUCT_API_DOMAIN,
|
|
314
|
+
// which would otherwise produce a relative URL and fail the request.
|
|
315
|
+
await configService.ConfigService.waitForConfig();
|
|
312
316
|
// Build the API URL
|
|
313
317
|
const url = `${configService.ConfigService.productV1ApiUrl}/${tableName}/search`;
|
|
314
318
|
// Execute the search
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
var index = require('./index-G1ccGqOs.js');
|
|
4
4
|
var agGridEnterpriseV33 = require('ag-grid-enterprise-v33');
|
|
5
5
|
var apiUtils = require('./apiUtils-ELzOoTQ0.js');
|
|
6
|
-
var
|
|
6
|
+
var lookupHelper = require('./lookupHelper-fokGJbeb.js');
|
|
7
7
|
var tenantUtils = require('./tenantUtils-BCKSE0vq.js');
|
|
8
8
|
var statusRenderer = require('./status-renderer-9CQ-hhq8.js');
|
|
9
|
-
var configureUdpColumnMods = require('./configureUdpColumnMods-
|
|
9
|
+
var configureUdpColumnMods = require('./configureUdpColumnMods-DtsJ11YI.js');
|
|
10
10
|
var lodashEs = require('lodash-es');
|
|
11
11
|
var makeApiCall = require('./makeApiCall-CFfg9gI0.js');
|
|
12
12
|
var configService = require('./configService-BqiLnW8G.js');
|
|
@@ -291,10 +291,15 @@ class SavedViews {
|
|
|
291
291
|
var _a;
|
|
292
292
|
if (!this.baseColumnState)
|
|
293
293
|
return;
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
// Compare only primary (user-defined) colIds — pivot result columns regenerate
|
|
295
|
+
// from filtered data and shouldn't be treated as external column-def updates.
|
|
296
|
+
const primaryColIds = this.getPrimaryColIds();
|
|
297
|
+
const collectColIds = (state) => state
|
|
298
|
+
.filter(c => primaryColIds.has(c.colId))
|
|
296
299
|
.map(c => c.colId)
|
|
297
300
|
.join(',');
|
|
301
|
+
const currentColIds = collectColIds((_a = this.api.getColumnState()) !== null && _a !== void 0 ? _a : []);
|
|
302
|
+
const baseColIds = collectColIds(JSON.parse(this.baseColumnState));
|
|
298
303
|
if (currentColIds !== baseColIds) {
|
|
299
304
|
this.baseColumnState = JSON.stringify(this.api.getColumnState());
|
|
300
305
|
if (this.isDirty) {
|
|
@@ -350,8 +355,26 @@ class SavedViews {
|
|
|
350
355
|
this.saveCurrentStateToLocalStorage();
|
|
351
356
|
});
|
|
352
357
|
};
|
|
358
|
+
// Returns the set of colIds for primary (user-defined) columns. Pivot result
|
|
359
|
+
// columns are secondary and excluded — they regenerate from filtered data and
|
|
360
|
+
// would cause spurious dirty diffs.
|
|
361
|
+
this.getPrimaryColIds = () => {
|
|
362
|
+
var _a;
|
|
363
|
+
return new Set(((_a = this.api.getColumns()) !== null && _a !== void 0 ? _a : [])
|
|
364
|
+
.filter(c => c.isPrimary())
|
|
365
|
+
.map(c => c.getColId()));
|
|
366
|
+
};
|
|
367
|
+
// Serializes column state to a JSON string filtered to primary columns only.
|
|
368
|
+
// Using a positive include filter (vs. excluding pivot result ids) keeps the
|
|
369
|
+
// comparison symmetric across snapshots — stale pivot ids in older baselines
|
|
370
|
+
// get dropped automatically because they aren't in the current primary set.
|
|
371
|
+
this.serializeUserColumnState = (state) => {
|
|
372
|
+
const primaryColIds = this.getPrimaryColIds();
|
|
373
|
+
return JSON.stringify(state.filter(c => primaryColIds.has(c.colId)));
|
|
374
|
+
};
|
|
353
375
|
// Compare current grid state against snapshot (view active) or default empty state (no view)
|
|
354
376
|
this.checkIfDirty = () => {
|
|
377
|
+
var _a, _b;
|
|
355
378
|
// Skip during initial setup — baseline will be recaptured after parent
|
|
356
379
|
// gridReady handlers (e.g. search-method-grid) finish applying state.
|
|
357
380
|
if (this.baselineRecaptureId !== null)
|
|
@@ -359,18 +382,22 @@ class SavedViews {
|
|
|
359
382
|
let dirty;
|
|
360
383
|
if (this.activeViewId && this.activeViewState) {
|
|
361
384
|
// Named view active: compare against the snapshot taken when the view was applied
|
|
362
|
-
const currentColumnState =
|
|
385
|
+
const currentColumnState = this.serializeUserColumnState((_a = this.api.getColumnState()) !== null && _a !== void 0 ? _a : []);
|
|
386
|
+
const baseColumnState = this.serializeUserColumnState(JSON.parse(this.activeViewState.columnState));
|
|
363
387
|
const currentFilterModel = JSON.stringify(this.api.getFilterModel());
|
|
364
388
|
dirty =
|
|
365
|
-
currentColumnState !==
|
|
389
|
+
currentColumnState !== baseColumnState ||
|
|
366
390
|
currentFilterModel !== this.activeViewState.filterModel;
|
|
367
391
|
}
|
|
368
392
|
else {
|
|
369
393
|
// No view: dirty if there are any active filters or column state changes vs baseline
|
|
370
394
|
const filterModel = this.api.getFilterModel();
|
|
371
395
|
const hasFilters = Object.keys(filterModel !== null && filterModel !== void 0 ? filterModel : {}).length > 0;
|
|
372
|
-
const
|
|
373
|
-
const
|
|
396
|
+
const currentColumnState = this.serializeUserColumnState((_b = this.api.getColumnState()) !== null && _b !== void 0 ? _b : []);
|
|
397
|
+
const baseColumnState = this.baseColumnState !== null
|
|
398
|
+
? this.serializeUserColumnState(JSON.parse(this.baseColumnState))
|
|
399
|
+
: null;
|
|
400
|
+
const hasColumnChanges = baseColumnState !== null && currentColumnState !== baseColumnState;
|
|
374
401
|
dirty = hasFilters || hasColumnChanges;
|
|
375
402
|
}
|
|
376
403
|
if (dirty !== this.isDirty) {
|
|
@@ -624,7 +651,7 @@ class SavedViews {
|
|
|
624
651
|
},
|
|
625
652
|
];
|
|
626
653
|
try {
|
|
627
|
-
await apiUtils.updateViewAndConfigurations(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId,
|
|
654
|
+
await apiUtils.updateViewAndConfigurations(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId, lookupHelper.getCurrentApiCatalogId(), view.name, saveState, view.isDefault ? 1 : 0, context === null || context === void 0 ? void 0 : context.entityName, (_a = view.gridViewVisibilityTypeId) !== null && _a !== void 0 ? _a : 1, () => null);
|
|
628
655
|
await this.fetchViews();
|
|
629
656
|
const updated = this.filteredViews.find(v => v.gridViewId === view.gridViewId);
|
|
630
657
|
if (updated)
|
|
@@ -786,7 +813,7 @@ class SavedViews {
|
|
|
786
813
|
},
|
|
787
814
|
];
|
|
788
815
|
try {
|
|
789
|
-
await apiUtils.saveView(getUserId(), context === null || context === void 0 ? void 0 : context.gridId,
|
|
816
|
+
await apiUtils.saveView(getUserId(), context === null || context === void 0 ? void 0 : context.gridId, lookupHelper.getCurrentApiCatalogId(), name, context === null || context === void 0 ? void 0 : context.entityName, saveState, visibilityTypeId, 0, // not set as default
|
|
790
817
|
() => null);
|
|
791
818
|
await this.fetchViews();
|
|
792
819
|
const newView = this.filteredViews.find(v => v.name === name);
|
|
@@ -806,7 +833,7 @@ class SavedViews {
|
|
|
806
833
|
this.refresh();
|
|
807
834
|
const context = this.api.getGridOption('context');
|
|
808
835
|
try {
|
|
809
|
-
await apiUtils.updateView(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId,
|
|
836
|
+
await apiUtils.updateView(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId, lookupHelper.getCurrentApiCatalogId(), name, view.isDefault ? 1 : 0, context === null || context === void 0 ? void 0 : context.entityName, visibilityTypeId, () => null);
|
|
810
837
|
await this.fetchViews();
|
|
811
838
|
}
|
|
812
839
|
catch (err) {
|
|
@@ -824,12 +851,12 @@ class SavedViews {
|
|
|
824
851
|
const context = this.api.getGridOption('context');
|
|
825
852
|
const isCurrentlyDefault = view.isDefault;
|
|
826
853
|
try {
|
|
827
|
-
await apiUtils.updateView(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId,
|
|
854
|
+
await apiUtils.updateView(view.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId, lookupHelper.getCurrentApiCatalogId(), view.name, isCurrentlyDefault ? 0 : 1, context === null || context === void 0 ? void 0 : context.entityName, (_a = view.gridViewVisibilityTypeId) !== null && _a !== void 0 ? _a : 1, () => null);
|
|
828
855
|
if (!isCurrentlyDefault) {
|
|
829
856
|
// Unset the previous default if there was one
|
|
830
857
|
const currentDefault = this.filteredViews.find(v => v.isDefault);
|
|
831
858
|
if (currentDefault) {
|
|
832
|
-
await apiUtils.updateView(currentDefault.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId,
|
|
859
|
+
await apiUtils.updateView(currentDefault.gridViewId, getUserId(), context === null || context === void 0 ? void 0 : context.gridId, lookupHelper.getCurrentApiCatalogId(), currentDefault.name, 0, context === null || context === void 0 ? void 0 : context.entityName, (_b = currentDefault.gridViewVisibilityTypeId) !== null && _b !== void 0 ? _b : 1, () => null).catch(err => console.log(err));
|
|
833
860
|
}
|
|
834
861
|
}
|
|
835
862
|
await this.fetchViews();
|
|
@@ -4,10 +4,15 @@ var index = require('./index-G1ccGqOs.js');
|
|
|
4
4
|
var makeApiCall = require('./makeApiCall-CFfg9gI0.js');
|
|
5
5
|
var searchObject = require('./searchObject-DeDFFGcx.js');
|
|
6
6
|
var lodashEs = require('lodash-es');
|
|
7
|
-
var apiMethodInstance = require('./apiMethodInstance-
|
|
7
|
+
var apiMethodInstance = require('./apiMethodInstance-DymTfku4.js');
|
|
8
8
|
var configService = require('./configService-BqiLnW8G.js');
|
|
9
9
|
require('axios');
|
|
10
|
-
require('./configureUdpColumnMods-
|
|
10
|
+
require('./configureUdpColumnMods-DtsJ11YI.js');
|
|
11
|
+
require('./lookupHelper-fokGJbeb.js');
|
|
12
|
+
require('./apiUtils-ELzOoTQ0.js');
|
|
13
|
+
require('deep-equal');
|
|
14
|
+
require('@stencil/store');
|
|
15
|
+
require('./tenantUtils-BCKSE0vq.js');
|
|
11
16
|
|
|
12
17
|
function mergeSearchObjects(baseSearchObject, searchObjectOverrides) {
|
|
13
18
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var configureUdpColumnMods = require('./configureUdpColumnMods-
|
|
3
|
+
var configureUdpColumnMods = require('./configureUdpColumnMods-DtsJ11YI.js');
|
|
4
4
|
|
|
5
5
|
function mapDotNetTypeToAgGridType(type) {
|
|
6
6
|
const normalized = type.replace(/\?$/, '').trim().toLowerCase();
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var lookupHelper = require('./lookupHelper-fokGJbeb.js');
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Finds an existing 'actions' column in an array of ColDefs and applies
|
|
5
7
|
* a dynamic fixed width and right pinning.
|
|
@@ -28,9 +30,22 @@ function configureUdpColumnMods(columnDefs, disableColumnFiltering = false) {
|
|
|
28
30
|
// Return a new object with the original properties plus our overrides
|
|
29
31
|
return Object.assign(Object.assign({}, colDef), { pinned: 'right', width: calculatedWidth, minWidth: calculatedWidth, maxWidth: calculatedWidth, sortable: false, filter: false, suppressHeaderMenuButton: true, suppressMovable: true });
|
|
30
32
|
}
|
|
31
|
-
//
|
|
33
|
+
// Lookup columns: display the resolved label, but filter against the underlying key.
|
|
34
|
+
// The set filter values + dropdown labels come from the cached lookup table, so the
|
|
35
|
+
// filter model holds keys (server-side IN clause works unchanged). Sort is left off
|
|
36
|
+
// because the backend can only order by the stored key, not the resolved label.
|
|
32
37
|
if ((_e = colDef === null || colDef === void 0 ? void 0 : colDef.context) === null || _e === void 0 ? void 0 : _e.lookupId) {
|
|
33
|
-
|
|
38
|
+
const lookupId = colDef.context.lookupId;
|
|
39
|
+
const field = colDef.field;
|
|
40
|
+
return Object.assign(Object.assign({}, colDef), { valueGetter: (params) => params.data[field + 'LookupValue'], filterValueGetter: (params) => { var _a; return (_a = params.data) === null || _a === void 0 ? void 0 : _a[field]; }, filter: 'agSetColumnFilter', filterParams: Object.assign({ values: (params) => {
|
|
41
|
+
lookupHelper.getLookupTable(lookupId).then(table => {
|
|
42
|
+
params.success(Array.from(table.valueMap.keys()));
|
|
43
|
+
});
|
|
44
|
+
}, valueFormatter: (params) => {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
const key = params.value == null ? '' : String(params.value);
|
|
47
|
+
return (_b = (_a = lookupHelper.getLookupTableSync(lookupId)) === null || _a === void 0 ? void 0 : _a.valueMap.get(key)) !== null && _b !== void 0 ? _b : key;
|
|
48
|
+
} }, colDef.filterParams), sortable: false });
|
|
34
49
|
}
|
|
35
50
|
if (disableColumnFiltering) {
|
|
36
51
|
return Object.assign(Object.assign({}, colDef), { filter: false });
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -4,11 +4,11 @@ var formRegistry = require('./form-registry-Cme6U-bl.js');
|
|
|
4
4
|
var axios = require('axios');
|
|
5
5
|
var transformSearchData = require('./transformSearchData-B4bk4Aik.js');
|
|
6
6
|
var catalogStore = require('./catalog-store-COlrLo9B.js');
|
|
7
|
-
var SearchBuilder = require('./SearchBuilder-
|
|
7
|
+
var SearchBuilder = require('./SearchBuilder-aqpLQz8E.js');
|
|
8
8
|
var searchObject = require('./searchObject-DeDFFGcx.js');
|
|
9
9
|
var catalogTree = require('./catalogTree-CnzW15ah.js');
|
|
10
10
|
var configService = require('./configService-BqiLnW8G.js');
|
|
11
|
-
var apiMethodInstance = require('./apiMethodInstance-
|
|
11
|
+
var apiMethodInstance = require('./apiMethodInstance-DymTfku4.js');
|
|
12
12
|
var webComponents = require('@fluentui/web-components');
|
|
13
13
|
var tokens = require('@fluentui/tokens');
|
|
14
14
|
var agGridEnterpriseV33 = require('ag-grid-enterprise-v33');
|
|
@@ -17,7 +17,8 @@ require('./apiUtils-ELzOoTQ0.js');
|
|
|
17
17
|
require('deep-equal');
|
|
18
18
|
require('./makeApiCall-CFfg9gI0.js');
|
|
19
19
|
require('./tenantUtils-BCKSE0vq.js');
|
|
20
|
-
require('./configureUdpColumnMods-
|
|
20
|
+
require('./configureUdpColumnMods-DtsJ11YI.js');
|
|
21
|
+
require('./lookupHelper-fokGJbeb.js');
|
|
21
22
|
|
|
22
23
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
24
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var apiUtils = require('./apiUtils-ELzOoTQ0.js');
|
|
4
|
+
|
|
5
|
+
function getCurrentApiCatalogId() {
|
|
6
|
+
return sessionStorage.getItem('current-api-catalog-id');
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const resolvedLookups = new Map();
|
|
10
|
+
const pendingLookups = new Map();
|
|
11
|
+
async function getLookupTable(lookupId) {
|
|
12
|
+
const cached = resolvedLookups.get(lookupId);
|
|
13
|
+
if (cached)
|
|
14
|
+
return cached;
|
|
15
|
+
const inFlight = pendingLookups.get(lookupId);
|
|
16
|
+
if (inFlight)
|
|
17
|
+
return inFlight;
|
|
18
|
+
const promise = (async () => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const lookupApiMethodId = (_b = (_a = (await apiUtils.getPromotedLookupMethod(getCurrentApiCatalogId()))) === null || _a === void 0 ? void 0 : _a.unityBaseGetDataMethod) === null || _b === void 0 ? void 0 : _b.apiMethodId;
|
|
21
|
+
const empty = { keyName: '', valueName: '', valueMap: new Map() };
|
|
22
|
+
if (!lookupApiMethodId)
|
|
23
|
+
return empty;
|
|
24
|
+
try {
|
|
25
|
+
const response = await apiUtils.executeQueryWithParameters({ data: { id: lookupId } }, lookupApiMethodId);
|
|
26
|
+
const { keyName, valueName, data } = response !== null && response !== void 0 ? response : {};
|
|
27
|
+
if (!data || !keyName || !valueName)
|
|
28
|
+
return empty;
|
|
29
|
+
const valueMap = new Map(data.map((item) => [String(item[keyName]), item[valueName]]));
|
|
30
|
+
const table = { keyName, valueName, valueMap };
|
|
31
|
+
resolvedLookups.set(lookupId, table);
|
|
32
|
+
return table;
|
|
33
|
+
}
|
|
34
|
+
catch (_c) {
|
|
35
|
+
return empty;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
pendingLookups.delete(lookupId);
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
pendingLookups.set(lookupId, promise);
|
|
42
|
+
return promise;
|
|
43
|
+
}
|
|
44
|
+
function getLookupTableSync(lookupId) {
|
|
45
|
+
return resolvedLookups.get(lookupId);
|
|
46
|
+
}
|
|
47
|
+
async function processLookupsInData(rowData, columnDefs) {
|
|
48
|
+
if (!(rowData === null || rowData === void 0 ? void 0 : rowData.length)) {
|
|
49
|
+
return rowData;
|
|
50
|
+
}
|
|
51
|
+
const lookupsByField = new Map();
|
|
52
|
+
const uniqueLookupIds = new Set();
|
|
53
|
+
columnDefs.forEach(col => {
|
|
54
|
+
var _a;
|
|
55
|
+
const lookupId = (_a = col === null || col === void 0 ? void 0 : col.context) === null || _a === void 0 ? void 0 : _a.lookupId;
|
|
56
|
+
if (lookupId && typeof lookupId === 'string' && col.field) {
|
|
57
|
+
lookupsByField.set(col.field, lookupId);
|
|
58
|
+
uniqueLookupIds.add(lookupId);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
if (uniqueLookupIds.size === 0) {
|
|
62
|
+
return rowData;
|
|
63
|
+
}
|
|
64
|
+
await Promise.all(Array.from(uniqueLookupIds).map(id => getLookupTable(id)));
|
|
65
|
+
return rowData.map(row => {
|
|
66
|
+
var _a;
|
|
67
|
+
const newRow = Object.assign({}, row);
|
|
68
|
+
for (const [field, lookupId] of lookupsByField.entries()) {
|
|
69
|
+
if (newRow[field] === null || newRow[field] === undefined)
|
|
70
|
+
continue;
|
|
71
|
+
const valueMap = (_a = resolvedLookups.get(lookupId)) === null || _a === void 0 ? void 0 : _a.valueMap;
|
|
72
|
+
if (!valueMap)
|
|
73
|
+
continue;
|
|
74
|
+
const key = String(newRow[field]);
|
|
75
|
+
if (valueMap.has(key)) {
|
|
76
|
+
newRow[field + 'LookupValue'] = valueMap.get(key);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return newRow;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
exports.getCurrentApiCatalogId = getCurrentApiCatalogId;
|
|
84
|
+
exports.getLookupTable = getLookupTable;
|
|
85
|
+
exports.getLookupTableSync = getLookupTableSync;
|
|
86
|
+
exports.processLookupsInData = processLookupsInData;
|
|
@@ -106,6 +106,7 @@ const ResourceTimelineCalendar = class {
|
|
|
106
106
|
field: this.dateKey,
|
|
107
107
|
pivot: true,
|
|
108
108
|
pivotComparator: this.dateCompare,
|
|
109
|
+
suppressFiltersToolPanel: true,
|
|
109
110
|
valueGetter: params => {
|
|
110
111
|
let dateString = '';
|
|
111
112
|
if (this.convertDatesFromUTC) {
|
|
@@ -153,7 +154,7 @@ const ResourceTimelineCalendar = class {
|
|
|
153
154
|
}
|
|
154
155
|
render() {
|
|
155
156
|
const todayString = new Date().toLocaleDateString('en-US');
|
|
156
|
-
return (index.h("div", { key: '
|
|
157
|
+
return (index.h("div", { key: '92e721dafa80975ead78ed3e8fba36a65636a8d0', class: "resource-timeline-calendar" }, index.h("resource-timeline-primary-bar", { key: 'e17ff97f7069c5a057caad6168534738dbc79c53', gridBarTitle: this.gridBarTitle, subTitle: this.subTitle, primaryAction: this.primaryAction, secondaryAction: this.secondaryAction, clickBackward: this.handleClickBackward, clickForward: this.handleClickForward, clickToday: this.handleClickToday, subtitleStatus: this.subtitleStatus, subtitleStatusMappingClasses: this.subtitleStatusMappingClasses, disableHeaderActions: this.disableHeaderActions, showLockedIcon: this.showLockedIcon }, index.h("slot", { key: '4eb8edb054f962695c7b018508ea718d5bafec16', name: "inline", slot: "inline" })), index.h("client-side-grid", { key: '32bfe633f571dd7a47d773cff67042be5b6b19f0', rowData: this.filledRowData, columnDefs: this.formattedColumnDefs, gridFunctions: this.getGridFunctions(), gridId: this.gridId, gridOptions: Object.assign(Object.assign({}, this.additionalGridOptions), { components: {
|
|
157
158
|
resourceTimelineCalendarHeader: ResourceTimelineColumnHeader,
|
|
158
159
|
}, processPivotResultColDef: colDef => {
|
|
159
160
|
colDef.suppressHeaderContextMenu = true;
|
|
@@ -196,7 +197,11 @@ const ResourceTimelineCalendar = class {
|
|
|
196
197
|
return params.node.group &&
|
|
197
198
|
((_c = (_b = (_a = params.node.allLeafChildren) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.isDateRangePlaceholder) === true;
|
|
198
199
|
},
|
|
199
|
-
}, pivotMode: true,
|
|
200
|
+
}, pivotMode: true,
|
|
201
|
+
// Placeholder rows anchor pivot date columns so all days remain visible
|
|
202
|
+
// regardless of filters. alwaysPassFilter exempts them from every filter
|
|
203
|
+
// type (column, quick, external, advanced) without per-filter wiring.
|
|
204
|
+
alwaysPassFilter: (node) => { var _a; return ((_a = node.data) === null || _a === void 0 ? void 0 : _a.isDateRangePlaceholder) === true; }, quickFilterMatcher: () => true, isExternalFilterPresent: () => this.externalFilterText.length > 0, doesExternalFilterPass: (node) => {
|
|
200
205
|
var _a, _b;
|
|
201
206
|
if ((_a = node.data) === null || _a === void 0 ? void 0 : _a.isDateRangePlaceholder)
|
|
202
207
|
return true;
|
|
@@ -213,6 +218,13 @@ const ResourceTimelineCalendar = class {
|
|
|
213
218
|
});
|
|
214
219
|
}, removePivotHeaderRowWhenSingleValueColumn: true, suppressAggFuncInHeader: true, pivotRowTotals: 'after', suppressMovableColumns: true, enableStrictPivotColumnOrder: true, rowGroupPanelShow: this.rowGroupPanelShow, sideBar: {
|
|
215
220
|
toolPanels: [
|
|
221
|
+
{
|
|
222
|
+
id: 'filters',
|
|
223
|
+
labelDefault: 'Filters',
|
|
224
|
+
labelKey: 'filters',
|
|
225
|
+
iconKey: 'filter',
|
|
226
|
+
toolPanel: 'agFiltersToolPanel',
|
|
227
|
+
},
|
|
216
228
|
{
|
|
217
229
|
id: 'columns',
|
|
218
230
|
labelDefault: 'Columns',
|
|
@@ -28,7 +28,11 @@ const ResourceTimelinePrimaryBar = class {
|
|
|
28
28
|
Object.assign(Object.assign({}, this.secondaryAction), { label: (_d = this.secondaryAction.label) !== null && _d !== void 0 ? _d : '', disabled: this.secondaryAction.disabled || this.disableHeaderActions }),
|
|
29
29
|
]
|
|
30
30
|
: [];
|
|
31
|
-
return (index.h("udp-primary-action-header", { key: 'f5edf0459f7e0f6136ed8e3056db4b788369164e', primaryAction: primaryAction, secondaryActions: secondaryActions }, index.h("span", { key: '4b539edaaa740cff41c3c4e1a8b6086d4f4c54df', slot: "title" }, this.gridBarTitle != null
|
|
31
|
+
return (index.h("udp-primary-action-header", { key: 'f5edf0459f7e0f6136ed8e3056db4b788369164e', primaryAction: primaryAction, secondaryActions: secondaryActions }, index.h("span", { key: '4b539edaaa740cff41c3c4e1a8b6086d4f4c54df', slot: "title" }, this.gridBarTitle != null
|
|
32
|
+
? index.h("udp-text", { variant: "subtitle1", block: false }, this.gridBarTitle)
|
|
33
|
+
: index.h("udp-skeleton-loading", { width: "200px" })), index.h("span", { key: 'b3a30a27bc09da0ce1de25e667496120f937101c', slot: "subtitle" }, this.subTitle != null
|
|
34
|
+
? index.h("udp-text", { variant: "caption1" }, this.subTitle)
|
|
35
|
+
: index.h("udp-skeleton-loading", { width: "200px" })), index.h("span", { key: '59002f25369250081912604674992da9bc1e3624', slot: "inline", class: "inline-status" }, index.h("slot", { key: '5c0e77c384f8c62a74072624666e968f0d3658bc', name: "inline" }), this.subtitleStatus && (index.h("udp-fluent-badge", { key: '9627a6c43500ee36edac9d577661559e82bf7370', appearance: "outline", color: chipToBadgeColor[this.subtitleStatusMappingClasses[this.subtitleStatus]] }, this.subtitleStatus)), this.showLockedIcon && (index.h("udp-fluent-icon-button", { key: '515c9aa4087d17d8c8152b9773b8cf9b54ad4ff3', iconName: "lock", appearance: "outline", size: "small", disabled: true, ariaLabel: "Locked" }))), this.clickBackward && (index.h("div", { key: '0a999382c0ce9c3f2bb865d0dba3f43af5e1f44e', slot: "actions", class: "date-navigation" }, index.h("udp-fluent-icon-button", { key: 'd20fd23cbc27ff99a2de9d106a05efcda45d9398', ariaLabel: "Previous period", iconName: "chevron-left", appearance: "subtle", shape: "rounded", disabled: this.disableHeaderActions, onClick: this.clickBackward }), this.clickToday && (index.h("udp-fluent-button", { key: 'a6b7cac7b5a97d4d137085d4ccfd5613242ed18d', appearance: "subtle", disabled: this.disableHeaderActions, onClick: this.clickToday }, "Today")), index.h("udp-fluent-icon-button", { key: 'a67cf5dd57057065f0a437cda062d6df24b0d953', ariaLabel: "Next period", iconName: "chevron-right", appearance: "subtle", shape: "rounded", disabled: this.disableHeaderActions, onClick: this.clickForward })))));
|
|
32
36
|
}
|
|
33
37
|
};
|
|
34
38
|
ResourceTimelinePrimaryBar.style = resourceTimelinePrimaryBarCss();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var index = require('./index-G1ccGqOs.js');
|
|
4
4
|
var apiUtils = require('./apiUtils-ELzOoTQ0.js');
|
|
5
5
|
var searchObject = require('./searchObject-DeDFFGcx.js');
|
|
6
|
-
var
|
|
6
|
+
var lookupHelper = require('./lookupHelper-fokGJbeb.js');
|
|
7
7
|
var makeApiCall = require('./makeApiCall-CFfg9gI0.js');
|
|
8
8
|
var configService = require('./configService-BqiLnW8G.js');
|
|
9
9
|
var isEqual = require('lodash-es/isEqual');
|
|
@@ -16,73 +16,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
16
16
|
|
|
17
17
|
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
18
18
|
|
|
19
|
-
async function processLookupsInData(rowData, columnDefs) {
|
|
20
|
-
var _a, _b;
|
|
21
|
-
if (!(rowData === null || rowData === void 0 ? void 0 : rowData.length)) {
|
|
22
|
-
return rowData;
|
|
23
|
-
}
|
|
24
|
-
// Step 1: Build a map of lookups needed (simpler now)
|
|
25
|
-
const lookupsToFetch = new Map();
|
|
26
|
-
columnDefs.forEach(col => {
|
|
27
|
-
var _a;
|
|
28
|
-
const lookupId = (_a = col === null || col === void 0 ? void 0 : col.context) === null || _a === void 0 ? void 0 : _a.lookupId;
|
|
29
|
-
if (lookupId && typeof lookupId === 'string' && col.field) {
|
|
30
|
-
const existing = lookupsToFetch.get(lookupId);
|
|
31
|
-
if (existing) {
|
|
32
|
-
// If this lookupId is already tracked, add the new field to its list
|
|
33
|
-
existing.columnFields.push(col.field);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
// Otherwise, create a new entry for this lookupId
|
|
37
|
-
lookupsToFetch.set(lookupId, { columnFields: [col.field] });
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
if (lookupsToFetch.size === 0) {
|
|
42
|
-
return rowData;
|
|
43
|
-
}
|
|
44
|
-
// Step 2: Fetch the method ID and then the lookup data
|
|
45
|
-
const lookupApiMethodId = (_b = (_a = (await apiUtils.getPromotedLookupMethod(getCurrentApiCatalogId.getCurrentApiCatalogId()))) === null || _a === void 0 ? void 0 : _a.unityBaseGetDataMethod) === null || _b === void 0 ? void 0 : _b.apiMethodId;
|
|
46
|
-
if (!lookupApiMethodId) {
|
|
47
|
-
return rowData;
|
|
48
|
-
}
|
|
49
|
-
const lookupPromises = Array.from(lookupsToFetch.keys()).map(lookupId => {
|
|
50
|
-
// 2. If not in cache, make the API call.
|
|
51
|
-
return apiUtils.executeQueryWithParameters({ data: { id: lookupId } }, lookupApiMethodId)
|
|
52
|
-
.then(response => {
|
|
53
|
-
return Object.assign({ lookupId }, response);
|
|
54
|
-
})
|
|
55
|
-
.catch(() => ({ lookupId, data: [] }));
|
|
56
|
-
});
|
|
57
|
-
const lookupResults = await Promise.all(lookupPromises);
|
|
58
|
-
// Step 3: Create a fast-access map using the keyName and valueName from the response
|
|
59
|
-
const lookupsMap = new Map();
|
|
60
|
-
lookupResults.forEach(result => {
|
|
61
|
-
const config = lookupsToFetch.get(result.lookupId);
|
|
62
|
-
const keyName = result.keyName;
|
|
63
|
-
const valueName = result.valueName;
|
|
64
|
-
if (result.data && keyName && valueName) {
|
|
65
|
-
const valueMap = new Map(result.data.map(item => [String(item[keyName]), item[valueName]]));
|
|
66
|
-
for (const field of config.columnFields) {
|
|
67
|
-
lookupsMap.set(field, valueMap);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
// Step 4: Map the original rowData (unchanged)
|
|
72
|
-
return rowData.map(row => {
|
|
73
|
-
const newRow = Object.assign({}, row);
|
|
74
|
-
for (const [field, valueMap] of lookupsMap.entries()) {
|
|
75
|
-
if (newRow[field] !== null && newRow[field] !== undefined) {
|
|
76
|
-
const key = String(newRow[field]);
|
|
77
|
-
if (valueMap.has(key)) {
|
|
78
|
-
newRow[field + 'LookupValue'] = valueMap.get(key);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return newRow;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
19
|
const FilterOperators = {
|
|
87
20
|
equals: searchObject.SearchOperators.EQUALS,
|
|
88
21
|
contains: searchObject.SearchOperators.LIKE,
|
|
@@ -321,7 +254,7 @@ const createSearchMethodDataSource = (options) => {
|
|
|
321
254
|
}
|
|
322
255
|
else {
|
|
323
256
|
const columnDefs = params.api.getColumnDefs();
|
|
324
|
-
finalRowData = await processLookupsInData(response.pageList, columnDefs);
|
|
257
|
+
finalRowData = await lookupHelper.processLookupsInData(response.pageList, columnDefs);
|
|
325
258
|
}
|
|
326
259
|
params.success({
|
|
327
260
|
rowData: finalRowData,
|
|
@@ -6,7 +6,7 @@ var udpFormApiUtils = require('./udp-form-api-utils-BcsAFM5r.js');
|
|
|
6
6
|
var enums = require('./enums-7rWe0ofM.js');
|
|
7
7
|
var utils = require('./utils-Bp02BX38.js');
|
|
8
8
|
var makeApiCall = require('./makeApiCall-CFfg9gI0.js');
|
|
9
|
-
var SearchBuilder = require('./SearchBuilder-
|
|
9
|
+
var SearchBuilder = require('./SearchBuilder-aqpLQz8E.js');
|
|
10
10
|
var searchObject = require('./searchObject-DeDFFGcx.js');
|
|
11
11
|
var configService = require('./configService-BqiLnW8G.js');
|
|
12
12
|
var uuid = require('uuid');
|
|
@@ -79,10 +79,15 @@ export class SavedViews {
|
|
|
79
79
|
var _a;
|
|
80
80
|
if (!this.baseColumnState)
|
|
81
81
|
return;
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
// Compare only primary (user-defined) colIds — pivot result columns regenerate
|
|
83
|
+
// from filtered data and shouldn't be treated as external column-def updates.
|
|
84
|
+
const primaryColIds = this.getPrimaryColIds();
|
|
85
|
+
const collectColIds = (state) => state
|
|
86
|
+
.filter(c => primaryColIds.has(c.colId))
|
|
84
87
|
.map(c => c.colId)
|
|
85
88
|
.join(',');
|
|
89
|
+
const currentColIds = collectColIds((_a = this.api.getColumnState()) !== null && _a !== void 0 ? _a : []);
|
|
90
|
+
const baseColIds = collectColIds(JSON.parse(this.baseColumnState));
|
|
86
91
|
if (currentColIds !== baseColIds) {
|
|
87
92
|
this.baseColumnState = JSON.stringify(this.api.getColumnState());
|
|
88
93
|
if (this.isDirty) {
|
|
@@ -138,8 +143,26 @@ export class SavedViews {
|
|
|
138
143
|
this.saveCurrentStateToLocalStorage();
|
|
139
144
|
});
|
|
140
145
|
};
|
|
146
|
+
// Returns the set of colIds for primary (user-defined) columns. Pivot result
|
|
147
|
+
// columns are secondary and excluded — they regenerate from filtered data and
|
|
148
|
+
// would cause spurious dirty diffs.
|
|
149
|
+
this.getPrimaryColIds = () => {
|
|
150
|
+
var _a;
|
|
151
|
+
return new Set(((_a = this.api.getColumns()) !== null && _a !== void 0 ? _a : [])
|
|
152
|
+
.filter(c => c.isPrimary())
|
|
153
|
+
.map(c => c.getColId()));
|
|
154
|
+
};
|
|
155
|
+
// Serializes column state to a JSON string filtered to primary columns only.
|
|
156
|
+
// Using a positive include filter (vs. excluding pivot result ids) keeps the
|
|
157
|
+
// comparison symmetric across snapshots — stale pivot ids in older baselines
|
|
158
|
+
// get dropped automatically because they aren't in the current primary set.
|
|
159
|
+
this.serializeUserColumnState = (state) => {
|
|
160
|
+
const primaryColIds = this.getPrimaryColIds();
|
|
161
|
+
return JSON.stringify(state.filter(c => primaryColIds.has(c.colId)));
|
|
162
|
+
};
|
|
141
163
|
// Compare current grid state against snapshot (view active) or default empty state (no view)
|
|
142
164
|
this.checkIfDirty = () => {
|
|
165
|
+
var _a, _b;
|
|
143
166
|
// Skip during initial setup — baseline will be recaptured after parent
|
|
144
167
|
// gridReady handlers (e.g. search-method-grid) finish applying state.
|
|
145
168
|
if (this.baselineRecaptureId !== null)
|
|
@@ -147,18 +170,22 @@ export class SavedViews {
|
|
|
147
170
|
let dirty;
|
|
148
171
|
if (this.activeViewId && this.activeViewState) {
|
|
149
172
|
// Named view active: compare against the snapshot taken when the view was applied
|
|
150
|
-
const currentColumnState =
|
|
173
|
+
const currentColumnState = this.serializeUserColumnState((_a = this.api.getColumnState()) !== null && _a !== void 0 ? _a : []);
|
|
174
|
+
const baseColumnState = this.serializeUserColumnState(JSON.parse(this.activeViewState.columnState));
|
|
151
175
|
const currentFilterModel = JSON.stringify(this.api.getFilterModel());
|
|
152
176
|
dirty =
|
|
153
|
-
currentColumnState !==
|
|
177
|
+
currentColumnState !== baseColumnState ||
|
|
154
178
|
currentFilterModel !== this.activeViewState.filterModel;
|
|
155
179
|
}
|
|
156
180
|
else {
|
|
157
181
|
// No view: dirty if there are any active filters or column state changes vs baseline
|
|
158
182
|
const filterModel = this.api.getFilterModel();
|
|
159
183
|
const hasFilters = Object.keys(filterModel !== null && filterModel !== void 0 ? filterModel : {}).length > 0;
|
|
160
|
-
const
|
|
161
|
-
const
|
|
184
|
+
const currentColumnState = this.serializeUserColumnState((_b = this.api.getColumnState()) !== null && _b !== void 0 ? _b : []);
|
|
185
|
+
const baseColumnState = this.baseColumnState !== null
|
|
186
|
+
? this.serializeUserColumnState(JSON.parse(this.baseColumnState))
|
|
187
|
+
: null;
|
|
188
|
+
const hasColumnChanges = baseColumnState !== null && currentColumnState !== baseColumnState;
|
|
162
189
|
dirty = hasFilters || hasColumnChanges;
|
|
163
190
|
}
|
|
164
191
|
if (dirty !== this.isDirty) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getLookupTable, getLookupTableSync } from "./lookupHelper";
|
|
1
2
|
/**
|
|
2
3
|
* Finds an existing 'actions' column in an array of ColDefs and applies
|
|
3
4
|
* a dynamic fixed width and right pinning.
|
|
@@ -26,9 +27,22 @@ export function configureUdpColumnMods(columnDefs, disableColumnFiltering = fals
|
|
|
26
27
|
// Return a new object with the original properties plus our overrides
|
|
27
28
|
return Object.assign(Object.assign({}, colDef), { pinned: 'right', width: calculatedWidth, minWidth: calculatedWidth, maxWidth: calculatedWidth, sortable: false, filter: false, suppressHeaderMenuButton: true, suppressMovable: true });
|
|
28
29
|
}
|
|
29
|
-
//
|
|
30
|
+
// Lookup columns: display the resolved label, but filter against the underlying key.
|
|
31
|
+
// The set filter values + dropdown labels come from the cached lookup table, so the
|
|
32
|
+
// filter model holds keys (server-side IN clause works unchanged). Sort is left off
|
|
33
|
+
// because the backend can only order by the stored key, not the resolved label.
|
|
30
34
|
if ((_e = colDef === null || colDef === void 0 ? void 0 : colDef.context) === null || _e === void 0 ? void 0 : _e.lookupId) {
|
|
31
|
-
|
|
35
|
+
const lookupId = colDef.context.lookupId;
|
|
36
|
+
const field = colDef.field;
|
|
37
|
+
return Object.assign(Object.assign({}, colDef), { valueGetter: (params) => params.data[field + 'LookupValue'], filterValueGetter: (params) => { var _a; return (_a = params.data) === null || _a === void 0 ? void 0 : _a[field]; }, filter: 'agSetColumnFilter', filterParams: Object.assign({ values: (params) => {
|
|
38
|
+
getLookupTable(lookupId).then(table => {
|
|
39
|
+
params.success(Array.from(table.valueMap.keys()));
|
|
40
|
+
});
|
|
41
|
+
}, valueFormatter: (params) => {
|
|
42
|
+
var _a, _b;
|
|
43
|
+
const key = params.value == null ? '' : String(params.value);
|
|
44
|
+
return (_b = (_a = getLookupTableSync(lookupId)) === null || _a === void 0 ? void 0 : _a.valueMap.get(key)) !== null && _b !== void 0 ? _b : key;
|
|
45
|
+
} }, colDef.filterParams), sortable: false });
|
|
32
46
|
}
|
|
33
47
|
if (disableColumnFiltering) {
|
|
34
48
|
return Object.assign(Object.assign({}, colDef), { filter: false });
|