Pārlūkot izejas kodu

HUE-3216 [assist] Merge sample + stats popups

Johan Ahlen 9 gadi atpakaļ
vecāks
revīzija
aedd69cc24

+ 0 - 1
apps/beeswax/src/beeswax/templates/create_database.mako

@@ -73,7 +73,6 @@ ${ assist.assistPanel() }
                   }],
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 0 - 1
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -73,7 +73,6 @@ ${ assist.assistPanel() }
                   }],
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

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

@@ -55,7 +55,6 @@ ${ layout.menubar(section='query') }
                   activeSourceType: snippetType,
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 0 - 1
apps/beeswax/src/beeswax/templates/import_wizard_choose_delimiter.mako

@@ -77,7 +77,6 @@ ${ assist.assistPanel() }
                   }],
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 0 - 1
apps/beeswax/src/beeswax/templates/import_wizard_choose_file.mako

@@ -76,7 +76,6 @@ ${ assist.assistPanel() }
                   }],
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 0 - 1
apps/beeswax/src/beeswax/templates/import_wizard_define_columns.mako

@@ -76,7 +76,6 @@ ${ assist.assistPanel() }
                   }],
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 1 - 1
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -214,7 +214,7 @@
       return;
     }
     self.assistHelper.fetchTableSample({
-      type: "hive",
+      sourceType: "hive",
       databaseName: self.metastoreTable.database.name,
       tableName: self.metastoreTable.name,
       successCallback: function (data) {

+ 0 - 1
apps/metastore/src/metastore/templates/describe_partitions.mako

@@ -74,7 +74,6 @@ ${ assist.assistPanel() }
                   user: '${user.username}',
                   navigationSettings: {
                     openItem: false,
-                    showPreview: true,
                     showStats: true
                   }
                 },

+ 0 - 1
apps/metastore/src/metastore/templates/metastore.mako

@@ -724,7 +724,6 @@ ${ assist.assistPanel() }
                 }],
                 navigationSettings: {
                   openItem: true,
-                  showPreview: true,
                   showStats: false
                 }
               },

+ 0 - 35
desktop/core/src/desktop/static/desktop/js/assist/assistDbEntry.js

@@ -319,40 +319,5 @@
     }
   };
 
-  AssistDbEntry.prototype.showPreview = function () {
-    var self = this;
-    var $assistQuickLook = $("#assistQuickLook");
-
-    var hierarchy = self.getHierarchy();
-    var databaseName = hierarchy[0];
-    var tableName = hierarchy[1];
-
-    $assistQuickLook.find(".tableName").text(self.definition.name);
-    $assistQuickLook.find(".tableLink").attr("href", "/metastore/table/" + databaseName + "/" + tableName);
-    self.assistDbSource.loadingSamples(true);
-    self.assistDbSource.samples({});
-    $assistQuickLook.attr("style", "width: " + ($(window).width() - 120) + "px;margin-left:-" + (($(window).width() - 80) / 2) + "px!important;");
-
-    self.assistDbSource.assistHelper.fetchTableSample({
-      type: self.assistDbSource.sourceType,
-      databaseName: databaseName,
-      tableName: tableName,
-      successCallback: function(data) {
-        if (! data.rows) {
-          data.rows = [];
-        } else if (! data.headers) {
-          data.headers = [];
-        }
-        self.assistDbSource.samples(data);
-        self.assistDbSource.loadingSamples(false);
-      },
-      errorCallback: function(e) {
-        $("#assistQuickLook").modal("hide");
-      }
-    });
-
-    $assistQuickLook.modal("show");
-  };
-
   return AssistDbEntry;
 }));

+ 1 - 2
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -590,7 +590,6 @@
    *
    * @param {string} options.databaseName
    * @param {string} options.tableName
