basesite-shared-grid-lib 21.0.1-beta.1 → 21.0.1-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.
@@ -2357,6 +2357,7 @@ class GridLibraryComponent {
2357
2357
  };
2358
2358
  }
2359
2359
  else if (res.columnType === 'fill') {
2360
+ const valueLabelMap = this._buildFillValueLabelMap(res);
2360
2361
  return {
2361
2362
  width: 120,
2362
2363
  pinned: res.pinPosition,
@@ -2373,25 +2374,21 @@ class GridLibraryComponent {
2373
2374
  field: res.field,
2374
2375
  },
2375
2376
  filterable: res.filterable,
2376
- filter: 'agTextColumnFilter',
2377
+ filter: 'agSetColumnFilter',
2377
2378
  filterParams: {
2378
- comparator: (filterLocalDateAtMidnight, cellValue) => {
2379
- const dateAsString = cellValue;
2380
- if (dateAsString == null) {
2381
- return 0;
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
- },
2379
+ // Provide the raw values from the backend config; OData provider
2380
+ // handles case-insensitive matching server-side via tolower().
2381
+ values: (params) => this._getFillFilterValues(res, params),
2382
+ refreshValuesOnOpen: true,
2394
2383
  buttons: ['reset'],
2384
+ // Pretty label for each checkbox; falls back to the value itself
2385
+ valueFormatter: (p) => {
2386
+ if (p?.value == null || p.value === '')
2387
+ return p?.value;
2388
+ return valueLabelMap?.get(String(p.value)) ?? p.value;
2389
+ },
2390
+ // Case-insensitive search within the dropdown's filter box
2391
+ textFormatter: (v) => v == null ? '' : String(v).trim().toLowerCase(),
2395
2392
  },
2396
2393
  };
2397
2394
  }
@@ -2493,6 +2490,71 @@ class GridLibraryComponent {
2493
2490
  }
2494
2491
  });
2495
2492
  }
2493
+ _getFillFilterValues(res, params) {
2494
+ const configured = res?.filterValues;
2495
+ if (Array.isArray(configured) && configured.length > 0) {
2496
+ const values = configured
2497
+ .map((v) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))
2498
+ .filter((v) => v !== null && v !== undefined && v !== '');
2499
+ params.success(values);
2500
+ return;
2501
+ }
2502
+ // Backend may provide allowed values as a comma-separated string in `fieldValue`
2503
+ const fieldValue = res?.fieldValue;
2504
+ if (typeof fieldValue === 'string' && fieldValue.trim() !== '') {
2505
+ const values = fieldValue
2506
+ .split(',')
2507
+ .map((v) => v.trim())
2508
+ .filter((v) => v !== '');
2509
+ if (values.length > 0) {
2510
+ params.success(values);
2511
+ return;
2512
+ }
2513
+ }
2514
+ if (Array.isArray(fieldValue) && fieldValue.length > 0) {
2515
+ const values = fieldValue
2516
+ .map((v) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))
2517
+ .filter((v) => v !== null && v !== undefined && v !== '');
2518
+ if (values.length > 0) {
2519
+ params.success(values);
2520
+ return;
2521
+ }
2522
+ }
2523
+ const field = res?.field;
2524
+ if (this.enableServerSidePaging && this.odataProvider) {
2525
+ this.odataProvider.getFilterValuesParams(field, (data) => params.success((data || []).filter(v => v !== null && v !== undefined && v !== '')), undefined);
2526
+ return;
2527
+ }
2528
+ const source = Array.isArray(this.rowData) ? this.rowData : [];
2529
+ const unique = Array.from(new Set(source
2530
+ .map(row => row?.[field])
2531
+ .filter(v => v !== null && v !== undefined && v !== '')));
2532
+ params.success(unique);
2533
+ }
2534
+ _buildFillValueLabelMap(res) {
2535
+ const map = new Map();
2536
+ const source = res?.filterValues ?? res?.fieldValue;
2537
+ const addObject = (obj) => {
2538
+ const value = obj?.value ?? obj?.key ?? obj?.id ?? obj?.name ?? obj?.label;
2539
+ const label = obj?.label ?? obj?.name ?? value;
2540
+ if (value !== null && value !== undefined && value !== '') {
2541
+ map.set(String(value), String(label));
2542
+ }
2543
+ };
2544
+ if (Array.isArray(source)) {
2545
+ source.forEach((entry) => {
2546
+ if (entry && typeof entry === 'object')
2547
+ addObject(entry);
2548
+ else if (entry !== null && entry !== undefined && entry !== '') {
2549
+ map.set(String(entry), String(entry));
2550
+ }
2551
+ });
2552
+ }
2553
+ else if (typeof source === 'string' && source.trim() !== '') {
2554
+ source.split(',').map(s => s.trim()).filter(Boolean).forEach(v => map.set(v, v));
2555
+ }
2556
+ return map;
2557
+ }
2496
2558
  canCreateDac(roles, field) {
2497
2559
  if (roles?.length > 0 && field === 'createDac') {
2498
2560
  const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));
@@ -2552,7 +2614,7 @@ class GridLibraryComponent {
2552
2614
  // Add timeout to prevent infinite loading
2553
2615
  const API_TIMEOUT = 800000; //80 seconds
2554
2616
  let hasRetried = false;
2555
- params.api.setServerSideDatasource(new OdataServerSideProvider({
2617
+ this.odataProvider = new OdataServerSideProvider({
2556
2618
  isCaseSensitiveStringFilter: false,
2557
2619
  callApi: (options) => {
2558
2620
  const url = this.setExternalFilters(options);
@@ -2617,7 +2679,8 @@ class GridLibraryComponent {
2617
2679
  this.gridAPI.hideOverlay();
2618
2680
  this.gridAPI.showNoRowsOverlay();
2619
2681
  }
2620
- }));
2682
+ });
2683
+ params.api.setServerSideDatasource(this.odataProvider);
2621
2684
  this.gridReady.emit(params);
2622
2685
  }
2623
2686
  // Apply initial filter highlighting with retry mechanism