1
- import PropTypes from 'prop-types' ;
2
1
import React , { useEffect , useRef } from 'react' ;
3
2
4
3
import { bindActionCreators } from 'redux' ;
5
4
6
- import { useSelector , useDispatch } from 'react-redux' ;
5
+ import { useSelector , useDispatch , useState } from 'react-redux' ;
7
6
import classNames from 'classnames' ;
8
7
import { Console as ConsoleFeed } from 'console-feed' ;
9
8
import {
@@ -84,88 +83,17 @@ const getConsoleFeedStyle = (theme, times, fontSize) => {
84
83
}
85
84
} ;
86
85
87
- class ConsoleComponent extends React . Component {
88
- componentDidUpdate ( prevProps ) {
89
- this . consoleMessages . scrollTop = this . consoleMessages . scrollHeight ;
90
- }
91
-
92
- render ( ) {
93
- const consoleClass = classNames ( {
94
- 'preview-console' : true ,
95
- 'preview-console--collapsed' : ! this . props . isExpanded
96
- } ) ;
97
-
98
- console . log ( this . props . isExpanded ) ;
99
-
100
- return (
101
- < section className = { consoleClass } >
102
- < header className = "preview-console__header" >
103
- < h2 className = "preview-console__header-title" > Console</ h2 >
104
- < div className = "preview-console__header-buttons" >
105
- < button className = "preview-console__clear" onClick = { this . props . clearConsole } aria-label = "Clear console" >
106
- Clear
107
- </ button >
108
- < button
109
- className = "preview-console__collapse"
110
- onClick = { this . props . collapseConsole }
111
- aria-label = "Close console"
112
- >
113
- < DownArrowIcon focusable = "false" aria-hidden = "true" />
114
- </ button >
115
- < button className = "preview-console__expand" onClick = { this . props . expandConsole } aria-label = "Open console" >
116
- < UpArrowIcon focusable = "false" aria-hidden = "true" />
117
- </ button >
118
- </ div >
119
- </ header >
120
- < div ref = { ( element ) => { this . consoleMessages = element ; } } className = "preview-console__messages" >
121
- { this . props . consoleEvents . map ( ( consoleEvent ) => {
122
- const { method, times } = consoleEvent ;
123
- const { theme } = this . props ;
124
- return (
125
- < div key = { consoleEvent . id } className = { `preview-console__message preview-console__message--${ method } ` } >
126
- { times > 1 &&
127
- < div
128
- className = "preview-console__logged-times"
129
- style = { { fontSize : this . props . fontSize , borderRadius : this . props . fontSize / 2 } }
130
- >
131
- { times }
132
- </ div >
133
- }
134
- < ConsoleFeed
135
- styles = { getConsoleFeedStyle ( theme , times , this . props . fontSize ) }
136
- logs = { [ consoleEvent ] }
137
- />
138
- </ div >
139
- ) ;
140
- } ) }
141
- </ div >
142
- </ section >
143
- ) ;
144
- }
145
- }
146
-
147
- ConsoleComponent . propTypes = {
148
- consoleEvents : PropTypes . arrayOf ( PropTypes . shape ( {
149
- method : PropTypes . string . isRequired ,
150
- args : PropTypes . arrayOf ( PropTypes . string )
151
- } ) ) ,
152
- isExpanded : PropTypes . bool . isRequired ,
153
- collapseConsole : PropTypes . func . isRequired ,
154
- expandConsole : PropTypes . func . isRequired ,
155
- clearConsole : PropTypes . func . isRequired ,
156
- theme : PropTypes . string . isRequired ,
157
- fontSize : PropTypes . number . isRequired
158
- } ;
159
-
160
- ConsoleComponent . defaultProps = {
161
- consoleEvents : [ ]
162
- } ;
163
-
86
+ // 1 . FIXME: Object is not a function 🤷🏻
164
87
const Console = ( ) => {
165
88
const consoleEvents = useSelector ( state => state . console ) ;
166
- const { consoleIsExpanded } = useSelector ( state => state . ide ) ;
89
+ const isExpanded = useSelector ( state => state . ide . consoleIsExpanded ) ;
167
90
const { theme, fontSize } = useSelector ( state => state . preferences ) ;
168
91
92
+ const [ cm , setCm ] = useState ( { } ) ;
93
+
94
+ // 2. FIXME: Console is not opening/closing, and I suspect it has to do with this
95
+ useDidUpdate ( ( ) => { if ( cm ) cm . scrollTop = cm . scrollHeight ; } ) ;
96
+
169
97
const {
170
98
collapseConsole, expandConsole, clearConsole, dispatchConsoleEvent
171
99
} = bindActionCreators ( { ...IDEActions , ...ConsoleActions } , useDispatch ( ) ) ;
@@ -175,18 +103,59 @@ const Console = () => {
175
103
dispatchConsoleEvent ( consoleEvents ) ;
176
104
} , [ theme , fontSize ] ) ;
177
105
106
+ // const [consoleMessages, setConsoleMessages] = useState({});
107
+ // this.consoleMessages.scrollTop = this.consoleMessages.scrollHeight;
108
+
109
+
110
+ const consoleClass = classNames ( {
111
+ 'preview-console' : true ,
112
+ 'preview-console--collapsed' : isExpanded
113
+ } ) ;
114
+
178
115
return (
179
- < ConsoleComponent
180
- consoleEvents = { consoleEvents }
181
- isExpanded = { consoleIsExpanded }
182
- theme = { theme }
183
- fontSize = { fontSize }
184
- collapseConsole = { collapseConsole }
185
- expandConsole = { expandConsole }
186
- clearConsole = { clearConsole }
187
- dispatchConsoleEvent = { dispatchConsoleEvent }
188
- />
116
+ < section className = { consoleClass } >
117
+ < header className = "preview-console__header" >
118
+ < h2 className = "preview-console__header-title" > Console</ h2 >
119
+ < div className = "preview-console__header-buttons" >
120
+ < button className = "preview-console__clear" onClick = { clearConsole } aria-label = "Clear console" >
121
+ Clear
122
+ </ button >
123
+ < button
124
+ className = "preview-console__collapse"
125
+ onClick = { collapseConsole }
126
+ aria-label = "Close console"
127
+ >
128
+ < DownArrowIcon focusable = "false" aria-hidden = "true" />
129
+ </ button >
130
+ < button className = "preview-console__expand" onClick = { expandConsole } aria-label = "Open console" >
131
+ < UpArrowIcon focusable = "false" aria-hidden = "true" />
132
+ </ button >
133
+ </ div >
134
+ </ header >
135
+ < div ref = { element => setCm ( element ) } className = "preview-console__messages" >
136
+ { consoleEvents . map ( ( consoleEvent ) => {
137
+ const { method, times } = consoleEvent ;
138
+ return (
139
+ < div key = { consoleEvent . id } className = { `preview-console__message preview-console__message--${ method } ` } >
140
+ { times > 1 &&
141
+ < div
142
+ className = "preview-console__logged-times"
143
+ style = { { fontSize, borderRadius : fontSize / 2 } }
144
+ >
145
+ { times }
146
+ </ div >
147
+ }
148
+ < ConsoleFeed
149
+ styles = { getConsoleFeedStyle ( theme , times , fontSize ) }
150
+ logs = { [ consoleEvent ] }
151
+ />
152
+ </ div >
153
+ ) ;
154
+ } ) }
155
+ </ div >
156
+ </ section >
189
157
) ;
190
158
} ;
191
159
160
+
192
161
export default Console ;
0 commit comments