diff --git a/src/components/page_template/__snapshots__/page_template.test.tsx.snap b/src/components/page_template/__snapshots__/page_template.test.tsx.snap index 3d42b4f9565..470faaac135 100644 --- a/src/components/page_template/__snapshots__/page_template.test.tsx.snap +++ b/src/components/page_template/__snapshots__/page_template.test.tsx.snap @@ -3,10 +3,9 @@ exports[`EuiPageTemplate _EuiPageInnerProps is rendered 1`] = `
-
diff --git a/src/components/page_template/inner/__snapshots__/page_inner.test.tsx.snap b/src/components/page_template/inner/__snapshots__/page_inner.test.tsx.snap index 9700410a893..42b11bb74ff 100644 --- a/src/components/page_template/inner/__snapshots__/page_inner.test.tsx.snap +++ b/src/components/page_template/inner/__snapshots__/page_inner.test.tsx.snap @@ -6,12 +6,23 @@ exports[`_EuiPageInner border is rendered 1`] = ` /> `; -exports[`_EuiPageInner component is rendered 1`] = ` +exports[`_EuiPageInner component renders HTML tag strings 1`] = `
`; +exports[`_EuiPageInner component renders custom React components 1`] = ` +Array [ +
+ hello +
, +
+ world +
, +] +`; + exports[`_EuiPageInner is rendered 1`] = `
{ expect(component).toMatchSnapshot(); }); - test('component is rendered', () => { - const component = render(); + describe('component', () => { + it('renders HTML tag strings', () => { + const component = render(); - expect(component).toMatchSnapshot(); + expect(component).toMatchSnapshot(); + }); + + it('renders custom React components', () => { + const TestComponent: React.FC<{ test?: boolean }> = ({ test }) => ( +
{test ? 'hello' : 'world'}
+ ); + + const component = render( + <> + + + + ); + expect(component).toMatchSnapshot(); + }); }); describe('paddingSize', () => { diff --git a/src/components/page_template/inner/page_inner.tsx b/src/components/page_template/inner/page_inner.tsx index b738ad8e6dc..accfe8c4da9 100644 --- a/src/components/page_template/inner/page_inner.tsx +++ b/src/components/page_template/inner/page_inner.tsx @@ -16,7 +16,7 @@ import { import { useEuiTheme, useIsWithinBreakpoints } from '../../../services'; import { euiPageInnerStyles } from './page_inner.styles'; -type ComponentTypes = keyof JSX.IntrinsicElements | ComponentType; +export type ComponentTypes = keyof JSX.IntrinsicElements | ComponentType; export type _EuiPageInnerProps< T extends ComponentTypes = 'main' @@ -40,7 +40,7 @@ export type _EuiPageInnerProps< */ paddingSize?: EuiPaddingSize; /** - * Decides at which point the component will be 100vw. + * Decides at which point the main content wrapper will be 100vw. */ responsive?: _EuiThemeBreakpoint[]; }; diff --git a/src/components/page_template/outer/page_outer.tsx b/src/components/page_template/outer/page_outer.tsx index 089d14ea862..b61aad83ad3 100644 --- a/src/components/page_template/outer/page_outer.tsx +++ b/src/components/page_template/outer/page_outer.tsx @@ -26,7 +26,7 @@ export interface _EuiPageOuterProps */ direction?: 'row' | 'column'; /** - * When direction is `row`, it will flip to `column` when within these breakpoints + * When direction is `row`, it will flip to `column` when within these breakpoints. */ responsive?: _EuiThemeBreakpoint[]; } diff --git a/src/components/page_template/page_template.test.tsx b/src/components/page_template/page_template.test.tsx index 3c011bbf7ad..077926ffe31 100644 --- a/src/components/page_template/page_template.test.tsx +++ b/src/components/page_template/page_template.test.tsx @@ -35,7 +35,7 @@ describe('EuiPageTemplate', () => { test('_EuiPageInnerProps is rendered', () => { const component = render( & + Omit<_EuiPageInnerProps, 'border' | 'component'> & _EuiPageRestrictWidth & _EuiPageBottomBorder & { /** @@ -71,6 +72,11 @@ export type EuiPageTemplateProps = _EuiPageOuterProps & * Passes through some common HTML attributes to the `main` content wrapper */ mainProps?: CommonProps & HTMLAttributes; + /** + * Sets which HTML element to render for the `main` content wrapper + * @default main + */ + component?: ComponentTypes; }; /** @@ -80,6 +86,7 @@ export type EuiPageTemplateProps = _EuiPageOuterProps & export const _EuiPageTemplate: FunctionComponent = ({ children, // Shared props + responsive = ['xs', 's'], restrictWidth = true, paddingSize = 'l', grow = true, @@ -88,11 +95,11 @@ export const _EuiPageTemplate: FunctionComponent = ({ panelled, // Inner props contentBorder, + component, mainProps, // Outer props className, minHeight = '460px', - responsive = ['xs', 's'], ...rest }) => { const { euiTheme } = useEuiTheme(); @@ -205,6 +212,7 @@ export const _EuiPageTemplate: FunctionComponent = ({