gumga-query-filter-ng
Version:
Gumga Query Filter
53 lines (46 loc) • 1.84 kB
JavaScript
'use strict'
Filter.$inject = ['HQLFactory','$compile','$timeout']
function Filter(HQLFactory,$compile, $timeout) {
let template = `
<div>
<button class="btn btn-default" ng-click="isOpen = !isOpen ">
<span class="glyphicon glyphicon-filter"></span>
</button>
</div>
<div id="replace"></div>
`
return {
restrict: 'E',
template: template,
transclude: true,
scope: {
search: '&',
saveQuery: '&',
containerId: '@?'
},
link: ($scope, $element, $attrs, $ctrl, $transclude) => {
$scope.possibleAdvancedFields = []
$scope.search = $scope.search || angular.noop
$scope.saveQuery = $scope.saveQuery || angular.noop
$scope.containerId = $scope.containerId || "replace";
$scope.proxySave = (query) => {
$scope.saveQuery({ query, name })
}
$scope.proxySearch = (param) =>{
$scope.search({ param })
}
$transclude((transcludeElement) => {
[].slice.call(transcludeElement).forEach(value => {
if(value && value.nodeName === 'ADVANCED-SEARCH-FIELD')
$scope.possibleAdvancedFields.push(value.outerHTML)
})
let template = `<gumga-filter-core ng-show="isOpen" search="proxySearch(param)" ${$attrs.saveQuery ? 'save-query="saveQuery(query, name)"' : ''}>
${$scope.possibleAdvancedFields.reduce(((prev, next) => prev += next), '')}
</gumga-filter-core>`,
element = angular.element(document.getElementById($scope.containerId))
element.replaceWith($compile(template)($scope))
})
}
}
}
angular.module('gumga.queryfilter.filter.directive', []).directive('gumgaFilter', Filter)