1- import PropTypes from 'prop-types' ;
21import React , { useEffect , useRef } from 'react' ;
32
43import { bindActionCreators } from 'redux' ;
54
6- import { useSelector , useDispatch } from 'react-redux' ;
5+ import { useSelector , useDispatch , useState } from 'react-redux' ;
76import classNames from 'classnames' ;
87import { Console as ConsoleFeed } from 'console-feed' ;
98import {
@@ -84,88 +83,17 @@ const getConsoleFeedStyle = (theme, times, fontSize) => {
8483 }
8584} ;
8685
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 🤷🏻
16487const Console = ( ) => {
16588 const consoleEvents = useSelector ( state => state . console ) ;
166- const { consoleIsExpanded } = useSelector ( state => state . ide ) ;
89+ const isExpanded = useSelector ( state => state . ide . consoleIsExpanded ) ;
16790 const { theme, fontSize } = useSelector ( state => state . preferences ) ;
16891
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+
16997 const {
17098 collapseConsole, expandConsole, clearConsole, dispatchConsoleEvent
17199 } = bindActionCreators ( { ...IDEActions , ...ConsoleActions } , useDispatch ( ) ) ;
@@ -175,18 +103,59 @@ const Console = () => {
175103 dispatchConsoleEvent ( consoleEvents ) ;
176104 } , [ theme , fontSize ] ) ;
177105
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+
178115 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 >
189157 ) ;
190158} ;
191159
160+
192161export default Console ;
0 commit comments