UNPKG

periscope-ui

Version:

Perscope default set of widget/dashboard implementations

248 lines (209 loc) 9.23 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultSearchBox = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _aureliaFramework = require('aurelia-framework'); var _jquery = require('jquery'); var _jquery2 = _interopRequireDefault(_jquery); var _periscopeFramework = require('periscope-framework'); var _lodash = require('lodash'); var _ = _interopRequireWildcard(_lodash); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var DefaultSearchBox = exports.DefaultSearchBox = function (_SearchBox) { _inherits(DefaultSearchBox, _SearchBox); function DefaultSearchBox(settings) { _classCallCheck(this, DefaultSearchBox); var _this = _possibleConstructorReturn(this, _SearchBox.call(this, settings)); _this._isValid = true; _this._caretPosition = 0; _this._separators = [" ", ","]; _this._specialSymbols = ["'", "(", ")", "\""]; _this._timer; _this._suggestionsListSettings = { title: '', suggestions: [], focusedSuggestion: -1, displaySuggestions: false, lastWord: '' }; return _this; } DefaultSearchBox.prototype.refresh = function refresh() { _SearchBox.prototype.refresh.call(this); var self = this; this.dataSource.transport.readService.getSchema().then(function (schema) { var allFields = _.map(schema.fields, "field"); var grammar = new _periscopeFramework.GrammarTree(schema.fields); self.parser = new _periscopeFramework.ExpressionParser(grammar.getGrammar()); self.expressionManager = new _periscopeFramework.IntellisenceManager(self.parser, self.dataSource, allFields); self.restoreState(); if (self.state) self.suggestionsListSettings.displaySuggestions = false; }); }; DefaultSearchBox.prototype.attached = function attached() { var self = this; (0, _jquery2.default)(this.searchBox)[0].addEventListener("keydown", function (e) { if (e.keyCode == 40) { self.suggestionsListSettings.focusedSuggestion = 0; e.preventDefault(); e.stopPropagation(); } else { self.suggestionsListSettings.focusedSuggestion = -1; self._caretPosition = this.selectionEnd + 1; } if (e.keyCode == 27 || e.keyCode == 13) { self.suggestionsListSettings.displaySuggestions = false; } }, true); (0, _jquery2.default)(function () { (0, _jquery2.default)('[data-toggle="tooltip"]').tooltip(); }); }; DefaultSearchBox.prototype.populateSuggestions = function populateSuggestions(searchStr) { var _this2 = this; searchStr = searchStr.substring(0, this.caretPosition); var lastWord = this.getLastWord(searchStr); this.suggestionsListSettings.title = ''; this.expressionManager.populate(searchStr, lastWord).then(function (data) { _this2.suggestionsListSettings.suggestions = data; _this2.suggestionsListSettings.lastWord = lastWord; _this2.suggestionsListSettings.displaySuggestions = _this2.suggestionsListSettings.suggestions.length > 0; }); }; DefaultSearchBox.prototype.select = function select(suggestion) { var searchStr = this.searchString; var position = this.caretPosition; while (position < searchStr.length && searchStr[position] != " ") { position++; } var strLeft = searchStr.substring(0, position); var strRight = position < searchStr.length ? searchStr.substring(position, searchStr.length) : ''; var wordToReplace = this.getLastWord(searchStr); strLeft = strLeft.substring(0, strLeft.lastIndexOf(wordToReplace)); var value = suggestion.value; if (suggestion.type === 'string' || suggestion.type === 'array_string') value = "'" + value + "'"; if (suggestion.type === 'array_string') { var openBraceExsits = false; for (var i = strLeft.trim().length; i >= 0; i--) { if (strLeft[i] === "(") { openBraceExsits = true; break; } if (strLeft[i] === ")") break; } if (!openBraceExsits) value = "(" + value;else { var lastChar = strLeft.trim().charAt(strLeft.trim().length - 1); if (lastChar !== '(' && lastChar !== ',') value = "," + value; } } if (suggestion.type === 'operator' && suggestion.value === 'in') value += " (";else value += " "; this.caretPosition = (strLeft + value).length; this.searchString = strLeft + value + strRight; }; DefaultSearchBox.prototype.getLastWord = function getLastWord(searchStr) { var str = _periscopeFramework.StringHelper.getPreviousWord(searchStr, this.caretPosition, this._separators); for (var _iterator = this._specialSymbols, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var s = _ref; str = _periscopeFramework.StringHelper.replaceAll(str, "\\" + s, ""); }return str.trim(); }; DefaultSearchBox.prototype.notifySearchCriteriaChanged = function notifySearchCriteriaChanged() { this.saveState(); var self = this; window.clearTimeout(self._timer); self._timer = window.setTimeout(function () { if (self.isValid) { var astTree = void 0; if (self.searchString !== '') astTree = self.parser.parse(self.searchString); self.dataFilterChanged.raise(astTree); } }, 500); }; _createClass(DefaultSearchBox, [{ key: 'parser', get: function get() { return this._parser; }, set: function set(value) { this._parser = value; } }, { key: 'expressionManager', get: function get() { return this._expressionManager; }, set: function set(value) { this._expressionManager = value; } }, { key: 'selectedSuggestion', get: function get() { return this._selectedSuggestion; }, set: function set(value) { if (this._selectedSuggestion != value) { this._selectedSuggestion = value; this.select(this._selectedSuggestion); } } }, { key: 'suggestionsListSettings', get: function get() { return this._suggestionsListSettings; }, set: function set(value) { this._suggestionsListSettings = value; } }, { key: 'isValid', get: function get() { if (this.searchString === '' || !this.parser) return true; return this.parser.validate(this.searchString); } }, { key: 'searchString', get: function get() { return this._searchString; }, set: function set(value) { if (this._searchString != value) { this._searchString = value; this.populateSuggestions(value); if (this.isValid) { this.notifySearchCriteriaChanged(); } } } }, { key: 'caretPosition', get: function get() { return this._caretPosition; }, set: function set(value) { if (value != this._caretPosition) { var self = this; self._caretPosition = value; (0, _jquery2.default)(self.searchBox)[0].focus(); window.setTimeout(function () { (0, _jquery2.default)(self.searchBox)[0].setSelectionRange(value, value); }, 400); } } }]); return DefaultSearchBox; }(_periscopeFramework.SearchBox);