{"version":3,"sources":["settings/styles.ts","settings/translations.ts","components/student-table.tsx","logic/db.ts","pages/control-panel.tsx","pages/login.tsx","pages/register.tsx","pages/reset.tsx","pages/admin-login.tsx","components/key-table.tsx","pages/admin-panel.tsx","index.tsx"],"names":["defaultTheme","Object","objectSpread","createMuiTheme","typography","fontFamily","useNextVariants","default","language","withStyles","_withStyles","theme","createStyles","admin_root","overflowX","overflowY","width","display","height","marginBottom","admin_title","marginTop","spacing","unit","fontSize","textAlign","admin_subtitle","admin_stat","admin_paper","position","left","right","& .buttons","marginLeft","& .claim_txt","color","& .unclaim_txt","admin_table","minWidth","admin_generate_btn","cp_root","cp_title","cp_subtitle","cp_edit_class_name_btn","cp_edit_notes_btn","fontSizeSmall","cp_edit_notes_icon","cp_logout","cp_paper","& .reset_btn","& .registered_txt","& .notregistered_txt","cp_table","cp_print_btn","login_main","defineProperty","marginRight","breakpoints","up","login_title","login_paper","flexDirection","alignItems","padding","concat","login_avatar","margin","backgroundColor","palette","secondary","main","login_form","login_submit","login_register","login_reset","register_submit","register_back","register_fail_msg","print_page","translations","swe","login","title","box_title","code","password","remember","register","reset","login_btn","input_productkey","input_mail","input_password","input_password_confirm","input_classname","submit_btn","back_btn","input_resetkey","control_panel","default_class_name","class_code","print_btn","dialog_yes","dialog_no","delete_header","delete_description","edit_student_header","edit_class_header","edit_yes","edit_no","student_table","id","notes","registered","true","false","admin_login","admin_panel","subtitle","generate_btn","classes_stat","students_stat","claim_header","claim_description","unclaim_header","unclaim_description","key_table","mail","key","class","create_date","claim_date","claim_btn","unclaim_btn","delete_btn","not_claimed","next_page","prev_page","en","StudentTable","props","classes","rows","t","react","Paper_default","a","className","Table_default","TableHead_default","TableRow_default","TableCell_default","align","TableBody_default","map","row","component","scope","studentId","Edit_default","onClick","edit","style","registerDate","index_es","variant","st_reset_btn","resetBtn","DB","classCallCheck","this","actions","headers","createKey","action","params","fetchKeys","fetchRegisteredClasses","fetchRegisteredStudents","deleteKey","freeKey","resetkey","claimKey","registerKey","adminLogin","fetchStudents","getClass","editClass","editStudent","student_id","resetStudent","callback","apiRequest","event","data","split","splice","handleFetchKeys","handleValue","handleCreateKey","handleDeleteKey","handleFreeKey","handleClaimedKey","handleRegisteredKey","handleLogin","handleFetchedStudents","handleGetClass","handleEditClass","handleEditStudent","handleResetStudent","console","log","length","keys","i","rowData","push","keycode","resetcode","class_id","claimed","created","value","undefined","success","students","avatar_head","avatar_body","avatar_skin","register_date","apiCommand","_this","sendRequest","wss","WebSocket","settings","db_server","db_port","onopen","send","JSON","stringify","onclose","onmessage","handleCallback","fetch","then","response","json","ControlPanel","possibleConstructorReturn","getPrototypeOf","call","db","translation","loginParams","window","sessionStorage","parse","gotLogin","handleStudents","bind","assertThisInitialized","setState","class_name","state","print","edit_open","dialog_open","dialog_header","dialog_content","dialog_callback","redirect","redirectUrl","logout","dialogOpen","handleEditClose","handleEditConfirm","handleDialogClose","handleDialogConfirm","_this2","react_router","to","core_styles","aria-label","ExitToApp_default","open","onClose","aria-labelledby","aria-describedby","autoFocus","fullWidth","name","onChange","target","printwindow","_this3","react_new_window_default","onUnload","cellSpacing","classId","header","content","_this4","editOpen","confirmed","student","_this5","_this6","forEach","React","Login","failed","failMsg","submit","LockOutlined_default","required","htmlFor","type","autoComplete","failMessage","Register","password2","back","mailCheck","test","Reset","handleResetKey","AdminLogin","username","KeyTable","page","rowsPerPage","_this$props","_this$state","slice","rowButtons","rowsPerPageOptions","count","backIconButtonProps","nextIconButtonProps","onChangePage","onChangeRowsPerPage","claim","delete","unclaim","AdminPanel","handleKeyFetch","generateKey","unclaimKey","handleNewKey","column","today","Date","toISOString","completeAction","parseInt","ReactDOM","react_router_dom","basename","path","document","querySelector"],"mappings":"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","file":"static/js/main.3f45b174.chunk.js","sourcesContent":["import { \n createMuiTheme, \n createStyles, Theme,\n WithStyles as _WithStyles,\n withStyles as _withStyles,\n StyleRulesCallback\n} from '@material-ui/core/styles';\n\n// ---------------- Themes ------------------ //\n\nexport interface IDefaultTheme extends Theme {\n default : {\n language: string\n }\n}\n\nexport const defaultTheme : IDefaultTheme = {\n ...createMuiTheme({\n typography: {\n fontFamily : '\"Roboto\", sans-serif;',\n useNextVariants: true\n }\n }),\n\n default : {\n language: \"swe\"\n }\n}\n\n// ---------------- Style ------------------ //\n\nexport const styles: StyleRulesCallback = (theme : Theme) => {\n\n return createStyles({\n\n // -------------- Admin Panel -------------- //\n\n admin_root: {\n overflowX: 'auto',\n overflowY: 'auto',\n width: '100%',\n display: 'block',\n height: '100vh',\n marginBottom: '100px'\n },\n\n admin_title: {\n marginTop: theme.spacing.unit * 3,\n fontSize : '2rem',\n textAlign: 'center'\n },\n\n admin_subtitle: {\n marginTop: theme.spacing.unit * 0.5,\n marginBottom: theme.spacing.unit * 5,\n fontSize : '1.3rem',\n textAlign: 'center'\n },\n\n admin_stat: {\n marginTop: theme.spacing.unit * 0.5,\n marginBottom: theme.spacing.unit * 0.5,\n fontSize : '1rem',\n textAlign: 'center'\n },\n \n admin_paper: {\n marginTop: theme.spacing.unit * 1,\n position: 'relative',\n overflowX: 'auto',\n width: '96%',\n left: '2%',\n right: '2%',\n\n '& .buttons' : {\n marginLeft: '5px'\n },\n\n '& .claim_txt': {\n color: 'red'\n },\n\n '& .unclaim_txt': {\n color: 'green'\n }\n },\n\n admin_table: {\n minWidth: 1300\n },\n\n admin_generate_btn: {\n textAlign: 'center',\n marginTop: theme.spacing.unit * 6,\n width: '20%',\n left: '40%',\n right: '40%'\n },\n\n // -------------- Control Panel -------------- //\n\n cp_root: {\n overflowX: 'auto',\n overflowY: 'auto',\n width: '100%',\n display: 'block',\n height: '100vh',\n marginBottom: '100px'\n },\n\n cp_title: {\n marginTop: theme.spacing.unit * 3,\n marginBottom: theme.spacing.unit * 1,\n fontSize : '3rem',\n textAlign: 'center'\n },\n\n cp_subtitle: {\n marginTop: theme.spacing.unit * 1,\n marginBottom: theme.spacing.unit * 10,\n fontSize : '2rem',\n textAlign: 'center'\n },\n\n cp_edit_class_name_btn: {\n marginLeft: '2vw'\n },\n\n cp_edit_notes_btn: {\n width: '20px',\n height: '20px',\n fontSizeSmall: '20px'\n },\n cp_edit_notes_icon: {\n marginLeft: '2vw',\n fontSize: '3px',\n fontSizeSmall: '3px'\n },\n \n cp_logout: {\n position: 'absolute',\n marginTop: theme.spacing.unit * 4,\n marginLeft: '2vw'\n },\n \n cp_paper: {\n position: 'relative',\n overflowX: 'auto',\n overflowY: 'auto',\n width: '96%',\n left: '2%',\n right: '2%',\n\n '& .reset_btn' : {\n width : '1px'\n },\n\n '& .registered_txt': {\n color: 'red'\n },\n\n '& .notregistered_txt': {\n color: 'green'\n }\n },\n\n cp_table: {\n minWidth: 400\n },\n\n cp_print_btn: {\n textAlign: 'center',\n marginTop: theme.spacing.unit * 6,\n width: '10%',\n left: '45%',\n right: '45%'\n },\n\n // ----------------- Login ----------------- //\n\n login_main: {\n overflowX: 'auto',\n overflowY: 'auto',\n width: '100%',\n display: 'block',\n height: '100vh',\n marginBottom: 'auto',\n marginTop: 'auto',\n marginLeft: theme.spacing.unit * 3,\n marginRight: theme.spacing.unit * 3,\n [theme.breakpoints.up(400 + theme.spacing.unit * 3 * 2)]: {\n width: 400,\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n },\n login_title: {\n marginTop: theme.spacing.unit * 1,\n marginBottom: theme.spacing.unit * 5,\n textAlign: 'center',\n fontSize: '2rem'\n },\n login_paper: {\n marginTop: theme.spacing.unit * 8,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme.spacing.unit * 3}px`,\n },\n login_avatar: {\n margin: theme.spacing.unit,\n backgroundColor: theme.palette.secondary.main,\n },\n login_form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: theme.spacing.unit,\n },\n login_submit: {\n marginTop: theme.spacing.unit * 4,\n },\n login_register: {\n marginTop: theme.spacing.unit * 2,\n },\n login_reset: {\n marginTop: theme.spacing.unit * 2,\n },\n\n // ---------------- Register --------------- //\n\n register_submit: {\n marginTop: theme.spacing.unit * 6,\n },\n register_back: {\n marginTop: theme.spacing.unit * 2,\n },\n register_fail_msg: {\n color: '#ff0000',\n marginTop: theme.spacing.unit * 2,\n },\n\n // ----------------------------------------- //\n\n print_page: {\n textAlign: \"center\"\n }\n\n // ----------------------------------------- //\n });\n\n}\n\n// ----------------- Export ----------------- //\n\nexport default interface IStyleProps extends _WithStyles {}\nexport const withStyles = _withStyles(styles);\n\n// ------------------------------------------ //","\nexport const translations: any = {\n\n swe: {\n login: {\n title: \"Vårt Samhälle\",\n box_title: \"Lärarlogin\",\n code: \"Klasskod eller Produktnyckel\",\n password: \"Lösenord\",\n remember: \"Kom ihåg mig\",\n register: \"Registrera\",\n reset: \"Återställ\",\n login_btn: \"Logga in\"\n },\n register: {\n title: \"Registrera Ny Klass\",\n input_productkey: \"Produktnyckel\",\n input_mail: \"E-post\",\n input_password: \"Lösenord\",\n input_password_confirm: \"Repetera lösenord\",\n input_classname: \"Klassnamn (frivilligt)\",\n submit_btn: \"Slutför\",\n back_btn: \"Tillbaka\"\n },\n reset: {\n title: \"Återställ Konto\",\n input_productkey: \"Produktnyckel\",\n input_resetkey: \"Återställningsnyckel\",\n submit_btn: \"Återställ\",\n back_btn: \"Tillbaka\"\n },\n control_panel: {\n default_class_name: \"Min Klass\",\n class_code: \"Klasskod\",\n print_btn: \"Skriv ut\",\n dialog_yes: \"Ja\",\n dialog_no: \"Nej\",\n delete_header: \"Nollställ Elev?\",\n delete_description: \"Är du säker att du vill nollställa denna elev? All framgång i spelet kommer att tas bort.\",\n edit_student_header: \"Anteckningar\",\n edit_class_header: \"Klassnamn\",\n edit_yes: \"Ändra\",\n edit_no: \"Avbryt\"\n },\n student_table: {\n id: \"ID\",\n code: \"Elevkod\",\n notes: \"Anteckningar\",\n registered: {\n title: \"Registrerad\",\n true: \"Ja\",\n false: \"Nej\"\n },\n reset: \"Återställ\"\n },\n admin_login: {\n title: \"Vårt Samhälle\",\n box_title: \"Administratör Inlogg\",\n code: \"Användare\",\n password: \"Lösenord\",\n login_btn: \"Logga in\"\n },\n admin_panel: {\n title: \"Vårt Samhälle\",\n subtitle: \"produktnycklar\",\n generate_btn: \"Generera Ny Nyckel\",\n dialog_yes: \"Ja\",\n dialog_no: \"Nej\",\n classes_stat: \"Antal registrerade klasser\",\n students_stat: \"Antal registrerade studenter\",\n\n delete_header: \"Ta bort nyckel?\",\n delete_description: \"Är du säker att du vill ta bort den här nyckeln? Detta går inte att ångra.\",\n claim_header: \"Lås nyckel?\",\n claim_description: \"Är du säker att du vill låsa nyckeln?\",\n unclaim_header: \"Lås upp nyckel?\",\n unclaim_description: \"Är du säker du vill låsa upp denna nyckel? Detta kommer ta bort all data från den nuvarande klassen.\"\n },\n key_table: {\n id: \"ID\",\n mail: \"E-post\",\n key: \"Produktnyckel\",\n class: \"Klasskod\",\n reset: \"Återställningsnyckel\",\n create_date: \"Skapad\",\n claim_date: \"Registrerad\",\n claim_btn: \"Lås\",\n unclaim_btn: \"Lås upp\",\n delete_btn: \"Ta bort\",\n not_claimed: \"Nej\",\n next_page: \"Nästa sida\",\n prev_page: \"Föregående sida\"\n }\n },\n\n en: {\n login: {\n title: \"Our Society\",\n box_title: \"Login\",\n code: \"Teacher Code\",\n password: \"Password\",\n remember: \"Remember me\",\n register: \"Register\",\n reset: \"Reset\",\n login_btn: \"Login\"\n },\n register: {\n title: \"Register New Class\",\n input_productkey: \"Product Key\",\n input_mail: \"E-mail\",\n input_password: \"Password\",\n input_password_confirm: \"Repeat password\",\n input_classname: \"Class Name (optional)\",\n submit_btn: \"Submit\",\n back_btn: \"Back\"\n },\n reset: {\n title: \"Reset Account\",\n input_productkey: \"Product Key\",\n input_resetkey: \"Reset Key\",\n submit_btn: \"Reset\",\n back_btn: \"Back\"\n },\n control_panel: {\n print_btn: \"Print\",\n dialog_yes: \"Yes\",\n dialog_no: \"No\",\n delete_header: \"Reset Student?\",\n delete_description: \"Are you sure you want to reset this student? All progress in the game will be deleted.\"\n },\n student_table: {\n id: \"ID\",\n code: \"Student Code\",\n notes: \"Notes\",\n registered: {\n title: \"Registered\",\n true: \"Yes\",\n false: \"No\"\n },\n reset: \"Reset\"\n },\n admin_login: {\n title: \"Our Society\",\n box_title: \"Administrator Login\",\n code: \"User\",\n password: \"Password\",\n login_btn: \"Login\"\n },\n admin_panel: {\n title: \"Admin\",\n generate_btn: \"Generate New Key\",\n dialog_yes: \"Yes\",\n dialog_no: \"No\",\n\n delete_header: \"Remove key?\",\n delete_description: \"Are you sure you want to remove this key? This can't be undone.\",\n claim_header: \"Lock key?\",\n claim_description: \"Are you sure you want to lock this key?\",\n unclaim_header: \"Unlock key?\",\n unclaim_description: \"Are you sure you want to unlock this key? This will delete all data in the current class.\"\n },\n key_table: {\n id: \"ID\",\n mail: \"E-mail\",\n key: \"Product Key\",\n reset: \"Reset Key\",\n class: \"Class Code\",\n create_date: \"Created\",\n claim_date: \"Registered\",\n claim_btn: \"Lock\",\n unclaim_btn: \"Unlock\",\n delete_btn: \"Delete\",\n not_claimed: \"No\",\n next_page: \"Next page\",\n prev_page: \"Previous page\"\n }\n }\n\n}","// ======================================== //\n// //\n// Company: Tar Valley //\n// Author: Sebastian Salonen //\n// //\n// © 2019 //\n// //\n// ======================================== //\n\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport EditIcon from '@material-ui/icons/Edit';\n\nimport * as React from 'react';\nimport IStyleProps, { withStyles, defaultTheme } from '../settings/styles';\nimport { translations } from '../settings/translations';\nimport { Button } from '@material-ui/core';\n\n// -------------- Style Properties --------------- //\n\nexport interface IStudentColumn {\n id: number,\n classId: string,\n studentId: string,\n notes: string,\n registered: boolean,\n registerDate?: string\n}\n\nexport interface IStudentTableProps extends IStyleProps {\n rows: IStudentColumn[];\n edit: (student: IStudentColumn)=>void;\n reset: (student: IStudentColumn)=>void;\n}\n\n// -------------- Element Definition ------------- //\n\nfunction StudentTable_(props: IStudentTableProps)\n{\n const { classes, rows } = props;\n const t = translations[defaultTheme.default.language];\n\n return (\n \n \n \n \n {t.student_table.id}\n {t.student_table.code}\n \n {t.student_table.notes}\n \n {t.student_table.registered.title}\n \n \n \n \n {rows.map(row => (\n \n \n {row.id}\n \n {row.studentId}\n \n {props.edit(row)}} style={{marginRight:'1vw',fontSize:'15px'}} />\n {row.notes}\n \n {row.registered ? row.registerDate : t.student_table.registered.false}\n \n {resetBtn(props, row)}\n \n \n ))}\n \n
\n
\n );\n}\n\nfunction resetBtn(props: IStudentTableProps, row: IStudentColumn)\n{\n const { classes } = props;\n const t = translations[defaultTheme.default.language];\n\n if(row.registered)\n {\n return(\n \n );\n }\n else\n {\n return;\n }\n}\n\n// -------------------- Export ------------------- //\n\nconst StudentTable = withStyles(StudentTable_)\nexport default StudentTable;\n\n// ----------------------------------------------- //","// ======================================== //\n// //\n// Company: Tar Valley //\n// Author: Sebastian Salonen //\n// //\n// © 2019 //\n// //\n// ======================================== //\n\n// **** ACTIONS **** //\nexport interface DBActions\n{\n [key: string]: DBAction\n}\nexport interface DBAction\n{\n action: string;\n auth: string;\n params: any;\n}\n// ****** KEYS ****** //\nexport interface DBKey\n{\n id: number;\n mail: string\n keycode: string;\n resetcode: string;\n class_id: string;\n claimed: string;\n created: string;\n}\nexport interface DBKeysCallback\n{\n (keys: DBKey[]): void;\n}\nexport interface DBKeyCallback\n{\n (key: DBKey): void;\n}\nexport interface DBActionCallback\n{\n (success: boolean): void;\n}\n// **** STUDENTS **** //\nexport interface DBStudent\n{\n id: number;\n class_id: string;\n student_id: string;\n notes: string;\n avatar_head: number;\n avatar_body: number;\n avatar_skin: number;\n register_date: string;\n}\nexport interface DBStudentsCallback\n{\n (students: DBStudent[] | undefined): void;\n}\nexport interface DBStudentCallback\n{\n (student: DBStudent): void;\n}\n// ****************** //\nexport interface DBValueCallback\n{\n (value: string): void;\n}\nexport type DBCallback = DBKeyCallback | DBKeysCallback | DBActionCallback | DBStudentCallback | DBStudentsCallback | DBValueCallback;\n// ****************** //\n\n\n\nexport default class DB \n{\n // ======================================== //\n // Vars //\n // ======================================== //\n\n static settings: any | undefined;\n actions: DBActions;\n headers: any;\n\n // ======================================== //\n // Init //\n // ======================================== //\n\n // Actions\n constructor()\n {\n this.actions = {\n createKey: {\n action: 'create_key',\n params: {}\n } as DBAction,\n fetchKeys: {\n action: 'read_keys',\n params: {}\n } as DBAction,\n fetchRegisteredClasses: {\n action: 'read_registered_classes',\n params: {}\n } as DBAction,\n fetchRegisteredStudents: {\n action: 'read_registered_students',\n params: {}\n } as DBAction,\n deleteKey: {\n action: 'delete_key',\n params: {\n key: ''\n }\n } as DBAction,\n freeKey: {\n action: 'free_key',\n params: {\n key: '',\n resetkey: ''\n }\n } as DBAction,\n claimKey: {\n action: 'claim_key',\n params: {\n key: '',\n className: ''\n }\n } as DBAction,\n registerKey: {\n action: 'register_key',\n params: {\n key: '',\n password: '',\n mail: '',\n className: ''\n }\n } as DBAction,\n login: {\n action: 'login',\n params: {\n key: '',\n password: ''\n }\n } as DBAction,\n adminLogin: {\n action: 'admin_login',\n params: {\n key: '',\n password: ''\n }\n } as DBAction,\n fetchStudents: {\n action: 'read_students',\n params: {\n key: '',\n password: ''\n }\n } as DBAction,\n getClass: {\n action: 'get_class_name',\n params: {\n key: '',\n password: ''\n }\n } as DBAction,\n editClass: {\n action: 'edit_class',\n params: {\n key: '',\n password: '',\n className: ''\n }\n } as DBAction,\n editStudent: {\n action: 'edit_student',\n params: {\n key: '',\n password: '',\n student_id: '',\n notes: ''\n }\n } as DBAction,\n resetStudent: {\n action: 'reset_student',\n params: {\n key: '',\n password: '',\n student_id: ''\n }\n } as DBAction\n }\n }\n\n // ======================================== //\n // Functions //\n // ======================================== //\n\n fetchKeys(params: any, callback: DBKeysCallback)\n {\n this.apiRequest(this.actions.fetchKeys, params, callback);\n }\n\n // ======================================== //\n\n fetchRegisteredClasses(params: any, callback: DBValueCallback)\n {\n this.apiRequest(this.actions.fetchRegisteredClasses, params, callback);\n }\n\n // ======================================== //\n\n fetchRegisteredStudents(params: any, callback: DBValueCallback)\n {\n this.apiRequest(this.actions.fetchRegisteredStudents, params, callback);\n }\n\n // ======================================== //\n\n createKey(params: any, callback: DBKeyCallback)\n {\n this.apiRequest(this.actions.createKey, params, callback);\n }\n\n // ======================================== //\n\n deleteKey(params: any, callback: DBKeyCallback)\n {\n this.apiRequest(this.actions.deleteKey, params, callback);\n }\n\n // ======================================== //\n\n freeKey(params: any, callback: DBKeyCallback)\n {\n this.apiRequest(this.actions.freeKey, params, callback);\n }\n\n // ======================================== //\n\n registerKey(params: any, callback: DBKeyCallback)\n {\n this.apiRequest(this.actions.registerKey, params, callback);\n }\n\n // ======================================== //\n\n claimKey(params: any, callback: DBKeyCallback)\n {\n this.apiRequest(this.actions.claimKey, params, callback);\n }\n\n // ======================================== //\n\n login(params: any, callback: DBActionCallback)\n {\n this.apiRequest(this.actions.login, params, callback)\n }\n\n // ======================================== //\n\n adminLogin(params: any, callback: DBActionCallback)\n {\n this.apiRequest(this.actions.adminLogin, params, callback)\n }\n\n // ======================================== //\n\n fetchStudents(params: any, callback: DBStudentsCallback)\n {\n this.apiRequest(this.actions.fetchStudents, params, callback);\n }\n\n // ======================================== //\n\n getClass(params: any, callback: DBValueCallback)\n {\n this.apiRequest(this.actions.getClass, params, callback);\n }\n\n // ======================================== //\n\n editClass(params: any, callback: DBActionCallback)\n {\n this.apiRequest(this.actions.editClass, params, callback);\n }\n\n // ======================================== //\n\n editStudent(params: any, callback: DBActionCallback)\n {\n this.apiRequest(this.actions.editStudent, params, callback);\n }\n\n // ======================================== //\n\n resetStudent(params: any, callback: DBActionCallback)\n {\n this.apiRequest(this.actions.resetStudent, params, callback);\n }\n\n // ======================================== //\n // Callback //\n // ======================================== //\n\n private handleCallback(event: any, callback: DBCallback)\n {\n var data = event.data.split(\"\\n\");\n var action = data.splice(0,1)[0];\n\n switch(action)\n {\n case this.actions.fetchKeys.action:\n this.handleFetchKeys(data, callback as DBKeysCallback); \n break;\n case this.actions.fetchRegisteredClasses.action:\n this.handleValue(data[0], callback as DBValueCallback); \n break;\n case this.actions.fetchRegisteredStudents.action:\n this.handleValue(data[0], callback as DBValueCallback); \n break;\n case this.actions.createKey.action:\n this.handleCreateKey(data, callback as DBKeyCallback);\n break;\n case this.actions.deleteKey.action:\n this.handleDeleteKey(data[0], callback as DBKeyCallback);\n break;\n case this.actions.freeKey.action:\n this.handleFreeKey(data[0], callback as DBKeyCallback);\n break;\n case this.actions.claimKey.action:\n this.handleClaimedKey(data[0], callback as DBKeyCallback);\n break;\n case this.actions.registerKey.action:\n this.handleRegisteredKey(data[0], callback as DBKeyCallback);\n break;\n case this.actions.login.action:\n this.handleLogin(data[0], callback as DBActionCallback);\n break;\n case this.actions.adminLogin.action:\n this.handleLogin(data[0], callback as DBActionCallback);\n break;\n case this.actions.fetchStudents.action:\n this.handleFetchedStudents(data, callback as DBStudentsCallback);\n break;\n case this.actions.getClass.action:\n this.handleGetClass(data[0], callback as DBValueCallback);\n break;\n case this.actions.editClass.action:\n this.handleEditClass(data[0], callback as DBActionCallback);\n break;\n case this.actions.editStudent.action:\n this.handleEditStudent(data[0], callback as DBActionCallback);\n break;\n case this.actions.resetStudent.action:\n this.handleResetStudent(data[0], callback as DBActionCallback);\n break;\n default:\n console.log(\"db action failed\");\n break;\n }\n }\n\n // ======================================== //\n\n private handleFetchKeys(rows: any, callback: DBKeysCallback)\n {\n if(rows.length <= 1) return;\n\n let keys: DBKey[] = [];\n for(var i = 1; i < rows.length; i++)\n {\n var rowData = rows[i].split(\",\");\n keys.push({\n id: rowData[0],\n mail: rowData[1],\n keycode: rowData[2],\n resetcode: rowData[3],\n class_id: rowData[4],\n claimed: rowData[5],\n created: rowData[6]\n } as DBKey);\n }\n callback(keys);\n }\n\n // ======================================== //\n\n private handleValue(value: string, callback: DBValueCallback)\n {\n callback(value);\n }\n\n // ======================================== //\n\n private handleCreateKey(rows: any, callback: DBKeyCallback)\n {\n if(rows.length <= 0) return;\n\n let key = rows[0].split(\",\");\n callback({\n id: key[0],\n mail: key[1],\n keycode: key[2],\n resetcode: key[3],\n class_id: key[4],\n claimed: key[5],\n created: key[6]\n } as DBKey);\n }\n\n // ======================================== //\n\n private handleDeleteKey(key: string, callback: DBKeyCallback)\n {\n if(key === undefined || key === '') return;\n\n callback({\n id: {},\n mail: {},\n keycode: key,\n resetcode: {},\n class_id: {},\n claimed: {},\n created: {}\n } as DBKey);\n }\n\n // ======================================== //\n\n private handleFreeKey(key: string, callback: DBKeyCallback)\n {\n if(key === undefined || key === '') {\n callback({} as DBKey)\n return;\n } \n callback({\n id: {},\n mail: {},\n keycode: key,\n resetcode: {},\n class_id: {},\n claimed: {},\n created: {}\n } as DBKey);\n }\n\n // ======================================== //\n\n private handleClaimedKey(key: string, callback: DBKeyCallback)\n {\n if(key === undefined || key === '') return;\n\n callback({\n id: {},\n mail: {},\n keycode: key,\n resetcode: {},\n class_id: {},\n claimed: {},\n created: {}\n } as DBKey);\n }\n\n // ======================================== //\n\n private handleRegisteredKey(key: string, callback: DBKeyCallback)\n {\n if(key === undefined) return;\n\n callback({\n id: {},\n mail: {},\n keycode: key,\n resetcode: {},\n class_id: {},\n claimed: {},\n created: {}\n } as DBKey);\n }\n\n // ======================================== //\n\n private handleLogin(success: string, callback: DBActionCallback)\n {\n callback(success==='true');\n }\n\n // ======================================== //\n\n private handleFetchedStudents(rows: any, callback: DBStudentsCallback)\n {\n if(rows.length <= 0)\n {\n callback(undefined);\n return;\n }\n\n let students: DBStudent[] = [];\n for(var i = 1; i < rows.length; i++)\n {\n var rowData = rows[i].split(\",\");\n students.push({\n id: rowData[0],\n class_id: rowData[1],\n student_id: rowData[2],\n avatar_head: rowData[3],\n avatar_body: rowData[4],\n avatar_skin: rowData[5],\n notes: rowData[6],\n register_date: rowData[7]\n } as DBStudent);\n }\n callback(students);\n }\n\n // ======================================== //\n\n private handleGetClass(value: string, callback: DBValueCallback)\n {\n callback(value);\n }\n\n // ======================================== //\n\n private handleEditClass(success: string, callback: DBActionCallback)\n {\n callback(success==='true');\n }\n\n // ======================================== //\n\n private handleEditStudent(success: string, callback: DBActionCallback)\n {\n callback(success==='true');\n }\n\n // ======================================== //\n\n private handleResetStudent(success: string, callback: DBActionCallback)\n {\n callback(success==='true');\n }\n \n // ======================================== //\n // API Requests //\n // ======================================== //\n\n apiRequest(apiCommand: DBAction, params: any, callback: DBCallback)\n {\n let sendRequest = () => {\n apiCommand.params = params;\n let ws = new WebSocket(\"wss://\"+DB.settings.db_server+\":\"+DB.settings.db_port);\n ws.onopen = function(event)\n {\n ws.send(JSON.stringify({\n action: apiCommand.action,\n params: apiCommand.params\n }));\n };\n ws.onclose = function(event)\n {\n\n };\n ws.onmessage = (event: any)=>\n {\n this.handleCallback(event, callback);\n };\n }\n\n // Fetch server settings if we don't have them\n if(DB.settings !== undefined)\n {\n sendRequest();\n }\n else\n {\n fetch(\"./db_settings.json\").then( (response: Response) => {\n return response.json();\n }).then( (json: any) => {\n DB.settings = json;\n sendRequest();\n });\n }\n }\n\n // ======================================== //\n\n}","// ======================================== //\n// //\n// Company: Tar Valley //\n// Author: Sebastian Salonen //\n// //\n// © 2019 //\n// //\n// ======================================== //\n\nimport * as React from 'react';\nimport StudentTable, { IStudentColumn } from '../components/student-table';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, Fab, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, FormControl, Input } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ExitToApp from '@material-ui/icons/ExitToApp';\nimport DB, { DBStudent } from '../logic/db';\nimport { Redirect } from 'react-router';\nimport NewWindow from 'react-new-window';\n\n// -------------- State Data --------------- //\n\ntype State = {\n rows: IStudentColumn[];\n print: boolean;\n class_name: string;\n class_code: string;\n edit_open: boolean;\n dialog_open: boolean;\n dialog_header: string;\n dialog_content: string;\n dialog_callback: (confirmed:boolean)=>void;\n redirect: boolean,\n redirectUrl: string\n};\n\n// ----------------- Page ------------------ //\n\nclass ControlPanel extends React.Component, State> \n{\n //========================//\n // Vars //\n //========================//\n \n db: DB;\n translation: any;\n loginParams: any;\n\n //========================//\n // Routine //\n //========================//\n\n constructor(props: any)\n {\n super(props);\n this.db = new DB();\n this.translation = translations[defaultTheme.default.language];\n\n // Auth\n this.loginParams = window.sessionStorage['uf-teacher-login'] === undefined ? undefined : JSON.parse(window.sessionStorage['uf-teacher-login']);\n let gotLogin = this.loginParams !== undefined && this.loginParams.code !== undefined && this.loginParams.password !== undefined;\n if(gotLogin)\n {\n this.db.fetchStudents(this.loginParams, this.handleStudents.bind(this));\n this.db.getClass(this.loginParams, (value: string)=>{this.setState({class_name: value})});\n }\n\n // Init State\n this.state = {\n rows: [],\n print: false,\n class_name: \"\",\n class_code: \"\",\n edit_open: false,\n dialog_open: false,\n dialog_header: \"\",\n dialog_content: \"\",\n dialog_callback: ()=>{},\n redirect: !gotLogin,\n redirectUrl: \"/Login\"\n }\n\n // Bind Functions\n this.print = this.print.bind(this);\n this.logout = this.logout.bind(this);\n this.dialogOpen = this.dialogOpen.bind(this);\n this.handleEditClose = this.handleEditClose.bind(this);\n this.handleEditConfirm = this.handleEditConfirm.bind(this);\n this.handleDialogClose = this.handleDialogClose.bind(this);\n this.handleDialogConfirm = this.handleDialogConfirm.bind(this);\n this.handleStudents = this.handleStudents.bind(this);\n this.handleEditStudent = this.handleEditStudent.bind(this);\n this.handleResetStudent = this.handleResetStudent.bind(this);\n this.handleEditClass = this.handleEditClass.bind(this);\n\n // window.addEventListener(\"unload\", (event: any) => {\n // window.sessionStorage['uf-teacher-login'] = \"{}\";\n // });\n }\n\n //========================//\n\n render() \n {\n const { classes } = this.props;\n const t = this.translation;\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n\n \n \n \n \n {this.state.class_name}\n \n \n \n \n \n {t.control_panel.class_code+\": \"+this.state.class_code}\n \n\n \n \n \n\n \n {this.state.dialog_header}\n \n \n {this.state.dialog_content}\n \n \n \n \n \n \n \n\n \n {this.state.dialog_header}\n \n \n {this.setState({dialog_content:event.target.value})}} />\n \n \n \n \n \n \n \n\n {this.printwindow()}\n\n





