diff --git a/src/actions/feedback.ts b/src/actions/feedback.ts
index 7678052..f35c5dc 100644
--- a/src/actions/feedback.ts
+++ b/src/actions/feedback.ts
@@ -38,11 +38,14 @@ export const feedback = {
}
}),
feedbacks: defineAction({
- handler: async (_, context) => {
+ input: z.object({
+ includeBlanks: z.boolean()
+ }),
+ handler: async (input, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Feedback);
return {
- feedbacks: await db.getFeedbacks({})
+ feedbacks: await db.getFeedbacks({ includeBlanks: input.includeBlanks })
};
}
})
diff --git a/src/app/admin/feedback/Feedback.svelte b/src/app/admin/feedback/Feedback.svelte
index 86e3dd2..5e188c4 100644
--- a/src/app/admin/feedback/Feedback.svelte
+++ b/src/app/admin/feedback/Feedback.svelte
@@ -1,7 +1,6 @@
{#snippet date(value: string)}
diff --git a/src/app/admin/feedback/SidebarActions.svelte b/src/app/admin/feedback/SidebarActions.svelte
new file mode 100644
index 0000000..e693998
--- /dev/null
+++ b/src/app/admin/feedback/SidebarActions.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/src/app/admin/feedback/feedback.ts b/src/app/admin/feedback/feedback.ts
index dc25886..6b87d59 100644
--- a/src/app/admin/feedback/feedback.ts
+++ b/src/app/admin/feedback/feedback.ts
@@ -10,8 +10,8 @@ export type Feedback = Feedbacks[0];
export const feedbacks = writable([]);
// actions
-export async function fetchFeedbacks(reporter?: string | null, reported?: string | null) {
- const { data, error } = await actions.feedback.feedbacks({ reporter: reporter, reported: reported });
+export async function fetchFeedbacks(includeBlanks: boolean) {
+ const { data, error } = await actions.feedback.feedbacks({ includeBlanks: includeBlanks });
if (error) {
actionErrorPopup(error);
return;
diff --git a/src/db/schema/feedback.ts b/src/db/schema/feedback.ts
index 4b9faac..c28fa56 100644
--- a/src/db/schema/feedback.ts
+++ b/src/db/schema/feedback.ts
@@ -1,7 +1,7 @@
import { int, mysqlTable, text, timestamp, varchar } from 'drizzle-orm/mysql-core';
import { user } from './user.ts';
import type { MySql2Database } from 'drizzle-orm/mysql2';
-import { desc, eq, inArray } from 'drizzle-orm';
+import { desc, eq, inArray, isNotNull } from 'drizzle-orm';
import { generateRandomString } from '@util/random.ts';
type Database = MySql2Database<{ feedback: typeof feedback }>;
@@ -32,7 +32,9 @@ export type SubmitFeedbackReq = {
content: string;
};
-export type GetFeedbacksReq = {};
+export type GetFeedbacksReq = {
+ includeBlanks?: boolean | null;
+};
export type GetFeedbackByUrlHash = {
urlHash: string;
@@ -76,7 +78,7 @@ export async function submitFeedback(db: Database, values: SubmitFeedbackReq) {
.where(eq(feedback.urlHash, values.urlHash));
}
-export async function getFeedbacks(db: Database, _values: GetFeedbacksReq) {
+export async function getFeedbacks(db: Database, values: GetFeedbacksReq) {
return db
.select({
id: feedback.id,
@@ -89,6 +91,7 @@ export async function getFeedbacks(db: Database, _values: GetFeedbacksReq) {
})
.from(feedback)
.leftJoin(user, eq(feedback.userId, user.id))
+ .where(!values.includeBlanks ? isNotNull(feedback.lastChanged) : undefined)
.orderBy(desc(feedback.id));
}
diff --git a/src/db/schema/report.ts b/src/db/schema/report.ts
index 4b02579..7f44d60 100644
--- a/src/db/schema/report.ts
+++ b/src/db/schema/report.ts
@@ -133,7 +133,7 @@ export async function getReports(db: Database, values: GetReportsReq) {
and(
values.reporter != null ? eq(reporter.username, values.reporter) : undefined,
values.reported != null ? eq(reported.username, values.reported) : undefined,
- values.includeDrafts == false ? isNotNull(report.createdAt) : undefined
+ !values.includeDrafts ? isNotNull(report.createdAt) : undefined
)
)
.orderBy(desc(report.id));
diff --git a/src/pages/admin/feedback.astro b/src/pages/admin/feedback.astro
index cd34d44..1a192ce 100644
--- a/src/pages/admin/feedback.astro
+++ b/src/pages/admin/feedback.astro
@@ -4,11 +4,13 @@ import AdminLayout from '@layouts/admin/AdminLayout.astro';
import { Session } from '@util/session.ts';
import { Permissions } from '@util/permissions.ts';
import { BASE_PATH } from 'astro:env/server';
+import SidebarActions from '@app/admin/feedback/SidebarActions.svelte';
const session = Session.sessionFromCookies(Astro.cookies, Permissions.Feedback);
if (!session) return Astro.redirect(`${BASE_PATH}/admin`);
---
+