-   * @param {string} options.type
    */
   AssistHelper.prototype.fetchTableSample = function (options) {
     var self = this;
@@ -599,7 +598,7 @@
     $.post(url, {
       notebook: {},
       snippet: ko.mapping.toJSON({
-        type: options.type
+        type: options.sourceType
       }),
     }, function (data) {
       if (! self.successResponseIsError(data)) {

+ 76 - 27
desktop/core/src/desktop/static/desktop/js/assist/tableStats.js

@@ -49,8 +49,8 @@
     self.isComplexType = /^(map|array|struct)/i.test(options.type);
     self.isView = /view/i.test(options.type);
 
-    self.loading = ko.observable(false);
-    self.hasError = ko.observable(false);
+    self.loadingStats = ko.observable(false);
+    self.statsHasError = ko.observable(false);
     self.refreshing = ko.observable(false);
     self.loadingTerms = ko.observable(false);
     self.inaccurate = ko.observable(false);
@@ -59,6 +59,16 @@
     self.termsTabActive = ko.observable(false);
     self.prefixFilter = ko.observable().extend({'throttle': 500});
 
+    self.activeTab = ko.observable("sample");
+    self.loadingSamples = ko.observable(false);
+    self.samples = ko.observable(null);
+
+    self.activeTab.subscribe(function (newValue) {
+      if (newValue === "analysis" && self.statRows().length === 0) {
+        self.fetchData();
+      }
+    });
+
     self.prefixFilter.subscribe(function (newValue) {
       self.fetchTerms();
     });
@@ -69,13 +79,17 @@
       }
     });
 
-    self.fetchData();
+    if (typeof self.column === 'undefined' || self.column === null) {
+      self.fetchSamples();
+    } else {
+      self.fetchData();
+    }
   }
 
   TableStats.prototype.fetchData = function () {
     var self = this;
-    self.loading(true);
-    self.hasError(false);
+    self.loadingStats(true);
+    self.statsHasError(false);
 
     var successCallback = function (data) {
       if (data && data.status == 0) {
@@ -90,17 +104,17 @@
         self.inaccurate(inaccurate);
       } else if (data && data.message) {
         $(document).trigger("error", data.message);
-        self.hasError(true);
+        self.statsHasError(true);
       } else {
         $(document).trigger("error", self.i18n.errorLoadingStats);
-        self.hasError(true);
+        self.statsHasError(true);
       }
-      self.loading(false);
+      self.loadingStats(false);
     };
 
     var errorCallback = function (e) {
-      self.hasError(true);
-      self.loading(false);
+      self.statsHasError(true);
+      self.loadingStats(false);
     };
 
     self.assistHelper.fetchStats({
@@ -118,26 +132,31 @@
     if (self.refreshing()) {
       return;
     }
-    var shouldFetchTerms = self.termsTabActive() || self.terms().length > 0;
     self.refreshing(true);
 
-    self.assistHelper.refreshTableStats({
-      sourceType: self.sourceType === "hive" ? "beeswax" : self.sourceType,
-      databaseName: ko.isObservable(self.database) ? self.database() : self.database,
-      tableName: ko.isObservable(self.table) ? self.table() : self.table,
-      columnName: ko.isObservable(self.column) ? self.column() : self.column,
-      successCallback: function() {
-        self.refreshing(false);
-        self.fetchData();
-        if (shouldFetchTerms) {
-          self.fetchTerms();
+    if (self.activeTab() === "sample") {
+      self.samples(null);
+      self.fetchSamples();
+    } else {
+      var shouldFetchTerms = self.termsTabActive() || self.terms().length > 0;
+      self.assistHelper.refreshTableStats({
+        sourceType: self.sourceType === "hive" ? "beeswax" : self.sourceType,
+        databaseName: ko.isObservable(self.database) ? self.database() : self.database,
+        tableName: ko.isObservable(self.table) ? self.table() : self.table,
+        columnName: ko.isObservable(self.column) ? self.column() : self.column,
+        successCallback: function() {
+          self.refreshing(false);
+          self.fetchData();
+          if (shouldFetchTerms) {
+            self.fetchTerms();
+          }
+        },
+        errorCallback: function(message) {
+          self.refreshing(false);
+          $(document).trigger("error", message || self.i18n.errorRefreshingStats);
         }
-      },
-      errorCallback: function(message) {
-        self.refreshing(false);
-        $(document).trigger("error", message || self.i18n.errorRefreshingStats);
-      }
-    });
+      });
+    }
   };
 
   TableStats.prototype.fetchTerms = function () {
@@ -175,5 +194,35 @@
     });
   };
 
+  TableStats.prototype.fetchSamples = function () {
+    var self = this;
+    if (self.loadingSamples()) {
+      return;
+    }
+
+    self.loadingSamples(true);
+    self.samples({});
+
+    self.assistHelper.fetchTableSample({
+      sourceType: self.sourceType,
+      databaseName: ko.isObservable(self.database) ? self.database() : self.database,
+      tableName: ko.isObservable(self.table) ? self.table() : self.table,
+      successCallback: function(data) {
+        if (! data.rows) {
+          data.rows = [];
+        } else if (! data.headers) {
+          data.headers = [];
+        }
+        self.samples(data);
+        self.loadingSamples(false);
+        self.refreshing(false);
+      },
+      errorCallback: function() {
+        self.loadingSamples(false);
+        self.refreshing(false);
+      }
+    });
+  };
+
   return TableStats;
 }));

