basesite-shared-grid-lib 21.0.1-beta.1 → 21.0.1-beta.3
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/basesite-shared-grid-lib-21.0.1-beta.3.tgz +0 -0
- package/fesm2022/basesite-shared-grid-lib.mjs +91 -23
- package/fesm2022/basesite-shared-grid-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/types/basesite-shared-grid-lib.d.ts +3 -0
- package/basesite-shared-grid-lib-21.0.1-beta.1.tgz +0 -0
|
Binary file
|
|
@@ -313,10 +313,15 @@ class OdataProvider {
|
|
|
313
313
|
return me.odataOperator[col.type](colName, `${me.toDateTime(col.dateFrom)}`, `${me.toDateTime(col.dateTo)}`);
|
|
314
314
|
}
|
|
315
315
|
break;
|
|
316
|
-
case 'set':
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
316
|
+
case 'set': {
|
|
317
|
+
if (!col.values || col.values.length === 0) {
|
|
318
|
+
return '';
|
|
319
|
+
}
|
|
320
|
+
const containsClauses = col.values.map((v) => me.odataOperator.contains(colName, `'${me.encode(v)}'`, isCaseSensitiveStringFilter));
|
|
321
|
+
return containsClauses.length === 1
|
|
322
|
+
? containsClauses[0]
|
|
323
|
+
: `(${containsClauses.join(' or ')})`;
|
|
324
|
+
}
|
|
320
325
|
default:
|
|
321
326
|
break;
|
|
322
327
|
}
|
|
@@ -2357,6 +2362,7 @@ class GridLibraryComponent {
|
|
|
2357
2362
|
};
|
|
2358
2363
|
}
|
|
2359
2364
|
else if (res.columnType === 'fill') {
|
|
2365
|
+
const valueLabelMap = this._buildFillValueLabelMap(res);
|
|
2360
2366
|
return {
|
|
2361
2367
|
width: 120,
|
|
2362
2368
|
pinned: res.pinPosition,
|
|
@@ -2373,25 +2379,21 @@ class GridLibraryComponent {
|
|
|
2373
2379
|
field: res.field,
|
|
2374
2380
|
},
|
|
2375
2381
|
filterable: res.filterable,
|
|
2376
|
-
filter: '
|
|
2382
|
+
filter: 'agSetColumnFilter',
|
|
2377
2383
|
filterParams: {
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
}
|
|
2383
|
-
if (res.columnType == 'date') {
|
|
2384
|
-
const cellDate = new Date(dateAsString);
|
|
2385
|
-
if (cellDate < filterLocalDateAtMidnight) {
|
|
2386
|
-
return -1;
|
|
2387
|
-
}
|
|
2388
|
-
else if (cellDate > filterLocalDateAtMidnight) {
|
|
2389
|
-
return 1;
|
|
2390
|
-
}
|
|
2391
|
-
}
|
|
2392
|
-
return 0;
|
|
2393
|
-
},
|
|
2384
|
+
// Provide the raw values from the backend config; OData provider
|
|
2385
|
+
// handles case-insensitive matching server-side via tolower().
|
|
2386
|
+
values: (params) => this._getFillFilterValues(res, params),
|
|
2387
|
+
refreshValuesOnOpen: true,
|
|
2394
2388
|
buttons: ['reset'],
|
|
2389
|
+
// Pretty label for each checkbox; falls back to the value itself
|
|
2390
|
+
valueFormatter: (p) => {
|
|
2391
|
+
if (p?.value == null || p.value === '')
|
|
2392
|
+
return p?.value;
|
|
2393
|
+
return valueLabelMap?.get(String(p.value)) ?? p.value;
|
|
2394
|
+
},
|
|
2395
|
+
// Case-insensitive search within the dropdown's filter box
|
|
2396
|
+
textFormatter: (v) => v == null ? '' : String(v).trim().toLowerCase(),
|
|
2395
2397
|
},
|
|
2396
2398
|
};
|
|
2397
2399
|
}
|
|
@@ -2493,6 +2495,71 @@ class GridLibraryComponent {
|
|
|
2493
2495
|
}
|
|
2494
2496
|
});
|
|
2495
2497
|
}
|
|
2498
|
+
_getFillFilterValues(res, params) {
|
|
2499
|
+
const configured = res?.filterValues;
|
|
2500
|
+
if (Array.isArray(configured) && configured.length > 0) {
|
|
2501
|
+
const values = configured
|
|
2502
|
+
.map((v) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))
|
|
2503
|
+
.filter((v) => v !== null && v !== undefined && v !== '');
|
|
2504
|
+
params.success(values);
|
|
2505
|
+
return;
|
|
2506
|
+
}
|
|
2507
|
+
// Backend may provide allowed values as a comma-separated string in `fieldValue`
|
|
2508
|
+
const fieldValue = res?.fieldValue;
|
|
2509
|
+
if (typeof fieldValue === 'string' && fieldValue.trim() !== '') {
|
|
2510
|
+
const values = fieldValue
|
|
2511
|
+
.split(',')
|
|
2512
|
+
.map((v) => v.trim())
|
|
2513
|
+
.filter((v) => v !== '');
|
|
2514
|
+
if (values.length > 0) {
|
|
2515
|
+
params.success(values);
|
|
2516
|
+
return;
|
|
2517
|
+
}
|
|
2518
|
+
}
|
|
2519
|
+
if (Array.isArray(fieldValue) && fieldValue.length > 0) {
|
|
2520
|
+
const values = fieldValue
|
|
2521
|
+
.map((v) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))
|
|
2522
|
+
.filter((v) => v !== null && v !== undefined && v !== '');
|
|
2523
|
+
if (values.length > 0) {
|
|
2524
|
+
params.success(values);
|
|
2525
|
+
return;
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
const field = res?.field;
|
|
2529
|
+
if (this.enableServerSidePaging && this.odataProvider) {
|
|
2530
|
+
this.odataProvider.getFilterValuesParams(field, (data) => params.success((data || []).filter(v => v !== null && v !== undefined && v !== '')), undefined);
|
|
2531
|
+
return;
|
|
2532
|
+
}
|
|
2533
|
+
const source = Array.isArray(this.rowData) ? this.rowData : [];
|
|
2534
|
+
const unique = Array.from(new Set(source
|
|
2535
|
+
.map(row => row?.[field])
|
|
2536
|
+
.filter(v => v !== null && v !== undefined && v !== '')));
|
|
2537
|
+
params.success(unique);
|
|
2538
|
+
}
|
|
2539
|
+
_buildFillValueLabelMap(res) {
|
|
2540
|
+
const map = new Map();
|
|
2541
|
+
const source = res?.filterValues ?? res?.fieldValue;
|
|
2542
|
+
const addObject = (obj) => {
|
|
2543
|
+
const value = obj?.value ?? obj?.key ?? obj?.id ?? obj?.name ?? obj?.label;
|
|
2544
|
+
const label = obj?.label ?? obj?.name ?? value;
|
|
2545
|
+
if (value !== null && value !== undefined && value !== '') {
|
|
2546
|
+
map.set(String(value), String(label));
|
|
2547
|
+
}
|
|
2548
|
+
};
|
|
2549
|
+
if (Array.isArray(source)) {
|
|
2550
|
+
source.forEach((entry) => {
|
|
2551
|
+
if (entry && typeof entry === 'object')
|
|
2552
|
+
addObject(entry);
|
|
2553
|
+
else if (entry !== null && entry !== undefined && entry !== '') {
|
|
2554
|
+
map.set(String(entry), String(entry));
|
|
2555
|
+
}
|
|
2556
|
+
});
|
|
2557
|
+
}
|
|
2558
|
+
else if (typeof source === 'string' && source.trim() !== '') {
|
|
2559
|
+
source.split(',').map(s => s.trim()).filter(Boolean).forEach(v => map.set(v, v));
|
|
2560
|
+
}
|
|
2561
|
+
return map;
|
|
2562
|
+
}
|
|
2496
2563
|
canCreateDac(roles, field) {
|
|
2497
2564
|
if (roles?.length > 0 && field === 'createDac') {
|
|
2498
2565
|
const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));
|
|
@@ -2552,7 +2619,7 @@ class GridLibraryComponent {
|
|
|
2552
2619
|
// Add timeout to prevent infinite loading
|
|
2553
2620
|
const API_TIMEOUT = 800000; //80 seconds
|
|
2554
2621
|
let hasRetried = false;
|
|
2555
|
-
|
|
2622
|
+
this.odataProvider = new OdataServerSideProvider({
|
|
2556
2623
|
isCaseSensitiveStringFilter: false,
|
|
2557
2624
|
callApi: (options) => {
|
|
2558
2625
|
const url = this.setExternalFilters(options);
|
|
@@ -2617,7 +2684,8 @@ class GridLibraryComponent {
|
|
|
2617
2684
|
this.gridAPI.hideOverlay();
|
|
2618
2685
|
this.gridAPI.showNoRowsOverlay();
|
|
2619
2686
|
}
|
|
2620
|
-
})
|
|
2687
|
+
});
|
|
2688
|
+
params.api.setServerSideDatasource(this.odataProvider);
|
|
2621
2689
|
this.gridReady.emit(params);
|
|
2622
2690
|
}
|
|
2623
2691
|
// Apply initial filter highlighting with retry mechanism
|