@tarojs/taro-rn 3.3.5 → 3.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/lib/chooseImage/index.js +1 -0
  2. package/dist/lib/chooseImage/index.js.map +1 -1
  3. package/dist/lib/clearStorage/index.js +20 -13
  4. package/dist/lib/clearStorage/index.js.map +1 -1
  5. package/dist/lib/compressImage/index.js +29 -14
  6. package/dist/lib/compressImage/index.js.map +1 -1
  7. package/dist/lib/connectSocket/index.js +6 -6
  8. package/dist/lib/connectSocket/index.js.map +1 -1
  9. package/dist/lib/connectSocket/socketTask.js +8 -8
  10. package/dist/lib/connectSocket/socketTask.js.map +1 -1
  11. package/dist/lib/createCameraContext/index.js +53 -21
  12. package/dist/lib/createCameraContext/index.js.map +1 -1
  13. package/dist/lib/file.js +26 -42
  14. package/dist/lib/file.js.map +1 -1
  15. package/dist/lib/getClipboardData/index.js +2 -3
  16. package/dist/lib/getClipboardData/index.js.map +1 -1
  17. package/dist/lib/getLocation/index.js +5 -7
  18. package/dist/lib/getLocation/index.js.map +1 -1
  19. package/dist/lib/getStorage/index.js +21 -16
  20. package/dist/lib/getStorage/index.js.map +1 -1
  21. package/dist/lib/getStorageInfo/index.js +12 -13
  22. package/dist/lib/getStorageInfo/index.js.map +1 -1
  23. package/dist/lib/getSystemInfo/index.js +3 -6
  24. package/dist/lib/getSystemInfo/index.js.map +1 -1
  25. package/dist/lib/keyboard.js +3 -5
  26. package/dist/lib/keyboard.js.map +1 -1
  27. package/dist/lib/makePhoneCall/index.js +3 -6
  28. package/dist/lib/makePhoneCall/index.js.map +1 -1
  29. package/dist/lib/media.js +46 -55
  30. package/dist/lib/media.js.map +1 -1
  31. package/dist/lib/network.js +4 -4
  32. package/dist/lib/network.js.map +1 -1
  33. package/dist/lib/openUrl/index.js +3 -6
  34. package/dist/lib/openUrl/index.js.map +1 -1
  35. package/dist/lib/permission.js +20 -29
  36. package/dist/lib/permission.js.map +1 -1
  37. package/dist/lib/previewImage/index.js +7 -1
  38. package/dist/lib/previewImage/index.js.map +1 -1
  39. package/dist/lib/removeStorage/index.js +4 -4
  40. package/dist/lib/removeStorage/index.js.map +1 -1
  41. package/dist/lib/request/index.js +31 -42
  42. package/dist/lib/request/index.js.map +1 -1
  43. package/dist/lib/setClipboardData/index.js +3 -6
  44. package/dist/lib/setClipboardData/index.js.map +1 -1
  45. package/dist/lib/setStorage/index.js +20 -13
  46. package/dist/lib/setStorage/index.js.map +1 -1
  47. package/dist/lib/showActionSheet/index.js +4 -4
  48. package/dist/lib/showActionSheet/index.js.map +1 -1
  49. package/dist/lib/showModal/index.js +6 -6
  50. package/dist/lib/showModal/index.js.map +1 -1
  51. package/dist/lib/showModal/toast.js +8 -8
  52. package/dist/lib/showModal/toast.js.map +1 -1
  53. package/dist/lib/vibrate.js +10 -15
  54. package/dist/lib/vibrate.js.map +1 -1
  55. package/package.json +4 -4
  56. package/src/lib/chooseImage/index.ts +1 -0
  57. package/src/lib/clearStorage/index.ts +9 -16
  58. package/src/lib/compressImage/index.ts +17 -15
  59. package/src/lib/connectSocket/index.ts +6 -6
  60. package/src/lib/connectSocket/socketTask.ts +8 -8
  61. package/src/lib/createCameraContext/index.ts +41 -22
  62. package/src/lib/file.ts +27 -44
  63. package/src/lib/getClipboardData/index.ts +2 -4
  64. package/src/lib/getLocation/index.ts +6 -8
  65. package/src/lib/getStorage/index.ts +18 -28
  66. package/src/lib/getStorageInfo/index.ts +16 -22
  67. package/src/lib/getSystemInfo/index.ts +4 -9
  68. package/src/lib/keyboard.ts +4 -6
  69. package/src/lib/makePhoneCall/index.ts +3 -8
  70. package/src/lib/media.ts +43 -53
  71. package/src/lib/network.ts +4 -4
  72. package/src/lib/openUrl/index.ts +3 -8
  73. package/src/lib/permission.ts +15 -34
  74. package/src/lib/previewImage/index.tsx +9 -1
  75. package/src/lib/removeStorage/index.ts +4 -4
  76. package/src/lib/request/index.ts +37 -48
  77. package/src/lib/setClipboardData/index.ts +3 -8
  78. package/src/lib/setStorage/index.ts +9 -16
  79. package/src/lib/showActionSheet/index.tsx +4 -4
  80. package/src/lib/showModal/index.tsx +6 -6
  81. package/src/lib/showModal/toast.tsx +8 -8
  82. package/src/lib/vibrate.ts +3 -10
