dingtalk-jsapi
Version:
钉钉 模块化 多端统一 API
1 lines • 3.54 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.Channel=exports.getAllChannelNamespaces=exports.destroyChannel=exports.getChannel=void 0;var mobile_1=require("../entry/mobile"),env_1=require("../lib/env"),channels={};exports.getChannel=function(e){return channels[e]||(channels[e]=new Channel(e)),channels[e]},exports.destroyChannel=function(e){var n;null===(n=channels[e])||void 0===n||n.destroy(),delete channels[e]},exports.getAllChannelNamespaces=function(){return Object.keys(channels)};var env=env_1.getENV(),Channel=function(){function e(e){var n=this;this.subscribedMethodsPromise={},this.unSubscribedMethodsPromise={},this.lastCacheMap={},this.listenerMap={},this.trySubscribeEvent=function(e){return n.subscribedMethodsPromise[e]||(n.subscribedMethodsPromise[e]=mobile_1._invoke("internal.channel.subscribe",{namespace:n.namespace,eventName:e})),n.subscribedMethodsPromise[e]},this.tryUnSubscribeEvent=function(e){if(n.listenerMap[e]&&0===n.listenerMap[e].length&&n.subscribedMethodsPromise[e])return n.unSubscribedMethodsPromise[e]||(n.unSubscribedMethodsPromise[e]=n.subscribedMethodsPromise[e].then(function(){return mobile_1._invoke("internal.channel.unsubscribe",{namespace:n.namespace,eventName:e}).then(function(){return delete n.lastCacheMap[e],delete n.subscribedMethodsPromise[e],delete n.unSubscribedMethodsPromise[e],Promise.resolve()})})),n.unSubscribedMethodsPromise[e]},this.addDTChannelEventListener=function(e){env.platform!==env_1.ENV_ENUM.ios&&env.platform!==env_1.ENV_ENUM.android&&env.platform!==env_1.ENV_ENUM.pc&&env.platform!==env_1.ENV_ENUM.harmony||env.appType!==env_1.APP_TYPE.MINI_APP||"function"!=typeof dd.addDTChannelEventListener?mobile_1.on("dtChannelEvent",function(n){env.platform===env_1.ENV_ENUM.pc?e(n):n&&"object"==typeof n.detail?e(n.detail):n&&"object"==typeof n.data&&e(n.data)}):dd.addDTChannelEventListener(function(n){e(n.data)})},this.namespace=e,this.addDTChannelEventListener(function(e){n.publishCurrentInnerEvent(e)})}return e.prototype.destroy=function(){var e=this;Object.keys(this.listenerMap).forEach(function(n){if(e.listenerMap[n]){e.listenerMap[n].map(function(e){return e.listener}).forEach(function(t){return e.unsubscribe(n,t)})}})},e.prototype.subscribe=function(e,n,t){var s=this;if(!e||"function"!=typeof n)throw new Error("eventName is null or listener is not a function, subscribe fail");var i=this.listenerMap[e];if(i){-1===i.findIndex(function(e){return e.listener===n})&&i.push({listener:n,options:t})}else this.listenerMap[e]=[{listener:n,options:t}];this.trySubscribeEvent(e).then(function(i){s.lastCacheMap[e]||"object"!=typeof i||i.eventName!==e?s.lastCacheMap[e]&&(null===t||void 0===t?void 0:t.useCache)&&n(s.lastCacheMap[e]):s.publishCurrentInnerEvent(i)})},e.prototype.unsubscribe=function(e,n){if(!e||"function"!=typeof n)throw new Error("eventName is null or listener is not a function, unsubscribe fail");var t=this.listenerMap[e];if(Array.isArray(t)){var s=t.findIndex(function(e){return e.listener===n});-1!==s&&t.splice(s,1)}},e.prototype.publish=function(e,n,t){return mobile_1._invoke("internal.channel.publish",{namespace:this.namespace,eventName:e,data:n,shouldUpdateCache:t&&t.shouldUpdateCache||void 0})},e.prototype.publishCurrentInnerEvent=function(e){if(e.data&&e.namespace===this.namespace){var n=e.eventName;this.lastCacheMap[n]=e,this.listenerMap[n]&&this.listenerMap[n].forEach(function(n){(!0!==e.isCached||!0===e.isCached&&n.options&&n.options.useCache)&&n.listener(e)})}},e}();exports.Channel=Channel;