PageSourceSearch

https://www.portalmaioresemelhores.com.br/public/assets/js/core/alert-service.js?v=1.0.0-1790260489

js portalmaioresemelhores.com.br collected 2026-09-24 14:34:57 UTC 4,599 bytes, 130 lines download raw bytes

1/**
2 * Alert Service - Wrapper para o componente Modal
3 * 
4 * Fornece uma API simplificada para alertas e confirmações
5 * inspirada no SweetAlert, mas com a estética premium do portal.
6 */
7const CoreAlert = {
8    /**
9     * Mostra uma mensagem de sucesso
10     */
11    success(title, message, buttonLabel = 'OK', autoClose = true) {
12        return new Promise((resolve) => {
13            Modal.showSuccess(title, message, buttonLabel, resolve, autoClose);
14        });
15    },
16
17    /**
18     * Mostra uma mensagem de erro
19     */
20    error(title, message, buttonLabel = 'Fechar') {
21        return new Promise((resolve) => {
22            Modal.showError(title, message, buttonLabel, resolve);
23        });
24    },
25
26    /**
27     * Mostra um aviso informativo
28     */
29    info(title, message, buttonLabel = 'Entendi') {
30        return new Promise((resolve) => {
31            Modal.showInfo(title, message, buttonLabel, resolve);
32        });
33    },
34
35    /**
36     * Mostra um alerta de atenção/aviso
37     */
38    warning(title, message, buttonLabel = 'Entendi') {
39        return new Promise((resolve) => {
40            const modalId = Modal.create({
41                type: 'warning',
42                title: title,
43                content: `<p class="text-gray-600">${message}</p>`,
44                submitLabel: buttonLabel
45            });
46
47            const button = document.getElementById(`${modalId}-submit-btn`);
48            if (button) {
49                button._resolveHandler = resolve;
50                button.addEventListener('click', () => {
51                    resolve();
52                }, { once: true });
53            }
54        });
55    },
56
57    /**
58     * Solicita confirmação do usuário
59     */
60    confirm(options = {}) {
61        const {
62            title = 'Confirmar',
63            text = 'Deseja realmente prosseguir?',
64            html = null,
65            confirmLabel = 'Confirmar',
66            cancelLabel = 'Cancelar',
67            type = 'warning'
68        } = options;
69
70        return new Promise((resolve) => {
71            const modalId = Modal.create({
72                type: type,
73                title: title,
74                content: html ? `<div class="text-gray-600">${html}</div>` : `<p class="text-gray-600">${Modal.escapeHtml(text)}</p>`,
75                submitLabel: confirmLabel,
76                cancelLabel: cancelLabel
77            });
78
79            // Handler único de resolução para evitar múltiplas chamadas
80            let isResolved = false;
81            const safeResolve = (value) => {
82                if (isResolved) return;
83                isResolved = true;
84                resolve(value);
85            };
86
87            // Se o usuário clicar em confirmar
88            const submitButton = document.getElementById(`${modalId}-submit-btn`);
89            if (submitButton) {
90                submitButton.addEventListener('click', () => {
91                    safeResolve({ isConfirmed: true });
92                    Modal.closeAndRemove(modalId);
93                }, { once: true });
94            }
95
96            // Se o usuário clicar em cancelar
97            // O seletor busca botões que não são o de submit dentro do footer
98            const footerButtons = document.querySelectorAll(`#${modalId} .pb-10 button`);
99            footerButtons.forEach(btn => {
100                if (btn.id !== `${modalId}-submit-btn`) {
101                    btn.addEventListener('click', () => {
102                        safeResolve({ isConfirmed: false });
103                        Modal.closeAndRemove(modalId);
104                    }, { once: true });
105                }
106            });
107
108            // Backdrop click também deve resolver como false
109            const backdrop = document.querySelector(`#${modalId} .fixed.inset-0:not(.relative)`);
110            if (backdrop) {
111                backdrop.addEventListener('click', () => {
112                    safeResolve({ isConfirmed: false });
113                    Modal.closeAndRemove(modalId);
114                }, { once: true });
115            }
116
117            // ESC key handler para este modal específico
118            const escHandler = (e) => {
119                if (e.key === 'Escape') {
120                    safeResolve({ isConfirmed: false });
121                    Modal.closeAndRemove(modalId);
122                    document.removeEventListener('keydown', escHandler);
123                }
124            };
125            document.addEventListener('keydown', escHandler);
126        });
127    }
128};
129
130window.CoreAlert = CoreAlert;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.