import React, { CSSProperties, FunctionComponent } from 'react' import { View } from 'react-native'; import { useConfig } from '../configprovider'; import gridStyles from './styles'; export type GridDirection = 'horizontal' | 'vertical' export interface GridProps { columnNum: string | number border: boolean gutter: string | number center: boolean square: boolean reverse: boolean direction: GridDirection className?: string iconSize?: string | number iconColor?: string style?: CSSProperties, onPress: () => void } const defaultProps = { columnNum: 4, border: true, gutter: 0, center: true, square: false, reverse: false, direction: 'vertical', iconSize: 28, iconColor: '', } as GridProps export const Grid: FunctionComponent< Partial & React.HTMLAttributes > = (props) => { const { children, columnNum, border, gutter, center, square, reverse, direction, style, iconSize, iconColor, className, ...rest } = { ...defaultProps, ...props } const { theme } = useConfig(); const mStyles = gridStyles(theme); const childrenDom = React.Children.toArray(children) const pxCheck = (value: string | number): number => { let getValue: any = value if (Number.isNaN(Number(value)) || typeof value === 'string') { getValue = parseInt(String(value)) } if (!getValue || getValue == '') { getValue = 0 } return getValue } const rootStyle = () => { let styleSelf: CSSProperties = {} if (style) { styleSelf = style } if (gutter) { styleSelf.paddingLeft = pxCheck(gutter) } return styleSelf } return ( {childrenDom.map((item: any, idex: number) => { return React.cloneElement(item, { index: idex, columnNum, center, border, gutter, square, reverse, direction, parentIconSize: iconSize, parentIconColor: iconColor }) })} ) } Grid.defaultProps = defaultProps Grid.displayName = 'NutGrid'