- {work.tags.map(tag => (
+ {work.tags?.map(tag => (
Tags
- {work.tags.map(tag => (
+ {work.tags?.map(tag => (
(
method: string,
url: string,
data?: unknown | undefined,
-): Promise {
+): Promise {
const res = await fetch(url, {
method,
headers: data ? { "Content-Type": "application/json" } : {},
@@ -20,7 +20,7 @@ export async function apiRequest(
});
await throwIfResNotOk(res);
- return res;
+ return await res.json();
}
type UnauthorizedBehavior = "returnNull" | "throw";
diff --git a/client/src/lib/types.ts b/client/src/lib/types.ts
index 39e7039..d59d305 100644
--- a/client/src/lib/types.ts
+++ b/client/src/lib/types.ts
@@ -82,3 +82,17 @@ export interface ReadingContext {
fontSizeClass: string;
zenMode: boolean;
}
+
+export interface Annotation {
+ id: number;
+ workId: number;
+ translationId?: number;
+ lineNumber: number;
+ userId: number;
+ userName: string;
+ userAvatar: string | null;
+ content: string;
+ createdAt: Date;
+ likes: number;
+ liked: boolean;
+}
diff --git a/client/src/pages/collections/CreateCollection.tsx b/client/src/pages/collections/CreateCollection.tsx
index 137f248..067c24f 100644
--- a/client/src/pages/collections/CreateCollection.tsx
+++ b/client/src/pages/collections/CreateCollection.tsx
@@ -40,7 +40,7 @@ export default function CreateCollection() {
// Create collection mutation
const createMutation = useMutation({
mutationFn: async (values: FormValues) => {
- return await apiRequest<{ id: number; slug: string }>('POST', '/api/collections', {
+ return await apiRequest('POST', '/api/collections', {
name: values.name,
description: values.description || '',
isPublic: values.isPublic,