Explorar o código

HUE-4530 [indexer] Enable the full assist and dragging options

Enrico Berti %!s(int64=9) %!d(string=hai) anos
pai
achega
d6ba9844ab

+ 6 - 6
desktop/core/src/desktop/templates/assist.mako

@@ -438,7 +438,7 @@ from metadata.conf import has_navigator
         <span data-bind="visible: navigationSettings.showStats, component: { name: 'table-stats', params: { statsVisible: statsVisible, sourceType: sourceType, snippet: assistDbSource.snippet, databaseName: databaseName, tableName: tableName, columnName: columnName, fieldType: definition.type, apiHelper: assistDbSource.apiHelper }}"></span>
         <a class="inactive-action" href="javascript:void(0)" data-bind="visible: navigationSettings.openItem, click: openItem"><i class="fa fa-long-arrow-right" title="${_('Open')}"></i></a>
       </div>
-      <a class="assist-entry assist-table-link" href="javascript:void(0)" data-bind="multiClick: { click: toggleOpen, dblClick: dblClick }, attr: {'title': definition.title }, draggableText: { text: editorText,  meta: {'table': tableName, 'database': databaseName} }"><i class="fa fa-fw fa-table muted valign-middle"></i><span data-bind="text: definition.displayName, css: { 'highlight': highlight }"></span></a>
+      <a class="assist-entry assist-table-link" href="javascript:void(0)" data-bind="multiClick: { click: toggleOpen, dblClick: dblClick }, attr: {'title': definition.title }, draggableText: { text: editorText,  meta: {'type': 'sql', 'table': tableName, 'database': databaseName} }"><i class="fa fa-fw fa-table muted valign-middle"></i><span data-bind="text: definition.displayName, css: { 'highlight': highlight }"></span></a>
       <div class="center" data-bind="visible: loading" style="display:none;"><i class="fa fa-spinner fa-spin assist-spinner"></i></div>
       <!-- ko template: { if: open, name: 'assist-db-entries'  } --><!-- /ko -->
     </li>
@@ -460,7 +460,7 @@ from metadata.conf import has_navigator
           <!-- ko if: definition.isView -->
             <i class="fa fa-fw fa-eye muted valign-middle"></i>
           <!-- /ko -->
-          <span class="highlightable" data-bind="css: {'query-builder-menu': definition.isColumn, 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'column': columnName, 'table': tableName, 'database': databaseName} }"></span>
+          <span class="highlightable" data-bind="css: {'query-builder-menu': definition.isColumn, 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'type': 'sql', 'column': columnName, 'table': tableName, 'database': databaseName} }"></span>
         </a>
         <!-- /ko -->
         <!-- ko ifnot: expandable -->
@@ -468,7 +468,7 @@ from metadata.conf import has_navigator
           <!-- ko if: definition.isView -->
           <i class="fa fa-fw fa-eye muted valign-middle"></i>
           <!-- /ko -->
-          <span class="highlightable" data-bind="css: {'query-builder-menu': definition.isColumn, 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'column': columnName, 'table': tableName, 'database': databaseName} }"></span>
+          <span class="highlightable" data-bind="css: {'query-builder-menu': definition.isColumn, 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'type': 'sql', 'column': columnName, 'table': tableName, 'database': databaseName} }"></span>
         </span>
         <!-- /ko -->
         <div class="center" data-bind="visible: loading" style="display:none;"><i class="fa fa-spinner fa-spin assist-spinner"></i></div>
@@ -587,7 +587,7 @@ from metadata.conf import has_navigator
                   <!-- ko if: definition.type === 'file' -->
                   <i class="fa fa-fw fa-file-o muted valign-middle"></i>
                   <!-- /ko -->
-                  <span draggable="true" data-bind="text: definition.name, draggableText: { text: '\'' + path + '\'' }"></span>
+                  <span draggable="true" data-bind="text: definition.name, draggableText: { text: '\'' + path + '\'', meta: {'type': 'hdfs', 'definition': definition} }"></span>
                 </a>
               </li>
             </ul>
@@ -657,7 +657,7 @@ from metadata.conf import has_navigator
                <!-- ko ifnot: isDirectory -->
                <i class="fa fa-fw fa-file-o muted valign-middle"></i>
                <!-- /ko -->
-               <span data-bind="text: definition().name"></span>
+               <span data-bind="draggableText: { text: definition().name, meta: {'type': 'document', 'definition': definition()} }, text: definition().name"></span>
              </a>
            </li>
          </ul>
@@ -1244,7 +1244,7 @@ from metadata.conf import has_navigator
           }
         });
 
