@norcy/react-native-toolkit 0.1.85 → 0.1.86

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.
@@ -95,17 +95,13 @@ const _handleReadMessages = items => {
95
95
  item.updatedAt = new Date().toString();
96
96
  }
97
97
  } else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
98
+ // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
98
99
  const freConfig = {
99
100
  key: item.key,
100
101
  limit: item.limit,
101
102
  gap: item.gap
102
103
  };
103
104
  if (_Frequence.FrequenceManager.canRun(freConfig)) {
104
- if (freConfig.gap) {
105
- _Frequence.FrequenceManager.markFinishForTime(freConfig);
106
- } else if (freConfig.limit) {
107
- _Frequence.FrequenceManager.markFinishForCount(freConfig);
108
- }
109
105
  item.isRead = false;
110
106
  item.updatedAt = new Date().toString();
111
107
  }
@@ -180,6 +176,19 @@ const MessageModel = exports.MessageModel = {
180
176
  return;
181
177
  }
182
178
  message.isRead = true;
179
+ if (message.key) {
180
+ const freConfig = {
181
+ key: message.key,
182
+ limit: message.limit,
183
+ gap: message.gap
184
+ };
185
+ // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
186
+ if (freConfig.gap) {
187
+ _Frequence.FrequenceManager.markFinishForTime(freConfig);
188
+ } else if (freConfig.limit) {
189
+ _Frequence.FrequenceManager.markFinishForCount(freConfig);
190
+ }
191
+ }
183
192
  const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
184
193
  readMsgs.push(message.objectId);
185
194
  await _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.Messages, readMsgs);
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","markFinishForTime","markFinishForCount","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListenerOnce","Notification","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\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 Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.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 _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListenerOnce","Notification","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\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 Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.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 _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
@@ -89,17 +89,13 @@ const _handleReadMessages = items => {
89
89
  item.updatedAt = new Date().toString();
90
90
  }
91
91
  } else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
92
+ // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
92
93
  const freConfig = {
93
94
  key: item.key,
94
95
  limit: item.limit,
95
96
  gap: item.gap
96
97
  };
97
98
  if (FrequenceManager.canRun(freConfig)) {
98
- if (freConfig.gap) {
99
- FrequenceManager.markFinishForTime(freConfig);
100
- } else if (freConfig.limit) {
101
- FrequenceManager.markFinishForCount(freConfig);
102
- }
103
99
  item.isRead = false;
104
100
  item.updatedAt = new Date().toString();
105
101
  }
@@ -174,6 +170,19 @@ export const MessageModel = {
174
170
  return;
175
171
  }
176
172
  message.isRead = true;
173
+ if (message.key) {
174
+ const freConfig = {
175
+ key: message.key,
176
+ limit: message.limit,
177
+ gap: message.gap
178
+ };
179
+ // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
180
+ if (freConfig.gap) {
181
+ FrequenceManager.markFinishForTime(freConfig);
182
+ } else if (freConfig.limit) {
183
+ FrequenceManager.markFinishForCount(freConfig);
184
+ }
185
+ }
177
186
  const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
178
187
  readMsgs.push(message.objectId);
179
188
  await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","markFinishForTime","markFinishForCount","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListenerOnce","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\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 Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.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 _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListenerOnce","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\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 Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.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 _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norcy/react-native-toolkit",
3
- "version": "0.1.85",
3
+ "version": "0.1.86",
4
4
  "description": "My Toolkit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -120,18 +120,13 @@ const _handleReadMessages = (items: Message[]): Message[] => {
120
120
  item.updatedAt = new Date().toString();
121
121
  }
122
122
  } else if (item.key?.length) {
123
+ // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
123
124
  const freConfig: FreConfigType = {
124
125
  key: item.key,
125
126
  limit: item.limit,
126
127
  gap: item.gap,
127
128
  };
128
129
  if (FrequenceManager.canRun(freConfig)) {
129
- if (freConfig.gap) {
130
- FrequenceManager.markFinishForTime(freConfig);
131
- } else if (freConfig.limit) {
132
- FrequenceManager.markFinishForCount(freConfig);
133
- }
134
-
135
130
  item.isRead = false;
136
131
  item.updatedAt = new Date().toString();
137
132
  }
@@ -225,6 +220,21 @@ export const MessageModel = {
225
220
  return;
226
221
  }
227
222
  message.isRead = true;
223
+
224
+ if (message.key) {
225
+ const freConfig: FreConfigType = {
226
+ key: message.key,
227
+ limit: message.limit,
228
+ gap: message.gap,
229
+ };
230
+ // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
231
+ if (freConfig.gap) {
232
+ FrequenceManager.markFinishForTime(freConfig);
233
+ } else if (freConfig.limit) {
234
+ FrequenceManager.markFinishForCount(freConfig);
235
+ }
236
+ }
237
+
228
238
  const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
229
239
  readMsgs.push(message.objectId);
230
240
  await PrefData.setValue(BuildInPrefs.Messages, readMsgs);