@tarojs/taro-rn 4.0.0-alpha.0 → 4.0.0-canary.0

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.
@@ -1,153 +1,44 @@
1
- import SYImagePicker from 'react-native-syan-image-picker';
2
- import { shouldBeObject } from '../../utils';
1
+ import { chooseMedia, MEDIA_TYPE } from '../media';
3
2
  import { showActionSheet } from '../showActionSheet';
4
- const res = { errMsg: 'chooseImage:ok' };
5
- const defaultOptions = {
6
- count: 9,
7
- sizeType: ['original', 'compressed'],
8
- sourceType: ['album', 'camera']
9
- };
10
- function getRes(images) {
11
- const tempFilePaths = [];
12
- const tempFiles = [];
13
- images.forEach((item) => {
14
- tempFilePaths.push(item.uri);
15
- tempFiles.push({
16
- path: item.uri,
17
- size: item.size
18
- });
19
- });
20
- return { tempFilePaths, tempFiles };
21
- }
22
- function openCamera(options) {
23
- const { success, fail, complete } = options;
24
- return new Promise((resolve, reject) => {
25
- SYImagePicker.openCamera({
26
- compressFocusAlpha: true
27
- }, (err, photo) => {
28
- if (err) {
29
- const res = {
30
- errMsg: err
31
- };
32
- fail === null || fail === void 0 ? void 0 : fail(res);
33
- complete === null || complete === void 0 ? void 0 : complete(res);
34
- reject(res);
35
- }
36
- else {
37
- try {
38
- const data = Object.assign({}, getRes(photo), res);
39
- success === null || success === void 0 ? void 0 : success(data);
40
- complete === null || complete === void 0 ? void 0 : complete(data);
41
- resolve(data);
42
- }
43
- catch (error) {
44
- // 错误
45
- reject(error);
46
- }
47
- }
48
- });
49
- });
50
- }
51
- // NOTE: 调用此函数会改变图片的像素尺寸
52
- function openPicker(options) {
53
- const { count: imageCount, sizeType = [], success, complete, fail } = options;
54
- return new Promise((resolve, reject) => {
55
- // NOTE:react-native-syan-image-picker 暂不支持 Android 端压缩
56
- SYImagePicker.showImagePicker({
57
- compressFocusAlpha: true,
58
- imageCount,
59
- quality: sizeType[0] === 'compressed' ? 70 : 90,
60
- }, (err, photos) => {
61
- if (err) {
62
- const res = {
63
- errMsg: err
64
- };
65
- fail === null || fail === void 0 ? void 0 : fail(res);
66
- complete === null || complete === void 0 ? void 0 : complete(res);
67
- reject(res);
68
- }
69
- else {
70
- try {
71
- const data = Object.assign({}, getRes(photos), res);
72
- success === null || success === void 0 ? void 0 : success(data);
73
- complete === null || complete === void 0 ? void 0 : complete(data);
74
- resolve(data);
75
- }
76
- catch (error) {
77
- reject(error);
78
- }
79
- }
80
- });
81
- });
3
+ export function chooseImage(opts) {
4
+ const { sourceType } = opts;
5
+ switch (JSON.stringify(sourceType)) {
6
+ case '[\'camera\']':
7
+ case '["camera"]':
8
+ return chooseMedia(Object.assign(Object.assign({}, opts), { sourceType: ['camera'] }), MEDIA_TYPE.IMAGES);
9
+ case '[\'album\']':
10
+ case '["album"]':
11
+ return chooseMedia(Object.assign(Object.assign({}, opts), { sourceType: ['album'] }), MEDIA_TYPE.IMAGES);
12
+ default:
13
+ return showImagePicker(opts);
14
+ }
82
15
  }
83
- /**
84
- * @description Display the image picker.
85
- * @param options
86
- * @returns {Promise}
87
- */
88
16
  function showImagePicker(options) {
89
17
  const { fail, complete } = options;
90
18
  return new Promise((resolve, reject) => {
91
19
  showActionSheet({
92
20
  itemList: ['拍照', '从手机相册选择'],
93
- success(res) {
94
- console.log(res.tapIndex);
21
+ success: function (res) {
95
22
  if (res.tapIndex === 0) {
96
- // 不添加 setTimeout 会有一定概率卡死,肯能是与 sibling.destroy() 冲突
97
- setTimeout(() => {
98
- openCamera(options).then(res => {
99
- resolve(res);
100
- }).catch(e => {
101
- fail === null || fail === void 0 ? void 0 : fail({ errMsg: `chooseImage:${e.message}` });
102
- complete === null || complete === void 0 ? void 0 : complete({ errMsg: `chooseImage:${e.message}` });
103
- reject(new Error(`chooseImage:${e.message}`));
104
- });
105
- }, 100);
23
+ resolve(chooseMedia(Object.assign(Object.assign({}, options), { sourceType: ['camera'] }), MEDIA_TYPE.IMAGES));
106
24
  }
107
25
  if (res.tapIndex === 1) {
108
- setTimeout(() => {
109
- openPicker(options).then(res => {
110
- resolve(res);
111
- }).catch(e => {
112
- fail === null || fail === void 0 ? void 0 : fail({ errMsg: `chooseImage:${e.message}` });
113
- complete === null || complete === void 0 ? void 0 : complete({ errMsg: `chooseImage:${e.message}` });
114
- reject(new Error(`chooseImage:${e.message}`));
115
- });
116
- }, 100);
26
+ resolve(chooseMedia(Object.assign(Object.assign({}, options), { sourceType: ['album'] }), MEDIA_TYPE.IMAGES));
117
27
  }
118
28
  },
119
- fail(res) {
120
- console.log('error: ', res.errMsg);
29
+ fail: function () {
30
+ const res = { errMsg: 'chooseImage:fail cancel' };
31
+ reject(res);
32
+ }
33
+ }).catch(err => {
34
+ console.log('error: ', err.errMsg);
35
+ if (/showActionSheet:fail cancel/.test(err.errMsg)) {
36
+ const res = { errMsg: 'chooseImage:fail cancel' };
37
+ fail === null || fail === void 0 ? void 0 : fail(res);
38
+ complete === null || complete === void 0 ? void 0 : complete(res);
39
+ reject(res);
121
40
  }
122
41
  });
123
42
  });
124
43
  }
125
- /**
126
- * @deprecated
127
- * @description 从本地相册选择图片或使用相机拍照。
128
- * sizeType ❌
129
- * @param options
130
- * @returns {Promise<*>}
131
- */
132
- export function chooseImage(options) {
133
- // options must be an Object
134
- const isObject = shouldBeObject(options);
135
- if (!isObject.res) {
136
- const res = { errMsg: `chooseImage${isObject.msg}` };
137
- console.error(res.errMsg);
138
- return Promise.reject(res);
139
- }
140
- options = Object.assign({}, defaultOptions, options);
141
- const { sourceType } = options;
142
- switch (JSON.stringify(sourceType)) {
143
- case '[\'camera\']':
144
- case '["camera"]':
145
- return openCamera(options);
146
- case '[\'album\']':
147
- case '["album"]':
148
- return openPicker(options);
149
- default:
150
- return showImagePicker(options);
151
- }
152
- }
153
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/chooseImage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/chooseImage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,UAAU,WAAW,CAAC,IAA6B;IACvD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IAC3B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;QAClC,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,WAAW,iCAAK,IAAI,KAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QAC1E,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,iCAAK,IAAI,KAAE,UAAU,EAAE,CAAC,OAAO,CAAC,KAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACzE;YACE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;KAC/B;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAgC;IACvD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,eAAe,CAAC;YACd,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;YAC3B,OAAO,EAAE,UAAU,GAAG;gBACpB,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;oBACtB,OAAO,CAAC,WAAW,iCAAK,OAAO,KAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;iBAC9E;gBACD,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;oBACtB,OAAO,CAAC,WAAW,iCAAK,OAAO,KAAE,UAAU,EAAE,CAAC,OAAO,CAAC,KAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;iBAC7E;YACH,CAAC;YACD,IAAI,EAAE;gBACJ,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAA;gBACjD,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC;SACF,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YAClC,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAClD,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAA;gBACjD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,GAAG,CAAC,CAAA;gBACX,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,GAAG,CAAC,CAAA;gBACf,MAAM,CAAC,GAAG,CAAC,CAAA;aACZ;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/dist/setup.js CHANGED
@@ -1,40 +1,23 @@
1
- import { jest } from '@jest/globals';
2
1
  import '@testing-library/jest-native/extend-expect';
3
- import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock.js';
4
2
  import { NetInfoStateType } from '@react-native-community/netinfo';
5
- import mockRNCAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock.js';
3
+ import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock';
4
+ import mockRNCAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock';
6
5
  import mockRNCDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock';
6
+ import mockRNCClipboard from '@react-native-clipboard/clipboard/jest/clipboard-mock';
7
+ import mockRNCGeolocation from './__tests__/__mock__/mockRNCGeolocation';
8
+ import mockRNCameraRoll from './__tests__/__mock__/mockRNCCameraRoll';
9
+ jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter');
7
10
  jest.doMock('@react-native-community/netinfo', () => (Object.assign(Object.assign({}, mockRNCNetInfo), { NetInfoStateType })));
8
11
  jest.doMock('@react-native-async-storage/async-storage', () => mockRNCAsyncStorage);
12
+ jest.doMock('@react-native-community/geolocation', () => mockRNCGeolocation);
13
+ jest.doMock('@react-native-clipboard/clipboard', () => mockRNCClipboard);
9
14
  jest.doMock('react-native-device-info', () => mockRNCDeviceInfo);
10
- jest.doMock('react-native', () => {
15
+ jest.mock('@react-native-camera-roll/camera-roll', () => mockRNCameraRoll);
16
+ jest.mock('react-native', () => {
11
17
  const ReactNative = jest.requireActual('react-native');
12
- // Vibration readonly so you need use defineProperty rewrite this property descriptor.
13
- const Vibration = jest.requireActual('./__tests__/__mock__/mockVibrate').default;
14
- Object.defineProperty(ReactNative, 'Vibration', {
15
- enumerable: false,
16
- configurable: false,
17
- writable: false,
18
- value: Vibration
19
- });
20
- // mockNativeModules: react-native/Libraries/BatchedBridge/NativeModules
21
- const RNCCameraRoll = jest.requireActual('./__tests__/__mock__/mockRNCCameraRoll').default;
22
- const MockClipboard = jest.requireActual('./__tests__/__mock__/mockClipboard').default;
23
- const RNCGeolocation = jest.requireActual('./__tests__/__mock__/mockRNCGeolocation').default;
24
- ReactNative.NativeModules.RNCCameraRoll = RNCCameraRoll.RNCCameraRoll;
25
- ReactNative.NativeModules.RNCCameraRollPermissionModule = RNCCameraRoll.RNCCameraRollPermissionModule;
26
- ReactNative.NativeModules.RNCClipboard = new MockClipboard();
27
- ReactNative.NativeModules.RNCGeolocation = RNCGeolocation;
28
- Object.defineProperty(ReactNative.NativeModules, 'ImageLoader', {
29
- configurable: true,
30
- enumerable: true,
31
- get: () => ({
32
- prefetchImage: jest.fn(),
33
- getSize: jest.fn((_uri, success) => {
34
- process.nextTick(() => success && success(320, 240));
35
- return Promise.resolve([320, 240]);
36
- }),
37
- }),
18
+ ReactNative.Image.getSize = jest.fn((_uri, success) => {
19
+ setTimeout(() => success && success(320, 240));
20
+ return Promise.resolve([320, 240]);
38
21
  });
39
22
  return ReactNative;
40
23
  });
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarojs/taro-rn",
3
- "version": "4.0.0-alpha.0",
3
+ "version": "4.0.0-canary.0",
4
4
  "description": "Taro RN framework",
5
5
  "main": "dist/index.js",
6
6
  "typings": "types/index.d.ts",
@@ -21,73 +21,70 @@
21
21
  "author": "O2Team",
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@bam.tech/react-native-image-resizer": "~3.0.4",
25
- "@react-native-async-storage/async-storage": "~1.17.7",
26
- "@react-native-camera-roll/camera-roll": "~5.2.3",
27
- "@react-native-clipboard/clipboard": "~1.11.1",
28
- "@react-native-community/geolocation": "~3.0.2",
29
- "@react-native-community/netinfo": "~9.3.0",
30
- "babel-preset-expo": "~9.2.1",
24
+ "@bam.tech/react-native-image-resizer": "~3.0.5",
25
+ "@react-native-async-storage/async-storage": "~1.21.0",
26
+ "@react-native-camera-roll/camera-roll": "~7.2.0",
27
+ "@react-native-clipboard/clipboard": "~1.13.0",
28
+ "@react-native-community/geolocation": "~3.1.0",
29
+ "@react-native-community/netinfo": "~11.2.0",
30
+ "babel-preset-expo": "~10.0.0",
31
31
  "base64-js": "^1.3.0",
32
32
  "deprecated-react-native-prop-types": "^2.3.0",
33
- "expo-av": "~13.2.1",
34
- "expo-barcode-scanner": "~12.3.1",
35
- "expo-brightness": "~11.2.1",
36
- "expo-camera": "~13.2.1",
37
- "expo-file-system": "~15.2.2",
38
- "expo-image-picker": "~14.1.1",
39
- "expo-keep-awake": "~12.0.1",
40
- "expo-location": "~15.1.1",
41
- "expo-sensors": "~12.1.1",
33
+ "expo-av": "~13.10.0",
34
+ "expo-barcode-scanner": "~12.9.0",
35
+ "expo-brightness": "~11.8.0",
36
+ "expo-camera": "~14.0.0",
37
+ "expo-file-system": "~16.0.0",
38
+ "expo-image-picker": "~14.7.0",
39
+ "expo-keep-awake": "~12.8.0",
40
+ "expo-location": "~16.5.1",
41
+ "expo-sensors": "~12.9.0",
42
42
  "nullthrows": "^1.1.1",
43
43
  "prop-types": "^15.8.1",
44
- "react-native-device-info": "~10.4.0",
44
+ "react-native-device-info": "~10.12.0",
45
45
  "react-native-image-zoom-viewer": "^3.0.1",
46
- "react-native-root-siblings": "^4.1.1",
47
- "react-native-root-toast": "^3.0.1",
48
- "react-native-safe-area-context": "~4.5.0",
46
+ "react-native-root-siblings": "^5.0.1",
47
+ "react-native-root-toast": "^3.5.1",
48
+ "react-native-safe-area-context": "~4.8.0",
49
49
  "react-native-stylekit": "^1.0.0",
50
- "react-native-syan-image-picker": "0.5.3",
51
- "@tarojs/runtime-rn": "4.0.0-alpha.0"
50
+ "@tarojs/runtime-rn": "4.0.0-canary.0"
52
51
  },
53
52
  "devDependencies": {
54
53
  "@babel/core": "^7.14.5",
55
54
  "@babel/preset-env": "^7.14.5",
56
- "@jest/globals": "^26.6.2",
55
+ "@react-native/babel-preset": "^0.73.18",
57
56
  "@testing-library/jest-native": "^5.4.2",
58
- "@testing-library/react-native": "^12.0.1",
57
+ "@testing-library/react-native": "^12.4.1",
59
58
  "@types/jest": "^27.4.1",
60
- "expo": "~48.0.0",
59
+ "expo": "~50.0.0-preview.7",
61
60
  "fbjs-scripts": "^3.0.1",
62
61
  "jest": "^29.3.1",
63
62
  "jest-cli": "^29.3.1",
64
63
  "jest-environment-node": "^29.5.0",
65
- "jest-expo": "^48.0.2",
66
- "metro-react-native-babel-preset": "^0.73.7",
64
+ "jest-expo": "^50.0.0",
67
65
  "mock-socket": "^7.1.0",
68
66
  "react": "18.2.0",
69
- "react-native": "^0.71.3",
67
+ "react-native": "^0.73.1",
70
68
  "react-test-renderer": "18.2.0"
71
69
  },
72
70
  "peerDependencies": {
73
- "@bam.tech/react-native-image-resizer": "~3.0.4",
74
- "@react-native-async-storage/async-storage": "~1.17.7",
75
- "@react-native-camera-roll/camera-roll": "~5.2.3",
76
- "@react-native-clipboard/clipboard": "~1.11.1",
77
- "@react-native-community/geolocation": "~3.0.2",
78
- "@react-native-community/netinfo": "~9.3.0",
79
- "expo-av": "~13.2.1",
80
- "expo-barcode-scanner": "~12.3.1",
81
- "expo-brightness": "~11.2.1",
82
- "expo-camera": "~13.2.1",
83
- "expo-file-system": "~15.2.2",
84
- "expo-image-picker": "~14.1.1",
85
- "expo-keep-awake": "~12.0.1",
86
- "expo-location": "~15.1.1",
87
- "expo-sensors": "~12.1.1",
88
- "react-native-device-info": "~10.4.0",
89
- "react-native-safe-area-context": "~4.5.0",
90
- "react-native-syan-image-picker": "0.5.3"
71
+ "@bam.tech/react-native-image-resizer": "~3.0.5",
72
+ "@react-native-async-storage/async-storage": "~1.21.0",
73
+ "@react-native-camera-roll/camera-roll": "~7.2.0",
74
+ "@react-native-clipboard/clipboard": "~1.13.0",
75
+ "@react-native-community/geolocation": "~3.1.0",
76
+ "@react-native-community/netinfo": "~11.2.0",
77
+ "expo-av": "~13.10.0",
78
+ "expo-barcode-scanner": "~12.9.0",
79
+ "expo-brightness": "~11.8.0",
80
+ "expo-camera": "~14.0.0",
81
+ "expo-file-system": "~16.0.0",
82
+ "expo-image-picker": "~14.7.0",
83
+ "expo-keep-awake": "~12.8.0",
84
+ "expo-location": "~16.5.1",
85
+ "expo-sensors": "~12.9.0",
86
+ "react-native-device-info": "~10.12.0",
87
+ "react-native-safe-area-context": "~4.8.0"
91
88
  },
92
89
  "scripts": {
93
90
  "assets": "cpy 'src/**/*.png' '!src/__tests__/*' dist",
@@ -1,16 +1,7 @@
1
- const RNCCameraRoll = {
2
- deletePhotos: jest.fn(),
3
- saveToCameraRoll: jest.fn((url, { type }) => Promise.resolve(`${type}://${url}`)),
4
- getPhotos: jest.fn(() => Promise.resolve()),
5
- }
6
- const RNCCameraRollPermissionModule = {
7
- checkPermission: jest.fn(),
8
- requestReadWritePermission: jest.fn(),
9
- requestAddOnlyPermission: jest.fn(),
10
- refreshPhotoSelection: jest.fn(),
1
+ const CameraRoll = {
2
+ save: jest.fn((url, { type }) => Promise.resolve(`${type}://${url}`)),
11
3
  }
12
4
 
13
5
  export default {
14
- RNCCameraRoll,
15
- RNCCameraRollPermissionModule,
6
+ CameraRoll,
16
7
  }
@@ -15,33 +15,28 @@ exports[`scanCode should render scanCode success 1`] = `
15
15
  ]
16
16
  }
17
17
  >
18
- <ViewManagerAdapter_ExponentCamera
18
+ <ViewManagerAdapter_ExpoCamera
19
+ barCodeScannerEnabled={true}
20
+ barCodeScannerSettings={
21
+ {
22
+ "barCodeTypes": [],
23
+ }
24
+ }
25
+ faceDetectorSettings={{}}
26
+ focusDepth={0}
19
27
  onBarCodeScanned={[Function]}
20
28
  onCameraReady={[Function]}
21
29
  onFacesDetected={[Function]}
22
30
  onMountError={[Function]}
23
31
  onPictureSaved={[Function]}
24
- proxiedProperties={
25
- {
26
- "autoFocus": undefined,
27
- "barCodeScannerEnabled": true,
28
- "barCodeScannerSettings": {
29
- "barCodeTypes": [],
30
- },
31
- "faceDetectorSettings": {},
32
- "flashMode": undefined,
33
- "focusDepth": 0,
34
- "type": undefined,
35
- "whiteBalance": undefined,
36
- "zoom": 0,
37
- }
38
- }
32
+ onResponsiveOrientationChanged={[Function]}
39
33
  style={
40
34
  {
41
35
  "height": 1334,
42
36
  "width": 750,
43
37
  }
44
38
  }
39
+ zoom={0}
45
40
  />
46
41
  <View
47
42
  accessibilityLabel="Close"
@@ -12,7 +12,7 @@ const Taro = {
12
12
  describe('clipboard', () => {
13
13
  describe('setClipboardData', () => {
14
14
  test('should set value into Clipboard', async () => {
15
- const data = 'foo'
15
+ const data = 'mockString'
16
16
  const success = jest.fn()
17
17
  const fail = jest.fn()
18
18
  const complete = jest.fn()
@@ -63,7 +63,7 @@ describe('clipboard', () => {
63
63
 
64
64
  describe('getClipboardData', () => {
65
65
  test('可以获得正确的剪切板数据', async () => {
66
- const data = 'hey!hey!hey!'
66
+ const data = 'mockString'
67
67
  const success = jest.fn()
68
68
  const fail = jest.fn()
69
69
  const complete = jest.fn()
@@ -1,157 +1,45 @@
1
- import SYImagePicker from 'react-native-syan-image-picker'
2
-
3
- import { shouldBeObject } from '../../utils'
1
+ import { chooseMedia, MEDIA_TYPE } from '../media'
4
2
  import { showActionSheet } from '../showActionSheet'
5
3
 
6
- const res = { errMsg: 'chooseImage:ok' }
7
- const defaultOptions = {
8
- count: 9,
9
- sizeType: ['original', 'compressed'],
10
- sourceType: ['album', 'camera']
11
- }
12
-
13
- function getRes(images) {
14
- const tempFilePaths: string[] = []
15
- const tempFiles: any[] = []
16
- images.forEach((item: any) => {
17
- tempFilePaths.push(item.uri)
18
- tempFiles.push({
19
- path: item.uri,
20
- size: item.size
21
- })
22
- })
23
- return { tempFilePaths, tempFiles }
24
- }
25
-
26
- function openCamera(options: Taro.chooseImage.Option): Promise<Taro.chooseImage.SuccessCallbackResult> {
27
- const { success, fail, complete } = options
28
- return new Promise((resolve, reject) => {
29
- SYImagePicker.openCamera({
30
- compressFocusAlpha: true
31
- }, (err, photo: any) => {
32
- if (err) {
33
- const res = {
34
- errMsg: err
35
- }
36
- fail?.(res)
37
- complete?.(res)
38
- reject(res)
39
- } else {
40
- try {
41
- const data = Object.assign({}, getRes(photo), res)
42
- success?.(data)
43
- complete?.(data)
44
- resolve(data)
45
- } catch (error) {
46
- // 错误
47
- reject(error)
48
- }
49
- }
50
- })
51
- })
52
- }
53
-
54
- // NOTE: 调用此函数会改变图片的像素尺寸
55
- function openPicker(options: Taro.chooseImage.Option): Promise<Taro.chooseImage.SuccessCallbackResult> {
56
- const { count: imageCount, sizeType = [],success, complete, fail } = options
57
- return new Promise((resolve, reject) => {
58
- // NOTE:react-native-syan-image-picker 暂不支持 Android 端压缩
59
- SYImagePicker.showImagePicker({
60
- compressFocusAlpha: true,
61
- imageCount,
62
- quality: sizeType[0] === 'compressed' ? 70 : 90,
63
- }, (err, photos: any) => {
64
- if (err) {
65
- const res = {
66
- errMsg: err
67
- }
68
- fail?.(res)
69
- complete?.(res)
70
- reject(res)
71
- } else {
72
- try {
73
- const data = Object.assign({}, getRes(photos), res)
74
- success?.(data)
75
- complete?.(data)
76
- resolve(data)
77
- } catch (error) {
78
- reject(error)
79
- }
80
- }
81
- })
82
- })
4
+ export function chooseImage(opts: Taro.chooseImage.Option): Promise<any> {
5
+ const { sourceType } = opts
6
+ switch (JSON.stringify(sourceType)) {
7
+ case '[\'camera\']':
8
+ case '["camera"]':
9
+ return chooseMedia({...opts, sourceType: ['camera']}, MEDIA_TYPE.IMAGES)
10
+ case '[\'album\']':
11
+ case '["album"]':
12
+ return chooseMedia({...opts, sourceType: ['album']}, MEDIA_TYPE.IMAGES)
13
+ default:
14
+ return showImagePicker(opts)
15
+ }
83
16
  }
84
17
 
85
- /**
86
- * @description Display the image picker.
87
- * @param options
88
- * @returns {Promise}
89
- */
90
- function showImagePicker(options: Taro.chooseImage.Option):Promise<Taro.chooseImage.SuccessCallbackResult> {
18
+ function showImagePicker(options: Taro.chooseImage.Option):any {
91
19
  const { fail, complete } = options
92
- return new Promise((resolve, reject) => {
20
+ return new Promise((resolve, reject) => {
93
21
  showActionSheet({
94
22
  itemList: ['拍照', '从手机相册选择'],
95
- success(res) {
96
- console.log(res.tapIndex)
23
+ success: function (res) {
97
24
  if (res.tapIndex === 0) {
98
- // 不添加 setTimeout 会有一定概率卡死,肯能是与 sibling.destroy() 冲突
99
- setTimeout(() => {
100
- openCamera(options).then(res => {
101
- resolve(res)
102
- }).catch(e => {
103
- fail?.({ errMsg: `chooseImage:${e.message}` })
104
- complete?.({ errMsg: `chooseImage:${e.message}` })
105
- reject(new Error(`chooseImage:${e.message}`))
106
- })
107
- }, 100)
25
+ resolve(chooseMedia({...options, sourceType: ['camera']}, MEDIA_TYPE.IMAGES))
108
26
  }
109
27
  if (res.tapIndex === 1) {
110
- setTimeout(() => {
111
- openPicker(options).then(res => {
112
- resolve(res)
113
- }).catch(e => {
114
- fail?.({ errMsg: `chooseImage:${e.message}` })
115
- complete?.({ errMsg: `chooseImage:${e.message}` })
116
- reject(new Error(`chooseImage:${e.message}`))
117
- })
118
- }, 100)
28
+ resolve(chooseMedia({...options, sourceType: ['album']}, MEDIA_TYPE.IMAGES))
119
29
  }
120
30
  },
121
- fail(res) {
122
- console.log('error: ', res.errMsg)
31
+ fail: function () {
32
+ const res = { errMsg: 'chooseImage:fail cancel' }
33
+ reject(res)
34
+ }
35
+ }).catch(err => {
36
+ console.log('error: ', err.errMsg)
37
+ if (/showActionSheet:fail cancel/.test(err.errMsg)) {
38
+ const res = { errMsg: 'chooseImage:fail cancel' }
39
+ fail?.(res)
40
+ complete?.(res)
41
+ reject(res)
123
42
  }
124
43
  })
125
44
  })
126
45
  }
127
-
128
- /**
129
- * @deprecated
130
- * @description 从本地相册选择图片或使用相机拍照。
131
- * sizeType ❌
132
- * @param options
133
- * @returns {Promise<*>}
134
- */
135
- export function chooseImage(options: Taro.chooseImage.Option): Promise<Taro.chooseImage.SuccessCallbackResult> {
136
- // options must be an Object
137
- const isObject = shouldBeObject(options)
138
- if (!isObject.res) {
139
- const res = { errMsg: `chooseImage${isObject.msg}` }
140
- console.error(res.errMsg)
141
- return Promise.reject(res)
142
- }
143
-
144
- options = Object.assign({}, defaultOptions, options)
145
- const { sourceType } = options
146
-
147
- switch (JSON.stringify(sourceType)) {
148
- case '[\'camera\']':
149
- case '["camera"]':
150
- return openCamera(options)
151
- case '[\'album\']':
152
- case '["album"]':
153
- return openPicker(options)
154
- default:
155
- return showImagePicker(options)
156
- }
157
- }
package/src/setup.ts CHANGED
@@ -1,44 +1,24 @@
1
- import { jest } from '@jest/globals'
2
1
  import '@testing-library/jest-native/extend-expect'
3
- import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock.js'
4
2
  import { NetInfoStateType } from '@react-native-community/netinfo'
5
- import mockRNCAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock.js'
3
+ import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock'
4
+ import mockRNCAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock'
6
5
  import mockRNCDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock'
7
-
6
+ import mockRNCClipboard from '@react-native-clipboard/clipboard/jest/clipboard-mock'
7
+ import mockRNCGeolocation from './__tests__/__mock__/mockRNCGeolocation'
8
+ import mockRNCameraRoll from './__tests__/__mock__/mockRNCCameraRoll'
9
+ jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter')
8
10
  jest.doMock('@react-native-community/netinfo', () => ({ ...mockRNCNetInfo, NetInfoStateType }))
9
11
  jest.doMock('@react-native-async-storage/async-storage', () => mockRNCAsyncStorage)
12
+ jest.doMock('@react-native-community/geolocation', () => mockRNCGeolocation)
13
+ jest.doMock('@react-native-clipboard/clipboard', () => mockRNCClipboard)
10
14
  jest.doMock('react-native-device-info', () => mockRNCDeviceInfo)
15
+ jest.mock('@react-native-camera-roll/camera-roll', () => mockRNCameraRoll)
11
16
 
12
- jest.doMock('react-native', () => {
17
+ jest.mock('react-native', () => {
13
18
  const ReactNative = jest.requireActual('react-native') as any
14
-
15
- // Vibration readonly so you need use defineProperty rewrite this property descriptor.
16
- const Vibration = (jest.requireActual('./__tests__/__mock__/mockVibrate') as any).default
17
- Object.defineProperty(ReactNative, 'Vibration', {
18
- enumerable: false,
19
- configurable: false,
20
- writable: false,
21
- value: Vibration
22
- })
23
-
24
- // mockNativeModules: react-native/Libraries/BatchedBridge/NativeModules
25
- const RNCCameraRoll = (jest.requireActual('./__tests__/__mock__/mockRNCCameraRoll') as any).default
26
- const MockClipboard = (jest.requireActual('./__tests__/__mock__/mockClipboard') as any).default
27
- const RNCGeolocation = (jest.requireActual('./__tests__/__mock__/mockRNCGeolocation') as any).default
28
- ReactNative.NativeModules.RNCCameraRoll = RNCCameraRoll.RNCCameraRoll
29
- ReactNative.NativeModules.RNCCameraRollPermissionModule = RNCCameraRoll.RNCCameraRollPermissionModule
30
- ReactNative.NativeModules.RNCClipboard = new MockClipboard()
31
- ReactNative.NativeModules.RNCGeolocation = RNCGeolocation
32
- Object.defineProperty(ReactNative.NativeModules, 'ImageLoader', {
33
- configurable: true,
34
- enumerable: true,
35
- get: () => ({
36
- prefetchImage: jest.fn(),
37
- getSize: jest.fn((_uri, success: any) => {
38
- process.nextTick(() => success && success(320, 240))
39
- return Promise.resolve([320, 240])
40
- }),
41
- }),
19
+ ReactNative.Image.getSize = jest.fn((_uri, success: any) => {
20
+ setTimeout(() => success && success(320, 240))
21
+ return Promise.resolve([320, 240])
42
22
  })
43
23
  return ReactNative
44
24
  })
@@ -1,47 +0,0 @@
1
- export default class MockStorage {
2
- constructor (cache = {}) {
3
- this.storageCache = cache
4
- }
5
-
6
- setItem = jest.fn((key, value) => {
7
- return new Promise((resolve, reject) => {
8
- return (typeof key !== 'string' || typeof value !== 'string')
9
- ? reject(new Error('key and value must be string'))
10
- : resolve(this.storageCache[key] = value)
11
- })
12
- });
13
-
14
- getItem = jest.fn((key) => {
15
- return new Promise((resolve) => {
16
- // eslint-disable-next-line
17
- return this.storageCache.hasOwnProperty(key)
18
- ? resolve(this.storageCache[key])
19
- : resolve(null)
20
- })
21
- })
22
-
23
- removeItem = jest.fn((key) => {
24
- return new Promise((resolve, reject) => {
25
- return this.storageCache.hasOwnProperty(key)
26
- ? resolve(delete this.storageCache[key])
27
- : reject(new Error('No such key!'))
28
- })
29
- })
30
-
31
- clear = jest.fn(() => {
32
- return new Promise((resolve) => resolve(this.storageCache = {}))
33
- })
34
-
35
- getAllKeys = jest.fn(() => {
36
- return new Promise((resolve) => resolve(Object.keys(this.storageCache)))
37
- })
38
-
39
- multiRemove = jest.fn((keys) => {
40
- return new Promise((resolve) => {
41
- keys.forEach(key => {
42
- this.removeItem(key)
43
- })
44
- resolve()
45
- })
46
- })
47
- }
@@ -1,15 +0,0 @@
1
- class Clipboard {
2
- constructor () {
3
- this.clipboardData = ''
4
- }
5
-
6
- setString (str) {
7
- this.clipboardData = str
8
- }
9
-
10
- getString () {
11
- return Promise.resolve(this.clipboardData)
12
- }
13
- }
14
-
15
- export default Clipboard
@@ -1,20 +0,0 @@
1
- const geolocation = {
2
- getCurrentPosition (callback) {
3
- const res = {}
4
- const coords = {
5
- latitude: 0,
6
- longitude: 0,
7
- speed: 0,
8
- accuracy: 0,
9
- altitude: 0
10
- }
11
- res.coords = coords
12
- res.timestamp = Date.now()
13
- callback && callback(res)
14
- }
15
- }
16
-
17
- const navigator = {}
18
- navigator.geolocation = geolocation
19
-
20
- export default navigator
@@ -1,59 +0,0 @@
1
- // eslint-disable-next-line
2
- const noop = () => {}
3
-
4
- export default class NetInfo {
5
- constructor (connectionType = 'wifi', effectiveConnectionType = '4g') {
6
- this.connectionType = connectionType
7
- this.effectiveConnectionType = effectiveConnectionType
8
- this.eventMaps = {}
9
- this.connectedStatus = connectionType === 'wifi' || connectionType === 'cellular'
10
- }
11
-
12
- isConnected = {
13
- fetch: this.fetch.bind(this)
14
- }
15
-
16
- fetch () {
17
- return new Promise((resolve) => {
18
- resolve({
19
- type: this.connectionType,
20
- })
21
- })
22
- }
23
-
24
- getConnectionInfo () {
25
- return new Promise((resolve) => {
26
- const res = {}
27
- res.type = this.connectionType
28
- res.effectiveType = this.effectiveConnectionType
29
- resolve(res)
30
- })
31
- }
32
-
33
- addEventListener (eventName, listener = noop) {
34
- this.eventMaps[eventName] = listener
35
- }
36
-
37
- removeEventListener (eventName, listener = noop) {
38
- if (this.eventMaps[eventName] === listener) {
39
- delete this.eventMaps[eventName]
40
- }
41
- }
42
-
43
- // 纯粹为了模拟测试用,主动更改网络状态
44
- changeNetworkType (connectionType, effectiveConnectionType = '4g') {
45
- if (this.connectionType !== connectionType) {
46
- this.connectionType = connectionType
47
- if (connectionType === 'cellular') {
48
- this.effectiveConnectionType = effectiveConnectionType
49
- }
50
- this.connectedStatus = connectionType === 'wifi' || connectionType === 'cellular'
51
-
52
- const res = {}
53
- res.type = this.connectionType
54
- res.effectiveType = this.effectiveConnectionType
55
- const fn = this.eventMaps.connectionChange
56
- fn && fn(res)
57
- }
58
- }
59
- }
@@ -1,6 +0,0 @@
1
- const Vibration = {
2
- vibrate: jest.fn(),
3
- cancel: jest.fn(),
4
- }
5
-
6
- export default Vibration