From 04a3030b79e2abf901fa0c19bdea608690c831f9 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Thu, 6 Nov 2025 03:43:42 +0800 Subject: [PATCH] fix(metadata): fixed changing cover image in Readest apps, closes #2402 (#2410) --- .../components/metadata/BookDetailEdit.tsx | 5 ++-- .../components/metadata/useMetadataEdit.ts | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/apps/readest-app/src/components/metadata/BookDetailEdit.tsx b/apps/readest-app/src/components/metadata/BookDetailEdit.tsx index fd04d59b..e13c5dee 100644 --- a/apps/readest-app/src/components/metadata/BookDetailEdit.tsx +++ b/apps/readest-app/src/components/metadata/BookDetailEdit.tsx @@ -151,9 +151,10 @@ const BookDetailEdit: React.FC = ({ const selectedFile = result.files[0]!; if (selectedFile.path && appService) { const filePath = selectedFile.path; + const imageUrl = await appService.getCachedImageUrl(filePath); onFieldChange('coverImageFile', filePath); - onFieldChange('coverImageUrl', await appService.getCachedImageUrl(filePath)); - setNewCoverImageUrl(filePath); + onFieldChange('coverImageUrl', imageUrl); + setNewCoverImageUrl(imageUrl); } else if (selectedFile.file) { const coverImageBlobUrl = URL.createObjectURL(selectedFile.file); onFieldChange('coverImageBlobUrl', coverImageBlobUrl); diff --git a/apps/readest-app/src/components/metadata/useMetadataEdit.ts b/apps/readest-app/src/components/metadata/useMetadataEdit.ts index b1e73497..c6178a96 100644 --- a/apps/readest-app/src/components/metadata/useMetadataEdit.ts +++ b/apps/readest-app/src/components/metadata/useMetadataEdit.ts @@ -57,24 +57,28 @@ export const useMetadataEdit = (metadata: BookMetadata | null) => { return; } - const newMeta = { ...editedMeta } as { [key: string]: unknown }; - switch (field) { - case 'subject': - newMeta['subject'] = value ? value.split(/,|;|,|、/).map((s) => s.trim()) : []; - break; - default: - newMeta[field] = value; - } + setEditedMeta((prevMeta) => { + const newMeta = { ...prevMeta } as { [key: string]: unknown }; + switch (field) { + case 'subject': + newMeta['subject'] = value ? value.split(/,|;|,|、/).map((s) => s.trim()) : []; + break; + default: + newMeta[field] = value; + } + return newMeta as BookMetadata; + }); - setEditedMeta(newMeta as BookMetadata); if (value !== undefined) { handleFieldValidation(field, value); } if (fieldSources[field]) { - const newSources = { ...fieldSources }; - delete newSources[field]; - setFieldSources(newSources); + setFieldSources((prevSources) => { + const newSources = { ...prevSources }; + delete newSources[field]; + return newSources; + }); } };