Use EventEmitter
instead of Emitter
in Box
... so that we have one less dependency on `Tappable`
This commit is contained in:
parent
d2876a7c9a
commit
391958f5cf
1 changed files with 8 additions and 5 deletions
|
@ -1,6 +1,6 @@
|
||||||
import type {Prism} from './prism/Interface'
|
import type {Prism} from './prism/Interface'
|
||||||
import prism from './prism/prism'
|
import prism from './prism/prism'
|
||||||
import Emitter from './utils/Emitter'
|
import EventEmitter from './utils/EventEmitter'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common interface for Box types. Boxes wrap a single value.
|
* Common interface for Box types. Boxes wrap a single value.
|
||||||
|
@ -39,7 +39,7 @@ export interface IBox<V> {
|
||||||
*/
|
*/
|
||||||
export default class Box<V> implements IBox<V> {
|
export default class Box<V> implements IBox<V> {
|
||||||
private _publicPrism: Prism<V>
|
private _publicPrism: Prism<V>
|
||||||
private _emitter = new Emitter<V>()
|
private _emitter = new EventEmitter()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param _value - The initial value of the Box.
|
* @param _value - The initial value of the Box.
|
||||||
|
@ -50,8 +50,11 @@ export default class Box<V> implements IBox<V> {
|
||||||
*/
|
*/
|
||||||
protected _value: V,
|
protected _value: V,
|
||||||
) {
|
) {
|
||||||
const subscribe = (listener: (val: V) => void) =>
|
const subscribe = (listener: (val: V) => void) => {
|
||||||
this._emitter.tappable.tap(listener)
|
this._emitter.addEventListener('change', listener)
|
||||||
|
return () => this._emitter.removeEventListener('change', listener)
|
||||||
|
}
|
||||||
|
|
||||||
const getValue = () => this._value
|
const getValue = () => this._value
|
||||||
this._publicPrism = prism(() => {
|
this._publicPrism = prism(() => {
|
||||||
return prism.source(subscribe, getValue)
|
return prism.source(subscribe, getValue)
|
||||||
|
@ -66,7 +69,7 @@ export default class Box<V> implements IBox<V> {
|
||||||
set(v: V) {
|
set(v: V) {
|
||||||
if (v === this._value) return
|
if (v === this._value) return
|
||||||
this._value = v
|
this._value = v
|
||||||
this._emitter.emit(v)
|
this._emitter.emit('change', v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue