props-model
Advanced tools
Comparing version 0.7.0 to 0.8.0
@@ -42,2 +42,3 @@ "use strict"; | ||
this._props = {}; | ||
this._firedProps = new Set(); | ||
} | ||
@@ -58,4 +59,19 @@ /** | ||
_firePropChangeEvent(propName, newValue, oldValue) { | ||
this._eventEmitter.emit(`${propName}-changed`, propName, newValue, oldValue); | ||
this._firePropChangeEvents([[propName, [newValue, oldValue]]]); | ||
} | ||
_firePropChangeEvents(events) { | ||
const firstInChain = this._firedProps.size === 0; | ||
events.forEach(([propName, [newValue, oldValue]]) => { | ||
this._firedProps.add(propName); | ||
this._eventEmitter.emit(`${propName}-changed`, propName, newValue, oldValue); | ||
}); | ||
if (firstInChain) { | ||
this._eventEmitter.emit('prop-chain-completed', Array.from(this._firedProps)); | ||
this._firedProps.clear(); | ||
} | ||
} | ||
/** | ||
@@ -253,9 +269,5 @@ * Define a primary property that the model will track. It's value is set to the `initialValue`, which counts as setting | ||
}); | ||
Object.entries(args[0]).forEach(([propName, value], idx) => { | ||
const oldValue = oldValues[idx]; | ||
const changeEvents = Object.entries(args[0]).map(([propName, value], idx) => [propName, [value, oldValues[idx]]]).filter(([propName, [newValue, oldValue]]) => this._props[propName].didChange(newValue, oldValue)); | ||
if (this._props[propName].didChange(value, oldValue)) { | ||
this._firePropChangeEvent(propName, value, oldValue); | ||
} | ||
}); | ||
this._firePropChangeEvents(changeEvents); | ||
} else { | ||
@@ -466,2 +478,6 @@ const propName = args[0], | ||
} | ||
_onPropChainComplete(propFilter, handler) { | ||
this._eventEmitter.on('prop-chain-completed', firedProps => handler(firedProps.filter(propFilter))); | ||
} | ||
/** | ||
@@ -505,2 +521,6 @@ * Register the given handler to be called with the values of all of the named properties anytime | ||
onPropChainComplete(handler) { | ||
return this._onPropChainComplete(() => true, handler); | ||
} | ||
set(...args) { | ||
@@ -541,3 +561,3 @@ return this._set(() => {}, ...args); | ||
* | ||
* @returns {{get, set, createUtilizer, createChangeHandler, toJSON, getAll}} | ||
* @returns {{get, set, createUtilizer, createChangeHandler, toJSON, getAll, getPropNames, }} | ||
*/ | ||
@@ -555,3 +575,4 @@ | ||
getAll: () => this._getAll(readChecker), | ||
getPropNames: () => this._getPropNames(readChecker) | ||
getPropNames: () => this._getPropNames(readChecker), | ||
onPropChainComplete: (...args) => this._onPropChainComplete(readChecker, ...args) | ||
}; | ||
@@ -558,0 +579,0 @@ } |
{ | ||
"name": "props-model", | ||
"version": "0.7.0", | ||
"version": "0.8.0", | ||
"description": "A model for properties including change events and derived properties", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
45680
755