From c60907ed94835eb5071a4a0f3646e423b8065fb2 Mon Sep 17 00:00:00 2001 From: Karol Dzialowski Date: Tue, 7 Jan 2025 18:55:25 +0100 Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20=20Upgrade=20react=20to=20?= =?UTF-8?q?v19?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 98 ++++++++----------- package.json | 8 +- .../__tests__/TimeEntryEdit.test.tsx | 6 +- .../TimeEntries/TopBar/CurrentTimeEntry.tsx | 2 +- .../TopBar/__tests__/TopBar.Editing.test.tsx | 6 +- src/app/hooks/useKeyPress.ts | 2 +- src/app/testUtils/connectStore.tsx | 2 +- 7 files changed, 51 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index 641f4e3..64572ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,9 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.469.0", - "react": "^18.3.1", + "react": "^19.0.0", "react-datepicker": "^7.6.0", - "react-dom": "^18.3.1", + "react-dom": "^19.0.0", "react-dropzone": "^14.3.5", "react-redux": "^9.2.0", "tailwind-merge": "^2.6.0", @@ -40,8 +40,8 @@ "@testing-library/user-event": "^14.5.2", "@types/jest": "^29.5.14", "@types/node": "^22.10.5", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.3", + "@types/react-dom": "^19.0.2", "@typescript-eslint/eslint-plugin": "^8.19.1", "@typescript-eslint/parser": "^8.19.1", "autoprefixer": "^10.4.20", @@ -3211,21 +3211,20 @@ "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.3.tgz", + "integrity": "sha512-UavfHguIjnnuq9O67uXfgy/h3SRJbidAYvNjLceB+2RIKVRBzVsh0QO+Pw6BCSQqFS9xwzKfwstXx0m6AbAREA==", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-transition-group": { @@ -8928,12 +8927,9 @@ ] }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -8953,15 +8949,14 @@ } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-dropzone": { @@ -9393,12 +9388,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "6.3.1", @@ -12844,22 +12836,19 @@ "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" }, "@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.3.tgz", + "integrity": "sha512-UavfHguIjnnuq9O67uXfgy/h3SRJbidAYvNjLceB+2RIKVRBzVsh0QO+Pw6BCSQqFS9xwzKfwstXx0m6AbAREA==", "requires": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "requires": { - "@types/react": "*" - } + "requires": {} }, "@types/react-transition-group": { "version": "4.4.12", @@ -16893,12 +16882,9 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "requires": { - "loose-envify": "^1.1.0" - } + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==" }, "react-datepicker": { "version": "7.6.0", @@ -16911,12 +16897,11 @@ } }, "react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" } }, "react-dropzone": { @@ -17197,12 +17182,9 @@ } }, "scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "requires": { - "loose-envify": "^1.1.0" - } + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "semver": { "version": "6.3.1", diff --git a/package.json b/package.json index ee77f22..7bb1a81 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.469.0", - "react": "^18.3.1", + "react": "^19.0.0", "react-datepicker": "^7.6.0", - "react-dom": "^18.3.1", + "react-dom": "^19.0.0", "react-dropzone": "^14.3.5", "react-redux": "^9.2.0", "tailwind-merge": "^2.6.0", @@ -47,8 +47,8 @@ "@testing-library/user-event": "^14.5.2", "@types/jest": "^29.5.14", "@types/node": "^22.10.5", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.3", + "@types/react-dom": "^19.0.2", "@typescript-eslint/eslint-plugin": "^8.19.1", "@typescript-eslint/parser": "^8.19.1", "autoprefixer": "^10.4.20", diff --git a/src/app/features/TimeEntries/TimeEntriesList/__tests__/TimeEntryEdit.test.tsx b/src/app/features/TimeEntries/TimeEntriesList/__tests__/TimeEntryEdit.test.tsx index 65727d5..1214860 100644 --- a/src/app/features/TimeEntries/TimeEntriesList/__tests__/TimeEntryEdit.test.tsx +++ b/src/app/features/TimeEntries/TimeEntriesList/__tests__/TimeEntryEdit.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, within } from "@testing-library/react"; +import { render, screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import connectStore from "../../../../testUtils/connectStore"; import { settingsFixture, timeEntriesFixture } from "../../store/fixtures"; @@ -51,9 +51,7 @@ describe("TimeEntry Edit", () => { await user.clear(stopTimeInput); await user.type(stopTimeInput, "20:10"); - await act(async () => { - await user.click(saveButton); - }); + await user.click(saveButton); // assert await user.click(collapseButton); diff --git a/src/app/features/TimeEntries/TopBar/CurrentTimeEntry.tsx b/src/app/features/TimeEntries/TopBar/CurrentTimeEntry.tsx index d393a60..0c100bb 100644 --- a/src/app/features/TimeEntries/TopBar/CurrentTimeEntry.tsx +++ b/src/app/features/TimeEntries/TopBar/CurrentTimeEntry.tsx @@ -72,7 +72,7 @@ const useElapsedTimeForEntry = (currentTimeEntry: TimeEntry) => { const [elapsedTime, setElapsedTime] = useState( currentTimeEntry ? Date.now() - currentTimeEntry.startTime : 0, ); - const intervalRef = useRef>(); + const intervalRef = useRef>(undefined); useEffect(() => { setElapsedTime( diff --git a/src/app/features/TimeEntries/TopBar/__tests__/TopBar.Editing.test.tsx b/src/app/features/TimeEntries/TopBar/__tests__/TopBar.Editing.test.tsx index 5a292a1..1f491d2 100644 --- a/src/app/features/TimeEntries/TopBar/__tests__/TopBar.Editing.test.tsx +++ b/src/app/features/TimeEntries/TopBar/__tests__/TopBar.Editing.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen } from "@testing-library/react"; +import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import connectStore from "../../../../testUtils/connectStore"; import { TopBar } from "../TopBar"; @@ -51,9 +51,7 @@ describe("TopBar Editing", () => { await user.clear(startTimeInput); await user.type(startTimeInput, "20:05"); - await act(async () => { - await user.click(saveButton); - }); + await user.click(saveButton); // assert expect(screen.getByText("--Completely new task--")).toBeInTheDocument(); diff --git a/src/app/hooks/useKeyPress.ts b/src/app/hooks/useKeyPress.ts index b067531..757fe77 100644 --- a/src/app/hooks/useKeyPress.ts +++ b/src/app/hooks/useKeyPress.ts @@ -3,7 +3,7 @@ import { useCallback, useEffect } from "react"; export function useKeyPress( callback: () => void, keyCodes: string[], - ref: React.RefObject, + ref: React.RefObject, ): void { const handler = useCallback( ({ code }: KeyboardEvent) => { diff --git a/src/app/testUtils/connectStore.tsx b/src/app/testUtils/connectStore.tsx index 4086241..d054218 100644 --- a/src/app/testUtils/connectStore.tsx +++ b/src/app/testUtils/connectStore.tsx @@ -12,7 +12,7 @@ const initialState: RootState = { }; function connectStore( - component: ReactElement, + component: ReactElement, preloadedState: RootState = initialState, ) { // TODO: see store.ts regarding preloadedState typing