fix: link post when image is saved
This commit is contained in:
@@ -1065,7 +1065,7 @@ const PostEditor: React.FC<PostEditorProps> = ({ postId }) => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Handle image insertion from InsertModal (for media library)
|
// 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;
|
const editor = editorRef.current as any;
|
||||||
if (!editor) return;
|
if (!editor) return;
|
||||||
|
|
||||||
@@ -1078,8 +1078,18 @@ const PostEditor: React.FC<PostEditorProps> = ({ postId }) => {
|
|||||||
forceMoveMarkers: true
|
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);
|
setShowMediaSearch(false);
|
||||||
}, []);
|
}, [postId]);
|
||||||
|
|
||||||
// Configure Monaco before mount to add macro syntax highlighting
|
// Configure Monaco before mount to add macro syntax highlighting
|
||||||
const handleEditorWillMount = (monaco: Monaco) => {
|
const handleEditorWillMount = (monaco: Monaco) => {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ type Tab = 'external' | 'internal';
|
|||||||
interface InsertModalProps {
|
interface InsertModalProps {
|
||||||
mode: InsertMode;
|
mode: InsertMode;
|
||||||
onInsertLink: (url: string, text?: string) => void;
|
onInsertLink: (url: string, text?: string) => void;
|
||||||
onInsertImage: (url: string, alt: string) => void;
|
onInsertImage: (url: string, alt: string, mediaId?: string) => void;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
initialText?: string; // Selected text in editor
|
initialText?: string; // Selected text in editor
|
||||||
}
|
}
|
||||||
@@ -149,7 +149,8 @@ export const InsertModal: React.FC<InsertModalProps> = ({
|
|||||||
if (url) {
|
if (url) {
|
||||||
// Extract filename without extension for alt text
|
// Extract filename without extension for alt text
|
||||||
const altText = result.originalName.replace(/\.[^.]+$/, '');
|
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();
|
onClose();
|
||||||
@@ -162,7 +163,8 @@ export const InsertModal: React.FC<InsertModalProps> = ({
|
|||||||
if (mode === 'link') {
|
if (mode === 'link') {
|
||||||
onInsertLink(externalUrl, externalText || undefined);
|
onInsertLink(externalUrl, externalText || undefined);
|
||||||
} else {
|
} else {
|
||||||
onInsertImage(externalUrl, externalAlt || 'Image');
|
// External images don't have a mediaId
|
||||||
|
onInsertImage(externalUrl, externalAlt || 'Image', undefined);
|
||||||
}
|
}
|
||||||
onClose();
|
onClose();
|
||||||
}, [mode, externalUrl, externalText, externalAlt, onInsertLink, onInsertImage, onClose]);
|
}, [mode, externalUrl, externalText, externalAlt, onInsertLink, onInsertImage, onClose]);
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
import { vi, beforeEach, afterEach } from 'vitest';
|
import { vi, beforeEach, afterEach } from 'vitest';
|
||||||
import '@testing-library/jest-dom/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
|
// Mock localStorage for Zustand persist middleware
|
||||||
const localStorageMock = (() => {
|
const localStorageMock = (() => {
|
||||||
let store: Record<string, string> = {};
|
let store: Record<string, string> = {};
|
||||||
@@ -65,6 +72,8 @@ Object.defineProperty(globalThis, 'window', {
|
|||||||
rebuildFromFiles: vi.fn(),
|
rebuildFromFiles: vi.fn(),
|
||||||
getThumbnail: vi.fn(),
|
getThumbnail: vi.fn(),
|
||||||
regenerateThumbnails: vi.fn(),
|
regenerateThumbnails: vi.fn(),
|
||||||
|
search: vi.fn(),
|
||||||
|
getUrl: vi.fn(),
|
||||||
},
|
},
|
||||||
sync: {
|
sync: {
|
||||||
configure: vi.fn(),
|
configure: vi.fn(),
|
||||||
|
|||||||
Reference in New Issue
Block a user