Pārlūkot izejas kodu

HUE-2981 [search] Build tree schema in collection property page

Romain Rigaux 9 gadi atpakaļ
vecāks
revīzija
2091d3e04f

+ 4 - 14
apps/search/src/search/models.py

@@ -33,7 +33,7 @@ from desktop.models import get_data_link
 
 from libsolr.api import SolrApi
 
-from search.conf import SOLR_URL
+from search.conf import SOLR_URL, LATEST
 
 
 LOG = logging.getLogger(__name__)
@@ -506,21 +506,11 @@ class Collection2(object):
     for field in props['collection']['template']['fieldsAttributes']:
       if 'type' not in field:
         field['type'] = 'string'
-    if 'nested' not in props['collection']:
+    if 'nested' not in props['collection'] and LATEST.get():
       props['collection']['nested'] = {
         'enabled': False,
-        'schema': [
-          {'filter': 'type_s:book', 'name': 'books', 'selected': False, 'values': [ # limit 10
-            {'filter': 'type_s:review', 'name': 'reviews', 'selected': False, 'values': [
-#               {'filter': 'type_s:review2', 'name': 'reviews2', 'selected': False, 'values': []},
-#               {'filter': 'type_s:review3', 'name': 'reviews3', 'selected': False, 'values': []}]}]},
-#           {'filter': 'type_s:map', 'name': 'maps', 'selected': False, 'values': [
-#             {'filter': 'type_s:review', 'name': 'reviews', 'selected': False, 'values': []}]},
-#           {'filter': 'type_s:notebook', 'name': 'notebooks', 'selected': False, 'values': [
-#             {'filter': 'type_s:sheet', 'name': 'sheets', 'selected': False, 'values': []}]}
-        ]
-
-      }]}]}
+        'schema': []
+      }
 
     for facet in props['collection']['facets']:
       properties = facet['properties']

+ 22 - 16
apps/search/src/search/static/search/js/search.ko.js

