Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions src/lib/holocene/table/paginated-table/api-paginated.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,16 @@

import PaginatedTable from './index.svelte';

type KeyboardHandler = ((event: KeyboardEvent) => void) | undefined;
type T = $$Generic;
type $$Props = HTMLAttributes<HTMLDivElement> & {
id?: string;
maxHeight?: string;
onError?: (error: Error | unknown) => void | undefined;
onError?: ((error: Error | unknown) => void) | undefined;
onFetch: () => Promise<PaginatedRequest<T>>;
onShiftUp?: (event: KeyboardEvent) => void | undefined;
onShiftDown?: (event: KeyboardEvent) => void | undefined;
onSpace?: (event: KeyboardEvent) => void | undefined;
onShiftUp?: KeyboardHandler;
onShiftDown?: KeyboardHandler;
onSpace?: KeyboardHandler;
total?: string | number;
pageSizeSelectLabel: string;
emptyStateTitle?: string;
Expand All @@ -46,14 +47,13 @@
pageSizeOptions?: string[];
};

export let id: string = null;
export let id: string | null = null;
export let maxHeight = '';
export let onError: (error: Error) => void | undefined = undefined;
export let onError: ((error: Error) => void) | undefined = undefined;
export let onFetch: () => Promise<PaginatedRequest<T>>;
export let onShiftUp: (event: KeyboardEvent) => void | undefined = undefined;
export let onShiftDown: (event: KeyboardEvent) => void | undefined =
undefined;
export let onSpace: (event: KeyboardEvent) => void | undefined = undefined;
export let onShiftUp: KeyboardHandler = undefined;
export let onShiftDown: KeyboardHandler = undefined;
export let onSpace: KeyboardHandler = undefined;

export let total: string | number = '';
export let pageSizeSelectLabel: string;
Expand All @@ -71,7 +71,8 @@
pageSizeOptions,
pageSizeOptions[0],
);
let error: Error;
let error: Error | undefined;
let paginatedTable: PaginatedTable<T>;

function clearError() {
if (error) error = undefined;
Expand Down Expand Up @@ -99,7 +100,7 @@
const items = response[itemsKeyname] || [];
store.nextPageWithItems(nextPageToken, items);
} catch (err) {
error = err;
error = err as Error;
if (onError) onError(error);
}
}
Expand Down Expand Up @@ -129,6 +130,12 @@
} else {
store.nextPage();
}
paginatedTable?.scrollToTop();
}

function handlePreviousPage() {
store.previousPage();
paginatedTable?.scrollToTop();
}

async function handleKeydown(event: KeyboardEvent) {
Expand Down Expand Up @@ -182,6 +189,7 @@
<svelte:window on:keydown={handleKeydown} />

<PaginatedTable
bind:this={paginatedTable}
loading={$store.loading}
updating={$store.updating}
visibleItems={$store.visibleItems}
Expand Down Expand Up @@ -233,7 +241,7 @@
<IconButton
label={previousButtonLabel}
disabled={!$store.hasPrevious}
on:click={store.previousPage}
on:click={handlePreviousPage}
icon="arrow-left"
/>
<div class="flex gap-1">
Expand Down
4 changes: 4 additions & 0 deletions src/lib/holocene/table/paginated-table/index.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
$: tableOffset = tableContainer?.offsetTop
? tableContainer.offsetTop + 32
: 0;

export function scrollToTop() {
tableContainer?.scrollTo({ top: 0, behavior: 'instant' });
}
</script>

<div
Expand Down
6 changes: 5 additions & 1 deletion src/lib/holocene/table/paginated-table/paginated.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

type Item = $$Generic;

export let id: string = null;
export let id: string | null = null;
export let items: Item[];
export let loading = false;
export let updating = false;
Expand All @@ -35,6 +35,8 @@
let className: ClassNameValue = '';
export { className as class };

let paginatedTable: PaginatedTable<Item>;

$: url = $page.url;
$: perPageParam = url.searchParams.get(perPageKey) ?? pageSizeOptions[0];
$: currentPageParam = url.searchParams.get(currentPageKey) || '1';
Expand Down Expand Up @@ -86,6 +88,7 @@
value: page,
url,
});
paginatedTable?.scrollToTop();
};

$: {
Expand All @@ -95,6 +98,7 @@
</script>

<PaginatedTable
bind:this={paginatedTable}
{loading}
{updating}
{maxHeight}
Expand Down
Loading