Last active
December 18, 2015 09:49
-
-
Save gonzaloruizdevilla/5763846 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Directives | |
(function (angular) { | |
'use strict'; | |
var filtroVisor = "filtrovisor"; | |
function FilterVisor($timeout, $http, $q) { | |
return { | |
restrict: 'A', | |
require: '?ngModel', | |
link: function (scope, element, attr, controller, http) { | |
var requestCanceler, | |
buscadorFocus = 0, | |
elemetParent = element.parent(), | |
sbPredictivo = $('.predictivoPoliza'); | |
scope.sbStatusPredictivo = 0; | |
elemetParent.append('<span class="iconSearch" ng-show="_iconSearch"></span>'); | |
element.bind('keyup', function(evt) { | |
var suppressKeyPressRepeat = ~$.inArray(evt.which, [40,38,9,13,27]); | |
if (!suppressKeyPressRepeat) callServices(); | |
if (suppressKeyPressRepeat) { | |
scope.$apply(handleKeypress(evt, evt.which)); | |
} | |
}); | |
var timeStamp = 200 ; | |
element.bind('focusout',function(evt){ | |
console.log(scope.callPoliza); | |
if(requestCanceler) | |
requestCanceler.resolve(); | |
$timeout(function(){ | |
sbPredictivo.hide() | |
}, timeStamp ); | |
iconSearch(false); | |
}) | |
function cancelaTimeOut() { | |
$timeout.cancel(buscadorFocus); | |
} | |
var LImiteCarateres = 3, | |
tiempoDePeticion = 1200; | |
function callServices(){ | |
sbPredictivo.hide() | |
validaCamposBusqueda(); | |
if (element.val().length >= LImiteCarateres) { | |
console.log('entro'); | |
cancelaTimeOut(); | |
buscadorFocus = $timeout(bucarPoliza, tiempoDePeticion); | |
}; | |
} | |
function scrollPredictive(id, tipo){ | |
console.log(id); | |
var factorLimit = 4 , | |
factor = id %= factorLimit; | |
if(tipo=='baja' && factor==0){ | |
sbPredictivo.scrollTop(sbPredictivo.find('li').eq(0).outerHeight(true) * scope.sbStatusPredictivo); | |
} | |
if (tipo=='sube' && factor==0) { | |
sbPredictivo.scrollTop(sbPredictivo.find('li').eq(0).outerHeight(true) * (scope.sbStatusPredictivo - 3)); | |
}; | |
} | |
function handleKeypress (evt, key) { | |
// console.log(key) | |
// baja | |
if (key == 40 && scope.sbStatusPredictivo < scope.model.listaInformacionPolizas.length - 1){ | |
scope.sbStatusPredictivo += 1; | |
scrollPredictive(scope.sbStatusPredictivo, 'baja'); | |
} | |
//sube | |
if (key == 38 && scope.sbStatusPredictivo > 0) { | |
scope.sbStatusPredictivo -=1 ; | |
scrollPredictive(scope.sbStatusPredictivo, 'sube'); | |
} | |
if (key == 38 && scope.sbStatusPredictivo < 0){ | |
scope.sbStatusPredictivo = scope.model.listaInformacionPolizas.length - 1 ; | |
scrollPredictive(scope.sbStatusPredictivo, 'sube'); | |
} | |
//enter | |
if (key == 13|| key == 39){ | |
scope.completaPoliza(scope.model.listaInformacionPolizas[scope.sbStatusPredictivo]); | |
sbPredictivo.hide(); | |
} | |
//salir | |
if (key == 27) sbPredictivo.hide(); | |
}; | |
// busca la poliza cunado se cumple los campos del filtro | |
function bucarPoliza () { | |
if (validaCamposBusqueda()) { | |
scope.tipoDeBusqueda = attr.filtrovisor; | |
iconSearch(true); | |
// scope.callPoliza = $q.defer(); | |
requestCanceler = $q.defer(); | |
scope.callPoliza = $http.post( | |
dynPath + '/api/visor/consultas/consultaPolizaSeguro/' + attr.filtrovisor, | |
scope.filtroConsulta, | |
{timeout: requestCanceler.promise} | |
); | |
scope.callPoliza.then(dataPoliza); | |
// scope.callPoliza | |
console.log(scope.callPoliza); | |
scope.sbStatusPredictivotive = 0; | |
}; | |
} | |
var dataPoliza = function (response) { | |
scope.model = response.data; | |
if(scope.model.errorFormDto) { | |
angular.showError(scope,{msg:scope.model.errorFormDto.operacionMensaje[0]}); | |
scope.sbClean(false); | |
scope.muestraDetalle = false; | |
} else { | |
iconSearch(false); | |
sbPredictivo.show(); | |
} | |
} | |
// Valida los compos sean correctos en el filtro y el producto de la consulta | |
function validaCamposBusqueda () { | |
scope.showCuenta = false; | |
if (scope.filtroConsulta.producto == undefined) { | |
angular.showError(scope,{msg:'Selecciona un producto para poder continuar.'}) | |
return false; | |
} else { | |
if (attr.filtrovisor=='consultaPorCuenta') scope.showCuenta = true | |
return true | |
} | |
} | |
function iconSearch (tipo){ | |
var icon = element.parent().find('span.iconSearch'), | |
iconTop = element.offset().top + (element.height() / 2) - 8, | |
iconLeft = element.offset().left + (element.width() - 4), | |
predictivoTop = element.offset().top + (element.height() + 2); | |
icon.css({top:iconTop, left:iconLeft}); | |
sbPredictivo.css({top:predictivoTop}) | |
if(tipo){ | |
icon.show(); | |
}else{ | |
icon.hide(); | |
} | |
} | |
} | |
} | |
} | |
FilterVisor.$inject = ['$timeout', '$http', '$q'] | |
angular.module('directiveVisor', []) | |
.directive(filtroVisor, FilterVisor) | |
})(angular); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
OK. Gracias, lo pruebo, reviso lo que me comentas
y te aviso . Slds