Init next.js port
This commit is contained in:
		
							
								
								
									
										86
									
								
								pages/grade-calc/index.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								pages/grade-calc/index.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
import React, { ReactElement, useState } from 'react';
 | 
			
		||||
import Layout from '../../components/layout';
 | 
			
		||||
import Link from 'next/link';
 | 
			
		||||
import GradeCalc from '../../components/_gc';
 | 
			
		||||
 | 
			
		||||
function GradeCalcPage() {
 | 
			
		||||
    const [calculator, setCalculator] = useState<any>();
 | 
			
		||||
    let [jsonInput, setJsonInput] = useState('[]');
 | 
			
		||||
 | 
			
		||||
    function loadConfig(filename: string): void {
 | 
			
		||||
        const client = new XMLHttpRequest();
 | 
			
		||||
        client.open('GET', filename);
 | 
			
		||||
        client.onreadystatechange = () => {
 | 
			
		||||
            setJsonInput(client.responseText);
 | 
			
		||||
        }
 | 
			
		||||
        client.send();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function generate() {
 | 
			
		||||
        setCalculator('');
 | 
			
		||||
        let conf = null;
 | 
			
		||||
        try {
 | 
			
		||||
            conf = JSON.parse(jsonInput);
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
            console.log(e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        let cb = (out: ReactElement[]) => {
 | 
			
		||||
            setCalculator([... calculator, out]);
 | 
			
		||||
        }
 | 
			
		||||
        const gc = new GradeCalc(conf, cb);
 | 
			
		||||
        if (calculator)
 | 
			
		||||
            setCalculator([... calculator, React.createElement('div', {className: 'asf'}, gc.elemTotal)]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <Layout name="Grade Calc" title='Grade Calculator'>
 | 
			
		||||
            <div className='block'>
 | 
			
		||||
                <div className='about-container'>
 | 
			
		||||
                    <h2>About</h2>
 | 
			
		||||
                    Check out the <Link href='/grade-calc/readme'><a >README.md</a></Link> file
 | 
			
		||||
                    to learn more about the configuration structure.
 | 
			
		||||
                    <h3>Usage</h3>
 | 
			
		||||
                    <ol>
 | 
			
		||||
                        <li>Either configure the calculator using the text box below or load one from the existing JSON files to
 | 
			
		||||
                            generate one.</li>
 | 
			
		||||
                        <li>Click <code>Generate</code>.</li>
 | 
			
		||||
                        <li>Enter the input values.</li>
 | 
			
		||||
                    </ol>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div className='json-textarea'>
 | 
			
		||||
                    <h2>Configuration</h2>
 | 
			
		||||
                    <hr />
 | 
			
		||||
                    <h3>Load config from file</h3>
 | 
			
		||||
                    <ul>
 | 
			
		||||
                        <li><a onClick={() => loadConfig('/grade-calc/config/map2302.json')}>MAP2302 - ODE I Fall 2019 (map2302.json)</a></li>
 | 
			
		||||
                        <li><a onClick={() => loadConfig('/grade-calc/config/eee3307c.json')}>EEE3307C - Electronics I Spring 2021 (eee3307c.json)</a></li>
 | 
			
		||||
                        <li><a onClick={() => loadConfig('/grade-calc/config/eel4742c.json')}>EEL4742C - Embedded Systems Spring 2021 (eel4742c.json)</a></li>
 | 
			
		||||
                        <li><a onClick={() => loadConfig('/grade-calc/config/eel4781.json')}>EEL4781 - Computer Comm. Networks Spring 2021 (eel4781.json)</a></li>
 | 
			
		||||
                    </ul>
 | 
			
		||||
                    <div className='button-container'>
 | 
			
		||||
                        <button className='button' onClick={generate}>Generate →</button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <textarea id='json' rows={30} value={jsonInput} onChange={(t) => {setJsonInput(t.currentTarget.value)}}></textarea>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
                <div className='calculator-container'>
 | 
			
		||||
                    {calculator}
 | 
			
		||||
                </div>
 | 
			
		||||
                <span className='clear'></span>
 | 
			
		||||
            </div>
 | 
			
		||||
        </Layout>
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// export default GradeCalcPage;
 | 
			
		||||
 | 
			
		||||
export default function WIP() {
 | 
			
		||||
    return (
 | 
			
		||||
    <Layout name='Grade Calc' title='[WIP] Grade Calculator'>
 | 
			
		||||
        <section className='block' style={{textAlign: 'center'}}>
 | 
			
		||||
            Check back later as the port of this page is a Work in Progress.
 | 
			
		||||
        </section>
 | 
			
		||||
    </Layout>);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								pages/grade-calc/readme.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								pages/grade-calc/readme.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import ReactMarkdown from 'react-markdown';
 | 
			
		||||
import Layout from '../../components/layout';
 | 
			
		||||
 | 
			
		||||
// @ts-ignore
 | 
			
		||||
import ReadmeMd from '../../public/grade-calc/README.md';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function GCReadme() {
 | 
			
		||||
    return (<Layout name="Read Me" ancestors={[{name:'Grade Calc', path: 'grade-calc'}]}>
 | 
			
		||||
        <section className='block'>
 | 
			
		||||
        <ReactMarkdown>{ReadmeMd}</ReactMarkdown>
 | 
			
		||||
        </section>
 | 
			
		||||
        </Layout>);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default GCReadme;
 | 
			
		||||
		Reference in New Issue
	
	Block a user