Skip to main content

ListContainer

Enhanced FlatList with loading states and skeleton placeholders.

Basic Usage

import { ListContainer } from '@multinaire/ui';

<ListContainer
data={items}
renderItem={({ item }) => <ItemCard data={item} />}
/>

Props

PropTypeDefaultDescription
dataT[]Array of items to render
renderItem({ item }) => ReactElementRender function for each item
isLoadingbooleanfalseShow loading skeleton items in place of content
itemHeightnumberEstimated item height in pixels, used for loading skeletons
itemCountnumber5Number of skeleton items to show while loading
flexnumberFlex grow value
marginSpacingPropsOuter margin
paddingSpacingPropsInner padding
gapnumberGap between items in pixels

All React Native FlatList props are also supported.

Examples

Basic List

<ListContainer
data={users}
renderItem={({ item }) => (
<UserCard user={item} onPress={() => viewUser(item.id)} />
)}
keyExtractor={(item) => item.id}
/>

With Loading State

<ListContainer
data={products}
renderItem={({ item }) => <ProductCard product={item} />}
isLoading={isLoading}
itemHeight={80}
itemCount={6}
/>

With Gap and Padding

<ListContainer
data={posts}
renderItem={({ item }) => <PostCard post={item} />}
padding={16}
gap={12}
/>

Horizontal List

<ListContainer
horizontal
data={categories}
renderItem={({ item }) => <CategoryChip category={item} />}
padding={{ horizontal: 16 }}
gap={8}
showsHorizontalScrollIndicator={false}
/>

With Pull to Refresh

<ListContainer
data={items}
renderItem={({ item }) => <Item data={item} />}
refreshControl={
<RefreshControl refreshing={refreshing} onRefresh={onRefresh} />
}
/>

With Empty State

<ListContainer
data={items}
renderItem={({ item }) => <Item data={item} />}
ListEmptyComponent={
<Container flex={1} justifyContent="center" alignItems="center">
<Typography color="neutral">No items found</Typography>
</Container>
}
/>