Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

functions.web.js 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // @flow
  2. import { toState } from '../base/redux';
  3. import { getDeepLinkingPage } from '../deep-linking';
  4. import { UnsupportedDesktopBrowser } from '../unsupported-browser';
  5. import {
  6. // eslint-disable-next-line camelcase
  7. _getRouteToRender as _super_getRouteToRender
  8. } from './getRouteToRender';
  9. declare var APP: Object;
  10. declare var interfaceConfig: Object;
  11. declare var loggingConfig: Object;
  12. /**
  13. * Array of rules defining whether we should {@link _interceptComponent} to
  14. * render.
  15. *
  16. * @private
  17. * @param {Object} state - Object containing current redux state.
  18. * @returns {Promise<ReactElement>|void}
  19. * @type {Function[]}
  20. */
  21. const _INTERCEPT_COMPONENT_RULES = [
  22. getDeepLinkingPage,
  23. state => {
  24. const { webRTCReady } = state['features/base/lib-jitsi-meet'];
  25. if (webRTCReady === false) {
  26. return Promise.resolve(UnsupportedDesktopBrowser);
  27. }
  28. return Promise.resolve();
  29. }
  30. ];
  31. export * from './functions.any';
  32. /**
  33. * Determines which route is to be rendered in order to depict a specific redux
  34. * store.
  35. *
  36. * @param {(Object|Function)} stateOrGetState - The redux state or
  37. * {@link getState} function.
  38. * @returns {Promise<Route>}
  39. */
  40. export function _getRouteToRender(stateOrGetState: Object | Function): Object {
  41. const route = _super_getRouteToRender(stateOrGetState);
  42. // Intercepts route components if any of component interceptor rules is
  43. // satisfied.
  44. return _interceptComponent(stateOrGetState, route.component).then(
  45. (component: React$Element<*>) => {
  46. route.component = component;
  47. return route;
  48. }, () => Promise.resolve(route));
  49. }
  50. /**
  51. * Intercepts route components based on a {@link _INTERCEPT_COMPONENT_RULES}.
  52. *
  53. * @param {Object|Function} stateOrGetState - The redux state or
  54. * {@link getState} function.
  55. * @param {ReactElement} component - Current route component to render.
  56. * @private
  57. * @returns {Promise<ReactElement>} If any of the pre-defined rules is
  58. * satisfied, returns intercepted component.
  59. */
  60. function _interceptComponent(
  61. stateOrGetState: Object | Function,
  62. component: React$Element<*>) {
  63. const state = toState(stateOrGetState);
  64. const promises = [];
  65. _INTERCEPT_COMPONENT_RULES.forEach(rule => {
  66. promises.push(rule(state));
  67. });
  68. return Promise.all(promises).then(
  69. results =>
  70. results.find(result => typeof result !== 'undefined') || component,
  71. () => Promise.resolve(component));
  72. }
  73. /**
  74. * Returns application name.
  75. *
  76. * @returns {string} The application name.
  77. */
  78. export function getName() {
  79. return interfaceConfig.APP_NAME;
  80. }