@ebflat9/fp
Advanced tools
Comparing version 1.2.22 to 1.2.23
{ | ||
"name": "@ebflat9/fp", | ||
"version": "1.2.22", | ||
"version": "1.2.23", | ||
"description": "my fp utils", | ||
@@ -5,0 +5,0 @@ "source": "src/index.js", |
@@ -19,3 +19,3 @@ import { isFunction } from '../combinators.js' | ||
const result = Reflect.set(...arguments) | ||
dispatchChanged(target) | ||
dispatchChanged(target, prop) | ||
@@ -26,6 +26,14 @@ return result | ||
if (prop === 'observe') | ||
return () => | ||
/** | ||
* Returns an observe function that takes an optional array of props | ||
* to observe | ||
* | ||
* @param {array} Props | ||
* @returns {Observable} | ||
*/ | ||
return (props = []) => | ||
new Observable(observer => { | ||
subs.push(observer) | ||
return () => subs.splice(subs.indexOf(observer), 1) | ||
const sub = { props, observer } | ||
subs.push(sub) | ||
return () => subs.splice(subs.indexOf(sub), 1) | ||
}) | ||
@@ -43,3 +51,3 @@ | ||
cache[prop] = currentArgs | ||
dispatchChanged(target) | ||
dispatchChanged(target, prop) | ||
} | ||
@@ -56,3 +64,3 @@ | ||
delete target[key] | ||
dispatchChanged(target) | ||
dispatchChanged(target, key) | ||
return true | ||
@@ -62,8 +70,10 @@ }, | ||
function dispatchChanged(target) { | ||
function dispatchChanged(target, prop) { | ||
for (let i = 0; i < subs.length; i++) { | ||
const observer = subs[i] | ||
observer.next(target) | ||
const { props, observer } = subs[i] | ||
if (!props || !props.length || props.includes(prop)) { | ||
observer.next(target) | ||
} | ||
} | ||
} | ||
} |
@@ -1293,3 +1293,3 @@ import { EventEmitter } from '../src/reactivize.js' | ||
observed.observe().subscribe(value => { | ||
observed.observe(['setName', 'name']).subscribe(value => { | ||
called++ | ||
@@ -1310,2 +1310,22 @@ if (called === 1 || called === 3) { | ||
it('should not dispatch if not observing prop', function (done) { | ||
let called = 0 | ||
const obj = { | ||
name: 'tim', | ||
setName(name) { | ||
this.name = name | ||
}, | ||
age: 16, | ||
} | ||
const observed = Observable.makeObservable(obj) | ||
observed.observe(['name', 'setName']).subscribe(value => { | ||
done(new Error('Should not have been called')) | ||
}) | ||
observed.age = 17 | ||
assert.equal(called, 0) | ||
done() | ||
}) | ||
it('should not dispatch if a prop is accessed only', function (done) { | ||
@@ -1312,0 +1332,0 @@ let called = 0 |
221840
7503