-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathuse-active-table-query.ts
More file actions
79 lines (70 loc) · 1.9 KB
/
use-active-table-query.ts
File metadata and controls
79 lines (70 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import type {
AdapterQueryResult,
FilterGroup,
SortOrderItem,
Table,
} from "../../data/adapter";
import { useActiveTableRowsCollection } from "./use-active-table-rows-collection";
import { useNavigation } from "./use-navigation";
export interface UseActiveTableQueryProps {
pageIndex: number;
pageSize: number;
sortOrder: SortOrderItem[];
filter: FilterGroup;
searchTerm?: string;
searchScope?: "table" | "row";
}
export interface ActiveTableQueryData {
filteredRowCount: AdapterQueryResult["filteredRowCount"];
rows: AdapterQueryResult["rows"];
}
export interface UseActiveTableQueryResult {
data: ActiveTableQueryData | undefined;
isFetching: boolean;
refetch: () => Promise<void>;
}
export function useActiveTableQuery(
props: UseActiveTableQueryProps,
): UseActiveTableQueryResult {
const { filter, pageIndex, pageSize, sortOrder } = props;
const {
metadata: { activeTable },
} = useNavigation();
const fullTableSearchTerm = resolveFullTableSearchTerm({
activeTable,
searchScope: props.searchScope ?? "table",
searchTerm: props.searchTerm ?? "",
});
const state = useActiveTableRowsCollection({
filter,
fullTableSearchTerm,
pageIndex,
pageSize,
sortOrder,
});
return {
data: state.activeTable
? {
filteredRowCount: state.filteredRowCount,
rows: state.rows,
}
: undefined,
isFetching: state.isFetching,
refetch: state.refetch,
};
}
interface ResolveFullTableSearchTermArgs {
activeTable: Table | undefined;
searchScope: "table" | "row";
searchTerm: string;
}
export function resolveFullTableSearchTerm(
args: ResolveFullTableSearchTermArgs,
): string | undefined {
const { activeTable, searchScope } = args;
const searchTerm = args.searchTerm.trim();
if (searchScope !== "row" || searchTerm.length === 0 || activeTable == null) {
return undefined;
}
return searchTerm;
}