@norcy/react-native-toolkit 0.1.112 → 0.1.113

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.
package/.DS_Store CHANGED
Binary file
package/README.md CHANGED
@@ -51,29 +51,4 @@ yarn example android
51
51
 
52
52
  ```sh
53
53
  yarn example ios
54
- ```
55
-
56
-
57
-
58
-
59
- ### Linting and tests
60
-
61
- [ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/)
62
-
63
- We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing.
64
-
65
- Our pre-commit hooks verify that the linter and tests pass when committing.
66
-
67
- ### Scripts
68
-
69
- The `package.json` file contains various scripts for common tasks:
70
-
71
- - `yarn bootstrap`: setup project by installing all dependencies and pods.
72
- - `yarn typescript`: type-check files with TypeScript.
73
- - `yarn lint`: lint files with ESLint.
74
- - `yarn test`: run unit tests with Jest.
75
- - `yarn example start`: start the Metro server for the example app.
76
- - `yarn example android`: run the example app on Android.
77
- - `yarn example ios`: run the example app on iOS.
78
-
79
-
54
+ ```
Binary file
@@ -7,6 +7,7 @@ exports.ConfigDataModel = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _reactNativeDeviceInfo = require("react-native-device-info");
9
9
  var _DevConfig = require("./DevConfig");
10
+ var _LoginManager = require("./LoginManager");
10
11
  var _Notification = require("./Notification");
11
12
  var _PrefData = require("./PrefData");
12
13
  var _VipAndroidManager = require("./VipAndroidManager");
@@ -78,8 +79,7 @@ const handleVersionInfo = () => {
78
79
  };
79
80
  let isDataReady = false;
80
81
  let isNetwordDataReady = false;
81
- let OnlineItems = [];
82
- const _handleResponse = () => {
82
+ const _handleResponse = OnlineItems => {
83
83
  if (!isNetwordDataReady) {
84
84
  return;
85
85
  }
@@ -94,6 +94,8 @@ const _handleResponse = () => {
94
94
  _VipAndroidManager.VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));
95
95
  ConfigDataModel.emitChange();
96
96
  };
97
+
98
+ // ConfigDataModel 的 Config 是支持后台配置多条同一个 Key 的,按版本区分
97
99
  const ConfigDataModel = exports.ConfigDataModel = {
98
100
  init: defaultValues => {
99
101
  MyItems = defaultValues;
@@ -106,7 +108,6 @@ const ConfigDataModel = exports.ConfigDataModel = {
106
108
  if (!isAuto && user && !error) {
107
109
  isDataReady = false;
108
110
  isNetwordDataReady = false;
109
- OnlineItems = [];
110
111
  ConfigDataModel.fetch();
111
112
  }
112
113
  });
@@ -122,8 +123,7 @@ const ConfigDataModel = exports.ConfigDataModel = {
122
123
  query.find().then(items => {
123
124
  console.log('Config 抓取完毕');
124
125
  isNetwordDataReady = true;
125
- OnlineItems = items;
126
- _handleResponse();
126
+ _handleResponse(items);
127
127
  }).catch(e => {
128
128
  console.error(e);
129
129
  });
@@ -150,6 +150,20 @@ const ConfigDataModel = exports.ConfigDataModel = {
150
150
  return;
151
151
  }
152
152
  eventEmitter.on('change', callback);
153
+ },
154
+ shouldEnableByRate: (enable, rate) => {
155
+ var _LoginManager$current, _LoginManager$current2;
156
+ if (!enable) {
157
+ return false;
158
+ }
159
+ // rate 不传,默认为全量
160
+ const r = rate !== null && rate !== void 0 ? rate : 1;
161
+ if (r <= 0) {
162
+ return false;
163
+ }
164
+ // ID 最后一位是 16 进制(0-f),未登录默认为全量
165
+ const lastChar = (_LoginManager$current = (_LoginManager$current2 = _LoginManager.LoginManager.currentUser()) === null || _LoginManager$current2 === void 0 || (_LoginManager$current2 = _LoginManager$current2.AVUser) === null || _LoginManager$current2 === void 0 || (_LoginManager$current2 = _LoginManager$current2.get('objectId')) === null || _LoginManager$current2 === void 0 ? void 0 : _LoginManager$current2.slice(-1)) !== null && _LoginManager$current !== void 0 ? _LoginManager$current : '0';
166
+ return '0123456789abcdef'.indexOf(lastChar.toLowerCase()) < r * 16;
153
167
  }
154
168
  };
155
169
  //# sourceMappingURL=ConfigDataModel.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_DevConfig","_Notification","_PrefData","_VipAndroidManager","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","getReadableVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_updateKeyValues","value","handleVersionInfo","key","Platform","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","DevConfig","hasValue","BuildInPrefs","DevDanger","getValue","isDataReady","isNetwordDataReady","OnlineItems","_handleResponse","console","log","VipAndroidManager","setOfferings","emitChange","exports","init","defaultValues","Notification","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","e","getVersionConfig","emit","addListenerOnce","callback","once","on"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = true;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.on('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_DevConfig","_LoginManager","_Notification","_PrefData","_VipAndroidManager","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","getReadableVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_updateKeyValues","value","handleVersionInfo","key","Platform","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","DevConfig","hasValue","BuildInPrefs","DevDanger","getValue","isDataReady","isNetwordDataReady","_handleResponse","OnlineItems","console","log","VipAndroidManager","setOfferings","emitChange","exports","init","defaultValues","Notification","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","e","getVersionConfig","emit","addListenerOnce","callback","once","on","shouldEnableByRate","enable","rate","_LoginManager$current","_LoginManager$current2","r","lastChar","LoginManager","currentUser","AVUser","slice","indexOf","toLowerCase"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = true;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isNetwordDataReady = false;\n\nconst _handleResponse = (OnlineItems: Object[]) => {\n if (!isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));\n ConfigDataModel.emitChange();\n};\n\n// ConfigDataModel 的 Config 是支持后台配置多条同一个 Key 的,按版本区分\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isNetwordDataReady = false;\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n _handleResponse(items);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.on('change', callback);\n },\n\n shouldEnableByRate: (enable?: boolean, rate?: number) => {\n if (!enable) {\n return false;\n }\n // rate 不传,默认为全量\n const r = rate ?? 1;\n if (r <= 0) {\n return false;\n }\n // ID 最后一位是 16 进制(0-f),未登录默认为全量\n const lastChar =\n LoginManager.currentUser()?.AVUser?.get('objectId')?.slice(-1) ?? '0';\n return '0123456789abcdef'.indexOf(lastChar.toLowerCase()) < r * 16;\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
@@ -140,7 +140,9 @@ const Tool = exports.Tool = {
140
140
  return () => setValue(value => value + 1);
141
141
  },
142
142
  showToast: toast => {
143
- _reactNativeSimpleToast.default.showWithGravity(toast, _reactNativeSimpleToast.default.SHORT, _reactNativeSimpleToast.default.CENTER);
143
+ if (toast) {
144
+ _reactNativeSimpleToast.default.showWithGravity(toast, _reactNativeSimpleToast.default.SHORT, _reactNativeSimpleToast.default.CENTER);
145
+ }
144
146
  },
145
147
  alertWithConfig: config => {
146
148
  const alertData = _getAlertDataFromConfig(config);
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeToolkit","require","_cameraroll","_interopRequireDefault","_react","_reactNative","_reactNativeDeviceInfo","_reactNativeSimpleToast","_PrefData","_ReportUtil","obj","__esModule","default","ToolkitConfig","exports","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","ReportUtil","AppLink","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","Alert","alert","goAppStoreReview","Platform","OS","Linking","canOpenURL","then","supported","openURL","iOSReviewUrl","NativeModules","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PermissionsAndroid","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","status","request","requestManagePermission","savePicture","albumName","console","log","errorCode","errMsg","CameraRoll","save","type","album","AppName","error","JSON","stringify","extension","ReactNativeBlobUtil","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","PrefData","BuildInPrefs","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","Vibration","isPad","isTablet","isHorizontalPad","isLandscapeSync"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport { isLandscapeSync, isTablet } from 'react-native-device-info';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n\n alertWithConfig: (config: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (url: string, albumName?: string) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission())\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNativeToolkit","require","_cameraroll","_interopRequireDefault","_react","_reactNative","_reactNativeDeviceInfo","_reactNativeSimpleToast","_PrefData","_ReportUtil","obj","__esModule","default","ToolkitConfig","exports","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","ReportUtil","AppLink","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","Alert","alert","goAppStoreReview","Platform","OS","Linking","canOpenURL","then","supported","openURL","iOSReviewUrl","NativeModules","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PermissionsAndroid","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","status","request","requestManagePermission","savePicture","albumName","console","log","errorCode","errMsg","CameraRoll","save","type","album","AppName","error","JSON","stringify","extension","ReactNativeBlobUtil","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","PrefData","BuildInPrefs","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","Vibration","isPad","isTablet","isHorizontalPad","isLandscapeSync"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport { isLandscapeSync, isTablet } from 'react-native-device-info';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (url: string, albumName?: string) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission())\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n};\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Platform } from 'react-native';
2
2
  import { getReadableVersion } from 'react-native-device-info';
3
3
  import { DevConfig } from './DevConfig';
4
+ import { LoginManager } from './LoginManager';
4
5
  import { Notification } from './Notification';
5
6
  import { BuildInPrefs } from './PrefData';
6
7
  import { VipAndroidManager } from './VipAndroidManager';
@@ -72,8 +73,7 @@ const handleVersionInfo = () => {
72
73
  };
73
74
  let isDataReady = false;
74
75
  let isNetwordDataReady = false;
75
- let OnlineItems = [];
76
- const _handleResponse = () => {
76
+ const _handleResponse = OnlineItems => {
77
77
  if (!isNetwordDataReady) {
78
78
  return;
79
79
  }
@@ -88,6 +88,8 @@ const _handleResponse = () => {
88
88
  VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));
89
89
  ConfigDataModel.emitChange();
90
90
  };
91
+
92
+ // ConfigDataModel 的 Config 是支持后台配置多条同一个 Key 的,按版本区分
91
93
  const ConfigDataModel = {
92
94
  init: defaultValues => {
93
95
  MyItems = defaultValues;
@@ -100,7 +102,6 @@ const ConfigDataModel = {
100
102
  if (!isAuto && user && !error) {
101
103
  isDataReady = false;
102
104
  isNetwordDataReady = false;
103
- OnlineItems = [];
104
105
  ConfigDataModel.fetch();
105
106
  }
106
107
  });
@@ -116,8 +117,7 @@ const ConfigDataModel = {
116
117
  query.find().then(items => {
117
118
  console.log('Config 抓取完毕');
118
119
  isNetwordDataReady = true;
119
- OnlineItems = items;
120
- _handleResponse();
120
+ _handleResponse(items);
121
121
  }).catch(e => {
122
122
  console.error(e);
123
123
  });
@@ -144,6 +144,20 @@ const ConfigDataModel = {
144
144
  return;
145
145
  }
146
146
  eventEmitter.on('change', callback);
147
+ },
148
+ shouldEnableByRate: (enable, rate) => {
149
+ var _LoginManager$current, _LoginManager$current2;
150
+ if (!enable) {
151
+ return false;
152
+ }
153
+ // rate 不传,默认为全量
154
+ const r = rate !== null && rate !== void 0 ? rate : 1;
155
+ if (r <= 0) {
156
+ return false;
157
+ }
158
+ // ID 最后一位是 16 进制(0-f),未登录默认为全量
159
+ const lastChar = (_LoginManager$current = (_LoginManager$current2 = LoginManager.currentUser()) === null || _LoginManager$current2 === void 0 || (_LoginManager$current2 = _LoginManager$current2.AVUser) === null || _LoginManager$current2 === void 0 || (_LoginManager$current2 = _LoginManager$current2.get('objectId')) === null || _LoginManager$current2 === void 0 ? void 0 : _LoginManager$current2.slice(-1)) !== null && _LoginManager$current !== void 0 ? _LoginManager$current : '0';
160
+ return '0123456789abcdef'.indexOf(lastChar.toLowerCase()) < r * 16;
147
161
  }
148
162
  };
149
163
  export { ConfigDataModel };
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","getReadableVersion","DevConfig","Notification","BuildInPrefs","VipAndroidManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","hasValue","DevDanger","getValue","isDataReady","isNetwordDataReady","OnlineItems","_handleResponse","console","log","setOfferings","emitChange","init","defaultValues","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","e","getVersionConfig","emit","addListenerOnce","callback","once","on"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = true;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.on('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
1
+ {"version":3,"names":["Platform","getReadableVersion","DevConfig","LoginManager","Notification","BuildInPrefs","VipAndroidManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","hasValue","DevDanger","getValue","isDataReady","isNetwordDataReady","_handleResponse","OnlineItems","console","log","setOfferings","emitChange","init","defaultValues","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","e","getVersionConfig","emit","addListenerOnce","callback","once","on","shouldEnableByRate","enable","rate","_LoginManager$current","_LoginManager$current2","r","lastChar","currentUser","AVUser","slice","indexOf","toLowerCase"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = true;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isNetwordDataReady = false;\n\nconst _handleResponse = (OnlineItems: Object[]) => {\n if (!isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setOfferings(ConfigDataModel.get('vip_android_offerings'));\n ConfigDataModel.emitChange();\n};\n\n// ConfigDataModel 的 Config 是支持后台配置多条同一个 Key 的,按版本区分\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isNetwordDataReady = false;\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n _handleResponse(items);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.on('change', callback);\n },\n\n shouldEnableByRate: (enable?: boolean, rate?: number) => {\n if (!enable) {\n return false;\n }\n // rate 不传,默认为全量\n const r = rate ?? 1;\n if (r <= 0) {\n return false;\n }\n // ID 最后一位是 16 进制(0-f),未登录默认为全量\n const lastChar =\n LoginManager.currentUser()?.AVUser?.get('objectId')?.slice(-1) ?? '0';\n return '0123456789abcdef'.indexOf(lastChar.toLowerCase()) < r * 16;\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
@@ -132,7 +132,9 @@ export const Tool = {
132
132
  return () => setValue(value => value + 1);
133
133
  },
134
134
  showToast: toast => {
135
- Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
135
+ if (toast) {
136
+ Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
137
+ }
136
138
  },
137
139
  alertWithConfig: config => {
138
140
  const alertData = _getAlertDataFromConfig(config);
@@ -1 +1 @@
1
- {"version":3,"names":["AppLink","CameraRoll","useState","Alert","Linking","NativeModules","PermissionsAndroid","Platform","Vibration","isLandscapeSync","isTablet","Toast","BuildInPrefs","PrefData","ReportUtil","ToolkitConfig","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","alert","goAppStoreReview","OS","canOpenURL","then","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","status","request","requestManagePermission","savePicture","albumName","console","log","errorCode","errMsg","save","type","album","AppName","error","JSON","stringify","extension","ReactNativeBlobUtil","require","default","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","isPad","isHorizontalPad"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport { isLandscapeSync, isTablet } from 'react-native-device-info';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n\n alertWithConfig: (config: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (url: string, albumName?: string) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission())\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["AppLink","CameraRoll","useState","Alert","Linking","NativeModules","PermissionsAndroid","Platform","Vibration","isLandscapeSync","isTablet","Toast","BuildInPrefs","PrefData","ReportUtil","ToolkitConfig","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","alert","goAppStoreReview","OS","canOpenURL","then","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","status","request","requestManagePermission","savePicture","albumName","console","log","errorCode","errMsg","save","type","album","AppName","error","JSON","stringify","extension","ReactNativeBlobUtil","require","default","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","isPad","isHorizontalPad"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport { isLandscapeSync, isTablet } from 'react-native-device-info';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (url: string, albumName?: string) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission())\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n};\n"],"mappings":"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"}
@@ -14,5 +14,6 @@ declare const ConfigDataModel: {
14
14
  emitChange: () => void;
15
15
  addListenerOnce: (callback: Function) => void;
16
16
  addListener: (callback: Function) => void;
17
+ shouldEnableByRate: (enable?: boolean, rate?: number) => boolean;
17
18
  };
18
19
  export { ConfigDataModel };
@@ -52,7 +52,7 @@ export declare const Tool: {
52
52
  humanFileSize: (bytes: number, si?: boolean, dp?: number) => string;
53
53
  useForceUpdate: () => () => void;
54
54
  showToast: (toast: string) => void;
55
- alertWithConfig: (config: AlertConfig) => boolean;
55
+ alertWithConfig: (config?: AlertConfig) => boolean;
56
56
  goAppStoreReview: () => void;
57
57
  goUpgrade: () => void;
58
58
  notifyMe: (text: string) => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norcy/react-native-toolkit",
3
- "version": "0.1.112",
3
+ "version": "0.1.113",
4
4
  "description": "My Toolkit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",