53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import React from 'react'
|
|
import App from './modules/core/components/App'
|
|
|
|
import { render } from 'react-dom'
|
|
import { handleErrors } from './modules/errors/helpers/handleErrors'
|
|
import { initKeyBindings } from './modules/keybindings/helpers/initialiseKeyBindings'
|
|
import { initBaseTemplates } from './modules/saving/helpers/initBaseTemplates'
|
|
import { loadSubject } from './modules/core/subjects/loadedSubject'
|
|
import { take, filter } from 'rxjs/operators'
|
|
import { logWelcome } from './modules/core/helpers/logWelcome'
|
|
import { initRenderer } from './modules/simulationRenderer/helpers/initRenderer'
|
|
import { updateLogicGateList } from './modules/logic-gates/subjects/LogicGateList'
|
|
import { initAutoSave } from './modules/simulation-actions/helpers/initAutoSave'
|
|
|
|
/**
|
|
* The function wich does the heavy lifting for starting the app
|
|
*/
|
|
export const start = async () => {
|
|
// This will resolve at the first render
|
|
const result = loadSubject
|
|
.pipe(
|
|
filter((a) => a),
|
|
take(1)
|
|
)
|
|
.toPromise()
|
|
|
|
// Handle possible errors
|
|
handleErrors()
|
|
|
|
// Create main renderer for the app
|
|
initRenderer()
|
|
|
|
// Register key bindings
|
|
initKeyBindings()
|
|
|
|
// Update base templates
|
|
initBaseTemplates()
|
|
|
|
// Easter egg
|
|
logWelcome()
|
|
|
|
// Update the logic gates in local storage
|
|
updateLogicGateList()
|
|
|
|
// start the autosaving stuff
|
|
initAutoSave()
|
|
|
|
// Render app component
|
|
render(<App />, document.getElementById('app'))
|
|
|
|
// wait for the first render
|
|
await result
|
|
}
|