Skip to content

Commit e288520

Browse files
Update FileTrigger directory prop name and docs (#5512)
* Update FileTrigger directory prop name and docs * update test * fix lint * update docs example and add blurb about varying support * update var name --------- Co-authored-by: Robert Snow <rsnow@adobe.com>
1 parent f390e57 commit e288520

File tree

4 files changed

+54
-18
lines changed

4 files changed

+54
-18
lines changed

packages/react-aria-components/docs/FileTrigger.mdx

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,35 @@ A file trigger can accept multiple files by passsing the `allowsMultiple` proper
122122

123123
## Directory selection
124124

125-
To enable selecting directories instead of files, use the `directory` property.
125+
To enable selecting directories instead of files, use the `acceptDirectory` property.
126+
127+
This reflects the [webkitdirectory](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory) HTML attribute and allows users to select directories and their contents. Please note that support for this feature varies from browser to browser.
126128

127-
This reflects the [webkitdirectory](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory) HTML attribute and allows users to select directories and their contents.
128129

129130
```tsx example
130-
<FileTrigger directory>
131-
<Button>Select a directory</Button>
132-
</FileTrigger>
131+
function Example () {
132+
let [files, setFiles] = React.useState([]);
133+
134+
return (
135+
<>
136+
<FileTrigger
137+
acceptDirectory
138+
onSelect={(e) => {
139+
if (e) {
140+
let fileList = [...e].map(file => file.webkitRelativePath !== "" ? file.webkitRelativePath : file.name);
141+
setFiles(fileList);
142+
}
143+
}} >
144+
<Button>Upload</Button>
145+
</FileTrigger>
146+
{files && <ul>
147+
{files.map((file, index) => (
148+
<li key={index}>{file}</li>
149+
))}
150+
</ul>}
151+
</>
152+
);
153+
}
133154
```
134155

135156
## Media capture

packages/react-aria-components/src/FileTrigger.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ export interface FileTriggerProps {
3939
/**
4040
* Enables the selection of directories instead of individual files.
4141
*/
42-
directory?: boolean
42+
acceptDirectory?: boolean
4343
}
4444

4545
function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement>) {
46-
let {onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, children, directory, ...rest} = props;
46+
let {onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, children, acceptDirectory, ...rest} = props;
4747
let inputRef = useObjectRef(ref);
4848
let domProps = filterDOMProps(rest);
4949

@@ -68,7 +68,7 @@ function FileTrigger(props: FileTriggerProps, ref: ForwardedRef<HTMLInputElement
6868
capture={defaultCamera}
6969
multiple={allowsMultiple}
7070
// @ts-expect-error
71-
webkitdirectory={directory ? '' : undefined} />
71+
webkitdirectory={acceptDirectory ? '' : undefined} />
7272
</>
7373
);
7474
}

packages/react-aria-components/stories/index.stories.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,15 +1036,30 @@ export const FileTriggerButton = (props) => (
10361036
</FileTrigger>
10371037
);
10381038

1039-
export const FileTriggerDirectories = (props) => (
1040-
<FileTrigger
1041-
directory
1042-
onSelect={action('onSelect')}
1043-
data-testid="filetrigger-example"
1044-
{...props} >
1045-
<Button>Upload</Button>
1046-
</FileTrigger>
1047-
);
1039+
export const FileTriggerDirectories = (props) => {
1040+
let [files, setFiles] = React.useState<string[]>([]);
1041+
1042+
return (
1043+
<>
1044+
<FileTrigger
1045+
{...props}
1046+
acceptDirectory
1047+
onSelect={(e) => {
1048+
if (e) {
1049+
let fileList = [...e].map(file => file.webkitRelativePath !== '' ? file.webkitRelativePath : file.name);
1050+
setFiles(fileList);
1051+
}
1052+
}} >
1053+
<Button>Upload</Button>
1054+
</FileTrigger>
1055+
{files && <ul>
1056+
{files.map((file, index) => (
1057+
<li key={index}>{file}</li>
1058+
))}
1059+
</ul>}
1060+
</>
1061+
);
1062+
};
10481063

10491064
export const FileTriggerLinkAllowsMultiple = (props) => (
10501065
<FileTrigger

packages/react-aria-components/test/FileTrigger.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ describe('FileTrigger', () => {
9191

9292
it('should allow directory uploads when directory is true', () => {
9393
render(
94-
<FileTrigger directory>
94+
<FileTrigger acceptDirectory>
9595
<Button>Upload Directory</Button>
9696
</FileTrigger>
9797
);

0 commit comments

Comments
 (0)