import React, { FC, ReactNode, useContext } from 'react';
import classNames from 'classnames';
import Context from '../common/context';
import { BaseBgMode, BaseProps, LayoutContextProps, TypeMark } from '../types';
const CustomCnTag = (props) => {
const clsPrefix = `cn-layout-page-header`;
return (
{props?.children}
);
};
export interface CnLayoutHeaderProps extends BaseProps, BaseBgMode {
/**
* 头部标题
*/
title?: string;
/**
* 头像
*/
avatar?: { src: string };
/**
* 标签
*/
label?: string | string[];
/**
* 描述
*/
desc?: string;
/**
* 禁用底部 padding
*/
noBottomPadding?: boolean;
divider?: boolean;
fullWidth?: boolean;
children?: ReactNode;
}
export type IPageHeader = FC & TypeMark;
const PageHeader: IPageHeader = (props: CnLayoutHeaderProps) => {
const {
avatar,
title,
label,
desc,
className,
children,
mode,
noBottomPadding,
divider,
fullWidth,
...others
} = props;
const { prefix } = useContext(Context);
const clsPrefix = `${prefix}page-header`;
const headerCls = classNames(className, clsPrefix, {
[`${clsPrefix}--dividing`]: divider,
[`${clsPrefix}--fullwidth`]: fullWidth,
[`${prefix}bg--${mode}`]: !!mode,
});
/**
* 标签区域
*/
const renderTags = () => {
if (typeof label === 'string') {
return {label};
}
if (Array.isArray(label) && label?.length !== 0) {
return (
{label?.map((text) => {text})}
);
}
return null;
};
/**
* title 区域
*/
const renderTitle = () => {
return (
{(title || label) && (
{title &&
{title}
}
{renderTags()}
)}
{desc && (
)}
);
};
return (
{avatar && (
)}
{renderTitle()}
{children}
);
};
PageHeader.displayName = 'Header';
PageHeader.typeMark = 'Header';
PageHeader.defaultProps = {
noBottomPadding: false,
divider: false,
fullWidth: false,
mode: 'surface',
};
export default PageHeader;