queryComponent.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. define([
  2. 'angular',
  3. 'lodash',
  4. 'jquery',
  5. ],
  6. function (angular, _, $) {
  7. 'use strict';
  8. angular
  9. .module('grafana.directives')
  10. .directive('elasticQueryComponent', function($compile, uiSegmentSrv, $q) {
  11. //var linkTemplate = '<a class="tight-form-item tabindex="1" ng-bind-html="textRep"></a>';
  12. /* jshint maxlen:false */
  13. var template1 = '<metric-segment segment="typeSegment" get-alt-segments="getBucketAggTypes()" on-value-changed="bucketAggTypeChanged()"></metric-segment>';
  14. /* jshint maxlen:false */
  15. var template2 = '<metric-segment segment="fieldSegment" get-alt-segments="getFields()" on-value-changed="fieldChanged()"></metric-segment>';
  16. return {
  17. restrict: 'E',
  18. scope: {
  19. model: "=",
  20. onChange: "&",
  21. getFields: "&",
  22. },
  23. link: function postLink($scope, elem) {
  24. $scope.getBucketAggTypes = function() {
  25. return $q.when([
  26. uiSegmentSrv.newSegment({value: 'terms'}),
  27. uiSegmentSrv.newSegment({value: 'date_histogram'}),
  28. ]);
  29. };
  30. $scope.fieldChanged = function() {
  31. $scope.model.field = $scope.fieldSegment.value;
  32. $scope.onChange();
  33. };
  34. $scope.bucketAggTypeChanged = function() {
  35. $scope.model.type = $scope.typeSegment.value;
  36. $scope.onChange();
  37. };
  38. function addElementsAndCompile() {
  39. var $html = $(template1 + template2);
  40. $scope.fieldSegment = uiSegmentSrv.newSegment($scope.model.field);
  41. $scope.typeSegment = uiSegmentSrv.newSegment($scope.model.type);
  42. $html.appendTo(elem);
  43. $compile(elem.contents())($scope);
  44. }
  45. addElementsAndCompile();
  46. }
  47. };
  48. });
  49. });