/** * @file 用来展示面包屑导航 */ import React from 'react'; import {Renderer, RendererProps} from '../factory'; import {BaseSchema, SchemaIcon, SchemaUrlPath} from '../Schema'; import {generateIcon} from '../utils/icon'; import {filter} from '../utils/tpl'; import {resolveVariable, resolveVariableAndFilter} from '../utils/tpl-builtin'; export type BreadcrumbItemSchema = { /** * 文字 */ label?: string; /** * 图标类名 */ icon?: SchemaIcon; /** * 链接地址 */ href?: SchemaUrlPath; } & Omit; /** * Breadcrumb 显示渲染器 * 文档:https://baidu.gitee.io/amis/docs/components/breadcrumb */ export interface BreadcrumbSchema extends BaseSchema { /** * 指定为面包屑显示控件 */ type: 'breadcrumb'; /** * 分隔符 */ separator?: string; /** * 分隔符类 */ separatorClassName?: string; /** * 列表 */ items: Array; } export interface BreadcrumbProps extends RendererProps, Omit {} export class BreadcrumbField extends React.Component { static defaultProps = { className: '', itemClassName: '', separator: '/' }; render() { const { className, itemClassName, separatorClassName, classnames: cx, items, source, data, separator, render } = this.props; const crumbItems = items ? items : (resolveVariable(source, data) as Array); const crumbs = crumbItems .map((item, index) => ( {item.icon ? generateIcon(cx, item.icon, 'Icon', 'Breadcrumb-icon') : null} {item.href ? ( {filter(item.label, data)} ) : ( render('label', filter(item.label, data)) )} )) .reduce((prev, curr, index) => [ prev, {separator} , curr ]); return
{crumbs}
; } } @Renderer({ type: 'breadcrumb', name: 'breadcrumb' }) export class BreadcrumbFieldRenderer extends BreadcrumbField {}