DocsCloud UI HooksuseFileDialog

useFileDialog

Open file dialog without a file input element.

Import

import { useFileDialog } from '@tidbcloud/uikit'

Usage

useFileDialog allows capturing one or more files from the user without a file input element.

import { useFileDialog } from '@tidbcloud/uikit'
import { Button, Text, Stack } from '@tidbcloud/uikit'
 
function Demo() {
  const { files, open, reset } = useFileDialog({
    multiple: true,
    accept: 'image/*'
  })
 
  return (
    <Stack>
      <Button onClick={open}>Select images</Button>
      <Button onClick={reset} variant="outline">
        Reset
      </Button>
 
      {files && (
        <div>
          <Text>Selected files:</Text>
          {Array.from(files).map((file) => (
            <Text key={file.name} size="sm">
              {file.name}
            </Text>
          ))}
        </div>
      )}
    </Stack>
  )
}

Options

import { useFileDialog } from '@tidbcloud/uikit'
 
const { files, open, reset } = useFileDialog({
  multiple: true, // Allow multiple files
  accept: '.pdf,.doc', // Accepted file types
  directory: false, // Allow directory selection
  resetOnOpen: false, // Reset state when dialog opens
  initialFiles: null, // Initial selected files
  onChange: (files) => {}, // Called when files are selected
  onCancel: () => {} // Called when dialog is canceled
})

Definition

interface UseFileDialogOptions {
  multiple?: boolean
  accept?: string
  capture?: string
  directory?: boolean
  resetOnOpen?: boolean
  initialFiles?: FileList | File[]
  onChange?: (files: FileList | null) => void
  onCancel?: () => void
}
 
interface UseFileDialogReturnValue {
  files: FileList | null
  open: () => void
  reset: () => void
}
 
function useFileDialog(input?: UseFileDialogOptions): UseFileDialogReturnValue