Up until now we relied on implicit loading of middlewares and reducers, through having imports in each feature's index.js. This leads to many complex import cycles which result in (sometimes) hard to fix bugs in addition to (often) breaking mobile because a web-only feature gets imported on mobile too, thanks to the implicit loading. This PR changes that to make the process explicit. Both middlewares and reducers are imported in a single place, the app entrypoint. They have been divided into 3 categories: any, web and native, which represent each of the platforms respectively. Ideally no feature should have an index.js exporting actions, action types and components, but that's a larger ordeal, so this is just the first step in getting there. In order to both set example and avoid large cycles the app feature has been refactored to not have an idex.js itself.
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
/* global APP */
|
|
|
|
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
|
|
import { getJitsiMeetTransport } from '../modules/transport';
|
|
|
|
import { App } from './features/app/components';
|
|
import { getLogger } from './features/base/logging/functions';
|
|
import { Platform } from './features/base/react';
|
|
|
|
const logger = getLogger('index.web');
|
|
const OS = Platform.OS;
|
|
|
|
/**
|
|
* Renders the app when the DOM tree has been loaded.
|
|
*/
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const now = window.performance.now();
|
|
|
|
APP.connectionTimes['document.ready'] = now;
|
|
logger.log('(TIME) document ready:\t', now);
|
|
|
|
// Render the main/root Component.
|
|
ReactDOM.render(<App />, document.getElementById('react'));
|
|
});
|
|
|
|
// Workaround for the issue when returning to a page with the back button and
|
|
// the page is loaded from the 'back-forward' cache on iOS which causes nothing
|
|
// to be rendered.
|
|
if (OS === 'ios') {
|
|
window.addEventListener('pageshow', event => {
|
|
// Detect pages loaded from the 'back-forward' cache
|
|
// (https://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/)
|
|
if (event.persisted) {
|
|
// Maybe there is a more graceful approach but in the moment of
|
|
// writing nothing else resolves the issue. I tried to execute our
|
|
// DOMContentLoaded handler but it seems that the 'onpageshow' event
|
|
// is triggered only when 'window.location.reload()' code exists.
|
|
window.location.reload();
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Stops collecting the logs and disposing the API when the user closes the
|
|
* page.
|
|
*/
|
|
window.addEventListener('beforeunload', () => {
|
|
// Stop the LogCollector
|
|
if (APP.logCollectorStarted) {
|
|
APP.logCollector.stop();
|
|
APP.logCollectorStarted = false;
|
|
}
|
|
APP.API.notifyConferenceLeft(APP.conference.roomName);
|
|
APP.API.dispose();
|
|
getJitsiMeetTransport().dispose();
|
|
});
|