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.js CHANGED
@@ -10591,23 +10591,24 @@ const QuarterPopupPicker = ({
10591
10591
  };
10592
10592
 
10593
10593
  /* eslint-disable import/no-extraneous-dependencies */
10594
- const QuarterPicker = ({
10595
- availableQuarters,
10596
- // ["Q1-2024"]
10597
- label,
10598
- onChange,
10599
- borderRadius,
10600
- required,
10601
- width,
10602
- height,
10603
- placeholder,
10604
- disabled,
10605
- borderColor,
10606
- borderColorFocus,
10607
- textColor,
10608
- selectedValue,
10609
- startYear
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
- availableMonths,
11054
- label,
11055
- onChange,
11056
- borderRadius,
11057
- required,
11058
- width,
11059
- height,
11060
- placeholder,
11061
- disabled,
11062
- borderColor,
11063
- borderColorFocus,
11064
- textColor,
11065
- selectedValue,
11066
- startYear
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('');
@@ -24175,21 +24177,22 @@ const DeleteIcon = styled__default["default"].div`
24175
24177
  position: absolute;
24176
24178
  `;
24177
24179
 
24178
- const QuickFilterDropdownSingle = ({
24179
- label,
24180
- hoverColor,
24181
- options,
24182
- selectedValue,
24183
- placeHolder,
24184
- onChange,
24185
- disabled,
24186
- width,
24187
- error,
24188
- errorMessage,
24189
- xIconShow,
24190
- labelColor,
24191
- showLabelOnTop
24192
- }) => {
24180
+ const QuickFilterDropdownSingle = _ref => {
24181
+ let {
24182
+ label,
24183
+ hoverColor,
24184
+ options,
24185
+ selectedValue,
24186
+ placeHolder,
24187
+ onChange,
24188
+ disabled,
24189
+ width,
24190
+ error,
24191
+ errorMessage,
24192
+ xIconShow,
24193
+ labelColor,
24194
+ showLabelOnTop
24195
+ } = _ref;
24193
24196
  const [isFocused, setIsFocused] = React$1.useState(false);
24194
24197
  const [showOptions, setShowOptions] = React$1.useState(false);
24195
24198
  const [inputValue, setInputValue] = React$1.useState("");
@@ -24646,25 +24649,26 @@ const IconContainer$2 = styled__default["default"].div`
24646
24649
  cursor: pointer;
24647
24650
  `;
24648
24651
 
24649
- const QuickFilterDropdownMultiSelection = ({
24650
- label,
24651
- labelEmptyValue,
24652
- options,
24653
- selectedValue,
24654
- placeHolder,
24655
- onChange,
24656
- required,
24657
- disabled,
24658
- width,
24659
- height,
24660
- error,
24661
- errorMessage,
24662
- labelColor,
24663
- xIconShow,
24664
- checkBoxColor,
24665
- showLabelOnTop,
24666
- dropdownHeight
24667
- }) => {
24652
+ const QuickFilterDropdownMultiSelection = _ref => {
24653
+ let {
24654
+ label,
24655
+ labelEmptyValue,
24656
+ options,
24657
+ selectedValue,
24658
+ placeHolder,
24659
+ onChange,
24660
+ required,
24661
+ disabled,
24662
+ width,
24663
+ height,
24664
+ error,
24665
+ errorMessage,
24666
+ labelColor,
24667
+ xIconShow,
24668
+ checkBoxColor,
24669
+ showLabelOnTop,
24670
+ dropdownHeight
24671
+ } = _ref;
24668
24672
  const [isFocused, setIsFocused] = React$1.useState(false);
24669
24673
  const [showOptions, setShowOptions] = React$1.useState(false);
24670
24674
  const [inputValue, setInputValue] = React$1.useState('');
@@ -36123,15 +36127,19 @@ const ToggleInput = styled__default["default"].input`
36123
36127
  const ToggleSlider = styled__default["default"].span`
36124
36128
  display: block;
36125
36129
  position: relative;
36126
- background: ${({
36127
- checked,
36128
- disabled
36129
- }) => checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0"};
36130
+ background: ${_ref => {
36131
+ let {
36132
+ checked,
36133
+ disabled
36134
+ } = _ref;
36135
+ return checked ? "#006d6a" : disabled ? "#B1B1B1" : "#D0D0D0";
36136
+ }};
36130
36137
  border-radius: 999px;
36131
36138
  transition: background 0.2s;
36132
- ${({
36133
- size
36134
- }) => {
36139
+ ${_ref2 => {
36140
+ let {
36141
+ size
36142
+ } = _ref2;
36135
36143
  switch (size) {
36136
36144
  case "s":
36137
36145
  return styled.css`width: 40px; height: 20px;`;
@@ -36147,14 +36155,18 @@ const ToggleSlider = styled__default["default"].span`
36147
36155
  left: 3px;
36148
36156
  top: 50%;
36149
36157
  transform: translateY(-50%);
36150
- background: ${({
36151
- disabled
36152
- }) => disabled ? "#D0D0D0" : "#fff"};
36158
+ background: ${_ref3 => {
36159
+ let {
36160
+ disabled
36161
+ } = _ref3;
36162
+ return disabled ? "#D0D0D0" : "#fff";
36163
+ }};
36153
36164
  border-radius: 50%;
36154
36165
  transition: left 0.2s, width 0.2s, height 0.2s;
36155
- ${({
36156
- size
36157
- }) => {
36166
+ ${_ref4 => {
36167
+ let {
36168
+ size
36169
+ } = _ref4;
36158
36170
  switch (size) {
36159
36171
  case "s":
36160
36172
  return styled.css`width: 14px; height: 14px;`;
@@ -36164,10 +36176,11 @@ const ToggleSlider = styled__default["default"].span`
36164
36176
  return styled.css`width: 20px; height: 20px;`;
36165
36177
  }
36166
36178
  }}
36167
- left: ${({
36168
- checked,
36169
- size
36170
- }) => {
36179
+ left: ${_ref5 => {
36180
+ let {
36181
+ checked,
36182
+ size
36183
+ } = _ref5;
36171
36184
  if (!checked) return "3px";
36172
36185
  switch (size) {
36173
36186
  case "s":
@@ -40851,7 +40864,21 @@ const SortIcon = ({
40851
40864
  }));
40852
40865
  };
40853
40866
 
40854
- // 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
+ };
40855
40882
  const TableHeader = ({
40856
40883
  columns,
40857
40884
  onSort,
@@ -40862,7 +40889,8 @@ const TableHeader = ({
40862
40889
  expandable = false,
40863
40890
  onHeaderCheckboxClick = () => {},
40864
40891
  headerCheckboxStates = {},
40865
- resetFiltersKey = 0 // NEW: Add this prop
40892
+ resetFiltersKey = 0,
40893
+ debounceDelay = 500 // NEW: Add debounce delay prop (default 500ms)
40866
40894
  }) => {
40867
40895
  const [focusedFilter, setFocusedFilter] = React$1.useState(null);
40868
40896
  const [focusedSort, setFocusedSort] = React$1.useState(null);
@@ -40872,17 +40900,21 @@ const TableHeader = ({
40872
40900
  top: 0,
40873
40901
  left: 0
40874
40902
  });
40903
+
40904
+ // Internal state that updates immediately (for UI responsiveness)
40875
40905
  const [filterState, setFilterState] = React$1.useState({});
40876
40906
  const [filterSelections, setFilterSelections] = React$1.useState({});
40877
40907
  const [activeSortColumn, setActiveSortColumn] = React$1.useState(null);
40878
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);
40879
40912
  const iconRefs = React$1.useRef({});
40880
40913
  const popupRef = React$1.useRef(null);
40881
40914
 
40882
- // NEW: Reset internal state when resetFiltersKey changes
40915
+ // Reset internal state when resetFiltersKey changes
40883
40916
  React$1.useEffect(() => {
40884
40917
  if (resetFiltersKey > 0) {
40885
- // Reset filter selections to default (all selected)
40886
40918
  const resetSelections = {};
40887
40919
  columns.forEach(column => {
40888
40920
  if (column.filter && column.filterOptions) {
@@ -40898,15 +40930,9 @@ const TableHeader = ({
40898
40930
  }
40899
40931
  });
40900
40932
  setFilterSelections(resetSelections);
40901
-
40902
- // Reset filter state
40903
40933
  setFilterState({});
40904
-
40905
- // Reset sort state
40906
40934
  setActiveSortColumn(null);
40907
40935
  setActiveSortValue(null);
40908
-
40909
- // Close any open popups
40910
40936
  setVisibleFilterPopWrapper(null);
40911
40937
  setVisibleSortPopWrapper(null);
40912
40938
  }
@@ -40949,6 +40975,14 @@ const TableHeader = ({
40949
40975
  return hasChanges ? newSelections : prevSelections;
40950
40976
  });
40951
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]);
40952
40986
  const isFilterInDefaultState = columnKey => {
40953
40987
  const filterData = filterState[columnKey];
40954
40988
  if (!filterData) {
@@ -41041,11 +41075,6 @@ const TableHeader = ({
41041
41075
  setVisibleSortPopWrapper(prevKey => prevKey === key ? null : key);
41042
41076
  setVisibleFilterPopWrapper(null);
41043
41077
  };
41044
- React$1.useEffect(() => {
41045
- if (Object.keys(filterState).length > 0) {
41046
- onFilter(filterState);
41047
- }
41048
- }, [filterState]);
41049
41078
  const handleFilter = key => {
41050
41079
  const iconElement = iconRefs.current[`filter-${key}`];
41051
41080
  if (iconElement) {
@@ -41075,6 +41104,9 @@ const TableHeader = ({
41075
41104
  onSort(columnKey, null);
41076
41105
  }
41077
41106
  };
41107
+
41108
+ // 🎯 Filter changes update immediately in UI (filterState)
41109
+ // But parent callback is triggered only after debounce
41078
41110
  const handleFilterSelectionChange = (columnKey, selectionData) => {
41079
41111
  setFilterSelections(prev => {
41080
41112
  const updated = {
@@ -41083,6 +41115,8 @@ const TableHeader = ({
41083
41115
  };
41084
41116
  return updated;
41085
41117
  });
41118
+
41119
+ // Update internal state immediately for responsive UI
41086
41120
  setFilterState(prev => ({
41087
41121
  ...prev,
41088
41122
  [columnKey]: selectionData.filterData
@@ -41219,6 +41253,7 @@ const TableHeader = ({
41219
41253
  placeholder: column.key === 'EventCode' ? 'Enter Event ID' : 'Search..',
41220
41254
  fieldHeight: "40px",
41221
41255
  onTyping: value => {
41256
+ // Update internal state immediately
41222
41257
  setFilterState(prev => ({
41223
41258
  ...prev,
41224
41259
  [key]: value
@@ -41253,6 +41288,7 @@ const TableHeader = ({
41253
41288
  fields: currentFilterState.fields
41254
41289
  } : null,
41255
41290
  onApply: data => {
41291
+ // Update internal state immediately
41256
41292
  setFilterState(prev => ({
41257
41293
  ...prev,
41258
41294
  [key]: data