ant-design/components/space/Item.tsx
2023-06-05 13:29:55 +08:00

60 lines
1.3 KiB
TypeScript

import * as React from 'react';
import { SpaceContext } from './context';
export interface ItemProps {
className: string;
children: React.ReactNode;
index: number;
direction?: 'horizontal' | 'vertical';
marginDirection: 'marginLeft' | 'marginRight';
split?: React.ReactNode;
wrap?: boolean;
style?: React.CSSProperties;
}
export default function Item({
className,
direction,
index,
marginDirection,
children,
split,
wrap,
style: customStyle,
}: ItemProps) {
const { horizontalSize, verticalSize, latestIndex, supportFlexGap } =
React.useContext(SpaceContext);
let style: React.CSSProperties = {};
if (!supportFlexGap) {
if (direction === 'vertical') {
if (index < latestIndex) {
style = { marginBottom: horizontalSize / (split ? 2 : 1) };
}
} else {
style = {
...(index < latestIndex && { [marginDirection]: horizontalSize / (split ? 2 : 1) }),
...(wrap && { paddingBottom: verticalSize }),
};
}
}
if (children === null || children === undefined) {
return null;
}
return (
<>
<div className={className} style={{ ...style, ...customStyle }}>
{children}
</div>
{index < latestIndex && split && (
<span className={`${className}-split`} style={style}>
{split}
</span>
)}
</>
);
}