|
@@ -1,34 +1,26 @@
|
|
|
-import React, { useState, useEffect } from 'react';
|
|
|
import style from './Console.module.scss';
|
|
|
+import { useConsole } from '../../../hooks/useConsole';
|
|
|
+import { useEffect } from 'react';
|
|
|
+import { useSelector } from 'react-redux';
|
|
|
+import ConsoleItem from '../ConsoleItem/ConsoleItem';
|
|
|
|
|
|
-export const Console = ({ isOpen, close }) => {
|
|
|
- const [output, setOutput] = useState([]);
|
|
|
- const [command, setCommand] = useState('');
|
|
|
+export function Console({ isOpen, close }) {
|
|
|
+ const appConsole = useConsole();
|
|
|
+ const { files } = useSelector((state) => state.currentWork);
|
|
|
|
|
|
useEffect(() => {
|
|
|
- window.console = {
|
|
|
- log: (...args) => setOutput((output) => [...output, args.join(' ')]),
|
|
|
- error: (...args) => setOutput((output) => [...output, args.join(' ')]),
|
|
|
- clear: () => setOutput([]),
|
|
|
- };
|
|
|
- }, []);
|
|
|
+ const timeout = setTimeout(() => {
|
|
|
+ appConsole.readCode(files.js.text);
|
|
|
+ }, 700);
|
|
|
|
|
|
- const handleCommandChange = (event) => {
|
|
|
- setCommand(event.target.value);
|
|
|
- };
|
|
|
+ return () => {
|
|
|
+ clearTimeout(timeout);
|
|
|
+ };
|
|
|
+ }, [files.js.text]);
|
|
|
|
|
|
- const handleKeyDown = (event) => {
|
|
|
- if (event.key === 'Enter') {
|
|
|
- try {
|
|
|
- const result = eval(event.target.value);
|
|
|
- setOutput((output) => [...output, result]);
|
|
|
- } catch (e) {
|
|
|
- setOutput((output) => [...output, e.toString()]);
|
|
|
- }
|
|
|
- setCommand('');
|
|
|
- event.preventDefault();
|
|
|
- }
|
|
|
- };
|
|
|
+ useEffect(() => {
|
|
|
+ appConsole.readCode(files.js.text);
|
|
|
+ }, []);
|
|
|
|
|
|
if (isOpen) {
|
|
|
return (
|
|
@@ -39,17 +31,17 @@ export const Console = ({ isOpen, close }) => {
|
|
|
<button onClick={close}>x</button>
|
|
|
</div>
|
|
|
<div className={style.out}>
|
|
|
- {output.map((item, index) => (
|
|
|
- <div key={index}>{item}</div>
|
|
|
+ {appConsole.output.map((item, index) => (
|
|
|
+ <ConsoleItem key={index} message={item} />
|
|
|
))}
|
|
|
</div>
|
|
|
<div className={style.entryField}>
|
|
|
<span>></span>
|
|
|
<input
|
|
|
type="text"
|
|
|
- value={command}
|
|
|
- onChange={handleCommandChange}
|
|
|
- onKeyDown={handleKeyDown}
|
|
|
+ value={appConsole.command}
|
|
|
+ onChange={appConsole.handleCommandChange}
|
|
|
+ onKeyDown={appConsole.handleKeyDown}
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -57,4 +49,4 @@ export const Console = ({ isOpen, close }) => {
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
-};
|
|
|
+}
|