From f7fb7f963ca29b09ac87017264e73b5c501348af Mon Sep 17 00:00:00 2001 From: Lucas Santana Date: Tue, 17 Dec 2024 18:50:58 -0300 Subject: [PATCH] initial commit --- .DS_Store | Bin 0 -> 6148 bytes background.js | 181 ++++++++++++++++++++++++++ content.css | 60 +++++++++ content.js | 74 +++++++++++ icon128.png | Bin 0 -> 2881 bytes icon16.png | Bin 0 -> 229 bytes icon32.png | Bin 0 -> 460 bytes icon48.png | Bin 0 -> 742 bytes images/icon128.png | Bin 0 -> 2881 bytes images/icon16.png | Bin 0 -> 229 bytes images/icon32.png | Bin 0 -> 460 bytes images/icon48.png | Bin 0 -> 742 bytes images/logo.png | Bin 0 -> 51410 bytes index.html | 12 ++ index.js | 0 logo.png | Bin 0 -> 51410 bytes manifest.json | 38 ++++++ menu.html | 24 ++++ menu.js | 23 ++++ package.json | 8 ++ popup.html | 53 ++++++++ popup.js | 130 ++++++++++++++++++ scripts/copy-assets.js | 34 +++++ src/assets/createDefaultIcon.ts | 19 +++ src/assets/generateIcons.ts | 19 +++ src/assets/icon128.png | Bin 0 -> 2881 bytes src/assets/icon16.png | Bin 0 -> 229 bytes src/assets/icon32.png | Bin 0 -> 460 bytes src/assets/icon48.png | Bin 0 -> 742 bytes src/assets/logo.png | Bin 0 -> 51410 bytes src/background/index.ts | 123 +++++++++++++++++ src/components/LoginForm.tsx | 97 ++++++++++++++ src/components/Menu.tsx | 53 ++++++++ src/content/components/SaveButton.css | 59 +++++++++ src/content/components/SaveButton.tsx | 60 +++++++++ src/content/index.css | 67 ++++++++++ src/content/index.js | 0 src/content/index.ts | 72 ++++++++++ src/content/style.css | 67 ++++++++++ src/index.css | 3 + src/popup/Router.tsx | 44 +++++++ src/popup/index.tsx | 14 ++ src/popup/styles.css | 128 ++++++++++++++++++ src/store/index.ts | 11 ++ src/store/slices/authSlice.ts | 33 +++++ src/styles.css | 20 +++ styles.css | 103 +++++++++++++++ tailwind.config.js | 10 ++ vite.config.ts | 35 +++++ 49 files changed, 1674 insertions(+) create mode 100644 .DS_Store create mode 100644 background.js create mode 100644 content.css create mode 100644 content.js create mode 100644 icon128.png create mode 100644 icon16.png create mode 100644 icon32.png create mode 100644 icon48.png create mode 100644 images/icon128.png create mode 100644 images/icon16.png create mode 100644 images/icon32.png create mode 100644 images/icon48.png create mode 100644 images/logo.png create mode 100644 index.html create mode 100644 index.js create mode 100644 logo.png create mode 100644 manifest.json create mode 100644 menu.html create mode 100644 menu.js create mode 100644 package.json create mode 100644 popup.html create mode 100644 popup.js create mode 100644 scripts/copy-assets.js create mode 100644 src/assets/createDefaultIcon.ts create mode 100644 src/assets/generateIcons.ts create mode 100644 src/assets/icon128.png create mode 100644 src/assets/icon16.png create mode 100644 src/assets/icon32.png create mode 100644 src/assets/icon48.png create mode 100644 src/assets/logo.png create mode 100644 src/background/index.ts create mode 100644 src/components/LoginForm.tsx create mode 100644 src/components/Menu.tsx create mode 100644 src/content/components/SaveButton.css create mode 100644 src/content/components/SaveButton.tsx create mode 100644 src/content/index.css create mode 100644 src/content/index.js create mode 100644 src/content/index.ts create mode 100644 src/content/style.css create mode 100644 src/index.css create mode 100644 src/popup/Router.tsx create mode 100644 src/popup/index.tsx create mode 100644 src/popup/styles.css create mode 100644 src/store/index.ts create mode 100644 src/store/slices/authSlice.ts create mode 100644 src/styles.css create mode 100644 styles.css create mode 100644 tailwind.config.js create mode 100644 vite.config.ts diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ced8fec9c678680503d12078d8af6762342e0c3e GIT binary patch literal 6148 zcmeHK%}T>S5Z<-5Nhm@N7CZ*L7K|WT@e*Qv0V8@)sR;=+m}X0p+CwSirZ42H_&m<+ zZVtiVQN+%`?l(I>yO|HNKa4T%FXLmzY{r-g4UwbLB4}=P?dV`cF6T&C5v_`Ol!>Ti zqQ7XuZ||{`%~;5$toi*P(L76w(se)iPN%!uGYre<8;`-WSOsNRE(?mevCP5Y(Z%)TC7b2qO|i&} zJ`T+OR#s0%69dG+PYmGx;6Ow4G*$}b)&U(}pV8k%L;)S&5{QmQPh+JJJRn@90;*K5 zpBP-FgWb__p2kX{N@rZI4D;xf>&FY1tApK<;f#94PSv(|z31Puk_DpWu~Z(IUkfcwaSbSl4tI>dPzD}^`< S+GRQ*T?8Z{)DZ)}z`z&uK}&1^ literal 0 HcmV?d00001 diff --git a/background.js b/background.js new file mode 100644 index 0000000..5676142 --- /dev/null +++ b/background.js @@ -0,0 +1,181 @@ +let currentPostData = {}; +let authToken = null; +let negocios_id = null; +let negocios_nome = null; +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'; + +// 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) => { + if (result.authToken) { + authToken = result.authToken; + negocios_id = result.negocios_id; + negocios_nome = result.negocios_nome; + user_id = result.user_id; + expires = result.expires; + } +}); + +// 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 + }); +} + +// Listener para mensagens +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.action === 'storePostData') { + currentPostData = request.data || {}; + sendResponse({ success: true }); + } else if (request.action === 'getPostData') { + sendResponse({ data: currentPostData }); + } else if (request.action === 'savePost') { + const postDataToSave = request.data; + let responseSent = false; + + if (!postDataToSave) { + sendResponse({ success: false, error: 'Dados do post não fornecidos.' }); + return; + } + + if (!authToken) { + handleAuthError(); + sendResponse({ success: false, error: 'Usuário não autenticado. Faça login novamente.' }); + return true; + } + + const dataToSend = { + content: postDataToSave.content, + author: postDataToSave.author, + authorProfileLink: postDataToSave.authorProfileLink, + date: postDataToSave.date, + postLink: postDataToSave.postLink, + category: postDataToSave.category, + user_id: user_id, + negocios_id: negocios_id + }; + + fetch(`${API_URL}/novo_swipe_file`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': authToken + }, + body: JSON.stringify(dataToSend) + }) + .then(response => { + if (response.ok) { + return response.json(); + } else if (response.status === 401) { + handleAuthError(); + if (!responseSent) { + sendResponse({ success: false, error: 'Token expirado ou inválido. Faça login novamente.' }); + responseSent = true; + } + throw new Error('Token inválido ou expirado.'); + } else { + return response.json().then(data => { + if (!responseSent) { + sendResponse({ success: false, error: data.message || 'Erro ao salvar o post.' }); + responseSent = true; + } + throw new Error(data.message || 'Erro na requisição.'); + }); + } + }) + .then(data => { + console.log('Post salvo com sucesso:', data); + if (!responseSent) { + sendResponse({ success: true }); + responseSent = true; + } + }) + .catch(error => { + console.error('Erro ao salvar o post:', error); + if (!responseSent) { + sendResponse({ success: false, error: 'Erro ao salvar o post.' }); + responseSent = true; + } + }); + + return true; + } else if (request.action === 'login') { + console.log('Iniciando o processo de login...'); + const { email, password } = request.data || {}; + let responseSent = false; + + if (!email || !password) { + sendResponse({ success: false, error: 'E-mail ou senha não fornecidos.' }); + console.log('Email ou senha não fornecidos'); + return; + } + + fetch(`${API_URL}/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + email: email, + password: password + }) + }) + .then(response => { + if (response.ok) { + return response.json(); + } else { + if (!responseSent) { + sendResponse({ success: false, error: 'Erro na autenticação. Verifique suas credenciais.' }); + responseSent = true; + } + throw new Error('Erro na autenticação.'); + } + }) + .then(data => { + if (data.status === 'success' && data.response && data.response.token) { + authToken = 'Bearer ' + data.response.token; + negocios_id = data.response.negocios_id; + negocios_nome = data.response.negocios_nome; + user_id = data.response.user_id; + expires = data.response.expires; + + chrome.storage.local.set({ authToken, negocios_id, negocios_nome, user_id, expires }, () => { + console.log('Usuário autenticado com sucesso.'); + if (!responseSent) { + sendResponse({ success: true }); + responseSent = true; + } + }); + } else { + console.error('Erro na autenticação:', data); + if (!responseSent) { + sendResponse({ success: false, error: 'Falha na autenticação. Verifique suas credenciais.' }); + responseSent = true; + } + } + }) + .catch(error => { + console.error('Erro na autenticação:', error); + if (!responseSent) { + sendResponse({ success: false, error: 'Erro ao realizar o login. Por favor, tente novamente.' }); + responseSent = true; + } + }); + + return true; + } else if (request.action === 'logout') { + authToken = null; + chrome.storage.local.remove(['authToken', 'negocios_id', 'negocios_nome', 'user_id', 'expires'], () => { + console.log('Usuário deslogado com sucesso.'); + sendResponse({ success: true }); + }); + return true; + } +}); \ No newline at end of file diff --git a/content.css b/content.css new file mode 100644 index 0000000..c8cf368 --- /dev/null +++ b/content.css @@ -0,0 +1,60 @@ +/* Estilos do botão */ +.launchr-save-button { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + background-color: #4F46E5; + color: white; + border: none; + margin-left: 8px; + min-width: 150px; +} + +.launchr-save-button:hover:not(:disabled) { + background-color: #4338CA; +} + +.launchr-save-button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.launchr-save-button.loading { + background-color: #6B7280; +} + +.launchr-save-button.success { + background-color: #10B981; +} + +.launchr-save-button.error { + background-color: #EF4444; +} + +.launchr-save-button.auth { + background-color: #F59E0B; +} + +/* Animação de loading */ +.launchr-save-button.loading::after { + content: ''; + width: 16px; + height: 16px; + margin-left: 8px; + border: 2px solid #fff; + border-radius: 50%; + border-top-color: transparent; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/content.js b/content.js new file mode 100644 index 0000000..95dbae5 --- /dev/null +++ b/content.js @@ -0,0 +1,74 @@ +// Função para extrair dados do post atual +function extractPostData() { + // Selecionar o post atual + const post = document.querySelector('.occludable-update'); + + if (!post) { + console.error('Post não encontrado.'); + return null; + } + + // Extrair informações do post + const contentElement = post.querySelector('.feed-shared-update-v2__description, .break-words, [data-test-id="feed-update-message"]'); + const authorElement = post.querySelector('.feed-shared-actor__name, .update-components-actor__name'); + const dateElement = post.querySelector('span.feed-shared-actor__sub-description span[aria-hidden="true"], span.update-components-actor__sub-description time'); + + const postContent = contentElement ? contentElement.innerText.trim() : ''; + const postAuthor = authorElement ? authorElement.innerText.trim() : ''; + + // Obter o link do perfil do autor + const authorProfileLinkElement = authorElement ? authorElement.closest('a') : null; + const baseUrl = 'https://www.linkedin.com'; + const authorProfileLink = authorProfileLinkElement ? new URL(authorProfileLinkElement.getAttribute('href'), baseUrl).href : ''; + + // Obter a data do post + const postDate = dateElement ? dateElement.innerText.trim() : ''; + + // Obter o link do post + const postLinkElement = post.querySelector('a[href*="/feed/update/"], a[data-control-name="share_link"], a[href*="/posts/"]'); + const postLink = postLinkElement ? postLinkElement.href : window.location.href; + + const postData = { + content: postContent, + author: postAuthor, + authorProfileLink: authorProfileLink, + date: postDate, + postLink: postLink + }; + + return postData; +} + +// Adicionar um botão na página para salvar o post +function addSavePostButton() { + const button = document.createElement('button'); + button.innerText = 'Salvar Post'; + button.id = 'savePostButton'; + button.style.position = 'fixed'; + button.style.top = '10px'; + button.style.right = '10px'; + button.style.zIndex = '9999'; + + button.addEventListener('click', () => { + const postData = extractPostData(); + + if (postData) { + // Enviar os dados do post para o background script + chrome.runtime.sendMessage({ action: 'storePostData', data: postData }, (response) => { + if (response && response.success) { + console.log('Dados do post enviados para o background script.'); + alert('Dados do post prontos para serem salvos. Clique no ícone da extensão para prosseguir.'); + } else { + console.error('Erro ao enviar dados do post:', response.error); + } + }); + } else { + alert('Não foi possível extrair os dados do post.'); + } + }); + + document.body.appendChild(button); +} + +// Chamar a função para adicionar o botão +addSavePostButton(); \ No newline at end of file diff --git a/icon128.png b/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e79644c8cc6ee6f63d067cd1fed369b9c39b0e GIT binary patch literal 2881 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 literal 0 HcmV?d00001 diff --git a/icon32.png b/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf3b7b6ca7c205f5d3c9210875707620ff352f6 GIT binary patch literal 460 zcmV;-0WPx$hDk(0R9Hu2WEfz;IKcKZj5=U61SkrD<}tF(AzLHJ;sJF4%yN)J zF8=(+(DC2`S)L(F6SD6g{`mB8LLD5FxgPx%ph-kQRA@u(m%nZkK@i4gFG6P}FA>18QxQc$CcZa7Af*fz5fpT^5fl`N3L&UL zN`(A5Rf8G(nW|6{~ffKY;<1T`F3w-ZCSc&Z+GVV%{M!@$6(AK zHs<;v0~ob~nFE;vh84(KXix#GMQ@3}zwI~P85TNryHy8jMGtxAir=u7$68<^UX;!j zLxFVKPQ`O~_aj+evOrwi%X|rQjsqNG z#qSpxZY|1@N(S)s(n3)E9CLs}+}qvki*4(>KnC#m;yiNk9AY)*pxSVO1V9M;*7_GX z@aWg)$hbCKFa~%t>y;TogP(z&<}p0q`!Xw)BxeTzG_?WbqC!x9CX@n#hnZQ zO#c~3090HMLXWW*0EkI75`d_RR}1Ak4rA+aKQQ4v4A{yozg|^!ZqPwazqFP2rSW+Hq z0OFg_1w8+$Nt#ZoVx!h+wUADtS2HCP|G$GKlTOT`0zA9CfK5aw5Z-%+3c!=CPS4?0 zcZ%fF7Uz_;77E{wY#d&zhuE~Qb@p3zKu1X0wHZL#%2Dmh9H6RX+Blg5X)8yyZ|oiT Y4}-8jK$-K{y8r+H07*qoM6N<$f;7BM!T-kisIUdQ$73^y^-Wyc6&008Wl^)8qm5dQC=Q3t!} z{EgNFKt86r+Mu{YXc_>_&gBbQ=4AW%v>>98E^iBcc(9&<&*sSj5Y=z)x@smP*Jyz) zTmPhqn5LfQlKlxx#A8h<9*f+#%JMr%cJ>0P3!G0hq~`h3Rnov*8T$D9@j%DTGVZW{CYh+g!7 z&*X65-GXK|#RxG_{=?zHz-n3ji2~iv^kjA3TJo2UEc&-;x&#RLuFl#Wl5OZ4OEO;P zuu}xzYtv#WOAKWfKK<4DYe?#G51`b7(5{dsxb!k1sZCA~4N zWoL#(SCm>H1Y4%FqF-iu%)!gc4_lL3N10K(ls4+&DpHY96fY2sbZb=Aa@@$COfpX{ zz&upcIFeHRr8!1o`{}ozSAg^nPxjzt!;7k0xfW0V{Wh%wrX&s5T?p^v)RX|De9^_0 zdzckbMXR%46uIpf?ww){mS)WdH#6+Dxe#7YfxCHmxN<5pmD+TinNrdlHi6-CoRm~C00eCCa|iprOd_<&O;?pd1wLk>e7|AJD2@;v5D z7N?S4xzQ#e3v}REuc@33+PVnQ2I0kTEi?fQ1+%~(k_n@de5$UU&^a*9GU-5ia7r&; zrW}B$8j|61$ZtIG7E2Sub^~ z`$_N6uEG1$XMF^jh(5F2Q1bC^@%tl#7yqc3fi9=<{6>V@u`UTa1)4>rPI8@HH`qGtmOZuasxdA20Pb(49BOM}^7V_)M5x zz{bq}itARB0Ef$JY_EdSr7U(c9l&aBZ7~)zn)Wixc+cHG4-xo?UqQ4D!lIa+YL0LQ zzQa(mgU2TnpX)$wKjnAiGDj@N5_fBhnH;fLJn@Q>5ef;;)1=>gd^m*sl$V+x<{-R( zNFXsZnB7#O&gw(`xncc>5<3BhEqX^TlF$O7xXT|H_wy%`&Qj(Pux%*usG0OWGrY3T z&Q#fF0ZHtLx)WN?lZ`xWUIF80GQcIcg2UJE*!jCRkzu4ZZ`0cJ8^&Xsn$^yGoYM_}6$y ziui=2cR1;+M+N%QQ08%R*QR;CNMX-{bm8HTG&~n>Ab6C>O9Av&SE+t0jk9N0g}}pZ zBGZ;fku6lf-S}MCjvc5#;gCnW>x@Hy(a(erkwT#O$n#};F^wA6RTi30!HMj4%{O}y zeioFv@AyQ0ItIP_<1(ksQ5)0#CTa{qMB-L67;E)dziu9^2LA3GAxoh3c&$UZ2E(Qg z5%jSc77Bi!+gnJ&QG&qSVG==+k9fVXafW{>`JU0u7em^s{Eg*HHY1AVSBQnP7f^6& z>WM1y?^>gRjB8!*g4^r_nh1eL^~4jDsjwFr)wDyfc&+b6vy<;yG~+;K`<}N9CncWK zFo5GZ+PW&6+e)Ak5Y zmf#pTeaPV|t_PkJ*DI{7Su^%Yy#tDx&A1J$yZaI>Q7PlZb)~+}tnf?LgGyOUUBq>o z5HSzow}@qYD@}g>!dI+jk+Ef=dS%;PX<1>qPNl7cgH4GPmHOy^NZ&OW);-L^ng zc$X`oGQ$MAt@xmh`7Y6mtgN&o3Irlv+l;#Z{{2jABJl+@w9%e-YdB=UXlI0YXI(`Z z^hG*bA#V?Ep5Bs={9_rP%$qn-*9C5?KUmVbnDQ{9nR@l?sv2T5wRc48k-EUHE!B8f zix#x4ithTQ;66Y27^x)*giv~4y_;JR;V(q(u6d@z-Kb%AaZmqNT9M?h6lMSEZFZ*y zFcYdisM^$X1Ds*5SmVb4j~`LcNLs&m;7?sq*IysZ)`uVf5_t_r#zKX2^8YfSvqDq1 zUHPgl=OUTG7bpLXJ(x6**&f(X2&YIIdv5h@cf2aJx_YFD0p0R zxodQ_yH5^BbIzBw0@dO41t~1jq#8k)(jO-8)bP{2F%0rzhyQFERr*Ha1nCo}KX9R6 zQ!S-NzGT+{+PZPm{Uw1zVn(XP+-^V*w1?b$cGzi^yQL^Z^<4CxXyeple#gNRrqQ%8 zbwGGDoim^r`t>H0aI6OVVK0hHr=z^ghvJ}3=`u5Ohm$O)Orrx@jsdPZ`qw)}1n|Bx zLo-@0^A}4+?1LGml%rpTP;4A4al4COAHaiPI0Ccw*K&A2hSOrvOW#a(~fB60jR0$Xx?K0~`nGt(f#f%lR$s z9f~B|Cq})v6^I^F@2kzhX#FX6EWDG$lKy$p6`kkYv8(Kk>qLHa>T)eP4#9Lq@sQns zs#|U~n3w)LKMfzsNyGiUp9FIdFxth0i&k-@p;+57UCfT?Ma;VyV06LYy)78&qol`;+0LgY+{Qv*} literal 0 HcmV?d00001 diff --git a/images/icon32.png b/images/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf3b7b6ca7c205f5d3c9210875707620ff352f6 GIT binary patch literal 460 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

xNi*Y8#y>am+NK4`+JO7}d^kC9X-9jDX)Vp= z?V`|Z5CvV;bVlc3e@7y>vp#5sWiH_>)MH(Vz;cN$u1E9YU*+(RXN0(@bA0rF(#RS# zh;=#Xo~l!1AKK27mI(j}hca}3g@su)wAMr&adm@55r4A@mODz#Au~^9aVZC#Ja@F$ zv;Nm81YC8ARcyD65NFV-KXqMKBABbhUp(A3Gh^pt`Y^IP7OrJcc0?e$^Zjn!aHZr0 zrq(G3*xua9&viU%<-301Tk4{;7T5r$a{g5fa#7>>C@*ei_$snj)%7+^d26~$%_4sG zm;oc6ZZww&S(L;_;$ZmZQbiJXgH?34RjmxMnsw3U^gqsAD%d@40-;8Z%bu5EDPQY_ z7pz@k$OaC2xVIlvr96Dzff!?B2O+u!Ho;vy^A4} zM~TC8Z>k6vd1Q?2kVablFrui}Tj=O}$pLzI42WgofVn8aNy2$rEdZW3Ks=oXKD=Ls zE;3^T1&L7&Ca}BK&j&Zkl-jddHg*fwWV3(_uWR|a@o8Oaa#Yq|60+G}x-k9O(Jkg# z%yF_&>TiPSiGe`t26L6&g+ln4b*^d{e-h!;= zz-FZY$Xo#3c$aYZ$R9Kf5+m?Ke!5{1*DP%FPknG1i0uHgW^@Y(y9 zFs1yiLk@`6e`1B`m;ZDQAOV!~e@fv$rSSi^QrQ0_c3y^1n%089X)%k4?m-LN K{ki72i2ngw2%O~r literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..97b3de0 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + Launchr + + +

+ + + \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..e69de29 diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d982c64c1f75f836be9202c671d69592b15d2790 GIT binary patch literal 51410 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
bA>+GLxdkWp}*95$B_^OO@;EYQPY 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

