Эх сурвалжийг харах

[search] Make field list of gridlayout a computed

Romain Rigaux 11 жил өмнө
parent
commit
62d7b00

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

@@ -339,10 +339,12 @@ class Collection(models.Model):
     schema_fields = SolrApi(SOLR_URL.get(), user).fields(self.name)
     schema_fields = schema_fields['schema']['fields']
 
-    return sorted([{'name': str(field), 'type': str(attributes.get('type', '')),
-                    'isId': attributes.get('required') and attributes.get('uniqueKey'),
-                  }
-                  for field, attributes in schema_fields.iteritems()])
+    return sorted([{
+        'name': str(field),
+        'type': str(attributes.get('type', '')),
+        'isId': attributes.get('required') and attributes.get('uniqueKey'),
+      } for field, attributes in schema_fields.iteritems()]
+    )
 
   @property
   def properties_dict(self):

+ 1 - 0
apps/search/src/search/views.py

@@ -534,6 +534,7 @@ def index_fields_dynamic(request, collection_id):
     solr_query['collection'] = hue_collection.name
     
     dynamic_fields = SolrApi(SOLR_URL.get(), request.user).luke(hue_collection.name)
+    print dynamic_fields['fields']
     result['message'] = ''
     result['dynamic_fields'] = [name for name, properties in dynamic_fields['fields'].iteritems() if 'dynamicBase' in properties]
     result['status'] = 0

+ 60 - 21
apps/search/static/js/search.ko.js

@@ -486,10 +486,20 @@ var Collection = function (vm, collection) {
   };
 
   self.template.fieldsModalFilter = ko.observable(); // For UI
-  self.template.fieldsModalType = ko.observable("");
-  self.template.fieldsAttributesFilter = ko.observable(); // For UI
+  self.template.fieldsModalType = ko.observable(""); // For UI
+  self.template.fieldsAttributesFilter = ko.observable(""); // For UI
   self.template.filteredModalFields = ko.observableArray();
-  self.template.filteredAttributeFields = ko.observableArray();
+  self.template.filteredAttributeFields = ko.computed(function() {
+	var _fields = [];
+
+	$.each(self.template.fieldsAttributes(), function (index, field) {
+	  if (self.template.fieldsAttributesFilter() == "" || field.name().toLowerCase().indexOf(self.template.fieldsAttributesFilter().toLowerCase()) > -1){
+	    _fields.push(field);
+	  }
+	});
+	    
+	return _fields;	  
+  });
   self.template.availableWidgetFields = ko.computed(function() {
     return self.template.fieldsModalType() == 'histogram-widget'? vm.availableDateFields() : self.availableFacetFields();
   });
@@ -511,22 +521,7 @@ var Collection = function (vm, collection) {
     self.template.filteredModalFields(_fields);
   });
 
-  self.template.fieldsAttributesFilter.subscribe(function(value) {
-    var _fields = [];
-    var _availableFields = self.template.fieldsAttributes();
-
-    $.each(_availableFields, function (index, field) {
-      if (self.template.fieldsAttributesFilter() == "" || field.name().toLowerCase().indexOf(self.template.fieldsAttributesFilter().toLowerCase()) > -1){
-        _fields.push(field);
-      }
-    });
-    
-    self.template.filteredAttributeFields(_fields);
-  });
-
-  self.template.fieldsAttributesFilter("");
-
-  self.updateFields = function() {
+  self.updateCollection = function() {
     $.post("/search/get_collection/", {
         name: self.name()
 	  }, function (data) {
@@ -541,11 +536,54 @@ var Collection = function (vm, collection) {
 	      $.each(data.collection.collection.fields, function(index, field) {
 	    	self.fields.push(ko.mapping.fromJS(field));
 	      });
-	      self.template.fieldsAttributesFilter.valueHasMutated();
 	    }
 	}).fail(function (xhr, textStatus, errorThrown) {});
   };
   
+  self.syncFields = function() {
+    $.post("/search/get_collection/", {
+        name: self.name()
+	  }, function (data) {
+	    if (data.status == 0) {
+	      self.idField(data.collection.collection.idField);	      
+	      
+	      var _newNames = $.map(data.collection.collection.template.fieldsAttributes, function(field){ return field.name; });
+	      var _newFields = [];
+	      
+	      self.template.fieldsAttributes.removeAll();
+	      
+	      $.each(self.template.fieldsAttributes(), function(index, field) {//alert(ko.mapping.toJSON(field));
+	        if (_newNames.indexOf(field.name()) == -1) {
+	          self.template.fieldsAttributes.remove(field);
+	        } else {
+//	          _newFields.push(ko.mapping.fromJS(field));
+	          self.template.fieldsAttributes.push(ko.mapping.fromJS(field));
+	        }
+	      });
+	      
+	      self.fields.removeAll();
+
+	      alert('aa');
+	      /**ko.utils.arrayForEach(differences, function(difference) {
+	        if (difference.status === "added") {
+	        	self.template.fieldsAttribute.push()
+	        } else if (difference.status === "deleted") {
+	          results.push(difference.value);
+	        }
+	      });
+	      
+	      $.each(data.collection.collection.template.fieldsAttributes, function(index, field) {
+		    self.template.fieldsAttributes.push(ko.mapping.fromJS(field));
+		  });	      
+	      self.fields.removeAll();
+	      $.each(data.collection.collection.fields, function(index, field) {
+	    	self.fields.push(ko.mapping.fromJS(field));
+	      });
+	      self.template.fieldsAttributesFilter.valueHasMutated();*/
+	    }
+	}).fail(function (xhr, textStatus, errorThrown) {});
+  };
+  // syncDynamicFields
   
   self.addDynamicFields = function () { // + Adding merge smartly if schema updated
     $.post("/search/index/" + self.id + "/fields/dynamic", {
@@ -701,7 +739,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
   if (initial_json.collections) {
     self.collection.name.subscribe(function (newValue) {
 	  self.collection.label(newValue);
-	  self.collection.updateFields();
+	  self.collection.updateCollection();
 	  self.changeCollection(false);
 	  self.search();
     });
@@ -778,6 +816,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
   
   self.init = function (callback) {
     //self.collection.addDynamicFields();
+	//self.collection.syncFields();
     self.isEditing(true);
     self.search(callback);
   }