fix: race condition and delete checking for templates

This commit is contained in:
2026-02-27 20:45:56 +01:00
parent 6c2d2c48bf
commit 696b79c5d7
18 changed files with 334 additions and 51 deletions

View File

@@ -1752,11 +1752,30 @@ const TemplatesList: React.FC = () => {
const handleDeleteTemplate = async (event: React.MouseEvent, templateId: string) => {
event.stopPropagation();
try {
const deleted = await window.electronAPI?.templates.delete(templateId);
if (!deleted) {
const result = await window.electronAPI?.templates.delete(templateId);
if (!result) {
showToast.error(t('sidebar.templates.deleteFailed'));
return;
}
if (!result.deleted && result.references) {
const { postIds, tagIds } = result.references;
const confirmed = window.confirm(
t('sidebar.templates.deleteConfirmWithRefs', {
postCount: String(postIds.length),
tagCount: String(tagIds.length),
}),
);
if (!confirmed) {
return;
}
const forceResult = await window.electronAPI?.templates.delete(templateId, { force: true });
if (!forceResult?.deleted) {
showToast.error(t('sidebar.templates.deleteFailed'));
return;
}
}
setTemplates((prev) => prev.filter((tmpl) => tmpl.id !== templateId));
closeTab(templateId);
dispatchWindowEvent(BDS_EVENT_TEMPLATES_CHANGED);

View File

@@ -182,11 +182,30 @@ export const TemplatesView: React.FC<TemplatesViewProps> = ({ templateId }) => {
}
try {
const deleted = await window.electronAPI?.templates.delete(template.id);
if (!deleted) {
const result = await window.electronAPI?.templates.delete(template.id);
if (!result) {
showToast.error(t('sidebar.templates.deleteFailed'));
return;
}
if (!result.deleted && result.references) {
const { postIds, tagIds } = result.references;
const confirmed = window.confirm(
t('sidebar.templates.deleteConfirmWithRefs', {
postCount: String(postIds.length),
tagCount: String(tagIds.length),
}),
);
if (!confirmed) {
return;
}
const forceResult = await window.electronAPI?.templates.delete(template.id, { force: true });
if (!forceResult?.deleted) {
showToast.error(t('sidebar.templates.deleteFailed'));
return;
}
}
closeTab(template.id);
dispatchWindowEvent(BDS_EVENT_TEMPLATES_CHANGED);
} catch (error) {