xNi*Y8#y>am+NK4`+JO7}d^kC9X-9jDX)Vp= z?V`|Z5CvV;bVlc3e@7y>vp#5sWiH_>)MH(Vz;cN$u1E9YU*+(RXN0(@bA0rF(#RS# zh;=#Xo~l!1AKK27mI(j}hca}3g@su)wAMr&adm@55r4A@mODz#Au~^9aVZC#Ja@F$ zv;Nm81YC8ARcyD65NFV-KXqMKBABbhUp(A3Gh^pt`Y^IP7OrJcc0?e$^Zjn!aHZr0 zrq(G3*xua9&viU%<-301Tk4{;7T5r$a{g5fa#7>>C@*ei_$snj)%7+^d26~$%_4sG zm;oc6ZZww&S(L;_;$ZmZQbiJXgH?34RjmxMnsw3U^gqsAD%d@40-;8Z%bu5EDPQY_ z7pz@k$OaC2xVIlvr96Dzff!?B2O+u!Ho;vy^A4} zM~TC8Z>k6vd1Q?2kVablFrui}Tj=O}$pLzI42WgofVn8aNy2$rEdZW3Ks=oXKD=Ls zE;3^T1&L7&Ca}BK&j&Zkl-jddHg*fwWV3(_uWR|a@o8Oaa#Yq|60+G}x-k9O(Jkg# z%yF_&>TiPSiGe`t26L6&g+ln4b*^d{e-h!;= zz-FZY$Xo#3c$aYZ$R9Kf5+m?Ke!5{1*DP%FPknG1i0uHgW^@Y(y9 zFs1yiLk@`6e`1B`m;ZDQAOV!~e@fv$rSSi^QrQ0_c3y^1n%089X)%k4?m-LN K{ki72i2ngw2%O~r literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..d0686d6 --- /dev/null +++ b/manifest.json @@ -0,0 +1,38 @@ +{ + "manifest_version": 2, + "name": "Sua Extensão", + "version": "1.0", + "description": "Extensão para salvar posts do LinkedIn e gerar mensagens personalizadas.", + "permissions": [ + "activeTab", + "storage", + "contextMenus", + "tabs", + "https://launchr.com.br/*", + "https://api.openai.com/*" + ], + "background": { + "scripts": ["background.js"], + "persistent": false + }, + "browser_action": { + "default_popup": "popup.html", + "default_title": "Minha Extensão", + "default_icon": { + "16": "icon16.png", + "48": "icon48.png", + "128": "icon128.png" + } + }, + "content_scripts": [ + { + "matches": ["*://www.linkedin.com/*"], + "js": ["content.js"] + } + ], + "icons": { + "16": "icon16.png", + "48": "icon48.png", + "128": "icon128.png" + } +} \ No newline at end of file diff --git a/menu.html b/menu.html new file mode 100644 index 0000000..09d6bad --- /dev/null +++ b/menu.html @@ -0,0 +1,24 @@ + + + + + Login + + + +

