Replace EventEmitter with typed EventDispatcher
This commit is contained in:
@@ -22,12 +22,8 @@ interface State {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Sidebar extends React.Component<Props, State> {
|
class Sidebar extends React.Component<Props, State> {
|
||||||
private updateNode = (node: q.TreeNode) => {
|
private updateNode = () => {
|
||||||
if (!node) {
|
|
||||||
this.setState(this.state)
|
this.setState(this.state)
|
||||||
} else {
|
|
||||||
this.setState({ node })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(props: any) {
|
constructor(props: any) {
|
||||||
@@ -58,17 +54,13 @@ class Sidebar extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private registerUpdateListener(node: q.TreeNode) {
|
private registerUpdateListener(node: q.TreeNode) {
|
||||||
node.on(q.TreeNodeUpdateEvents.merge, this.updateNode)
|
node.onMerge.subscribe(this.updateNode)
|
||||||
node.on(q.TreeNodeUpdateEvents.message, this.updateNode)
|
node.onMessage.subscribe(this.updateNode)
|
||||||
}
|
}
|
||||||
|
|
||||||
private removeUpdateListener(node: q.TreeNode) {
|
private removeUpdateListener(node: q.TreeNode) {
|
||||||
node.removeListener(q.TreeNodeUpdateEvents.merge, this.updateNode)
|
node.onMerge.unsubscribe(this.updateNode)
|
||||||
node.removeListener(q.TreeNodeUpdateEvents.message, this.updateNode)
|
node.onMessage.unsubscribe(this.updateNode)
|
||||||
}
|
|
||||||
|
|
||||||
private open(): boolean {
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
|
|||||||
@@ -13,23 +13,18 @@ interface State {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ValueRenderer extends React.Component<Props, State> {
|
class ValueRenderer extends React.Component<Props, State> {
|
||||||
private updateNode: (node?: q.TreeNode | undefined) => void
|
private updateNode: () => void
|
||||||
constructor(props: any) {
|
constructor(props: any) {
|
||||||
super(props)
|
super(props)
|
||||||
this.state = {}
|
this.state = {}
|
||||||
this.updateNode = (node) => {
|
this.updateNode = () => {
|
||||||
if (!node) {
|
|
||||||
this.setState(this.state)
|
this.setState(this.state)
|
||||||
} else {
|
|
||||||
this.setState({ node })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentWillReceiveProps(nextProps: Props) {
|
public componentWillReceiveProps(nextProps: Props) {
|
||||||
this.props.node && this.props.node.removeListener('update', this.updateNode)
|
this.props.node && this.props.node.onMessage.unsubscribe(this.updateNode)
|
||||||
nextProps.node && nextProps.node.on('update', this.updateNode)
|
nextProps.node && nextProps.node.onMessage.subscribe(this.updateNode)
|
||||||
nextProps.node && this.updateNode(nextProps.node)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private style = (theme: Theme) => {
|
private style = (theme: Theme) => {
|
||||||
|
|||||||
@@ -57,15 +57,17 @@ class TreeNode extends React.Component<TreeNodeProps, TreeNodeState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public componentDidMount() {
|
public componentDidMount() {
|
||||||
this.props.treeNode.on(q.TreeNodeUpdateEvents.merge, this.subnodesDidchange)
|
const { treeNode } = this.props
|
||||||
this.props.treeNode.on(q.TreeNodeUpdateEvents.edges, this.edgesDidChange)
|
treeNode.onMerge.subscribe(this.subnodesDidchange)
|
||||||
this.props.treeNode.on(q.TreeNodeUpdateEvents.message, this.messageDidChange)
|
treeNode.onEdgesChange.subscribe(this.edgesDidChange)
|
||||||
|
treeNode.onMessage.subscribe(this.messageDidChange)
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentWillUnmount() {
|
public componentWillUnmount() {
|
||||||
this.props.treeNode.removeListener(q.TreeNodeUpdateEvents.merge, this.subnodesDidchange)
|
const { treeNode } = this.props
|
||||||
this.props.treeNode.removeListener(q.TreeNodeUpdateEvents.edges, this.edgesDidChange)
|
treeNode.onMerge.unsubscribe(this.subnodesDidchange)
|
||||||
this.props.treeNode.removeListener(q.TreeNodeUpdateEvents.message, this.messageDidChange)
|
treeNode.onEdgesChange.unsubscribe(this.edgesDidChange)
|
||||||
|
treeNode.onMessage.unsubscribe(this.messageDidChange)
|
||||||
}
|
}
|
||||||
|
|
||||||
private getStyles() {
|
private getStyles() {
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
import { Edge, Message } from './'
|
import { Edge, Message } from './'
|
||||||
import { EventEmitter } from 'events'
|
import { EventDispatcher } from '../../../events'
|
||||||
|
|
||||||
export enum TreeNodeUpdateEvents {
|
export class TreeNode {
|
||||||
edges = 'edges',
|
|
||||||
message = 'message',
|
|
||||||
merge = 'merge',
|
|
||||||
}
|
|
||||||
|
|
||||||
export class TreeNode extends EventEmitter {
|
|
||||||
public sourceEdge?: Edge
|
public sourceEdge?: Edge
|
||||||
public message?: Message
|
public message?: Message
|
||||||
public edges: {[s: string]: Edge} = {}
|
public edges: {[s: string]: Edge} = {}
|
||||||
public collapsed = false
|
public collapsed = false
|
||||||
public messages: number = 0
|
public messages: number = 0
|
||||||
|
|
||||||
constructor(sourceEdge?: Edge, message?: Message) {
|
public onMerge = new EventDispatcher<void, TreeNode>(this)
|
||||||
super()
|
public onEdgesChange = new EventDispatcher<void, TreeNode>(this)
|
||||||
|
public onMessage = new EventDispatcher<Message, TreeNode>(this)
|
||||||
|
|
||||||
|
constructor(sourceEdge?: Edge, message?: Message) {
|
||||||
if (sourceEdge) {
|
if (sourceEdge) {
|
||||||
this.sourceEdge = sourceEdge
|
this.sourceEdge = sourceEdge
|
||||||
sourceEdge.target = this
|
sourceEdge.target = this
|
||||||
@@ -25,10 +21,6 @@ export class TreeNode extends EventEmitter {
|
|||||||
this.setMessage(message)
|
this.setMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
private propagateUpdate(event: TreeNodeUpdateEvents) {
|
|
||||||
this.emit(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
public setMessage(value: any) {
|
public setMessage(value: any) {
|
||||||
this.message = value
|
this.message = value
|
||||||
this.messages += 1
|
this.messages += 1
|
||||||
@@ -58,7 +50,7 @@ export class TreeNode extends EventEmitter {
|
|||||||
edge.source = this
|
edge.source = this
|
||||||
|
|
||||||
if (emitUpdate) {
|
if (emitUpdate) {
|
||||||
this.propagateUpdate(TreeNodeUpdateEvents.edges)
|
this.onEdgesChange.dispatch()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,11 +66,11 @@ export class TreeNode extends EventEmitter {
|
|||||||
public updateWithNode(node: TreeNode) {
|
public updateWithNode(node: TreeNode) {
|
||||||
if (node.message) {
|
if (node.message) {
|
||||||
this.setMessage(node.message)
|
this.setMessage(node.message)
|
||||||
this.propagateUpdate(TreeNodeUpdateEvents.message)
|
this.onMessage.dispatch(node.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mergeEdges(node)
|
this.mergeEdges(node)
|
||||||
this.propagateUpdate(TreeNodeUpdateEvents.merge)
|
this.onMerge.dispatch()
|
||||||
}
|
}
|
||||||
|
|
||||||
public leafes(): TreeNode[] {
|
public leafes(): TreeNode[] {
|
||||||
@@ -106,7 +98,7 @@ export class TreeNode extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (edgesDidUpdate) {
|
if (edgesDidUpdate) {
|
||||||
this.propagateUpdate(TreeNodeUpdateEvents.edges)
|
this.onEdgesChange.dispatch()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export { Edge } from './Edge'
|
export { Edge } from './Edge'
|
||||||
export { TreeNode, TreeNodeUpdateEvents } from './TreeNode'
|
export { TreeNode } from './TreeNode'
|
||||||
export { Message } from './Message'
|
export { Message } from './Message'
|
||||||
export { TreeNodeFactory } from './TreeNodeFactory'
|
export { TreeNodeFactory } from './TreeNodeFactory'
|
||||||
export { Tree } from './Tree'
|
export { Tree } from './Tree'
|
||||||
|
|||||||
Reference in New Issue
Block a user