fix(catalog) : add delete impact confirmation to product catalog

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-03-06 11:06:06 +01:00
parent f1cc21c31b
commit e732585e63

View File

@@ -296,14 +296,30 @@ const reload = () => fetchProducts()
const { confirm } = useConfirm()
const resolveDeleteImpact = (product: Record<string, any>) => {
const impacts: string[] = []
const machineLinks = Array.isArray(product?.machineLinks) ? product.machineLinks.length : product?.machineLinksCount ?? 0
const documents = Array.isArray(product?.documents) ? product.documents.length : product?.documentsCount ?? 0
const customFields = Array.isArray(product?.customFieldValues) ? product.customFieldValues.length : product?.customFieldValuesCount ?? 0
if (machineLinks > 0) impacts.push(`${machineLinks} liaison${machineLinks > 1 ? 's' : ''} machine`)
if (documents > 0) impacts.push(`${documents} document${documents > 1 ? 's' : ''}`)
if (customFields > 0) impacts.push(`${customFields} valeur${customFields > 1 ? 's' : ''} de champs personnalisés`)
return impacts
}
const confirmDelete = async (product: Record<string, any>) => {
const confirmed = await confirm({
message: `Voulez-vous vraiment supprimer le produit "${product.name}" ?\n\nCette action est irréversible.`,
})
const productName = product?.name || 'ce produit'
const impacts = resolveDeleteImpact(product)
const lines = [`Voulez-vous vraiment supprimer « ${productName} » ?`]
if (impacts.length) {
lines.push(`Cela supprimera également :\n• ${impacts.join('\n• ')}`)
}
lines.push('Cette action est irréversible.')
const confirmed = await confirm({ title: 'Supprimer le produit', message: lines.join('\n\n'), dangerous: true })
if (!confirmed) return
const result = await deleteProduct(product.id)
if (result.success) {
toast.showSuccess(`Produit "${product.name}" supprimé`)
toast.showSuccess(`Produit "${productName}" supprimé`)
}
}