Skip to content

FileList

FileList renders all files in the upload queue in list or grid layout, reading file state from UploadProvider context. Pass a render function as children to use a custom item renderer; otherwise it renders FileItem.Content per file.

sample-video.mp4
sample-video.mp4
50.0 MB
sample-video.mp4
sample-video.mp4
50.0 MBProcessing...
sample-video.mp4
50.0 MB
sample-video.mp4
sample-video.mp4
50.0 MB
Upload failed. Check your connection.
import { FileList } from "@hyperserve/video-uploader-react";
<FileList />
No files selected yet.
<FileList emptyMessage="No files selected yet." />
sample-video.mp4
sample-video.mp4
50.0 MB
sample-video.mp4
sample-video.mp4
50.0 MBProcessing...
sample-video.mp4
50.0 MB
sample-video.mp4
sample-video.mp4
50.0 MB
Upload failed. Check your connection.
<FileList mode="grid" columns="repeat(3, 1fr)" />
PropTypeDefaultDescription
mode"list" | "grid"From ViewModeProvider or "list"Layout mode
columnsstring"repeat(auto-fill, minmax(180px, 1fr))"CSS grid-template-columns for grid mode
emptyMessageReactNodenoneShown when no files
emptyClassNamestringnoneClass for empty state container
emptyStyleCSSPropertiesnoneStyles for empty state container
renderEmpty() => ReactNodenoneCustom empty state renderer (overrides emptyMessage)
children(file, index) => ReactNodenoneCustom item renderer
styleCSSPropertiesnoneContainer styles
classNamestringnoneContainer class
stylesFileListStylesnoneSlot map applied to internal elements (see Slots below)

When children is omitted, FileList renders a default FileItem per file. Provide a render function for custom items:

sample-video.mp4sample-video.mp4
sample-video.mp4sample-video.mp4
sample-video.mp4
sample-video.mp4sample-video.mp4
<FileList>
{(file, index) => (
<FileItem key={file.id} file={file} layout="column">
<Thumbnail file={file} playback />
<FileItem.FileName />
<FileItem.UploadProgress />
<FileItem.Actions>
<FileItem.RemoveButton />
<FileItem.RetryButton />
</FileItem.Actions>
</FileItem>
)}
</FileList>

FileList reads the view mode from ViewModeProvider context when available. The mode prop always takes precedence over context. Without either, it defaults to "list".

Pass a styles slot map to theme internal elements. Slots merge over defaults; local style/emptyStyle props win over slots. See Theming for the canonical merge-order explanation.

SlotTargets
rootThe outer list/grid container
emptyThe empty-state container

The React Native FileList exposes the same slots plus an emptyText slot for the inner <Text> of the empty state, which web doesn’t need (it accepts a ReactNode for emptyMessage).

<FileList
styles={{
root: { gap: 12 },
empty: { background: "#f8fafc", padding: 24 },
}}
emptyMessage="No files selected yet."
/>