docs(file-uploader): improve FileUploader documentation (#1126)

- add `FileUploader` "Clear files" example
- document `validateFiles` prop for `FileUploaderDropContainer`
- add descriptions for `FileUploaderButton`, `FileUploader` examples
This commit is contained in:
metonym 2022-02-21 14:26:02 -08:00 committed by GitHub
commit 44d848c60d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 70 additions and 2 deletions

View file

@ -3,18 +3,39 @@ components: ["FileUploaderButton", "FileUploader", "FileUploaderDropContainer",
--- ---
<script> <script>
import { FileUploaderButton, FileUploader, FileUploaderDropContainer, FileUploaderItem, FileUploaderSkeleton } from "carbon-components-svelte"; import { FileUploaderButton, FileUploader, FileUploaderDropContainer, FileUploaderItem, FileUploaderSkeleton, UnorderedList, ListItem } from "carbon-components-svelte";
import Preview from "../../components/Preview.svelte"; import Preview from "../../components/Preview.svelte";
</script> </script>
### File uploader (button-only) ### File uploader (button-only)
By default, the file uploader only accepts one file.
Set `multiple` to `true` for multiple files to be uploaded.
<FileUploaderButton labelText="Add files" /> <FileUploaderButton labelText="Add files" />
### File uploader ### File uploader
The `FileUploader` wraps `FileUploaderButton` and lists out uploaded files.
The example below accepts multiple files with an extension of `.jpg` or `.jpeg`. It sets the status to `"complete"`; by default, the status is `"loading"`.
See the [item examples below](#item-uploading) for different statuses.
<FileUploader multiple labelTitle="Upload files" buttonLabel="Add files" labelDescription="Only JPEG files are accepted." accept="{['.jpg', '.jpeg']}" status="complete" /> <FileUploader multiple labelTitle="Upload files" buttonLabel="Add files" labelDescription="Only JPEG files are accepted." accept="{['.jpg', '.jpeg']}" status="complete" />
### Clear files
There are two ways to clear files in `FileUploader`:
<UnorderedList svx-ignore style="margin-bottom: var(--cds-spacing-08)">
<ListItem>programmatically using the <strong>clearFiles</strong> accessor</ListItem>
<ListItem>two-way binding by setting <strong>files</strong> to <strong>[]</strong></ListItem>
</UnorderedList>
<FileSource src="/framed/FileUploader/FileUploaderClearFiles" />
### File uploader (disabled state) ### File uploader (disabled state)
<FileUploader disabled multiple labelTitle="Upload files" buttonLabel="Add files" labelDescription="Only JPEG files are accepted." accept="{['.jpg', '.jpeg']}" status="complete" /> <FileUploader disabled multiple labelTitle="Upload files" buttonLabel="Add files" labelDescription="Only JPEG files are accepted." accept="{['.jpg', '.jpeg']}" status="complete" />
@ -41,7 +62,22 @@ The default `FileUploaderItem` size is "default".
### Drop container ### Drop container
<FileUploaderDropContainer labelText="Drag and drop files here or click to upload" multiple /> The `FileUploaderDropContainer` accepts files through click and drop events.
Use the `validateFiles` prop to filter out files before they are set.
The following example accepts files smaller than 1 kB.
<FileUploaderDropContainer
multiple
labelText="Drag and drop files here or click to upload"
validateFiles={files => {
return files.filter(file => file.size < 1_024)
}}
on:change={e=> {
console.log("files", e.detail)
}}
/>
### Skeleton ### Skeleton

View file

@ -0,0 +1,32 @@
<script>
import { FileUploader, Button } from "carbon-components-svelte";
let fileUploader;
let files = [];
</script>
<FileUploader
bind:this="{fileUploader}"
multiple
labelTitle="Upload files"
buttonLabel="Add files"
status="complete"
bind:files
/>
<br />
<Button
kind="tertiary"
disabled="{!files.length}"
on:click="{fileUploader.clearFiles}"
>
Clear (programmatic)
</Button>
<Button
kind="tertiary"
disabled="{!files.length}"
on:click="{() => (files = [])}"
>
Clear (two-way binding)
</Button>