From 9e95517f704c4fc0e7ea44cf022d49e06d8f4a4c Mon Sep 17 00:00:00 2001 From: ghalestrilo Date: Mon, 20 Jul 2020 17:56:35 -0300 Subject: [PATCH] :construction: refactor to hooks --- client/modules/IDE/components/Console.jsx | 149 +++++++++------------- 1 file changed, 59 insertions(+), 90 deletions(-) diff --git a/client/modules/IDE/components/Console.jsx b/client/modules/IDE/components/Console.jsx index 14d32e0d..c1596c89 100644 --- a/client/modules/IDE/components/Console.jsx +++ b/client/modules/IDE/components/Console.jsx @@ -1,9 +1,8 @@ -import PropTypes from 'prop-types'; import React, { useEffect, useRef } from 'react'; import { bindActionCreators } from 'redux'; -import { useSelector, useDispatch } from 'react-redux'; +import { useSelector, useDispatch, useState } from 'react-redux'; import classNames from 'classnames'; import { Console as ConsoleFeed } from 'console-feed'; import { @@ -84,88 +83,17 @@ const getConsoleFeedStyle = (theme, times, fontSize) => { } }; -class ConsoleComponent extends React.Component { - componentDidUpdate(prevProps) { - this.consoleMessages.scrollTop = this.consoleMessages.scrollHeight; - } - - render() { - const consoleClass = classNames({ - 'preview-console': true, - 'preview-console--collapsed': !this.props.isExpanded - }); - - console.log(this.props.isExpanded); - - return ( -
-
-

Console

-
- - - -
-
-
{ this.consoleMessages = element; }} className="preview-console__messages"> - {this.props.consoleEvents.map((consoleEvent) => { - const { method, times } = consoleEvent; - const { theme } = this.props; - return ( -
- { times > 1 && -
- {times} -
- } - -
- ); - })} -
-
- ); - } -} - -ConsoleComponent.propTypes = { - consoleEvents: PropTypes.arrayOf(PropTypes.shape({ - method: PropTypes.string.isRequired, - args: PropTypes.arrayOf(PropTypes.string) - })), - isExpanded: PropTypes.bool.isRequired, - collapseConsole: PropTypes.func.isRequired, - expandConsole: PropTypes.func.isRequired, - clearConsole: PropTypes.func.isRequired, - theme: PropTypes.string.isRequired, - fontSize: PropTypes.number.isRequired -}; - -ConsoleComponent.defaultProps = { - consoleEvents: [] -}; - +// 1 . FIXME: Object is not a function 🤷🏻 const Console = () => { const consoleEvents = useSelector(state => state.console); - const { consoleIsExpanded } = useSelector(state => state.ide); + const isExpanded = useSelector(state => state.ide.consoleIsExpanded); const { theme, fontSize } = useSelector(state => state.preferences); + const [cm, setCm] = useState({}); + + // 2. FIXME: Console is not opening/closing, and I suspect it has to do with this + useDidUpdate(() => { if (cm) cm.scrollTop = cm.scrollHeight; }); + const { collapseConsole, expandConsole, clearConsole, dispatchConsoleEvent } = bindActionCreators({ ...IDEActions, ...ConsoleActions }, useDispatch()); @@ -175,18 +103,59 @@ const Console = () => { dispatchConsoleEvent(consoleEvents); }, [theme, fontSize]); + // const [consoleMessages, setConsoleMessages] = useState({}); + // this.consoleMessages.scrollTop = this.consoleMessages.scrollHeight; + + + const consoleClass = classNames({ + 'preview-console': true, + 'preview-console--collapsed': isExpanded + }); + return ( - +
+
+

Console

+
+ + + +
+
+
setCm(element)} className="preview-console__messages"> + {consoleEvents.map((consoleEvent) => { + const { method, times } = consoleEvent; + return ( +
+ { times > 1 && +
+ {times} +
+ } + +
+ ); + })} +
+
); }; + export default Console;