sag_components 2.0.0-beta194 → 2.0.0-beta195
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/index.esm.js +297 -156
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +297 -156
- package/dist/index.js.map +1 -1
- package/dist/types/components/Table/DropMenus/FilterPop.style.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -3772,7 +3772,7 @@ const TextFieldInput = styled.input`
|
|
|
3772
3772
|
}
|
|
3773
3773
|
`;
|
|
3774
3774
|
|
|
3775
|
-
const SearchInput = props => {
|
|
3775
|
+
const SearchInput$1 = props => {
|
|
3776
3776
|
const {
|
|
3777
3777
|
value,
|
|
3778
3778
|
placeholder = 'Search',
|
|
@@ -3917,7 +3917,7 @@ const ActionsWrapper = styled.div`
|
|
|
3917
3917
|
gap: 10px;
|
|
3918
3918
|
width: 100%;
|
|
3919
3919
|
`;
|
|
3920
|
-
const SearchInputWrap = styled(SearchInput)`
|
|
3920
|
+
const SearchInputWrap = styled(SearchInput$1)`
|
|
3921
3921
|
margin-left: auto;
|
|
3922
3922
|
`;
|
|
3923
3923
|
|
|
@@ -10579,24 +10579,23 @@ const QuarterPopupPicker = ({
|
|
|
10579
10579
|
};
|
|
10580
10580
|
|
|
10581
10581
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
10582
|
-
const QuarterPicker =
|
|
10583
|
-
|
|
10584
|
-
|
|
10585
|
-
|
|
10586
|
-
|
|
10587
|
-
|
|
10588
|
-
|
|
10589
|
-
|
|
10590
|
-
|
|
10591
|
-
|
|
10592
|
-
|
|
10593
|
-
|
|
10594
|
-
|
|
10595
|
-
|
|
10596
|
-
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
} = _ref;
|
|
10582
|
+
const QuarterPicker = ({
|
|
10583
|
+
availableQuarters,
|
|
10584
|
+
// ["Q1-2024"]
|
|
10585
|
+
label,
|
|
10586
|
+
onChange,
|
|
10587
|
+
borderRadius,
|
|
10588
|
+
required,
|
|
10589
|
+
width,
|
|
10590
|
+
height,
|
|
10591
|
+
placeholder,
|
|
10592
|
+
disabled,
|
|
10593
|
+
borderColor,
|
|
10594
|
+
borderColorFocus,
|
|
10595
|
+
textColor,
|
|
10596
|
+
selectedValue,
|
|
10597
|
+
startYear
|
|
10598
|
+
}) => {
|
|
10600
10599
|
const [isFocused, setIsFocused] = useState(false);
|
|
10601
10600
|
const [isOpen, setIsOpen] = useState(false);
|
|
10602
10601
|
const [value, setValue] = useState('');
|
|
@@ -11038,23 +11037,22 @@ const MonthPopupPicker = ({
|
|
|
11038
11037
|
};
|
|
11039
11038
|
|
|
11040
11039
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
11041
|
-
const MonthPicker =
|
|
11042
|
-
|
|
11043
|
-
|
|
11044
|
-
|
|
11045
|
-
|
|
11046
|
-
|
|
11047
|
-
|
|
11048
|
-
|
|
11049
|
-
|
|
11050
|
-
|
|
11051
|
-
|
|
11052
|
-
|
|
11053
|
-
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
|
|
11057
|
-
} = _ref;
|
|
11040
|
+
const MonthPicker = ({
|
|
11041
|
+
availableMonths,
|
|
11042
|
+
label,
|
|
11043
|
+
onChange,
|
|
11044
|
+
borderRadius,
|
|
11045
|
+
required,
|
|
11046
|
+
width,
|
|
11047
|
+
height,
|
|
11048
|
+
placeholder,
|
|
11049
|
+
disabled,
|
|
11050
|
+
borderColor,
|
|
11051
|
+
borderColorFocus,
|
|
11052
|
+
textColor,
|
|
11053
|
+
selectedValue,
|
|
11054
|
+
startYear
|
|
11055
|
+
}) => {
|
|
11058
11056
|
const [isFocused, setIsFocused] = useState(false);
|
|
11059
11057
|
const [isOpen, setIsOpen] = useState(false);
|
|
11060
11058
|
const [value, setValue] = useState('');
|
|
@@ -12254,16 +12252,13 @@ const Td$1 = styled.td`
|
|
|
12254
12252
|
`;
|
|
12255
12253
|
const Tr = styled.tr`
|
|
12256
12254
|
border-bottom: 1px solid #f3f4f6;
|
|
12257
|
-
${
|
|
12258
|
-
|
|
12259
|
-
|
|
12260
|
-
|
|
12261
|
-
} = _ref;
|
|
12262
|
-
return enableHover && `&:hover {
|
|
12255
|
+
${({
|
|
12256
|
+
enableHover,
|
|
12257
|
+
selectHoverColor
|
|
12258
|
+
}) => enableHover && `&:hover {
|
|
12263
12259
|
background-color: ${selectHoverColor};
|
|
12264
12260
|
cursor: pointer;
|
|
12265
|
-
}
|
|
12266
|
-
}}
|
|
12261
|
+
}`}
|
|
12267
12262
|
`;
|
|
12268
12263
|
const InfoText = styled.div`
|
|
12269
12264
|
font-weight: 400;
|
|
@@ -24165,22 +24160,21 @@ const DeleteIcon = styled.div`
|
|
|
24165
24160
|
position: absolute;
|
|
24166
24161
|
`;
|
|
24167
24162
|
|
|
24168
|
-
const QuickFilterDropdownSingle =
|
|
24169
|
-
|
|
24170
|
-
|
|
24171
|
-
|
|
24172
|
-
|
|
24173
|
-
|
|
24174
|
-
|
|
24175
|
-
|
|
24176
|
-
|
|
24177
|
-
|
|
24178
|
-
|
|
24179
|
-
|
|
24180
|
-
|
|
24181
|
-
|
|
24182
|
-
|
|
24183
|
-
} = _ref;
|
|
24163
|
+
const QuickFilterDropdownSingle = ({
|
|
24164
|
+
label,
|
|
24165
|
+
hoverColor,
|
|
24166
|
+
options,
|
|
24167
|
+
selectedValue,
|
|
24168
|
+
placeHolder,
|
|
24169
|
+
onChange,
|
|
24170
|
+
disabled,
|
|
24171
|
+
width,
|
|
24172
|
+
error,
|
|
24173
|
+
errorMessage,
|
|
24174
|
+
xIconShow,
|
|
24175
|
+
labelColor,
|
|
24176
|
+
showLabelOnTop
|
|
24177
|
+
}) => {
|
|
24184
24178
|
const [isFocused, setIsFocused] = useState(false);
|
|
24185
24179
|
const [showOptions, setShowOptions] = useState(false);
|
|
24186
24180
|
const [inputValue, setInputValue] = useState("");
|
|
@@ -24577,24 +24571,23 @@ const IconContainer$2 = styled.div`
|
|
|
24577
24571
|
cursor: pointer;
|
|
24578
24572
|
`;
|
|
24579
24573
|
|
|
24580
|
-
const QuickFilterDropdownMultiSelection =
|
|
24581
|
-
|
|
24582
|
-
|
|
24583
|
-
|
|
24584
|
-
|
|
24585
|
-
|
|
24586
|
-
|
|
24587
|
-
|
|
24588
|
-
|
|
24589
|
-
|
|
24590
|
-
|
|
24591
|
-
|
|
24592
|
-
|
|
24593
|
-
|
|
24594
|
-
|
|
24595
|
-
|
|
24596
|
-
|
|
24597
|
-
} = _ref;
|
|
24574
|
+
const QuickFilterDropdownMultiSelection = ({
|
|
24575
|
+
label,
|
|
24576
|
+
labelEmptyValue,
|
|
24577
|
+
options,
|
|
24578
|
+
selectedValue,
|
|
24579
|
+
placeHolder,
|
|
24580
|
+
onChange,
|
|
24581
|
+
required,
|
|
24582
|
+
disabled,
|
|
24583
|
+
width,
|
|
24584
|
+
error,
|
|
24585
|
+
errorMessage,
|
|
24586
|
+
labelColor,
|
|
24587
|
+
xIconShow,
|
|
24588
|
+
checkBoxColor,
|
|
24589
|
+
showLabelOnTop
|
|
24590
|
+
}) => {
|
|
24598
24591
|
const [isFocused, setIsFocused] = useState(false);
|
|
24599
24592
|
const [showOptions, setShowOptions] = useState(false);
|
|
24600
24593
|
const [inputValue, setInputValue] = useState('');
|
|
@@ -35925,9 +35918,9 @@ const ToggleSlider = styled.span`
|
|
|
35925
35918
|
}
|
|
35926
35919
|
`;
|
|
35927
35920
|
|
|
35928
|
-
/**
|
|
35929
|
-
* ToggleSwitch component for on/off states.
|
|
35930
|
-
* Supports small/large sizes and disabled state.
|
|
35921
|
+
/**
|
|
35922
|
+
* ToggleSwitch component for on/off states.
|
|
35923
|
+
* Supports small/large sizes and disabled state.
|
|
35931
35924
|
*/
|
|
35932
35925
|
function ToggleSwitch(_ref) {
|
|
35933
35926
|
let {
|
|
@@ -37335,11 +37328,15 @@ const FilterPopContainer = styled.div`
|
|
|
37335
37328
|
font-family: 'Poppins', sans-serif;
|
|
37336
37329
|
width: ${props => props.width || '300px'};
|
|
37337
37330
|
height: ${props => props.height || 'auto'};
|
|
37331
|
+
max-height: ${props => props.maxHeight || '400px'};
|
|
37338
37332
|
padding: 8px;
|
|
37339
37333
|
color: #212121;
|
|
37340
37334
|
background-color: #fff;
|
|
37341
37335
|
border-radius: 4px;
|
|
37342
37336
|
box-shadow: 0px 4px 20px 0px rgba(0, 0, 0, 0.10);
|
|
37337
|
+
display: flex;
|
|
37338
|
+
flex-direction: column;
|
|
37339
|
+
overflow: hidden;
|
|
37343
37340
|
|
|
37344
37341
|
/* Add this CSS for checkbox styling */
|
|
37345
37342
|
input[type="checkbox"] {
|
|
@@ -37354,52 +37351,133 @@ const Title$5 = styled.h6`
|
|
|
37354
37351
|
padding: 4px 12px;
|
|
37355
37352
|
margin: 0 0 10px;
|
|
37356
37353
|
text-align: left;
|
|
37354
|
+
flex-shrink: 0;
|
|
37355
|
+
`;
|
|
37356
|
+
const SearchInput = styled.input`
|
|
37357
|
+
width: 100%;
|
|
37358
|
+
padding: 8px 12px;
|
|
37359
|
+
margin: 0 0 12px;
|
|
37360
|
+
font-size: 14px;
|
|
37361
|
+
font-family: 'Poppins', sans-serif;
|
|
37362
|
+
border: 1px solid #e0e0e0;
|
|
37363
|
+
border-radius: 4px;
|
|
37364
|
+
background-color: #fff;
|
|
37365
|
+
color: #212121;
|
|
37366
|
+
flex-shrink: 0;
|
|
37367
|
+
box-sizing: border-box;
|
|
37368
|
+
|
|
37369
|
+
&::placeholder {
|
|
37370
|
+
color: #999;
|
|
37371
|
+
font-style: italic;
|
|
37372
|
+
}
|
|
37373
|
+
|
|
37374
|
+
&:focus {
|
|
37375
|
+
outline: none;
|
|
37376
|
+
border-color: ${props => props.accentColor || '#066768'};
|
|
37377
|
+
box-shadow: 0 0 0 2px ${props => props.accentColor || '#066768'}20;
|
|
37378
|
+
}
|
|
37379
|
+
|
|
37380
|
+
&:hover {
|
|
37381
|
+
border-color: #c0c0c0;
|
|
37382
|
+
}
|
|
37357
37383
|
`;
|
|
37358
37384
|
const CheckboxGroup = styled.div`
|
|
37359
|
-
|
|
37360
|
-
|
|
37361
|
-
|
|
37362
|
-
|
|
37385
|
+
display: flex;
|
|
37386
|
+
flex-direction: column;
|
|
37387
|
+
gap: 8px;
|
|
37388
|
+
margin-bottom: 16px;
|
|
37389
|
+
overflow-y: auto;
|
|
37390
|
+
flex: 1;
|
|
37391
|
+
min-height: 0;
|
|
37392
|
+
|
|
37393
|
+
/* Custom scrollbar styling */
|
|
37394
|
+
&::-webkit-scrollbar {
|
|
37395
|
+
width: 6px;
|
|
37396
|
+
}
|
|
37397
|
+
|
|
37398
|
+
&::-webkit-scrollbar-track {
|
|
37399
|
+
background: #f1f1f1;
|
|
37400
|
+
border-radius: 3px;
|
|
37401
|
+
}
|
|
37402
|
+
|
|
37403
|
+
&::-webkit-scrollbar-thumb {
|
|
37404
|
+
background: #c1c1c1;
|
|
37405
|
+
border-radius: 3px;
|
|
37406
|
+
}
|
|
37407
|
+
|
|
37408
|
+
&::-webkit-scrollbar-thumb:hover {
|
|
37409
|
+
background: #a8a8a8;
|
|
37410
|
+
}
|
|
37411
|
+
|
|
37412
|
+
/* For Firefox */
|
|
37413
|
+
scrollbar-width: thin;
|
|
37414
|
+
scrollbar-color: #c1c1c1 #f1f1f1;
|
|
37363
37415
|
`;
|
|
37364
37416
|
const CheckboxLabel = styled.label`
|
|
37365
|
-
|
|
37366
|
-
|
|
37367
|
-
|
|
37368
|
-
|
|
37369
|
-
|
|
37370
|
-
|
|
37371
|
-
|
|
37372
|
-
|
|
37373
|
-
|
|
37374
|
-
|
|
37375
|
-
|
|
37376
|
-
|
|
37377
|
-
|
|
37378
|
-
|
|
37379
|
-
|
|
37380
|
-
|
|
37381
|
-
|
|
37382
|
-
|
|
37383
|
-
|
|
37417
|
+
display: flex;
|
|
37418
|
+
align-items: center;
|
|
37419
|
+
gap: 8px;
|
|
37420
|
+
padding: 8px 12px;
|
|
37421
|
+
font-size: 14px;
|
|
37422
|
+
font-weight: 400;
|
|
37423
|
+
color: #212121;
|
|
37424
|
+
cursor: pointer;
|
|
37425
|
+
flex-shrink: 0;
|
|
37426
|
+
|
|
37427
|
+
&:hover {
|
|
37428
|
+
background-color: #E6F0F0;
|
|
37429
|
+
}
|
|
37430
|
+
|
|
37431
|
+
> span {
|
|
37432
|
+
width: ${props => props.width};
|
|
37433
|
+
white-space: nowrap;
|
|
37434
|
+
overflow: hidden;
|
|
37435
|
+
text-overflow: ellipsis;
|
|
37436
|
+
}
|
|
37437
|
+
`;
|
|
37438
|
+
const NoResultsMessage = styled.div`
|
|
37439
|
+
padding: 16px 12px;
|
|
37440
|
+
text-align: center;
|
|
37441
|
+
color: #999;
|
|
37442
|
+
font-size: 14px;
|
|
37443
|
+
font-style: italic;
|
|
37384
37444
|
`;
|
|
37385
37445
|
const ButtonWrapper$2 = styled.div`
|
|
37386
37446
|
text-align: right;
|
|
37447
|
+
flex-shrink: 0;
|
|
37448
|
+
padding-top: 8px;
|
|
37449
|
+
border-top: 1px solid #e0e0e0;
|
|
37450
|
+
display: flex;
|
|
37451
|
+
justify-content: flex-end;
|
|
37452
|
+
align-items: center;
|
|
37387
37453
|
`;
|
|
37388
37454
|
const ResetButton$1 = styled.button`
|
|
37389
37455
|
font-size: 14px;
|
|
37390
37456
|
font-weight: 400;
|
|
37391
|
-
padding:
|
|
37457
|
+
padding: 4px 8px;
|
|
37392
37458
|
background-color: transparent;
|
|
37393
37459
|
border: none;
|
|
37394
37460
|
cursor: pointer;
|
|
37461
|
+
border-radius: 3px;
|
|
37462
|
+
|
|
37463
|
+
&:hover {
|
|
37464
|
+
background-color: #f0f0f0;
|
|
37465
|
+
color: #066768;
|
|
37466
|
+
}
|
|
37395
37467
|
|
|
37396
|
-
|
|
37397
|
-
|
|
37398
|
-
|
|
37399
|
-
|
|
37400
|
-
|
|
37401
|
-
|
|
37402
|
-
|
|
37468
|
+
&:active {
|
|
37469
|
+
color: #066768;
|
|
37470
|
+
}
|
|
37471
|
+
|
|
37472
|
+
&:disabled {
|
|
37473
|
+
color: #ccc;
|
|
37474
|
+
cursor: not-allowed;
|
|
37475
|
+
|
|
37476
|
+
&:hover {
|
|
37477
|
+
background-color: transparent;
|
|
37478
|
+
color: #ccc;
|
|
37479
|
+
}
|
|
37480
|
+
}
|
|
37403
37481
|
`;
|
|
37404
37482
|
|
|
37405
37483
|
const FilterPop = props => {
|
|
@@ -37407,15 +37485,22 @@ const FilterPop = props => {
|
|
|
37407
37485
|
menuName = '',
|
|
37408
37486
|
width = 'auto',
|
|
37409
37487
|
height = 'auto',
|
|
37488
|
+
maxHeight = '400px',
|
|
37410
37489
|
list = [],
|
|
37411
37490
|
color = '#007bff',
|
|
37412
37491
|
onCheck = () => {},
|
|
37413
37492
|
onReset = () => {},
|
|
37414
37493
|
doubleColumn = false,
|
|
37415
37494
|
isAsc = true,
|
|
37416
|
-
selectedAttributes: propSelectedAttributes = {}
|
|
37495
|
+
selectedAttributes: propSelectedAttributes = {},
|
|
37496
|
+
showSearch = true,
|
|
37497
|
+
// New prop to enable/disable search
|
|
37498
|
+
searchPlaceholder = 'Search...' // New prop for search placeholder
|
|
37417
37499
|
} = props;
|
|
37418
37500
|
|
|
37501
|
+
// State for search term
|
|
37502
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
37503
|
+
|
|
37419
37504
|
// Add hardcoded "Select All" as first item
|
|
37420
37505
|
const fullList = [{
|
|
37421
37506
|
value: 'All',
|
|
@@ -37439,18 +37524,49 @@ const FilterPop = props => {
|
|
|
37439
37524
|
return fullList.filter(item => item.value !== 'All');
|
|
37440
37525
|
};
|
|
37441
37526
|
|
|
37442
|
-
//
|
|
37527
|
+
// Filter items based on search term
|
|
37528
|
+
const filteredList = useMemo(() => {
|
|
37529
|
+
if (!searchTerm.trim()) {
|
|
37530
|
+
return fullList;
|
|
37531
|
+
}
|
|
37532
|
+
const searchLower = searchTerm.toLowerCase().trim();
|
|
37533
|
+
const filteredNonAllItems = fullList.filter(item => {
|
|
37534
|
+
if (item.value === 'All') return false; // Don't filter out "Select All" in search
|
|
37535
|
+
return item.label.toLowerCase().includes(searchLower);
|
|
37536
|
+
});
|
|
37537
|
+
|
|
37538
|
+
// Always include "Select All" at the top when searching
|
|
37539
|
+
return [fullList.find(item => item.value === 'All'), ...filteredNonAllItems];
|
|
37540
|
+
}, [fullList, searchTerm]);
|
|
37541
|
+
|
|
37542
|
+
// Sort the filtered list based on the `isAsc` prop, keeping 'All' as the first option
|
|
37543
|
+
const sortedList = useMemo(() => {
|
|
37544
|
+
return [...filteredList.filter(item => item.value === 'All'), ...filteredList.filter(item => item.value !== 'All').sort((a, b) => {
|
|
37545
|
+
return isAsc ? a.label.localeCompare(b.label) : b.label.localeCompare(a.label);
|
|
37546
|
+
})];
|
|
37547
|
+
}, [filteredList, isAsc]);
|
|
37548
|
+
|
|
37549
|
+
// Helper functions for "Select All" logic based on ALL items (not just filtered)
|
|
37443
37550
|
const areAllNonAllItemsSelected = function () {
|
|
37444
37551
|
let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : selectedAttributes;
|
|
37445
37552
|
const nonAllItems = getNonAllItems();
|
|
37446
37553
|
return nonAllItems.every(item => attributes[item.value]);
|
|
37447
37554
|
};
|
|
37448
37555
|
|
|
37449
|
-
// Helper
|
|
37450
|
-
const
|
|
37556
|
+
// Helper functions for visible filtered items
|
|
37557
|
+
const getVisibleNonAllItems = () => {
|
|
37558
|
+
return sortedList.filter(item => item.value !== 'All');
|
|
37559
|
+
};
|
|
37560
|
+
const areAllVisibleItemsSelected = function () {
|
|
37451
37561
|
let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : selectedAttributes;
|
|
37452
|
-
const
|
|
37453
|
-
|
|
37562
|
+
const visibleItems = getVisibleNonAllItems();
|
|
37563
|
+
if (visibleItems.length === 0) return false;
|
|
37564
|
+
return visibleItems.every(item => attributes[item.value]);
|
|
37565
|
+
};
|
|
37566
|
+
const areAnyVisibleItemsSelected = function () {
|
|
37567
|
+
let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : selectedAttributes;
|
|
37568
|
+
const visibleItems = getVisibleNonAllItems();
|
|
37569
|
+
return visibleItems.some(item => attributes[item.value]);
|
|
37454
37570
|
};
|
|
37455
37571
|
|
|
37456
37572
|
// New helper function to create the efficient data structure
|
|
@@ -37474,14 +37590,12 @@ const FilterPop = props => {
|
|
|
37474
37590
|
isSelectAll: false
|
|
37475
37591
|
};
|
|
37476
37592
|
} else if (mostSelected) {
|
|
37477
|
-
// More items selected than unselected - use exclude approach
|
|
37478
37593
|
return {
|
|
37479
37594
|
excluded: unselectedItems.map(item => item.value),
|
|
37480
37595
|
included: [],
|
|
37481
37596
|
isSelectAll: true
|
|
37482
37597
|
};
|
|
37483
37598
|
} else {
|
|
37484
|
-
// Fewer items selected than unselected - use include approach
|
|
37485
37599
|
return {
|
|
37486
37600
|
excluded: [],
|
|
37487
37601
|
included: selectedItems.map(item => item.value),
|
|
@@ -37491,47 +37605,50 @@ const FilterPop = props => {
|
|
|
37491
37605
|
};
|
|
37492
37606
|
const handleCheckboxChange = attribute => {
|
|
37493
37607
|
if (attribute === 'All') {
|
|
37494
|
-
//
|
|
37495
|
-
const
|
|
37496
|
-
const
|
|
37497
|
-
const updatedAttributes = {};
|
|
37608
|
+
// "Select All" behavior - affects ALL visible filtered items
|
|
37609
|
+
const visibleNonAllItems = getVisibleNonAllItems();
|
|
37610
|
+
const allVisibleSelected = areAllVisibleItemsSelected();
|
|
37498
37611
|
|
|
37499
|
-
//
|
|
37500
|
-
|
|
37501
|
-
|
|
37612
|
+
// Toggle all visible items
|
|
37613
|
+
const updatedAttributes = {
|
|
37614
|
+
...selectedAttributes
|
|
37615
|
+
};
|
|
37616
|
+
visibleNonAllItems.forEach(item => {
|
|
37617
|
+
updatedAttributes[item.value] = !allVisibleSelected;
|
|
37502
37618
|
});
|
|
37503
37619
|
|
|
37504
|
-
//
|
|
37620
|
+
// Update "Select All" state based on all items (not just visible)
|
|
37621
|
+
updatedAttributes.All = areAllNonAllItemsSelected(updatedAttributes);
|
|
37505
37622
|
const filterData = createFilterData(updatedAttributes);
|
|
37506
37623
|
onCheck({
|
|
37507
37624
|
changedItem: attribute,
|
|
37508
37625
|
filterData: filterData,
|
|
37509
|
-
allItems: updatedAttributes
|
|
37626
|
+
allItems: updatedAttributes
|
|
37510
37627
|
});
|
|
37511
37628
|
} else {
|
|
37512
|
-
//
|
|
37629
|
+
// Individual item clicked
|
|
37513
37630
|
const updatedAttributes = {
|
|
37514
37631
|
...selectedAttributes,
|
|
37515
37632
|
[attribute]: !selectedAttributes[attribute]
|
|
37516
37633
|
};
|
|
37517
37634
|
|
|
37518
|
-
//
|
|
37635
|
+
// Update "Select All" state based on all items
|
|
37636
|
+
updatedAttributes.All = areAllNonAllItemsSelected(updatedAttributes);
|
|
37519
37637
|
const filterData = createFilterData(updatedAttributes);
|
|
37520
37638
|
onCheck({
|
|
37521
37639
|
changedItem: attribute,
|
|
37522
37640
|
filterData: filterData,
|
|
37523
|
-
allItems: updatedAttributes
|
|
37641
|
+
allItems: updatedAttributes
|
|
37524
37642
|
});
|
|
37525
37643
|
}
|
|
37526
37644
|
};
|
|
37527
37645
|
const handleReset = () => {
|
|
37646
|
+
// Clear search when resetting
|
|
37647
|
+
setSearchTerm('');
|
|
37648
|
+
|
|
37528
37649
|
// Reset to the original default state (all selected)
|
|
37529
37650
|
const resetState = createInitialState();
|
|
37530
|
-
|
|
37531
|
-
// Call the onReset callback
|
|
37532
37651
|
onReset();
|
|
37533
|
-
|
|
37534
|
-
// Also call onCheck to notify parent of the reset with new efficient structure
|
|
37535
37652
|
const filterData = createFilterData(resetState);
|
|
37536
37653
|
onCheck({
|
|
37537
37654
|
changedItem: 'reset',
|
|
@@ -37540,17 +37657,24 @@ const FilterPop = props => {
|
|
|
37540
37657
|
});
|
|
37541
37658
|
};
|
|
37542
37659
|
|
|
37543
|
-
// Function to determine checkbox state for "Select All"
|
|
37660
|
+
// Function to determine checkbox state for "Select All" based on visible items
|
|
37544
37661
|
const getSelectAllCheckboxProps = () => {
|
|
37545
|
-
const
|
|
37546
|
-
|
|
37547
|
-
|
|
37548
|
-
|
|
37662
|
+
const visibleItems = getVisibleNonAllItems();
|
|
37663
|
+
if (visibleItems.length === 0) {
|
|
37664
|
+
return {
|
|
37665
|
+
checked: false,
|
|
37666
|
+
indeterminate: false
|
|
37667
|
+
};
|
|
37668
|
+
}
|
|
37669
|
+
const allVisibleSelected = areAllVisibleItemsSelected();
|
|
37670
|
+
const anyVisibleSelected = areAnyVisibleItemsSelected();
|
|
37671
|
+
const noneVisibleSelected = !anyVisibleSelected;
|
|
37672
|
+
if (allVisibleSelected) {
|
|
37549
37673
|
return {
|
|
37550
37674
|
checked: true,
|
|
37551
37675
|
indeterminate: false
|
|
37552
37676
|
};
|
|
37553
|
-
} else if (
|
|
37677
|
+
} else if (noneVisibleSelected) {
|
|
37554
37678
|
return {
|
|
37555
37679
|
checked: false,
|
|
37556
37680
|
indeterminate: false
|
|
@@ -37563,38 +37687,50 @@ const FilterPop = props => {
|
|
|
37563
37687
|
}
|
|
37564
37688
|
};
|
|
37565
37689
|
|
|
37566
|
-
//
|
|
37567
|
-
const
|
|
37568
|
-
|
|
37569
|
-
}
|
|
37690
|
+
// Handle search input change
|
|
37691
|
+
const handleSearchChange = e => {
|
|
37692
|
+
setSearchTerm(e.target.value);
|
|
37693
|
+
};
|
|
37694
|
+
|
|
37695
|
+
// Clear search
|
|
37696
|
+
const clearSearch = () => {
|
|
37697
|
+
setSearchTerm('');
|
|
37698
|
+
};
|
|
37570
37699
|
return /*#__PURE__*/React$1.createElement(FilterPopContainer, {
|
|
37571
37700
|
width: width,
|
|
37572
37701
|
height: height,
|
|
37573
|
-
|
|
37574
|
-
|
|
37702
|
+
maxHeight: maxHeight,
|
|
37703
|
+
accentColor: color
|
|
37704
|
+
}, /*#__PURE__*/React$1.createElement(Title$5, null, menuName), showSearch && /*#__PURE__*/React$1.createElement(SearchInput, {
|
|
37705
|
+
type: "text",
|
|
37706
|
+
placeholder: searchPlaceholder,
|
|
37707
|
+
value: searchTerm,
|
|
37708
|
+
onChange: handleSearchChange,
|
|
37709
|
+
accentColor: color
|
|
37710
|
+
}), /*#__PURE__*/React$1.createElement(CheckboxGroup, {
|
|
37575
37711
|
style: {
|
|
37576
37712
|
display: doubleColumn ? 'grid' : 'flex',
|
|
37577
37713
|
gridTemplateColumns: doubleColumn ? '1fr 1fr' : 'none',
|
|
37578
37714
|
gap: '8px'
|
|
37579
37715
|
}
|
|
37580
|
-
}, sortedList.
|
|
37716
|
+
}, sortedList.length === 1 ?
|
|
37717
|
+
/*#__PURE__*/
|
|
37718
|
+
// Only "Select All" is visible
|
|
37719
|
+
React$1.createElement(NoResultsMessage, null, "No items match your search") : sortedList.map(item => {
|
|
37581
37720
|
const isSelectAll = item.value === 'All';
|
|
37582
37721
|
const checkboxProps = isSelectAll ? getSelectAllCheckboxProps() : {};
|
|
37583
37722
|
const isChecked = isSelectAll ? checkboxProps.checked : selectedAttributes[item.value] || false;
|
|
37584
37723
|
return /*#__PURE__*/React$1.createElement(CheckboxLabel, {
|
|
37585
37724
|
width: !doubleColumn ?? width,
|
|
37586
|
-
key: `${item.value}-${JSON.stringify(selectedAttributes)}`
|
|
37725
|
+
key: `${item.value}-${JSON.stringify(selectedAttributes)}-${searchTerm}`
|
|
37587
37726
|
}, /*#__PURE__*/React$1.createElement("input", {
|
|
37588
37727
|
type: "checkbox",
|
|
37589
37728
|
checked: isChecked,
|
|
37590
37729
|
ref: el => {
|
|
37591
37730
|
if (el) {
|
|
37592
|
-
// Handle indeterminate for Select All FIRST
|
|
37593
37731
|
if (isSelectAll) {
|
|
37594
37732
|
el.indeterminate = checkboxProps.indeterminate;
|
|
37595
37733
|
}
|
|
37596
|
-
|
|
37597
|
-
// FORCE DOM SYNC - manually set DOM state to match React state
|
|
37598
37734
|
if (el.checked !== isChecked) {
|
|
37599
37735
|
el.checked = isChecked;
|
|
37600
37736
|
}
|
|
@@ -37604,7 +37740,12 @@ const FilterPop = props => {
|
|
|
37604
37740
|
handleCheckboxChange(item.value);
|
|
37605
37741
|
}
|
|
37606
37742
|
}), /*#__PURE__*/React$1.createElement("span", null, item.label));
|
|
37607
|
-
})), /*#__PURE__*/React$1.createElement(ButtonWrapper$2, null, /*#__PURE__*/React$1.createElement(ResetButton$1, {
|
|
37743
|
+
})), /*#__PURE__*/React$1.createElement(ButtonWrapper$2, null, showSearch && searchTerm && /*#__PURE__*/React$1.createElement(ResetButton$1, {
|
|
37744
|
+
onClick: clearSearch,
|
|
37745
|
+
style: {
|
|
37746
|
+
marginRight: '8px'
|
|
37747
|
+
}
|
|
37748
|
+
}, "Clear Search"), /*#__PURE__*/React$1.createElement(ResetButton$1, {
|
|
37608
37749
|
onClick: handleReset,
|
|
37609
37750
|
disabled: areAllNonAllItemsSelected() && selectedAttributes.All
|
|
37610
37751
|
}, "Reset")));
|
|
@@ -55305,5 +55446,5 @@ const Tag = props => {
|
|
|
55305
55446
|
}, /*#__PURE__*/React$1.createElement("span", null, text || template?.text));
|
|
55306
55447
|
};
|
|
55307
55448
|
|
|
55308
|
-
export { AdvancedThresholds, Analytics, AreaChart, BannerEventBoxList, BarChart, BarChartTwoRows, BarChartWithAreaChart, BarChartsByWeeks, BatteryChart, BreakdownPanel, BrushChart, BubbleChart, Budgets, Build, Button$1 as Button, Campaigns, CheckBox, CollapseData, CollapseHeader, ContainerTable, Coupons, CustomerSegments, Dashboard, DialogOverlay$1 as DialogOverlay, DoubleBarSingleLine, DoublePanelDataRow, DownloadProgress, DropdownNew, EventDetailsCard, EventList, Execute, FilterPanel, FilterPop, GroupBuilder, Heatmap, IconButton$1 as IconButton, Input$2 as Input, InsightsCarousel, ItemManagerPanel, ItemsStores, LinkButton, LinnerDataBox, MarketShareDescription, MenuRoute, MessageBox, ModalDrawer, ModalWithOverlay, OneColumnContainer, OverlayDropdown, PerformanceAnalyticsLegend, PieChart, PopupCharts, PreTestWhatIf, QuickFilter, QuickFilterCards, RangePicker, RangePop, ReportTable, RulesEngine, SampleRunEngine, SearchInput, SingleBarLineCharts, SortPop, TabMenu, Table, Tag, ToasterMessageBox, ToggleSwitch, Tooltip$2 as Tooltip, TopToggleList, TotalDoughnutChart, TotalHorizontalCharts, Track, TwoBarCharts, WeeksPicker };
|
|
55449
|
+
export { AdvancedThresholds, Analytics, AreaChart, BannerEventBoxList, BarChart, BarChartTwoRows, BarChartWithAreaChart, BarChartsByWeeks, BatteryChart, BreakdownPanel, BrushChart, BubbleChart, Budgets, Build, Button$1 as Button, Campaigns, CheckBox, CollapseData, CollapseHeader, ContainerTable, Coupons, CustomerSegments, Dashboard, DialogOverlay$1 as DialogOverlay, DoubleBarSingleLine, DoublePanelDataRow, DownloadProgress, DropdownNew, EventDetailsCard, EventList, Execute, FilterPanel, FilterPop, GroupBuilder, Heatmap, IconButton$1 as IconButton, Input$2 as Input, InsightsCarousel, ItemManagerPanel, ItemsStores, LinkButton, LinnerDataBox, MarketShareDescription, MenuRoute, MessageBox, ModalDrawer, ModalWithOverlay, OneColumnContainer, OverlayDropdown, PerformanceAnalyticsLegend, PieChart, PopupCharts, PreTestWhatIf, QuickFilter, QuickFilterCards, RangePicker, RangePop, ReportTable, RulesEngine, SampleRunEngine, SearchInput$1 as SearchInput, SingleBarLineCharts, SortPop, TabMenu, Table, Tag, ToasterMessageBox, ToggleSwitch, Tooltip$2 as Tooltip, TopToggleList, TotalDoughnutChart, TotalHorizontalCharts, Track, TwoBarCharts, WeeksPicker };
|
|
55309
55450
|
//# sourceMappingURL=index.esm.js.map
|