+ 0 - 51
desktop/core/src/desktop/templates/assist.mako

@@ -318,7 +318,6 @@ from desktop.views import _ko
 
   <script type="text/html" id="assist-entry-actions">
     <div class="assist-actions" data-bind="css: { 'table-actions' : definition.isTable || definition.isView, 'column-actions': definition.isColumn, 'database-actions' : definition.isDatabase } " style="opacity: 0">
-      <a class="inactive-action" href="javascript:void(0)" data-bind="visible: (definition.isTable || definition.isView) && navigationSettings.showPreview, click: showPreview"><i class="fa fa-list" title="${_('Preview Sample data')}"></i></a>
       <span data-bind="visible: navigationSettings.showStats, component: { name: 'table-stats', params: {
           statsVisible: statsVisible,
           sourceType: sourceType,
@@ -336,7 +335,6 @@ from desktop.views import _ko
   <script type="text/html" id="assist-table-entry">
     <li class="assist-table" data-bind="visibleOnHover: { override: statsVisible, selector: '.table-actions' }">
       <div class="assist-actions table-actions" style="opacity: 0">
-        <a class="inactive-action" href="javascript:void(0)" data-bind="visible: navigationSettings.showPreview, click: showPreview"><i class="fa fa-list" title="${_('Preview Sample data')}"></i></a>
         <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, assistHelper: assistDbSource.assistHelper }}"></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>
@@ -670,53 +668,6 @@ from desktop.views import _ko
     <div class="assist-flex-fill" data-bind="visible: hasErrors() && ! loading() && ! $parent.loading()" style="display: none;">
       <span class="assist-errors">${ _('Error loading tables.') }</span>
     </div>
-
-    <div id="assistQuickLook" class="modal hide fade">
-      <div class="modal-header">
-        <a href="#" class="close" data-dismiss="modal">&times;</a>
-        <!-- ko if: sourceType === 'hive' || sourceType === 'impala' -->
-        <a class="tableLink pull-right" href="#" target="_blank" style="margin-right: 20px;margin-top:6px">
-          <i class="fa fa-external-link"></i> ${ _('View more...') }
-        </a>
-        <!-- /ko -->
-        <h3>${_('Data sample for')} <span class="tableName"></span></h3>
-      </div>
-      <div class="modal-body" style="min-height: 100px">
-        <!-- ko hueSpinner: { spin: assistDbSource.loadingSamples, center: true, size: 'large' } --><!-- /ko -->
-        <!-- ko ifnot: assistDbSource.loadingSamples -->
-        <div style="overflow: auto">
-          <!-- ko with: assistDbSource.samples -->
-          <!-- ko if: rows.length == 0 -->
-          <div class="alert">${ _('The selected table has no data.') }</div>
-          <!-- /ko -->
-          <!-- ko if: rows.length > 0 -->
-          <table class="table table-striped table-condensed">
-            <tr>
-              <th style="width: 10px"></th>
-              <!-- ko foreach: headers -->
-              <th data-bind="text: $data"></th>
-              <!-- /ko -->
-            </tr>
-            <tbody>
-            <!-- ko foreach: rows -->
-            <tr>
-              <td data-bind="text: $index()+1"></td>
-              <!-- ko foreach: $data -->
-              <td style="white-space: pre;" data-bind="text: $data"></td>
-              <!-- /ko -->
-            </tr>
-            <!-- /ko -->
-            </tbody>
-          </table>
-          <!-- /ko -->
-          <!-- /ko -->
-        </div>
-        <!-- /ko -->
-      </div>
-      <div class="modal-footer">
-        <button class="btn btn-primary disable-feedback" data-dismiss="modal">${_('Ok')}</button>
-      </div>
-    </div>
   </script>
 
   <script type="text/html" id="assist-panel-switches">
