瀏覽代碼

HUE-2838 [metastore] Add Ko skeleton to filter partitions by columns

Romain Rigaux 10 年之前
父節點
當前提交
d79fee3

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

@@ -37,6 +37,20 @@ ${ components.menubar() }
     <div class="span9">
       <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
+          <div id="partition-filter" class="card-body">
+            ${ _('Filter by ') }
+            <div data-bind="foreach: filters">
+              <select data-bind="options: $root.columns"></select>
+              <input type="text" data-bind="value: value"></input>
+              <a href="javascript: void(0)" data-bind="click: $root.removeFilter">
+                <i class="fa fa-minus"></i>
+              </a>
+            </div>
+
+            <a href="javascript: void(0)" data-bind="click: addFilter">
+              <i class="fa fa-plus"></i> ${ _('Add ') }
+            </a>
+          <div>
           <div class="card-body">
             <p>
           % if partitions:
@@ -68,7 +82,29 @@ ${ components.menubar() }
 
 <link rel="stylesheet" href="${ static('metastore/css/metastore.css') }" type="text/css">
 
+<script src="${ static('desktop/ext/js/knockout.min.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('desktop/ext/js/knockout-mapping.min.js') }" type="text/javascript" charset="utf-8"></script>
+
 <script type="text/javascript" charset="utf-8">
+  var PartitionFilterViewModel = function (partitions_json) {
+    var self = this;
+
+    self.filters = ko.observableArray([]);
+
+    self.columns = ko.mapping.fromJS(partitions_json);
+
+    self.addFilter = function() {
+      self.filters.push(ko.mapping.fromJS({'column': '', 'value': ''}));
+    }
+
+    self.removeFilter = function(data) {
+      self.filters.remove(data);
+    }
+  };
+
+  var viewModel = new PartitionFilterViewModel(${ partition_names_json | n,unicode });
+  ko.applyBindings(viewModel, $("#partition-filter")[0]);
+
   $(document).ready(function () {
     $("a[data-row-selector='true']").jHueRowSelector();
   });

+ 5 - 1
apps/metastore/src/metastore/views.py

@@ -283,7 +283,11 @@ def describe_partitions(request, database, table):
           'url': reverse('metastore:describe_partitions', kwargs={'database': database, 'table': table})
         },
       ],
-      'database': database, 'table': table_obj, 'partitions': partitions, 'request': request
+      'database': database,
+      'table': table_obj,
+      'partitions': partitions,
+      'partition_names_json': json.dumps([partition.name for partition in table_obj.partition_keys]),
+      'request': request
   })