fix: link post when image is saved

This commit is contained in:
2026-02-15 13:47:05 +01:00
parent 5f604362df
commit 3b0cb97ed2
3 changed files with 26 additions and 5 deletions

View File

@@ -1065,7 +1065,7 @@ const PostEditor: React.FC<PostEditorProps> = ({ postId }) => {
}, []);
// Handle image insertion from InsertModal (for media library)
const handleInsertImage = useCallback((url: string, alt: string) => {
const handleInsertImage = useCallback(async (url: string, alt: string, mediaId?: string) => {
const editor = editorRef.current as any;
if (!editor) return;
@@ -1078,8 +1078,18 @@ const PostEditor: React.FC<PostEditorProps> = ({ postId }) => {
forceMoveMarkers: true
}]);
// Link the media to this post if mediaId is provided (from media library)
if (mediaId) {
try {
await window.electronAPI?.postMedia.link(postId, mediaId);
console.log(`[Editor] Linked media ${mediaId} to post ${postId}`);
} catch (error) {
console.error('Failed to link media to post:', error);
}
}
setShowMediaSearch(false);
}, []);
}, [postId]);
// Configure Monaco before mount to add macro syntax highlighting
const handleEditorWillMount = (monaco: Monaco) => {

View File

@@ -34,7 +34,7 @@ type Tab = 'external' | 'internal';
interface InsertModalProps {
mode: InsertMode;
onInsertLink: (url: string, text?: string) => void;
onInsertImage: (url: string, alt: string) => void;
onInsertImage: (url: string, alt: string, mediaId?: string) => void;
onClose: () => void;
initialText?: string; // Selected text in editor
}
@@ -149,7 +149,8 @@ export const InsertModal: React.FC<InsertModalProps> = ({
if (url) {
// Extract filename without extension for alt text
const altText = result.originalName.replace(/\.[^.]+$/, '');
onInsertImage(url, altText);
// Pass mediaId so the editor can link this media to the post
onInsertImage(url, altText, result.id);
}
}
onClose();
@@ -162,7 +163,8 @@ export const InsertModal: React.FC<InsertModalProps> = ({
if (mode === 'link') {
onInsertLink(externalUrl, externalText || undefined);
} else {
onInsertImage(externalUrl, externalAlt || 'Image');
// External images don't have a mediaId
onInsertImage(externalUrl, externalAlt || 'Image', undefined);
}
onClose();
}, [mode, externalUrl, externalText, externalAlt, onInsertLink, onInsertImage, onClose]);

View File

@@ -6,6 +6,13 @@
import { vi, beforeEach, afterEach } from 'vitest';
import '@testing-library/jest-dom/vitest';
// Polyfill for IE-specific event methods that React DOM's input polyfill checks for
// jsdom doesn't implement these, but React tries to use them for IE compatibility
if (typeof Element !== 'undefined' && !Element.prototype.attachEvent) {
(Element.prototype as any).attachEvent = function() {};
(Element.prototype as any).detachEvent = function() {};
}
// Mock localStorage for Zustand persist middleware
const localStorageMock = (() => {
let store: Record<string, string> = {};
@@ -65,6 +72,8 @@ Object.defineProperty(globalThis, 'window', {
rebuildFromFiles: vi.fn(),
getThumbnail: vi.fn(),
regenerateThumbnails: vi.fn(),
search: vi.fn(),
getUrl: vi.fn(),
},
sync: {
configure: vi.fn(),