import React, { useMemo } from "react"; import { GetProps, ScrollView, View, ViewStyle } from "tamagui"; type GridItem = { key: string }; type GridViewProps = GetProps & { data?: T[] | null; renderItem: (item: T, index: number) => React.ReactNode; columns: { xs?: number; sm?: number; md?: number; lg?: number; xl?: number; }; }; const GridView = ({ data, renderItem, columns, gap, ...props }: GridViewProps) => { const basisProps = useMemo(() => { const basis: ViewStyle = { flexBasis: "100%" }; if (columns.xs) basis.flexBasis = `${100 / columns.xs}%`; if (columns.sm) basis.$gtXs = { flexBasis: `${100 / columns.sm}%` }; if (columns.md) basis.$gtSm = { flexBasis: `${100 / columns.md}%` }; if (columns.lg) basis.$gtMd = { flexBasis: `${100 / columns.lg}%` }; if (columns.xl) basis.$gtLg = { flexBasis: `${100 / columns.xl}%` }; return basis; }, [columns]); return ( {data?.map((item, idx) => ( {renderItem(item, idx)} ))} ); }; export default GridView;