diff --git a/manager/components/PreMatricula.tsx b/manager/components/PreMatricula.tsx index 8f53495..ee54fcc 100644 --- a/manager/components/PreMatricula.tsx +++ b/manager/components/PreMatricula.tsx @@ -53,6 +53,7 @@ const PreMatricula: React.FC = ({ data, onConvert }) => { const [editingCampo, setEditingCampo] = useState(null); const [showNewField, setShowNewField] = useState(false); const [newField, setNewField] = useState({ label: '', tipo: 'text', placeholder: '', obrigatorio: false, opcoes: '' }); + const [uploadProgress, setUploadProgress] = useState(null); const [showMassModal, setShowMassModal] = useState(false); const [targetType, setTargetType] = useState('todos'); @@ -505,22 +506,43 @@ const PreMatricula: React.FC = ({ data, onConvert }) => {
- {config?.logoUrl ? ( -
-
- Preview - + {uploadProgress !== null ? ( +
+ +
+

Enviando e compactando imagem...

+

{uploadProgress}% concluído

+
+
+
+
+
+ ) : config?.logoUrl ? ( +
+
+ Preview +
+ + Pré-visualização do Link + +
+
+
+ {config.logoUrl.split('/').pop()} +
-
) : (
@@ -533,21 +555,39 @@ const PreMatricula: React.FC = ({ data, onConvert }) => { if (!file) return; const formData = new FormData(); formData.append('file', file); - try { - const res = await fetch('/api/prematricula/upload', { - method: 'POST', - body: formData - }); - if (res.ok) { - const resData = await res.json(); - setConfig(prev => prev ? { ...prev, logoUrl: resData.url } : prev); - showAlert('Sucesso', 'Imagem de visualização carregada!', 'success'); + + setUploadProgress(0); + const xhr = new XMLHttpRequest(); + + xhr.upload.addEventListener('progress', (event) => { + if (event.lengthComputable) { + const percent = Math.round((event.loaded / event.total) * 100); + setUploadProgress(percent); + } + }); + + xhr.addEventListener('load', () => { + setUploadProgress(null); + if (xhr.status >= 200 && xhr.status < 300) { + try { + const resData = JSON.parse(xhr.responseText); + setConfig(prev => prev ? { ...prev, logoUrl: resData.url } : prev); + showAlert('Sucesso', 'Imagem de visualização carregada!', 'success'); + } catch (err) { + showAlert('Erro', 'Falha ao processar resposta do servidor.', 'error'); + } } else { showAlert('Erro', 'Falha ao carregar imagem.', 'error'); } - } catch (err) { + }); + + xhr.addEventListener('error', () => { + setUploadProgress(null); showAlert('Erro', 'Erro de conexão ao enviar imagem.', 'error'); - } + }); + + xhr.open('POST', '/api/prematricula/upload'); + xhr.send(formData); }} />