| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 
							- /* @flow */
 - 
 - import { Platform } from '../react';
 - import {
 -     NoMobileApp,
 -     PluginRequiredBrowser,
 -     UnsupportedDesktopBrowser,
 -     UnsupportedMobileBrowser
 - } from '../../unsupported-browser';
 - 
 - declare var APP: Object;
 - declare var interfaceConfig: Object;
 - declare var JitsiMeetJS: Object;
 - 
 - /**
 -  * Array of rules defining whether we should intercept component to render
 -  * or not.
 -  *
 -  * @private
 -  * @param {Object} state - Object containing current Redux state.
 -  * @returns {ReactElement|void}
 -  * @type {Function[]}
 -  */
 - const _RULES = [
 - 
 -     /**
 -      * This rule describes case when user opens application using mobile
 -      * browser. In order to promote the app, we choose to suggest the mobile
 -      * app even if the browser supports the app (e.g. Google Chrome with
 -      * WebRTC support on Android).
 -      *
 -      * @param {Object} state - Redux state of the app.
 -      * @returns {UnsupportedMobileBrowser|void} If the rule is satisfied then
 -      * we should intercept existing component by UnsupportedMobileBrowser.
 -      */
 -     () => {
 -         const OS = Platform.OS;
 - 
 -         if (OS === 'android' || OS === 'ios') {
 -             const mobileAppPromo
 -                 = typeof interfaceConfig === 'object'
 -                     && interfaceConfig.MOBILE_APP_PROMO;
 - 
 -             return (
 -                 typeof mobileAppPromo === 'undefined' || Boolean(mobileAppPromo)
 -                     ? UnsupportedMobileBrowser
 -                     : NoMobileApp);
 -         }
 -     },
 -     state => {
 -         const { webRTCReady } = state['features/base/lib-jitsi-meet'];
 - 
 -         switch (typeof webRTCReady) {
 -         case 'boolean':
 -             if (webRTCReady === false) {
 -                 return UnsupportedDesktopBrowser;
 -             }
 -             break;
 - 
 -         case 'undefined':
 -             // If webRTCReady is not set, then we cannot use it to take a
 -             // decision.
 -             break;
 - 
 -         default:
 -             return PluginRequiredBrowser;
 -         }
 -     }
 - ];
 - 
 - /**
 -  * Utility method that responsible for intercepting of route components based on
 -  * the set of defined rules.
 -  *
 -  * @param {Object|Function} stateOrGetState - Either Redux state object or
 -  * getState() function.
 -  * @param {ReactElement} component - Current route component to render.
 -  * @returns {ReactElement} If any of rules is satisfied returns intercepted
 -  * component.
 -  */
 - export function interceptComponent(
 -         stateOrGetState: Object,
 -         component: ReactElement<*>) {
 -     let result;
 -     const state
 -         = typeof stateOrGetState === 'function'
 -             ? stateOrGetState()
 -             : stateOrGetState;
 - 
 -     for (const rule of _RULES) {
 -         result = rule(state);
 -         if (result) {
 -             break;
 -         }
 -     }
 - 
 -     return result || component;
 - }
 
 
  |