all files / src/vdom/ component-recycler.js

100% Statements 19/19
100% Branches 6/6
100% Functions 2/2
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35    11× 11× 11×   11×           11×   546×   546×     594×   594× 544× 542× 540× 540× 540×       594×    
'use strict';
 
exports.__esModule = true;
exports.collectComponent = collectComponent;
exports.createComponent = createComponent;
 
var _util = require('../util');
 
/** Retains a pool of Components for re-use, keyed on component name.
 *	Note: since component names are not unique or even necessarily available, these are primarily a form of sharding.
 *	@private
 */
var components = _util.createObject();
 
function collectComponent(component) {
	var name = component.constructor.name,
	    list = components[name];
	if (list) list.push(component);else components[name] = [component];
}
 
function createComponent(Ctor, props, context) {
	var inst = new Ctor(props, context),
	    list = components[Ctor.name];
	if (list) {
		for (var i = 0; i < list.length; i++) {
			if (list[i].constructor === Ctor) {
				inst.nextBase = list[i].base;
				list.splice(i, 1);
				break;
			}
		}
	}
	return inst;
}