asab_webui_components 27.3.10 → 27.4.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/components/DataTable2/DataTable2.js +13 -3
- package/dist/components/DataTable2/DataTable2.jsx +14 -3
- package/dist/components/DataTable2/DataTableContext.js +54 -13
- package/dist/components/DataTable2/DataTableContext.jsx +47 -13
- package/dist/components/DataTable2/components/filters/DataTableAdvCustomFilter.js +2 -2
- package/dist/components/DataTable2/components/filters/DataTableAdvCustomFilter.jsx +2 -2
- package/dist/components/DataTable2/components/filters/DataTableAdvFilterMultiValue2.js +31 -18
- package/dist/components/DataTable2/components/filters/DataTableAdvFilterMultiValue2.jsx +35 -23
- package/dist/components/DataTable2/components/filters/DataTableAdvFilterSingleValue2.js +18 -8
- package/dist/components/DataTable2/components/filters/DataTableAdvFilterSingleValue2.jsx +18 -9
- package/package.json +2 -2
|
@@ -459,24 +459,34 @@ function DataTableBadge(_ref7) {
|
|
|
459
459
|
onRemove
|
|
460
460
|
} = _ref7;
|
|
461
461
|
var {
|
|
462
|
-
|
|
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(
|
|
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(
|
|
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 {
|
|
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(
|
|
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
|
-
{`${
|
|
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
|
|
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
|
|
343
|
-
var
|
|
344
|
-
|
|
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
|
|
348
|
-
var
|
|
349
|
-
var
|
|
350
|
-
|
|
351
|
-
if (
|
|
352
|
-
|
|
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
|
-
|
|
403
|
-
|
|
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
|
|
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
|
|
297
|
-
const
|
|
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
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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
|
-
|
|
354
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
29
|
-
var
|
|
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
|
-
|
|
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:
|
|
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
|
-
},
|
|
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(
|
|
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
|
-
}),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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,
|
|
13
|
+
const { getParam, updateMultiValueFilter, clearMultiValueFilter, setFilterFieldLabel, setNormalizedFieldItems, getNormalizedFieldItems } = useDataTableContext();
|
|
14
14
|
const { t } = useTranslation();
|
|
15
15
|
const [dropdownOpen, setDropdownOpen] = useState(false);
|
|
16
|
-
const
|
|
17
|
-
const
|
|
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
|
-
|
|
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={
|
|
41
|
+
title={primaryFieldValue} // Use value of field object as title
|
|
33
42
|
caret
|
|
34
43
|
>
|
|
35
44
|
<span className="adv-filter-title">
|
|
36
|
-
{
|
|
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(
|
|
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
|
-
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
19
|
+
setFilterFieldLabel,
|
|
20
|
+
setNormalizedFieldItems,
|
|
21
|
+
getNormalizedFieldItems
|
|
20
22
|
} = (0, _DataTableContext.useDataTableContext)();
|
|
21
23
|
var [dropdownOpen, setDropdownOpen] = (0, _react.useState)(false);
|
|
22
|
-
var
|
|
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
|
-
|
|
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:
|
|
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
|
-
},
|
|
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(
|
|
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,
|
|
11
|
+
const { updateSingleValueFilter, setFilterFieldLabel, setNormalizedFieldItems, getNormalizedFieldItems } = useDataTableContext();
|
|
12
12
|
const [ dropdownOpen, setDropdownOpen ] = useState(false);
|
|
13
|
-
const
|
|
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
|
-
|
|
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={
|
|
37
|
+
title={primaryFieldValue} // Use value of field object as title
|
|
29
38
|
caret
|
|
30
39
|
>
|
|
31
40
|
<span className="adv-filter-title">
|
|
32
|
-
{
|
|
41
|
+
{primaryFieldValue} {/* Use value of field object as title */}
|
|
33
42
|
</span>
|
|
34
43
|
</DropdownToggle>
|
|
35
44
|
<DropdownMenu>
|
|
36
|
-
{
|
|
45
|
+
{normalizedFieldItems?.map((item, idx) => (
|
|
37
46
|
<DropdownItem
|
|
38
47
|
key={idx}
|
|
39
|
-
onClick={() => updateSingleValueFilter(
|
|
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
|
+
"version": "27.4.2",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"description": "TeskaLabs ASAB WebUI Components Library",
|
|
6
6
|
"contributors": [
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@babel/runtime": "^7.22.11",
|
|
48
|
-
"axios": "
|
|
48
|
+
"axios": "^1.15.0",
|
|
49
49
|
"bootstrap": "^5.3.1",
|
|
50
50
|
"bootstrap-icons": "^1.10.5",
|
|
51
51
|
"date-fns": "^4.1.0",
|