PSFPortal/app/components/PaginatedList.svelte
Chord fa6e168ccc Application improvements
* Change favicon
* Display account banned status on admin search
* Pull in application version from Webpack
* Add "Feedback" button in footer and github references
* Fix faction icons to make them the same size
* PaginatedList component now supports back
* Tabbed navs support back
* Hide Pagination when only one page
* Improve admin table style and size
2019-12-31 09:46:34 -05:00

80 lines
1.8 KiB
Svelte

<script>
import { onMount } from 'svelte'
import axios from 'axios'
import Pagination from '../components/Pagination'
export let setURLParam = false;
export let URLSearchName = 'page';
export let fetch;
let data;
let fetching = false;
let pagination = { page: 1 };
export async function refresh() {
await list_fetch(pagination.page)
}
onMount(async () => {
const url = new URL(window.location.href)
let initialPage = 1;
console.log(setURLParam, URLSearchName)
if (setURLParam) {
let param = parseInt(url.searchParams.get(URLSearchName))
if (param != NaN)
initialPage = param;
}
await list_fetch(initialPage);
})
async function pageChange(page) {
if (pagination.page == page || fetching)
return
if (setURLParam) {
const url = new URL(window.location.href);
url.searchParams.set(URLSearchName, page);
history.replaceState(null, null,
url.pathname + url.search + url.hash)
}
await list_fetch(page);
}
async function list_fetch(page) {
fetching = true;
try {
if (fetch != undefined) {
const results = await fetch(page)
if (results != undefined) {
data = results[0];
pagination = results[1]
}
}
} finally {
fetching = false;
}
}
</script>
{#if data}
<slot name="header" data={data} pagination={pagination}></slot>
{#if pagination.item_count > 0}
{#if pagination.page_count > 1}
<Pagination {pagination} {pageChange} {setURLParam} {URLSearchName} />
{/if}
<slot name="body" data={data} pagination={pagination}></slot>
{#if pagination.page_count > 1}
<Pagination {pagination} {pageChange} {setURLParam} {URLSearchName} />
{/if}
{/if}
<slot name="footer" data={data} pagination={pagination}></slot>
{/if}