vant/packages/panel/index.tsx

66 lines
1.4 KiB
TypeScript

import { createNamespace } from '../utils';
import Cell from '../cell';
import CellGroup from '../cell-group';
import { inherit } from '../utils/functional';
// Types
import { CreateElement, RenderContext } from 'vue/types';
import { ScopedSlot, DefaultSlots } from '../utils/types';
export type PanelProps = {
icon?: string;
desc?: string;
title?: string;
status?: string;
};
export type PanelSlots = DefaultSlots & {
header?: ScopedSlot;
footer?: ScopedSlot;
};
const [createComponent, bem] = createNamespace('panel');
function Panel(
h: CreateElement,
props: PanelProps,
slots: PanelSlots,
ctx: RenderContext<PanelProps>
) {
const Content = () => [
slots.header ? (
slots.header()
) : (
<Cell
icon={props.icon}
label={props.desc}
title={props.title}
value={props.status}
class={bem('header')}
valueClass={bem('header-value')}
/>
),
<div class={bem('content')}>{slots.default && slots.default()}</div>,
slots.footer && (
<div class={[bem('footer'), 'van-hairline--top']}>{slots.footer()}</div>
)
];
return (
<CellGroup
class={bem()}
scopedSlots={{ default: Content }}
{...inherit(ctx, true)}
/>
);
}
Panel.props = {
icon: String,
desc: String,
title: String,
status: String
};
export default createComponent<PanelProps>(Panel);