You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

functions.any.js 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // @flow
  2. import { toState } from '../base/redux';
  3. /**
  4. * Extracts the fqn part from a path, where fqn represents
  5. * tenant/roomName.
  6. *
  7. * @param {Object} state - A redux state.
  8. * @returns {string}
  9. */
  10. export function extractFqnFromPath(state?: Object) {
  11. let pathname;
  12. if (window.location.pathname) {
  13. pathname = window.location.pathname;
  14. } else if (state && state['features/base/connection']) {
  15. pathname = state['features/base/connection'].locationURL.pathname;
  16. } else {
  17. return '';
  18. }
  19. const parts = pathname.split('/');
  20. const len = parts.length;
  21. return parts.length > 2 ? `${parts[len - 2]}/${parts[len - 1]}` : parts[1];
  22. }
  23. /**
  24. * Returns the url used for fetching dynamic branding.
  25. *
  26. * @param {Object | Function} stateful - The redux store, state, or
  27. * {@code getState} function.
  28. * @returns {string}
  29. */
  30. export async function getDynamicBrandingUrl(stateful: Object | Function) {
  31. const state = toState(stateful);
  32. // NB: On web this is dispatched really early, before the config has been stored in the
  33. // state. Thus, fetch it from the window global.
  34. const config
  35. = navigator.product === 'ReactNative' ? state['features/base/config'] : window.config;
  36. const { dynamicBrandingUrl } = config;
  37. if (dynamicBrandingUrl) {
  38. return dynamicBrandingUrl;
  39. }
  40. const { brandingDataUrl: baseUrl } = config;
  41. const fqn = extractFqnFromPath(state);
  42. if (baseUrl && fqn) {
  43. return `${baseUrl}?conferenceFqn=${encodeURIComponent(fqn)}`;
  44. }
  45. }
  46. /**
  47. * Selector used for getting the load state of the dynamic branding data.
  48. *
  49. * @param {Object} state - Global state of the app.
  50. * @returns {boolean}
  51. */
  52. export function isDynamicBrandingDataLoaded(state: Object) {
  53. return state['features/dynamic-branding'].customizationReady;
  54. }