Skip to content

Commit 6ccb586

Browse files
authored
Bump React to v19. (microsoft#5518)
1 parent 745aec6 commit 6ccb586

53 files changed

Lines changed: 2028 additions & 1579 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/lockfile-explorer-web/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@
1212
"_phase:test": "heft run --only test -- --clean"
1313
},
1414
"dependencies": {
15-
"@reduxjs/toolkit": "~1.8.6",
15+
"@reduxjs/toolkit": "~2.11.2",
1616
"@rushstack/rush-themed-ui": "workspace:*",
1717
"prism-react-renderer": "~2.4.1",
18-
"react-dom": "~17.0.2",
19-
"react-redux": "~8.0.4",
20-
"react": "~17.0.2",
21-
"redux": "~4.2.0",
18+
"react-dom": "~19.2.3",
19+
"react-redux": "~9.2.0",
20+
"react": "~19.2.3",
21+
"redux": "~5.0.1",
2222
"tslib": "~2.8.1"
2323
},
2424
"devDependencies": {
2525
"@rushstack/heft": "workspace:*",
26-
"@types/react": "17.0.74",
27-
"@types/react-dom": "17.0.25",
26+
"@types/react": "19.2.7",
27+
"@types/react-dom": "19.2.3",
2828
"eslint": "~9.37.0",
2929
"local-web-rig": "workspace:*",
3030
"typescript": "5.8.2"

apps/lockfile-explorer-web/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { ConnectionModal } from './components/ConnectionModal';
1818
/**
1919
* This React component renders the application page.
2020
*/
21-
export const App = (): JSX.Element => {
21+
export const App = (): React.ReactElement => {
2222
const dispatch = useAppDispatch();
2323

2424
useEffect(() => {

apps/lockfile-explorer-web/src/components/ConnectionModal/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import appStyles from '../../App.scss';
1010
import { checkAliveAsync } from '../../helpers/lfxApiClient';
1111
import type { ReactNull } from '../../types/ReactNull';
1212

13-
export const ConnectionModal = (): JSX.Element | ReactNull => {
13+
export const ConnectionModal = (): React.ReactElement | ReactNull => {
1414
const [isAlive, setIsAlive] = useState(true);
1515
const [checking, setChecking] = useState(false);
1616
const [manualChecked, setManualChecked] = useState(false);

apps/lockfile-explorer-web/src/containers/BookmarksSidebar/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useAppDispatch, useAppSelector } from '../../store/hooks';
1111
import type { LfxGraphEntry } from '../../packlets/lfx-shared';
1212
import { clearStackAndPush, removeBookmark } from '../../store/slices/entrySlice';
1313

14-
export const BookmarksSidebar = (): JSX.Element => {
14+
export const BookmarksSidebar = (): React.ReactElement => {
1515
const bookmarks = useAppSelector((state) => state.entry.bookmarkedEntries);
1616
const dispatch = useAppDispatch();
1717

apps/lockfile-explorer-web/src/containers/LockfileEntryDetailsView/index.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ interface IInfluencerType {
3232
type: DependencyType;
3333
}
3434

35-
export const LockfileEntryDetailsView = (): JSX.Element | ReactNull => {
35+
export const LockfileEntryDetailsView = (): React.ReactElement | ReactNull => {
3636
const selectedEntry = useAppSelector(selectCurrentEntry);
3737
const specChanges = useAppSelector((state) => state.workspace.specChanges);
3838
const dispatch = useAppDispatch();
@@ -67,12 +67,12 @@ export const LockfileEntryDetailsView = (): JSX.Element | ReactNull => {
6767
}, [selectedEntry]);
6868

6969
const selectResolvedEntry = useCallback(
70-
(dependencyToTrace) => () => {
70+
(dependencyToTrace: LfxGraphDependency) => () => {
7171
if (inspectDependency && inspectDependency.entryId === dependencyToTrace.entryId) {
7272
if (dependencyToTrace.resolvedEntry) {
7373
dispatch(pushToStack(dependencyToTrace.resolvedEntry));
7474
} else {
75-
logDiagnosticInfo('No resolved entry for dependency:', dependencyToTrace);
75+
logDiagnosticInfo('No resolved entry for dependency:', dependencyToTrace.entryId);
7676
}
7777
} else if (selectedEntry) {
7878
// eslint-disable-next-line no-console
@@ -81,7 +81,7 @@ export const LockfileEntryDetailsView = (): JSX.Element | ReactNull => {
8181

8282
// Check if we need to calculate influencers.
8383
// If the current dependencyToTrace is a peer dependency then we do
84-
if (dependencyToTrace.dependencyType !== LfxDependencyKind.Peer) {
84+
if (dependencyToTrace.dependencyKind !== LfxDependencyKind.Peer) {
8585
return;
8686
}
8787

@@ -153,14 +153,14 @@ export const LockfileEntryDetailsView = (): JSX.Element | ReactNull => {
153153
);
154154

155155
const selectResolvedReferencer = useCallback(
156-
(referrer) => () => {
156+
(referrer: LfxGraphEntry) => () => {
157157
dispatch(pushToStack(referrer));
158158
},
159159
// eslint-disable-next-line react-hooks/exhaustive-deps
160160
[selectedEntry]
161161
);
162162

163-
const renderDependencyMetadata = (): JSX.Element | ReactNull => {
163+
const renderDependencyMetadata = (): React.ReactElement | ReactNull => {
164164
if (!inspectDependency) {
165165
return ReactNull;
166166
}
@@ -202,7 +202,7 @@ export const LockfileEntryDetailsView = (): JSX.Element | ReactNull => {
202202
);
203203
};
204204

205-
const renderPeerDependencies = (): JSX.Element | ReactNull => {
205+
const renderPeerDependencies = (): React.ReactElement | ReactNull => {
206206
if (!selectedEntry) return ReactNull;
207207
const peerDeps = selectedEntry.dependencies.filter((d) => d.dependencyKind === LfxDependencyKind.Peer);
208208
if (!peerDeps.length) {

apps/lockfile-explorer-web/src/containers/LockfileViewer/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ interface ILockfileEntryGroup {
2222
versions: LfxGraphEntry[];
2323
}
2424

25-
const LockfileEntryLi = ({ group }: { group: ILockfileEntryGroup }): JSX.Element => {
25+
const LockfileEntryLi = ({ group }: { group: ILockfileEntryGroup }): React.ReactElement => {
2626
const selectedEntry = useAppSelector(selectCurrentEntry);
2727
const activeFilters = useAppSelector((state) => state.entry.filters);
2828
const dispatch = useAppDispatch();
29-
const fieldRef = useRef() as React.MutableRefObject<HTMLDivElement>;
29+
const fieldRef = useRef<HTMLDivElement | null>(null);
3030
const clear = useCallback(
3131
(entry: LfxGraphEntry) => () => {
3232
dispatch(pushToStack(entry));
@@ -36,7 +36,7 @@ const LockfileEntryLi = ({ group }: { group: ILockfileEntryGroup }): JSX.Element
3636

3737
useEffect(() => {
3838
if (selectedEntry && selectedEntry.entryPackageName === group.entryName) {
39-
fieldRef.current.scrollIntoView({
39+
fieldRef.current?.scrollIntoView({
4040
behavior: 'smooth'
4141
});
4242
}
@@ -91,7 +91,7 @@ const multipleVersions = (entries: LfxGraphEntry[]): boolean => {
9191
return false;
9292
};
9393

94-
export const LockfileViewer = (): JSX.Element | ReactNull => {
94+
export const LockfileViewer = (): React.ReactElement | ReactNull => {
9595
const dispatch = useAppDispatch();
9696
const [projectFilter, setProjectFilter] = useState('');
9797
const [packageFilter, setPackageFilter] = useState('');

apps/lockfile-explorer-web/src/containers/LogoPanel/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import React from 'react';
55

66
import styles from './styles.scss';
77

8-
export const LogoPanel = (): JSX.Element => {
8+
export const LogoPanel = (): React.ReactElement => {
99
// TODO: Add a mechanism to keep this in sync with the @rushstack/lockfile-explorer
1010
// package version.
1111
const appPackageVersion: string = window.appContext.appVersion;

apps/lockfile-explorer-web/src/containers/PackageJsonViewer/CodeBox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export type PrismLanguage =
5959
| 'json'
6060
| 'webmanifest';
6161

62-
export const CodeBox = (props: { code: string; language: PrismLanguage }): JSX.Element => {
62+
export const CodeBox = (props: { code: string; language: PrismLanguage }): React.ReactElement => {
6363
return (
6464
<Highlight theme={themes.vsLight} code={props.code} language={props.language}>
6565
{({ className, style, tokens, getLineProps, getTokenProps }) => (

apps/lockfile-explorer-web/src/containers/PackageJsonViewer/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const PackageView: { [key: string]: string } = {
2323
PARSED_PACKAGE_JSON: 'PARSED_PACKAGE_JSON'
2424
};
2525

26-
export const PackageJsonViewer = (): JSX.Element => {
26+
export const PackageJsonViewer = (): React.ReactElement => {
2727
const dispatch = useAppDispatch();
2828
const [packageJSON, setPackageJSON] = useState<IPackageJson | undefined>(undefined);
2929
const [parsedPackageJSON, setParsedPackageJSON] = useState<IPackageJson | undefined>(undefined);
@@ -76,7 +76,7 @@ export const PackageJsonViewer = (): JSX.Element => {
7676
}, [dispatch, selectedEntry]);
7777

7878
const renderDep =
79-
(name: boolean): ((dependencyDetails: [string, string]) => JSX.Element) =>
79+
(name: boolean): ((dependencyDetails: [string, string]) => React.ReactElement) =>
8080
(dependencyDetails) => {
8181
const [dep, version] = dependencyDetails;
8282
if (specChanges.has(dep)) {
@@ -155,7 +155,7 @@ export const PackageJsonViewer = (): JSX.Element => {
155155
}
156156
};
157157

158-
const renderFile = (): JSX.Element | null => {
158+
const renderFile = (): React.ReactElement | null => {
159159
switch (selection) {
160160
case PackageView.PACKAGE_JSON:
161161
if (!packageJSON)

apps/lockfile-explorer-web/src/containers/SelectedEntryPreview/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
selectCurrentEntry
1616
} from '../../store/slices/entrySlice';
1717

18-
export const SelectedEntryPreview = (): JSX.Element => {
18+
export const SelectedEntryPreview = (): React.ReactElement => {
1919
const selectedEntry = useAppSelector(selectCurrentEntry);
2020
const isBookmarked = useAppSelector((state) =>
2121
selectedEntry ? state.entry.bookmarkedEntries.includes(selectedEntry) : false
@@ -39,7 +39,7 @@ export const SelectedEntryPreview = (): JSX.Element => {
3939
dispatch(forwardStack());
4040
}, [dispatch]);
4141

42-
const renderButtonRow = (): JSX.Element => {
42+
const renderButtonRow = (): React.ReactElement => {
4343
return (
4444
<div className={styles.NavigationButtonRow}>
4545
<Button disabled={entryStack.length <= 1} onClick={pop}>

0 commit comments

Comments
 (0)