@@ -29,13 +29,13 @@ class SocketTask {
29
29
  try {
30
30
  this.ws.send(data)
31
31
 
32
- success && success(res)
33
- complete && complete(res)
32
+ success?.(res)
33
+ complete?.(res)
34
34
  } catch (err) {
35
35
  const res = { errMsg: err.message }
36
36
 
37
- fail && fail(res)
38
- complete && complete(res)
37
+ fail?.(res)
38
+ complete?.(res)
39
39
  }
40
40
  }
41
41
 
@@ -54,12 +54,12 @@ class SocketTask {
54
54
  this.ws.close(code, reason)
55
55
  // 把自己从链接数组中清除
56
56
  this._destroyWhenClose && this._destroyWhenClose()
57
- success && success(res)
58
- complete && complete(res)
57
+ success?.(res)
58
+ complete?.(res)
59
59
  } catch (err) {
60
60
  const res = { errMsg: err.message }
61
- fail && fail(res)
62
- complete && complete(res)
61
+ fail?.(res)
62
+ complete?.(res)
63
63
  }
64
64
  }
65
65
 
@@ -1,11 +1,12 @@
1
1
  import * as Permissions from 'expo-permissions'
2
- const globalAny:any = global
2
+ import { errorHandler, successHandler } from '../../utils'
3
+ const globalAny: any = global
3
4
 