@@ -838,7 +789,6 @@ from desktop.views import _ko
        * @param {string} [options.activeSourceType] - Example: hive
        * @param {Object} options.navigationSettings - enable/disable the links
        * @param {boolean} options.navigationSettings.openItem
-       * @param {boolean} options.navigationSettings.showPreview
        * @param {boolean} options.navigationSettings.showStats
 
        * @constructor
@@ -1021,7 +971,6 @@ from desktop.views import _ko
        * @param {string} [params.sql.activeSourceType] - Example: hive
        * @param {Object} params.sql.navigationSettings - enable/disable the links
        * @param {boolean} params.sql.navigationSettings.openItem - Example: true
-       * @param {boolean} params.sql.navigationSettings.showPreview - Example: true
        * @param {boolean} params.sql.navigationSettings.showStats - Example: true
        * @constructor
        */

+ 0 - 1
desktop/core/src/desktop/templates/home2.mako

@@ -184,7 +184,6 @@ ${ fileBrowser.fileBrowser() }
               }],
               navigationSettings: {
                 openItem: false,
-                showPreview: true,
                 showStats: true
               },
             },

+ 99 - 21
desktop/core/src/desktop/templates/table_stats.mako

@@ -22,6 +22,17 @@ from desktop.views import _ko
 %>
 
 <%def name="tableStats()">
+
+  <style>
+    .more-link:focus,
+    .more-link:hover {
+      background-color: #FFF !important;
+      border-top: 1px solid transparent !important;
+      border-right: 1px solid transparent !important;
+      border-left: 1px solid transparent !important;
+    }
+  </style>
+
   <script type="text/html" id="table-stats">
     <div class="content">
       <!-- ko if: statRows().length -->
@@ -64,34 +75,85 @@ from desktop.views import _ko
   </script>
 
   <script type="text/html" id="stats-popover">
-    <div style="position: fixed; display: none;" class="popover show mega-popover right" data-bind="style: { 'top': popoverTop() + 'px', 'left': popoverLeft() + 'px' }, visible: analysisStats, with: analysisStats">
+    <div style="position: fixed; display: none; z-index: 5000;" class="popover show mega-popover right" data-bind="style: { 'top': popoverTop() + 'px', 'left': popoverLeft() + 'px' }, visible: analysisStats, with: analysisStats">
       <div class="arrow" data-bind="style: { 'top': $parent.popoverArrowTop() + 'px'}"></div>
       <h3 class="popover-title" style="text-align: left">
         <a class="pull-right pointer close-popover" style="margin-left: 8px" data-bind="click: $parent.toggleStats"><i class="fa fa-times"></i></a>
-        <a class="pull-right pointer stats-refresh" style="margin-left: 8px" data-bind="visible: !isComplexType && !isView, click: refresh"><i class="fa fa-refresh" data-bind="css: { 'fa-spin' : refreshing }"></i></a>
-        <span class="pull-right stats-warning muted" data-bind="visible: inaccurate() && column == null && !isComplexType && !isView" rel="tooltip" data-placement="top" title="${ _('The column stats for this table are not accurate') }" style="margin-left: 8px"><i class="fa fa-exclamation-triangle"></i></span>
-        <i data-bind="visible: loading" class='fa fa-spinner fa-spin'></i>
+        <a class="pull-right pointer stats-refresh" style="margin-left: 8px" data-bind="visible: !isComplexType && !isView, click: refresh"><i class="fa fa-refresh" data-bind="css: { 'fa-spin' : refreshing }"></i></a> <i data-bind="visible: loadingStats" class='fa fa-spinner fa-spin'></i>
         <!-- ko if: column == null -->
