Skip to content

Commit 9e95517

Browse files
committed
🚧 refactor <Consle /> to hooks
1 parent b0565a2 commit 9e95517

File tree

1 file changed

+59
-90
lines changed

1 file changed

+59
-90
lines changed
Lines changed: 59 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import PropTypes from 'prop-types';
21
import React, { useEffect, useRef } from 'react';
32

43
import { bindActionCreators } from 'redux';
54

6-
import { useSelector, useDispatch } from 'react-redux';
5+
import { useSelector, useDispatch, useState } from 'react-redux';
76
import classNames from 'classnames';
87
import { Console as ConsoleFeed } from 'console-feed';
98
import {
@@ -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 🤷🏻
16487
const 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+
192161
export default Console;

0 commit comments

Comments
 (0)