4
5
  class CameraContext {
5
6
  private cameraRef: any
6
7
  private recordCallback: Taro.CameraContext.StopRecordOption
7
8
 
8
- constructor (cameraRef) {
9
+ constructor(cameraRef) {
9
10
  this.cameraRef = cameraRef
10
11
  }
11
12
 
@@ -51,33 +52,51 @@ class CameraContext {
51
52
  /**
52
53
  * 拍摄照片
53
54
  */
54
- takePhoto = (option: Taro.CameraContext.TakePhotoOption) => {
55
- let quality = 0
56
- switch (option.quality) {
55
+ takePhoto = async (option: Taro.CameraContext.TakePhotoOption) => {
56
+ const { quality = 'normal', success, fail, complete } = option
57
+ let _quality = 0
58
+ switch (quality) {
57
59
  case 'high':
58
- quality = 1
60
+ _quality = 1
59
61
  break
60
62
  case 'normal':
61
- quality = 0.6
63
+ _quality = 0.6
62
64
  break
63
65
  case 'low':
64
- quality = 0.3
66
+ _quality = 0.3
65
67
  break
66
68
  }
67
- Permissions.askAsync(Permissions.CAMERA, Permissions.AUDIO_RECORDING).then(() =>
68
- this.cameraRef?.takePictureAsync({ quality: quality }).then(res => {
69
- const { uri } = res
70
- option?.success?.({
71
- tempImagePath: uri ?? '',
72
- errMsg: 'takePhoto: ok'
73
- })
74
- }).catch(e => {
75
- option?.fail?.({ errMsg: e })
76
- }).finally(() =>
77
- option?.complete?.({ errMsg: '' })
78
- )).catch((e) =>
79
- console.log(e)
80
- )
69
+ try {
70
+ const { status } = await Permissions.askAsync(Permissions.CAMERA, Permissions.AUDIO_RECORDING)
71
+ if (status === 'granted') {
72
+ if (this.cameraRef?.takePictureAsync) {
73
+ const { uri } = await this.cameraRef.takePictureAsync({ quality: _quality })
74
+ const res = {
75
+ tempImagePath: uri,
76
+ errMsg: 'takePhoto: ok'
77
+ }
78
+ return successHandler(success, complete)(res)
79
+ } else {
80
+ const err = {
81
+ errMsg: 'takePhoto: fail',
82
+ err: Error('unknown')
83
+ }
84
+ return errorHandler(fail, complete)(err)
85
+ }
86
+ } else {
87
+ const err = {
88
+ errMsg: 'takePhoto: fail',
89
+ err: Error('You have not enabled camera permissions')
90
+ }
91
+ return errorHandler(fail, complete)(err)
92
+ }
93
+ } catch (error) {
94
+ const err = {
95
+ errMsg: 'takePhoto: fail',
96
+ err: error
97
+ }
98
+ return errorHandler(fail, complete)(err)
99
+ }
81
100
  }
82
101
 
83
102
  /**
package/src/lib/file.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as FileSystem from 'expo-file-system'
2
2
  import { Platform } from 'react-native'
3
- import { shouleBeObject } from '../utils'
3
+ import { shouleBeObject, successHandler, errorHandler } from '../utils'
4
4
 
5
5
  interface Func{
6
6
  (arg: any): void
@@ -39,7 +39,7 @@ const createFormData = (filePath, body, name) => {
39
39
  Object.keys(body).forEach(key => {
40
40
  data.append(key, body[key])
41
41
  })
42
-
42
+
43
43
  data.append(name, fileObj)
44
44
 
45
45
  return data
@@ -67,20 +67,14 @@ function uploadFile (opts: Taro.uploadFile.Option): Promise<Taro.uploadFile.Succ
67
67
 
68
68
  return _fetch(execFetch, timeout).then((res: any) => {
69
69
  if (res.ok) {
70
- success && success(res)
71
- complete && complete(res)
72
- return Promise.resolve(res)
70
+ return successHandler(success, complete)(res)
73
71
  } else {
74
72
  const errMsg = `uploadFile fail: ${res.status} ${res.statusText}`
75
- fail && fail({ errMsg })
76
- complete && complete({ errMsg })
77
- return Promise.reject(new Error(errMsg))
73
+ return errorHandler(fail, complete)({ errMsg })
78
74
  }
79
75
  }).catch(e => {
80
76
  const errMsg = `uploadFile fail: ${e}`
81
- fail && fail({ errMsg })
82
- complete && complete({ errMsg })
83
- return Promise.reject(new Error(errMsg))
77
+ return errorHandler(fail, complete)({ errMsg })
84
78
  })
85
79
  }
86
80
 
@@ -93,10 +87,6 @@ function uploadFile (opts: Taro.uploadFile.Option): Promise<Taro.uploadFile.Succ
93
87
  * @returns {*}
94
88
  */
95
89
  function downloadFile (opts: Taro.downloadFile.Option): Promise<Taro.DownloadTask> {
96
- if (typeof opts !== 'object') {
97
- const res = { errMsg: `fail parameter error: ${opts} should be Object` }
98
- return Promise.reject(res)
99
- }
100
90
  const { url, header, filePath, success, fail, complete }: any = opts
101
91
  let downloadResumable
102
92
  const p: ExtPromise<any> = new Promise((resolve, reject) => {
@@ -128,16 +118,16 @@ function downloadFile (opts: Taro.downloadFile.Option): Promise<Taro.DownloadTas
128
118
  statusCode: status
129
119
  }
130
120
  filePath && (res.filePath = filePath)
131
- success && success(res)
132
- complete && complete(res)
121
+ success?.(res)
122
+ complete?.(res)
133
123
  resolve(res)
134
124
  }).catch((err) => {
135
125
  const res = {
136
126
  errMsg: 'download file fail',
137
127
  err
138
128
  }
139
- fail && fail(res)
140
- complete && complete(res)
129
+ fail?.(res)
130
+ complete?.(res)
141
131
  reject(res)
142
132
  })
143
133
  })
@@ -166,7 +156,6 @@ async function saveFile (opts: Taro.saveFile.Option): Promise<Taro.saveFile.Succ
166
156
  const isObject = shouleBeObject(opts)
167
157
  if (!isObject.res) {
168
158
  res.errMsg = `saveFile${isObject.msg}`
169
- console.error(res)
170
159
  return Promise.reject(res)
171
160
  }
172
161
 
@@ -175,8 +164,6 @@ async function saveFile (opts: Taro.saveFile.Option): Promise<Taro.saveFile.Succ
175
164
  const destPath = filePath || FileSystem.documentDirectory
176
165
  const savedFilePath = destPath + fileName
177
166
 
178
- console.log('文件路径', FileSystem.documentDirectory)
179
-
180
167
  try {
181
168
  const props = await FileSystem.getInfoAsync(destPath)
182
169
  if (!props.exists) {
@@ -187,13 +174,13 @@ async function saveFile (opts: Taro.saveFile.Option): Promise<Taro.saveFile.Succ
187
174
  await FileSystem.moveAsync({ from: tempFilePath, to: savedFilePath })
188
175
  }
189
176
  res.savedFilePath = savedFilePath
190
- success && success(res)
191
- complete && complete(res)
177
+ success?.(res)
178
+ complete?.(res)
192
179
  return res
193
180
  } catch (e) {
194
181
  res.errMsg = `saveFile:fail. ${e.message}`
195
- fail && fail(res)
196
- complete && complete(res)
182
+ fail?.(res)
183
+ complete?.(res)
197
184
  throw res
198
185
  }
199
186
  }
@@ -220,14 +207,10 @@ async function removeSavedFile (opts: Taro.removeSavedFile.Option): Promise<Taro
220
207
  ...res,
221
208
  ...obj
222
209
  }
223
- success && success(res)
224
- complete && complete(res)
225
- return Promise.resolve(res)
210
+ return successHandler(success, complete)(res)
226
211
  } catch (e) {
227
212
  res.errMsg = `removeSavedFile:fail. ${e.message}`
228
- fail && fail(res)
229
- complete && complete(res)
230
- return Promise.reject(res)
213
+ return errorHandler(fail, complete)(res)
231
214
  }
