about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorJohn Fawcett <jrf0110@gmail.com>2023-03-19 17:38:53 -0500
committerGitHub <noreply@github.com>2023-03-19 17:38:53 -0500
commitdb6b198d18f9e92fc4ef2ea06e25141d2fba4eed (patch)
tree0d52e8d8c154e5cb4ffb64ad883360371c1fdecc /src/lib
parentea2b2583b84259c2c6ddb8c971ef30448d59b090 (diff)
downloadvoidsky-db6b198d18f9e92fc4ef2ea06e25141d2fba4eed.tar.zst
Fixes profile edit image selection not prompting users on web (#309) (#321)
* Fixes profile edit image selection not prompting users on web (#309)

* Fixes linting erros
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/hooks/usePermissions.ts7
-rw-r--r--src/lib/media/picker.web.tsx12
2 files changed, 19 insertions, 0 deletions
diff --git a/src/lib/hooks/usePermissions.ts b/src/lib/hooks/usePermissions.ts
index 36a92ac32..19a420d9e 100644
--- a/src/lib/hooks/usePermissions.ts
+++ b/src/lib/hooks/usePermissions.ts
@@ -2,6 +2,7 @@ import {Alert} from 'react-native'
 import {Camera} from 'expo-camera'
 import * as MediaLibrary from 'expo-media-library'
 import {Linking} from 'react-native'
+import {isWeb} from 'platform/detection'
 
 const openSettings = () => {
   Linking.openURL('app-settings:')
@@ -24,6 +25,12 @@ const openPermissionAlert = (perm: string) => {
 export function usePhotoLibraryPermission() {
   const [mediaLibraryPermissions] = MediaLibrary.usePermissions()
   const requestPhotoAccessIfNeeded = async () => {
+    // On the, we use <input type="file"> to produce a filepicker
+    // This does not need any permission granting.
+    if (isWeb) {
+      return true
+    }
+
     if (mediaLibraryPermissions?.status === 'granted') {
       return true
     } else {
diff --git a/src/lib/media/picker.web.tsx b/src/lib/media/picker.web.tsx
index 43675074e..158c37971 100644
--- a/src/lib/media/picker.web.tsx
+++ b/src/lib/media/picker.web.tsx
@@ -111,6 +111,18 @@ export async function cropAndCompressFlow(
 // helpers
 // =
 
+/**
+ * Opens the select file dialog in the browser.
+ * NOTE:
+ * If in the future someone updates this method to use:
+ * https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker
+ * Check that the `showOpenFilePicker` API does not require any permissions
+ * granted to use. As of this writing, it does not, but that could change
+ * in the future. If the user does need to go through a permissions granting
+ * flow, then checkout the usePhotoLibraryPermission() hook in
+ *   src/lib/hooks/usePermissions.ts
+ * so that it gets appropriately updated.
+ */
 function selectFile(opts: PickerOpts): Promise<PickedFile> {
   return new Promise((resolve, reject) => {
     var input = document.createElement('input')