asab_webui_components 27.3.10 → 27.4.1

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.
@@ -459,24 +459,34 @@ function DataTableBadge(_ref7) {
459
459
  onRemove
460
460
  } = _ref7;
461
461
  var {
462
- getFilterField,
462
+ getFilterFieldLabel,
463
+ getNormalizedFieldItems,
463
464
  getCustomPill
464
465
  } = (0, _DataTableContext.useDataTableContext)();
465
466
  var {
466
467
  t
467
468
  } = (0, _reactI18next.useTranslation)();
469
+ var fieldKey = item.substring(1);
468
470
 
469
471
  // Get custom pill
470
- var CustomBadge = getCustomPill(item.substring(1));
472
+ var CustomBadge = getCustomPill(fieldKey);
471
473
  if (CustomBadge) {
472
474
  return /*#__PURE__*/_react.default.cloneElement(CustomBadge, {
473
475
  isLoading
474
476
  });
475
477
  }
478
+ var normalizedFieldItems = getNormalizedFieldItems(fieldKey);
479
+ var displayValue = Array.isArray(value) ? value[0] : value;
480
+ if (normalizedFieldItems) {
481
+ var matchingItem = normalizedFieldItems.find(item => item.value === displayValue);
482
+ if (matchingItem) {
483
+ displayValue = matchingItem.label;
484
+ }
485
+ }
476
486
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Badge, {
477
487
  color: "primary",
478
488
  pill: true
479
- }, "".concat(getFilterField(item.substring(1)), ": ").concat(value), isLoading == true ? /*#__PURE__*/_react.default.createElement("i", {
489
+ }, "".concat(getFilterFieldLabel(fieldKey), ": ").concat(displayValue), isLoading == true ? /*#__PURE__*/_react.default.createElement("i", {
480
490
  className: "bi bi-x ps-1",
481
491
  title: t('General|Remove')
482
492
  }) : /*#__PURE__*/_react.default.createElement("i", {
@@ -402,19 +402,30 @@ function DataTableCardPill2({ isLoading, rowHeight }) {
402
402
 
403
403
  // Render a filter badge with custom or default content
404
404
  function DataTableBadge({ item, value, isLoading, onRemove }) {
405
- const { getFilterField, getCustomPill } = useDataTableContext();
405
+ const { getFilterFieldLabel, getNormalizedFieldItems, getCustomPill } = useDataTableContext();
406
406
  const { t } = useTranslation();
407
+ const fieldKey = item.substring(1);
407
408
 
408
409
  // Get custom pill
409
- const CustomBadge = getCustomPill(item.substring(1));
410
+ const CustomBadge = getCustomPill(fieldKey);
410
411
 
411
412
  if (CustomBadge) {
412
413
  return React.cloneElement(CustomBadge, { isLoading });
413
414
  }
414
415
 
416
+ const normalizedFieldItems = getNormalizedFieldItems(fieldKey);
417
+
418
+ let displayValue = Array.isArray(value) ? value[0] : value;
419
+ if (normalizedFieldItems) {
420
+ const matchingItem = normalizedFieldItems.find(item => item.value === displayValue);
421
+ if (matchingItem) {
422
+ displayValue = matchingItem.label;
423
+ }
424
+ }
425
+
415
426
  return (
416
427
  <Badge color='primary' pill>
417
- {`${getFilterField(item.substring(1))}: ${value}`}
428
+ {`${getFilterFieldLabel(fieldKey)}: ${displayValue}`}
418
429
  {(isLoading == true) ?
419
430
  <i
420
431
  className='bi bi-x ps-1'
@@ -10,6 +10,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _reactRouter = require("react-router");
12
12
  var _updateTableLimit = require("./components/utils/updateTableLimit.js");
13
+ var _translateFromContent = require("../../utils/translateFromContent.js");
13
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
15
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
16
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -31,8 +32,8 @@ var DataTableContextProvider = _ref => {
31
32
  };
32
33
  var [searchParams, setSearchParams] = (0, _reactRouter.useSearchParams)(defaultParams);
33
34
  var [stateParams, setStateParams] = (0, _react.useState)(defaultParams);
34
- var filterFieldsRef = (0, _react.useRef)({}); // Ref to store filter fields persistently without triggering re-renders.
35
- var customPillRef = (0, _react.useRef)({}); // Ref for store obj with custom pulls with individual key access
35
+ var filterFieldsRef = (0, _react.useRef)({}); // Ref to store filter fields persistently without triggering re-renders
36
+ var customPillRef = (0, _react.useRef)({}); // Ref for store obj with custom pills with individual key access
36
37
 
37
38
  // Method to get param with option to set up splitting method used for searchParams
38
39
  var getParam = function getParam(param) {
@@ -339,18 +340,56 @@ var DataTableContextProvider = _ref => {
339
340
  }
340
341
  };
341
342
 
342
- // Method to get the current filter fields based on a given key
343
- var getFilterField = key => {
344
- return filterFieldsRef.current[key];
343
+ // Method to get filter field label to be displayed in the DataTableBadge
344
+ var getFilterFieldLabel = key => {
345
+ var _filterFieldsRef$curr, _filterFieldsRef$curr2;
346
+ return (_filterFieldsRef$curr = (_filterFieldsRef$curr2 = filterFieldsRef.current[key]) === null || _filterFieldsRef$curr2 === void 0 ? void 0 : _filterFieldsRef$curr2.fieldLabel) !== null && _filterFieldsRef$curr !== void 0 ? _filterFieldsRef$curr : null;
345
347
  };
346
348
 
347
- // Method to set filter fields in filterFieldsRef
348
- var setFilterField = obj => {
349
- var fields = Object.entries(obj)[0];
350
- // Check and only add field if it doesn't exist
351
- if (!filterFieldsRef.current[fields[0]]) {
352
- filterFieldsRef.current[fields[0]] = fields[1];
349
+ // Method to normalize field items
350
+ var setNormalizedFieldItems = (key, fieldItems) => {
351
+ var _filterFieldsRef$curr3;
352
+ if (!fieldItems || fieldItems.length === 0) return;
353
+ if ((_filterFieldsRef$curr3 = filterFieldsRef.current[key]) !== null && _filterFieldsRef$curr3 !== void 0 && _filterFieldsRef$curr3.items) return;
354
+ var normalized = fieldItems.map(item => {
355
+ if (typeof item === 'object' && item !== null) {
356
+ var _item$key, _item$key2;
357
+ var label = item.label ? (0, _translateFromContent.translateFromContent)(item.label) : String((_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : item.value); // Fallback to key or value if label is not available
358
+ return {
359
+ value: String((_item$key2 = item.key) !== null && _item$key2 !== void 0 ? _item$key2 : item.value),
360
+ label
361
+ };
362
+ }
363
+ return {
364
+ value: String(item),
365
+ label: String(item)
366
+ }; // Fallback to value if item is not an object
367
+ });
368
+ filterFieldsRef.current[key] = _objectSpread(_objectSpread({}, filterFieldsRef.current[key]), {}, {
369
+ items: normalized
370
+ });
371
+ };
372
+
373
+ // Method to get normalized field items
374
+ var getNormalizedFieldItems = key => {
375
+ var _filterFieldsRef$curr4, _filterFieldsRef$curr5;
376
+ return (_filterFieldsRef$curr4 = (_filterFieldsRef$curr5 = filterFieldsRef.current[key]) === null || _filterFieldsRef$curr5 === void 0 ? void 0 : _filterFieldsRef$curr5.items) !== null && _filterFieldsRef$curr4 !== void 0 ? _filterFieldsRef$curr4 : null;
377
+ };
378
+
379
+ // Method to set filter field label
380
+ var setFilterFieldLabel = obj => {
381
+ var _filterFieldsRef$curr6;
382
+ var entries = obj != null && typeof obj === 'object' ? Object.entries(obj) : [];
383
+ var fieldEntry = entries[0]; // Extracts the first key-value pair from the field object
384
+ if (!fieldEntry) {
385
+ console.warn('DataTableContext: "obj" prop is missing or empty - cannot set filter field label.');
386
+ return;
353
387
  }
388
+ var [fieldKey, fieldLabel] = fieldEntry; // Extract the key and label from the field entry
389
+ if ((_filterFieldsRef$curr6 = filterFieldsRef.current[fieldKey]) !== null && _filterFieldsRef$curr6 !== void 0 && _filterFieldsRef$curr6.fieldLabel) return;
390
+ filterFieldsRef.current[fieldKey] = _objectSpread(_objectSpread({}, filterFieldsRef.current[fieldKey]), {}, {
391
+ fieldLabel
392
+ });
354
393
  };
355
394
 
356
395
  // Retrieves a custom pill component by key
@@ -399,8 +438,10 @@ var DataTableContextProvider = _ref => {
399
438
  removeMultiPill,
400
439
  onTriggerSort,
401
440
  serializeParams,
402
- getFilterField,
403
- setFilterField,
441
+ getFilterFieldLabel,
442
+ setNormalizedFieldItems,
443
+ getNormalizedFieldItems,
444
+ setFilterFieldLabel,
404
445
  setCustomPill,
405
446
  getCustomPill,
406
447
  watchParams: {
@@ -2,6 +2,7 @@ import React, { createContext, useContext, useMemo, useState, useRef } from 'rea
2
2
  import { useSearchParams } from 'react-router';
3
3
 
4
4
  import { updateLimit, updateStateLimit } from './components/utils/updateTableLimit.jsx';
5
+ import { translateFromContent } from '../../utils/translateFromContent.js';
5
6
 
6
7
  // Create an empty context
7
8
  const CreateDataTableContext = createContext();
@@ -11,8 +12,8 @@ const DataTableContextProvider = ({ children, disableParams, initialLimit }) =>
11
12
  const defaultParams = { p: 1, i: initialLimit };
12
13
  const [searchParams, setSearchParams] = useSearchParams(defaultParams);
13
14
  const [stateParams, setStateParams] = useState(defaultParams);
14
- const filterFieldsRef = useRef({}); // Ref to store filter fields persistently without triggering re-renders.
15
- const customPillRef = useRef({}); // Ref for store obj with custom pulls with individual key access
15
+ const filterFieldsRef = useRef({}); // Ref to store filter fields persistently without triggering re-renders
16
+ const customPillRef = useRef({}); // Ref for store obj with custom pills with individual key access
16
17
 
17
18
  // Method to get param with option to set up splitting method used for searchParams
18
19
  const getParam = (param, options = {}) => {
@@ -293,18 +294,49 @@ const DataTableContextProvider = ({ children, disableParams, initialLimit }) =>
293
294
  }
294
295
  };
295
296
 
296
- // Method to get the current filter fields based on a given key
297
- const getFilterField = (key) => {
298
- return filterFieldsRef.current[key];
297
+ // Method to get filter field label to be displayed in the DataTableBadge
298
+ const getFilterFieldLabel = (key) => {
299
+ return filterFieldsRef.current[key]?.fieldLabel ?? null;
299
300
  };
300
301
 
301
- // Method to set filter fields in filterFieldsRef
302
- const setFilterField = (obj) => {
303
- const fields = Object.entries(obj)[0];
304
- // Check and only add field if it doesn't exist
305
- if (!filterFieldsRef.current[fields[0]]) {
306
- filterFieldsRef.current[fields[0]] = fields[1];
302
+ // Method to normalize field items
303
+ const setNormalizedFieldItems = (key, fieldItems) => {
304
+ if (!fieldItems || fieldItems.length === 0) return;
305
+ if (filterFieldsRef.current[key]?.items) return;
306
+
307
+ const normalized = fieldItems.map(item => {
308
+ if (typeof item === 'object' && item !== null) {
309
+ const label = item.label
310
+ ? translateFromContent(item.label)
311
+ : String(item.key ?? item.value); // Fallback to key or value if label is not available
312
+ return {
313
+ value: String(item.key ?? item.value),
314
+ label
315
+ };
316
+ }
317
+ return { value: String(item), label: String(item) }; // Fallback to value if item is not an object
318
+ });
319
+
320
+ filterFieldsRef.current[key] = { ...filterFieldsRef.current[key], items: normalized };
321
+ };
322
+
323
+ // Method to get normalized field items
324
+ const getNormalizedFieldItems = (key) => {
325
+ return filterFieldsRef.current[key]?.items ?? null;
326
+ };
327
+
328
+ // Method to set filter field label
329
+ const setFilterFieldLabel = (obj) => {
330
+ const entries = obj != null && typeof obj === 'object' ? Object.entries(obj) : [];
331
+ const fieldEntry = entries[0]; // Extracts the first key-value pair from the field object
332
+ if (!fieldEntry) {
333
+ console.warn('DataTableContext: "obj" prop is missing or empty - cannot set filter field label.');
334
+ return;
307
335
  }
336
+
337
+ const [fieldKey, fieldLabel] = fieldEntry; // Extract the key and label from the field entry
338
+ if (filterFieldsRef.current[fieldKey]?.fieldLabel) return;
339
+ filterFieldsRef.current[fieldKey] = { ...filterFieldsRef.current[fieldKey], fieldLabel };
308
340
  };
309
341
 
310
342
  // Retrieves a custom pill component by key
@@ -350,8 +382,10 @@ const DataTableContextProvider = ({ children, disableParams, initialLimit }) =>
350
382
  removeMultiPill,
351
383
  onTriggerSort,
352
384
  serializeParams,
353
- getFilterField,
354
- setFilterField,
385
+ getFilterFieldLabel,
386
+ setNormalizedFieldItems,
387
+ getNormalizedFieldItems,
388
+ setFilterFieldLabel,
355
389
  setCustomPill,
356
390
  getCustomPill,
357
391
  watchParams: { searchParams, stateParams } // Context value for watching params
@@ -16,14 +16,14 @@ function DataTableAdvCustomFilter(_ref) {
16
16
  } = _ref;
17
17
  var {
18
18
  updateSingleValueFilter,
19
- setFilterField,
19
+ setFilterFieldLabel,
20
20
  setCustomPill
21
21
  } = (0, _DataTableContext.useDataTableContext)();
22
22
 
23
23
  // Updates filter field and custom pill when dependencies change
24
24
  (0, _react.useEffect)(() => {
25
25
  // Register the filter field in data table context
26
- setFilterField(field);
26
+ setFilterFieldLabel(field);
27
27
  // Get the first key from field object
28
28
  var fieldKey = Object.keys(field)[0];
29
29
  // Store the custom pill component associated with this field
@@ -4,12 +4,12 @@ import { useDataTableContext } from '../../DataTableContext.jsx';
4
4
 
5
5
  // Custom component for filtering in the table
6
6
  export function DataTableAdvCustomFilter({ field, content, customPill }) {
7
- const { updateSingleValueFilter, setFilterField, setCustomPill } = useDataTableContext();
7
+ const { updateSingleValueFilter, setFilterFieldLabel, setCustomPill } = useDataTableContext();
8
8
 
9
9
  // Updates filter field and custom pill when dependencies change
10
10
  useEffect(() => {
11
11
  // Register the filter field in data table context
12
- setFilterField(field);
12
+ setFilterFieldLabel(field);
13
13
  // Get the first key from field object
14
14
  const fieldKey = Object.keys(field)[0];
15
15
  // Store the custom pill component associated with this field
@@ -19,21 +19,31 @@ function DataTableAdvFilterMultiValue2(_ref) {
19
19
  getParam,
20
20
  updateMultiValueFilter,
21
21
  clearMultiValueFilter,
22
- setFilterField
22
+ setFilterFieldLabel,
23
+ setNormalizedFieldItems,
24
+ getNormalizedFieldItems
23
25
  } = (0, _DataTableContext.useDataTableContext)();
24
26
  var {
25
27
  t
26
28
  } = (0, _reactI18next.useTranslation)();
27
29
  var [dropdownOpen, setDropdownOpen] = (0, _react.useState)(false);
28
- var primaryFieldEntry = Object.entries(field)[0]; // Extracts the first key-value pair from the field object
29
- var valuesToUpdate = getParam("a".concat(primaryFieldEntry[0]), {
30
+ var entries = field != null && typeof field === 'object' ? Object.entries(field) : [];
31
+ var primaryFieldEntry = entries[0]; // Extracts the first key-value pair from the field object
32
+ var [primaryFieldKey, primaryFieldValue] = primaryFieldEntry !== null && primaryFieldEntry !== void 0 ? primaryFieldEntry : [];
33
+ var valuesToUpdate = getParam("a".concat(primaryFieldKey), {
30
34
  splitBy: ','
31
35
  });
36
+ var normalizedFieldItems = getNormalizedFieldItems(primaryFieldKey);
32
37
 
33
- // Update filterFields in DataTable context
38
+ // Update filterFields and normalizedFieldItems in DataTable context
34
39
  (0, _react.useEffect)(() => {
35
- setFilterField(field);
40
+ setFilterFieldLabel(field);
41
+ setNormalizedFieldItems(primaryFieldKey, fieldItems); // Store normalized items in context for DataTableBadge label lookup
36
42
  }, []);
43
+ if (!primaryFieldEntry) {
44
+ console.warn('DataTableAdvFilterMultiValue2: "field" prop is missing or empty - cannot render filter.');
45
+ return null;
46
+ }
37
47
  var toggle = () => setDropdownOpen(prevState => !prevState);
38
48
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Dropdown, {
39
49
  className: "adv-filter-dropdown",
@@ -43,25 +53,28 @@ function DataTableAdvFilterMultiValue2(_ref) {
43
53
  color: "primary",
44
54
  outline: true,
45
55
  className: "adv-filter-dropdown-toggle",
46
- title: primaryFieldEntry[1] // Use value of field object as title
56
+ title: primaryFieldValue // Use value of field object as title
47
57
  ,
48
58
  caret: true
49
59
  }, /*#__PURE__*/_react.default.createElement("span", {
50
60
  className: "adv-filter-title"
51
- }, primaryFieldEntry[1], " ")), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
61
+ }, primaryFieldValue, " ")), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
52
62
  className: "adv-filter-dropdown-menu overflow-y-auto"
53
63
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
54
- onClick: () => clearMultiValueFilter(primaryFieldEntry[0]) // Use key of field object to clear filter
64
+ onClick: () => clearMultiValueFilter(primaryFieldKey) // Use key of field object to clear filter
55
65
  }, t('General|Clear')), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
56
66
  divider: true
57
- }), fieldItems.map((item, idx) => /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
58
- key: idx,
59
- onClick: () => updateMultiValueFilter(primaryFieldEntry[0], item) // Use key of field object to update the filter
60
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
61
- className: "me-2",
62
- type: "checkbox",
63
- checked: valuesToUpdate && valuesToUpdate !== null && valuesToUpdate !== void 0 && valuesToUpdate.includes(item) ? true : false,
64
- readOnly: true,
65
- name: "".concat(idx).concat(item)
66
- }), item))));
67
+ }), normalizedFieldItems === null || normalizedFieldItems === void 0 ? void 0 : normalizedFieldItems.map((item, idx) => {
68
+ var itemValue = item.value;
69
+ return /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
70
+ key: idx,
71
+ onClick: () => updateMultiValueFilter(primaryFieldKey, itemValue) // Use key of field object to update the filter
72
+ }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
73
+ className: "me-2",
74
+ type: "checkbox",
75
+ checked: valuesToUpdate && valuesToUpdate !== null && valuesToUpdate !== void 0 && valuesToUpdate.includes(itemValue) ? true : false,
76
+ readOnly: true,
77
+ name: "".concat(idx).concat(itemValue)
78
+ }), item.label);
79
+ })));
67
80
  }
@@ -10,17 +10,26 @@ import { useDataTableContext } from '../../DataTableContext.jsx';
10
10
  import './DataTableAdvFilter2.scss';
11
11
 
12
12
  export function DataTableAdvFilterMultiValue2({ field, fieldItems }) {
13
- const { getParam, updateMultiValueFilter, clearMultiValueFilter, setFilterField } = useDataTableContext();
13
+ const { getParam, updateMultiValueFilter, clearMultiValueFilter, setFilterFieldLabel, setNormalizedFieldItems, getNormalizedFieldItems } = useDataTableContext();
14
14
  const { t } = useTranslation();
15
15
  const [dropdownOpen, setDropdownOpen] = useState(false);
16
- const primaryFieldEntry = Object.entries(field)[0]; // Extracts the first key-value pair from the field object
17
- const valuesToUpdate = getParam(`a${primaryFieldEntry[0]}`, { splitBy: ','});
16
+ const entries = field != null && typeof field === 'object' ? Object.entries(field) : [];
17
+ const primaryFieldEntry = entries[0]; // Extracts the first key-value pair from the field object
18
+ const [primaryFieldKey, primaryFieldValue] = primaryFieldEntry ?? [];
19
+ const valuesToUpdate = getParam(`a${primaryFieldKey}`, { splitBy: ','});
20
+ const normalizedFieldItems = getNormalizedFieldItems(primaryFieldKey);
18
21
 
19
- // Update filterFields in DataTable context
22
+ // Update filterFields and normalizedFieldItems in DataTable context
20
23
  useEffect(() => {
21
- setFilterField(field);
24
+ setFilterFieldLabel(field);
25
+ setNormalizedFieldItems(primaryFieldKey, fieldItems); // Store normalized items in context for DataTableBadge label lookup
22
26
  },[]);
23
27
 
28
+ if (!primaryFieldEntry) {
29
+ console.warn('DataTableAdvFilterMultiValue2: "field" prop is missing or empty - cannot render filter.');
30
+ return null;
31
+ }
32
+
24
33
  const toggle = () => setDropdownOpen((prevState) => !prevState);
25
34
 
26
35
  return (
@@ -29,35 +38,38 @@ export function DataTableAdvFilterMultiValue2({ field, fieldItems }) {
29
38
  color="primary"
30
39
  outline
31
40
  className="adv-filter-dropdown-toggle"
32
- title={primaryFieldEntry[1]} // Use value of field object as title
41
+ title={primaryFieldValue} // Use value of field object as title
33
42
  caret
34
43
  >
35
44
  <span className="adv-filter-title">
36
- {primaryFieldEntry[1]} {/* Use value of field object as title */}
45
+ {primaryFieldValue} {/* Use value of field object as title */}
37
46
  </span>
38
47
  </DropdownToggle>
39
48
  <DropdownMenu className='adv-filter-dropdown-menu overflow-y-auto'>
40
49
  <DropdownItem
41
- onClick={() => clearMultiValueFilter(primaryFieldEntry[0])} // Use key of field object to clear filter
50
+ onClick={() => clearMultiValueFilter(primaryFieldKey)} // Use key of field object to clear filter
42
51
  >
43
52
  {t('General|Clear')}
44
53
  </DropdownItem>
45
54
  <DropdownItem divider />
46
- {fieldItems.map((item, idx) => (
47
- <DropdownItem
48
- key={idx}
49
- onClick={() => updateMultiValueFilter(primaryFieldEntry[0], item)} // Use key of field object to update the filter
50
- >
51
- <Input
52
- className="me-2"
53
- type="checkbox"
54
- checked={valuesToUpdate && valuesToUpdate?.includes(item) ? true : false}
55
- readOnly
56
- name={`${idx}${item}`}
57
- />
58
- {item}
59
- </DropdownItem>
60
- ))}
55
+ {normalizedFieldItems?.map((item, idx) => {
56
+ const itemValue = item.value;
57
+ return (
58
+ <DropdownItem
59
+ key={idx}
60
+ onClick={() => updateMultiValueFilter(primaryFieldKey, itemValue)} // Use key of field object to update the filter
61
+ >
62
+ <Input
63
+ className="me-2"
64
+ type="checkbox"
65
+ checked={valuesToUpdate && valuesToUpdate?.includes(itemValue) ? true : false}
66
+ readOnly
67
+ name={`${idx}${itemValue}`}
68
+ />
69
+ {item.label}
70
+ </DropdownItem>
71
+ );
72
+ })}
61
73
  </DropdownMenu>
62
74
  </Dropdown>
63
75
  )
@@ -16,15 +16,25 @@ function DataTableAdvFilterSingleValue2(_ref) {
16
16
  } = _ref;
17
17
  var {
18
18
  updateSingleValueFilter,
19
- setFilterField
19
+ setFilterFieldLabel,
20
+ setNormalizedFieldItems,
21
+ getNormalizedFieldItems
20
22
  } = (0, _DataTableContext.useDataTableContext)();
21
23
  var [dropdownOpen, setDropdownOpen] = (0, _react.useState)(false);
22
- var primaryFieldEntry = Object.entries(field)[0]; // Extracts the first key-value pair from the field object
24
+ var entries = field != null && typeof field === 'object' ? Object.entries(field) : [];
25
+ var primaryFieldEntry = entries[0]; // Extracts the first key-value pair from the field object
26
+ var [primaryFieldKey, primaryFieldValue] = primaryFieldEntry !== null && primaryFieldEntry !== void 0 ? primaryFieldEntry : [];
27
+ var normalizedFieldItems = getNormalizedFieldItems(primaryFieldKey);
23
28
 
24
- // Update filterFields in DataTable context
29
+ // Update filterFields and normalizedFieldItems in DataTable context
25
30
  (0, _react.useEffect)(() => {
26
- setFilterField(field);
31
+ setFilterFieldLabel(field);
32
+ setNormalizedFieldItems(primaryFieldKey, fieldItems); // Store normalized items in context for DataTableBadge label lookup
27
33
  }, []);
34
+ if (!primaryFieldEntry) {
35
+ console.warn('DataTableAdvFilterSingleValue2: "field" prop is missing or empty - cannot render filter.');
36
+ return null;
37
+ }
28
38
  var toggle = () => setDropdownOpen(prevState => !prevState);
29
39
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Dropdown, {
30
40
  className: "adv-filter-dropdown",
@@ -34,13 +44,13 @@ function DataTableAdvFilterSingleValue2(_ref) {
34
44
  color: "primary",
35
45
  outline: true,
36
46
  className: "adv-filter-dropdown-toggle",
37
- title: primaryFieldEntry[1] // Use value of field object as title
47
+ title: primaryFieldValue // Use value of field object as title
38
48
  ,
39
49
  caret: true
40
50
  }, /*#__PURE__*/_react.default.createElement("span", {
41
51
  className: "adv-filter-title"
42
- }, primaryFieldEntry[1], " ")), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, null, fieldItems.map((item, idx) => /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
52
+ }, primaryFieldValue, " ")), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, null, normalizedFieldItems === null || normalizedFieldItems === void 0 ? void 0 : normalizedFieldItems.map((item, idx) => /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
43
53
  key: idx,
44
- onClick: () => updateSingleValueFilter(primaryFieldEntry[0], item) // Use key of field object to update the filter
45
- }, item))));
54
+ onClick: () => updateSingleValueFilter(primaryFieldKey, item.value) // Use key of field object to update the filter
55
+ }, item.label))));
46
56
  }
