Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

getRouteToRender.web.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
  2. import { isRoomValid } from '../base/conference';
  3. import { isSupportedBrowser } from '../base/environment';
  4. import { toState } from '../base/redux';
  5. import { Conference } from '../conference';
  6. import { getDeepLinkingPage } from '../deep-linking';
  7. import { UnsupportedDesktopBrowser } from '../unsupported-browser';
  8. import { BlankPage, isWelcomePageUserEnabled, WelcomePage } from '../welcome';
  9. /**
  10. * Determines which route is to be rendered in order to depict a specific Redux
  11. * store.
  12. *
  13. * @param {(Function|Object)} stateful - THe redux store, state, or
  14. * {@code getState} function.
  15. * @returns {Promise<Object>}
  16. */
  17. export function _getRouteToRender(stateful) {
  18. const state = toState(stateful);
  19. return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);
  20. }
  21. /**
  22. * Returns the {@code Route} to display when trying to access a conference if
  23. * a valid conference is being joined.
  24. *
  25. * @param {Object} state - The redux state.
  26. * @returns {Promise|undefined}
  27. */
  28. function _getWebConferenceRoute(state) {
  29. if (!isRoomValid(state['features/base/conference'].room)) {
  30. return;
  31. }
  32. const route = _getEmptyRoute();
  33. // Update the location if it doesn't match. This happens when a room is
  34. // joined from the welcome page. The reason for doing this instead of using
  35. // the history API is that we want to load the config.js which takes the
  36. // room into account.
  37. const { locationURL } = state['features/base/connection'];
  38. if (window.location.href !== locationURL.href) {
  39. route.href = locationURL.href;
  40. return Promise.resolve(route);
  41. }
  42. return getDeepLinkingPage(state)
  43. .then(deepLinkComponent => {
  44. if (deepLinkComponent) {
  45. route.component = deepLinkComponent;
  46. } else if (isSupportedBrowser()) {
  47. route.component = Conference;
  48. } else {
  49. route.component = UnsupportedDesktopBrowser;
  50. }
  51. return route;
  52. });
  53. }
  54. /**
  55. * Returns the {@code Route} to display when trying to access the welcome page.
  56. *
  57. * @param {Object} state - The redux state.
  58. * @returns {Promise<Object>}
  59. */
  60. function _getWebWelcomePageRoute(state) {
  61. const route = _getEmptyRoute();
  62. if (isWelcomePageUserEnabled(state)) {
  63. if (isSupportedBrowser()) {
  64. route.component = WelcomePage;
  65. } else {
  66. route.component = UnsupportedDesktopBrowser;
  67. }
  68. } else {
  69. // Web: if the welcome page is disabled, go directly to a random room.
  70. let href = window.location.href;
  71. href.endsWith('/') || (href += '/');
  72. route.href = href + generateRoomWithoutSeparator();
  73. }
  74. return Promise.resolve(route);
  75. }
  76. /**
  77. * Returns the default {@code Route}.
  78. *
  79. * @returns {Object}
  80. */
  81. function _getEmptyRoute() {
  82. return {
  83. component: BlankPage,
  84. href: undefined
  85. };
  86. }