@@ -452,18 +452,24 @@ var Collection = function (vm, collection) {
   self.suggest = ko.mapping.fromJS(collection.suggest);
   self.nested = ko.mapping.fromJS(collection.nested);
   self.nestedNames = ko.computed(function() {
-	function flatten(values) {
-		var fields = [];
-		$.each(values, function (index, facet) {
-	      fields.push(facet.filter());
-		  if (facet.values().length > 0) {
-			fields.push.apply(fields, flatten(facet.values()));
-		  }
-		});
-		return fields;
-	  }
-	  return flatten(self.nested.schema());
+    function flatten(values) {
+      var fields = [];
+      $.each(values, function (index, facet) {
+        fields.push(facet.filter());
+        if (facet.values().length > 0) {
+          fields.push.apply(fields, flatten(facet.values()));
+        }
+      });
+      return fields;
+    }
+    return flatten(self.nested.schema());
   });
+  self.nestedAddLeaf = function(leaf) {
+    leaf.push(
+      ko.mapping.fromJS(
+        {'filter': '', 'name': '', 'selected': false, 'values': []} // limit 10
+    ));
+  };
   self.enabled = ko.mapping.fromJS(collection.enabled);
   self.autorefresh = ko.mapping.fromJS(collection.autorefresh);
   self.autorefreshSeconds = ko.mapping.fromJS(collection.autorefreshSeconds || 60);
@@ -1653,9 +1659,9 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
       };
 
       if (_childDocuments) {
-    	var childRecords = [];
-    	$.each(_childDocuments, function (index, item) {
-    	  var record = self._make_result_doc(item);
+        var childRecords = [];
+        $.each(_childDocuments, function (index, item) {
+          var record = self._make_result_doc(item);
           $.each(item, function(key, val) {
             var _field = ko.mapping.fromJS({
                 key: key,
@@ -1664,9 +1670,9 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
             });
             record.details.push(_field);
           });
-    	  childRecords.push(record);
+          childRecords.push(record);
         });
-    	doc['childDocuments'] = ko.observable(childRecords);
+        doc['childDocuments'] = ko.observable(childRecords);
       }
       if (!self.collection.template.isGridLayout()) {
         // fix the fields that contain dots in the name

+ 23 - 19
apps/search/src/search/templates/common_search.mako

@@ -541,7 +541,7 @@ ${ dashboard.layout_skeleton() }
         <input type="text" class="input-medium" data-bind="spinedit: properties.limit"/>
       </span>
     </div>
-  
+
     <div class="facet-field-cnt">
       <span class="spinedit-cnt">
         <span class="facet-field-label">
@@ -577,7 +577,7 @@ ${ dashboard.layout_skeleton() }
         <div class="hit-title" data-bind="text: field, attr: {'title': field}"></div>
         <div class="clearfix"></div>
       </div>
- 
+
       <div class="content">
         <div class="facet-field-cnt">
           <span class="spinedit-cnt">
@@ -1326,7 +1326,7 @@ ${ dashboard.layout_skeleton() }
           </tr>
         </tbody>
       </table>
-      
+
       <!-- ko if: doc.childDocuments != undefined -->
         <table id="result-container" data-bind="visible: $root.hasRetrievedResults()" style="margin-top: 0; width: 100%">
           <thead>
@@ -2339,10 +2339,6 @@ ${ dashboard.layout_skeleton() }
               <div class="controls">
                 <select id="settingssolrindex" data-bind="options: $root.initial.collections, value: $root.collection.name"></select>
               </div>
-              <label class="control-label" for="settingsdescription">${ _('Description') }</label>
-              <div class="controls">
-                <input id="settingsdescription" type="text" class="input-xlarge" data-bind="value: $root.collection.description" style="margin-bottom: 0" />
-              </div>
             </div>
             <!-- /ko -->
             <div class="control-group">
@@ -2362,18 +2358,20 @@ ${ dashboard.layout_skeleton() }
                 </label>
               </div>
             </div>
-            <div class="control-group" data-bind="visible: $root.isLatest">
+            <!-- ko if: $root.isLatest -->
+            <div class="control-group">
               <label class="control-label">${ _('Nested documents') }</label>
               <div class="controls">
                 <label class="checkbox" style="padding-top:0">
-                  <input type="checkbox" style="margin-right: 4px; margin-top: 9px" data-bind="checked: $root.collection.nested.enabled">
+                  <input type="checkbox" style="margin-right: 4px; margin-top: 9px" data-bind="checked: $root.collection.nested.enabled"/>
                   <span data-bind="visible: $root.collection.nested.enabled">
                     ${ _('Schema') }
-                    <span data-bind="template: {name: 'nested-document-schema-level', data: $root.collection.nested.schema()}"></span> 
+                    <span data-bind="template: {name: 'nested-document-schema-level', data: $root.collection.nested.schema()}"></span>
                   </span>
                 </label>
               </div>
-            </div>            
+            </div>
+            <!-- /ko -->
           </fieldset>
         </form>
       </div>
@@ -2426,21 +2424,27 @@ ${ dashboard.layout_skeleton() }
 
 
 <script type="text/html" id="nested-document-schema-level">
-  <ul class="unstyled airy qdefinitions" data-bind="foreach: $data">
+  <ul class="unstyled airy" data-bind="foreach: $data">
     <li>
-      <input type="text" data-bind="value: filter"/>
+      <input type="text" data-bind="value: filter" placeholder="e.g. type_s:books"/>
       <input type="checkbox" data-bind="checked: selected"/>
       <!-- ko if: values().length == 0 -->
-        <i class="fa fa-minus"></i>
-        <i class="fa fa-plus"></i>
+        <a data-bind="click: function() { $root.collection.nestedAddLeaf(values); }" href="javascript:void(0)">
+          <i class="fa fa-plus"></i>
+        </a>
+        <a data-bind="click: function() { $parent.pop($data); $root.collection.nested.schema.valueHasMutated(); }" href="javascript:void(0)">
+          <i class="fa fa-minus"></i>
+        </a>
       <!-- /ko -->
-      <!-- ko if: values().length > 0 -->    
-        <span data-bind="template: {name: 'nested-document-schema-level', data: values()}"></span> 
+      <!-- ko if: values().length > 0 -->
+        <span data-bind="template: {name: 'nested-document-schema-level', data: values()}"></span>
       <!-- /ko -->
     </li>
-    <i class="fa fa-plus"></i>
-    <br/>
   </ul>
+    <a data-bind="click: function() { $root.collection.nestedAddLeaf($data); $root.collection.nested.schema.valueHasMutated(); }" href="javascript:void(0)">
+      <i class="fa fa-plus"></i> ${ _('Level') }
+    </a>
+    <br/>
 </script>