|
@@ -1,7 +1,22 @@
|
|
|
const createObservable = initial => {
|
|
|
+ let _val = initial;
|
|
|
+ let _listeners = [];
|
|
|
+
|
|
|
return {
|
|
|
- _get: () => initial, // TODO
|
|
|
- _set: () => {}, // TODO
|
|
|
+ _get: () => _val,
|
|
|
+ _set: newValue => {
|
|
|
+ const oldValue = _val;
|
|
|
+ _val = newValue;
|
|
|
+ _listeners
|
|
|
+ .filter(({ equality }) => !equality(oldValue, newValue))
|
|
|
+ .forEach(({ callback }) => callback(newValue));
|
|
|
+ },
|
|
|
+ _sub: (callback, equality) => {
|
|
|
+ _listeners.push({ callback, equality });
|
|
|
+ return () => {
|
|
|
+ _listeners = _listeners.filter(ln => ln.callback !== callback);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|