mirror of
https://github.com/priyanshujain/margin.git
synced 2026-10-02 19:17:03 +00:00
fix(persist): persist new books on create
A freshly created book lived only in memory until the first edit, so quitting beforehand lost it and it never appeared in the library. Save it to disk on creation via a shared createAndOpenBook used by both the Library card and the New Book menu action. Claude-Session: https://claude.ai/code/session_01RzTWrLiy4zGuw2hZSQGamk
This commit is contained in:
1 parent
258d5e5209
commit
6e2ca9c4bc
3 files changed
+19
-4
No files matched your search
+2
-2
@@ -5,7 +5,7 @@ import { Library } from "./components/Library";
|
|||||||
import { EditorView } from "./components/EditorView";
|
import { EditorView } from "./components/EditorView";
|
||||||
import { useBook } from "./store/useBook";
|
import { useBook } from "./store/useBook";
|
||||||
import { isDesktop } from "./ipc";
|
import { isDesktop } from "./ipc";
|
||||||
import { newBook, saveBook } from "./library";
|
import { createAndOpenBook, saveBook } from "./library";
|
||||||
import { runExport } from "./export/run";
|
import { runExport } from "./export/run";
|
||||||
import { checkForUpdates } from "./updater";
|
import { checkForUpdates } from "./updater";
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ function App() {
|
|||||||
checkForUpdates(true);
|
checkForUpdates(true);
|
||||||
const unlisten = listen<string>("menu-action", (event) => {
|
const unlisten = listen<string>("menu-action", (event) => {
|
||||||
const state = useBook.getState();
|
const state = useBook.getState();
|
||||||
if (event.payload === "new-book") state.openBook(newBook());
|
if (event.payload === "new-book") createAndOpenBook(state.openBook, state.setNotice);
|
||||||
else if (event.payload === "export-pdf") runExport("pdf");
|
else if (event.payload === "export-pdf") runExport("pdf");
|
||||||
else if (event.payload === "export-epub") runExport("epub");
|
else if (event.payload === "export-epub") runExport("epub");
|
||||||
else if (event.payload === "check-updates") checkForUpdates(false);
|
else if (event.payload === "check-updates") checkForUpdates(false);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { type BookSummary, deleteBook, exampleBook, listBooks, loadBook, newBook, saveBook } from "../library";
|
import { type BookSummary, createAndOpenBook, deleteBook, exampleBook, listBooks, loadBook, saveBook } from "../library";
|
||||||
import type { Book } from "../model/book";
|
import type { Book } from "../model/book";
|
||||||
import { importEpub } from "../import/epub";
|
import { importEpub } from "../import/epub";
|
||||||
import { isDesktop } from "../ipc";
|
import { isDesktop } from "../ipc";
|
||||||
@@ -64,7 +64,7 @@ export function Library({ onOpen }: { onOpen: (book: Book) => void }) {
|
|||||||
<div className="library">
|
<div className="library">
|
||||||
<header className="library-head" data-tauri-drag-region />
|
<header className="library-head" data-tauri-drag-region />
|
||||||
<div className="shelf">
|
<div className="shelf">
|
||||||
<button className="card card-action" onClick={() => onOpen(newBook())}>
|
<button className="card card-action" onClick={() => createAndOpenBook(onOpen, setNotice)}>
|
||||||
<Icon d="M12 5v14M5 12h14" size={20} />
|
<Icon d="M12 5v14M5 12h14" size={20} />
|
||||||
<span>New book</span>
|
<span>New book</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -35,3 +35,18 @@ export function newBook(): Book {
|
|||||||
export function exampleBook(): Book {
|
export function exampleBook(): Book {
|
||||||
return starterBook();
|
return starterBook();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createAndOpenBook(
|
||||||
|
open: (book: Book) => void,
|
||||||
|
onError?: (message: string) => void,
|
||||||
|
): Promise<void> {
|
||||||
|
const book = newBook();
|
||||||
|
if (isDesktop) {
|
||||||
|
try {
|
||||||
|
await saveBook(book);
|
||||||
|
} catch (e) {
|
||||||
|
onError?.(`Could not create book: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open(book);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user