Skip to content

Commit

Permalink
feat: Allow breadcrumb component in PageHeader (#30019)
Browse files Browse the repository at this point in the history
* Allow breadcrumb component in PageHeader

* Allow breadcrumb component in PageHeader

* Allow breadcrumb component in PageHeader

* Rename variable

rename var from _breadcrumbRender to breadcrumbRenderDomFromProps
  • Loading branch information
gepd committed Apr 10, 2021
1 parent ebd60df commit 941ba1f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
15 changes: 15 additions & 0 deletions components/page-header/__tests__/index.test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React from 'react';
import { mount, render } from 'enzyme';
import PageHeader from '..';
import Breadcrumb from '../../breadcrumb';
import ConfigProvider from '../../config-provider';
import mountTest from '../../../tests/shared/mountTest';
import rtlTest from '../../../tests/shared/rtlTest';
Expand Down Expand Up @@ -50,6 +51,20 @@ describe('PageHeader', () => {
expect(wrapper.find('.ant-page-header-back')).toHaveLength(0);
});

it('pageHeader should have breadcrumb (component)', () => {
const routes = [
{
path: 'index',
breadcrumbName: 'First-level Menu',
},
];
const wrapper = mount(
<PageHeader title="Page Title" breadcrumb={<Breadcrumb routes={routes} />} />,
);
expect(wrapper.find('.ant-breadcrumb')).toHaveLength(1);
expect(wrapper.find('.ant-page-header-back')).toHaveLength(0);
});

it('pageHeader support breadcrumbRender', () => {
const wrapper = mount(
<PageHeader title="Page Title" breadcrumbRender={() => <div id="test">test</div>} />,
Expand Down
7 changes: 5 additions & 2 deletions components/page-header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export interface PageHeaderProps {
title?: React.ReactNode;
subTitle?: React.ReactNode;
style?: React.CSSProperties;
breadcrumb?: BreadcrumbProps;
breadcrumb?: BreadcrumbProps | React.ReactElement<typeof Breadcrumb>;
breadcrumbRender?: (props: PageHeaderProps, defaultDom: React.ReactNode) => React.ReactNode;
tags?: React.ReactElement<TagType> | React.ReactElement<TagType>[];
footer?: React.ReactNode;
Expand Down Expand Up @@ -156,10 +156,13 @@ const PageHeader: React.FC<PageHeaderProps> = props => {

const defaultBreadcrumbDom = getDefaultBreadcrumbDom();

const isBreadcrumbComponent = breadcrumb && 'props' in breadcrumb;
// support breadcrumbRender function
const breadcrumbDom =
const breadcrumbRenderDomFromProps =
breadcrumbRender?.(props, defaultBreadcrumbDom) || defaultBreadcrumbDom;

const breadcrumbDom = isBreadcrumbComponent ? breadcrumb : breadcrumbRenderDomFromProps;

const className = classNames(prefixCls, customizeClassName, {
'has-breadcrumb': !!breadcrumbDom,
'has-footer': !!footer,
Expand Down

0 comments on commit 941ba1f

Please sign in to comment.