|
3 | 3 | import FilterSelect from '$lib/holocene/select/filter-select.svelte';
|
4 | 4 | import SkeletonTable from '$lib/holocene/skeleton/table.svelte';
|
5 | 5 |
|
6 |
| - import { createPaginationStore } from '$lib/stores/api-pagination'; |
| 6 | + import { |
| 7 | + createPaginationStore, |
| 8 | + type PaginationStore, |
| 9 | + } from '$lib/stores/api-pagination'; |
7 | 10 | import { options } from '$lib/stores/pagination';
|
8 | 11 | import { isError } from '$lib/utilities/is';
|
9 | 12 | import { onMount } from 'svelte';
|
10 | 13 |
|
11 | 14 | import type { HTMLAttributes } from 'svelte/elements';
|
12 | 15 |
|
| 16 | + type T = $$Generic; |
13 | 17 | interface $$Props extends HTMLAttributes<HTMLDivElement> {
|
14 | 18 | onError?: (error: Error | unknown) => void | undefined;
|
15 |
| - onFetch: <T>() => Promise<PaginatedRequest<T>>; |
| 19 | + onFetch: () => Promise<PaginatedRequest<T>>; |
16 | 20 | onShiftUp?: (event: KeyboardEvent) => void | undefined;
|
17 | 21 | onShiftDown?: (event: KeyboardEvent) => void | undefined;
|
18 | 22 | onSpace?: (event: KeyboardEvent) => void | undefined;
|
19 | 23 | pageSizeOptions?: string[] | number[];
|
20 | 24 | defaultPageSize?: string | number | undefined;
|
21 | 25 | total?: string | number;
|
22 | 26 | }
|
| 27 | +
|
23 | 28 | type PaginatedRequest<T> = (
|
24 | 29 | size: number,
|
25 |
| - token: NextPageToken, |
26 |
| - ) => Promise<{ items: T[]; nextPageToken: NextPageToken }>; |
| 30 | + token: string, |
| 31 | + ) => Promise<{ items: T[]; nextPageToken: string }>; |
27 | 32 |
|
28 | 33 | export let onError: (error: Error) => void | undefined = undefined;
|
29 |
| - export let onFetch: <T>() => Promise<PaginatedRequest<T>>; |
| 34 | + export let onFetch: () => Promise<PaginatedRequest<T>>; |
30 | 35 | export let onShiftUp: (event: KeyboardEvent) => void | undefined = undefined;
|
31 | 36 | export let onShiftDown: (event: KeyboardEvent) => void | undefined =
|
32 | 37 | undefined;
|
|
36 | 41 | export let defaultPageSize: string | number | undefined = undefined;
|
37 | 42 | export let total: string | number = '';
|
38 | 43 |
|
39 |
| - let store = createPaginationStore(pageSizeOptions, defaultPageSize); |
| 44 | + let store: PaginationStore<T> = createPaginationStore( |
| 45 | + pageSizeOptions, |
| 46 | + defaultPageSize, |
| 47 | + ); |
| 48 | +
|
40 | 49 | let error: Error;
|
41 | 50 |
|
42 | 51 | function clearError() {
|
|
58 | 67 | }
|
59 | 68 | }
|
60 | 69 |
|
61 |
| - async function initalDataFetch<T>() { |
62 |
| - const fetchData = await onFetch<T>(); |
| 70 | + async function initalDataFetch() { |
| 71 | + const fetchData = await onFetch(); |
63 | 72 | try {
|
64 | 73 | const response = await fetchData($store.pageSize, '');
|
65 | 74 | const { items, nextPageToken } = response;
|
|
70 | 79 | }
|
71 | 80 | }
|
72 | 81 |
|
73 |
| - async function fetchIndexData<T>() { |
| 82 | + async function fetchIndexData() { |
74 | 83 | clearError();
|
75 | 84 | store.setUpdating();
|
76 | 85 | if (!$store.hasNextIndexData) {
|
77 | 86 | try {
|
78 |
| - const fetchData = await onFetch<T>(); |
| 87 | + const fetchData = await onFetch(); |
79 | 88 | const response = await fetchData(
|
80 | 89 | $store.pageSize,
|
81 | 90 | $store.indexData[$store.index].nextToken,
|
|
0 commit comments