[indexPattern/FieldList] move indexed array creation into a class

This commit is contained in:
Spencer Alger 2015-05-06 13:39:44 -07:00
parent 2217bc6b79
commit 7b8988c9fb
5 changed files with 39 additions and 31 deletions

View file

@ -0,0 +1,20 @@
define(function (require) {
return function FieldListProvider(Private) {
var Field = Private(require('components/index_patterns/_field'));
var IndexedArray = require('utils/indexed_array/index');
var _ = require('lodash');
_(FieldList).inherits(IndexedArray);
function FieldList(indexPattern, specs) {
FieldList.Super.call(this, {
index: ['name'],
group: ['type'],
initialSet: specs.map(function (field) {
return new Field(indexPattern, field);
})
});
}
return FieldList;
};
});

View file

@ -8,11 +8,10 @@ define(function (require) {
var getIds = Private(require('components/index_patterns/_get_ids'));
var mapper = Private(require('components/index_patterns/_mapper'));
var intervals = Private(require('components/index_patterns/_intervals'));
var Field = Private(require('components/index_patterns/_field'));
var getComputedFields = require('components/index_patterns/_get_computed_fields');
var DocSource = Private(require('components/courier/data_source/doc_source'));
var mappingSetup = Private(require('utils/mapping_setup'));
var IndexedArray = require('utils/indexed_array/index');
var FieldList = Private(require('components/index_patterns/_field_list'));
var flattenHit = Private(require('components/index_patterns/_flatten_hit'));
var formatHit = require('components/index_patterns/_format_hit');
@ -107,14 +106,7 @@ define(function (require) {
};
function initFields(fields) {
fields = fields || self.fields || [];
self.fields = new IndexedArray({
index: ['name'],
group: ['type'],
initialSet: fields.map(function (field) {
return new Field(self, field);
})
});
self.fields = new FieldList(self, fields || self.fields || []);
}
self._indexFields = function () {

View file

@ -25,7 +25,7 @@
</div>
<ul
bindonce class="list-unstyled discover-selected-fields" >
<discover-field ng-repeat="field in fields|filter:{display:true}">
<discover-field ng-repeat="field in fields.raw|filter:{display:true}">
</discover-field>
</ul>

View file

@ -10,7 +10,7 @@ define(function (require) {
var _ = require('lodash');
var rison = require('utils/rison');
var fieldCalculator = require('plugins/discover/components/field_chooser/lib/field_calculator');
var Field = Private(require('components/index_patterns/_field'));
var FieldList = Private(require('components/index_patterns/_field_list'));
return {
restrict: 'E',
@ -214,32 +214,28 @@ define(function (require) {
if (!indexPattern || !hits || !fieldCounts) return;
var fieldNames = _.keys(fieldCounts);
var ipFieldNames = _.keys(indexPattern.fields.byName);
var unknownFieldNames = _.difference(fieldNames, ipFieldNames);
var unknownFields = unknownFieldNames.map(function (name) {
return new Field(indexPattern, {
name: name,
var fieldSpecs = indexPattern.fields.slice(0);
var fieldNamesInDocs = _.keys(fieldCounts);
var fieldNamesInIndexPattern = _.keys(indexPattern.fields.byName);
_.difference(fieldNamesInDocs, fieldNamesInIndexPattern)
.forEach(function (unknownFieldName) {
fieldSpecs.push({
name: unknownFieldName,
type: 'unknown'
});
});
return [].concat(indexPattern.fields.raw, unknownFields).map(function (f) {
// clone the field with Object.create so that
// we can edit it without leaking our changes
// and so non-enumerable props/getters are
// preserved
var field = Object.create(f);
var fields = new FieldList(indexPattern, fieldSpecs);
fields.forEach(function (field) {
field.displayOrder = _.indexOf($scope.columns, field.name) + 1;
field.display = !!field.displayOrder;
field.rowCount = $scope.fieldCounts[field.name];
var prev = _.find(prevFields, { name: field.name });
field.details = _.get(prev, 'details');
return field;
field.details = _.get(prevFields, ['byName', field.name, 'details']);
});
return fields;
}
}
};

View file

@ -132,7 +132,7 @@ define(function (require) {
// Re-init
destroy();
_.each(indexPattern.fields, function (field) { field.count = 0;}); // Reset the popular fields
_.each(indexPattern.fields, function (field) { field.$$spec.count = 0;}); // Reset the popular fields
init($elem, {
columns: [],
toggle: sinon.spy(),