Browse Source

Cleanup a bit, fix typing

Mathieu Acthernoene 6 years ago
parent
commit
9b1eb6095a
1 changed files with 17 additions and 21 deletions
  1. 17
    21
      index.js

+ 17
- 21
index.js View File

@@ -5,6 +5,7 @@ import {
5 5
   NativeModules,
6 6
   PermissionsAndroid,
7 7
   Platform,
8
+  // $FlowFixMe
8 9
 } from "react-native";
9 10
 
10 11
 const { RNPermissions } = NativeModules;
@@ -68,10 +69,10 @@ export type NotificationOption =
68 69
   | "criticalAlert"
69 70
   | "provisional";
70 71
 
71
-export type RequestConfig = {|
72
+export type RequestConfig = {
72 73
   notificationOptions?: NotificationOption[],
73 74
   rationale?: Rationale,
74
-|};
75
+};
75 76
 
76 77
 const platformPermissions = Object.values(
77 78
   Platform.OS === "ios" ? IOS_PERMISSIONS : ANDROID_PERMISSIONS,
@@ -91,12 +92,12 @@ function assertValidPermission(permission: string) {
91 92
 function getUnavailablePermissions(permissions: string[]) {
92 93
   return Promise.all(
93 94
     permissions.map(p => RNPermissions.isPermissionAvailable(p)),
94
-  ).then(result =>
95
-    result.reduce(
96
-      (acc, isAvailable, i) =>
97
-        isAvailable ? acc : { ...acc, [permissions[i]]: RESULTS.UNAVAILABLE },
98
-      {},
99
-    ),
95
+  ).then(availabilities =>
96
+    availabilities.reduce((acc, available, i) => {
97
+      return !available
98
+        ? { ...acc, [permissions[i]]: RESULTS.UNAVAILABLE }
99
+        : acc;
100
+    }, {}),
100 101
   );
101 102
 }
102 103
 
@@ -104,14 +105,12 @@ const requestedKey = "@RNPermissions:requested";
104 105
 
105 106
 async function getRequestedPermissions() {
106 107
   const requested = await AsyncStorage.getItem(requestedKey);
107
-
108 108
   return requested ? JSON.parse(requested) : [];
109 109
 }
110 110
 
111 111
 async function setRequestedPermissions(permissions: string[]) {
112 112
   const requested = await getRequestedPermissions();
113 113
   const dedup = [...new Set([...requested, ...permissions])];
114
-
115 114
   return AsyncStorage.setItem(requestedKey, dedup);
116 115
 }
117 116
 
@@ -141,22 +140,20 @@ async function internalCheck(
141 140
 
142 141
 async function internalRequest(
143 142
   permission: string,
144
-  config: RequestConfig,
143
+  config: RequestConfig = {},
145 144
 ): Promise<PermissionStatus> {
146 145
   const { notificationOptions, rationale } = config;
147 146
 
148 147
   if (Platform.OS !== "android") {
149 148
     return RNPermissions.request(permission, { notificationOptions });
150 149
   }
150
+
151 151
   if (!(await RNPermissions.isPermissionAvailable(permission))) {
152 152
     return RESULTS.UNAVAILABLE;
153 153
   }
154 154
 
155 155
   const status = await PermissionsAndroid.request(permission, rationale);
156
-
157
-  // set permission as requested
158
-  await setRequestedPermissions([permission]);
159
-  return status;
156
+  return setRequestedPermissions([permission]).then(() => status);
160 157
 }
161 158
 
162 159
 async function internalCheckMultiple(
@@ -168,7 +165,9 @@ async function internalCheckMultiple(
168 165
 
169 166
   return Promise.all(available.map(p => internalCheck(p)))
170 167
     .then(statuses =>
171
-      statuses.reduce((acc, s, i) => ({ ...acc, [available[i]]: s }), {}),
168
+      statuses.reduce((acc, status, i) => {
169
+        return { ...acc, [available[i]]: status };
170
+      }, {}),
172 171
     )
173 172
     .then(statuses => ({ ...result, ...statuses }));
174 173
 }
@@ -181,8 +180,7 @@ async function internalRequestMultiple(
181 180
 
182 181
     for (let i = 0; i < permissions.length; i++) {
183 182
       const permission = permissions[i];
184
-      // avoid checking them all at once
185
-      result[permission] = await internalRequest(permission);
183
+      result[permission] = await internalRequest(permission); // once at the time
186 184
     }
187 185
 
188 186
     return result;
@@ -195,9 +193,7 @@ async function internalRequestMultiple(
195 193
     permissions.filter(p => !unavailable.includes(p)),
196 194
   ).then(statuses => ({ ...result, ...statuses }));
197 195
 
198
-  // set permissions as requested
199
-  await setRequestedPermissions(permissions);
200
-  return status;
196
+  return setRequestedPermissions(permissions).then(() => statuses);
201 197
 }
202 198
 
203 199
 export function openSettings(): Promise<boolean> {