/* */ 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; }(); });