|
1 |
| -import React, { useState, useEffect } from "react"; |
| 1 | +import React, { useState, useEffect, useCallback } from "react"; |
2 | 2 |
|
3 | 3 | import type {
|
4 | 4 | QueryObserverResult,
|
@@ -520,40 +520,56 @@ export function useTable<
|
520 | 520 | dataProviderName,
|
521 | 521 | });
|
522 | 522 |
|
523 |
| - const setFiltersAsMerge = (newFilters: CrudFilter[]) => { |
524 |
| - setFilters((prevFilters) => |
525 |
| - unionFilters(preferredPermanentFilters, newFilters, prevFilters), |
526 |
| - ); |
527 |
| - }; |
| 523 | + const setFiltersAsMerge = useCallback( |
| 524 | + (newFilters: CrudFilter[]) => { |
| 525 | + setFilters((prevFilters) => |
| 526 | + unionFilters(preferredPermanentFilters, newFilters, prevFilters), |
| 527 | + ); |
| 528 | + }, |
| 529 | + [preferredPermanentFilters], |
| 530 | + ); |
528 | 531 |
|
529 |
| - const setFiltersAsReplace = (newFilters: CrudFilter[]) => { |
530 |
| - setFilters(unionFilters(preferredPermanentFilters, newFilters)); |
531 |
| - }; |
| 532 | + const setFiltersAsReplace = useCallback( |
| 533 | + (newFilters: CrudFilter[]) => { |
| 534 | + setFilters(unionFilters(preferredPermanentFilters, newFilters)); |
| 535 | + }, |
| 536 | + [preferredPermanentFilters], |
| 537 | + ); |
532 | 538 |
|
533 |
| - const setFiltersWithSetter = ( |
534 |
| - setter: (prevFilters: CrudFilter[]) => CrudFilter[], |
535 |
| - ) => { |
536 |
| - setFilters((prev) => unionFilters(preferredPermanentFilters, setter(prev))); |
537 |
| - }; |
| 539 | + const setFiltersWithSetter = useCallback( |
| 540 | + (setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => { |
| 541 | + setFilters((prev) => |
| 542 | + unionFilters(preferredPermanentFilters, setter(prev)), |
| 543 | + ); |
| 544 | + }, |
| 545 | + [preferredPermanentFilters], |
| 546 | + ); |
538 | 547 |
|
539 |
| - const setFiltersFn: useTableReturnType<TQueryFnData>["setFilters"] = ( |
540 |
| - setterOrFilters, |
541 |
| - behavior: SetFilterBehavior = prefferedFilterBehavior, |
542 |
| - ) => { |
543 |
| - if (typeof setterOrFilters === "function") { |
544 |
| - setFiltersWithSetter(setterOrFilters); |
545 |
| - } else { |
546 |
| - if (behavior === "replace") { |
547 |
| - setFiltersAsReplace(setterOrFilters); |
548 |
| - } else { |
549 |
| - setFiltersAsMerge(setterOrFilters); |
550 |
| - } |
551 |
| - } |
552 |
| - }; |
| 548 | + const setFiltersFn: useTableReturnType<TQueryFnData>["setFilters"] = |
| 549 | + useCallback( |
| 550 | + ( |
| 551 | + setterOrFilters, |
| 552 | + behavior: SetFilterBehavior = prefferedFilterBehavior, |
| 553 | + ) => { |
| 554 | + if (typeof setterOrFilters === "function") { |
| 555 | + setFiltersWithSetter(setterOrFilters); |
| 556 | + } else { |
| 557 | + if (behavior === "replace") { |
| 558 | + setFiltersAsReplace(setterOrFilters); |
| 559 | + } else { |
| 560 | + setFiltersAsMerge(setterOrFilters); |
| 561 | + } |
| 562 | + } |
| 563 | + }, |
| 564 | + [setFiltersWithSetter, setFiltersAsReplace, setFiltersAsMerge], |
| 565 | + ); |
553 | 566 |
|
554 |
| - const setSortWithUnion = (newSorter: CrudSort[]) => { |
555 |
| - setSorters(() => unionSorters(preferredPermanentSorters, newSorter)); |
556 |
| - }; |
| 567 | + const setSortWithUnion = useCallback( |
| 568 | + (newSorter: CrudSort[]) => { |
| 569 | + setSorters(() => unionSorters(preferredPermanentSorters, newSorter)); |
| 570 | + }, |
| 571 | + [preferredPermanentSorters], |
| 572 | + ); |
557 | 573 |
|
558 | 574 | const { elapsedTime } = useLoadingOvertime({
|
559 | 575 | isLoading: queryResult.isFetching,
|
|
0 commit comments