232
215
  }
233
216
 
@@ -260,13 +243,13 @@ async function getSavedFileList (opts: Taro.getSavedFileList.Option = {}): Promi
260
243
  }
261
244
  })
262
245
  res.fileList = fileList
263
- success && success(res)
264
- complete && complete(res)
246
+ success?.(res)
247
+ complete?.(res)
265
248
  return res
266
249
  } catch (e) {
267
250
  res.errMsg = `getSavedFileList:fail. ${e.message}`
268
- fail && fail(res)
269
- complete && complete(res)
251
+ fail?.(res)
252
+ complete?.(res)
270
253
  throw res
271
254
  }
272
255
  }
@@ -293,13 +276,13 @@ async function getSavedFileInfo (opts: Taro.getSavedFileInfo.Option): Promise<Ta
293
276
  }
294
277
  res.size = obj.size
295
278
  res.createTime = obj.modificationTime
296
- success && success(res)
297
- complete && complete(res)
279
+ success?.(res)
280
+ complete?.(res)
298
281
  return res
299
282
  } catch (e) {
300
283
  res.errMsg = `getSavedFileInfo:fail. ${e.message}`
301
- fail && fail(res)
302
- complete && complete(res)
284
+ fail?.(res)
285
+ complete?.(res)
303
286
  throw res
304
287
  }
305
288
  }
