Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/chrisvander/existential-graphs. Cross-platform React app for solving existential graph-based proofs
Something went wrong. Try again.
4.2 kB · 157 lines
JavaScript
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158import React from 'react';import './App.scss';import Canvas from './canvas/Canvas';import IntroWindow from './intro/IntroWindow';
var localStorage = window.localStorage;
class App extends React.Component { constructor(props) { super(props); this.createNewProof = this.createNewProof.bind(this); this.setupProof = this.setupProof.bind(this); this.openCanvas = this.openCanvas.bind(this); this.saveProof = this.saveProof.bind(this); this.getRecents = this.getRecents.bind(this); this.setStyle = this.setStyle.bind(this); this.introWindow = React.createRef(); this.state = { initialCSS: 'initial', canvasOpen: false, popupOpen: false, fitchStyle: localStorage.getItem('fitchStyle') === 'true', filename: '', proof: { premises: [], conclusion: '', steps: [] }, recentDocs: this.getRecents() }; // this.state = { // initialCSS: 'initial', // canvasOpen: true, // popupOpen: false, // proof: {premises: ["({Q})(({P}){Q})"], conclusion: "{Q}", steps:[] } // };
this.menuItems = [ { title: 'Exit', func: () => { this.setState({ initialCSS: 'initial', canvasOpen: false, popupOpen: false, filename: '', proof: { premises: [], conclusion: '', steps: [] }, recentDocs: this.getRecents() }) } }, 'separator', { title: 'Export', func: () => { const element = document.createElement("a"); const file = new Blob([JSON.stringify(this.state.proof)], {type: 'text/plain'}); element.href = URL.createObjectURL(file); element.download = this.state.filename + ".egprf"; document.body.appendChild(element); element.click(); } } ] }
getRecents() { let recents = localStorage.getItem('recentDocs'); recents = recents ? JSON.parse(recents) : {} return recents; }
saveProof(filename) { let { recentDocs } = this.state; recentDocs[filename] = this.state.proof; return (proof) => { recentDocs[filename] = proof; localStorage.setItem('recentDocs', JSON.stringify(recentDocs)); } }
setupProof(filename, proof) { this.setState({ filename: filename, proof: proof }); this.openCanvas(); }
openCanvas() { this.setState({ initialCSS: 'initial whiteBG' }); this.introWindow.current.animateAway(); setTimeout(() => this.setState({ canvasOpen: true }), 1000); }
createNewProof() { this.setState({ popupOpen: true }) }
setStyle(bool) { localStorage.setItem('fitchStyle', bool); this.setState({ fitchStyle: bool }); }
render() { if (this.state.canvasOpen) { return ( <div className="App"> <Canvas menuItems={this.menuItems} fitchStyle={this.state.fitchStyle} setStyle={this.setStyle} saveProof={this.saveProof(this.state.filename)} proof={this.state.proof} /> </div> ); } let { recentDocs } = this.state; let keys = Object.keys(recentDocs) for (let i in keys) { recentDocs[keys[i]].open = () => { this.setState({ filename: keys[i], proof: recentDocs[keys[i]] }); this.openCanvas(); } recentDocs[keys[i]].delete = () => { let rArray = localStorage.getItem('recentDocs'); rArray = rArray ? JSON.parse(rArray) : {} delete rArray[keys[i]]; localStorage.setItem('recentDocs', JSON.stringify(rArray)); this.setState({ recentDocs: rArray }); } } return ( <div className={this.state.initialCSS}> <IntroWindow ref={this.introWindow} recentDocs={this.state.recentDocs} setupFunc={this.setupProof} setStyle={this.setStyle} proofStyle={this.state.fitchStyle} /> </div> ); }}
export default App;