{"version":3,"sources":["Components/LoadingScreen/loading.jsx","redux/reducer.js","redux/judgingSetup/types.js","redux/judgingSetup/reducer.js","redux/store.js","utils/Server.ts","redux/oldStore.tsx","Components/Register/Register.js","Components/SignIn/SignIn.js","Components/routes.jsx","Components/JudgePortal/JudgePortal.js","Components/LandingPage/landing.js","App.js","serviceWorker.js","index.js"],"names":["connect","reduxState","main","props","className","loadingText","initialState","server","loading","projects","categories","rounds","selectedRound","selectedRoundIndex","page","selectedProject","selectedJudge","judges","judgesByKey","projectsByKey","assignments","projectsAssignments","judgesAssignments","rootReducer","combineReducers","state","action","type","payload","Object","assign","judgingSetup","store","createStore","composeWithDevTools","applyMiddleware","promiseMiddleware","Server","loadingScreen","isDev","this","window","location","host","indexOf","fairId","URLSearchParams","search","get","queryStringAddParam","loaded","addEventListener","iframeResponse","iframe","document","getElementById","url","dispatch","callParentShim","catch","error","result","axios","makeUrl","then","x","data","filesArray","length","postWithFiles","postNoFiles","formData","FormData","entries","forEach","entry","append","f","name","post","headers","console","log","postApi","response","Success","Message","trim","substr","event","iframeReady","preMessageQueue","call","msg","id","callback","messageQueue","messageId","promiseExecutor","resolve","contentWindow","postMessage","push","Promise","Store","user","instance","Register","maxLength","placeholder","onClick","cancelRegistration","SignIn","useState","isRegistering","setIsRegistering","email","setEmail","password","setPassword","onKeyUp","e","target","value","request","toast","info","r","signedIn","warning","path","component","ready","setReady","setUser","accessLinks","setAccessLinks","clients","setClients","showContests","setShowContests","links","setLinks","useEffect","Init","getApi","success","Value","first_name","ls","clientId","LoginRequired","requestLogin","SignInToFair","fair","fair_name","map","i","key","approved","removed","binding","dark","link","client","idInt","als","goto","src","alt","configure","withRouter","setTestShimPass","init","on","text","routes","Boolean","hostname","match","ReactDOM","render","StrictMode","navigator","serviceWorker","registration","unregister","message"],"mappings":"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","file":"static/js/main.cd9405fc.chunk.js","sourcesContent":["import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport './loading.css'\r\n\r\nconst Loading = (props) => {\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {props.loadingText || 'Loading'}\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (reduxState) => {\r\n return reduxState.main\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(Loading)","let initialState = {\r\n server:null,\r\n loading: false,\r\n loadingText: 'Loading'\r\n};\r\n\r\n\r\nexport const startLoading = () => {\r\n return {\r\n type: 'START_LOADING'\r\n }\r\n}\r\nexport const endLoading = () => {\r\n return {\r\n type: 'END_LOADING'\r\n }\r\n}\r\n\r\nexport const setLoadingText = (string) => {\r\n return {\r\n type: 'SET_LOADING_TEXT',\r\n payload: string\r\n }\r\n}\r\n\r\nexport default function reducer(state = initialState, action){\r\n let { type, payload } = action\r\n switch(type) {\r\n case 'START_LOADING':\r\n return Object.assign({}, state, { loading: true });\r\n case 'SET_LOADING_TEXT':\r\n return Object.assign({}, state, { loadingText: payload })\r\n case 'END_LOADING':\r\n return Object.assign({}, state, { \r\n loading: false, \r\n loadingText: 'Loading' \r\n });\r\n default:\r\n return state;\r\n }\r\n}","export const SET_PROJECTS = 'SET_PROJECTS' \r\nexport const SET_CATEGORIES = 'SET_CATEGORIES' \r\nexport const SET_ROUNDS = 'SET_ROUNDS' \r\nexport const SET_SELECTED_ROUND = 'SET_SELECTED_ROUND' \r\nexport const SET_SELECTED_ROUND_INDEX = 'SET_SELECTED_ROUND_INDEX' \r\nexport const SET_PAGE = 'SET_PAGE' \r\nexport const SET_SELECTED_PROJECT = 'SET_SELECTED_PROJECT' \r\nexport const SET_SELECTED_JUDGE = 'SET_SELECTED_JUDGE' \r\nexport const SET_JUDGES = 'SET_JUDGES' \r\nexport const SET_JUDGES_BY_KEY = 'SET_JUDGES_BY_KEY' \r\nexport const SET_PROJECTS_BY_KEY = 'SET_PROJECTS_BY_KEY' \r\nexport const SET_ASSIGNMENTS = 'SET_ASSIGNMENTS'\r\nexport const SET_PROJECTS_ASSIGNMENTS = 'SET_PROJECTS_ASSIGNMENTS'\r\nexport const SET_JUDGES_ASSIGNMENTS = 'SET_JUDGES_ASSIGNMENTS'\r\n","import {\r\n SET_PROJECTS\r\n ,SET_PROJECTS_BY_KEY\r\n ,SET_CATEGORIES\r\n ,SET_ROUNDS\r\n ,SET_SELECTED_ROUND\r\n ,SET_SELECTED_ROUND_INDEX\r\n ,SET_PAGE\r\n ,SET_SELECTED_PROJECT\r\n ,SET_SELECTED_JUDGE\r\n ,SET_JUDGES\r\n ,SET_JUDGES_BY_KEY\r\n ,SET_ASSIGNMENTS\r\n ,SET_PROJECTS_ASSIGNMENTS\r\n ,SET_JUDGES_ASSIGNMENTS\r\n} from './types'\r\n\r\n\r\nlet initialState = {\r\n projects: [],\r\n categories: [],\r\n rounds: [],\r\n selectedRound: {},\r\n selectedRoundIndex: null,\r\n page: 'round',\r\n selectedProject: {},\r\n selectedJudge: {},\r\n judges: [],\r\n judgesByKey: {},\r\n projectsByKey: {},\r\n assignments: [],\r\n projectsAssignments: {},\r\n judgesAssignments: {},\r\n\r\n // stuff from judgingRoundDetails I might need here\r\n // loadedProjects: false,\r\n // loadedJudges: false,\r\n // searchValue: \"\",\r\n // projectSearchValue: \"\",\r\n // judgeSearchValue: \"\",\r\n // judgesByKey: null,\r\n // projectsByKey: null,\r\n\r\n}\r\n\r\n\r\nexport default function reducer(state = initialState, action) {\r\n const { type, payload } = action\r\n switch (type) {\r\n case SET_PROJECTS:\r\n return Object.assign({}, state, {\r\n projects: payload\r\n });\r\n case SET_CATEGORIES:\r\n return Object.assign({}, state, {\r\n categories: payload\r\n })\r\n case SET_ROUNDS:\r\n return Object.assign({}, state, {\r\n rounds: payload\r\n })\r\n case SET_SELECTED_ROUND:\r\n return Object.assign({}, state, {\r\n selectedRound: payload\r\n })\r\n case SET_SELECTED_ROUND_INDEX:\r\n return Object.assign({}, state, {\r\n selectedRoundIndex: payload\r\n })\r\n case SET_PAGE:\r\n return Object.assign({}, state, {\r\n page: payload\r\n })\r\n case SET_SELECTED_PROJECT:\r\n return Object.assign({}, state, {\r\n selectedProject: payload\r\n })\r\n case SET_SELECTED_JUDGE:\r\n return Object.assign({}, state, {\r\n selectedJudge: payload\r\n })\r\n case SET_JUDGES:\r\n return Object.assign({}, state, {\r\n judges: payload\r\n })\r\n case SET_JUDGES_BY_KEY:\r\n return Object.assign({}, state, {\r\n judgesByKey: payload\r\n })\r\n case SET_PROJECTS_BY_KEY:\r\n return Object.assign({}, state, {\r\n projectsByKey: payload\r\n })\r\n case SET_ASSIGNMENTS:\r\n return Object.assign({}, state, {\r\n assignments: payload\r\n })\r\n case SET_PROJECTS_ASSIGNMENTS:\r\n return Object.assign({}, state, {\r\n projectsAssignments: payload\r\n })\r\n case SET_JUDGES_ASSIGNMENTS:\r\n return Object.assign({}, state, {\r\n judgesAssignments: payload\r\n })\r\n default:\r\n return state\r\n }\r\n}","import { applyMiddleware, createStore, combineReducers } from 'redux'\r\nimport promiseMiddleware from 'redux-promise-middleware'\r\nimport { composeWithDevTools } from 'redux-devtools-extension'\r\nimport reducer from './reducer'\r\nimport judgingSetupReducer from './judgingSetup/reducer'\r\n\r\n\r\nconst rootReducer = combineReducers({\r\n main: reducer,\r\n judgingSetup: judgingSetupReducer\r\n})\r\n\r\nconst store = createStore(rootReducer, composeWithDevTools(applyMiddleware(promiseMiddleware)))\r\n\r\nexport default store","import axios, { AxiosResponse } from \"axios\";\r\nimport store from \"../redux/store\";\r\nimport { startLoading, endLoading, setLoadingText } from \"../redux/reducer\";\r\n\r\nexport type ServerResponse = {\r\n Success: boolean;\r\n LoginRequired: boolean;\r\n Message: string;\r\n Value: T;\r\n};\r\n\r\nexport class ServerCallOptions {\r\n loadingScreenShow: boolean = true;\r\n loadingScreenText: string = \"loading\";\r\n}\r\n\r\nexport class Server {\r\n loadingScreen: boolean;\r\n isDev: boolean = false;\r\n\r\n static iframeReady: boolean = false;\r\n static preMessageQueue: any = [];\r\n static messageQueue: any = {};\r\n static iframe: any;\r\n static loaded: boolean = false;\r\n static messageId: number = 0;\r\n static queryStringAddParam: any = null;\r\n\r\n constructor(loadingScreen: any) {\r\n this.loadingScreen = loadingScreen;\r\n\r\n let isDev = (this.isDev = window.location.host.indexOf(\"localhost:\") > -1);\r\n let params = new URLSearchParams(window.location.search);\r\n let fairId = params.get(\"f\");\r\n if (fairId) {\r\n Server.queryStringAddParam = `f=${fairId}`;\r\n }\r\n\r\n if (isDev && !Server.loaded) {\r\n //Server.iframe = document.getElementById('fms-shim');\r\n window.addEventListener(\"message\", Server.iframeResponse, false);\r\n Server.loaded = true;\r\n if (!Server.iframe) {\r\n Server.iframe = document.getElementById(\"fms-shim\");\r\n }\r\n }\r\n }\r\n\r\n public async getApi(url: string): Promise {\r\n if (this.loadingScreen) {\r\n store.dispatch(startLoading());\r\n // store.dispatch(setLoadingText('I am a little teapot'))\r\n }\r\n if (this.isDev) {\r\n let result = await Server.callParentShim(false, url, null).catch(error => { throw error })\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n return result;\r\n }\r\n\r\n return await axios\r\n .get(this.makeUrl(url))\r\n .then((x: any) => {\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n return x.data;\r\n })\r\n .catch((x: any) => {\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n //console.log(x);\r\n });\r\n }\r\n\r\n public async postApi(url: string, data: any, filesArray: File[] = []): Promise {\r\n if (this.loadingScreen) {\r\n store.dispatch(startLoading());\r\n }\r\n if (this.isDev) {\r\n let result = await Server.callParentShim(true, url, data, filesArray);\r\n //console.log('post api shim', result);\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n return result;\r\n }\r\n if (filesArray.length) {\r\n return await this.postWithFiles(data, filesArray, url);\r\n } else {\r\n return await this.postNoFiles(url, data);\r\n\r\n }\r\n }\r\n\r\n private async postWithFiles(data: any, filesArray: File[], url: string) {\r\n //TODO: This needs to be tested. Not sure if it will work. Do we need to set content type for each item in the multi part form data?\r\n const formData = new FormData();\r\n Object.entries(data).forEach((entry) => {\r\n formData.append(entry[0], entry[1]);\r\n });\r\n filesArray.forEach(f => {\r\n formData.append('file', f, f.name);\r\n });\r\n let result = await axios.post(this.makeUrl(url), formData, { //Do we even need to set headers?\r\n headers:{\"Content-Type\": \"multipart/form-data\"}\r\n });\r\n return result.data;\r\n }\r\n\r\n private async postNoFiles(url: string, data: any) {\r\n let result = await axios\r\n .post(this.makeUrl(url), data, {\r\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\r\n })\r\n .catch((x) => {\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n console.log(x);\r\n throw x;\r\n });\r\n if (this.loadingScreen) {\r\n store.dispatch(endLoading());\r\n }\r\n return result.data;\r\n }\r\n\r\n \r\n public async postApiQuite(url: string, data: any): Promise {\r\n if (this.isDev) {\r\n let result = await Server.callParentShim(true, url, data);\r\n return result;\r\n }\r\n let result = await axios\r\n .post(this.makeUrl(url), data, {\r\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\r\n })\r\n .catch((x) => {\r\n console.log(x);\r\n throw x;\r\n });\r\n return result.data;\r\n }\r\n /**This overvariation of postApi handles server response errors. If serverResponse.Success === false, it will throw an error. */\r\n public async postApiWithServerResponse(url: string, data: any, filesArray: File[] = []): Promise> {\r\n let response = await this.postApi>(url, data, filesArray).catch(error => { throw (error); });\r\n if (!response.Success) {\r\n throw response.Message;\r\n }\r\n return response;\r\n }\r\n\r\n private makeUrl(url: string): string {\r\n url = url.trim();\r\n if (url.indexOf(\"/\") === 0 || url.indexOf(\"\\\\\") === 0) {\r\n url = url.substr(1);\r\n }\r\n\r\n if (this.isDev) {\r\n //return \"https://national.zfairs.com/\" + url;\r\n return \"http://localhost:8001/\" + url;\r\n } else {\r\n url = `../${url}`;\r\n if (Server.queryStringAddParam) {\r\n if (url.indexOf(\"?\") > -1) {\r\n url += `&${Server.queryStringAddParam}`;\r\n } else {\r\n url += `?${Server.queryStringAddParam}`;\r\n }\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n private static async iframeResponse(event: any) {\r\n if (event.data.type !== \"shim\") {\r\n if (event.data.type === \"shim-ready\") {\r\n Server.iframeReady = true;\r\n //send all messages that where waiting...\r\n Server.preMessageQueue.forEach((call: any) => {\r\n call();\r\n });\r\n }\r\n\r\n return;\r\n }\r\n let { msg, id } = await event.data;\r\n let callback = Server.messageQueue[id];\r\n if (callback) callback(msg);\r\n }\r\n\r\n private static callParentShim(post: boolean, url: string, data: any, filesArray: File[] = []): Promise {\r\n let id = Server.messageId + url;\r\n Server.messageId++;\r\n\r\n let promiseExecutor = (resolve: any) => {\r\n let callback = (response: any) => {\r\n //console.log('callback response: ', response)\r\n resolve(response);\r\n };\r\n\r\n Server.messageQueue[id] = callback;\r\n if (!Server.iframe) {\r\n Server.iframe = document.getElementById(\"fms-shim\");\r\n }\r\n let call = () => {\r\n Server.iframe.contentWindow.postMessage(\r\n {\r\n type: \"shim\",\r\n id,\r\n action: post ? \"post\" : \"get\",\r\n data,\r\n url: url,\r\n filesArray: filesArray\r\n },\r\n \"*\"\r\n );\r\n };\r\n\r\n if (Server.iframeReady) {\r\n call();\r\n } else {\r\n this.preMessageQueue.push(call);\r\n }\r\n };\r\n\r\n return new window.Promise(promiseExecutor);\r\n }\r\n}\r\n","import {Server} from '../utils/Server'\r\n\r\nexport class Store{\r\n server:Server|null;\r\n user:any|null;\r\n public static instance:Store|null = null;\r\n constructor(){\r\n if(Store.instance){\r\n this.server = Store.instance.server;\r\n this.user = Store.instance.user;\r\n } else {\r\n Store.instance = this;\r\n }\r\n this.server = null;\r\n this.user = null;\r\n }\r\n\r\n public getInstnace(){\r\n return Store.instance\r\n }\r\n\r\n public init(loadingScreen:any){\r\n if(!Store.instance) {\r\n Store.instance = this;\r\n //return;\r\n }\r\n\r\n if(!Store.instance.server){\r\n Store.instance.server = new Server(loadingScreen);\r\n console.log('################ init ########################'); \r\n }\r\n \r\n }\r\n}\r\n\r\nconst store = new Store();\r\nexport {store}","import React, { useState, useEffect } from \"react\";\r\nimport { store } from \"../../redux/oldStore.tsx\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nexport default function Register(props) {\r\n\r\nconst cancelRegistration = ()=>{\r\n props.cancelRegistration();\r\n};\r\n\r\n return (\r\n <>\r\n {true && (\r\n
\r\n

Register

\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n cancel\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { store } from \"../../redux/oldStore.tsx\";\r\nimport { toast } from \"react-toastify\";\r\nimport Register from \"../Register/Register\";\r\n\r\nexport default function SignIn(props) {\r\n const [isRegistering, setIsRegistering] = useState(false);\r\n const [email, setEmail] = useState('');\r\n const [password, setPassword] = useState('');\r\n\r\n const register = () => {\r\n setIsRegistering(true);\r\n };\r\n\r\n const cancelRegister = () => {\r\n setIsRegistering(false);\r\n };\r\n\r\n const SignUserIn = () => {\r\n let request = {\r\n email,\r\n password\r\n };\r\n\r\n if(!email || email.length < 4 || email.indexOf('@') === -1 || email.indexOf('.') === -1){\r\n toast.info(`Please enter a valid email. You have entered \"${email}\"`);\r\n return;\r\n }\r\n if(!password || password.length < 4){\r\n toast.info('Please enter a valid password.');\r\n return;\r\n }\r\n\r\n store.server.postApi(\"../Call/SignIn\", request).then((r) => {\r\n if (r.Success) {\r\n props.signedIn();\r\n } else {\r\n toast.warning(r.Message);\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {!isRegistering && (\r\n
\r\n

Sign In

\r\n
\r\n \r\n {setEmail(e.target.value);}} />\r\n
\r\n\r\n
\r\n \r\n {setPassword(e.target.value)}} />\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {isRegistering && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport Landing from './LandingPage/landing';\r\nimport JudgePortal from './JudgePortal/JudgePortal';\r\n\r\n\r\nexport default (\r\n \r\n \r\n \r\n \r\n )","import React, { useState, useEffect } from \"react\";\r\nimport { store } from \"../../redux/oldStore.tsx\";\r\nimport { toast } from \"react-toastify\";\r\nimport SignIn from \"../SignIn/SignIn\";\r\n\r\nexport default function JudgePortal() {\r\n const isDev = window.location.host.indexOf(\"localhost:\") > -1;\r\n const [ready, setReady] = useState(false);\r\n const [user, setUser] = useState(null);\r\n const [accessLinks, setAccessLinks] = useState([]);\r\n const [clients, setClients] = useState([]);\r\n const [showContests, setShowContests] = useState(false);\r\n const [links, setLinks] = useState({});\r\n\r\n useEffect(() => {\r\n Init();\r\n }, []);\r\n\r\n const Init = () => {\r\n store.server.getApi(\"../JudgePortal/Info\").then((r) => {\r\n if (r.Success) {\r\n toast.success(`Hi ${r.Value.user.first_name}.`);\r\n setClients(r.Value.clients);\r\n setAccessLinks(r.Value.accessLinks);\r\n setUser(r.Value.user);\r\n\r\n let ls = {};\r\n r.Value.accessLinks.forEach((x) => {\r\n ls[x.clientId] = x;\r\n });\r\n\r\n setLinks(ls);\r\n } else if (r.LoginRequired) {\r\n requestLogin();\r\n }\r\n setReady(true);\r\n });\r\n };\r\n const AddNewContest = () => {\r\n toast.dark(\r\n `Hi ${user.first_name}, here is the list of all of the contests.`\r\n );\r\n setShowContests(true);\r\n };\r\n\r\n const SignInToFair = (fair) => {\r\n toast.info(\r\n `Hey ${user.first_name}, we are logging you into ${fair.fair_name}. Hold on!`\r\n );\r\n \r\n\r\n if (isDev) {\r\n let url = `http://localhost:8001/JudgePortal/SsoRequest/${fair.fairId}`;\r\n console.log(url);\r\n window.location = url;\r\n } else {\r\n window.location = `../JudgePortal/SsoRequest/${fair.fairId}`;\r\n }\r\n };\r\n\r\n const SignOut=()=>{\r\n toast.info('We are signing you out.');\r\n setUser(null);\r\n\r\n if (isDev) {\r\n let url = `http://localhost:8001/Call/SignOut`;\r\n console.log(url);\r\n window.location = url;\r\n } else {\r\n window.location = `../Call/SignOut`;\r\n }\r\n };\r\n\r\n const requestAccess = (client) => {\r\n store.server\r\n .postApi(\"../JudgePortal/Request\", { fairId: client.fair.idInt })\r\n .then((r) => {\r\n if (r.LoginRequired) {\r\n requestLogin();\r\n } else if (r.Success) {\r\n toast.info(\r\n `${user.first_name} we requested access for you to be a judge for ${client.name}.`\r\n );\r\n let als = accessLinks;\r\n als.push(r.Value);\r\n\r\n let ls = {};\r\n als.forEach((x) => {\r\n ls[x.clientId] = x;\r\n });\r\n\r\n //setClients(clients);\r\n\r\n setLinks(ls);\r\n } else {\r\n toast.error(\r\n `Hey ${user.first_name}, it looks like something went wrong. ${r.Message}`\r\n );\r\n }\r\n });\r\n toast.dark(`Let's see what we can do.`);\r\n };\r\n\r\n const requestLogin = () => {\r\n setUser(null);\r\n toast.warning(\"You need to sign in.\");\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n

\r\n Multi-Contest Judge Access\r\n

\r\n {ready && (\r\n
\r\n
\r\n {!user && }\r\n {user && (\r\n
\r\n {!showContests && (\r\n <>\r\n
\r\n Hi {user.first_name},\r\n
\r\n
\r\n Welcome to your Multi-Contest Judge Access portal! This page is where you will find and manage the contests you are judging. \r\n You can also use this page to request to be a judge at multiple contests. To request to be a \r\n judge at additional contests, click the green Add button, then find and select the contest you wish to judge.\r\n
\r\n
\r\n
\r\n

Quick Sign In

\r\n
\r\n {accessLinks.map((x, i) => {\r\n return (\r\n
\r\n
\r\n {x.state} \r\n
\r\n
\r\n {x.fair_name}\r\n
\r\n\r\n {x.approved && !x.removed && (\r\n {\r\n SignInToFair(x);\r\n }}\r\n >\r\n Sign In at {x.binding}\r\n
\r\n )}\r\n {x.removed && (\r\n
\r\n Removed\r\n
\r\n )}\r\n {!x.approved && (\r\n
\r\n pending\r\n
\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n
\r\n\r\n {\r\n AddNewContest();\r\n }}\r\n >\r\n Add\r\n
\r\n
\r\n
\r\n
\r\n \r\n )}\r\n {showContests && (\r\n
\r\n
\r\n {user.first_name}, find and select the contest(s) you wish to judge. If approved by the contest admin, the contest will appear on your Multi-Contest Judge Access portal.\r\n
\r\n
\r\n
\r\n
{/* place search here */}
\r\n
\r\n {\r\n setShowContests(false);\r\n }}\r\n >\r\n Close\r\n
\r\n
\r\n
\r\n
\r\n {clients &&\r\n clients.map((x, i) => {\r\n if (x == null || !x) return null;\r\n\r\n let link = links[x.id];\r\n console.log(\"Link\", link);\r\n\r\n return (\r\n \r\n
\r\n {x.state} \r\n
\r\n
{x.name}
\r\n\r\n {link && link.approved && !link.removed && (\r\n {\r\n SignInToFair(x);\r\n }}\r\n >\r\n Sign In at {x.binding}\r\n
\r\n )}\r\n {link && link.removed && (\r\n
\r\n Removed\r\n
\r\n )}\r\n {link && !link.approved && !link.removed && (\r\n
\r\n pending\r\n
\r\n )}\r\n {!link && (\r\n {\r\n requestAccess(x);\r\n }}\r\n >\r\n request access to judge\r\n
\r\n )}\r\n
\r\n );\r\n })}\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n )}\r\n
\r\n {user && (\r\n
\r\n \r\n {user.first_name}\r\n {\" \"}\r\n Sign Out\r\n
\r\n )}\r\n
{\" \"}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { store } from \"../../redux/oldStore.tsx\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nexport default function Landing() {\r\n const goto = (id) => {\r\n switch (id) {\r\n case \"NHDWebCentral\":\r\n window.location = \"https://nhdwebcentral.org\";\r\n break;\r\n case \"FindContest\":\r\n window.location = \"https://register.nhd.org/Contests\";\r\n break;\r\n case \"JudgePortal\":\r\n window.location = \"/app/judge-portal\";\r\n break;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n\r\n {\r\n goto(\"FindContest\");\r\n }}\r\n >\r\n
Contest Portal
\r\n
\r\n \r\n
\r\n
Find your NHD contest.
\r\n
click to select
\r\n
\r\n\r\n {\r\n goto(\"NHDWebCentral\");\r\n }}\r\n >\r\n
NHDWebCentral™
\r\n
\r\n \r\n
\r\n
\r\n Build your NHDWebCentral™ project.\r\n
\r\n
click to select
\r\n
\r\n\r\n\r\n
{\r\n goto(\"JudgePortal\");\r\n }}>\r\n
Multi-Contest Judge Access
\r\n
\r\n \r\n
\r\n
\r\n Sign in to your multi-contest judge account. \r\n
\r\n
click to select
\r\n
\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\nimport Loading from \"./Components/LoadingScreen/loading.jsx\";\nimport routes from \"./Components/routes.jsx\";\nimport { withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { store } from \"./redux/oldStore.tsx\";\nimport \"../node_modules/react-toastify/dist/ReactToastify.css\";\nimport \"./Base.css\";\nimport \"./App.css\";\n\ntoast.configure();\n\nfunction App(props) {\n const [settings, setSettings] = useState(null);\n const [testShimPass, setTestShimPass] = useState(false);\n \n useEffect(()=>{\n store.server.postApi('../shim/test').then(r=>{\n console.log(r);\n if(r.Success){\n setTestShimPass(true);\n }\n });\n\n }, []);\n\n \n const toggleLoading = (on, text) => {\n if (!text) text = \"Loading\";\n };\n store.init(toggleLoading);\n\n\n return (\n <>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {routes}\n
\n
\n
\n
\n \n
\n
\n
\n
\n {props.loading && }\n \n );\n}\n\nconst mapStateToProps = (reduxState) => {\n return reduxState.main;\n};\n\nexport default withRouter(connect(mapStateToProps, {})(App));\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport store from './redux/store.js'\nimport { Provider } from 'react-redux'\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}