sag_components 2.0.0-beta274 → 2.0.0-beta275
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 +135 -99
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +135 -99
- package/dist/index.js.map +1 -1
- package/dist/types/components/Table/TableHeader.d.ts +2 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -10581,23 +10581,24 @@ const QuarterPopupPicker = ({
|
|
|
10581
10581
|
};
|
|
10582
10582
|
|
|
10583
10583
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
10584
|
-
const QuarterPicker =
|
|
10585
|
-
|
|
10586
|
-
|
|
10587
|
-
|
|
10588
|
-
|
|
10589
|
-
|
|
10590
|
-
|
|
10591
|
-
|
|
10592
|
-
|
|
10593
|
-
|
|
10594
|
-
|
|
10595
|
-
|
|
10596
|
-
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
|
|
10600
|
-
|
|
10584
|
+
const QuarterPicker = _ref => {
|
|
10585
|
+
let {
|
|
10586
|
+
availableQuarters,
|
|
10587
|
+
// ["Q1-2024"]
|
|
10588
|
+
label,
|
|
10589
|
+
onChange,
|
|
10590
|
+
borderRadius,
|
|
10591
|
+
required,
|
|
10592
|
+
width,
|
|
10593
|
+
height,
|
|
10594
|
+
placeholder,
|
|
10595
|
+
disabled,
|
|
10596
|
+
borderColor,
|
|
10597
|
+
borderColorFocus,
|
|
10598
|
+
textColor,
|
|
10599
|
+
selectedValue,
|
|
10600
|
+
startYear
|
|
10601
|
+
} = _ref;
|
|
10601
10602
|
const [isFocused, setIsFocused] = useState(false);
|
|
10602
10603
|
const [isOpen, setIsOpen] = useState(false);
|
|
10603
10604
|
const [value, setValue] = useState('');
|
|
@@ -11039,22 +11040,23 @@ const MonthPopupPicker = ({
|
|
|
11039
11040
|
};
|
|
11040
11041
|
|
|
11041
11042
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
11042
|
-
const MonthPicker =
|
|
11043
|
-
|
|
11044
|
-
|
|
11045
|
-
|
|
11046
|
-
|
|
11047
|
-
|
|
11048
|
-
|
|
11049
|
-
|
|
11050
|
-
|
|
11051
|
-
|
|
11052
|
-
|
|
11053
|
-
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
|
|
11057
|
-
|
|
11043
|
+
const MonthPicker = _ref => {
|
|
11044
|
+
let {
|
|
11045
|
+
availableMonths,
|
|
11046
|
+
label,
|
|
11047
|
+
onChange,
|
|
11048
|
+
borderRadius,
|
|
11049
|
+
required,
|
|
11050
|
+
width,
|
|
11051
|
+
height,
|
|
11052
|
+
placeholder,
|
|
11053
|
+
disabled,
|
|
11054
|
+
borderColor,
|
|
11055
|
+
borderColorFocus,
|
|
11056
|
+
textColor,
|
|
11057
|
+
selectedValue,
|
|
11058
|
+
startYear
|
|
11059
|
+
} = _ref;
|
|
11058
11060
|
const [isFocused, setIsFocused] = useState(false);
|
|
11059
11061
|
const [isOpen, setIsOpen] = useState(false);
|
|
11060
11062
|
const [value, setValue] = useState('');
|
|
@@ -24165,21 +24167,22 @@ const DeleteIcon = styled.div`
|
|
|
24165
24167
|
position: absolute;
|
|
24166
24168
|
`;
|
|
24167
24169
|
|
|
24168
|
-
const QuickFilterDropdownSingle =
|
|
24169
|
-
|
|
24170
|
-
|
|
24171
|
-
|
|
24172
|
-
|
|
24173
|
-
|
|
24174
|
-
|
|
24175
|
-
|
|
24176
|
-
|
|
24177
|
-
|
|
24178
|
-
|
|
24179
|
-
|
|
24180
|
-
|
|
24181
|
-
|
|
24182
|
-
|
|
24170
|
+
const QuickFilterDropdownSingle = _ref => {
|
|
24171
|
+
let {
|
|
24172
|
+
label,
|
|
24173
|
+
hoverColor,
|
|
24174
|
+
options,
|
|
24175
|
+
selectedValue,
|
|
24176
|
+
placeHolder,
|
|
24177
|
+
onChange,
|
|
24178
|
+
disabled,
|
|
24179
|
+
width,
|
|
24180
|
+
error,
|
|
24181
|
+
errorMessage,
|
|
24182
|
+
xIconShow,
|
|
24183
|
+
labelColor,
|
|
24184
|
+
showLabelOnTop
|
|
24185
|
+
} = _ref;
|
|
24183
24186
|
const [isFocused, setIsFocused] = useState(false);
|
|
24184
24187
|
const [showOptions, setShowOptions] = useState(false);
|
|
24185
24188
|
const [inputValue, setInputValue] = useState("");
|
|
@@ -24636,25 +24639,26 @@ const IconContainer$2 = styled.div`
|
|
|
24636
24639
|
cursor: pointer;
|
|
24637
24640
|
`;
|
|
24638
24641
|
|
|
24639
|
-
const QuickFilterDropdownMultiSelection =
|
|
24640
|
-
|
|
24641
|
-
|
|
24642
|
-
|
|
24643
|
-
|
|
24644
|
-
|
|
24645
|
-
|
|
24646
|
-
|
|
24647
|
-
|
|
24648
|
-
|
|
24649
|
-
|
|
24650
|
-
|
|
24651
|
-
|
|
24652
|
-
|
|
24653
|
-
|
|
24654
|
-
|
|
24655
|
-
|
|
24656
|
-
|
|
24657
|
-
|
|
24642
|
+
const QuickFilterDropdownMultiSelection = _ref => {
|
|
24643
|
+
let {
|
|
24644
|
+
label,
|
|
24645
|
+
labelEmptyValue,
|
|
24646
|
+
options,
|
|
24647
|
+
selectedValue,
|
|
24648
|
+
placeHolder,
|
|
24649
|
+
onChange,
|
|
24650
|
+
required,
|
|
24651
|
+
disabled,
|
|
24652
|
+
width,
|
|
24653
|
+
height,
|
|
24654
|
+
error,
|
|
24655
|
+
errorMessage,
|
|
24656
|
+
labelColor,
|
|
24657
|
+
xIconShow,
|
|
24658
|
+
checkBoxColor,
|
|
24659
|
+
showLabelOnTop,
|
|
24660
|
+
dropdownHeight
|
|
24661
|
+
} = _ref;
|
|
24658
24662
|
const [isFocused, setIsFocused] = useState(false);
|
|
24659
24663
|
const [showOptions, setShowOptions] = useState(false);
|
|
24660
24664
|
const [inputValue, setInputValue] = useState('');
|
|
@@ -36113,15 +36117,19 @@ const ToggleInput = styled.input`
|
|
|
36113
36117
|
const ToggleSlider = styled.span`
|
|
36114
36118
|
display: block;
|
|
36115
36119
|
position: relative;
|
|
36116
|
-
background: ${
|
|
36117
|
-
|
|
36118
|
-
|
|
36119
|
-
|
|
36120
|
+
background: ${_ref => {
|
|
36121
|
+
let {
|
|
36122
|
+
checked,
|
|
36123
|
+
disabled
|
|
36124
|
+
} = _ref;
|
|
36125
|
+
return checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0";
|
|
36126
|
+
}};
|
|
36120
36127
|
border-radius: 999px;
|
|
36121
36128
|
transition: background 0.2s;
|
|
36122
|
-
${
|
|
36123
|
-
|
|
36124
|
-
|
|
36129
|
+
${_ref2 => {
|
|
36130
|
+
let {
|
|
36131
|
+
size
|
|
36132
|
+
} = _ref2;
|
|
36125
36133
|
switch (size) {
|
|
36126
36134
|
case "s":
|
|
36127
36135
|
return css`width: 40px; height: 20px;`;
|
|
@@ -36137,14 +36145,18 @@ const ToggleSlider = styled.span`
|
|
|
36137
36145
|
left: 3px;
|
|
36138
36146
|
top: 50%;
|
|
36139
36147
|
transform: translateY(-50%);
|
|
36140
|
-
background: ${
|
|
36141
|
-
|
|
36142
|
-
|
|
36148
|
+
background: ${_ref3 => {
|
|
36149
|
+
let {
|
|
36150
|
+
disabled
|
|
36151
|
+
} = _ref3;
|
|
36152
|
+
return disabled ? "#D0D0D0" : "#fff";
|
|
36153
|
+
}};
|
|
36143
36154
|
border-radius: 50%;
|
|
36144
36155
|
transition: left 0.2s, width 0.2s, height 0.2s;
|
|
36145
|
-
${
|
|
36146
|
-
|
|
36147
|
-
|
|
36156
|
+
${_ref4 => {
|
|
36157
|
+
let {
|
|
36158
|
+
size
|
|
36159
|
+
} = _ref4;
|
|
36148
36160
|
switch (size) {
|
|
36149
36161
|
case "s":
|
|
36150
36162
|
return css`width: 14px; height: 14px;`;
|
|
@@ -36154,10 +36166,11 @@ const ToggleSlider = styled.span`
|
|
|
36154
36166
|
return css`width: 20px; height: 20px;`;
|
|
36155
36167
|
}
|
|
36156
36168
|
}}
|
|
36157
|
-
left: ${
|
|
36158
|
-
|
|
36159
|
-
|
|
36160
|
-
|
|
36169
|
+
left: ${_ref5 => {
|
|
36170
|
+
let {
|
|
36171
|
+
checked,
|
|
36172
|
+
size
|
|
36173
|
+
} = _ref5;
|
|
36161
36174
|
if (!checked) return "3px";
|
|
36162
36175
|
switch (size) {
|
|
36163
36176
|
case "s":
|
|
@@ -40841,7 +40854,21 @@ const SortIcon = ({
|
|
|
40841
40854
|
}));
|
|
40842
40855
|
};
|
|
40843
40856
|
|
|
40844
|
-
// TableHeader.jsx
|
|
40857
|
+
// TableHeader.jsx - Updated with debounce
|
|
40858
|
+
|
|
40859
|
+
// Inline debounce hook
|
|
40860
|
+
const useDebounce = (value, delay = 1500) => {
|
|
40861
|
+
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
40862
|
+
useEffect(() => {
|
|
40863
|
+
const handler = setTimeout(() => {
|
|
40864
|
+
setDebouncedValue(value);
|
|
40865
|
+
}, delay);
|
|
40866
|
+
return () => {
|
|
40867
|
+
clearTimeout(handler);
|
|
40868
|
+
};
|
|
40869
|
+
}, [value, delay]);
|
|
40870
|
+
return debouncedValue;
|
|
40871
|
+
};
|
|
40845
40872
|
const TableHeader = ({
|
|
40846
40873
|
columns,
|
|
40847
40874
|
onSort,
|
|
@@ -40852,7 +40879,8 @@ const TableHeader = ({
|
|
|
40852
40879
|
expandable = false,
|
|
40853
40880
|
onHeaderCheckboxClick = () => {},
|
|
40854
40881
|
headerCheckboxStates = {},
|
|
40855
|
-
resetFiltersKey = 0
|
|
40882
|
+
resetFiltersKey = 0,
|
|
40883
|
+
debounceDelay = 500 // NEW: Add debounce delay prop (default 500ms)
|
|
40856
40884
|
}) => {
|
|
40857
40885
|
const [focusedFilter, setFocusedFilter] = useState(null);
|
|
40858
40886
|
const [focusedSort, setFocusedSort] = useState(null);
|
|
@@ -40862,17 +40890,21 @@ const TableHeader = ({
|
|
|
40862
40890
|
top: 0,
|
|
40863
40891
|
left: 0
|
|
40864
40892
|
});
|
|
40893
|
+
|
|
40894
|
+
// Internal state that updates immediately (for UI responsiveness)
|
|
40865
40895
|
const [filterState, setFilterState] = useState({});
|
|
40866
40896
|
const [filterSelections, setFilterSelections] = useState({});
|
|
40867
40897
|
const [activeSortColumn, setActiveSortColumn] = useState(null);
|
|
40868
40898
|
const [activeSortValue, setActiveSortValue] = useState(null);
|
|
40899
|
+
|
|
40900
|
+
// Debounced values (these will be passed to parent after delay)
|
|
40901
|
+
const debouncedFilterState = useDebounce(filterState, debounceDelay);
|
|
40869
40902
|
const iconRefs = useRef({});
|
|
40870
40903
|
const popupRef = useRef(null);
|
|
40871
40904
|
|
|
40872
|
-
//
|
|
40905
|
+
// Reset internal state when resetFiltersKey changes
|
|
40873
40906
|
useEffect(() => {
|
|
40874
40907
|
if (resetFiltersKey > 0) {
|
|
40875
|
-
// Reset filter selections to default (all selected)
|
|
40876
40908
|
const resetSelections = {};
|
|
40877
40909
|
columns.forEach(column => {
|
|
40878
40910
|
if (column.filter && column.filterOptions) {
|
|
@@ -40888,15 +40920,9 @@ const TableHeader = ({
|
|
|
40888
40920
|
}
|
|
40889
40921
|
});
|
|
40890
40922
|
setFilterSelections(resetSelections);
|
|
40891
|
-
|
|
40892
|
-
// Reset filter state
|
|
40893
40923
|
setFilterState({});
|
|
40894
|
-
|
|
40895
|
-
// Reset sort state
|
|
40896
40924
|
setActiveSortColumn(null);
|
|
40897
40925
|
setActiveSortValue(null);
|
|
40898
|
-
|
|
40899
|
-
// Close any open popups
|
|
40900
40926
|
setVisibleFilterPopWrapper(null);
|
|
40901
40927
|
setVisibleSortPopWrapper(null);
|
|
40902
40928
|
}
|
|
@@ -40939,6 +40965,14 @@ const TableHeader = ({
|
|
|
40939
40965
|
return hasChanges ? newSelections : prevSelections;
|
|
40940
40966
|
});
|
|
40941
40967
|
}, [columns]);
|
|
40968
|
+
|
|
40969
|
+
// 🎯 KEY CHANGE: Use debounced value to trigger parent callback
|
|
40970
|
+
useEffect(() => {
|
|
40971
|
+
// Only call onFilter if there's actual filter data
|
|
40972
|
+
if (Object.keys(debouncedFilterState).length > 0) {
|
|
40973
|
+
onFilter(debouncedFilterState);
|
|
40974
|
+
}
|
|
40975
|
+
}, [debouncedFilterState, onFilter]);
|
|
40942
40976
|
const isFilterInDefaultState = columnKey => {
|
|
40943
40977
|
const filterData = filterState[columnKey];
|
|
40944
40978
|
if (!filterData) {
|
|
@@ -41031,11 +41065,6 @@ const TableHeader = ({
|
|
|
41031
41065
|
setVisibleSortPopWrapper(prevKey => prevKey === key ? null : key);
|
|
41032
41066
|
setVisibleFilterPopWrapper(null);
|
|
41033
41067
|
};
|
|
41034
|
-
useEffect(() => {
|
|
41035
|
-
if (Object.keys(filterState).length > 0) {
|
|
41036
|
-
onFilter(filterState);
|
|
41037
|
-
}
|
|
41038
|
-
}, [filterState]);
|
|
41039
41068
|
const handleFilter = key => {
|
|
41040
41069
|
const iconElement = iconRefs.current[`filter-${key}`];
|
|
41041
41070
|
if (iconElement) {
|
|
@@ -41065,6 +41094,9 @@ const TableHeader = ({
|
|
|
41065
41094
|
onSort(columnKey, null);
|
|
41066
41095
|
}
|
|
41067
41096
|
};
|
|
41097
|
+
|
|
41098
|
+
// 🎯 Filter changes update immediately in UI (filterState)
|
|
41099
|
+
// But parent callback is triggered only after debounce
|
|
41068
41100
|
const handleFilterSelectionChange = (columnKey, selectionData) => {
|
|
41069
41101
|
setFilterSelections(prev => {
|
|
41070
41102
|
const updated = {
|
|
@@ -41073,6 +41105,8 @@ const TableHeader = ({
|
|
|
41073
41105
|
};
|
|
41074
41106
|
return updated;
|
|
41075
41107
|
});
|
|
41108
|
+
|
|
41109
|
+
// Update internal state immediately for responsive UI
|
|
41076
41110
|
setFilterState(prev => ({
|
|
41077
41111
|
...prev,
|
|
41078
41112
|
[columnKey]: selectionData.filterData
|
|
@@ -41209,6 +41243,7 @@ const TableHeader = ({
|
|
|
41209
41243
|
placeholder: column.key === 'EventCode' ? 'Enter Event ID' : 'Search..',
|
|
41210
41244
|
fieldHeight: "40px",
|
|
41211
41245
|
onTyping: value => {
|
|
41246
|
+
// Update internal state immediately
|
|
41212
41247
|
setFilterState(prev => ({
|
|
41213
41248
|
...prev,
|
|
41214
41249
|
[key]: value
|
|
@@ -41243,6 +41278,7 @@ const TableHeader = ({
|
|
|
41243
41278
|
fields: currentFilterState.fields
|
|
41244
41279
|
} : null,
|
|
41245
41280
|
onApply: data => {
|
|
41281
|
+
// Update internal state immediately
|
|
41246
41282
|
setFilterState(prev => ({
|
|
41247
41283
|
...prev,
|
|
41248
41284
|
[key]: data
|