+

Login

+
+ + + + + + + +
+
+ + + + \ No newline at end of file diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..b39d4e7 --- /dev/null +++ b/menu.js @@ -0,0 +1,23 @@ +document.addEventListener('DOMContentLoaded', () => { + const loginForm = document.getElementById('loginForm'); + + loginForm.addEventListener('submit', function(event) { + event.preventDefault(); + + const email = document.getElementById('emailInput').value.trim(); + const password = document.getElementById('passwordInput').value.trim(); + + if (email && password) { + chrome.runtime.sendMessage({ action: 'login', data: { email: email, password: password } }, function(response) { + if (response && response.success) { + alert('Login realizado com sucesso!'); + window.close(); + } else { + alert('Falha no login: ' + (response.error || 'Erro desconhecido.')); + } + }); + } else { + alert('Por favor, preencha os campos de e-mail e senha.'); + } + }); + }); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..1a2488c --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "watch": "vite build --watch" + } +} \ No newline at end of file diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..0a16961 --- /dev/null +++ b/popup.html @@ -0,0 +1,53 @@ + + + + + Salvar Post + + + +
+

Salvar Post

+
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..29e7075 --- /dev/null +++ b/popup.js @@ -0,0 +1,130 @@ +document.addEventListener('DOMContentLoaded', () => { + // Recuperar os dados do post do background script + chrome.runtime.sendMessage({ action: 'getPostData' }, (response) => { + if (response && response.data) { + const postData = response.data; + + // Preencher os campos com os dados do post + document.getElementById('author').value = postData.author || ''; + document.getElementById('authorProfileLink').value = postData.authorProfileLink || ''; + document.getElementById('postLink').value = postData.postLink || ''; + document.getElementById('date').value = postData.date || ''; + document.getElementById('content').value = postData.content || ''; + } else { + console.log('Nenhum dado do post disponível.'); + } + }); + + // Referência ao popup e aos botões + const successPopup = document.getElementById('successPopup'); + const cancelButton = document.getElementById('cancelButton'); + const viewButton = document.getElementById('viewButton'); + + let negocios_nome = ''; + let negocios_id = ''; + + // Recuperar negocios_nome e negocios_id do storage + chrome.storage.local.get(['negocios_nome', 'negocios_id'], (result) => { + if (result.negocios_nome && result.negocios_id) { + negocios_nome = result.negocios_nome; + negocios_id = result.negocios_id; + } else { + console.error('Não foi possível obter as informações do negócio.'); + } + }); + + // Função para exibir o popup de sucesso + function showSuccessPopup() { + successPopup.style.display = 'flex'; + } + + // Evento para o botão de cancelar e fechar o popup + cancelButton.addEventListener('click', () => { + successPopup.style.display = 'none'; + // Fechar o popup principal + window.close(); + }); + + // Evento para o botão de visualizar o Swipe File + viewButton.addEventListener('click', () => { + if (negocios_nome && negocios_id) { + // Construir o link para visualizar o Swipe File + const baseUrl = 'https://launchr.com.br'; + const encodedNegociosNome = encodeURIComponent(negocios_nome); + const swipeFileUrl = `${baseUrl}/posts/${encodedNegociosNome}-${negocios_id}?tab=Swipe%20File`; + + // Abrir o link em uma nova aba + chrome.tabs.create({ url: swipeFileUrl }, () => { + // Fechar o popup após abrir a nova aba + window.close(); + }); + } else { + alert('Informações do negócio não disponíveis.'); + } + }); + + // Lidar com o clique no botão de salvar + const saveButton = document.getElementById('saveButton'); + if (saveButton) { + saveButton.addEventListener('click', () => { + try { + // Obter dados atualizados do formulário + const updatedData = { + author: document.getElementById('author')?.value || '', + authorProfileLink: document.getElementById('authorProfileLink')?.value || '', + postLink: document.getElementById('postLink')?.value || '', + date: document.getElementById('date')?.value || '', + content: document.getElementById('content')?.value || '', + category: document.getElementById('category')?.value || '' + }; + + if (!updatedData.category) { + alert('Por favor, selecione uma categoria.'); + return; + } + + // Desabilitar o botão para evitar múltiplos cliques + saveButton.disabled = true; + saveButton.innerText = 'Salvando...'; + + // Enviar dados para o background script para salvar + chrome.runtime.sendMessage({ action: 'savePost', data: updatedData }, (response) => { + if (response && response.success) { + // Exibir o popup de sucesso + showSuccessPopup(); + } else { + // Exibir mensagem de erro + alert(response.error || 'Houve um erro ao enviar o post. Por favor, tente novamente.'); + // Reativar o botão de salvar + saveButton.disabled = false; + saveButton.innerText = 'Salvar'; + } + }); + } catch (error) { + console.error('Erro ao preparar os dados para salvar:', error); + alert('Ocorreu um erro ao preparar os dados. Por favor, tente novamente.'); + // Reativar o botão de salvar + saveButton.disabled = false; + saveButton.innerText = 'Salvar'; + } + }); + } else { + console.error('Elemento saveButton não encontrado.'); + } + + // Lidar com o clique no botão de logout (se aplicável) + const logoutButton = document.getElementById('logoutButton'); + if (logoutButton) { + logoutButton.addEventListener('click', () => { + if (confirm('Você realmente deseja fazer logout?')) { + chrome.runtime.sendMessage({ action: 'logout' }, (response) => { + if (response && response.success) { + window.close(); + } else { + alert('Erro ao realizar logout.'); + } + }); + } + }); + } + }); \ No newline at end of file diff --git a/scripts/copy-assets.js b/scripts/copy-assets.js new file mode 100644 index 0000000..31ef5f1 --- /dev/null +++ b/scripts/copy-assets.js @@ -0,0 +1,34 @@ +import { copyFileSync, mkdirSync } from 'fs'; +import { resolve, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const distDir = resolve(__dirname, '../dist'); +const assetsDir = resolve(distDir, 'src/assets'); + +// Criar diretórios necessários +mkdirSync(distDir, { recursive: true }); +mkdirSync(assetsDir, { recursive: true }); + +// Lista de arquivos para copiar +const files = [ + { src: '../manifest.json', dest: '../dist/manifest.json' }, + { src: '../src/assets/icon16.png', dest: '../dist/src/assets/icon16.png' }, + { src: '../src/assets/icon32.png', dest: '../dist/src/assets/icon32.png' }, + { src: '../src/assets/icon48.png', dest: '../dist/src/assets/icon48.png' }, + { src: '../src/assets/icon128.png', dest: '../dist/src/assets/icon128.png' }, + { src: '../src/content/index.css', dest: '../dist/content.css' } +]; + +// Copiar arquivos +files.forEach(file => { + try { + copyFileSync( + resolve(__dirname, file.src), + resolve(__dirname, file.dest) + ); + console.log(`Copiado: ${file.src} -> ${file.dest}`); + } catch (err) { + console.error(`Erro ao copiar ${file.src}:`, err); + } +}); \ No newline at end of file diff --git a/src/assets/createDefaultIcon.ts b/src/assets/createDefaultIcon.ts new file mode 100644 index 0000000..658f27a --- /dev/null +++ b/src/assets/createDefaultIcon.ts @@ -0,0 +1,19 @@ +import sharp from 'sharp'; +import { resolve } from 'path'; + +// Criar um ícone SVG simples +const svgIcon = ` + + + + L + + +`; + +// Salvar como PNG +sharp(Buffer.from(svgIcon)) + .png() + .toFile(resolve(__dirname, 'icon.png')) + .then(() => console.log('Ícone padrão criado')) + .catch(err => console.error('Erro ao criar ícone padrão:', err)); \ No newline at end of file diff --git a/src/assets/generateIcons.ts b/src/assets/generateIcons.ts new file mode 100644 index 0000000..129ab8b --- /dev/null +++ b/src/assets/generateIcons.ts @@ -0,0 +1,19 @@ +import sharp from 'sharp'; +import { mkdirSync } from 'fs'; +import { resolve } from 'path'; + +const sizes = [16, 32, 48, 128]; +const inputIcon = resolve(__dirname, 'icon.png'); +const outputDir = resolve(__dirname, '../../dist/src/assets'); + +// Criar diretório de saída +mkdirSync(outputDir, { recursive: true }); + +// Gerar ícones em diferentes tamanhos +sizes.forEach(size => { + sharp(inputIcon) + .resize(size, size) + .toFile(resolve(outputDir, `icon${size}.png`)) + .then(() => console.log(`Ícone ${size}x${size} gerado com sucesso`)) + .catch(err => console.error(`Erro ao gerar ícone ${size}x${size}:`, err)); +}); \ No newline at end of file diff --git a/src/assets/icon128.png b/src/assets/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e79644c8cc6ee6f63d067cd1fed369b9c39b0e GIT binary patch literal 2881 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 literal 0 HcmV?d00001 diff --git a/src/assets/icon32.png b/src/assets/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf3b7b6ca7c205f5d3c9210875707620ff352f6 GIT binary patch literal 460 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
bA>+GLxdkWp}*95$B_^OO@;EYQPY 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

xNi*Y8#y>am+NK4`+JO7}d^kC9X-9jDX)Vp= z?V`|Z5CvV;bVlc3e@7y>vp#5sWiH_>)MH(Vz;cN$u1E9YU*+(RXN0(@bA0rF(#RS# zh;=#Xo~l!1AKK27mI(j}hca}3g@su)wAMr&adm@55r4A@mODz#Au~^9aVZC#Ja@F$ zv;Nm81YC8ARcyD65NFV-KXqMKBABbhUp(A3Gh^pt`Y^IP7OrJcc0?e$^Zjn!aHZr0 zrq(G3*xua9&viU%<-301Tk4{;7T5r$a{g5fa#7>>C@*ei_$snj)%7+^d26~$%_4sG zm;oc6ZZww&S(L;_;$ZmZQbiJXgH?34RjmxMnsw3U^gqsAD%d@40-;8Z%bu5EDPQY_ z7pz@k$OaC2xVIlvr96Dzff!?B2O+u!Ho;vy^A4} zM~TC8Z>k6vd1Q?2kVablFrui}Tj=O}$pLzI42WgofVn8aNy2$rEdZW3Ks=oXKD=Ls zE;3^T1&L7&Ca}BK&j&Zkl-jddHg*fwWV3(_uWR|a@o8Oaa#Yq|60+G}x-k9O(Jkg# z%yF_&>TiPSiGe`t26L6&g+ln4b*^d{e-h!;= zz-FZY$Xo#3c$aYZ$R9Kf5+m?Ke!5{1*DP%FPknG1i0uHgW^@Y(y9 zFs1yiLk@`6e`1B`m;ZDQAOV!~e@fv$rSSi^QrQ0_c3y^1n%089X)%k4?m-LN K{ki72i2ngw2%O~r literal 0 HcmV?d00001 diff --git a/src/background/index.ts b/src/background/index.ts new file mode 100644 index 0000000..e186e46 --- /dev/null +++ b/src/background/index.ts @@ -0,0 +1,123 @@ +let currentPostData = {}; +let authToken: string | null = null; +let negocios_id: string | null = null; +let negocios_nome: string | null = null; +let user_id: string | null = null; + +// URL base da API do Bubble no Launchr +const API_URL = 'https://launchr.com.br/api/1.1/wf'; + +// Variável para controlar a janela de login +let loginWindowId: number | null = null; + +// Função para verificar autenticação +const checkAuth = (): Promise => { + return new Promise((resolve) => { + chrome.storage.local.get(['authToken'], (result) => { + authToken = result.authToken; + resolve(!!authToken); + }); + }); +}; + +// Função para abrir popup de login +const openLoginPopup = () => { + if (loginWindowId === null) { + chrome.windows.create({ + url: chrome.runtime.getURL('index.html#login'), + type: 'popup', + width: 400, + height: 600, + left: Math.round((screen.width - 400) / 2), + top: Math.round((screen.height - 600) / 2), + focused: true + }, (window) => { + if (window) { + loginWindowId = window.id; + } + }); + } else { + chrome.windows.update(loginWindowId, { focused: true }); + } +}; + +// Listener para quando a janela de login é fechada +chrome.windows.onRemoved.addListener((windowId) => { + if (windowId === loginWindowId) { + loginWindowId = null; + } +}); + +// Listener para mensagens do content script e popup +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.type === 'SAVE_POST' || request.type === 'SAVE_IDEA') { + checkAuth().then(isAuthenticated => { + if (!isAuthenticated) { + openLoginPopup(); + sendResponse({ success: false, error: 'AUTH_REQUIRED' }); + } else { + // Implementar lógica de salvamento + handleSaveRequest(request, sendResponse); + } + }); + return true; // Indica que a resposta será assíncrona + } + + if (request.type === 'CHECK_AUTH') { + checkAuth().then(isAuthenticated => { + sendResponse({ isAuthenticated }); + }); + return true; + } +}); + +// Listener para o clique no ícone da extensão +chrome.action.onClicked.addListener(async () => { + const isAuthenticated = await checkAuth(); + if (!isAuthenticated) { + openLoginPopup(); + } else { + // Abrir popup principal da extensão + chrome.windows.create({ + url: chrome.runtime.getURL('index.html'), + type: 'popup', + width: 300, + height: 500, + left: Math.round((screen.width - 300) / 2), + top: Math.round((screen.height - 500) / 2) + }); + } +}); + +// Função para lidar com as requisições de salvamento +const handleSaveRequest = async (request: any, sendResponse: (response: any) => void) => { + try { + const endpoint = request.type === 'SAVE_IDEA' ? 'nova_ideia' : 'novo_swipe_file'; + const response = await fetch(`${API_URL}/${endpoint}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': authToken || '' + }, + body: JSON.stringify(request.data) + }); + + if (!response.ok) { + if (response.status === 401) { + // Token inválido ou expirado + chrome.storage.local.remove(['authToken']); + authToken = null; + openLoginPopup(); + sendResponse({ success: false, error: 'AUTH_REQUIRED' }); + return; + } + throw new Error('Erro na requisição'); + } + + const data = await response.json(); + sendResponse({ success: true, data }); + } catch (error) { + console.error('Erro:', error); + sendResponse({ success: false, error: 'Erro ao processar requisição' }); + } +}; \ No newline at end of file diff --git a/src/components/LoginForm.tsx b/src/components/LoginForm.tsx new file mode 100644 index 0000000..2bcd929 --- /dev/null +++ b/src/components/LoginForm.tsx @@ -0,0 +1,97 @@ +import { useState } from 'react'; +import { useDispatch } from 'react-redux'; +import { setAuth } from '../store/slices/authSlice'; + +const LoginForm = () => { + const dispatch = useDispatch(); + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [loading, setLoading] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setLoading(true); + + try { + const response = await fetch('https://launchr.com.br/api/1.1/wf/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email, password }), + }); + + const data = await response.json(); + + if (data.authToken) { + // Salvar no chrome.storage + chrome.storage.local.set({ + authToken: data.authToken, + negocios_id: data.negocios_id, + negocios_nome: data.negocios_nome, + user_id: data.user_id, + }); + + // Atualizar estado + dispatch(setAuth({ + authToken: data.authToken, + negocios_id: data.negocios_id, + negocios_nome: data.negocios_nome, + user_id: data.user_id, + isAuthenticated: true, + })); + } + } catch (error) { + console.error('Erro no login:', error); + } finally { + setLoading(false); + } + }; + + return ( +

+

Faça o seu login

+

Preencha suas informações e faça o login no Launchr

+ +
+
+ + setEmail(e.target.value)} + className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500" + required + /> +
+ +
+ + setPassword(e.target.value)} + className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500" + required + /> +
+ + +
+
+ ); +}; + +export default LoginForm; \ No newline at end of file diff --git a/src/components/Menu.tsx b/src/components/Menu.tsx new file mode 100644 index 0000000..6efa5ce --- /dev/null +++ b/src/components/Menu.tsx @@ -0,0 +1,53 @@ +import { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { RootState } from '../store'; +import { setAuth } from '../store/slices/authSlice'; +import LoginForm from './LoginForm'; +import Dashboard from './Dashboard'; + +const Menu = () => { + const dispatch = useDispatch(); + const isAuthenticated = useSelector((state: RootState) => state.auth.isAuthenticated); + + useEffect(() => { + // Verificar autenticação ao carregar + chrome.storage.local.get( + ['authToken', 'negocios_id', 'negocios_nome', 'user_id'], + (result) => { + if (result.authToken) { + dispatch(setAuth({ + authToken: result.authToken, + negocios_id: result.negocios_id, + negocios_nome: result.negocios_nome, + user_id: result.user_id, + isAuthenticated: true, + })); + } + } + ); + }, [dispatch]); + + return ( +
+ + +
+ {isAuthenticated ? : } +
+
+ ); +}; + +export default Menu; \ No newline at end of file diff --git a/src/content/components/SaveButton.css b/src/content/components/SaveButton.css new file mode 100644 index 0000000..d5d6c44 --- /dev/null +++ b/src/content/components/SaveButton.css @@ -0,0 +1,59 @@ +.launchr-save-button { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + background-color: #4F46E5; + color: white; + border: none; + margin-left: 8px; + min-width: 150px; +} + +.launchr-save-button:hover:not(:disabled) { + background-color: #4338CA; +} + +.launchr-save-button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.launchr-save-button.loading { + background-color: #6B7280; +} + +.launchr-save-button.success { + background-color: #10B981; +} + +.launchr-save-button.error { + background-color: #EF4444; +} + +.launchr-save-button.auth { + background-color: #F59E0B; +} + +/* Animação de loading */ +.launchr-save-button.loading::after { + content: ''; + width: 16px; + height: 16px; + margin-left: 8px; + border: 2px solid #fff; + border-radius: 50%; + border-top-color: transparent; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/src/content/components/SaveButton.tsx b/src/content/components/SaveButton.tsx new file mode 100644 index 0000000..dcf338a --- /dev/null +++ b/src/content/components/SaveButton.tsx @@ -0,0 +1,60 @@ +import { useState } from 'react'; + +interface SaveButtonProps { + onSave: () => Promise<{ success: boolean; error?: string }>; +} + +const SaveButton = ({ onSave }: SaveButtonProps) => { + const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error' | 'auth'>('idle'); + + const handleClick = async () => { + setStatus('loading'); + try { + const result = await onSave(); + + if (result.error === 'AUTH_REQUIRED') { + setStatus('auth'); + } else if (result.success) { + setStatus('success'); + } else { + setStatus('error'); + } + + setTimeout(() => { + setStatus('idle'); + }, 2000); + } catch (error) { + setStatus('error'); + setTimeout(() => { + setStatus('idle'); + }, 2000); + } + }; + + const getButtonText = () => { + switch (status) { + case 'loading': + return 'Salvando...'; + case 'success': + return '✓ Salvo!'; + case 'error': + return '✕ Erro ao salvar'; + case 'auth': + return 'Faça login para salvar'; + default: + return 'Salvar no Launchr'; + } + }; + + return ( + + ); +}; + +export default SaveButton; \ No newline at end of file diff --git a/src/content/index.css b/src/content/index.css new file mode 100644 index 0000000..88332eb --- /dev/null +++ b/src/content/index.css @@ -0,0 +1,67 @@ +/* Estilos do botão */ +.launchr-save-button { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + background-color: #4F46E5; + color: white; + border: none; + margin-left: 8px; + min-width: 150px; +} + +.launchr-save-button:hover:not(:disabled) { + background-color: #4338CA; +} + +.launchr-save-button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.launchr-save-button.loading { + background-color: #6B7280; +} + +.launchr-save-button.success { + background-color: #10B981; +} + +.launchr-save-button.error { + background-color: #EF4444; +} + +.launchr-save-button.auth { + background-color: #F59E0B; +} + +/* Animação de loading */ +.launchr-save-button.loading::after { + content: ''; + width: 16px; + height: 16px; + margin-left: 8px; + border: 2px solid #fff; + border-radius: 50%; + border-top-color: transparent; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Container do botão */ +.launchr-save-button-container { + display: inline-flex; + align-items: center; + margin-left: 8px; +} \ No newline at end of file diff --git a/src/content/index.js b/src/content/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/content/index.ts b/src/content/index.ts new file mode 100644 index 0000000..57cdb1e --- /dev/null +++ b/src/content/index.ts @@ -0,0 +1,72 @@ +import { createRoot } from 'react-dom/client'; +import SaveButton from './components/SaveButton'; +import './index.css'; + +function addSaveButtonToPost(post: Element) { + if (post.querySelector('.launchr-save-button-container')) { + return; + } + + // Criar container para o botão + const buttonContainer = document.createElement('div'); + buttonContainer.className = 'launchr-save-button-container'; + + // Criar root para o React + const root = createRoot(buttonContainer); + + // Renderizar o componente SaveButton + root.render( + { + const contentElement = post.querySelector('.feed-shared-update-v2__description, .break-words'); + const authorElement = post.querySelector('.feed-shared-actor__name, .update-components-actor__name'); + const dateElement = post.querySelector('span.feed-shared-actor__sub-description span[aria-hidden="true"], span.update-components-actor__sub-description time'); + const postLinkElement = post.querySelector('a[href*="/feed/update/"], a[data-control-name="share_link"], a[href*="/posts/"]'); + + const content = contentElement?.textContent?.trim() || ''; + const author = authorElement?.textContent?.trim() || ''; + const date = dateElement?.textContent?.trim() || ''; + const postLink = postLinkElement?.getAttribute('href') || window.location.href; + + return new Promise((resolve) => { + chrome.runtime.sendMessage({ + type: 'SAVE_POST', + data: { + content, + author, + date, + postLink + } + }, (response) => { + resolve(response); + }); + }); + }} + /> + ); + + // Encontrar onde inserir o botão + const actionsContainer = post.querySelector('.feed-shared-social-actions, .social-details-social-counts'); + if (actionsContainer) { + actionsContainer.appendChild(buttonContainer); + } else { + post.appendChild(buttonContainer); + } +} + +// Observer para detectar novos posts +const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + if (node instanceof Element && node.matches('[data-id]')) { + addSaveButtonToPost(node); + } + }); + }); +}); + +// Iniciar observação +observer.observe(document.body, { + childList: true, + subtree: true +}); \ No newline at end of file diff --git a/src/content/style.css b/src/content/style.css new file mode 100644 index 0000000..5a7ec86 --- /dev/null +++ b/src/content/style.css @@ -0,0 +1,67 @@ +/* Estilos do botão de salvar */ +.launchr-save-button { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + background-color: #4F46E5; + color: white; + border: none; + margin-left: 8px; + min-width: 150px; +} + +.launchr-save-button:hover:not(:disabled) { + background-color: #4338CA; +} + +.launchr-save-button:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.launchr-save-button.loading { + background-color: #6B7280; +} + +.launchr-save-button.success { + background-color: #10B981; +} + +.launchr-save-button.error { + background-color: #EF4444; +} + +.launchr-save-button.auth { + background-color: #F59E0B; +} + +/* Animação de loading */ +.launchr-save-button.loading::after { + content: ''; + width: 16px; + height: 16px; + margin-left: 8px; + border: 2px solid #fff; + border-radius: 50%; + border-top-color: transparent; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Container do botão */ +.launchr-save-button-container { + display: inline-flex; + align-items: center; + margin-left: 8px; +} \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..de4d11a --- /dev/null +++ b/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/popup/Router.tsx b/src/popup/Router.tsx new file mode 100644 index 0000000..25e507b --- /dev/null +++ b/src/popup/Router.tsx @@ -0,0 +1,44 @@ +import { useEffect, useState } from 'react'; +import { useDispatch } from 'react-redux'; +import LoginForm from '../components/LoginForm'; +import Dashboard from '../components/Dashboard'; +import { setAuth } from '../store/slices/authSlice'; + +const Router = () => { + const [isLoading, setIsLoading] = useState(true); + const [isAuthenticated, setIsAuthenticated] = useState(false); + const dispatch = useDispatch(); + + useEffect(() => { + chrome.runtime.sendMessage({ type: 'CHECK_AUTH' }, (response) => { + if (response.isAuthenticated) { + chrome.storage.local.get( + ['authToken', 'negocios_id', 'negocios_nome', 'user_id'], + (result) => { + dispatch(setAuth({ + authToken: result.authToken, + negocios_id: result.negocios_id, + negocios_nome: result.negocios_nome, + user_id: result.user_id, + isAuthenticated: true, + })); + setIsAuthenticated(true); + } + ); + } + setIsLoading(false); + }); + }, [dispatch]); + + if (isLoading) { + return ( +
+
+
+ ); + } + + return isAuthenticated ? : ; +}; + +export default Router; \ No newline at end of file diff --git a/src/popup/index.tsx b/src/popup/index.tsx new file mode 100644 index 0000000..f401fad --- /dev/null +++ b/src/popup/index.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { Provider } from 'react-redux'; +import { store } from '../store'; +import Router from './Router'; +import '../index.css'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + + + +); \ No newline at end of file diff --git a/src/popup/styles.css b/src/popup/styles.css new file mode 100644 index 0000000..aa79844 --- /dev/null +++ b/src/popup/styles.css @@ -0,0 +1,128 @@ +/* Reset e estilos base */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + background-color: #1f1f1f; + color: white; + width: 300px; + min-height: 400px; + max-height: 500px; + overflow-y: auto; +} + +/* Container principal */ +.popup-container { + display: flex; + flex-direction: column; + height: 100%; +} + +/* Header */ +.popup-header { + display: flex; + align-items: center; + padding: 12px 16px; + background-color: #1f1f1f; + border-bottom: 1px solid #333; +} + +.popup-header img { + height: 24px; + width: auto; + margin-right: 12px; +} + +.popup-header h1 { + font-size: 16px; + font-weight: 500; + color: white; +} + +/* Conteúdo principal */ +.popup-content { + flex: 1; + padding: 16px; +} + +/* Formulários */ +.form-group { + margin-bottom: 12px; +} + +.form-label { + display: block; + font-size: 12px; + font-weight: 400; + color: #9ca3af; + margin-bottom: 4px; +} + +.form-input { + width: 100%; + padding: 8px; + border: 1px solid #333; + border-radius: 4px; + background-color: #2d2d2d; + color: white; + font-size: 13px; +} + +.form-input:focus { + outline: none; + border-color: #4f46e5; +} + +textarea.form-input { + min-height: 100px; + resize: vertical; +} + +/* Botão */ +.button { + width: 100%; + padding: 8px 16px; + border: none; + border-radius: 4px; + font-size: 13px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + margin-top: 8px; +} + +.button-primary { + background-color: #4f46e5; + color: white; +} + +.button-primary:hover { + background-color: #4338ca; +} + +.button-primary:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +/* Scrollbar personalizada */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #1f1f1f; +} + +::-webkit-scrollbar-thumb { + background: #4f46e5; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: #4338ca; +} \ No newline at end of file diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 0000000..85ecbae --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,11 @@ +import { configureStore } from '@reduxjs/toolkit'; +import authReducer from './slices/authSlice'; + +export const store = configureStore({ + reducer: { + auth: authReducer, + }, +}); + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; \ No newline at end of file diff --git a/src/store/slices/authSlice.ts b/src/store/slices/authSlice.ts new file mode 100644 index 0000000..33b2efa --- /dev/null +++ b/src/store/slices/authSlice.ts @@ -0,0 +1,33 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; + +interface AuthState { + authToken: string | null; + negocios_id: string | null; + negocios_nome: string | null; + user_id: string | null; + isAuthenticated: boolean; +} + +const initialState: AuthState = { + authToken: null, + negocios_id: null, + negocios_nome: null, + user_id: null, + isAuthenticated: false, +}; + +const authSlice = createSlice({ + name: 'auth', + initialState, + reducers: { + setAuth: (state, action: PayloadAction>) => { + return { ...state, ...action.payload }; + }, + logout: (state) => { + return initialState; + }, + }, +}); + +export const { setAuth, logout } = authSlice.actions; +export default authSlice.reducer; \ No newline at end of file diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..09b71f5 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,20 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Scrollbar personalizada */ +::-webkit-scrollbar { + @apply w-2; +} + +::-webkit-scrollbar-track { + @apply bg-gray-900; +} + +::-webkit-scrollbar-thumb { + @apply bg-indigo-600 rounded-md; +} + +::-webkit-scrollbar-thumb:hover { + @apply bg-indigo-700; +} \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..4d80f5b --- /dev/null +++ b/styles.css @@ -0,0 +1,103 @@ +/* Estilos gerais */ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + } + + /* Container principal */ + .container { + padding: 20px; + width: 300px; + } + + /* Títulos */ + h2 { + text-align: center; + } + + /* Formulários */ + form label { + display: block; + margin-top: 10px; + } + + form input[type="text"], + form select, + form textarea { + width: 100%; + padding: 5px; + box-sizing: border-box; + } + + form button { + margin-top: 15px; + width: 100%; + padding: 10px; + background-color: #0073b1; + color: #fff; + border: none; + cursor: pointer; + } + + form button:hover { + background-color: #005582; + } + + /* Estilos para o popup */ + .popup { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 999; + } + + .popup-content { + background-color: #fff; + padding: 20px; + border-radius: 5px; + text-align: center; + width: 80%; + max-width: 300px; + } + + .popup-content p { + font-size: 16px; + margin-bottom: 20px; + } + + /* Botões do popup */ + .popup-buttons { + display: flex; + justify-content: space-around; + margin-top: 20px; + } + + .popup-buttons button { + padding: 10px 20px; + font-size: 16px; + cursor: pointer; + } + + #cancelButton { + background-color: #ccc; + border: none; + border-radius: 5px; + } + + #viewButton { + background-color: #0073b1; + color: #fff; + border: none; + border-radius: 5px; + } + + #viewButton:hover { + background-color: #005582; + } \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..73f78ae --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,10 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./src/**/*.{html,js,ts,jsx,tsx}", + "./*.html" + ], + theme: { + extend: {}, + }, +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..0e621e8 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,35 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { resolve } from 'path'; + +export default defineConfig({ + plugins: [react()], + build: { + outDir: 'dist', + emptyOutDir: true, + rollupOptions: { + input: { + popup: resolve(__dirname, 'index.html'), + background: resolve(__dirname, 'src/background/index.ts'), + content: resolve(__dirname, 'src/content/index.ts') + }, + output: { + entryFileNames: (chunkInfo) => { + return chunkInfo.name === 'background' ? 'background.js' : + chunkInfo.name === 'content' ? 'content.js' : + '[name].js'; + }, + assetFileNames: (assetInfo) => { + const info = assetInfo.name.split('.'); + const extType = info[info.length - 1]; + + if (extType === 'css') { + return 'content.css'; + } + + return `assets/[name][extname]`; + }, + }, + }, + }, +}); \ No newline at end of file