diff options
Diffstat (limited to 'app/javascript/flavours/glitch/main.jsx')
-rw-r--r-- | app/javascript/flavours/glitch/main.jsx | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/app/javascript/flavours/glitch/main.jsx b/app/javascript/flavours/glitch/main.jsx new file mode 100644 index 000000000..14a6effbb --- /dev/null +++ b/app/javascript/flavours/glitch/main.jsx @@ -0,0 +1,46 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { setupBrowserNotifications } from 'flavours/glitch/actions/notifications'; +import Mastodon, { store } from 'flavours/glitch/containers/mastodon'; +import { me } from 'flavours/glitch/initial_state'; +import ready from 'flavours/glitch/ready'; + +const perf = require('flavours/glitch/performance'); + +/** + * @returns {Promise<void>} + */ +function main() { + perf.start('main()'); + + return ready(async () => { + const mountNode = document.getElementById('mastodon'); + const props = JSON.parse(mountNode.getAttribute('data-props')); + + ReactDOM.render(<Mastodon {...props} />, mountNode); + store.dispatch(setupBrowserNotifications()); + + if (process.env.NODE_ENV === 'production' && me && 'serviceWorker' in navigator) { + const { Workbox } = await import('workbox-window'); + const wb = new Workbox('/sw.js'); + /** @type {ServiceWorkerRegistration} */ + let registration; + + try { + registration = await wb.register(); + } catch (err) { + console.error(err); + } + + if (registration) { + const registerPushNotifications = await import('flavours/glitch/actions/push_notifications'); + + store.dispatch(registerPushNotifications.register()); + } + } + + perf.stop('main()'); + }); +} + +export default main; |