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 CHANGED
@@ -10581,23 +10581,24 @@ const QuarterPopupPicker = ({
10581
10581
  };
10582
10582
 
10583
10583
  /* eslint-disable import/no-extraneous-dependencies */
10584
- const QuarterPicker = ({
10585
- availableQuarters,
10586
- // ["Q1-2024"]
10587
- label,
10588
- onChange,
10589
- borderRadius,
10590
- required,
10591
- width,
10592
- height,
10593
- placeholder,
10594
- disabled,
10595
- borderColor,
10596
- borderColorFocus,
10597
- textColor,
10598
- selectedValue,
10599
- startYear
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
- availableMonths,
11044
- label,
11045
- onChange,
11046
- borderRadius,
11047
- required,
11048
- width,
11049
- height,
11050
- placeholder,
11051
- disabled,
11052
- borderColor,
11053
- borderColorFocus,
11054
- textColor,
11055
- selectedValue,
11056
- startYear
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
- label,
24170
- hoverColor,
24171
- options,
24172
- selectedValue,
24173
- placeHolder,
24174
- onChange,
24175
- disabled,
24176
- width,
24177
- error,
24178
- errorMessage,
24179
- xIconShow,
24180
- labelColor,
24181
- showLabelOnTop
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
- label,
24641
- labelEmptyValue,
24642
- options,
24643
- selectedValue,
24644
- placeHolder,
24645
- onChange,
24646
- required,
24647
- disabled,
24648
- width,
24649
- height,
24650
- error,
24651
- errorMessage,
24652
- labelColor,
24653
- xIconShow,
24654
- checkBoxColor,
24655
- showLabelOnTop,
24656
- dropdownHeight
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
- checked,
36118
- disabled
36119
- }) => checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0"};
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
- size
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
- disabled
36142
- }) => disabled ? "#D0D0D0" : "#fff"};
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
- size
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
- checked,
36159
- size
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 // NEW: Add this prop
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
- // NEW: Reset internal state when resetFiltersKey changes
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