import './util/handleError'; import './util/setupServiceWorker'; import './global/init'; import React from './lib/teact/teact'; import TeactDOM from './lib/teact/teact-dom'; import { getActions, getGlobal, } from './global'; import { DEBUG, MULTITAB_LOCALSTORAGE_KEY, STRICTERDOM_ENABLED, } from './config'; import { enableStrict, requestMutation } from './lib/fasterdom/fasterdom'; import { selectTabState } from './global/selectors'; import { betterView } from './util/betterView'; import { establishMultitabRole, subscribeToMasterChange } from './util/establishMultitabRole'; import { initGlobal } from './util/init'; import { initLocalization } from './util/localization'; import { requestGlobal, subscribeToMultitabBroadcastChannel } from './util/multitab'; import { checkAndAssignPermanentWebVersion } from './util/permanentWebVersion'; import { onBeforeUnload } from './util/schedulers'; import updateWebmanifest from './util/updateWebmanifest'; import { IS_MULTITAB_SUPPORTED } from './util/windowEnvironment'; import App from './components/App'; import './assets/fonts/roboto.css'; import './styles/index.scss'; if (STRICTERDOM_ENABLED) { enableStrict(); } init(); async function init() { if (DEBUG) { // eslint-disable-next-line no-console console.log('>>> INIT'); } if (!(window as any).isCompatTestPassed) return; checkAndAssignPermanentWebVersion(); await window.electron?.restoreLocalStorage(); if (IS_MULTITAB_SUPPORTED) { subscribeToMultitabBroadcastChannel(); await requestGlobal(APP_VERSION); localStorage.setItem(MULTITAB_LOCALSTORAGE_KEY, '1'); onBeforeUnload(() => { const global = getGlobal(); if (Object.keys(global.byTabId).length === 1) { localStorage.removeItem(MULTITAB_LOCALSTORAGE_KEY); } }); } await initGlobal(); getActions().init(); getActions().updateShouldEnableDebugLog(); getActions().updateShouldDebugExportedSenders(); const global = getGlobal(); initLocalization(global.settings.byKey.language, true); if (IS_MULTITAB_SUPPORTED) { subscribeToMasterChange((isMasterTab) => { getActions() .switchMultitabRole({ isMasterTab }, { forceSyncOnIOs: true }); }); const shouldReestablishMasterToSelf = getGlobal().authState !== 'authorizationStateReady'; establishMultitabRole(shouldReestablishMasterToSelf); } if (DEBUG) { // eslint-disable-next-line no-console console.log('>>> START INITIAL RENDER'); } requestMutation(() => { updateWebmanifest(); TeactDOM.render( , document.getElementById('root')!, ); betterView(); }); if (DEBUG) { // eslint-disable-next-line no-console console.log('>>> FINISH INITIAL RENDER'); } if (DEBUG) { document.addEventListener('dblclick', () => { // eslint-disable-next-line no-console console.warn('TAB STATE', selectTabState(getGlobal())); // eslint-disable-next-line no-console console.warn('GLOBAL STATE', getGlobal()); }); } } onBeforeUnload(() => { const actions = getActions(); actions.leaveGroupCall?.({ isPageUnload: true }); actions.hangUp?.({ isPageUnload: true }); });