fix: race condition and delete checking for templates
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -780,6 +780,7 @@
|
||||
"sidebar.templates.createFailed": "Vorlage konnte nicht erstellt werden",
|
||||
"sidebar.templates.deleteTemplate": "Vorlage löschen",
|
||||
"sidebar.templates.deleteFailed": "Vorlage konnte nicht gelöscht werden",
|
||||
"sidebar.templates.deleteConfirmWithRefs": "Diese Vorlage wird von {postCount} Beitrag/Beiträgen und {tagCount} Tag(s) referenziert. Trotzdem löschen? Die Referenzen werden entfernt.",
|
||||
"sidebar.import.none": "Noch keine Importdefinitionen",
|
||||
"sidebar.import.createDefinition": "Eine Importdefinition erstellen",
|
||||
"sidebar.import.deleteDefinition": "Importdefinition löschen",
|
||||
|
||||
@@ -780,6 +780,7 @@
|
||||
"sidebar.templates.createFailed": "Failed to create template",
|
||||
"sidebar.templates.deleteTemplate": "Delete template",
|
||||
"sidebar.templates.deleteFailed": "Failed to delete template",
|
||||
"sidebar.templates.deleteConfirmWithRefs": "This template is referenced by {postCount} post(s) and {tagCount} tag(s). Delete anyway? References will be cleared.",
|
||||
"sidebar.import.none": "No import definitions yet",
|
||||
"sidebar.import.createDefinition": "Create an import definition",
|
||||
"sidebar.import.deleteDefinition": "Delete import definition",
|
||||
|
||||
@@ -780,6 +780,7 @@
|
||||
"sidebar.templates.createFailed": "No se pudo crear la plantilla",
|
||||
"sidebar.templates.deleteTemplate": "Eliminar plantilla",
|
||||
"sidebar.templates.deleteFailed": "No se pudo eliminar la plantilla",
|
||||
"sidebar.templates.deleteConfirmWithRefs": "Esta plantilla está referenciada por {postCount} entrada(s) y {tagCount} etiqueta(s). ¿Eliminar de todos modos? Las referencias serán eliminadas.",
|
||||
"sidebar.import.none": "Sin definiciones de importación",
|
||||
"sidebar.import.createDefinition": "Crear definición",
|
||||
"sidebar.import.deleteDefinition": "Eliminar definición",
|
||||
|
||||
@@ -778,6 +778,7 @@
|
||||
"sidebar.templates.createFailed": "Impossible de créer le modèle",
|
||||
"sidebar.templates.deleteTemplate": "Supprimer le modèle",
|
||||
"sidebar.templates.deleteFailed": "Impossible de supprimer le modèle",
|
||||
"sidebar.templates.deleteConfirmWithRefs": "Ce modèle est référencé par {postCount} article(s) et {tagCount} tag(s). Supprimer quand même ? Les références seront supprimées.",
|
||||
"sidebar.import.none": "Aucune définition d’import",
|
||||
"sidebar.import.createDefinition": "Créer une définition",
|
||||
"sidebar.import.deleteDefinition": "Supprimer la définition",
|
||||
|
||||
@@ -778,6 +778,7 @@
|
||||
"sidebar.templates.createFailed": "Impossibile creare il modello",
|
||||
"sidebar.templates.deleteTemplate": "Elimina modello",
|
||||
"sidebar.templates.deleteFailed": "Impossibile eliminare il modello",
|
||||
"sidebar.templates.deleteConfirmWithRefs": "Questo modello è referenziato da {postCount} articolo/i e {tagCount} tag. Eliminare comunque? I riferimenti verranno rimossi.",
|
||||
"sidebar.import.none": "Nessuna definizione di importazione",
|
||||
"sidebar.import.createDefinition": "Crea definizione",
|
||||
"sidebar.import.deleteDefinition": "Elimina definizione",
|
||||
|
||||
Reference in New Issue
Block a user