Skip to content

Commit

Permalink
Merge pull request #579 from LittlehorseXie/feature/breadcrumb
Browse files Browse the repository at this point in the history
feat(breadcrumb): 增加自定义 children 时对 separator 的支持
  • Loading branch information
carolin913 authored Apr 6, 2022
2 parents def964b + 1ffcadb commit db6b79c
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 62 deletions.
1 change: 1 addition & 0 deletions src/breadcrumb/Breadcrumb.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ const Breadcrumb = forwardRefWithStatics(
value={{
maxItemWidthInContext: maxItemWidth,
theme,
separator,
}}
>
<div ref={ref} className={`${classPrefix}-breadcrumb`} {...restProps}>
Expand Down
3 changes: 3 additions & 0 deletions src/breadcrumb/BreadcrumbContext.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { createContext } from 'react';
import { TdBreadcrumbProps } from './type';

export interface BreadcrumbContextType {
maxItemWidthInContext;
theme: string;
separator: TdBreadcrumbProps['separator'];
}

export const BreadcrumbContext = createContext<BreadcrumbContextType>({
maxItemWidthInContext: '',
theme: 'light',
separator: null,
});
22 changes: 7 additions & 15 deletions src/breadcrumb/BreadcrumbItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,10 @@ import { BreadcrumbItemProps } from './BreadcrumbProps';
import { BreadcrumbContext } from './BreadcrumbContext';

export const BreadcrumbItem = forwardRef<HTMLDivElement, BreadcrumbItemProps>((props, ref) => {
const {
children,
separator = <ChevronRightIcon style={{ color: 'rgba(0,0,0,.3)' }} />,
disabled,
maxItemWidth,
maxWidth,
href,
to,
target,
router,
replace,
...restProps
} = props;
const { children, separator, disabled, maxItemWidth, maxWidth, href, to, target, router, replace, ...restProps } =
props;

const { maxItemWidthInContext, theme } = useContext(BreadcrumbContext);
const { maxItemWidthInContext, theme, separator: separatorInContext } = useContext(BreadcrumbContext);

const { classPrefix } = useConfig();
const commonClassNames = useCommonClassName();
Expand Down Expand Up @@ -63,7 +52,10 @@ export const BreadcrumbItem = forwardRef<HTMLDivElement, BreadcrumbItemProps>((p
);
}

const separatorContent = typeof separator === 'function' ? separator() : separator;
const separatorInProps = typeof separator === 'function' ? separator() : separator;
const separatorContent = separatorInProps || separatorInContext || (
<ChevronRightIcon style={{ color: 'rgba(0,0,0,.3)' }} />
);

return (
<div className={classNames(breadcrumbItemClassNames, theme)} ref={ref} {...restProps}>
Expand Down
104 changes: 63 additions & 41 deletions src/breadcrumb/__tests__/__snapshots__/breadcrumb.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -126,20 +126,7 @@ exports[`custom.jsx 1`] = `
<span
class="t-breadcrumb__separator"
>
<svg
class="t-icon t-icon-chevron-right"
fill="none"
height="1em"
style="color: rgba(0, 0, 0, 0.3);"
viewBox="0 0 16 16"
width="1em"
>
<path
d="M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z"
fill="currentColor"
fill-opacity="0.9"
/>
</svg>
&gt;&gt;
</span>
</div>
<div
Expand All @@ -158,20 +145,7 @@ exports[`custom.jsx 1`] = `
<span
class="t-breadcrumb__separator"
>
<svg
class="t-icon t-icon-chevron-right"
fill="none"
height="1em"
style="color: rgba(0, 0, 0, 0.3);"
viewBox="0 0 16 16"
width="1em"
>
<path
d="M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z"
fill="currentColor"
fill-opacity="0.9"
/>
</svg>
&gt;&gt;
</span>
</div>
<div
Expand All @@ -190,20 +164,68 @@ exports[`custom.jsx 1`] = `
<span
class="t-breadcrumb__separator"
>
<svg
class="t-icon t-icon-chevron-right"
fill="none"
height="1em"
style="color: rgba(0, 0, 0, 0.3);"
viewBox="0 0 16 16"
width="1em"
&gt;&gt;
</span>
</div>
</div>
<div
class="t-breadcrumb"
>
<div
class="t-breadcrumb__item"
>
<span
class="t-breadcrumb--text-overflow"
>
<span
class="t-breadcrumb__inner"
style="max-width: 150;"
>
<path
d="M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z"
fill="currentColor"
fill-opacity="0.9"
/>
</svg>
页面1
</span>
</span>
<span
class="t-breadcrumb__separator"
>
/////
</span>
</div>
<div
class="t-breadcrumb__item"
>
<span
class="t-breadcrumb--text-overflow"
>
<span
class="t-breadcrumb__inner"
style="max-width: 150;"
>
页面2
</span>
</span>
<span
class="t-breadcrumb__separator"
>
/////
</span>
</div>
<div
class="t-breadcrumb__item"
>
<span
class="t-breadcrumb--text-overflow"
>
<span
class="t-breadcrumb__inner"
style="max-width: 160;"
>
页面3
</span>
</span>
<span
class="t-breadcrumb__separator"
>
/////
</span>
</div>
</div>
Expand Down
17 changes: 12 additions & 5 deletions src/breadcrumb/_example/custom.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@ const { BreadcrumbItem } = Breadcrumb;

export default function BreadcrumbExample() {
return (
<Breadcrumb maxItemWidth="150" separator={'>'}>
<BreadcrumbItem>页面1</BreadcrumbItem>
<BreadcrumbItem>页面2</BreadcrumbItem>
<BreadcrumbItem maxItemWidth="160">页面3</BreadcrumbItem>
</Breadcrumb>
<>
<Breadcrumb maxItemWidth="150" separator={'>>'}>
<BreadcrumbItem>页面1</BreadcrumbItem>
<BreadcrumbItem>页面2</BreadcrumbItem>
<BreadcrumbItem maxItemWidth="160">页面3</BreadcrumbItem>
</Breadcrumb>
<Breadcrumb maxItemWidth="150" separator={'/////'}>
<BreadcrumbItem>页面1</BreadcrumbItem>
<BreadcrumbItem>页面2</BreadcrumbItem>
<BreadcrumbItem maxItemWidth="160">页面3</BreadcrumbItem>
</Breadcrumb>
</>
);
}
2 changes: 1 addition & 1 deletion test/ssr/__snapshots__/ssr.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ exports[`ssr snapshot test renders ./src/badge/_example/size.jsx correctly 1`] =

exports[`ssr snapshot test renders ./src/breadcrumb/_example/base.jsx correctly 1`] = `"<div class=\\"t-breadcrumb\\"><div class=\\"t-breadcrumb__item light\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:200px\\">页面1</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item light\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:200px\\">页面2页面2页面2页面2页面2页面2页面2页面2</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item light\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:120px\\">页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3页面3</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div></div>"`;

exports[`ssr snapshot test renders ./src/breadcrumb/_example/custom.jsx correctly 1`] = `"<div class=\\"t-breadcrumb\\"><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面1</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面2</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:160\\">页面3</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div></div>"`;
exports[`ssr snapshot test renders ./src/breadcrumb/_example/custom.jsx correctly 1`] = `"<div class=\\"t-breadcrumb\\"><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面1</span></span><span class=\\"t-breadcrumb__separator\\">&gt;&gt;</span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面2</span></span><span class=\\"t-breadcrumb__separator\\">&gt;&gt;</span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:160\\">页面3</span></span><span class=\\"t-breadcrumb__separator\\">&gt;&gt;</span></div></div><div class=\\"t-breadcrumb\\"><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面1</span></span><span class=\\"t-breadcrumb__separator\\">/////</span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面2</span></span><span class=\\"t-breadcrumb__separator\\">/////</span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:160\\">页面3</span></span><span class=\\"t-breadcrumb__separator\\">/////</span></div></div>"`;

exports[`ssr snapshot test renders ./src/breadcrumb/_example/href.jsx correctly 1`] = `"<div data-reactroot=\\"\\"><div class=\\"t-breadcrumb\\"><div class=\\"t-breadcrumb__item\\"><a class=\\"t-breadcrumb--text-overflow t-link\\" href=\\"/\\" target=\\"_blank\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面1</span></a><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow t-is-disabled\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:150\\">页面2</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div><div class=\\"t-breadcrumb__item\\"><span class=\\"t-breadcrumb--text-overflow\\"><span class=\\"t-breadcrumb__inner\\" style=\\"max-width:160\\">页面3</span></span><span class=\\"t-breadcrumb__separator\\"><svg fill=\\"none\\" viewBox=\\"0 0 16 16\\" width=\\"1em\\" height=\\"1em\\" class=\\"t-icon t-icon-chevron-right\\" style=\\"color:rgba(0,0,0,.3)\\"><path fill=\\"currentColor\\" d=\\"M6.46 12.46l-.92-.92L9.08 8 5.54 4.46l.92-.92L10.92 8l-4.46 4.46z\\" fill-opacity=\\"0.9\\"></path></svg></span></div></div><div style=\\"margin-top:20px\\">点击计数器:<!-- -->0</div></div>"`;

Expand Down

0 comments on commit db6b79c

Please sign in to comment.