Files
pybricks-code/src/index.tsx
T
David Lechner 33b80fe2c8 re-enable service worker
Password has been turned off on the website, so we can enable this again.
2020-06-15 11:51:49 -05:00

67 lines
2.4 KiB
TypeScript

// SPDX-License-Identifier: MIT
// Copyright (c) 2020 The Pybricks Authors
import { ResizeSensor } from '@blueprintjs/core';
import { I18nContext, I18nManager } from '@shopify/react-i18n';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { applyMiddleware, createStore } from 'redux';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
import './index.scss';
import { success, update } from './actions/service-worker';
import App from './components/App';
import NotificationStack from './components/NotificationStack';
import rootReducer from './reducers';
import rootSaga from './sagas';
import * as serviceWorker from './serviceWorker';
const sagaMiddleware = createSagaMiddleware();
// TODO: add runtime option or filter - logger affects firmware flash performance
const loggerMiddleware = createLogger({ predicate: () => false });
const i18n = new I18nManager({
locale: 'en',
onError: (err): void => console.error(err),
});
const store = createStore(
rootReducer,
applyMiddleware(sagaMiddleware, loggerMiddleware),
);
sagaMiddleware.run(rootSaga);
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<I18nContext.Provider value={i18n}>
{/* This is a hack for correctly sizing to view height on mobile when not running in fullscreen mode. */}
{/* https://css-tricks.com/the-trick-to-viewport-units-on-mobile/ */}
<ResizeSensor
onResize={(e): void => {
document.documentElement.style.setProperty(
'--mobile-pad',
`${e[0].contentRect.height - window.innerHeight}px`,
);
}}
>
<div id="vh" className="h-100 w-100 p-absolute" />
</ResizeSensor>
<NotificationStack />
<App />
</I18nContext.Provider>
</Provider>
</React.StrictMode>,
document.getElementById('root'),
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.register({
onUpdate: (r) => store.dispatch(update(r)),
onSuccess: (r) => store.dispatch(success(r)),
});