-        <strong class="table-name" data-bind="text: table"></strong> ${ _(' table analysis') }
+        <strong class="table-name" data-bind="text: table"></strong> ${ _(' table') }
         <!-- /ko -->
         <!-- ko ifnot: column == null -->
-        <strong class="table-name" data-bind="text: column"></strong> ${ _(' column analysis') }
+        <strong class="table-name" data-bind="text: column"></strong> ${ _(' column') }
         <!-- /ko -->
       </h3>
       <div class="popover-content">
-        <div class="alert" style="text-align: left; display:none" data-bind="visible: hasError">${ _('There is no analysis available') }</div>
-        <!-- ko if: isComplexType && sourceType == 'impala' -->
-        <div class="alert" style="text-align: left">${ _('Column analysis is currently not supported for columns of type:') } <span data-bind="text: type"></span></div>
-        <!-- /ko -->
-        <!-- ko template: {if: column == null && ! hasError() && ! (isComplexType && sourceType == 'impala'), name: 'table-stats' } --><!-- /ko -->
-        <!-- ko template: {if: column != null && ! hasError() && ! (isComplexType && sourceType == 'impala'), name: 'column-stats' } --><!-- /ko -->
+        <ul class="nav nav-tabs">
+          <li class="active" data-bind="click: function () { activeTab('sample'); }, visible: column === null">
+            <a class="inactive-action" href="#sampleTab" data-toggle="tab">${_('Sample')}</a>
+          </li>
+          <li data-bind="click: function () { activeTab('analysis'); }">
+            <a class="inactive-action" href="#analysisTab" data-toggle="tab">${_('Analysis')} <span class="pull-right stats-warning muted" data-bind="visible: inaccurate() && column == null && !isComplexType && !isView" rel="tooltip" data-placement="top" title="${ _('The column stats for this table are not accurate') }" style="margin-left: 8px"><i class="fa fa-exclamation-triangle"></i></span></a>
+          </li>
+          <!-- ko if: sourceType === 'hive' || sourceType === 'impala' -->
+          <li class="pull-right">
+            <a class="more-link" target="_blank" data-bind="attr: { 'href': '/metastore/table/' + database + '/' + table }">
+              <i class="fa fa-external-link" ></i> ${ _('View more...') }
+            </a>
+          </li>
+          <!-- /ko -->
+        </ul>
+        <div class="tab-content" style="border: none">
+          <div class="tab-pane active" id="sampleTab">
+            <!-- ko hueSpinner: { spin: loadingSamples, center: true, size: 'large' } --><!-- /ko -->
+            <!-- ko ifnot: loadingSamples -->
+            <div style="max-height: 320px; overflow: auto; text-align: left; padding: 3px;">
+              <!-- ko with: samples -->
+              <!-- ko if: rows.length == 0 -->
+              <div class="alert">${ _('The selected table has no data.') }</div>
+              <!-- /ko -->
+              <!-- ko if: rows.length > 0 -->
+              <table class="table table-striped table-condensed">
+                <tr>
+                  <th style="width: 10px"></th>
+                  <!-- ko foreach: headers -->
+                  <th data-bind="text: $data"></th>
+                  <!-- /ko -->
+                </tr>
+                <tbody>
+                <!-- ko foreach: rows -->
+                <tr>
+                  <td data-bind="text: $index()+1"></td>
+                  <!-- ko foreach: $data -->
+                  <td style="white-space: pre;" data-bind="text: $data"></td>
+                  <!-- /ko -->
+                </tr>
+                <!-- /ko -->
+                </tbody>
+              </table>
+              <!-- /ko -->
+              <!-- /ko -->
+            </div>
+            <!-- /ko -->
+          </div>
+          <div class="tab-pane" id="analysisTab">
+            <!-- ko hueSpinner: { spin: loadingStats, center: true, size: 'large' } --><!-- /ko -->
+            <!-- ko ifnot: loadingStats -->
+            <div class="alert" style="text-align: left; display:none" data-bind="visible: statsHasError">${ _('There is no analysis available') }</div>
+            <!-- ko if: isComplexType && sourceType == 'impala' -->
+            <div class="alert" style="text-align: left">${ _('Column analysis is currently not supported for columns of type:') } <span data-bind="text: type"></span></div>
+            <!-- /ko -->
+            <!-- ko template: {if: column == null && ! statsHasError() && ! (isComplexType && sourceType == 'impala'), name: 'table-stats' } --><!-- /ko -->
+            <!-- ko template: {if: column != null && ! statsHasError() && ! (isComplexType && sourceType == 'impala'), name: 'column-stats' } --><!-- /ko -->
+            <!-- /ko -->
+          </div>
+        </div>
       </div>
     </div>
   </script>
 
   <script type="text/html" id="table-stats-link">
