Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(react 18): upgrade to react 18. #7336

Merged
merged 47 commits into from
Jun 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
2ee56c1
react DOM and react version changes only
v-rakeshsh Apr 12, 2024
0e1825b
Merge branch 'microsoft:main' into v-rakeshsh/react18-migration
v-rakeshsh Apr 12, 2024
ca62789
reverted deletion of snapshot
v-rakeshsh Apr 12, 2024
b33dbc3
Merge branch 'microsoft:main' into main
v-rakeshsh May 2, 2024
294a4c6
feature:test cases fix after react18 updates
v-rakeshsh May 2, 2024
7662bc1
feature:test cases fix after react18 updates
v-rakeshsh May 3, 2024
99fdc7b
Merge branch 'microsoft:main' into main
v-rakeshsh May 6, 2024
ff28c7f
feature:test cases fix after react18 updates
v-rakeshsh May 6, 2024
975d1c9
Merge branch 'main' into v-rakeshsh/react18-migration
v-rakeshsh May 6, 2024
fac7061
feature:test cases fix after react18 updates
v-rakeshsh May 8, 2024
26c1e7d
feature:test cases fix after react18 updates
v-rakeshsh May 9, 2024
1932ca5
failing test cases fixes
v-rakeshsh May 9, 2024
446e661
failing test cases fixes
v-rakeshsh May 10, 2024
e7f6d77
failing test cases fixes
v-rakeshsh May 14, 2024
93dd327
merge latest main
v-rakeshsh May 14, 2024
2c5928b
merge latest changes
v-rakeshsh May 14, 2024
c4e26ad
mock component test files changes
JeevaniChinthala May 15, 2024
bbc267e
merge latest changes
v-rakeshsh May 15, 2024
efb002f
chore: update react18 versions and its dependencies
v-rakeshsh May 15, 2024
28b23e8
chore: update react18 versions and its dependencies
v-rakeshsh May 15, 2024
7c00a38
chore: update react18 versions and its dependencies
v-rakeshsh May 15, 2024
1bfae5d
chore: update react18 versions and its dependencies
v-rakeshsh May 15, 2024
be59511
chore: update react18 versions and its dependencies
v-rakeshsh May 15, 2024
57a8f66
React 18 review comment changes
JeevaniChinthala May 21, 2024
9f5ff81
React 18 changes & yarn.lock revert
JeevaniChinthala May 21, 2024
a13cacb
Build Issue,Mock,Version - Fixes
JeevaniChinthala May 22, 2024
bdffcb6
Merge branch 'main' into v-rakeshsh/react18-migration
JeevaniChinthala May 22, 2024
29159b5
resolving conflict yarn.lock
JeevaniChinthala May 22, 2024
5e1389a
Fixing null check error
v-sharmachir May 22, 2024
ceb0c5e
Resolving review comments
v-sharmachir May 23, 2024
ccd3048
removing commented code
v-sharmachir May 23, 2024
f040941
Update tab-stops-requirement-instances-collapsible-content.test.tsx
v-sharmachir May 23, 2024
7d704b9
Merge branch 'microsoft:main' into v-rakeshsh/react18-migration
SaanicaG May 31, 2024
001dadc
mocked Dialog and icon
SaanicaG May 31, 2024
15c329f
shifted one test case into interaction block
SaanicaG May 31, 2024
2976f72
PR Review Comments - Fixes
JeevaniChinthala Jun 5, 2024
f6c7c03
Merge branch 'v-rakeshsh/react18-migration' of https://github.com/v-r…
JeevaniChinthala Jun 5, 2024
f3aac39
Comments resolution
v-sharmachir Jun 6, 2024
2440f2d
removed unneccessary act
v-sharmachir Jun 6, 2024
a563eb8
fixed lint error
v-sharmachir Jun 6, 2024
ae8f8db
comment Resolution
v-sharmachir Jun 7, 2024
f166acb
comment resolution and removed unnessecary act
v-sharmachir Jun 10, 2024
abdea73
resolving build failure
v-sharmachir Jun 10, 2024
512f8a6
Changing onBlurHandler test case logic for diagnostic-view-toggle.tes…
v-sharmachir Jun 10, 2024
f8ee227
code refactoring
v-sharmachir Jun 12, 2024
d3c9e37
feat(react 18): upgrade to react 18.
v-rakeshsh Jun 13, 2024
8d37314
feat(react 18): upgrade to react 18.
v-rakeshsh Jun 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,15 @@
"@swc/core": "^1.3.107",
"@swc/jest": "^0.2.36",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "12.1.2",
"@testing-library/react": "^15.0.5",
"@types/chrome": "0.0.260",
"@types/jest": "^29.5.11",
"@types/jsdom": "^21.1.6",
"@types/lodash": "^4.14.202",
"@types/luxon": "^3.4.2",
"@types/node": "^16.11.7",
"@types/react": "^16.14.25",
"@types/react-dom": "^16.9.15",
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0",
"@types/react-helmet": "^6.1.11",
"@types/react-router-dom": "^5.3.3",
"@types/serve-static": "^1.15.5",
Expand Down Expand Up @@ -151,7 +151,7 @@
"webpack-node-externals": "^3.0.0"
},
"dependencies": {
"@fluentui/react": "^8.96.1",
"@fluentui/react": "^8.118.1",
"@microsoft/applicationinsights-web": "^2.8.15",
"@testing-library/user-event": "^14.5.2",
"ajv": "^8.12.0",
Expand All @@ -160,9 +160,9 @@
"idb-keyval": "^6.2.1",
"lodash": "^4.17.21",
"luxon": "^3.4.4",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"react-helmet": "^6.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-helmet-async": "^2.0.5",
"react-resize-detector": "^9.1.1",
"react-router-dom": "^6.21.3",
"tabbable": "^6.2.0",
Expand Down
8 changes: 4 additions & 4 deletions packages/report/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
"url": "https://github.com/Microsoft/accessibility-insights-web"
},
"dependencies": {
"@fluentui/react": "^8.96.1",
"@fluentui/react": "^8.118.1",
"axe-core": "4.8.4",
"classnames": "^2.5.1",
"lodash": "^4.17.21",
"luxon": "^3.4.4",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"react-helmet": "^6.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-helmet-async": "^2.0.5",
"uuid": "^9.0.1"
}
}
6 changes: 3 additions & 3 deletions packages/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
"classnames": "^2.5.1",
"lodash": "^4.17.21",
"luxon": "^3.4.4",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"react-helmet": "^6.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-helmet-async": "^2.0.5",
"react-resize-detector": "^9.1.1",
"uuid": "^9.0.1"
}
Expand Down
4 changes: 2 additions & 2 deletions src/DetailsView/components/assessment-instance-table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { AssessmentDefaultMessageGenerator } from 'assessments/assessment-defaul
import { InstanceTableHeaderType, InstanceTableRow } from 'assessments/types/instance-table-data';
import { InsightsCommandButton } from 'common/components/controls/insights-command-button';
import { ManualTestStatus } from 'common/types/store-data/manual-test-status';
import { has } from 'lodash';
import { hasIn } from 'lodash';
import * as React from 'react';
import {
AssessmentNavState,
Expand Down Expand Up @@ -137,7 +137,7 @@ export class AssessmentInstanceTable extends React.Component<AssessmentInstanceT
private isAnyInstanceStatusUnknown(items: InstanceTableRow[], step: string): boolean {
return items.some(
item =>
has(item.instance.testStepResults, step) &&
hasIn(item.instance.testStepResults, step) &&
item.instance.testStepResults[step].status === ManualTestStatus.UNKNOWN,
);
}
Expand Down
10 changes: 5 additions & 5 deletions src/DetailsView/details-view-initializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ import {
TabStopsFailedCounterIncludingNoInstance,
TabStopsFailedCounterInstancesOnly,
} from 'DetailsView/tab-stops-failed-counter';
import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';
import { ReportExportServiceProviderImpl } from 'report-export/report-export-service-provider-impl';
import { AssessmentJsonExportGenerator } from 'reports/assessment-json-export-generator';
import { AssessmentReportHtmlGenerator } from 'reports/assessment-report-html-generator';
Expand Down Expand Up @@ -735,7 +735,7 @@ if (tabId != null) {
const renderer = new DetailsViewRenderer(
deps,
dom,
ReactDOM.render,
ReactDOMClient.createRoot,
documentElementSetter,
);

Expand All @@ -751,7 +751,7 @@ if (tabId != null) {
.catch(() => {
const renderer = createNullifiedRenderer(
document,
ReactDOM.render,
ReactDOMClient.createRoot,
createDefaultLogger(),
);
renderer.render();
Expand All @@ -760,7 +760,7 @@ if (tabId != null) {

function createNullifiedRenderer(
doc: Document,
render: typeof ReactDOM.render,
createRoot: typeof ReactDOMClient.createRoot,
logger: Logger,
): NoContentAvailableViewRenderer {
// using an instance of an actual store (instead of a StoreProxy) so we can get the default state.
Expand All @@ -773,5 +773,5 @@ function createNullifiedRenderer(
getNarrowModeThresholds: getNarrowModeThresholdsForWeb,
};

return new NoContentAvailableViewRenderer(deps, doc, render, documentElementSetter);
return new NoContentAvailableViewRenderer(deps, doc, createRoot, documentElementSetter);
}
11 changes: 5 additions & 6 deletions src/DetailsView/details-view-renderer.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';
import { Theme, ThemeDeps } from '../common/components/theme';
import { config } from '../common/configuration';
import { DocumentManipulator } from '../common/document-manipulator';
Expand All @@ -12,21 +12,20 @@ export class DetailsViewRenderer {
constructor(
private readonly deps: DetailsViewRendererDeps,
private readonly dom: Document,
private readonly renderer: typeof ReactDOM.render,
private readonly createRoot: typeof ReactDOMClient.createRoot,
private readonly documentManipulator: DocumentManipulator,
) {}

public render(): void {
const detailsViewContainer = this.dom.querySelector('#details-container');
const detailsViewContainer = this.dom.querySelector('#details-container') as Element;
const iconPath = '../' + config.getOption('icon128');
this.documentManipulator.setShortcutIcon(iconPath);

this.renderer(
const root = this.createRoot(detailsViewContainer);
root.render(
<>
<Theme deps={this.deps} />
<DetailsView deps={this.deps} />
</>,
detailsViewContainer,
);
}
}
10 changes: 5 additions & 5 deletions src/DetailsView/no-content-available-view-renderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ import {
NoContentAvailableViewDeps,
} from 'DetailsView/components/no-content-available/no-content-available-view';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';
import { config } from '../common/configuration';

export class NoContentAvailableViewRenderer {
constructor(
private readonly deps: NoContentAvailableViewDeps,
private readonly dom: Document,
private readonly renderer: typeof ReactDOM.render,
private readonly createRoot: typeof ReactDOMClient.createRoot,
private readonly documentManipulator: DocumentManipulator,
) {}

public render(): void {
const detailsViewContainer = this.dom.querySelector('#details-container');
const detailsViewContainer = this.dom.querySelector('#details-container') as Element;
const iconPath = '../' + config.getOption('icon128');
this.documentManipulator.setShortcutIcon(iconPath);

this.renderer(<NoContentAvailableView deps={this.deps} />, detailsViewContainer);
const root = this.createRoot(detailsViewContainer);
root.render(<NoContentAvailableView deps={this.deps} />);
}
}
3 changes: 2 additions & 1 deletion src/assessments/common/property-bag-column-renderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ export function propertyBagColumnRenderer<TPropertyBag extends ColumnValueBag>(
propertyMap: DictionaryStringTo<string>,
) => {
if (isEmpty(propertyMap)) {
return <React.Fragment>{config.defaultValue}</React.Fragment>;
const value: any = config.defaultValue;
return <React.Fragment>{value}</React.Fragment>;
}

return Object.keys(propertyMap).map(key => {
Expand Down
2 changes: 1 addition & 1 deletion src/common/components/with-store-subscription.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export type WithStoreSubscriptionDeps<T> = {
};

export function withStoreSubscription<P extends WithStoreSubscriptionProps<S>, S>(
WrappedComponent: React.ComponentType<P>,
WrappedComponent: React.ComponentType<React.PropsWithChildren<P>>,
): React.ComponentClass<Pick<P, Exclude<keyof P, keyof { storeState: S }>>, Partial<S>> & {
displayName: string;
} {
Expand Down
10 changes: 5 additions & 5 deletions src/common/extensibility/react-extension-point.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ type ExtensionPoint<C> = {
apply: (component: C) => Extension<C>;
};

type ReactExtension<P> = Extension<React.FC<P>> & {
type ReactExtension<P> = Extension<React.FC<React.PropsWithChildren<P>>> & {
extensionType: 'reactComponent';
};

type ReactExtensionPoint<P extends {}> = ExtensionPoint<React.FC<P>> & {
type ReactExtensionPoint<P extends {}> = ExtensionPoint<React.FC<React.PropsWithChildren<P>>> & {
extensionType: 'reactComponent';
create: (component: React.FC<P>) => ReactExtension<P>;
component: React.FC<P & { extensions: AnyExtension[] }>;
create: (component: React.FC<React.PropsWithChildren<P>>) => ReactExtension<P>;
component: React.FC<React.PropsWithChildren<P & { extensions: AnyExtension[] }>>;
};

function isReactExtension(extension: Extension<any>): extension is ReactExtension<any> {
Expand Down Expand Up @@ -55,7 +55,7 @@ export function reactExtensionPoint<P extends {}>(
return result;
});

function create(extensionComponent: React.FC<P>): ReactExtension<P> {
function create(extensionComponent: React.FC<React.PropsWithChildren<P>>): ReactExtension<P> {
const Wrap = extensionComponent;
const wrapComponent = NamedFC<P>(extensionPointKey, props => <Wrap {...props} />);
wrapComponent.displayName = extensionPointKey;
Expand Down
6 changes: 4 additions & 2 deletions src/common/react/named-fc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
// Licensed under the MIT License.
import * as React from 'react';

export type ReactFCWithDisplayName<P = {}> = React.FC<P> & { displayName: string };
export type ReactFCWithDisplayName<P = {}> = React.FC<React.PropsWithChildren<P>> & {
displayName: string;
};

export function NamedFC<P = {}>(
displayName: string,
component: React.FC<P>,
component: React.FC<React.PropsWithChildren<P>>,
): ReactFCWithDisplayName<P> {
component.displayName = displayName;

Expand Down
2 changes: 1 addition & 1 deletion src/common/types/link-component-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
// Licensed under the MIT License.
import { ILinkProps } from '@fluentui/react';

export type LinkComponentType = React.FC<ILinkProps>;
export type LinkComponentType = React.FC<React.PropsWithChildren<ILinkProps>>;
6 changes: 3 additions & 3 deletions src/debug-tools/initializer/debug-tools-init.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import { defaultDateFormatter } from 'debug-tools/components/telemetry-viewer/te
import { TelemetryListener } from 'debug-tools/controllers/telemetry-listener';
import { DebugToolsNavStore } from 'debug-tools/stores/debug-tools-nav-store';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { createRoot } from 'react-dom/client';
import UAParser from 'ua-parser-js';

export const initializeDebugTools = () => {
Expand Down Expand Up @@ -108,8 +108,8 @@ const createStoreProxies = (storeUpdateMessageHub: StoreUpdateMessageHub) => {

const render = (deps: DebugToolsViewDeps) => {
const container = document.querySelector('#debug-tools-container');

ReactDOM.render(<DebugToolsView deps={deps} />, container);
const root = createRoot(container);
root.render(<DebugToolsView deps={deps} />);
};

initializeDebugTools();
9 changes: 4 additions & 5 deletions src/injected/dialog-renderer-impl.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { IssueFilingUrlStringUtils } from 'issue-filing/common/issue-filing-url-
import { PlainTextFormatter } from 'issue-filing/common/markup/plain-text-formatter';
import { AxeResultToIssueFilingDataConverter } from 'issue-filing/rule-result-to-issue-filing-data';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';
import { Target } from 'scanner/iruleresults';
import { DictionaryStringTo } from 'types/common-types';
import { rootContainerId } from './constants';
Expand All @@ -43,7 +43,7 @@ export class DialogRendererImpl implements DialogRenderer {

constructor(
private readonly dom: Document,
private readonly renderer: typeof ReactDOM.render,
private readonly createRoot: typeof ReactDOMClient.createRoot,
private readonly frameMessenger: SingleFrameMessenger,
private readonly htmlElementUtils: HTMLElementUtils,
private readonly windowUtils: WindowUtils,
Expand Down Expand Up @@ -101,8 +101,8 @@ export class DialogRendererImpl implements DialogRenderer {
userConfigMessageCreator: mainWindowContext.getUserConfigMessageCreator(),
LinkComponent: NewTabLink,
};

this.renderer(
const root = this.createRoot(dialogContainer);
root.render(
<LayeredDetailsDialogComponent
deps={deps}
failedRules={failedRules}
Expand All @@ -114,7 +114,6 @@ export class DialogRendererImpl implements DialogRenderer {
devToolsShortcut={getPlatform(this.windowUtils).devToolsShortcut}
devToolActionMessageCreator={mainWindowContext.getDevToolActionMessageCreator()}
/>,
dialogContainer,
);
return null;
} else {
Expand Down
4 changes: 2 additions & 2 deletions src/injected/visualization/issues-formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { NavigatorUtils } from 'common/navigator-utils';
import { HtmlElementAxeResults } from 'common/types/store-data/visualization-scan-result-data';
import { DialogRendererImpl } from 'injected/dialog-renderer-impl';
import { SingleFrameMessenger } from 'injected/frameCommunicators/single-frame-messenger';
import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';

import { BrowserAdapter } from '../../common/browser-adapters/browser-adapter';
import { HTMLElementUtils } from '../../common/html-element-utils';
Expand All @@ -31,7 +31,7 @@ export class IssuesFormatter implements Formatter {
) {
this.dialogRenderer = new DialogRendererImpl(
document,
ReactDOM.render,
ReactDOMClient.createRoot,
frameMessenger,
htmlElementUtils,
windowUtils,
Expand Down
2 changes: 1 addition & 1 deletion src/popup/components/diagnostic-view-toggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export class DiagnosticViewToggle extends React.Component<

// Must be consistent with internal react naming for same property to work
// tslint:disable-next-line: variable-name
private _isMounted: boolean;
protected _isMounted: boolean;

constructor(props: DiagnosticViewToggleProps) {
super(props);
Expand Down
11 changes: 5 additions & 6 deletions src/popup/incompatible-browser-renderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
// Licensed under the MIT License.
import { title } from 'content/strings/application';
import * as React from 'react';
import ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';

import { NewTabLink } from '../common/components/new-tab-link';
import { Header } from './components/header';

export class IncompatibleBrowserRenderer {
constructor(
private readonly renderer: typeof ReactDOM.render,
private readonly createRoot: typeof ReactDOMClient.createRoot,
private readonly dom: Document,
) {}

public render(): void {
const container = this.dom.querySelector('#popup-container');

this.renderer(
const container = this.dom.querySelector('#popup-container') as Element;
const root = this.createRoot(container);
root.render(
<>
<div className="ms-Fabric unsupported-browser-info-panel">
<Header title={title} />
Expand All @@ -38,7 +38,6 @@ export class IncompatibleBrowserRenderer {
</div>
</div>
</>,
container,
);
}
}
Loading
Loading