@@ -328,13 +311,13 @@ async function getFileInfo (opts: Taro.getFileInfo.Option): Promise<Taro.getFile
328
311
  }
329
312
  res.size = obj.size
330
313
  res.md5 = obj.md5
331
- success && success(res)
332
- complete && complete(res)
314
+ success?.(res)
315
+ complete?.(res)
333
316
  return res
334
317
  } catch (e) {
335
318
  res.errMsg = `getFileInfo:fail. ${e.message}`
336
- fail && fail(res)
337
- complete && complete(res)
319
+ fail?.(res)
320
+ complete?.(res)
338
321
  throw res
339
322
  }
340
323
  }
@@ -1,4 +1,5 @@
1
1
  import Clipboard from '@react-native-community/clipboard'
2
+ import { errorHandler } from '../../utils'
2
3
 
3
4
  export function getClipboardData (opts: Taro.getClipboardData.Option = {}): Promise<Taro.getClipboardData.Promised> {
4
5
  const { success, fail, complete } = opts
@@ -17,9 +18,6 @@ export function getClipboardData (opts: Taro.getClipboardData.Option = {}): Prom
17
18
  const res = {
18
19
  errMsg: err.message
19
20
  }
20
- fail?.(res)
21
- complete?.(res)
22
-
23
- return Promise.reject(err)
21
+ return errorHandler(fail, complete)(res)
24
22
  })
25
23
  }
@@ -1,24 +1,22 @@
1
1
  import Geolocation from '@react-native-community/geolocation'
2
2
  import { Permissions } from 'react-native-unimodules'
3
3
  import { askAsyncPermissions } from '../../utils/premissions'
4
+ import { errorHandler } from '../../utils'
4
5
 