@@ -8,15 +8,24 @@ import { useDataTableContext } from '../../DataTableContext.jsx';
8
8
  import './DataTableAdvFilter2.scss';
9
9
 
10
10
  export function DataTableAdvFilterSingleValue2({ field, fieldItems }) {
11
- const { updateSingleValueFilter, setFilterField } = useDataTableContext();
11
+ const { updateSingleValueFilter, setFilterFieldLabel, setNormalizedFieldItems, getNormalizedFieldItems } = useDataTableContext();
12
12
  const [ dropdownOpen, setDropdownOpen ] = useState(false);
13
- const primaryFieldEntry = Object.entries(field)[0]; // Extracts the first key-value pair from the field object
13
+ const entries = field != null && typeof field === 'object' ? Object.entries(field) : [];
14
+ const primaryFieldEntry = entries[0]; // Extracts the first key-value pair from the field object
15
+ const [primaryFieldKey, primaryFieldValue] = primaryFieldEntry ?? [];
16
+ const normalizedFieldItems = getNormalizedFieldItems(primaryFieldKey);
14
17
 
15
- // Update filterFields in DataTable context
18
+ // Update filterFields and normalizedFieldItems in DataTable context
16
19
  useEffect(() => {
17
- setFilterField(field);
20
+ setFilterFieldLabel(field);
21
+ setNormalizedFieldItems(primaryFieldKey, fieldItems); // Store normalized items in context for DataTableBadge label lookup
18
22
  },[]);
19
23
 
24
+ if (!primaryFieldEntry) {
25
+ console.warn('DataTableAdvFilterSingleValue2: "field" prop is missing or empty - cannot render filter.');
26
+ return null;
27
+ }
28
+
20
29
  const toggle = () => setDropdownOpen((prevState) => !prevState);
21
30
 
22
31
  return (
@@ -25,20 +34,20 @@ export function DataTableAdvFilterSingleValue2({ field, fieldItems }) {
25
34
  color="primary"
26
35
  outline
27
36
  className="adv-filter-dropdown-toggle"
28
- title={primaryFieldEntry[1]} // Use value of field object as title
37
+ title={primaryFieldValue} // Use value of field object as title
29
38
  caret
30
39
  >
31
40
  <span className="adv-filter-title">
32
- {primaryFieldEntry[1]} {/* Use value of field object as title */}
41
+ {primaryFieldValue} {/* Use value of field object as title */}
33
42
  </span>
34
43
  </DropdownToggle>
35
44
  <DropdownMenu>
36
- {fieldItems.map((item, idx) => (
45
+ {normalizedFieldItems?.map((item, idx) => (
37
46
  <DropdownItem
38
47
  key={idx}
39
- onClick={() => updateSingleValueFilter(primaryFieldEntry[0], item)} // Use key of field object to update the filter
48
+ onClick={() => updateSingleValueFilter(primaryFieldKey, item.value)} // Use key of field object to update the filter
40
49
  >
41
- {item}
50
+ {item.label}
42
51
  </DropdownItem>
43
52
  ))}
44
53
  </DropdownMenu>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asab_webui_components",
3
- "version": "27.3.10",
3
+ "version": "27.4.1",
4
4
  "license": "BSD-3-Clause",
5
5
  "description": "TeskaLabs ASAB WebUI Components Library",
6
6
  "contributors": [