aurelia-bootstrap
Version:
Bootstrap components written in Aurelia.
116 lines (99 loc) • 3.93 kB
JavaScript
/* */
define(['exports', './repeat-utilities'], function (exports, _repeatUtilities) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MapRepeatStrategy = undefined;
var MapRepeatStrategy = exports.MapRepeatStrategy = function () {
function MapRepeatStrategy() {
}
MapRepeatStrategy.prototype.getCollectionObserver = function getCollectionObserver(observerLocator, items) {
return observerLocator.getMapObserver(items);
};
MapRepeatStrategy.prototype.instanceChanged = function instanceChanged(repeat, items) {
var _this = this;
var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);
if (removePromise instanceof Promise) {
removePromise.then(function () {
return _this._standardProcessItems(repeat, items);
});
return;
}
this._standardProcessItems(repeat, items);
};
MapRepeatStrategy.prototype._standardProcessItems = function _standardProcessItems(repeat, items) {
var index = 0;
var overrideContext = void 0;
items.forEach(function (value, key) {
overrideContext = (0, _repeatUtilities.createFullOverrideContext)(repeat, value, index, items.size, key);
repeat.addView(overrideContext.bindingContext, overrideContext);
++index;
});
};
MapRepeatStrategy.prototype.instanceMutated = function instanceMutated(repeat, map, records) {
var key = void 0;
var i = void 0;
var ii = void 0;
var overrideContext = void 0;
var removeIndex = void 0;
var record = void 0;
var rmPromises = [];
var viewOrPromise = void 0;
for (i = 0, ii = records.length; i < ii; ++i) {
record = records[i];
key = record.key;
switch (record.type) {
case 'update':
removeIndex = this._getViewIndexByKey(repeat, key);
viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);
if (viewOrPromise instanceof Promise) {
rmPromises.push(viewOrPromise);
}
overrideContext = (0, _repeatUtilities.createFullOverrideContext)(repeat, map.get(key), removeIndex, map.size, key);
repeat.insertView(removeIndex, overrideContext.bindingContext, overrideContext);
break;
case 'add':
overrideContext = (0, _repeatUtilities.createFullOverrideContext)(repeat, map.get(key), map.size - 1, map.size, key);
repeat.insertView(map.size - 1, overrideContext.bindingContext, overrideContext);
break;
case 'delete':
if (record.oldValue === undefined) {
return;
}
removeIndex = this._getViewIndexByKey(repeat, key);
viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);
if (viewOrPromise instanceof Promise) {
rmPromises.push(viewOrPromise);
}
break;
case 'clear':
repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);
break;
default:
continue;
}
}
if (rmPromises.length > 0) {
Promise.all(rmPromises).then(function () {
(0, _repeatUtilities.updateOverrideContexts)(repeat.views(), 0);
});
} else {
(0, _repeatUtilities.updateOverrideContexts)(repeat.views(), 0);
}
};
MapRepeatStrategy.prototype._getViewIndexByKey = function _getViewIndexByKey(repeat, key) {
var i = void 0;
var ii = void 0;
var child = void 0;
for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {
child = repeat.view(i);
if (child.bindingContext[repeat.key] === key) {
return i;
}
}
return undefined;
};
return MapRepeatStrategy;
}();
});