fix: replace all native confirm() dialogs with styled modal macros
Some checks failed
CI / ruff (push) Successful in 9s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled

Migrated ~68 native browser confirm() calls across 74 files to use the
project's confirm_modal/confirm_modal_dynamic Jinja2 macros, providing
consistent styled confirmation dialogs instead of plain browser popups.

Modules updated: core, tenancy, cms, marketplace, messaging, billing,
customers, orders, cart. Uses danger/warning/info variants and
double-confirm pattern for destructive delete operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-19 16:56:25 +01:00
parent 182610283d
commit 167bb50f4f
74 changed files with 939 additions and 436 deletions

View File

@@ -49,6 +49,9 @@ function adminMessages(initialConversationId = null) {
replyContent: '',
attachedFiles: [],
// Close conversation confirm state
showCloseConversationConfirm: false,
// Compose modal
showComposeModal: false,
compose: {
@@ -304,8 +307,6 @@ function adminMessages(initialConversationId = null) {
* Close conversation
*/
async closeConversation() {
if (!confirm(I18n.t('messaging.confirmations.close_conversation_admin'))) return;
try {
await apiClient.post(`/admin/messages/${this.selectedConversationId}/close`);

View File

@@ -67,6 +67,10 @@ function adminNotifications() {
resolvingAlert: null,
resolutionNotes: '',
// Delete notification confirm state
showDeleteNotificationConfirm: false,
pendingDeleteNotificationId: null,
/**
* Initialize component
*/
@@ -163,10 +167,6 @@ function adminNotifications() {
* Delete notification
*/
async deleteNotification(notificationId) {
if (!confirm(I18n.t('messaging.confirmations.delete_notification'))) {
return;
}
try {
await apiClient.delete(`/admin/notifications/${notificationId}`);

View File

@@ -43,6 +43,9 @@ function storeEmailTemplates() {
},
reverting: false,
// Revert confirm state
showRevertConfirm: false,
// Preview Modal
showPreviewModal: false,
previewData: null,
@@ -184,10 +187,6 @@ function storeEmailTemplates() {
async revertToDefault() {
if (!this.editingTemplate) return;
if (!confirm(I18n.t('messaging.confirmations.delete_customization'))) {
return;
}
this.reverting = true;
try {

View File

@@ -46,6 +46,9 @@ function storeMessages(initialConversationId = null) {
// Reply form
replyContent: '',
// Close conversation confirm state
showCloseConversationConfirm: false,
// Compose modal
showComposeModal: false,
compose: {
@@ -279,8 +282,6 @@ function storeMessages(initialConversationId = null) {
* Close conversation
*/
async closeConversation() {
if (!confirm(I18n.t('messaging.confirmations.close_conversation'))) return;
try {
await apiClient.post(`/store/messages/${this.selectedConversationId}/close`);

View File

@@ -42,6 +42,10 @@ function storeNotifications() {
is_read: ''
},
// Delete notification confirm state
showDeleteNotificationConfirm: false,
pendingDeleteNotificationId: null,
// Settings
settings: null,
showSettingsModal: false,
@@ -153,10 +157,6 @@ function storeNotifications() {
* Delete notification
*/
async deleteNotification(notificationId) {
if (!confirm(I18n.t('messaging.confirmations.delete_notification'))) {
return;
}
try {
await apiClient.delete(`/store/notifications/${notificationId}`);