@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/dist/index.cjs +12 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/organisms/data-table/dataTable.tsx +16 -5
package/package.json
CHANGED
|
@@ -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
|
|
105
|
+
const response = await fetchDataRef.current({
|
|
98
106
|
page: currentPage,
|
|
99
107
|
limit: itemsPerPage,
|
|
100
|
-
filters: { ...filters, ...
|
|
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
|
|
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
|
-
|
|
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,
|
|
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;
|