comindware.core.ui
Version:
Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.
65 lines (59 loc) • 2.42 kB
text/typescript
import Backbone from 'backbone';
const getNormalizedGroupingIterator = function getNormalizedGroupingIterator(groupingOptions) {
const it = groupingOptions.iterator;
return typeof it === 'string'
? function(model: Backbone.Model) {
return model.get(it) || model[it];
}
: it;
};
const getNormalizedGroupingComparator = function getNormalizedGroupingComparator(groupingOptions) {
const cmp = groupingOptions.comparator;
return cmp !== undefined
? typeof cmp === 'string'
? function(model) {
return model.get(cmp) || model[cmp];
}
: cmp
: groupingOptions.iterator;
};
const getNormalizedGroupingModelFactory = function getNormalizedGroupingModelFactory(groupingOptions) {
const modelFactory = groupingOptions.modelFactory;
return modelFactory !== undefined
? typeof modelFactory === 'string'
? function(model) {
return new Backbone.Model({
displayText: model.get(modelFactory),
groupingModel: true
});
}
: modelFactory
: function(model) {
return new Backbone.Model({
displayText: groupingOptions.iterator(model),
groupingModel: true
});
};
};
export default function fixGroupingOptions(groupingOptions) {
if (groupingOptions.__normalized) {
return;
}
if (!groupingOptions.affectedAttributes) {
groupingOptions.affectedAttributes = [];
}
if (typeof groupingOptions.iterator === 'string') {
groupingOptions.affectedAttributes.push(groupingOptions.iterator);
}
if (typeof groupingOptions.comparator === 'string') {
groupingOptions.affectedAttributes.push(groupingOptions.comparator);
}
if (typeof groupingOptions.modelFactory === 'string') {
groupingOptions.affectedAttributes.push(groupingOptions.modelFactory);
}
groupingOptions.affectedAttributes = _.uniq(groupingOptions.affectedAttributes);
groupingOptions.iterator = getNormalizedGroupingIterator(groupingOptions);
groupingOptions.comparator = getNormalizedGroupingComparator(groupingOptions);
groupingOptions.modelFactory = getNormalizedGroupingModelFactory(groupingOptions);
groupingOptions.__normalized = true;
}