{"version":3,"file":"login.js","mappings":";;;;AAAA;AACA;AACA;AACO;AACP;AACA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iEAAiE,OAAO;AACxE;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpMyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA,4CAAe,KAAK,EAAC;;;AC/He;AACqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA,yEAAyE,kBAAkB,qDAAqD,kBAAkB;AAClK,SAAS;AACT;AACA,2EAA2E,kBAAkB,qDAAqD,kBAAkB;AACpK,WAAW;AACX;AACA;AACA;AACA,kBAAkB,KAAK;AACvB,0BAA0B,KAAK,YAAY,cAAc;AACzD,WAAW;AACX;AACA;AACA;AACA,kBAAkB,KAAK;AACvB,0BAA0B,KAAK,YAAY,cAAc;AACzD,WAAW;AACX;AACA;AACA;AACA,kBAAkB,KAAK;AACvB,0BAA0B,KAAK,qBAAqB,cAAc;AAClE,WAAW;AACX,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA,EAAE,KAAK;AACP,CAAC;AACD","sources":["webpack://build/../euliricas/assets/javascripts/components/utilities.js","webpack://build/../euliricas/assets/javascripts/common/login.js","webpack://build/../euliricas/assets/javascripts/pages/login.js"],"sourcesContent":["// ===============================================================\r\n// Busca Preço de Produtos por Ajax\r\n// ===============================================================\r\nexport function getPriceProd() {\r\n const attr = 'data-update-price';\r\n const processedAttr = 'data-price-processed';\r\n const products = document.querySelectorAll(`[${attr}]`);\r\n\r\n if (products.length > 0) products.forEach(product => {\r\n const processed = product.getAttribute(processedAttr);\r\n\r\n if (processed != 'true') {\r\n const prodId = product.getAttribute(attr);\r\n const url = `/produto/preco/${prodId}`;\r\n\r\n if (prodId != null && prodId != '') {\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n })\r\n .done(function (resp) {\r\n // console.info(resp);\r\n product.innerHTML = resp;\r\n product.setAttribute(processedAttr, true);\r\n })\r\n .fail(function (resp) {\r\n // console.error(`Falha ao buscar o preço do produto ${prodId}`);\r\n // console.log(resp);\r\n });\r\n }\r\n }\r\n })\r\n};\r\n\r\n// ===============================================================\r\n// DEBOUNCE\r\n// ===============================================================\r\n/*\r\n Debounce retorna uma função que enquanto continuar sendo chamada não é executada\r\n A função só será executada quando para de ser chamada por N milisegundos\r\n Útil para melhorar a performance de códigos que são executados muitas vezes por segundo, como o $(window).resize()\r\n\r\n Ex:\r\n \r\n $(window).resize(debounce(function() {\r\n // código a ser executado\r\n }, 500))\r\n \r\n No exemplo acima a função só será executada 500ms depois do último resize\r\n Abra o link abaixo e redimensione a janela branca e acompanhe o output do console\r\n Exemplo codepen: https://codepen.io/valkervieira/pen/oNgqyWY\r\n\r\n Um caso comum de uso é em lojas onde a seleção de um filtro na página de tag recarrega automáticamente a página\r\n Com o debounce o usuário pode escolher vários filtros rapidamente e a página só recarrega quando parar de escolher\r\n*/\r\n\r\nexport function debounce(func, wait, immediate) {\r\n var timeout;\r\n immediate || (immediate = true);\r\n\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n\r\n var callNow = immediate && !timeout;\r\n\r\n clearTimeout(timeout);\r\n\r\n timeout = setTimeout(later, wait);\r\n\r\n if (callNow) func.apply(context, args);\r\n };\r\n};\r\n\r\n// ===============================================================\r\n// THROTTLE\r\n// ===============================================================\r\n/*\r\n Throttle diminui a frequencia que uma função é executada\r\n Enquanto no debounce a função só é executada quando para de ser chamada, no throttle ela\r\n continua sendo executada só que em um intervalo mínimo de N milisegundos (default = 250)\r\n\r\n Ex:\r\n\r\n $(window).resize(throttle() {\r\n // código a ser executado\r\n }, 500)\r\n\r\n No exemplo acima a função resize é chamada várias vezes por segundo mas só é executada 1 vez a cada 500ms\r\n Abra o link abaixo, redimensione a janela branca e acompanhe o console\r\n Exemplo codepen: https://codepen.io/valkervieira/pen/yLyKEPW\r\n\r\n Um caso comum de uso é checar se o scroll passou de um determinado ponto, para fixar um header ou alterar algum elemento do DOM\r\n*/\r\nexport function throttle(fn, threshhold, scope) {\r\n threshhold || (threshhold = 250);\r\n var last, deferTimer;\r\n return function () {\r\n var context = scope || this;\r\n\r\n var now = +new Date(),\r\n args = arguments;\r\n if (last && now < last + threshhold) {\r\n // hold on to it\r\n clearTimeout(deferTimer);\r\n deferTimer = setTimeout(function () {\r\n last = now;\r\n fn.apply(context, args);\r\n }, threshhold);\r\n } else {\r\n last = now;\r\n fn.apply(context, args);\r\n }\r\n };\r\n};\r\n\r\n// ===============================================================\r\n// FORMAT MONEY\r\n// ===============================================================\r\nexport function formatMoney(value) {\r\n // FORMATA UM VALOR\r\n return (\r\n 'R$ ' +\r\n value\r\n .toFixed(2)\r\n .replace('.', ',')\r\n .replace(/(\\d)(?=(\\d{3})+\\,)/g, '$1.')\r\n );\r\n};\r\n\r\n// ===============================================================\r\n// VALIDA QUANTIDADE\r\n// ===============================================================\r\nexport function validateQuantity(_val) {\r\n // VALIDA SE A QUANTIDADE INFORMADA É UM NÚMERO\r\n if (!isNaN(_val)) {\r\n if (parseInt(_val) > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n// ===============================================================\r\n// CLEAR NUMBER\r\n// ===============================================================\r\nexport function getClearNumber(_val) {\r\n // RETORNA UM NÚMERO LIMPO COMO INT\r\n if (!isNaN(_val)) {\r\n clearNumber = parseInt(_val);\r\n\r\n return clearNumber;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n// ===============================================================\r\n// MENSAGEM DE RESPOSTA\r\n// ===============================================================\r\nexport function setMsgResponse(_msg, _type, _$parent) {\r\n /*\r\n O tipo pode conter um dos 3 valores: success, warning, error ou CLEAR.\r\n O type CLEAR limpa as mensagens e faz sumir a mensagem\r\n O elemento _$parent precisa ter uma div [data-msg-retorno], com uma div [data-msg] dentro,\r\n para exibir a mensagem corretamente no local\r\n */\r\n\r\n // Verifica se não há mais de uma mensagem\r\n // caso tenha, gera um html para cada mensagem\r\n if (Array.isArray(_msg)) {\r\n var msgArr = _msg;\r\n _msg = '';\r\n for (var i = msgArr.length - 1; i >= 0; i--) {\r\n _msg += '' + msgArr[i] + '';\r\n }\r\n }\r\n\r\n _$parent\r\n .find('[data-msg-retorno]')\r\n .removeClass('success')\r\n .removeClass('warning')\r\n .removeClass('error');\r\n\r\n _$parent.find('[data-msg-retorno] [data-msg]').empty();\r\n\r\n if (_type != 'clear') {\r\n _$parent.find('[data-msg-retorno]').addClass(_type);\r\n _$parent.find('[data-msg-retorno] [data-msg]').html(_msg);\r\n }\r\n};\r\n","import { setMsgResponse } from '../components/utilities';\r\n\r\n// ===============================================================\r\n// Ações de login\r\n// ===============================================================\r\nconst Login = {\r\n validateLogin: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == '') {\r\n validated = false;\r\n errorsTxt.push('Informe seu email!');\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() == '') {\r\n validated = false;\r\n errorsTxt.push('Informe a senha!');\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n validateRegister: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == '') {\r\n validated = false;\r\n errorsTxt.push('Informe seu email!');\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() == '') {\r\n validated = false;\r\n errorsTxt.push('Informe uma senha!');\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() != '') {\r\n var pass = _$form.find('[name=\"password\"]').val();\r\n var confirmationPass = _$form.find('[name=\"password_confirmation\"]').val();\r\n\r\n if (pass != confirmationPass) {\r\n validated = false;\r\n errorsTxt.push('Senha e confirmação são diferentes!');\r\n }\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n validateRecover: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == '') {\r\n validated = false;\r\n errorsTxt.push('Informe seu email!');\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n logar: function (_$form) {\r\n if (!_$form.hasClass('sending')) {\r\n $.ajax({\r\n url: '/entrar',\r\n type: 'POST',\r\n dataType: 'json',\r\n data: _$form.serialize(),\r\n beforeSend: function () {\r\n _$form.addClass('sending');\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log('success', resp);\r\n\r\n if (resp.error) {\r\n setMsgResponse(resp.error, 'error', _$form);\r\n }\r\n\r\n if (resp.client) {\r\n window.location.href = resp.redirect_to;\r\n }\r\n })\r\n .fail(function (resp) {\r\n console.error('error', error.responseText);\r\n })\r\n .always(function () {\r\n console.log('complete');\r\n _$form.removeClass('sending');\r\n });\r\n }\r\n },\r\n recoverPassord: function (_$form) {\r\n if (!_$form.hasClass('sending')) {\r\n $.ajax({\r\n url: '/recuperar_senha',\r\n type: 'POST',\r\n dataType: 'json',\r\n data: _$form.serialize(),\r\n beforeSend: function () {\r\n _$form.addClass('sending');\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log('success', resp);\r\n\r\n if (resp.error) {\r\n setMsgResponse(resp.error, 'error', _$form);\r\n }\r\n\r\n if (resp.ok) {\r\n setMsgResponse(resp.ok, 'success', _$form);\r\n }\r\n\r\n /*if (resp.client) {\r\n window.location.href = resp.redirect_to;\r\n }*/\r\n })\r\n .fail(function (resp) {\r\n console.error('error', error.responseText);\r\n })\r\n .always(function () {\r\n console.log('complete');\r\n _$form.removeClass('sending');\r\n });\r\n }\r\n },\r\n};\r\n\r\nexport default Login;\r\n","import Login from '../common/login';\r\nimport { setMsgResponse } from '../components/utilities';\r\n\r\nconst LoginPage = {\r\n init: function () {\r\n // default\r\n var e = $(\"[data-wrapper-login]\"),\r\n t = $(\"[data-wrapper-form-register]\"),\r\n a = $(\"[data-wrapper-form-login]\");\r\n\r\n e.on(\"click\", '[data-action=\"active-register\"]', function () {\r\n e.removeClass(\"login-active\"), e.addClass(\"register-active\"), a.removeClass(\"active\"), t.addClass(\"active\");\r\n }),\r\n e.on(\"click\", '[data-action=\"active-login\"]', function () {\r\n e.removeClass(\"register-active\"), e.addClass(\"login-active\"), t.removeClass(\"active\"), a.addClass(\"active\");\r\n }),\r\n $(\"[data-content-login]\").each(function (e, t) {\r\n $(t).on(\"click\", \"[data-forget-password]\", function (e) {\r\n e.preventDefault(), $(t).find(\".wrapper-form-login\").animate({ height: \"toggle\" }, 500), $(t).find(\".wrapper-form-recover\").animate({ height: \"toggle\" }, 500);\r\n }),\r\n $(t).on(\"click\", \"[data-forget-password-back]\", function (e) {\r\n e.preventDefault(), $(t).find(\".wrapper-form-login\").animate({ height: \"toggle\" }, 500), $(t).find(\".wrapper-form-recover\").animate({ height: \"toggle\" }, 500);\r\n }),\r\n $(t).on(\"submit\", \"[data-form-login]\", function (e) {\r\n e.preventDefault();\r\n var t = $(this),\r\n a = Login.validateLogin(t);\r\n a.validated ? Login.logar(t) : setMsgResponse(a.errors, \"error\", $(this));\r\n }),\r\n $(t).on(\"submit\", \"[data-form-register]\", function (e) {\r\n e.preventDefault();\r\n var t = $(this),\r\n a = Login.validateRegister(t);\r\n a.validated ? Login.logar(t) : setMsgResponse(a.errors, \"error\", $(this));\r\n }),\r\n $(t).on(\"submit\", \"[data-form-recover]\", function (e) {\r\n e.preventDefault();\r\n var t = $(this),\r\n a = Login.validateRecover(t);\r\n a.validated ? Login.recoverPassord(t) : setMsgResponse(a.errors, \"error\", $(this));\r\n });\r\n }),\r\n $(\"[data-label-input]\").on(\"focus\", \"input, textarea, select\", function () {\r\n $(this).closest(\"[data-label-input]\").find(\"label\").addClass(\"on-focus\");\r\n }),\r\n $(\"[data-label-input]\").on(\"blur\", \"input, textarea, select\", function () {\r\n $(this).closest(\"[data-label-input]\").find(\"label\").removeClass(\"on-focus\");\r\n }),\r\n $(\"[data-label-input]\").on(\"change\", \"input, textarea, select\", function () {\r\n var e = $(this).closest(\"[data-label-input]\"),\r\n t = e.find(\"label\");\r\n e.removeClass(\"invalid\"), e.removeClass(\"valid\"), \"\" != $(this).val() ? t.addClass(\"not-empty\") : t.removeClass(\"not-empty\");\r\n });\r\n },\r\n};\r\n\r\nwindow.addEventListener('DOMContentLoaded', () => {\r\n Login.init()\r\n});\r\n\r\n"],"names":[],"sourceRoot":""}