feat: implement mobile reader

- implement mobile epub reader
This commit is contained in:
2026-06-20 13:33:44 -05:00
parent 84c0497f21
commit 22ded87250
41 changed files with 3184 additions and 1111 deletions
+22 -46
View File
@@ -1,55 +1,31 @@
import api from "./client";
import type {
Bookmark,
Note,
CreateBookmarkPayload,
CreateNotePayload,
PaginatedResponse,
} from "@cloud-reader/shared";
import type { PaginatedResponse } from "@cloud-reader/shared";
import type { Bookmark, CreateMarkerPayload } from "../types";
export function fetchBookmarks(
bookId?: string,
export async function fetchBookmarks(
ebookId?: string | number,
): Promise<PaginatedResponse<Bookmark>> {
const params = bookId ? { book: bookId } : {};
return api
.get<PaginatedResponse<Bookmark>>("/api/annotations/bookmarks/", { params })
.then((res) => res.data);
const params: Record<string, string> = {};
if (ebookId != null && ebookId !== "") {
params.ebook = String(ebookId);
}
const { data } = await api.get<PaginatedResponse<Bookmark>>(
"/api/annotations/bookmarks/",
{ params },
);
return data;
}
export function createBookmark(
payload: CreateBookmarkPayload,
export async function createMarker(
payload: CreateMarkerPayload,
): Promise<Bookmark> {
return api
.post<Bookmark>("/api/annotations/bookmarks/", payload)
.then((res) => res.data);
const { data } = await api.post<Bookmark>(
"/api/annotations/bookmarks/",
payload,
);
return data;
}
export function deleteBookmark(id: string): Promise<void> {
return api.delete(`/api/annotations/bookmarks/${id}/`).then(() => {});
export async function deleteBookmark(id: string): Promise<void> {
await api.delete(`/api/annotations/bookmarks/${id}/`);
}
export function fetchNotes(bookId?: string): Promise<PaginatedResponse<Note>> {
const params = bookId ? { book: bookId } : {};
return api
.get<PaginatedResponse<Note>>("/api/annotations/notes/", { params })
.then((res) => res.data);
}
export function createNote(payload: CreateNotePayload): Promise<Note> {
return api
.post<Note>("/api/annotations/notes/", payload)
.then((res) => res.data);
}
export function updateNote(
id: string,
content: string,
): Promise<Note> {
return api
.patch<Note>(`/api/annotations/notes/${id}/`, { content })
.then((res) => res.data);
}
export function deleteNote(id: string): Promise<void> {
return api.delete(`/api/annotations/notes/${id}/`).then(() => {});
}