jiti-meet/react/features/app/components/App.web.js

73 lines
2.0 KiB
JavaScript

import { appInit } from '../actions';
import { AbstractApp } from './AbstractApp';
/**
* Root application component.
*
* @extends AbstractApp
*/
export class App extends AbstractApp {
/**
* App component's property types.
*
* @static
*/
static propTypes = AbstractApp.propTypes
/**
* Inits the app before component will mount.
*
* @inheritdoc
*/
componentWillMount(...args) {
super.componentWillMount(...args);
this._getStore().dispatch(appInit());
}
/**
* Gets a Location object from the window with information about the current
* location of the document.
*
* @inheritdoc
*/
_getWindowLocation() {
return window.location;
}
/**
* Navigates to a specific Route (via platform-specific means).
*
* @param {Route} route - The Route to which to navigate.
* @protected
* @returns {void}
*/
_navigate(route) {
let path = route.path;
const store = this._getStore();
// The syntax :room bellow is defined by react-router. It "matches a URL
// segment up to the next /, ?, or #. The matched string is called a
// param."
path
= path.replace(
/:room/g,
store.getState()['features/base/conference'].room);
// Navigate to the specified Route.
const windowLocation = this._getWindowLocation();
if (windowLocation.pathname === path) {
// The browser is at the specified path already and what remains is
// to make this App instance aware of the route to be rendered at
// the current location.
super._navigate(route);
} else {
// The browser must go to the specified location. Once the specified
// location becomes current, the App will be made aware of the route
// to be rendered at it.
windowLocation.pathname = path;
}
}
}