mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-04-12 08:27:27 +02:00
fix(post): preserve content when signing fails or is rejected
Critical bug fix: Separate signing from publishing to handle failures correctly. **The Problem:** - When user rejected signing (or signing failed), we treated it as a publishing failure - Set all relay states to "error" even though we never tried to publish - Destroyed the user's post content **The Solution:** - Split signing and publishing into separate try-catch blocks - If signing fails: show toast, reset isPublishing, and RETURN EARLY - User keeps their content and can try again - Only update relay states if we actually attempted to publish **User Experience:** - User rejects signing → toast appears, post is preserved, can edit or try again - Publishing fails → relay states show errors, can retry individual relays - No more losing your carefully crafted post to a rejected signature!
This commit is contained in:
@@ -365,6 +365,8 @@ export function PostViewer({ windowId }: PostViewerProps = {}) {
|
||||
|
||||
setIsPublishing(true);
|
||||
|
||||
// Create and sign event first
|
||||
let event;
|
||||
try {
|
||||
// Create event factory with signer
|
||||
const factory = new EventFactory();
|
||||
@@ -419,8 +421,19 @@ export function PostViewer({ windowId }: PostViewerProps = {}) {
|
||||
content: content.trim(),
|
||||
tags,
|
||||
});
|
||||
const event = await factory.sign(draft);
|
||||
event = await factory.sign(draft);
|
||||
} catch (error) {
|
||||
// Signing failed - user might have rejected it
|
||||
console.error("Failed to sign event:", error);
|
||||
toast.error(
|
||||
error instanceof Error ? error.message : "Failed to sign note",
|
||||
);
|
||||
setIsPublishing(false);
|
||||
return; // Don't destroy the post, let user try again
|
||||
}
|
||||
|
||||
// Signing succeeded, now publish to relays
|
||||
try {
|
||||
// Store the signed event for potential retries
|
||||
setLastPublishedEvent(event);
|
||||
|
||||
@@ -493,9 +506,13 @@ export function PostViewer({ windowId }: PostViewerProps = {}) {
|
||||
error instanceof Error ? error.message : "Failed to publish note",
|
||||
);
|
||||
|
||||
// Reset relay states to pending on error
|
||||
// Reset relay states to pending on publishing error
|
||||
setRelayStates((prev) =>
|
||||
prev.map((r) => ({ ...r, status: "error" as RelayStatus })),
|
||||
prev.map((r) => ({
|
||||
...r,
|
||||
status: "error" as RelayStatus,
|
||||
error: error instanceof Error ? error.message : "Unknown error",
|
||||
})),
|
||||
);
|
||||
} finally {
|
||||
setIsPublishing(false);
|
||||
|
||||
Reference in New Issue
Block a user