import createCallbacks from 'uni-helpers/callbacks' import { callPageHook } from '../plugins/util' export default function initSubscribe (subscribe, { getApp, getCurrentPages }) { function createPageEvent (eventType) { return function (args, pageId) { pageId = parseInt(pageId) const pages = getCurrentPages() const page = pages.find(page => page.$page.id === pageId) if (page) { callPageHook(page, eventType, args) } else if (process.env.NODE_ENV !== 'production') { console.error(`Not Found:Page[${pageId}]`) } } } const requestComponentInfoCallbacks = createCallbacks('requestComponentInfo') function onRequestComponentInfo ({ reqId, res }) { const callback = requestComponentInfoCallbacks.pop(reqId) if (callback) { callback(res) } } const requestComponentObserverCallbacks = createCallbacks('requestComponentObserver') function onRequestComponentObserver ({ reqId, reqEnd, res }) { const callback = requestComponentObserverCallbacks.get(reqId) if (callback) { if (reqEnd) { requestComponentObserverCallbacks.pop(reqId) return } callback(res) } } const requestMediaQueryObserverCallbacks = createCallbacks('requestMediaQueryObserver') function onRequestMediaQueryObserver ({ reqId, reqEnd, res }) { const callback = requestMediaQueryObserverCallbacks.get(reqId) if (callback) { if (reqEnd) { requestMediaQueryObserverCallbacks.pop(reqId) return } callback(res) } } if (__PLATFORM__ === 'h5') { subscribe('onPageReady', createPageEvent('onReady')) } subscribe('onPageScroll', createPageEvent('onPageScroll')) subscribe('onReachBottom', createPageEvent('onReachBottom')) subscribe('onRequestComponentInfo', onRequestComponentInfo) subscribe('onRequestComponentObserver', onRequestComponentObserver) subscribe('onRequestMediaQueryObserver', onRequestMediaQueryObserver) }