mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-10-31 16:07:45 +03:00 
			
		
		
		
	Add ChartMonitor draft
This commit is contained in:
		
							parent
							
								
									aa5ee9b6c6
								
							
						
					
					
						commit
						9904942392
					
				|  | @ -2,7 +2,7 @@ import React, { Component } from 'react'; | ||||||
| import TodoApp from './TodoApp'; | import TodoApp from './TodoApp'; | ||||||
| import { createStore, combineReducers, compose } from 'redux'; | import { createStore, combineReducers, compose } from 'redux'; | ||||||
| import { devTools, persistState } from 'redux-devtools'; | import { devTools, persistState } from 'redux-devtools'; | ||||||
| import { DevTools, DebugPanel, LogMonitor } from 'redux-devtools/lib/react'; | import { DevTools, DebugPanel, LogMonitor, ChartMonitor } from 'redux-devtools/lib/react'; | ||||||
| import { Provider } from 'react-redux'; | import { Provider } from 'react-redux'; | ||||||
| import * as reducers from '../reducers'; | import * as reducers from '../reducers'; | ||||||
| 
 | 
 | ||||||
|  | @ -32,6 +32,11 @@ export default class App extends Component { | ||||||
|                     monitor={LogMonitor} |                     monitor={LogMonitor} | ||||||
|                     visibleOnLoad={true} /> |                     visibleOnLoad={true} /> | ||||||
|         </DebugPanel> |         </DebugPanel> | ||||||
|  |         <DebugPanel top left bottom style={{ fontSize: undefined }}> | ||||||
|  |           <DevTools store={store} | ||||||
|  |                     monitor={ChartMonitor} | ||||||
|  |                     visibleOnLoad={true} /> | ||||||
|  |         </DebugPanel> | ||||||
|       </div> |       </div> | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -47,6 +47,7 @@ | ||||||
|     "redux": "^2.0.0 || ^3.0.0" |     "redux": "^2.0.0 || ^3.0.0" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "d3-state-visualizer": "^0.4.3", | ||||||
|     "react-json-tree": "^0.1.9", |     "react-json-tree": "^0.1.9", | ||||||
|     "react-mixin": "^1.7.0", |     "react-mixin": "^1.7.0", | ||||||
|     "react-redux": "^2.0.0", |     "react-redux": "^2.0.0", | ||||||
|  |  | ||||||
							
								
								
									
										131
									
								
								src/react/ChartMonitor.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								src/react/ChartMonitor.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,131 @@ | ||||||
|  | import React, { PropTypes, Component } from 'react'; | ||||||
|  | import * as themes from './themes'; | ||||||
|  | import visualizer from 'd3-state-visualizer'; | ||||||
|  | 
 | ||||||
|  | const styles = { | ||||||
|  |   container: { | ||||||
|  |     fontFamily: 'monaco, Consolas, Lucida Console, monospace', | ||||||
|  |     position: 'relative', | ||||||
|  |     overflowY: 'hidden', | ||||||
|  |     width: '100%', | ||||||
|  |     height: '100%', | ||||||
|  |     minWidth: 300 | ||||||
|  |   }, | ||||||
|  |   buttonBar: { | ||||||
|  |     textAlign: 'center', | ||||||
|  |     borderBottomWidth: 1, | ||||||
|  |     borderBottomStyle: 'solid', | ||||||
|  |     borderColor: 'transparent', | ||||||
|  |     zIndex: 1, | ||||||
|  |     display: 'flex', | ||||||
|  |     flexDirection: 'row' | ||||||
|  |   }, | ||||||
|  |   elements: { | ||||||
|  |     position: 'absolute', | ||||||
|  |     left: 0, | ||||||
|  |     right: 0, | ||||||
|  |     top: 38, | ||||||
|  |     bottom: 0, | ||||||
|  |     overflowX: 'hidden', | ||||||
|  |     overflowY: 'auto' | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export default class LogMonitor extends Component { | ||||||
|  |   constructor(props) { | ||||||
|  |     super(props); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static propTypes = { | ||||||
|  |     computedStates: PropTypes.array.isRequired, | ||||||
|  |     currentStateIndex: PropTypes.number.isRequired, | ||||||
|  |     monitorState: PropTypes.object.isRequired, | ||||||
|  |     stagedActions: PropTypes.array.isRequired, | ||||||
|  |     skippedActions: PropTypes.object.isRequired, | ||||||
|  |     reset: PropTypes.func.isRequired, | ||||||
|  |     commit: PropTypes.func.isRequired, | ||||||
|  |     rollback: PropTypes.func.isRequired, | ||||||
|  |     sweep: PropTypes.func.isRequired, | ||||||
|  |     toggleAction: PropTypes.func.isRequired, | ||||||
|  |     jumpToState: PropTypes.func.isRequired, | ||||||
|  |     setMonitorState: PropTypes.func.isRequired, | ||||||
|  |     select: PropTypes.func.isRequired, | ||||||
|  |     visibleOnLoad: PropTypes.bool | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   static defaultProps = { | ||||||
|  |     select: (state) => state, | ||||||
|  |     monitorState: { isVisible: true, isChartVisible: true }, | ||||||
|  |     theme: 'nicinabox', | ||||||
|  |     visibleOnLoad: true | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   componentWillReceiveProps() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   componentDidUpdate() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   componentWillMount() { | ||||||
|  |     let visibleOnLoad = this.props.visibleOnLoad; | ||||||
|  |     const { monitorState } = this.props; | ||||||
|  |     this.props.setMonitorState({ | ||||||
|  |       ...monitorState, | ||||||
|  |       isVisible: visibleOnLoad | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   render() { | ||||||
|  |     const { monitorState, computedStates } = this.props; | ||||||
|  |     const { components: { TreeChart }} = visualizer; | ||||||
|  | 
 | ||||||
|  |     let theme; | ||||||
|  |     if (typeof this.props.theme === 'string') { | ||||||
|  |       if (typeof themes[this.props.theme] !== 'undefined') { | ||||||
|  |         theme = themes[this.props.theme]; | ||||||
|  |       } else { | ||||||
|  |         console.warn('DevTools theme ' + this.props.theme + ' not found, defaulting to nicinabox'); | ||||||
|  |         theme = themes.nicinabox; | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       theme = this.props.theme; | ||||||
|  |     } | ||||||
|  |     if (!monitorState.isVisible) { | ||||||
|  |       return null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const style = { | ||||||
|  |       width: '100%', | ||||||
|  |       height: '100%', | ||||||
|  |       node: { | ||||||
|  |         colors: { | ||||||
|  |           'default': theme.base0B, | ||||||
|  |           collapsed: theme.base0B, | ||||||
|  |           parent: theme.base0E | ||||||
|  |         }, | ||||||
|  |         radius: 7 | ||||||
|  |       }, | ||||||
|  |       text: { | ||||||
|  |         colors: { | ||||||
|  |           'default': theme.base0D, | ||||||
|  |           hover: theme.base06 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     return ( | ||||||
|  |       <div style={{...styles.container, backgroundColor: theme.base00}}> | ||||||
|  |         <TreeChart | ||||||
|  |           state={computedStates[computedStates.length - 1].state} | ||||||
|  |           id='todosState' | ||||||
|  |           aspectRatio={0.5} | ||||||
|  |           isSorted={false} | ||||||
|  |           heightBetweenNodesCoeff={1} | ||||||
|  |           widthBetweenNodesCoeff={1.3} | ||||||
|  |           tooltipOptions={{disabled: true}} | ||||||
|  |           style={style} | ||||||
|  |           /> | ||||||
|  |       </div> | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -2,5 +2,6 @@ import React from 'react'; | ||||||
| import createDevTools from '../createDevTools'; | import createDevTools from '../createDevTools'; | ||||||
| 
 | 
 | ||||||
| export const DevTools = createDevTools(React); | export const DevTools = createDevTools(React); | ||||||
|  | export { default as ChartMonitor } from './ChartMonitor'; | ||||||
| export { default as LogMonitor } from './LogMonitor'; | export { default as LogMonitor } from './LogMonitor'; | ||||||
| export { default as DebugPanel } from './DebugPanel'; | export { default as DebugPanel } from './DebugPanel'; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user