|
| 1 | +import {ipcRenderer, shell} from 'electron'; |
| 2 | +import React from 'react'; |
| 3 | +import ReactDOM from 'react-dom'; |
| 4 | +import GUI, {AppStateHOC} from 'scratch-gui'; |
| 5 | + |
| 6 | +import ElectronStorageHelper from '../common/ElectronStorageHelper'; |
| 7 | + |
| 8 | +import styles from './app.css'; |
| 9 | + |
| 10 | +const defaultProjectId = 0; |
| 11 | + |
| 12 | +// override window.open so that it uses the OS's default browser, not an electron browser |
| 13 | +window.open = function (url, target) { |
| 14 | + if (target === '_blank') { |
| 15 | + shell.openExternal(url); |
| 16 | + } |
| 17 | +}; |
| 18 | +// Register "base" page view |
| 19 | +// analytics.pageview('/'); |
| 20 | + |
| 21 | +const appTarget = document.getElementById('app'); |
| 22 | +appTarget.className = styles.app || 'app'; // TODO |
| 23 | +document.body.appendChild(appTarget); |
| 24 | + |
| 25 | +GUI.setAppElement(appTarget); |
| 26 | +const WrappedGui = AppStateHOC(GUI); |
| 27 | + |
| 28 | +const onStorageInit = storageInstance => { |
| 29 | + storageInstance.addHelper(new ElectronStorageHelper(storageInstance)); |
| 30 | + // storageInstance.addOfficialScratchWebStores(); // TODO: do we want this? |
| 31 | +}; |
| 32 | + |
| 33 | +const guiProps = { |
| 34 | + onStorageInit, |
| 35 | + isScratchDesktop: true, |
| 36 | + projectId: defaultProjectId, |
| 37 | + showTelemetryModal: (typeof ipcRenderer.sendSync('getTelemetryDidOptIn')) !== 'boolean', |
| 38 | + onTelemetryModalOptIn: () => { |
| 39 | + ipcRenderer.send('setTelemetryDidOptIn', true); |
| 40 | + }, |
| 41 | + onTelemetryModalOptOut: () => { |
| 42 | + ipcRenderer.send('setTelemetryDidOptIn', false); |
| 43 | + }, |
| 44 | + onProjectTelemetryEvent: (event, metadata) => { |
| 45 | + ipcRenderer.send(event, metadata); |
| 46 | + } |
| 47 | +}; |
| 48 | +const wrappedGui = React.createElement(WrappedGui, guiProps); |
| 49 | +ReactDOM.render(wrappedGui, appTarget); |
0 commit comments