-        self.onlySql = true; // params.onlySql; - Only show SQL until Hue 4
+        self.onlySql = typeof params.onlySql !== 'undefined' ? params.onlySql : true;
         self.loading = ko.observable(false);
 
         self.availablePanels = [

+ 61 - 4
desktop/libs/indexer/src/indexer/templates/indexer.mako

@@ -114,6 +114,7 @@ ${ assist.assistPanel() }
               name: 'assist-panel',
               params: {
                 user: '${user.username}',
+                onlySql: false,
                 sql: {
                   sourceTypes: [{
                     name: 'hive',
@@ -124,7 +125,7 @@ ${ assist.assistPanel() }
                     showStats: true
                   }
                 },
-                visibleAssistPanels: ['sql']
+                visibleAssistPanels: ['sql', 'hdfs', 'documents']
               }
             }"></div>
         </div>
@@ -240,7 +241,7 @@ ${ assist.assistPanel() }
       <div class="control-group"  data-bind="visible: createWizard.fileFormat().inputFormat() == 'file'">
         <label for="path" class="control-label">${ _('Path') }</label>
         <div class="controls">
-          <input type="text" class="form-control path" data-bind="filechooser: createWizard.fileFormat().path, filechooserOptions: { skipInitialPathIfEmpty: true }">
+          <input type="text" class="form-control path" data-bind="value: createWizard.fileFormat().path, filechooser: createWizard.fileFormat().path, filechooserOptions: { skipInitialPathIfEmpty: true }">
           <a href="javascript:void(0)" class="btn" data-bind="click: createWizard.guessFormat">${_('Guess Format')}</a>
         </div>
       </div>
@@ -248,7 +249,7 @@ ${ assist.assistPanel() }
       <div class="control-group" data-bind="visible: createWizard.fileFormat().inputFormat() == 'table'">
         <label for="path" class="control-label">${ _('Table') }</label>
         <div class="controls">
-          <input type="text" data-bind="hivechooser: createWizard.fileFormat().table, skipColumns: true">
+          <input type="text" data-bind="value: createWizard.fileFormat().table, hivechooser: createWizard.fileFormat().table, skipColumns: true">
           <a href="javascript:void(0)" class="btn" data-bind="click: createWizard.guessFormat">${_('Select')}</a>
         </div>
       </div>
@@ -256,7 +257,7 @@ ${ assist.assistPanel() }
       <div class="control-group" data-bind="visible: createWizard.fileFormat().inputFormat() == 'query'">
         <label for="path" class="control-label">${ _('Query') }</label>
         <div class="controls">
-          <select data-bind="options: createWizard.fileFormat().queries, value: createWizard.fileFormat().query, optionsText: 'name'"></select>
+          <select data-bind="options: createWizard.fileFormat().queries, value: createWizard.fileFormat().query, optionsText: 'name', optionsAfterRender: createWizard.fileFormat().selectQuery"></select>
           <a href="javascript:void(0)" class="btn" data-bind="click: createWizard.guessFormat">${_('Select')}</a>
         </div>
       </div>
@@ -640,6 +641,8 @@ ${ assist.assistPanel() }
       });
       self.inputFormats = ko.observableArray(['file', 'table', 'query']);
 
+      self.draggedQuery = ko.observable();
+
       // File
       self.path = ko.observable('');
 
@@ -672,6 +675,18 @@ ${ assist.assistPanel() }
         });
       };
 
+      var waitForRendered = -1;
+      self.selectQuery = function () {
+        window.clearTimeout(waitForRendered);
+        waitForRendered = window.setTimeout(function(){
+          if (self.draggedQuery()){
+            self.query(ko.utils.arrayFilter(self.queries(), function(q) {
+              return q.id() === self.draggedQuery();
+            })[0]);
+          }
+        }, 50);
+      }
+
       self.format = ko.observable();
       self.columns = ko.observableArray();
 
@@ -929,6 +944,48 @@ ${ assist.assistPanel() }
       }
       viewModel = new IndexerViewModel(options);
       ko.applyBindings(viewModel);
+
+      var draggableMeta = {};
+      huePubSub.subscribe('draggable.text.meta', function (meta) {
+        draggableMeta = meta;
+      });
+
+      $('.right-panel').droppable({
+        accept: ".draggableText",
+        drop: function (e, ui) {
+          var text = ui.helper.text();
+          var generatedName = 'idx';
+          switch (draggableMeta.type){
+            case 'sql':
+              if (draggableMeta.table !== ''){
+                generatedName += draggableMeta.table;
+                viewModel.createWizard.fileFormat().inputFormat('table');
+                viewModel.createWizard.fileFormat().table(draggableMeta.table);
+              }
+              break;
+            case 'hdfs':
+              generatedName += draggableMeta.definition.name;
+                viewModel.createWizard.fileFormat().inputFormat('file');
+                viewModel.createWizard.fileFormat().path(draggableMeta.definition.path);
+              break;
+            case 'document':
+              if (draggableMeta.definition.type === 'query-hive'){
+                generatedName += draggableMeta.definition.name;
+                viewModel.createWizard.fileFormat().inputFormat('query');
+                viewModel.createWizard.fileFormat().draggedQuery(draggableMeta.definition.id);
+              }
+              break;
+          }
+          if (generatedName !== 'idx' && viewModel.createWizard.fileFormat().name() === ''){
+            viewModel.createWizard.fileFormat().name(generatedName);
+          }
+          else {
+            if (draggableMeta.table !== ''){
+              viewModel.createWizard.fileFormat().selectQuery();
+            }
+          }
+        }
+      });
     });
   });
 </script>