import React from 'react';
import { StyleProp, View, ViewProps, ViewStyle } from 'react-native';
import { isFunction } from '@sendbird/uikit-utils';
import useUIKitTheme from '../../theme/useUIKitTheme';
import type { UIKitColors, UIKitPalette } from '../../types';
type DeprecatedBoxProps = {
/** @deprecated Please use `paddingStart` instead **/
paddingLeft?: ViewStyle['paddingLeft'];
/** @deprecated Please use `paddingEnd` instead **/
paddingRight?: ViewStyle['paddingRight'];
/** @deprecated Please use `marginStart` instead **/
marginLeft?: ViewStyle['marginLeft'];
/** @deprecated Please use `marginEnd` instead **/
marginRight?: ViewStyle['marginRight'];
};
type BaseBoxProps = Pick<
ViewStyle,
| 'flex'
| 'flexShrink'
| 'flexGrow'
| 'flexDirection'
| 'alignItems'
| 'justifyContent'
| 'borderRadius'
| 'borderWidth'
| 'borderColor'
| 'borderBottomColor'
| 'borderBottomWidth'
| 'margin'
| 'marginHorizontal'
| 'marginVertical'
| 'marginStart'
| 'marginEnd'
| 'marginTop'
| 'marginBottom'
| 'padding'
| 'paddingHorizontal'
| 'paddingVertical'
| 'paddingStart'
| 'paddingEnd'
| 'paddingTop'
| 'paddingBottom'
| 'overflow'
| 'width'
| 'height'
> & {
backgroundColor?: string | ((theme: { colors: UIKitColors; palette: UIKitPalette }) => string);
};
type BoxProps = BaseBoxProps & DeprecatedBoxProps & ViewProps;
const Box = ({ style, children, ...props }: BoxProps) => {
const boxStyle = useBoxStyle(props);
return (
{children}
);
};
const useBoxStyle = (props: BaseBoxProps): StyleProp => {
const theme = useUIKitTheme();
const { backgroundColor, ...rest } = props;
return {
backgroundColor: isFunction(backgroundColor) ? backgroundColor(theme) : backgroundColor,
...rest,
};
};
export default Box;