\n
\n
\n );\n }\n\n printwindow()\n {\n const { classes } = this.props;\n\n if(this.state.print)\n {\n return(\n {\n this.setState({\n print: false\n });\n }}>\n
\n \n \n \n \n {this.state.rows.map(row => (\n \n \n \n \n \n ))}\n

{this.state.class_name}

{row.notes}Klasskod: {row.classId}Elevkod: {row.studentId}
\n
\n
\n );\n }\n else\n {\n return;\n }\n }\n\n //========================//\n // Button Logic //\n //========================//\n\n print()\n {\n this.setState({\n print: true\n })\n }\n\n //========================//\n\n dialogOpen(header: string, content: string, callback: (confirmed:boolean)=>void)\n {\n this.setState({ \n dialog_open: true,\n dialog_header: header,\n dialog_content: content,\n dialog_callback: callback\n });\n }\n\n //========================//\n\n editOpen(header: string, content: string, callback: (confirmed:boolean)=>void)\n {\n this.setState({ \n edit_open: true,\n dialog_header: header,\n dialog_content: content,\n dialog_callback: callback\n });\n }\n\n //========================//\n\n logout()\n {\n window.sessionStorage['uf-teacher-login'] = \"{}\";\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n\n //========================//\n // Callbacks //\n //========================//\n\n handleEditClass()\n {\n this.editOpen(\n this.translation.control_panel.edit_class_header,\n this.state.class_name,\n (confirmed: boolean)=> {\n if(confirmed) {\n let params = this.loginParams;\n params['className'] = this.state.dialog_content;\n this.db.editClass(params, (success: boolean)=> {\n console.log(success);\n if(success)\n {\n this.setState({\n class_name: this.state.dialog_content === \"\" ? this.translation.control_panel.default_class_name : this.state.dialog_content\n });\n console.log(\"edited class name to \"+this.state.dialog_content);\n }\n });\n }\n }\n );\n }\n\n //========================//\n\n handleResetStudent(student: IStudentColumn)\n {\n this.dialogOpen(\n this.translation.control_panel.delete_header,\n this.translation.control_panel.delete_description,\n (confirmed: boolean)=>{\n if(confirmed){\n let params = this.loginParams;\n params['student_id'] = student.studentId;\n this.db.editClass(params, (success: boolean)=> {\n if(success)\n {\n this.setState({\n class_name: this.state.dialog_content === \"\" ? this.translation.control_panel.default_class_name : this.state.dialog_content\n });\n console.log(\"reseted student \"+student.id);\n }\n });\n }\n }\n );\n }\n\n //========================//\n\n handleEditStudent(student: IStudentColumn)\n {\n this.editOpen(\n this.translation.control_panel.edit_student_header,\n student.notes === '...' ? \"\" : student.notes,\n (confirmed: boolean) => {\n if(confirmed) {\n let params = this.loginParams;\n params['student_id'] = student.studentId;\n params['notes'] = this.state.dialog_content;\n this.db.editStudent(params, (success: boolean) => {\n if(success)\n {\n student.notes = this.state.dialog_content;\n console.log(\"edited \"+student.id+\" \"+this.state.dialog_content);\n this.setState({\n rows: this.state.rows\n });\n }\n });\n }\n }\n );\n }\n\n //========================//\n\n handleEditClose()\n {\n this.setState({\n edit_open: false\n });\n this.state.dialog_callback(false);\n }\n\n //========================//\n\n handleEditConfirm()\n {\n this.setState({ \n edit_open: false\n });\n this.state.dialog_callback(true);\n }\n\n //========================//\n\n handleDialogClose()\n {\n this.setState({\n dialog_open: false\n });\n this.state.dialog_callback(false);\n }\n\n //========================//\n\n handleDialogConfirm()\n {\n this.setState({ \n dialog_open: false\n });\n this.state.dialog_callback(true);\n }\n\n //========================//\n\n handleStudents(students: DBStudent[] | undefined)\n {\n if(students === undefined)\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n else\n {\n let rows:IStudentColumn[] = [];\n students.forEach(student => {\n rows.push({\n id: rows.length+1,\n classId: student.class_id,\n studentId: student.student_id,\n notes: student.notes === 'No' ? \"...\" : student.notes, //TODO\n registered: student.register_date !== 'No',\n registerDate: student.register_date === 'No' ? \"Nej\" : student.register_date // TODO\n } as IStudentColumn)\n });\n this.setState({\n rows: rows,\n class_code: rows.length > 0 ? rows[0].classId : \"\"\n });\n }\n }\n\n //========================//\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(ControlPanel);\n\n// ------------------------------------------ //","import * as React from 'react';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, CssBaseline, Paper, Avatar, FormControl, InputLabel, Input } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\nimport { Redirect } from 'react-router';\nimport DB from '../logic/db';\n\n\ninterface State\n{\n code: string,\n password: string,\n failed: boolean,\n failMsg: string,\n redirect: boolean,\n redirectUrl: string\n}\n\n// ----------------- Page ------------------ //\n\nclass Login extends React.Component, State> \n{\n db: DB;\n\n constructor(props: any)\n {\n super(props);\n\n this.db = new DB();\n this.state = {\n code: '',\n password: '',\n failed: false,\n failMsg: '',\n redirect: false,\n redirectUrl: \"\"\n }\n this.submit = this.submit.bind(this);\n this.register = this.register.bind(this);\n this.reset = this.reset.bind(this);\n this.handleLogin = this.handleLogin.bind(this);\n\n window.sessionStorage['uf-teacher-login'] = \"{}\";\n }\n\n render() \n {\n const { classes } = this.props;\n const t = translations[defaultTheme.default.language];\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n \n \n \n \n {t.login.title}\n \n \n \n \n \n {t.login.box_title}\n \n
\n \n {t.login.code}\n {this.setState({code:event.target.value})}} />\n \n \n {t.login.password}\n {this.setState({password:event.target.value})}} />\n \n \n {t.login.login_btn}\n \n \n {t.login.register}\n \n \n {t.login.reset}\n \n {this.failMessage()}\n \n
\n
\n
\n );\n }\n\n failMessage()\n {\n const { classes } = this.props;\n if(this.state.failed)\n {\n return (\n \n {this.state.failMsg}\n \n );\n }\n }\n\n submit()\n {\n let params = {\n code: this.state.code,\n password: this.state.password\n }\n\n if( params.code !== '' &&\n params.password !== '')\n {\n this.setState({\n failed: false\n });\n this.db.login(params, this.handleLogin);\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Alla fält som är markerade med * måste fyllas\" // TODO\n });\n }\n }\n\n register()\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Register\"\n });\n }\n\n reset()\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Reset\"\n });\n }\n\n handleLogin(login: boolean)\n {\n if(login)\n {\n window.sessionStorage['uf-teacher-login'] = JSON.stringify({\n code: this.state.code,\n password: this.state.password\n });\n this.setState({\n redirect: true,\n redirectUrl: \"/ControlPanel\"\n });\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Inloggningen misslyckades\" // TODO\n });\n }\n }\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(Login);\n\n// ------------------------------------------ //","import * as React from 'react';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, CssBaseline, Paper, FormControl, InputLabel, Input } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport { Redirect } from 'react-router';\nimport DB, { DBKey } from '../logic/db';\n\n\ninterface State\n{\n keycode: string,\n password: string,\n password2: string,\n mail: string,\n className: string,\n failed: boolean,\n failMsg: string,\n redirect: boolean,\n redirectUrl: string\n}\n\n// ----------------- Page ------------------ //\n\nclass Register extends React.Component, State>\n{\n db: DB;\n\n constructor(props: any)\n {\n super(props);\n\n this.db = new DB();\n this.state = {\n keycode: '',\n password: '',\n password2: '',\n mail: '',\n className: '',\n failed: false,\n failMsg: '',\n redirect: false,\n redirectUrl: \"\"\n }\n this.submit = this.submit.bind(this);\n this.back = this.back.bind(this);\n this.handleCreateKey = this.handleCreateKey.bind(this);\n this.failMessage = this.failMessage.bind(this);\n }\n\n render() \n {\n const { classes } = this.props;\n const t = translations[defaultTheme.default.language];\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n \n \n \n \n {t.register.title}\n \n
\n \n {t.register.input_productkey}\n {this.setState({keycode:event.target.value})}} />\n \n \n {t.register.input_mail}\n {this.setState({mail:event.target.value})}} />\n \n \n {t.register.input_password}\n {this.setState({password:event.target.value})}}/>\n \n \n {t.register.input_password_confirm}\n {this.setState({password2:event.target.value})}} />\n \n \n {t.register.input_classname}\n {this.setState({className:event.target.value})}}/>\n \n \n {t.register.submit_btn}\n \n \n {t.register.back_btn}\n \n {this.failMessage()}\n \n
\n
\n
\n );\n }\n\n failMessage()\n {\n const { classes } = this.props;\n if(this.state.failed)\n {\n return (\n \n {this.state.failMsg}\n \n );\n }\n }\n\n submit()\n {\n let params = {\n keycode: this.state.keycode,\n password: this.state.password,\n mail: this.state.mail,\n className: this.state.className\n }\n\n if( this.state.password !== this.state.password2)\n {\n this.setState({\n failed: true,\n failMsg: \"Lösenordet matchar inte\" // TODO\n });\n }\n else if( !this.mailCheck(params.mail) )\n {\n this.setState({\n failed: true,\n failMsg: \"E-post addressen är inte giltig\" // TODO\n });\n }\n else if( this.state.password.length < 6) // TODO\n {\n this.setState({\n failed: true,\n failMsg: \"Lösenordet måste ha minst 6 tecken\" // TODO\n });\n }\n else if( params.keycode !== '' &&\n params.password !== '' )\n {\n this.setState({\n failed: false\n });\n this.db.registerKey(params, this.handleCreateKey);\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Alla fält som är markerade med * måste fyllas\" // TODO\n });\n }\n }\n\n back()\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n\n mailCheck(mail: string)\n {\n if (/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(mail))\n {\n return true;\n }\n return false;\n }\n\n handleCreateKey(keys: DBKey)\n {\n if(keys.keycode === undefined || keys.keycode === '')\n {\n this.setState({\n failed: true,\n failMsg: \"Något gick fel\" // TODO\n });\n }\n else if(keys.keycode === \"CLAIMED\")\n {\n this.setState({\n failed: true,\n failMsg: \"Produktnyckeln är redan registrerad\" // TODO\n });\n }\n else if(keys.keycode === \"EXISTS\")\n {\n this.setState({\n failed: true,\n failMsg: \"Produktnyckeln du angav är inte giltig\" // TODO\n });\n }\n else\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n }\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(Register);\n\n// ------------------------------------------ //","import * as React from 'react';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, CssBaseline, Paper, FormControl, InputLabel, Input, FormControlLabel, Checkbox } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport { Redirect } from 'react-router';\nimport DB, { DBKey } from '../logic/db';\n\n\ninterface State\n{\n keycode: string,\n resetcode: string,\n failed: boolean,\n failMsg: string,\n redirect: boolean,\n redirectUrl: string\n}\n\n// ----------------- Page ------------------ //\n\nclass Reset extends React.Component, State>\n{\n db: DB;\n\n constructor(props: any)\n {\n super(props);\n this.db = new DB();\n\n this.state = {\n keycode: \"\",\n resetcode: \"\",\n failed: false,\n failMsg: \"\",\n redirect: false,\n redirectUrl: \"\"\n }\n\n this.submit = this.submit.bind(this);\n this.back = this.back.bind(this);\n this.failMessage = this.failMessage.bind(this);\n this.handleResetKey = this.handleResetKey.bind(this);\n }\n\n render() \n {\n const { classes } = this.props;\n const t = translations[defaultTheme.default.language];\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n \n \n \n \n {t.reset.title}\n \n
\n \n {t.reset.input_productkey}\n {this.setState({keycode: event.target.value})}}/>\n \n \n {t.reset.input_resetkey}\n {this.setState({resetcode: event.target.value})}} />\n \n \n {t.reset.submit_btn}\n \n \n {t.reset.back_btn}\n \n {this.failMessage()}\n \n
\n
\n
\n );\n }\n\n failMessage()\n {\n const { classes } = this.props;\n if(this.state.failed)\n {\n return (\n \n {this.state.failMsg}\n \n );\n }\n }\n\n submit()\n {\n let params = {\n key: this.state.keycode,\n resetcode: this.state.resetcode\n }\n\n if( params.key !== '' &&\n params.resetcode !== '' )\n {\n this.setState({\n failed: false\n });\n this.db.freeKey(params, this.handleResetKey);\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Alla fält som är markerade med * måste fyllas\" // TODO\n });\n }\n }\n\n back()\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n\n handleResetKey(key: DBKey)\n {\n console.log(key);\n if(key.keycode !== undefined)\n {\n this.setState({\n redirect: true,\n redirectUrl: \"/Login\"\n });\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Produktnyckeln och återställningsnyckeln matchar inte\" // TODO\n });\n }\n }\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(Reset);\n\n// ------------------------------------------ //","import * as React from 'react';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, CssBaseline, Paper, Avatar, FormControl, InputLabel, Input } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\nimport { Redirect } from 'react-router';\nimport DB from '../logic/db';\n\n\ninterface State\n{\n username: string,\n password: string,\n failed: boolean,\n failMsg: string,\n redirect: boolean,\n redirectUrl: string\n}\n\n// ----------------- Page ------------------ //\n\nclass AdminLogin extends React.Component, State>\n{\n db: DB;\n\n constructor(props: any)\n {\n super(props);\n this.db = new DB();\n\n this.state = {\n username: \"\",\n password: \"\",\n failed: false,\n failMsg: '',\n redirect: false,\n redirectUrl: \"\"\n }\n this.submit = this.submit.bind(this);\n this.handleLogin = this.handleLogin.bind(this);\n\n window.sessionStorage['uf-admin-login'] = \"{}\";\n }\n\n render() \n {\n const { classes } = this.props;\n const t = translations[defaultTheme.default.language];\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n \n \n \n \n {t.admin_login.title}\n \n \n \n \n \n {t.admin_login.box_title}\n \n
\n \n {t.admin_login.code}\n {this.setState({username:event.target.value})}} value={this.state.username} autoFocus />\n \n \n {t.admin_login.password}\n {this.setState({password:event.target.value})}} value={this.state.password} autoComplete=\"current-password\" />\n \n \n {t.admin_login.login_btn}\n \n {this.failMessage()}\n \n
\n
\n
\n );\n }\n\n failMessage()\n {\n const { classes } = this.props;\n if(this.state.failed)\n {\n return (\n \n {this.state.failMsg}\n \n );\n }\n }\n\n submit()\n {\n let params = {\n username: this.state.username,\n password: this.state.password\n }\n\n if( params.username !== '' &&\n params.password !== '')\n {\n this.setState({\n failed: false\n });\n this.db.adminLogin(params, this.handleLogin);\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Alla fält som är markerade med * måste fyllas\" // TODO\n });\n }\n }\n\n handleLogin(login: boolean)\n {\n if(login)\n {\n window.sessionStorage['uf-admin-login'] = JSON.stringify({\n username: this.state.username,\n password: this.state.password\n });\n this.setState({\n redirect: true,\n redirectUrl: \"/AdminPanel\"\n });\n }\n else\n {\n this.setState({\n failed: true,\n failMsg: \"Inloggningen misslyckades\" // TODO\n });\n }\n }\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(AdminLogin);\n\n// ------------------------------------------ //","// ======================================== //\n// //\n// Company: Tar Valley //\n// Author: Sebastian Salonen //\n// //\n// © 2019 //\n// //\n// ======================================== //\n\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport * as React from 'react';\nimport IStyleProps, { withStyles, defaultTheme } from '../settings/styles';\nimport { translations } from '../settings/translations';\nimport { Button, TablePagination } from '@material-ui/core';\n\n// -------------- Style Properties --------------- //\n\nexport interface IKeyColumn {\n id: number,\n mail: string,\n keycode: string,\n resetcode: string,\n class_id: string,\n create_date: string,\n claim_date?: string\n}\n\nexport interface IKeyTableProps extends IStyleProps {\n rows: IKeyColumn[];\n claim: (key: IKeyColumn)=>void;\n unclaim: (key: IKeyColumn)=>void;\n delete: (key: IKeyColumn)=>void;\n}\n\n// -------------- Element Definition ------------- //\n\nclass KeyTable extends React.Component\n{\n props: IKeyTableProps;\n state : {\n page: number,\n rowsPerPage: number,\n rows: IKeyColumn[]\n } = {\n page: 0,\n rowsPerPage: 10,\n rows: []\n }\n\n constructor(props: IKeyTableProps) \n {\n super(props);\n this.props = props;\n this.state.rows = this.props.rows;\n }\n\n render()\n {\n const { classes, rows } = this.props;\n const { page, rowsPerPage } = this.state;\n const t = translations[defaultTheme.default.language];\n\n return (\n \n \n \n \n {t.key_table.id}\n {t.key_table.mail}\n {t.key_table.key}\n {t.key_table.reset}\n {t.key_table.class}\n {t.key_table.create_date}\n {t.key_table.claim_date}\n \n \n \n \n {\n rows\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map(row => (\n \n \n {row.id}\n \n {row.mail}\n {row.keycode}\n {row.resetcode}\n {row.class_id}\n {row.create_date}\n {(row.claim_date===undefined) ? t.key_table.not_claimed : row.claim_date}\n \n {this.rowButtons(classes, t, row)}\n \n \n ))\n }\n \n
\n {this.setState({\n page: page\n })}}\n onChangeRowsPerPage={event=>this.setState({\n rowsPerPage: event.target.value\n })}\n />\n
\n );\n }\n\n rowButtons(classes: any, t: any, row: IKeyColumn)\n {\n if(row.claim_date === undefined)\n {\n return(\n
\n \n \n
\n );\n }\n else\n {\n return(\n
\n \n \n
\n );\n }\n }\n}\n\n// -------------------- Export ------------------- //\n\n//const KeyTable\nexport default withStyles(KeyTable);\n\n// ----------------------------------------------- //","// ======================================== //\n// //\n// Company: Tar Valley //\n// Author: Sebastian Salonen //\n// //\n// © 2019 //\n// //\n// ======================================== //\n\nimport * as React from 'react';\nimport { styles, defaultTheme, withStyles } from '../settings/styles';\nimport { MuiThemeProvider, Typography, WithStyles, Button, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Fab } from '@material-ui/core';\nimport { translations } from '../settings/translations';\nimport KeyTable, { IKeyColumn } from '../components/key-table';\nimport DB, { DBKey } from '../logic/db';\nimport { Redirect } from 'react-router';\nimport ExitToApp from '@material-ui/icons/ExitToApp';\n\n// -------------- State Data --------------- //\n\ntype State = {\n rows: IKeyColumn[];\n classes_stat: number;\n students_stat: number;\n dialog_open: boolean;\n dialog_header: string;\n dialog_content: string;\n dialog_callback: (confirmed:boolean)=>void;\n redirect: boolean,\n redirectUrl: string\n};\n\n// ----------------- Page ------------------ //\n\nclass AdminPanel extends React.Component, State>\n{\n //========================//\n // Vars //\n //========================//\n\n db: DB;\n translation: any;\n loginParams: any;\n\n //========================//\n // Routine //\n //========================//\n\n constructor(props: any)\n {\n super(props);\n\n // Auth\n this.db = new DB();\n this.loginParams = window.sessionStorage['uf-admin-login'] === undefined ? undefined : JSON.parse(window.sessionStorage['uf-admin-login']);\n let gotLogin = this.loginParams !== undefined && this.loginParams.username !== undefined && this.loginParams.password !== undefined;\n if(gotLogin)\n {\n this.db.fetchKeys(this.loginParams, this.handleKeyFetch.bind(this));\n }\n\n this.state = {\n rows: [],\n classes_stat: 0,\n students_stat: 0,\n dialog_open: false,\n dialog_header: \"\",\n dialog_content: \"\",\n dialog_callback: ()=>{},\n redirect: !gotLogin,\n redirectUrl: \"/Admin\"\n }\n\n this.translation = translations[defaultTheme.default.language];\n\n this.generateKey = this.generateKey.bind(this);\n this.claimKey = this.claimKey.bind(this);\n this.unclaimKey = this.unclaimKey.bind(this);\n this.deleteKey = this.deleteKey.bind(this);\n this.dialogOpen = this.dialogOpen.bind(this);\n this.logout = this.logout.bind(this);\n this.handleDialogClose = this.handleDialogClose.bind(this);\n this.handleDialogConfirm = this.handleDialogConfirm.bind(this);\n\n // window.addEventListener(\"beforeunload\", (event: any) => {\n // window.sessionStorage['uf-admin-login'] = \"{}\";\n // });\n }\n\n //========================//\n\n render() \n {\n const { classes } = this.props;\n const t = this.translation;\n\n if(this.state.redirect) \n {\n return \n }\n\n return (\n \n
\n\n \n \n \n\n \n {t.admin_panel.title}\n \n\n \n {t.admin_panel.subtitle}\n \n\n \n {t.admin_panel.classes_stat}: {this.state.classes_stat}\n \n \n {t.admin_panel.students_stat}: {this.state.students_stat}\n \n\n



