sag_components 2.0.0-beta273 → 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 +104 -68
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +104 -68
- 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.js
CHANGED
|
@@ -10591,23 +10591,24 @@ const QuarterPopupPicker = ({
|
|
|
10591
10591
|
};
|
|
10592
10592
|
|
|
10593
10593
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
10594
|
-
const QuarterPicker =
|
|
10595
|
-
|
|
10596
|
-
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
|
|
10600
|
-
|
|
10601
|
-
|
|
10602
|
-
|
|
10603
|
-
|
|
10604
|
-
|
|
10605
|
-
|
|
10606
|
-
|
|
10607
|
-
|
|
10608
|
-
|
|
10609
|
-
|
|
10610
|
-
|
|
10594
|
+
const QuarterPicker = _ref => {
|
|
10595
|
+
let {
|
|
10596
|
+
availableQuarters,
|
|
10597
|
+
// ["Q1-2024"]
|
|
10598
|
+
label,
|
|
10599
|
+
onChange,
|
|
10600
|
+
borderRadius,
|
|
10601
|
+
required,
|
|
10602
|
+
width,
|
|
10603
|
+
height,
|
|
10604
|
+
placeholder,
|
|
10605
|
+
disabled,
|
|
10606
|
+
borderColor,
|
|
10607
|
+
borderColorFocus,
|
|
10608
|
+
textColor,
|
|
10609
|
+
selectedValue,
|
|
10610
|
+
startYear
|
|
10611
|
+
} = _ref;
|
|
10611
10612
|
const [isFocused, setIsFocused] = React$1.useState(false);
|
|
10612
10613
|
const [isOpen, setIsOpen] = React$1.useState(false);
|
|
10613
10614
|
const [value, setValue] = React$1.useState('');
|
|
@@ -11049,22 +11050,23 @@ const MonthPopupPicker = ({
|
|
|
11049
11050
|
};
|
|
11050
11051
|
|
|
11051
11052
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
11052
|
-
const MonthPicker =
|
|
11053
|
-
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
|
|
11057
|
-
|
|
11058
|
-
|
|
11059
|
-
|
|
11060
|
-
|
|
11061
|
-
|
|
11062
|
-
|
|
11063
|
-
|
|
11064
|
-
|
|
11065
|
-
|
|
11066
|
-
|
|
11067
|
-
|
|
11053
|
+
const MonthPicker = _ref => {
|
|
11054
|
+
let {
|
|
11055
|
+
availableMonths,
|
|
11056
|
+
label,
|
|
11057
|
+
onChange,
|
|
11058
|
+
borderRadius,
|
|
11059
|
+
required,
|
|
11060
|
+
width,
|
|
11061
|
+
height,
|
|
11062
|
+
placeholder,
|
|
11063
|
+
disabled,
|
|
11064
|
+
borderColor,
|
|
11065
|
+
borderColorFocus,
|
|
11066
|
+
textColor,
|
|
11067
|
+
selectedValue,
|
|
11068
|
+
startYear
|
|
11069
|
+
} = _ref;
|
|
11068
11070
|
const [isFocused, setIsFocused] = React$1.useState(false);
|
|
11069
11071
|
const [isOpen, setIsOpen] = React$1.useState(false);
|
|
11070
11072
|
const [value, setValue] = React$1.useState('');
|
|
@@ -36125,15 +36127,19 @@ const ToggleInput = styled__default["default"].input`
|
|
|
36125
36127
|
const ToggleSlider = styled__default["default"].span`
|
|
36126
36128
|
display: block;
|
|
36127
36129
|
position: relative;
|
|
36128
|
-
background: ${
|
|
36129
|
-
|
|
36130
|
-
|
|
36131
|
-
|
|
36130
|
+
background: ${_ref => {
|
|
36131
|
+
let {
|
|
36132
|
+
checked,
|
|
36133
|
+
disabled
|
|
36134
|
+
} = _ref;
|
|
36135
|
+
return checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0";
|
|
36136
|
+
}};
|
|
36132
36137
|
border-radius: 999px;
|
|
36133
36138
|
transition: background 0.2s;
|
|
36134
|
-
${
|
|
36135
|
-
|
|
36136
|
-
|
|
36139
|
+
${_ref2 => {
|
|
36140
|
+
let {
|
|
36141
|
+
size
|
|
36142
|
+
} = _ref2;
|
|
36137
36143
|
switch (size) {
|
|
36138
36144
|
case "s":
|
|
36139
36145
|
return styled.css`width: 40px; height: 20px;`;
|
|
@@ -36149,14 +36155,18 @@ const ToggleSlider = styled__default["default"].span`
|
|
|
36149
36155
|
left: 3px;
|
|
36150
36156
|
top: 50%;
|
|
36151
36157
|
transform: translateY(-50%);
|
|
36152
|
-
background: ${
|
|
36153
|
-
|
|
36154
|
-
|
|
36158
|
+
background: ${_ref3 => {
|
|
36159
|
+
let {
|
|
36160
|
+
disabled
|
|
36161
|
+
} = _ref3;
|
|
36162
|
+
return disabled ? "#D0D0D0" : "#fff";
|
|
36163
|
+
}};
|
|
36155
36164
|
border-radius: 50%;
|
|
36156
36165
|
transition: left 0.2s, width 0.2s, height 0.2s;
|
|
36157
|
-
${
|
|
36158
|
-
|
|
36159
|
-
|
|
36166
|
+
${_ref4 => {
|
|
36167
|
+
let {
|
|
36168
|
+
size
|
|
36169
|
+
} = _ref4;
|
|
36160
36170
|
switch (size) {
|
|
36161
36171
|
case "s":
|
|
36162
36172
|
return styled.css`width: 14px; height: 14px;`;
|
|
@@ -36166,10 +36176,11 @@ const ToggleSlider = styled__default["default"].span`
|
|
|
36166
36176
|
return styled.css`width: 20px; height: 20px;`;
|
|
36167
36177
|
}
|
|
36168
36178
|
}}
|
|
36169
|
-
left: ${
|
|
36170
|
-
|
|
36171
|
-
|
|
36172
|
-
|
|
36179
|
+
left: ${_ref5 => {
|
|
36180
|
+
let {
|
|
36181
|
+
checked,
|
|
36182
|
+
size
|
|
36183
|
+
} = _ref5;
|
|
36173
36184
|
if (!checked) return "3px";
|
|
36174
36185
|
switch (size) {
|
|
36175
36186
|
case "s":
|
|
@@ -36183,9 +36194,9 @@ const ToggleSlider = styled__default["default"].span`
|
|
|
36183
36194
|
}
|
|
36184
36195
|
`;
|
|
36185
36196
|
|
|
36186
|
-
/**
|
|
36187
|
-
* ToggleSwitch component for on/off states.
|
|
36188
|
-
* Supports small/large sizes and disabled state.
|
|
36197
|
+
/**
|
|
36198
|
+
* ToggleSwitch component for on/off states.
|
|
36199
|
+
* Supports small/large sizes and disabled state.
|
|
36189
36200
|
*/
|
|
36190
36201
|
function ToggleSwitch(_ref) {
|
|
36191
36202
|
let {
|
|
@@ -40853,7 +40864,21 @@ const SortIcon = ({
|
|
|
40853
40864
|
}));
|
|
40854
40865
|
};
|
|
40855
40866
|
|
|
40856
|
-
// TableHeader.jsx
|
|
40867
|
+
// TableHeader.jsx - Updated with debounce
|
|
40868
|
+
|
|
40869
|
+
// Inline debounce hook
|
|
40870
|
+
const useDebounce = (value, delay = 1500) => {
|
|
40871
|
+
const [debouncedValue, setDebouncedValue] = React$1.useState(value);
|
|
40872
|
+
React$1.useEffect(() => {
|
|
40873
|
+
const handler = setTimeout(() => {
|
|
40874
|
+
setDebouncedValue(value);
|
|
40875
|
+
}, delay);
|
|
40876
|
+
return () => {
|
|
40877
|
+
clearTimeout(handler);
|
|
40878
|
+
};
|
|
40879
|
+
}, [value, delay]);
|
|
40880
|
+
return debouncedValue;
|
|
40881
|
+
};
|
|
40857
40882
|
const TableHeader = ({
|
|
40858
40883
|
columns,
|
|
40859
40884
|
onSort,
|
|
@@ -40864,7 +40889,8 @@ const TableHeader = ({
|
|
|
40864
40889
|
expandable = false,
|
|
40865
40890
|
onHeaderCheckboxClick = () => {},
|
|
40866
40891
|
headerCheckboxStates = {},
|
|
40867
|
-
resetFiltersKey = 0
|
|
40892
|
+
resetFiltersKey = 0,
|
|
40893
|
+
debounceDelay = 500 // NEW: Add debounce delay prop (default 500ms)
|
|
40868
40894
|
}) => {
|
|
40869
40895
|
const [focusedFilter, setFocusedFilter] = React$1.useState(null);
|
|
40870
40896
|
const [focusedSort, setFocusedSort] = React$1.useState(null);
|
|
@@ -40874,17 +40900,21 @@ const TableHeader = ({
|
|
|
40874
40900
|
top: 0,
|
|
40875
40901
|
left: 0
|
|
40876
40902
|
});
|
|
40903
|
+
|
|
40904
|
+
// Internal state that updates immediately (for UI responsiveness)
|
|
40877
40905
|
const [filterState, setFilterState] = React$1.useState({});
|
|
40878
40906
|
const [filterSelections, setFilterSelections] = React$1.useState({});
|
|
40879
40907
|
const [activeSortColumn, setActiveSortColumn] = React$1.useState(null);
|
|
40880
40908
|
const [activeSortValue, setActiveSortValue] = React$1.useState(null);
|
|
40909
|
+
|
|
40910
|
+
// Debounced values (these will be passed to parent after delay)
|
|
40911
|
+
const debouncedFilterState = useDebounce(filterState, debounceDelay);
|
|
40881
40912
|
const iconRefs = React$1.useRef({});
|
|
40882
40913
|
const popupRef = React$1.useRef(null);
|
|
40883
40914
|
|
|
40884
|
-
//
|
|
40915
|
+
// Reset internal state when resetFiltersKey changes
|
|
40885
40916
|
React$1.useEffect(() => {
|
|
40886
40917
|
if (resetFiltersKey > 0) {
|
|
40887
|
-
// Reset filter selections to default (all selected)
|
|
40888
40918
|
const resetSelections = {};
|
|
40889
40919
|
columns.forEach(column => {
|
|
40890
40920
|
if (column.filter && column.filterOptions) {
|
|
@@ -40900,15 +40930,9 @@ const TableHeader = ({
|
|
|
40900
40930
|
}
|
|
40901
40931
|
});
|
|
40902
40932
|
setFilterSelections(resetSelections);
|
|
40903
|
-
|
|
40904
|
-
// Reset filter state
|
|
40905
40933
|
setFilterState({});
|
|
40906
|
-
|
|
40907
|
-
// Reset sort state
|
|
40908
40934
|
setActiveSortColumn(null);
|
|
40909
40935
|
setActiveSortValue(null);
|
|
40910
|
-
|
|
40911
|
-
// Close any open popups
|
|
40912
40936
|
setVisibleFilterPopWrapper(null);
|
|
40913
40937
|
setVisibleSortPopWrapper(null);
|
|
40914
40938
|
}
|
|
@@ -40951,6 +40975,14 @@ const TableHeader = ({
|
|
|
40951
40975
|
return hasChanges ? newSelections : prevSelections;
|
|
40952
40976
|
});
|
|
40953
40977
|
}, [columns]);
|
|
40978
|
+
|
|
40979
|
+
// 🎯 KEY CHANGE: Use debounced value to trigger parent callback
|
|
40980
|
+
React$1.useEffect(() => {
|
|
40981
|
+
// Only call onFilter if there's actual filter data
|
|
40982
|
+
if (Object.keys(debouncedFilterState).length > 0) {
|
|
40983
|
+
onFilter(debouncedFilterState);
|
|
40984
|
+
}
|
|
40985
|
+
}, [debouncedFilterState, onFilter]);
|
|
40954
40986
|
const isFilterInDefaultState = columnKey => {
|
|
40955
40987
|
const filterData = filterState[columnKey];
|
|
40956
40988
|
if (!filterData) {
|
|
@@ -41043,11 +41075,6 @@ const TableHeader = ({
|
|
|
41043
41075
|
setVisibleSortPopWrapper(prevKey => prevKey === key ? null : key);
|
|
41044
41076
|
setVisibleFilterPopWrapper(null);
|
|
41045
41077
|
};
|
|
41046
|
-
React$1.useEffect(() => {
|
|
41047
|
-
if (Object.keys(filterState).length > 0) {
|
|
41048
|
-
onFilter(filterState);
|
|
41049
|
-
}
|
|
41050
|
-
}, [filterState]);
|
|
41051
41078
|
const handleFilter = key => {
|
|
41052
41079
|
const iconElement = iconRefs.current[`filter-${key}`];
|
|
41053
41080
|
if (iconElement) {
|
|
@@ -41077,6 +41104,9 @@ const TableHeader = ({
|
|
|
41077
41104
|
onSort(columnKey, null);
|
|
41078
41105
|
}
|
|
41079
41106
|
};
|
|
41107
|
+
|
|
41108
|
+
// 🎯 Filter changes update immediately in UI (filterState)
|
|
41109
|
+
// But parent callback is triggered only after debounce
|
|
41080
41110
|
const handleFilterSelectionChange = (columnKey, selectionData) => {
|
|
41081
41111
|
setFilterSelections(prev => {
|
|
41082
41112
|
const updated = {
|
|
@@ -41085,6 +41115,8 @@ const TableHeader = ({
|
|
|
41085
41115
|
};
|
|
41086
41116
|
return updated;
|
|
41087
41117
|
});
|
|
41118
|
+
|
|
41119
|
+
// Update internal state immediately for responsive UI
|
|
41088
41120
|
setFilterState(prev => ({
|
|
41089
41121
|
...prev,
|
|
41090
41122
|
[columnKey]: selectionData.filterData
|
|
@@ -41221,6 +41253,7 @@ const TableHeader = ({
|
|
|
41221
41253
|
placeholder: column.key === 'EventCode' ? 'Enter Event ID' : 'Search..',
|
|
41222
41254
|
fieldHeight: "40px",
|
|
41223
41255
|
onTyping: value => {
|
|
41256
|
+
// Update internal state immediately
|
|
41224
41257
|
setFilterState(prev => ({
|
|
41225
41258
|
...prev,
|
|
41226
41259
|
[key]: value
|
|
@@ -41255,6 +41288,7 @@ const TableHeader = ({
|
|
|
41255
41288
|
fields: currentFilterState.fields
|
|
41256
41289
|
} : null,
|
|
41257
41290
|
onApply: data => {
|
|
41291
|
+
// Update internal state immediately
|
|
41258
41292
|
setFilterState(prev => ({
|
|
41259
41293
|
...prev,
|
|
41260
41294
|
[key]: data
|
|
@@ -47074,6 +47108,8 @@ const Table = props => {
|
|
|
47074
47108
|
return /*#__PURE__*/React__default["default"].createElement(NoEvents, null);
|
|
47075
47109
|
case "Upc":
|
|
47076
47110
|
return /*#__PURE__*/React__default["default"].createElement(NoUpcIcon, null);
|
|
47111
|
+
case "Ntt":
|
|
47112
|
+
return /*#__PURE__*/React__default["default"].createElement(NothingToTrackIcon, null);
|
|
47077
47113
|
default:
|
|
47078
47114
|
return null;
|
|
47079
47115
|
}
|