diff --git a/packages/core-app-api/src/app/AppContext.test.tsx b/packages/core-app-api/src/app/AppContext.test.tsx
index a27b7c6f35..ee7b90533f 100644
--- a/packages/core-app-api/src/app/AppContext.test.tsx
+++ b/packages/core-app-api/src/app/AppContext.test.tsx
@@ -40,7 +40,7 @@ describe('v1 consumer', () => {
};
const renderedHook = renderHook(() => useMockAppV1(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
),
});
diff --git a/packages/core-app-api/src/routing/RoutingProvider.beta.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.beta.test.tsx
index 532be8c09d..c3a5bab89e 100644
--- a/packages/core-app-api/src/routing/RoutingProvider.beta.test.tsx
+++ b/packages/core-app-api/src/routing/RoutingProvider.beta.test.tsx
@@ -353,7 +353,7 @@ describe('v1 consumer', () => {
initialProps: {
routeRef: routeRef1 as AnyRouteRef,
},
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
, string>([
diff --git a/packages/core-app-api/src/routing/RoutingProvider.stable.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.stable.test.tsx
index 24101dcf06..84a33842c9 100644
--- a/packages/core-app-api/src/routing/RoutingProvider.stable.test.tsx
+++ b/packages/core-app-api/src/routing/RoutingProvider.stable.test.tsx
@@ -385,7 +385,7 @@ describe('v1 consumer', () => {
initialProps: {
routeRef: routeRef1 as AnyRouteRef,
},
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
, string>([
diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md
index 54c26039a3..0aade4549e 100644
--- a/packages/core-components/api-report.md
+++ b/packages/core-components/api-report.md
@@ -347,10 +347,10 @@ export type EmptyStateImageClassKey = 'generalImg';
export const ErrorBoundary: ComponentClass;
// @public (undocumented)
-export type ErrorBoundaryProps = {
+export type ErrorBoundaryProps = React_2.PropsWithChildren<{
slackChannel?: string | SlackChannel;
onError?: (error: Error, errorInfo: string) => null;
-};
+}>;
// Warning: (ae-forgotten-export) The symbol "IErrorPageProps" needs to be exported by the entry point index.d.ts
//
diff --git a/packages/core-components/src/components/Link/Link.test.tsx b/packages/core-components/src/components/Link/Link.test.tsx
index 682c4bea8a..1e39d14009 100644
--- a/packages/core-components/src/components/Link/Link.test.tsx
+++ b/packages/core-components/src/components/Link/Link.test.tsx
@@ -134,7 +134,9 @@ describe('', () => {
});
describe('useResolvedPath', () => {
- const wrapper: WrapperComponent<{}> = ({ children }) => {
+ const wrapper: WrapperComponent> = ({
+ children,
+ }) => {
const configApi = new ConfigReader({
app: { baseUrl: 'http://localhost:3000/example' },
});
diff --git a/packages/core-components/src/components/LogViewer/useLogViewerSelection.test.tsx b/packages/core-components/src/components/LogViewer/useLogViewerSelection.test.tsx
index 93a6dfd7e9..a828818ed5 100644
--- a/packages/core-components/src/components/LogViewer/useLogViewerSelection.test.tsx
+++ b/packages/core-components/src/components/LogViewer/useLogViewerSelection.test.tsx
@@ -40,7 +40,7 @@ const lines = [
describe('useLogViewerSelection', () => {
it('should manage a selection', () => {
const rendered = renderHook(() => useLogViewerSelection(lines), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{children}
diff --git a/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.tsx b/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.tsx
index 037e170640..0ecaedfc19 100644
--- a/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.tsx
+++ b/packages/core-components/src/layout/ErrorBoundary/ErrorBoundary.tsx
@@ -25,10 +25,10 @@ type SlackChannel = {
};
/** @public */
-export type ErrorBoundaryProps = {
+export type ErrorBoundaryProps = React.PropsWithChildren<{
slackChannel?: string | SlackChannel;
onError?: (error: Error, errorInfo: string) => null;
-};
+}>;
type State = {
error?: Error;
diff --git a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx
index 0ea2e163a7..e6ca9b720e 100644
--- a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx
+++ b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx
@@ -18,7 +18,7 @@ import { BackstageTheme } from '@backstage/theme';
import Grid from '@material-ui/core/Grid';
import { alpha, makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
-import React from 'react';
+import React, { PropsWithChildren } from 'react';
import { Link } from '../../components/Link';
/** @public */
@@ -46,10 +46,10 @@ const useStyles = makeStyles(
{ name: 'BackstageHeaderLabel' },
);
-type HeaderLabelContentProps = {
+type HeaderLabelContentProps = PropsWithChildren<{
value: React.ReactNode;
className: string;
-};
+}>;
const HeaderLabelContent = ({ value, className }: HeaderLabelContentProps) => {
return (
diff --git a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx
index a6bfc79040..ce5c572eef 100644
--- a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx
+++ b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx
@@ -55,18 +55,20 @@ describe('', () => {
},
}));
- const TextualBadge = React.forwardRef((props, ref) => (
-
-
- {props.children}
-
-
- ));
+ const TextualBadge = React.forwardRef(
+ (props: React.PropsWithChildren<{}>, ref) => (
+
+
+ {props.children}
+
+
+ ),
+ );
const iconTab = [
{
id: 'icon-tab',
diff --git a/packages/core-plugin-api/src/extensions/PluginErrorBoundary.tsx b/packages/core-plugin-api/src/extensions/PluginErrorBoundary.tsx
index 215ebc8470..51ddecdf71 100644
--- a/packages/core-plugin-api/src/extensions/PluginErrorBoundary.tsx
+++ b/packages/core-plugin-api/src/extensions/PluginErrorBoundary.tsx
@@ -18,10 +18,10 @@ import React from 'react';
import { AppContext } from '../app/types';
import { BackstagePlugin } from '../plugin';
-type Props = {
+type Props = React.PropsWithChildren<{
app: AppContext;
plugin: BackstagePlugin;
-};
+}>;
type State = { error: Error | undefined };
diff --git a/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx b/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx
index 11bf85aafa..96691d503b 100644
--- a/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx
+++ b/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx
@@ -38,7 +38,7 @@ describe('usePluginOptions', () => {
});
const rendered = renderHook(() => usePluginOptions(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{children}
),
});
diff --git a/packages/core-plugin-api/src/routing/useRouteRef.test.tsx b/packages/core-plugin-api/src/routing/useRouteRef.test.tsx
index 618f40d281..7a03a1cdc4 100644
--- a/packages/core-plugin-api/src/routing/useRouteRef.test.tsx
+++ b/packages/core-plugin-api/src/routing/useRouteRef.test.tsx
@@ -36,7 +36,7 @@ describe('v1 consumer', () => {
const routeRef = createRouteRef({ id: 'ref1' });
const renderedHook = renderHook(() => useRouteRef(routeRef), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
),
});
@@ -60,7 +60,7 @@ describe('v1 consumer', () => {
history.push('/my-page');
const { rerender } = renderHook(() => useRouteRef(routeRef), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{
history.push('/my-page');
const { rerender } = renderHook(() => useRouteRef(routeRef), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{
history.push('/my-page');
const { rerender } = renderHook(() => useRouteRef(routeRef), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{
history.push('/my-page');
const { rerender } = renderHook(() => useRouteRef(routeRef), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
> | ReactNode,
options?: TestAppOptions,
): Promise;
diff --git a/packages/test-utils/src/testUtils/appWrappers.tsx b/packages/test-utils/src/testUtils/appWrappers.tsx
index 6545cc312a..1628900b73 100644
--- a/packages/test-utils/src/testUtils/appWrappers.tsx
+++ b/packages/test-utils/src/testUtils/appWrappers.tsx
@@ -14,7 +14,12 @@
* limitations under the License.
*/
-import React, { ComponentType, ReactNode, ReactElement } from 'react';
+import React, {
+ ComponentType,
+ ReactNode,
+ ReactElement,
+ PropsWithChildren,
+} from 'react';
import { MemoryRouter } from 'react-router-dom';
import { Route } from 'react-router-dom';
import { UnifiedThemeProvider, themes } from '@backstage/theme';
@@ -226,7 +231,7 @@ export function wrapInTestApp(
* @public
*/
export async function renderInTestApp(
- Component: ComponentType | ReactNode,
+ Component: ComponentType> | ReactNode,
options: TestAppOptions = {},
): Promise {
let wrappedElement: React.ReactElement;
diff --git a/packages/version-bridge/src/lib/VersionedContext.test.tsx b/packages/version-bridge/src/lib/VersionedContext.test.tsx
index 659fd9b5b9..275e491324 100644
--- a/packages/version-bridge/src/lib/VersionedContext.test.tsx
+++ b/packages/version-bridge/src/lib/VersionedContext.test.tsx
@@ -30,7 +30,7 @@ describe('VersionedContext', () => {
const Context = createVersionedContext('test-context-1');
const rendered = renderHook(() => useContext(Context), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
@@ -47,7 +47,7 @@ describe('VersionedContext', () => {
const Context = createVersionedContext('test-context-2');
const rendered = renderHook(() => useVersionedContext('test-context-2'), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx
index 8a3352abb4..2556cd06d7 100644
--- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx
+++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx
@@ -30,7 +30,7 @@ import React, { FunctionComponent } from 'react';
import { EntityRelationsGraph } from './EntityRelationsGraph';
describe('', () => {
- let Wrapper: FunctionComponent;
+ let Wrapper: FunctionComponent>;
const entities: { [ref: string]: Entity } = {
'b:d/c': {
apiVersion: 'a',
diff --git a/plugins/catalog-react/src/hooks/useEntity.test.tsx b/plugins/catalog-react/src/hooks/useEntity.test.tsx
index 3a1e5010d3..8fc388654a 100644
--- a/plugins/catalog-react/src/hooks/useEntity.test.tsx
+++ b/plugins/catalog-react/src/hooks/useEntity.test.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import React from 'react';
+import React, { PropsWithChildren } from 'react';
import { renderHook } from '@testing-library/react-hooks';
import {
useEntity,
@@ -32,7 +32,9 @@ const entity = { metadata: { name: 'my-entity' }, kind: 'MyKind' } as Entity;
describe('useEntity', () => {
it('should throw if no entity is provided', async () => {
const { result } = renderHook(() => useEntity(), {
- wrapper: ({ children }) => ,
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
+
+ ),
});
expect(result.error?.message).toMatch(/entity has not been loaded/);
@@ -40,7 +42,7 @@ describe('useEntity', () => {
it('should provide an entity', async () => {
const { result } = renderHook(() => useEntity(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
),
});
@@ -52,7 +54,7 @@ describe('useEntity', () => {
const analyticsSpy = new MockAnalyticsApi();
const apis = TestApiRegistry.from([analyticsApiRef, analyticsSpy]);
const { result } = renderHook(() => useAnalytics(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
@@ -70,7 +72,7 @@ describe('useEntity', () => {
describe('useAsyncEntity', () => {
it('should provide no entity', async () => {
const { result } = renderHook(() => useAsyncEntity(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
),
});
@@ -84,7 +86,7 @@ describe('useAsyncEntity', () => {
it('should provide an entity', async () => {
const refresh = () => {};
const { result } = renderHook(() => useAsyncEntity(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{
it('should provide an error', async () => {
const error = new Error('oh no');
const { result } = renderHook(() => useAsyncEntity(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: PropsWithChildren<{}>) => (
{
const analyticsSpy = new MockAnalyticsApi();
const apis = TestApiRegistry.from([analyticsApiRef, analyticsSpy]);
const { result } = renderHook(() => useAnalytics(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{
const analyticsSpy = new MockAnalyticsApi();
const apis = TestApiRegistry.from([analyticsApiRef, analyticsSpy]);
const { result } = renderHook(() => useAnalytics(), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: PropsWithChildren<{}>) => (
diff --git a/plugins/catalog-react/src/hooks/useRelatedEntities.test.tsx b/plugins/catalog-react/src/hooks/useRelatedEntities.test.tsx
index 0d415274e0..8de7822d59 100644
--- a/plugins/catalog-react/src/hooks/useRelatedEntities.test.tsx
+++ b/plugins/catalog-react/src/hooks/useRelatedEntities.test.tsx
@@ -17,7 +17,7 @@
import { Entity } from '@backstage/catalog-model';
import { TestApiProvider } from '@backstage/test-utils';
import { WrapperComponent, renderHook } from '@testing-library/react-hooks';
-import React from 'react';
+import React, { PropsWithChildren } from 'react';
import { catalogApiRef } from '../api';
import { useRelatedEntities } from './useRelatedEntities';
@@ -50,7 +50,7 @@ describe('useRelatedEntities', () => {
getEntitiesByRefs: jest.fn(),
};
- const wrapper: WrapperComponent<{}> = ({ children }) => {
+ const wrapper: WrapperComponent> = ({ children }) => {
return (
{children}
diff --git a/plugins/github-pull-requests-board/src/components/Card/Card.tsx b/plugins/github-pull-requests-board/src/components/Card/Card.tsx
index 320e166358..4fe833fa67 100644
--- a/plugins/github-pull-requests-board/src/components/Card/Card.tsx
+++ b/plugins/github-pull-requests-board/src/components/Card/Card.tsx
@@ -31,7 +31,9 @@ type Props = {
labels?: Label[];
};
-const Card: FunctionComponent = (props: PropsWithChildren) => {
+const Card: FunctionComponent> = (
+ props: React.PropsWithChildren,
+) => {
const {
title,
createdAt,
diff --git a/plugins/github-pull-requests-board/src/components/InfoCardHeader/InfoCardHeader.tsx b/plugins/github-pull-requests-board/src/components/InfoCardHeader/InfoCardHeader.tsx
index 8c126bcaa4..004cf7c5ae 100644
--- a/plugins/github-pull-requests-board/src/components/InfoCardHeader/InfoCardHeader.tsx
+++ b/plugins/github-pull-requests-board/src/components/InfoCardHeader/InfoCardHeader.tsx
@@ -21,7 +21,7 @@ type Props = {
onRefresh: () => void;
};
-const InfoCardHeader: FunctionComponent = (
+const InfoCardHeader: FunctionComponent> = (
props: PropsWithChildren,
) => {
const { children, onRefresh } = props;
diff --git a/plugins/github-pull-requests-board/src/components/Wrapper/Wrapper.tsx b/plugins/github-pull-requests-board/src/components/Wrapper/Wrapper.tsx
index 6d8f17cb72..bf5fa157fc 100644
--- a/plugins/github-pull-requests-board/src/components/Wrapper/Wrapper.tsx
+++ b/plugins/github-pull-requests-board/src/components/Wrapper/Wrapper.tsx
@@ -20,7 +20,9 @@ type Props = {
fullscreen: boolean;
};
-const Wrapper: FunctionComponent = (props: PropsWithChildren) => {
+const Wrapper: FunctionComponent> = (
+ props: PropsWithChildren,
+) => {
const { children, fullscreen } = props;
return (
diff --git a/plugins/scaffolder-react/src/next/hooks/useTemplateSchema.test.tsx b/plugins/scaffolder-react/src/next/hooks/useTemplateSchema.test.tsx
index d257d69c59..9a0732442c 100644
--- a/plugins/scaffolder-react/src/next/hooks/useTemplateSchema.test.tsx
+++ b/plugins/scaffolder-react/src/next/hooks/useTemplateSchema.test.tsx
@@ -50,7 +50,7 @@ describe('useTemplateSchema', () => {
};
const { result } = renderHook(() => useTemplateSchema(manifest), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
false }]]}
>
@@ -117,7 +117,7 @@ describe('useTemplateSchema', () => {
};
const { result } = renderHook(() => useTemplateSchema(manifest), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
false }]]}
>
@@ -161,7 +161,7 @@ describe('useTemplateSchema', () => {
};
const { result } = renderHook(() => useTemplateSchema(manifest), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
true }]]}
>
@@ -212,7 +212,7 @@ describe('useTemplateSchema', () => {
};
const { result } = renderHook(() => useTemplateSchema(manifest), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
false }]]}
>
@@ -250,7 +250,7 @@ describe('useTemplateSchema', () => {
};
const { result } = renderHook(() => useTemplateSchema(manifest), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
false }]]}
>
diff --git a/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.test.tsx b/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.test.tsx
index 6dba7b9f29..7ee5cbfdfd 100644
--- a/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.test.tsx
+++ b/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.test.tsx
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import React from 'react';
+import React, { PropsWithChildren } from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { TestApiProvider } from '@backstage/test-utils';
import { type ParsedTemplateSchema } from './useTemplateSchema';
@@ -39,7 +39,7 @@ describe('useTransformSchemaToProps', () => {
const { result } = renderHook(
() => useTransformSchemaToProps(step, { layouts }),
{
- wrapper: ({ children }) => (
+ wrapper: ({ children }: PropsWithChildren<{}>) => (
{children}
),
},
diff --git a/plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx b/plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx
index 593fbd908b..553f27d2a9 100644
--- a/plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx
+++ b/plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx
@@ -24,7 +24,7 @@ describe('SecretsContext', () => {
hook: useTemplateSecrets(),
}),
{
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{children}
),
},
diff --git a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx
index 0de41e3589..e21f864ac2 100644
--- a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx
+++ b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx
@@ -85,7 +85,7 @@ describe('useSearchModal', () => {
const history = createMemoryHistory({ initialEntries: ['/'] });
const rendered = renderHook(() => useSearchModal(true), {
- wrapper: ({ children }) => (
+ wrapper: ({ children }: React.PropsWithChildren<{}>) => (
{children}