@axzydev/axzy_ui_system 1.2.15 → 1.2.16

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "packageManager": "pnpm@10.34.0",
5
5
  "private": false,
6
6
  "license": "MIT",
7
- "version": "1.2.15",
7
+ "version": "1.2.16",
8
8
  "type": "module",
9
9
  "sideEffects": [
10
10
  "*.css"
@@ -88,16 +88,24 @@ export default function ITDataTable<T extends Record<string, unknown>>({
88
88
 
89
89
  const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
90
90
  const hasFetchedRef = useRef(false);
91
+ const fetchDataRef = useRef(fetchData);
92
+ fetchDataRef.current = fetchData;
93
+ const externalFiltersRef = useRef(externalFilters);
94
+ externalFiltersRef.current = externalFilters;
95
+
96
+ // Snapshot JSON para re-fetch solo cuando los valores cambian (no por nueva
97
+ // identidad del objeto que el padre pase en cada render).
98
+ const externalKey = JSON.stringify(externalFilters);
91
99
 
92
100
  const computedTotalPages = Math.ceil(totalItems / itemsPerPage) || 1;
93
101
 
94
102
  const performFetch = useCallback(async () => {
95
103
  setIsLoading(true);
96
104
  try {
97
- const response = await fetchData({
105
+ const response = await fetchDataRef.current({
98
106
  page: currentPage,
99
107
  limit: itemsPerPage,
100
- filters: { ...filters, ...externalFilters },
108
+ filters: { ...filters, ...externalFiltersRef.current },
101
109
  sort: sortConfig || undefined,
102
110
  });
103
111
  setData(response.data || []);
@@ -111,7 +119,10 @@ export default function ITDataTable<T extends Record<string, unknown>>({
111
119
  } finally {
112
120
  setIsLoading(false);
113
121
  }
114
- }, [currentPage, itemsPerPage, filters, sortConfig, fetchData, externalFilters]);
122
+ }, [currentPage, itemsPerPage, filters, sortConfig]);
123
+
124
+ const performFetchRef = useRef(performFetch);
125
+ performFetchRef.current = performFetch;
115
126
 
116
127
  useEffect(() => {
117
128
  if (!fetchOnMount && !hasFetchedRef.current) return;
@@ -119,13 +130,13 @@ export default function ITDataTable<T extends Record<string, unknown>>({
119
130
  if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
120
131
 
121
132
  debounceTimerRef.current = setTimeout(() => {
122
- performFetch();
133
+ performFetchRef.current();
123
134
  }, debounceMs);
124
135
 
125
136
  return () => {
126
137
  if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
127
138
  };
128
- }, [currentPage, itemsPerPage, sortConfig, filters, externalFilters, reloadTrigger, fetchOnMount, performFetch, debounceMs]);
139
+ }, [currentPage, itemsPerPage, sortConfig, filters, externalKey, reloadTrigger, fetchOnMount, debounceMs]);
129
140
 
130
141
  const renderFilterInput = (col: Column<T>) => {
131
142
  if (!col.filter) return null;