Browse Source

[beeswax] Fix autocomplete for hive and impala query editors

The new autocomplete API is centred around a notebook and snippet instead of the type of app. To support this for the Impala and Hive query editors I've added a notebook with a snippet for these pages. The snippet and notebook is only used for the autocomplete for now.
Johan Ahlen 10 years ago
parent
commit
60be109

+ 22 - 1
apps/beeswax/src/beeswax/templates/execute.mako

@@ -788,6 +788,7 @@ ${ commonshare() | n,unicode }
 <script src="${ static('desktop/js/ko.hue-bindings.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('desktop/js/assistHelper.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('desktop/js/autocomplete.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('notebook/js/notebook.ko.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('beeswax/js/beeswax.vm.js') }"></script>
 <script src="${ static('desktop/js/share.vm.js') }"></script>
 
@@ -1105,9 +1106,29 @@ var assistHelper = new AssistHelper({
   user: HIVE_AUTOCOMPLETE_USER
 });
 
+var editorViewModelOptions = {
+  snippetViewSettings: {},
+  languages: [
+    {
+      type: "hive"
+    },
+    {
+      type: "impala"
+    }
+  ]
+};
+
+var editorViewModel = new EditorViewModel([], editorViewModelOptions);
+
+var notebook = editorViewModel.newNotebook();
+
+var snippet = notebook.newSnippet(HIVE_AUTOCOMPLETE_APP == "beeswax" ? "hive" : "impala");
+
+
 var autocompleter = new Autocompleter({
   assistHelper: assistHelper,
-  mode: HIVE_AUTOCOMPLETE_APP
+  notebook: notebook,
+  snippet: snippet
 });
 
 var escapeOutput = function (str) {

+ 8 - 5
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -788,19 +788,20 @@ var Notebook = function (vm, notebook) {
     if (type) {
       self.selectedSnippet(type);
     }
-    self.addSnippet({
+    var snippet = self.addSnippet({
       type: self.selectedSnippet(),
       result: {}
     });
 
     window.setTimeout(function () {
-      var lastSnippet = self.snippets()[self.snippets().length - 1];
+      var lastSnippet = snippet;
       if (lastSnippet.ace() != null) {
         lastSnippet.ace().focus();
       }
     }, 100);
 
-    logGA('/add_snippet/' + self.selectedSnippet());
+    logGA('/add_snippet/' + type);
+    return snippet;
   };
 
   self.getContext = function() {
@@ -997,8 +998,10 @@ function EditorViewModel(notebooks, options) {
   };
 
   self.newNotebook = function () {
-    self.notebooks.push(new Notebook(self, {}));
-    self.selectedNotebook(self.notebooks()[self.notebooks().length - 1]);
+    var notebook = new Notebook(self, {});
+    self.notebooks.push(notebook);
+    self.selectedNotebook(notebook);
+    return notebook;
   };
 
   self.saveNotebook = function () {