+
{$page.status}: {$page.error?.message}
diff --git a/website-frontend/src/routes/news/+page.ts b/website-frontend/src/routes/news/+page.ts
index 110d7348..1114c213 100644
--- a/website-frontend/src/routes/news/+page.ts
+++ b/website-frontend/src/routes/news/+page.ts
@@ -2,7 +2,6 @@
export async function load({ data }) {
return {
news_overview: data.news_overview,
- news_limit: data.news_limit,
news_count: data.news_count,
news: data.news
};
diff --git a/website-frontend/src/routes/news/[slug]/+page.server.ts b/website-frontend/src/routes/news/[slug]/+page.server.ts
index ac5a0318..7c55c5c4 100644
--- a/website-frontend/src/routes/news/[slug]/+page.server.ts
+++ b/website-frontend/src/routes/news/[slug]/+page.server.ts
@@ -1,9 +1,12 @@
/** @type {import('./$types').PageServerLoad} */
import { aggregate, readItems } from '@directus/sdk';
import getDirectusInstance from '$lib/directus';
-import { error, redirect } from '@sveltejs/kit';
-import { parse } from 'valibot';
+import { error } from '@sveltejs/kit';
+import { awaitAsync, parse, parseAsync, pipeAsync, promise } from 'valibot';
import { News, NewsItem } from '$lib/models/news';
+import type { Actions } from './$types';
+
+const limit = 12;
export async function load({ url, params, fetch }) {
const directus = getDirectusInstance(fetch);
@@ -43,7 +46,6 @@ export async function load({ url, params, fetch }) {
const news_item = parse(NewsItem, news[0]);
- const other_news_limit = 12;
const other_news_count = await directus
.request(
aggregate('news', {
@@ -60,11 +62,9 @@ export async function load({ url, params, fetch }) {
})
)
.then((res) => res[0].count);
- if (parseInt(url.searchParams.get('limit') ?? other_news_limit.toString()) < other_news_limit)
- throw redirect(302, url.pathname);
- const other_news = parse(
- News,
- await directus.request(
+ const other_news = parseAsync(
+ pipeAsync(promise(), awaitAsync(), News),
+ directus.request(
readItems('news', {
fields: [
'*',
@@ -88,12 +88,57 @@ export async function load({ url, params, fetch }) {
}
},
sort: ['-date_created'],
- limit: Math.max(other_news_limit, parseInt(url.searchParams.get('limit') ?? '0'))
+ limit
})
)
);
const link = new URL(url.toString()).toString();
- return { link, other_news_limit, other_news_count, other_news, news_item };
+ return { link, other_news_count, other_news, news_item };
}
+
+export const actions = {
+ loadMore: async ({ request, params, fetch }) => {
+ const data = await request.formData();
+ const current = JSON.parse(data.get('data') as string);
+ const directus = getDirectusInstance(fetch);
+ const other_news = parse(
+ News,
+ await directus.request(
+ readItems('news', {
+ fields: [
+ '*',
+ {
+ user_created: ['first_name', 'last_name']
+ },
+ {
+ user_updated: ['first_name', 'last_name']
+ },
+ {
+ news_tags: [
+ {
+ news_tags_id: ['name']
+ }
+ ]
+ }
+ ],
+ filter: {
+ slug: {
+ _neq: params.slug
+ }
+ },
+ sort: ['-date_created'],
+ offset: current.length,
+ limit
+ })
+ )
+ );
+
+ const items = [...current, ...other_news];
+ return {
+ success: true,
+ items
+ };
+ }
+} satisfies Actions;
diff --git a/website-frontend/src/routes/news/[slug]/+page.svelte b/website-frontend/src/routes/news/[slug]/+page.svelte
index c9d080e5..81336967 100644
--- a/website-frontend/src/routes/news/[slug]/+page.svelte
+++ b/website-frontend/src/routes/news/[slug]/+page.svelte
@@ -10,7 +10,7 @@
export let data;
let banner_height: number;
- $: ({ link, other_news_limit, other_news_count, other_news, news_item } = data);
+ $: ({ link, other_news_count, other_news, news_item } = data);
$: news_tags = news_item.news_tags
? news_item.news_tags
@@ -110,7 +110,6 @@
text="other news"
component={NewsCard}
count={other_news_count}
- limit={other_news_limit}
/>