Commit f0dd6d4d authored by Yechang's avatar Yechang
Browse files

fix(submission): fix big payload

parent 8074e738
Loading
Loading
Loading
Loading
Loading
+45 −17
Original line number Diff line number Diff line
@@ -3,7 +3,9 @@ import type { PageParentData, PageServerLoad } from './$types';
import _ from 'lodash';
import { db } from '$lib/server/db';

export const load = (async ({ parent }) => {
const limit = 15

export const load = (async ({ parent, depends, url }) => {
	const data: PageParentData = await parent();

	const { currentClass } = data;
@@ -11,11 +13,18 @@ export const load = (async ({ parent }) => {
		redirect(302, '/login');
	}

	let page = Number(url.searchParams.get('page'))
	if (_.isNaN(page) || page < 0) {
		page = 0
	}
	page += 1

	async function getSubmissions() {
		const submissions = await db.submission.findMany({
			where: {
				problem: {
					classId: currentClass.id
			}
				},
			},
			include: {
				problem: true,
@@ -24,9 +33,28 @@ export const load = (async ({ parent }) => {
			},
			orderBy: {
				id: 'desc'
		}
			},
			skip: (page - 1) * limit,
			take: limit
		});

		return submissions
	}

	async function getSubmissionsCount() {
		const count = await db.submission.count({
			where: {
				problem: {
					classId: currentClass.id
				}
			},
		})

		return count
	}

	return {
		submissions
		submissions: await getSubmissions(),
		count: await getSubmissionsCount()
	};
}) satisfies PageServerLoad;
+23 −10
Original line number Diff line number Diff line
@@ -2,36 +2,44 @@
	import { goto } from '$app/navigation';
	import type { PageData } from './$types';
	import Link from '$lib/components/link.svelte';
	import { writable } from 'svelte/store';

	import { createRender, createTable, DataBodyRow, Render, Subscribe } from 'svelte-headless-table';
	import { createRender, createTable, Render, Subscribe } from 'svelte-headless-table';

	import { readable } from 'svelte/store';
	import * as Table from '$lib/components/ui/table';
	import _ from 'lodash';
	import { Button } from '$lib/components/ui/button';
	import { Input } from '$lib/components/ui/input';
	import * as DropdownMenu from '$lib/components/ui/dropdown-menu';
	import { CaretSort, ChevronDown } from 'svelte-radix';
	import { CaretSort } from 'svelte-radix';
	import { cn } from '$lib/utils';
	import {
		addHiddenColumns,
		addPagination,
		addSelectedRows,
		addSortBy,
		addTableFilter
	} from 'svelte-headless-table/plugins';
	import Card from '$lib/components/user/card.svelte';
	import { browser } from '$app/environment';

	export let data: PageData;
	const table = createTable(readable(data.submissions), {
	const submissions = writable(data.submissions);
	$: submissions.set(data.submissions);

	const table = createTable(submissions, {
		sort: addSortBy({ disableMultiSort: true }),
		page: addPagination(),
		page: addPagination({
			serverSide: true,
			initialPageSize: 15,
			initialPageIndex: 0,
			serverItemCount: writable(data.count)
		}),
		filter: addTableFilter({
			fn: ({ filterValue, value }) => value.includes(filterValue)
		}),
		// select: addSelectedRows(),
		hide: addHiddenColumns()
	});

	const columns = table.createColumns([
		table.column({
			accessor: 'id',
@@ -44,7 +52,7 @@
				createRender(Link, {
					title: `${value.name}`,
					href: `/submission/${value.id}/`
				}),
				})
		}),
		table.column({
			accessor: 'problem',
@@ -78,7 +86,7 @@
		})
	]);

	const { headerRows, pageRows, tableAttrs, tableBodyAttrs, flatColumns, pluginStates, rows } =
	const { headerRows, pageRows, tableAttrs, tableBodyAttrs, flatColumns, pluginStates } =
		table.createViewModel(columns);

	const { sortKeys } = pluginStates.sort;
@@ -96,7 +104,12 @@

	// const { selectedDataIds } = pluginStates.select;

	const hideableCols = ['status', 'email', 'amount'];
	if (browser) {
		pageIndex.subscribe((p) => {
			goto(`?page=${p}`);
			// invalidate('submissions');
		});
	}
</script>

<div class="h-full px-4 py-6 lg:px-8">