diff --git a/.DS_Store b/.DS_Store index ba6abe3..92a39fe 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/background.js b/background.js index b87cbc4..0e0756a 100644 --- a/background.js +++ b/background.js @@ -6,7 +6,7 @@ let user_id = null; let expires = null; // URL base da API do Bubble no Launchr -const API_URL = 'https://launchr.com.br/version-test/api/1.1/wf'; +const API_URL = 'https://launchr.com.br/api/1.1/wf'; // Recuperar o token e informações armazenadas ao iniciar a extensão chrome.storage.local.get(['authToken', 'negocios_id', 'negocios_nome', 'user_id', 'expires'], (result) => { @@ -21,12 +21,13 @@ chrome.storage.local.get(['authToken', 'negocios_id', 'negocios_nome', 'user_id' // Função para lidar com erros de autenticação function handleAuthError() { - // Remover o token e informações armazenadas authToken = null; - chrome.storage.local.remove(['authToken', 'negocios_id', 'negocios_nome', 'user_id', 'expires'], () => { - console.log('Token de autenticação removido.'); - // Opcional: Notificar o usuário sobre a necessidade de login - }); + chrome.storage.local.remove( + ['authToken', 'negocios_id', 'negocios_nome', 'user_id', 'expires'], + () => { + console.log('Token removido devido a erro de autenticação'); + } + ); } // Listener para mensagens @@ -194,24 +195,64 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { return true; } else if (request.action === 'saveSwipeFile') { + // Verificar se temos um token válido + if (!authToken) { + sendResponse({ + success: false, + error: 'Usuário não autenticado. Por favor, faça login novamente.' + }); + return true; + } + fetch(`${API_URL}/novo_swipe_file`, { method: 'POST', headers: { 'Content-Type': 'application/json', - 'Authorization': authToken + 'Authorization': authToken // Garantir que o token está no formato correto }, - body: JSON.stringify(request.data) + body: JSON.stringify({ + negocio_id: request.data.negocio_id, + conteudo: request.data.conteudo, + nome_autor: request.data.nome_autor, + link_autor: request.data.link_autor, + link_post: request.data.link_post + }) }) .then(response => { - if (!response.ok) throw new Error('Erro na requisição'); + if (response.status === 401) { + // Token expirado ou inválido + handleAuthError(); // Função que limpa o token e força novo login + throw new Error('Sessão expirada. Por favor, faça login novamente.'); + } + if (!response.ok) { + throw new Error('Erro na requisição: ' + response.status); + } return response.json(); }) .then(data => { - sendResponse({ success: true, data }); + if (data.response && data.response.swipe_file_id) { + chrome.storage.local.set({ + lastSwipeFileId: data.response.swipe_file_id + }); + sendResponse({ + success: true, + swipeFileId: data.response.swipe_file_id + }); + } else { + throw new Error('Resposta inválida da API'); + } }) .catch(error => { console.error('Erro ao salvar swipe file:', error); - sendResponse({ success: false, error: error.message }); + sendResponse({ + success: false, + error: error.message || 'Erro ao salvar o swipe file' + }); + + // Se for erro de autenticação, redirecionar para login + if (error.message.includes('401') || error.message.includes('expirada')) { + chrome.runtime.sendMessage({ action: 'showLogin' }); + } }); return true; diff --git a/popup.html b/popup.html index a26f757..87691bc 100644 --- a/popup.html +++ b/popup.html @@ -5,6 +5,47 @@ Launchr + @@ -12,14 +53,14 @@
Launchr - Version 1.3.6 + Versão 1.3.6
-

Let's get started

+

Vamos começar

- +
@@ -29,7 +70,7 @@
- +
@@ -39,14 +80,14 @@
- Forgot password? + Esqueceu sua senha?
- +
- New here? - Create your account + Novo por aqui? + Criar uma conta
@@ -71,7 +112,7 @@ - + + + + diff --git a/popup.js b/popup.js index 860ae6d..9e5f7b1 100644 --- a/popup.js +++ b/popup.js @@ -161,6 +161,7 @@ document.addEventListener('DOMContentLoaded', () => { (response) => { if (response.success) { showLoggedInSection(); + updateNegocioDisplay(); // Atualizar nome do negócio loadPostData(); } else { alert(response.error || 'Erro ao fazer login'); @@ -172,9 +173,10 @@ document.addEventListener('DOMContentLoaded', () => { // Gerenciar envio do post document.getElementById('saveSwipeFileButton')?.addEventListener('click', async () => { const content = document.getElementById('content').value; + const author = document.getElementById('author').value; - // Buscar ID do negócio do storage - chrome.storage.local.get(['negocios_id'], async (result) => { + // Buscar dados do negócio do storage + chrome.storage.local.get(['negocios_id', 'negocios_nome'], async (result) => { if (!result.negocios_id) { alert('Erro ao identificar o negócio.'); return; @@ -184,14 +186,24 @@ document.addEventListener('DOMContentLoaded', () => { const response = await chrome.runtime.sendMessage({ action: 'saveSwipeFile', data: { - negocio: result.negocios_id, - conteudo: content + negocio_id: result.negocios_id, + conteudo: content, + nome_autor: author, + link_autor: document.getElementById('authorProfileLink')?.value || '', + link_post: document.getElementById('postLink')?.value || '' } }); if (response.success) { - alert('Post salvo com sucesso!'); - window.close(); + // Construir URL do post + const postUrl = `https://launchr.com.br/posts/${result.negocios_nome}-${result.negocios_id}?tab=Swipe%20File`; + + // Atualizar link no modal + document.getElementById('viewPostLink').href = postUrl; + + // Mostrar modal + const successModal = new bootstrap.Modal(document.getElementById('successModal')); + successModal.show(); } else { throw new Error(response.error || 'Erro ao salvar o post'); } @@ -202,6 +214,11 @@ document.addEventListener('DOMContentLoaded', () => { }); }); + // Fechar popup quando clicar em "Continuar" + document.querySelector('#successModal .btn-secondary')?.addEventListener('click', () => { + window.close(); + }); + // Gerenciar logout const logoutButton = document.getElementById('logoutButton'); logoutButton?.addEventListener('click', () => { @@ -238,4 +255,43 @@ document.addEventListener('DOMContentLoaded', () => { document.getElementById('content').value = result.currentPostData.content || ''; } }); + + // Atualizar nome do negócio na interface + function updateNegocioDisplay() { + chrome.storage.local.get(['negocios_nome'], (result) => { + const negocioNomeElement = document.getElementById('negocioNome'); + if (negocioNomeElement && result.negocios_nome) { + negocioNomeElement.textContent = result.negocios_nome; + } + }); + } + + // Atualizar interface após login bem-sucedido + loginForm?.addEventListener('submit', async (e) => { + e.preventDefault(); + + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + chrome.runtime.sendMessage( + { + action: 'login', + data: { email, password } + }, + (response) => { + if (response.success) { + showLoggedInSection(); + updateNegocioDisplay(); // Atualizar nome do negócio + loadPostData(); + } else { + alert(response.error || 'Erro ao fazer login'); + } + } + ); + }); + + // Atualizar nome do negócio ao carregar a página + if (document.getElementById('loggedInSection').classList.contains('d-none') === false) { + updateNegocioDisplay(); + } }); \ No newline at end of file