\n\n \n\n \n\n \n {this.state.dialog_header}\n \n \n {this.state.dialog_content}\n \n \n \n \n \n \n \n\n





\n
\n
\n );\n }\n\n //========================//\n // Button Logic //\n //========================//\n\n generateKey(event:any)\n {\n this.db.createKey(this.loginParams, this.handleNewKey.bind(this));\n }\n\n //========================//\n\n claimKey(column: IKeyColumn)\n {\n const completeAction = () => {\n let params = this.loginParams;\n params['key'] = column.keycode;\n params['className'] = \"Admin\";\n params['teacherId'] = \"Admin\";\n this.db.claimKey(params, (key: DBKey) => {\n this.setState(state => {\n const rows = state.rows.map((row: IKeyColumn) => {\n if(row.keycode === key.keycode)\n {\n let today = new Date();\n row.claim_date = today.toISOString().split(\"T\")[0];\n }\n return row;\n });\n return {\n rows,\n }\n });\n });\n };\n\n this.dialogOpen(\n this.translation.admin_panel.claim_header,\n this.translation.admin_panel.claim_description,\n (confirmed: boolean)=>{\n if(confirmed){\n completeAction();\n }\n }\n );\n }\n\n //========================//\n\n unclaimKey(column: IKeyColumn)\n {\n const completeAction = () => {\n let params = this.loginParams;\n params['key'] = column.keycode;\n this.db.freeKey(params, (key: DBKey) => {\n this.setState(state => {\n const rows = state.rows.map((row: IKeyColumn)=> {\n if(row.keycode === key.keycode)\n {\n row.claim_date = undefined;\n row.mail = \"\";\n }\n return row;\n });\n return {\n rows,\n }\n });\n });\n };\n\n this.dialogOpen(\n this.translation.admin_panel.unclaim_header,\n this.translation.admin_panel.unclaim_description,\n (confirmed: boolean)=>{\n if(confirmed){\n completeAction();\n }\n }\n );\n }\n\n //========================//\n\n deleteKey(column: IKeyColumn)\n {\n const completeAction = () => {\n let params = this.loginParams;\n params['key'] = column.keycode;\n this.db.deleteKey(params, (key: DBKey) => {\n const {rows} = this.state;\n for(let i = 0; i < rows.length; i++)\n {\n if(rows[i].keycode === column.keycode)\n {\n rows.splice(i, 1);\n break;\n }\n }\n this.setState({\n rows: rows\n });\n });\n };\n\n this.dialogOpen(\n this.translation.admin_panel.delete_header,\n this.translation.admin_panel.delete_description,\n (confirmed: boolean)=>{\n if(confirmed){\n completeAction();\n }\n }\n );\n }\n\n //========================//\n\n dialogOpen(header: string, content: string, callback: (confirmed:boolean)=>void)\n {\n this.setState({ \n dialog_open: true,\n dialog_header: header,\n dialog_content: content,\n dialog_callback: callback\n });\n }\n\n //========================//\n\n logout()\n {\n window.sessionStorage['uf-admin-login'] = \"{}\";\n this.setState({\n redirect: true,\n redirectUrl: \"/Admin\"\n })\n }\n\n //========================//\n // Callbacks //\n //========================//\n\n handleNewKey(key: DBKey)\n {\n const { rows } = this.state;\n let row: IKeyColumn = {\n id: key.id,\n keycode: key.keycode, \n resetcode: key.resetcode,\n class_id: key.class_id,\n create_date: key.created,\n claim_date: key.claimed === 'No' ? undefined : key.claimed\n } as IKeyColumn;\n rows.push(row);\n this.setState({\n rows: rows\n });\n }\n\n //========================//\n\n handleKeyFetch(keys: DBKey[])\n {\n let rows:IKeyColumn[] = [];\n keys.forEach(key => {\n rows.push({\n id: key.id,\n mail: key.mail === 'No' ? undefined : key.mail,\n keycode: key.keycode,\n resetcode: key.resetcode,\n class_id: key.class_id,\n create_date: key.created,\n claim_date: key.claimed === 'No' ? undefined : key.claimed\n } as IKeyColumn)\n });\n this.setState({\n rows: rows\n });\n\n this.db.fetchRegisteredClasses(this.loginParams, (count: string)=>{\n this.setState({\n classes_stat: parseInt(count)\n });\n });\n this.db.fetchRegisteredStudents(this.loginParams, (count: string)=>{\n this.setState({\n students_stat: parseInt(count)\n });\n })\n }\n\n //========================//\n\n handleDialogClose()\n {\n this.setState({\n dialog_open: false\n });\n this.state.dialog_callback(false);\n }\n\n //========================//\n\n handleDialogConfirm()\n {\n this.setState({ \n dialog_open: false\n });\n this.state.dialog_callback(true);\n }\n\n //========================//\n\n}\n\n// ----------------- Export ----------------- //\n\nexport default withStyles(AdminPanel);\n\n// ------------------------------------------ //","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport ControlPanel from './pages/control-panel';\nimport Login from './pages/login';\nimport Register from './pages/register';\nimport Reset from './pages/reset';\nimport AdminLogin from './pages/admin-login';\nimport AdminPanel from './pages/admin-panel';\nimport { HashRouter as Router, Route } from \"react-router-dom\";\n\n\nReactDOM.render( \n \n
\n \n \n \n \n\n \n \n
\n
, \n document.querySelector('#root')\n);"],"sourceRoot":""}