Home Reference Source Repository

src/IndexedApi.js


/**
	Aggregation api for properties providing indexed or array-like access to child properties.

	@see {@link ArrayProperty}
	@see {@link IndexedProperty}
*/
export default class IndexedApi {
	constructor(property) {
		this._property = property;
	}

	impl() {
		return this._property.__();
	}

	isActive() {
		return this._property.isActive();
	}

	shadow() {
		return this._property._();
	}

	//------------------------------------------------------------------------------------------------------
	//    Select Array methods:
	//          (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
	//------------------------------------------------------------------------------------------------------

	get length() {
		if (this.isActive()) {
			return this.impl().length;
		}
	}

	clear() {
		if (this.isActive()) {
			this.impl().clear();
		}
	}

	concat(...values) {
		if (this.isActive()) {
			return this.impl().concat(...values);
		}
	}

	pop() {
		if (this.isActive()) {
			return this.impl().pop();
		}
	}

	push(...values) {
		if (this.isActive()) {
			return this.impl().push(...values);
		}
	}

	remove(idx) {
		if (this.isActive()) {
			return this.impl().remove(idx);
		}
	}

	shift() {
		if (this.isActive()) {
			return this.impl().shift();
		}
	}

	splice(start, deleteCount, ...newItems) {
		if (this.isActive()) {
			return this.impl().splice(start, deleteCount, ...newItems);
		}
	}

	unshift(...values) {
		if (this.isActive()) {
			return this.impl().unshift(...values);
		}
	}
}