bigbluebutton-Github/bigbluebutton-html5/client/main.jsx
2021-10-13 15:00:52 -03:00

90 lines
3.3 KiB
JavaScript
Executable File

/*
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
Copyright (c) 2020 BigBlueButton Inc. and by respective authors (see below).
This program is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 3.0 of the License, or (at your option) any later
version.
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
*/
/* eslint no-unused-vars: 0 */
import './wdyr';
import '../imports/ui/services/collection-hooks/collection-hooks';
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import logger from '/imports/startup/client/logger';
import Base from '/imports/startup/client/base';
import JoinHandler from '/imports/ui/components/join-handler/component';
import AuthenticatedHandler from '/imports/ui/components/authenticated-handler/component';
import Subscriptions from '/imports/ui/components/subscriptions/component';
import IntlStartup from '/imports/startup/client/intl';
import ContextProviders from '/imports/ui/components/context-providers/component';
import ChatAdapter from '/imports/ui/components/components-data/chat-context/adapter';
import UsersAdapter from '/imports/ui/components/components-data/users-context/adapter';
import GroupChatAdapter from '/imports/ui/components/components-data/group-chat-context/adapter';
import '/imports/ui/local-collections/meetings-collection/meetings';
import '/imports/ui/local-collections/breakouts-collection/breakouts';
import '/imports/ui/local-collections/guest-users-collection/guest-users';
import '/imports/ui/local-collections/users-collection/users';
import('/imports/api/audio/client/bridge/bridge-whitelist').catch(() => {
// bridge loading
});
Meteor.startup(() => {
// Logs all uncaught exceptions to the client logger
window.addEventListener('error', (e) => {
let message = e.message || e.error.toString();
// Chrome will add on "Uncaught" to the start of the message for some reason. This
// will strip that so the errors can hopefully be grouped better.
if (message) message = message.replace(/^Uncaught/, '').trim();
let { stack } = e.error;
// Checks if stack includes the message, if not add the two together.
if (!stack.includes(message)) {
stack = `${message}\n${stack}`;
}
logger.error({
logCode: 'startup_error',
extraInfo: {
stackTrace: stack,
},
}, message);
});
// TODO make this a Promise
render(
<ContextProviders>
<React.Fragment>
<JoinHandler>
<AuthenticatedHandler>
<Subscriptions>
<IntlStartup>
<Base />
</IntlStartup>
</Subscriptions>
</AuthenticatedHandler>
</JoinHandler>
<UsersAdapter />
<ChatAdapter />
<GroupChatAdapter />
</React.Fragment>
</ContextProviders>,
document.getElementById('app'),
);
});