From d6b35ce0f91846ff5eb02165b628e77cc9a282df Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Mon, 7 Feb 2022 09:53:33 +0800
Subject: [PATCH 01/10] feat(useFileDialog): new function
---
README.md | 2 +-
packages/core/index.ts | 1 +
packages/core/useFileDialog/demo.vue | 12 +++++++
packages/core/useFileDialog/index.md | 21 +++++++++++++
packages/core/useFileDialog/index.ts | 47 ++++++++++++++++++++++++++++
5 files changed, 82 insertions(+), 1 deletion(-)
create mode 100644 packages/core/useFileDialog/demo.vue
create mode 100644 packages/core/useFileDialog/index.md
create mode 100644 packages/core/useFileDialog/index.ts
diff --git a/README.md b/README.md
index 9fbdfe76056..bd05d7d0ef5 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Collection of essential Vue Composition Utilities
-
+
diff --git a/packages/core/index.ts b/packages/core/index.ts
index d84f63e9270..3cb71f1d0c6 100644
--- a/packages/core/index.ts
+++ b/packages/core/index.ts
@@ -41,6 +41,7 @@ export * from './useEventSource'
export * from './useEyeDropper'
export * from './useFavicon'
export * from './useFetch'
+export * from './useFileDialog'
export * from './useFocus'
export * from './useFocusWithin'
export * from './useFps'
diff --git a/packages/core/useFileDialog/demo.vue b/packages/core/useFileDialog/demo.vue
new file mode 100644
index 00000000000..f0a0d51fb4e
--- /dev/null
+++ b/packages/core/useFileDialog/demo.vue
@@ -0,0 +1,12 @@
+
+
+
+ You have selected: {{ files ? files.length : 0 }} files
+
+
diff --git a/packages/core/useFileDialog/index.md b/packages/core/useFileDialog/index.md
new file mode 100644
index 00000000000..f3c42f37d8e
--- /dev/null
+++ b/packages/core/useFileDialog/index.md
@@ -0,0 +1,21 @@
+---
+category: Browser
+---
+
+# useFileDialog
+
+Open file dialog with ease.
+
+## Usage
+
+```ts
+import { useFileDialog } from '@vueuse/core'
+
+const { files, openFileDialog } = useDialog()
+```
+
+```html
+
+
+
+```
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
new file mode 100644
index 00000000000..44b126499df
--- /dev/null
+++ b/packages/core/useFileDialog/index.ts
@@ -0,0 +1,47 @@
+import { readonly, ref } from 'vue-demi'
+
+export interface Options {
+ multiple?: boolean
+ accept?: string
+}
+
+const DEFAULT_OPTIONS: Options = {
+ multiple: true,
+ accept: '*',
+}
+
+/**
+ * Open file dialog with ease.
+ *
+ * @see https://vueuse.org/useFileDialog
+ * @param options
+ */
+export function useFileDialog(options?: Partial) {
+ const files = ref(null)
+
+ const openFileDialog = (localOptions?: Partial) => {
+ const _options: Options = {
+ ...DEFAULT_OPTIONS,
+ ...options,
+ ...localOptions,
+ }
+ const input = document.createElement('input')
+ input.type = 'file'
+ input.multiple = _options.multiple!
+ input.accept = _options.accept!
+
+ input.onchange = (event: Event) => {
+ const result = event.target as HTMLInputElement
+ files.value = result.files
+ }
+
+ input.click()
+ }
+
+ return {
+ files: readonly(files),
+ openFileDialog,
+ }
+}
+
+export type UseFileDialogReturn = ReturnType
From 6af3a84d9fce1e121471988718f502f0251e0350 Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Tue, 8 Feb 2022 22:12:25 +0800
Subject: [PATCH 02/10] Update packages/core/useFileDialog/index.ts
Co-authored-by: Anthony Fu
---
packages/core/useFileDialog/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 44b126499df..a0d7ab41876 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -1,6 +1,6 @@
import { readonly, ref } from 'vue-demi'
-export interface Options {
+export interface UseFileDialogOptions {
multiple?: boolean
accept?: string
}
From ecaebd239cf5df1f1712a1d591c7aa82e1075969 Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Tue, 8 Feb 2022 22:12:34 +0800
Subject: [PATCH 03/10] Update packages/core/useFileDialog/index.ts
Co-authored-by: Anthony Fu
---
packages/core/useFileDialog/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index a0d7ab41876..11a5b043396 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -40,7 +40,7 @@ export function useFileDialog(options?: Partial) {
return {
files: readonly(files),
- openFileDialog,
+ open,
}
}
From d0f8e5d4afbeccb87f24db9217331c4bec2ea378 Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Wed, 9 Feb 2022 08:07:33 +0800
Subject: [PATCH 04/10] feat: add reset function
---
packages/core/useFileDialog/index.ts | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 11a5b043396..3bb693432be 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -5,7 +5,7 @@ export interface UseFileDialogOptions {
accept?: string
}
-const DEFAULT_OPTIONS: Options = {
+const DEFAULT_OPTIONS: UseFileDialogOptions = {
multiple: true,
accept: '*',
}
@@ -16,11 +16,11 @@ const DEFAULT_OPTIONS: Options = {
* @see https://vueuse.org/useFileDialog
* @param options
*/
-export function useFileDialog(options?: Partial) {
+export function useFileDialog(options?: Partial) {
const files = ref(null)
- const openFileDialog = (localOptions?: Partial) => {
- const _options: Options = {
+ const open = (localOptions?: Partial) => {
+ const _options = {
...DEFAULT_OPTIONS,
...options,
...localOptions,
@@ -38,9 +38,14 @@ export function useFileDialog(options?: Partial) {
input.click()
}
+ const reset = () => {
+ files.value = null
+ }
+
return {
files: readonly(files),
open,
+ reset,
}
}
From e989f28c63d14230a192a7e2763564e359dbf2a1 Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Wed, 9 Feb 2022 21:48:15 +0800
Subject: [PATCH 05/10] fix: update demo imports
---
packages/core/useFileDialog/demo.vue | 4 ++--
packages/core/useFileDialog/index.md | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/core/useFileDialog/demo.vue b/packages/core/useFileDialog/demo.vue
index f0a0d51fb4e..57ce4bac6f7 100644
--- a/packages/core/useFileDialog/demo.vue
+++ b/packages/core/useFileDialog/demo.vue
@@ -1,12 +1,12 @@
You have selected: {{ files ? files.length : 0 }} files
-
diff --git a/packages/core/useFileDialog/index.md b/packages/core/useFileDialog/index.md
index f3c42f37d8e..904885ac3d4 100644
--- a/packages/core/useFileDialog/index.md
+++ b/packages/core/useFileDialog/index.md
@@ -11,11 +11,11 @@ Open file dialog with ease.
```ts
import { useFileDialog } from '@vueuse/core'
-const { files, openFileDialog } = useDialog()
+const { files, open, reset } = useDialog()
```
```html
- Choose file
+ Choose file
```
From 54ab6be8af92d54b3a0176995fb0a13abcef5b7e Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Wed, 9 Feb 2022 21:49:51 +0800
Subject: [PATCH 06/10] move input create element outside open function
---
packages/core/useFileDialog/index.ts | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 3bb693432be..a6ebde2a683 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -19,22 +19,23 @@ const DEFAULT_OPTIONS: UseFileDialogOptions = {
export function useFileDialog(options?: Partial) {
const files = ref(null)
+ const input = document.createElement('input')
+ input.type = 'file'
+
+ input.onchange = (event: Event) => {
+ const result = event.target as HTMLInputElement
+ files.value = result.files
+ }
+
const open = (localOptions?: Partial) => {
const _options = {
...DEFAULT_OPTIONS,
...options,
...localOptions,
}
- const input = document.createElement('input')
- input.type = 'file'
input.multiple = _options.multiple!
input.accept = _options.accept!
- input.onchange = (event: Event) => {
- const result = event.target as HTMLInputElement
- files.value = result.files
- }
-
input.click()
}
From 7320ce751b76399919d682aae66a30218dd6d500 Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Thu, 10 Feb 2022 08:59:17 +0800
Subject: [PATCH 07/10] feat: add capture option to useFileDialog
---
packages/core/useFileDialog/index.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index a6ebde2a683..66fd3933e8f 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -3,6 +3,7 @@ import { readonly, ref } from 'vue-demi'
export interface UseFileDialogOptions {
multiple?: boolean
accept?: string
+ capture?: 'user' | 'environment'
}
const DEFAULT_OPTIONS: UseFileDialogOptions = {
@@ -35,6 +36,7 @@ export function useFileDialog(options?: Partial) {
}
input.multiple = _options.multiple!
input.accept = _options.accept!
+ input.capture = _options.capture!
input.click()
}
From d3cdc3880f87523ca36592da53caae1a7b2ca47e Mon Sep 17 00:00:00 2001
From: Robert Soriano
Date: Thu, 10 Feb 2022 09:00:29 +0800
Subject: [PATCH 08/10] add docs to capture option
---
packages/core/useFileDialog/index.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 66fd3933e8f..0c0dfc94ecb 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -3,6 +3,10 @@ import { readonly, ref } from 'vue-demi'
export interface UseFileDialogOptions {
multiple?: boolean
accept?: string
+ /**
+ * Select the input source for the capture file.
+ * @see [HTMLInputElement Capture](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
+ */
capture?: 'user' | 'environment'
}
From 3a79223369e65a4fcca5d5f0ec3ab42072b88554 Mon Sep 17 00:00:00 2001
From: Jelf <353742991@qq.com>
Date: Thu, 10 Feb 2022 09:45:32 +0800
Subject: [PATCH 09/10] chore: types
`capture` has more optional values
---
packages/core/useFileDialog/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 0c0dfc94ecb..8d80df9d50b 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -7,7 +7,7 @@ export interface UseFileDialogOptions {
* Select the input source for the capture file.
* @see [HTMLInputElement Capture](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
*/
- capture?: 'user' | 'environment'
+ capture?: string
}
const DEFAULT_OPTIONS: UseFileDialogOptions = {
From 58da66e2b1aebc18c7337ff8e63f60d831edf20d Mon Sep 17 00:00:00 2001
From: Anthony Fu
Date: Thu, 7 Jul 2022 02:31:07 +0800
Subject: [PATCH 10/10] chore: update
---
packages/contributors.json | 2 +-
packages/core/useFileDialog/demo.vue | 16 ++++++++++++----
packages/core/useFileDialog/index.ts | 6 ++++++
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/packages/contributors.json b/packages/contributors.json
index 8f52dc7c89f..8ac4f296d0e 100644
--- a/packages/contributors.json
+++ b/packages/contributors.json
@@ -49,6 +49,7 @@
"danielroe",
"darrylnoakes",
"dblazhkun",
+ "dfreier",
"echoeureka",
"Flamenco",
"husayt",
@@ -115,7 +116,6 @@
"damienroche",
"danmindru",
"DesselBane",
- "dfreier",
"eggsy",
"posva",
"Maiquu",
diff --git a/packages/core/useFileDialog/demo.vue b/packages/core/useFileDialog/demo.vue
index 57ce4bac6f7..4f18756eb47 100644
--- a/packages/core/useFileDialog/demo.vue
+++ b/packages/core/useFileDialog/demo.vue
@@ -1,12 +1,20 @@
- You have selected: {{ files ? files.length : 0 }} files
-
- Choose file
+
+ Choose files
+
+ Reset
+
+
+ You have selected: {{ files.length }} files
+
+ {{ file.name }}
+
+
diff --git a/packages/core/useFileDialog/index.ts b/packages/core/useFileDialog/index.ts
index 8d80df9d50b..ffd6a0df304 100644
--- a/packages/core/useFileDialog/index.ts
+++ b/packages/core/useFileDialog/index.ts
@@ -1,7 +1,13 @@
import { readonly, ref } from 'vue-demi'
export interface UseFileDialogOptions {
+ /**
+ * @default true
+ */
multiple?: boolean
+ /**
+ * @default '*'
+ */
accept?: string
/**
* Select the input source for the capture file.