import React, { memo, forwardRef } from 'react'; import { View } from 'react-native'; import { usePropsResolution } from '../../../hooks/useThemeProps'; import { getColor } from '../../../theme'; import { useTheme } from '../../../hooks'; import { makeStyledComponent } from '../../../utils/styled'; import { wrapStringChild } from '../../../utils/wrapStringChild'; import type { IBoxProps, InterfaceBoxProps } from './types'; import { useSafeArea } from '../../../hooks/useSafeArea'; import { useNativeBaseConfig } from '../../../core/NativeBaseContext'; import { useHasResponsiveProps } from '../../../hooks/useHasResponsiveProps'; const StyledBox = makeStyledComponent(View); let MemoizedGradient: any; const Box = ({ children, ...props }: IBoxProps, ref: any) => { // const { _text, ...resolvedProps } = useThemeProps('Box', props); const theme = useTheme(); const { _text, ...resolvedProps } = usePropsResolution('Box', props); let Gradient = useNativeBaseConfig('NativeBaseConfigProvider').config .dependencies?.['linear-gradient']; const safeAreaProps = useSafeArea(resolvedProps); //TODO: refactor for responsive prop if (useHasResponsiveProps(props)) { return null; } if ( resolvedProps.bg?.linearGradient || resolvedProps.background?.linearGradient || resolvedProps.bgColor?.linearGradient || resolvedProps.backgroundColor?.linearGradient ) { const lgrad = resolvedProps.bg?.linearGradient || resolvedProps.background?.linearGradient || resolvedProps.bgColor?.linearGradient || resolvedProps.backgroundColor?.linearGradient; if (Gradient) { if (!MemoizedGradient) { MemoizedGradient = makeStyledComponent(Gradient); } Gradient = MemoizedGradient; lgrad.colors = lgrad.colors?.map((color: string) => { return getColor(color, theme.colors, theme); }); let startObj = { x: 0, y: 0 }; let endObj = { x: 0, y: 1 }; if (lgrad.start && lgrad.start.length === 2) { startObj = { x: lgrad.start[0], y: lgrad.start[1], }; } if (lgrad.end && lgrad.end.length === 2) { endObj = { x: lgrad.end[0], y: lgrad.end[1], }; } const backgroundColorProps = [ 'bg', 'bgColor', 'background', 'backgroundColor', ]; backgroundColorProps.forEach((backgroundColorProp) => { if (backgroundColorProp in safeAreaProps) delete safeAreaProps[backgroundColorProp]; }); return ( {/* {React.Children.map(children, (child) => typeof child === 'string' || typeof child === 'number' ? ( {child} ) : ( child ) )} */} {wrapStringChild(children, _text)} ); } } return ( {/* {React.Children.map(children, (child) => { return typeof child === 'string' || typeof child === 'number' || (child?.type === React.Fragment && (typeof child.props?.children === 'string' || typeof child.props?.children === 'number')) ? ( {child} ) : ( child ); })} */} {wrapStringChild(children, _text)} ); }; export type { IBoxProps, InterfaceBoxProps }; export default memo(forwardRef(Box));