diff --git a/package-lock.json b/package-lock.json index 89cb98f0f..2d2cde042 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,12 @@ }, "devDependencies": { "@cypress/react18": "^2.0.1", - "@mate-academy/scripts": "^1.8.5", + "@mate-academy/scripts": "^1.9.12", "@mate-academy/students-ts-config": "*", "@mate-academy/stylelint-config": "*", "@types/node": "^20.14.10", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", "@typescript-eslint/parser": "^7.16.0", "@vitejs/plugin-react": "^4.3.1", "cypress": "^13.13.0", @@ -1170,9 +1170,9 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.5.tgz", - "integrity": "sha512-mHRY2FkuoYCf5U0ahIukkaRo5LSZsxrTSgMJheFoyf3VXsTvfM9OfWcZIDIDB521kdPrScHHnRp+JRNjCfUO5A==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.9.12.tgz", + "integrity": "sha512-/OcmxMa34lYLFlGx7Ig926W1U1qjrnXbjFJ2TzUcDaLmED+A5se652NcWwGOidXRuMAOYLPU2jNYBEkKyXrFJA==", "dev": true, "dependencies": { "@octokit/rest": "^17.11.2", @@ -2197,9 +2197,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -2207,12 +2207,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", + "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", "dev": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^18.0.0" } }, "node_modules/@types/sinonjs__fake-timers": { diff --git a/package.json b/package.json index a727a0799..186f07ec4 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,12 @@ }, "devDependencies": { "@cypress/react18": "^2.0.1", - "@mate-academy/scripts": "^1.8.5", + "@mate-academy/scripts": "^1.9.12", "@mate-academy/students-ts-config": "*", "@mate-academy/stylelint-config": "*", "@types/node": "^20.14.10", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", "@typescript-eslint/parser": "^7.16.0", "@vitejs/plugin-react": "^4.3.1", "cypress": "^13.13.0", diff --git a/src/App.tsx b/src/App.tsx index f819cbdb9..92870bc2d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,35 @@ -import React from 'react'; +import * as React from 'react'; -export const App: React.FC = () => ( -
-

The last pressed key is [Enter]

-
-); +type State = { + pressedKey: string; +}; + +export class App extends React.Component { + state: Readonly = { + pressedKey: '', + }; + + handleKeyChange = (e: KeyboardEvent) => { + this.setState({ pressedKey: e.key }); + }; + + componentDidMount(): void { + window.addEventListener('keyup', this.handleKeyChange); + } + + componentWillUnmount(): void { + window.removeEventListener('keyup', this.handleKeyChange); + } + + render() { + return ( +
+

+ {this.state.pressedKey + ? `The last pressed key is [${this.state.pressedKey}]` + : 'Nothing was pressed yet'} +

+
+ ); + } +} diff --git a/tsconfig.json b/tsconfig.json index cfb168bb2..778406f15 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "src" ], "compilerOptions": { + "jsx": "react", "sourceMap": false, "types": ["node", "cypress"] }