-    <a class="inactive-action" href="javascript:void(0)" data-bind="visible: enabled, click: toggleStats, css: { 'blue': analysisStats() || alwaysActive }"><i class='fa fa-bar-chart' title="${_('View statistics') }"></i></a>
-    <!-- ko template: { if: analysisStats, name: 'stats-popover'} --><!-- /ko -->
+    <a class="inactive-action" href="javascript:void(0)" data-bind="visible: enabled, click: toggleStats, css: { 'blue': analysisStats() || alwaysActive }, "><i class='fa fa-bar-chart' title="${_('View statistics') }"></i></a>
   </script>
 
   <script type="text/javascript" charset="utf-8">
@@ -107,6 +169,8 @@ from desktop.views import _ko
         var self = this;
         self.params = params;
         var $targetElement = $(element);
+        var $statsContainer = $('<div>').appendTo($('body'));
+
         self.i18n = {
           errorLoadingStats: "${ _('There was a problem loading the stats.') }",
           errorRefreshingStats: "${ _('There was a problem refreshing the stats.') }",
@@ -129,7 +193,7 @@ from desktop.views import _ko
 
         var lastOffset = { top: -1, left: -1 };
         self.refreshPopoverPosition = function () {
-          var $popover = $targetElement.find(".popover");
+          var $popover = $statsContainer.find(".popover");
           if ($targetElement.is(":visible")) {
             var newTop = $targetElement.offset().top - $(window).scrollTop();
             if (lastOffset.left != $targetElement.offset().left || lastOffset.top != newTop) {
@@ -171,13 +235,8 @@ from desktop.views import _ko
           }
         });
 
-        $(document).click(function(event) {
-          if(!$(event.target).closest($targetElement).length) {
-            self.analysisStats(null)
-          }
-        })
-
         self.toggleStats = function (data, event) {
+          $statsContainer.empty();
           if (self.analysisStats()) {
             self.analysisStats(null);
           } else {
@@ -190,9 +249,28 @@ from desktop.views import _ko
               assistHelper: self.params.assistHelper,
               type: self.params.fieldType
             }));
+
+            var $popover = $('<div>');
+            $statsContainer.append($popover)
+
+            ko.renderTemplate('stats-popover', self, {
+              afterRender: function(renderedElement) {
+                var hideWhenClickOutside = function (event) {
+                  if(!$(event.target).closest($statsContainer).length) {
+                    self.analysisStats(null)
+                    $(document).off('click', hideWhenClickOutside);
+                  }
+                }
+
+                window.setTimeout(function () {
+                  $(document).on('click', hideWhenClickOutside);
+                }, 0)
+              }
+            }, $popover[0]);
           }
         };
       }
+
       ko.components.register('table-stats', {
         viewModel: {
           createViewModel: function(params, componentInfo) {

+ 0 - 1
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -331,7 +331,6 @@ ${ require.config() }
             navigationSettings: {
               openDatabase: true,
               openItem: false,
-              showPreview: true,
               showStats: true
             },
           },