5
6
  export async function getLocation(opts: Taro.getLocation.Option = {}): Promise<Taro.getLocation.SuccessCallbackResult> {
7
+ const { isHighAccuracy = false, highAccuracyExpireTime = 3000, success, fail, complete } = opts
8
+
6
9
  try {
7
10
  const status = await askAsyncPermissions(Permissions.LOCATION)
8
11
  if (status !== 'granted') {
9
12
  const res = { errMsg: 'Permissions denied!' }
10
- return Promise.reject(res)
13
+ return errorHandler(fail, complete)(res)
11
14
  }
12
15
  } catch (err) {
13
- const res = {
14
- errMsg: 'Permissions denied!',
15
- err
16
- }
17
- return Promise.reject(res)
16
+ const res = { errMsg: 'Permissions denied!' }
17
+ return errorHandler(fail, complete)(res)
18
18
  }
19
19
 
20
- const { isHighAccuracy = false, highAccuracyExpireTime = 3000, success, fail, complete } = opts
21
-
22
20
  return new Promise((resolve, reject) => {
23
21
  Geolocation.getCurrentPosition(
24
22
  ({ coords }) => {
@@ -1,34 +1,24 @@
1
1
  import AsyncStorage from '@react-native-async-storage/async-storage'
2
+ import { errorHandler, successHandler } from '../../utils'
2
3
 
3
- export function getStorage(option: Taro.getStorage.Option<any>): Promise<Taro.getStorage.SuccessCallbackResult<any>> {
4
+ export async function getStorage(option: Taro.getStorage.Option<any>): Promise<Taro.getStorage.SuccessCallbackResult<any>> {
4
5
  const { key, success, fail, complete } = option
5
6
  const res = { errMsg: 'getStorage:ok' }
6
7
 
7
- return new Promise((resolve, reject) => {
8
- AsyncStorage.getItem(key)
9
- .then((data) => {
10
- if (data) {
11
- const result = {
12
- data: JSON.parse(data),
13
- ...res
14
- }
15
- success?.(result)
16
- complete?.(result)
17
-
18
- resolve(result)
19
- } else {
20
- res.errMsg = 'getStorage:fail data not found'
21
- fail?.(res)
22
- complete?.(res)
23
-
24
- reject(res)
25
- }
26
- }).catch((err) => {
27
- res.errMsg = err.message
28
- fail?.(res)
29
- complete?.(res)
30
-
31
- reject(err)
32
- })
33
- })
8
+ try {
9
+ const data = await AsyncStorage.getItem(key)
10
+ if (data) {
11
+ const result = {
12
+ data: JSON.parse(data),
13
+ ...res
14
+ }
15
+ return successHandler(success, complete)(result)
16
+ } else {
17
+ res.errMsg = 'getStorage:fail data not found'
18
+ return errorHandler(fail, complete)(res)
19
+ }
20
+ } catch (err) {
21
+ res.errMsg = err.message
22
+ return errorHandler(fail, complete)(res)
23
+ }
34
24
  }
@@ -1,4 +1,5 @@
1
1
  import AsyncStorage from '@react-native-async-storage/async-storage'
2
+ import { errorHandler, successHandler } from '../../utils'
2
3
 
3
4
  async function getStorageCurrentSize() {
4
5
  const keys = await AsyncStorage.getAllKeys()
@@ -10,29 +11,22 @@ async function getStorageCurrentSize() {
10
11
  return Number((size / 1024).toFixed(2))
11
12
  }
12
13
 
13
- export function getStorageInfo(option: Taro.getStorageInfo.Option = {}): Promise<Taro.General.CallbackResult> {
14
+ export async function getStorageInfo(option: Taro.getStorageInfo.Option = {}): Promise<Taro.General.CallbackResult> {
14
15
  const { success, fail, complete } = option
15
16
  const res = { errMsg: 'getStorageInfo:ok' }
16
17
 
17
- return new Promise((resolve, reject) => {
18
- AsyncStorage.getAllKeys()
19
- .then(async (data) => {
20
- const result = {
21
- ...res,
22
- keys: data,
23
- currentSize: await getStorageCurrentSize(),
24
- limitSize: Infinity
25
- }
26
- success && success(result)
27
- complete && complete(result)
28
-
29
- resolve(result)
30
- }).catch((err) => {
31
- res.errMsg = err.message
32
- fail && fail(res)
33
- complete && complete(res)
34
-
35
- reject(err)
36
- })
37
- })
18
+ try {
19
+ const data = await AsyncStorage.getAllKeys()
20
+ const result = {
21
+ ...res,
22
+ keys: data,
23
+ currentSize: await getStorageCurrentSize(),
24
+ limitSize: Infinity
25
+ }
26
+ // @ts-ignore
27
+ return successHandler(success, complete)(result)
28
+ } catch (err) {
29
+ res.errMsg = err.message
30
+ return errorHandler(fail, complete)(err)
31
+ }
38
32
  }
@@ -1,4 +1,5 @@
1
1
  import { getSystemInfoSync } from '../getSystemInfoSync'
2
+ import { successHandler, errorHandler } from '../../utils'
2
3
 
3
4
  export function getSystemInfo(opts: Taro.getSystemInfo.Option = {}): Promise<Taro.getSystemInfo.Result> {
4
5
  const { success, fail, complete }: any = opts
@@ -7,15 +8,9 @@ export function getSystemInfo(opts: Taro.getSystemInfo.Option = {}): Promise<Ta
7
8
  ...getSystemInfoSync(),
8
9
  errMsg: 'getSystemInfo: ok'
9
10
  }
10
- success && success(res)
11
- complete && complete(res)
12
-
13
- return Promise.resolve(res)
11
+ return successHandler(success, complete)(res)
14
12
  } catch (err) {
15
13
  const res = { errMsg: err.message }
16
- fail && fail(res)
17
- complete && complete(res)
18
-
19
- return Promise.reject(err)
14
+ return errorHandler(fail, complete)(res)
20
15
  }
21
- }
16
+ }
@@ -1,17 +1,15 @@
1
1
  import { Keyboard } from 'react-native'
2
- import { createCallbackManager } from '../utils'
2
+ import { createCallbackManager, errorHandler, successHandler } from '../utils'
3
3
 
4
- const hideKeyboard = (opts: Taro.hideKeyboard.Option = {}): void => {
4
+ const hideKeyboard = (opts: Taro.hideKeyboard.Option = {}): Promise<Taro.General.CallbackResult> => {
5
5
  const { success, fail, complete } = opts
6
6
  try {
7
7
  Keyboard.dismiss()
8
8
  const res = { errMsg: 'hideKeyboard:ok' }
9
- success?.(res)
10
- complete?.(res)
9
+ return successHandler(success, complete)(res)
11
10
  } catch (err) {
12
11
  const res = { errMsg: err.message }
13
- fail?.(res)
14
- complete?.(res)
12
+ return errorHandler(fail, complete)(res)
15
13
  }
16
14
  }
17
15
 
@@ -1,4 +1,5 @@
1
1
  import { Linking } from 'react-native'
2
+ import { successHandler, errorHandler } from '../../utils'
2
3
 
3
4
  export async function makePhoneCall(opts: Taro.makePhoneCall.Option): Promise<Taro.General.CallbackResult> {
4
5
  const { phoneNumber, success, fail, complete } = opts
@@ -8,15 +9,9 @@ export async function makePhoneCall(opts: Taro.makePhoneCall.Option): Promise<Ta
8
9
  const isSupport = await Linking.canOpenURL(telUrl)
9
10
  if (isSupport) {
10
11
  await Linking.openURL(telUrl)
11
- success?.(res)
12
- complete?.(res)
13
-
14
- return Promise.resolve(res)
12
+ return successHandler(success, complete)(res)
15
13
  } else {
16
14
  res.errMsg = 'makePhoneCall:fail. Do not support the makePhoneCall Api'
17
- fail?.(res)
18
- complete?.(res)
19
-
20
- return Promise.reject(res)
15
+ return errorHandler(fail, complete)(res)
21
16
  }
22
17
  }
package/src/lib/media.ts CHANGED
@@ -2,6 +2,7 @@ import CameraRoll from '@react-native-community/cameraroll'
2
2
  import { Permissions } from 'react-native-unimodules'
3
3
  import * as ImagePicker from 'expo-image-picker'
4
4
  import { askAsyncPermissions } from '../utils/premissions'
5
+ import { successHandler, errorHandler } from '../utils'
5
6
 
6
7
  export const MEDIA_TYPE = {
7
8
  VIDEOS: 'Videos',
@@ -9,26 +10,23 @@ export const MEDIA_TYPE = {
9
10
  }
10
11
 
11
12
  export async function saveMedia(opts: Taro.saveImageToPhotosAlbum.Option|Taro.saveVideoToPhotosAlbum.Option, type:string, API:string):Promise<Taro.General.CallbackResult> {
13
+ const { filePath, success, fail, complete } = opts
12
14
  const status = await askAsyncPermissions(Permissions.CAMERA_ROLL)
13
15
  if (status !== 'granted') {
14
16
  const res = { errMsg: 'Permissions denied!' }
15
- return Promise.reject(res)
17
+ return errorHandler(fail, complete)(res)
16
18
  }
17
- const { filePath, success, fail, complete } = opts
19
+
18
20
  const res: any = { errMsg: `${API}:ok` }
19
21
  const saveType = (type === 'video' || type === 'photo') ? type : 'auto'
20
- return CameraRoll.save(filePath, { type: saveType })
21
- .then((url) => {
22
- res.path = url
23
- success?.(res)
24
- complete?.(res)
25
- return Promise.resolve(res)
26
- }).catch((err) => {
27
- res.errMsg = err.message
28
- fail?.(res)
29
- complete?.(res)
30
- return Promise.reject(res)
31
- })
22
+ try {
23
+ const url: string = await CameraRoll.save(filePath, { type: saveType })
24
+ res.path = url;
25
+ return successHandler(success, complete)(res)
26
+ } catch (err) {
27
+ res.errMsg = err.message
28
+ return errorHandler(fail, complete)(res)
29
+ }
32
30
  }
33
31
 
34
32
  export async function chooseMedia(opts: Taro.chooseImage.Option|Taro.chooseVideo.Option, mediaTypes: string): Promise<Taro.General.CallbackResult> {
@@ -45,50 +43,42 @@ export async function chooseMedia(opts: Taro.chooseImage.Option|Taro.chooseVideo
45
43
  const status = isCamera ? await askAsyncPermissions(Permissions.CAMERA) : await askAsyncPermissions(Permissions.CAMERA_ROLL)
46
44
  if (status !== 'granted') {
47
45
  const res = { errMsg: 'Permissions denied!' }
48
- return Promise.reject(res)
46
+ return errorHandler(fail, complete)(res)
49
47
  }
50
48
 
51
- let p
52
- return new Promise((resolve, reject) => {
53
- p = isCamera ? ImagePicker.launchCameraAsync(options as any) : ImagePicker.launchImageLibraryAsync(options as any)
54
- p.then((resp) => {
55
- const { uri, duration, width, height } = resp
56
- resp.path = uri
49
+ let launchMediaAsync = isCamera ? ImagePicker.launchCameraAsync : ImagePicker.launchImageLibraryAsync
50
+ try {
51
+ const resp: any = await launchMediaAsync(options as any)
52
+ const { uri, duration, width, height } = resp
53
+ resp.path = uri
57
54
 
58
- let res: any = {}
59
- if (mediaTypes === MEDIA_TYPE.VIDEOS) {
60
- res = {
61
- tempFilePath: uri,
62
- duration,
63
- width,
64
- height
65
- }
66
- } else {
67
- res = {
68
- tempFilePaths: [uri],
69
- tempFiles: [resp]
70
- }
55
+ let res: any = {}
56
+ if (mediaTypes === MEDIA_TYPE.VIDEOS) {
57
+ res = {
58
+ tempFilePath: uri,
59
+ duration,
60
+ width,
61
+ height
71
62
  }
72
- if (res.tempFilePath || (!!res.tempFilePaths && res.tempFilePaths.length > 0)) {
73
- success?.(res)
74
- complete?.(res)
75
- resolve(res as any)
76
- } else {
77
- const res = {
78
- errMsg: mediaTypes === MEDIA_TYPE.VIDEOS ? 'chooseVideo:fail cancel' : 'chooseImage:fail cancel',
79
- }
80
- fail?.(res)
81
- complete?.(res)
82
- reject(res)
63
+ } else {
64
+ res = {
65
+ tempFilePaths: [uri],
66
+ tempFiles: [resp]
83
67
  }
84
- }).catch((err) => {
68
+ }
69
+ if (res.tempFilePath || (!!res.tempFilePaths && res.tempFilePaths.length > 0)) {
70
+ return successHandler(success, complete)(res)
71
+ } else {
85
72
  const res = {
86
- errMsg: mediaTypes === MEDIA_TYPE.VIDEOS ? 'chooseVideo fail' : 'chooseImage fail',
87
- err
73
+ errMsg: mediaTypes === MEDIA_TYPE.VIDEOS ? 'chooseVideo:fail cancel' : 'chooseImage:fail cancel',
88
74
  }
89
- fail?.(res)
90
- complete?.(res)
91
- reject(res)
92
- })
93
- })
75
+ return errorHandler(fail, complete)(res)
76
+ }
77
+ } catch (err) {
78
+ const res = {
79
+ errMsg: mediaTypes === MEDIA_TYPE.VIDEOS ? 'chooseVideo fail' : 'chooseImage fail',
80
+ err
81
+ }
82
+ return errorHandler(fail, complete)(res)
83
+ }
94
84
  }
@@ -13,14 +13,14 @@ export function getNetworkType(opts: Taro.getNetworkType.Option = {}): Promise<T
13
13
  .then((connectionInfo) => {
14
14
  res.networkType = connectionInfo.type
15
15
  res.errMsg = 'getNetworkType:ok'
16
- success && success(res)
17
- complete && complete(res)
16
+ success?.(res)
17
+ complete?.(res)
18
18
 
19
19
  resolve(res)
20
20
  }).catch((err) => {
21
21
  res.errMsg = err.message
22
- fail && fail(res)
23
- complete && complete(res)
22
+ fail?.(res)
23
+ complete?.(res)
24
24
 
25
25
  reject(err)
26
26
  })