{"version":3,"sources":["webpack:///./app/javascript/shared/Utils.js","webpack:///./app/javascript/shared/I18n.js","webpack:///./app/javascript/results/CountSwitcher.jsx","webpack:///./app/javascript/results/YearTermSwitcher.jsx","webpack:///./app/javascript/results/Switcher.jsx","webpack:///./app/javascript/results/Table.jsx","webpack:///./app/javascript/results/Main.jsx","webpack:///./app/javascript/packs/Results.js","webpack:///./app/javascript/shared/ExamFilterContainer.jsx","webpack:///./app/javascript/shared/LoadingCube.jsx","webpack:///./app/javascript/professors/ProfessorHelpers.js"],"names":["Utils","url","callback_func","error_callback","this","requestHelper","type","success","data","error","requestOptions","formattedOptions","method","withCredentials","headers","tokenElement","document","querySelector","token","content","axios","then","response","getAllAcademicYears","translator","t","allExamNames","getPackageForTier","tier","getTerm","term_as_int","getExamName","exam_level","getExamLevel","exam_name","indexOf","getAcademicYear","year_level","getFullName","object","first_name","last_name","allGradesPresent","grades","numberActiveStudents","length","fitsSearchTerm","student","term","toLowerCase","first","last","first_name_match","last_name_match","combo_match","filterByExamLevel","filterByActiveLiveExam","default_selected_student_id","active_live_exam","id","delayedRedirect","location","time","setTimeout","window","showNotification","message","Noty","layout","theme","text","closeWith","animation","open","close","show","setPageUrl","base_url","params","view","history","pushState","title","verifyTrue","value","verifyFalse","groupBy","key","reduce","rv","x","push","parameters","strftime","date","format","i18nHelper","I18nPackage","setTranslations","translations","Object","freeze","CountSelector","changeCount","defaultValue","range","multiplier","className","children","onChange","e","Array","map","_x","index","ResultsCountSwitcher","fetching","count_indiv","count_team","fetchingClass","YearTermSwitcher","yearsAndTerms","activeYearTermCombo","props","formYearTermLink","year","active_exam_level","rowClass","Fragment","active_year","active_term_as_int","activeClass","toString","link","href","join","ResultsSwitcher","handleExamClick","changeExam","is_preview","active_exam_name","years_and_terms","titleKey","subtitle","ExamFilterContainer","examNames","activeExamName","handleClick","React","PureComponent","TableHead","ResultCell","is_admin","edit_mode","result","score","TableBody","results","determineRank","getSchoolName","rank","fullName","ResultsTable","resultId","handleChange","parseInt","target","school","name","school_name","EditModeActions","handleSave","toggleEditMode","editTextKey","toggleClass","onClick","TeamResults","active_team_results","determineHeader","ActualResults","results_exist","active_individual_results","LoadingCube","subtitleClass","resultsUnreleased","resultsExistForCurrentSelection","noResults","Results","state","loaded","formQueryString","initialData","countIndiv","countTeam","examLevel","isPreview","termAsInt","loadResults","reactFinishedRendering","loadInitialReactData","setState","queryString","baseUrl","count","ending","previous_results","newScore","newResults","ProfessorHelpers","saveHistoricalRecords","i","addEventListener","resultsElement","getElementById","dataset","ReactDOM","render","createElement","DesktopVersion","sharedRowClass","descriptor","_examName","rowClassName","examName","active","MobileVersion","handleSelect","selectedIndex","findIndex","options","sharedProps","smallVersion","callback_error","errorResponse","on_success","on_failure","grade","JSON","parse","msg","selected_students","idsAsString","obj","ids","academic_year","errorCallback","answer","impersonating_check","updated_historical_records","records"],"mappings":";srBAAoC,IAEfA,EAAK,yB,4FAAA,S,UA+CvB,O,EA/CuB,E,EAAA,mCAoCxB,SAA4BC,EAAKC,EAAeC,GAC9C,OAAOC,KAAKC,cAAc,CACxBC,KAAM,MACNL,MACAM,QAAS,SAASC,GAChB,OAAON,EAAcM,EACvB,EACAC,MAAO,SAASD,GACd,OAAOL,EAAeK,EACxB,GAEJ,K,EA/CwB,O,8EA+CvB,EA/CuB,GAALR,EACZK,cAAgB,WAA+B,IAAtBK,EAAc,uDAAG,CAAC,EAC1CC,EAAmB,CACvBC,OAAQF,EAAeJ,KACvBL,IAAKS,EAAeT,IACpBY,iBAAiB,GAEnB,GAA4B,SAAxBH,EAAeJ,KAAiB,CAClCK,EAAiBG,QAAU,CACzB,eAAgB,oBAGlB,IAAMC,EAAeC,SAASC,cAAc,uBACtCC,EAAQH,GAAgBA,EAAaI,QACvCD,IACFP,EAAiBG,QAAQ,gBAAkBI,GAG7CP,EAAiBH,KAAOE,EAAeF,IACzC,CAEAY,MAAMT,GACHU,MAAK,SAAUC,GAETZ,EAAeH,SAEpBG,EAAeH,QAAQe,EAASd,KAClC,IAAE,OACK,SAAUC,GAEVC,EAAeD,OAEpBC,EAAeD,MAAMA,EAAMa,SAC7B,GACJ,EAlCmBtB,EAiDZuB,oBAAsB,iBAAM,CACjCC,IAAWC,EAAE,uBACbD,IAAWC,EAAE,sBACbD,IAAWC,EAAE,qBACbD,IAAWC,EAAE,oBACbD,IAAWC,EAAE,sBACbD,IAAWC,EAAE,sBACb,EAxDiBzB,EA0DZ0B,aAAe,iBAAM,CAC1BF,IAAWC,EAAE,uBACbD,IAAWC,EAAE,uBACbD,IAAWC,EAAE,mBACbD,IAAWC,EAAE,uBACbD,IAAWC,EAAE,wBACbD,IAAWC,EAAE,oBACb,EAjEiBzB,EAmEZ2B,kBAAoB,SAACC,GAM1B,MALiB,CACfJ,IAAWC,EAAE,yBACbD,IAAWC,EAAE,yBACbD,IAAWC,EAAE,0BAECG,EAAO,EACzB,EA1EmB5B,EA6EZ6B,QAAU,SAASC,GAKxB,MAJc,CACZN,IAAWC,EAAE,gBACbD,IAAWC,EAAE,eAEFK,EACf,EAnFmB9B,EAuFZ+B,YAAc,SAASC,GAE5B,OADqB5B,KAAKsB,eACNM,EACtB,EA1FmBhC,EA4FZiC,aAAe,SAASC,GAE7B,OADqB9B,KAAKsB,eACNS,QAAQD,EAC9B,EA/FmBlC,EAmGZoC,gBAAkB,SAASC,GAEhC,OADuBjC,KAAKmB,sBACNc,EACxB,EAtGmBrC,EAyGZsC,YAAc,SAASC,GAC5B,OAAIA,EACI,GAAN,OAAWA,EAAOC,WAAU,YAAMD,EAAOE,WAElC,GAEX,EA/GmBzC,EAmHZ0C,iBAAmB,SAASC,EAAQC,GACzC,OAAOD,EAAOE,SAAWD,CAC3B,EArHmB5C,EAwHZ8C,eAAiB,SAASC,EAASC,GACxCA,EAAOA,EAAKC,cACZ,IAAMC,EAAQH,EAAQP,WAAWS,cAC3BE,EAAOJ,EAAQN,UAAUQ,cAEzBG,GAA4C,IAAzBF,EAAMf,QAAQa,GACjCK,GAA0C,IAAxBF,EAAKhB,QAAQa,GAC/BM,GAAoD,IAAtC,UAAGJ,EAAK,YAAIC,GAAOhB,QAAQa,GAE/C,OAAOI,GAAoBC,GAAmBC,GAAyB,KAATN,CAChE,EAlImBhD,EAqIZuD,kBAAoB,SAASR,EAASf,GAC3C,OAAOe,EAAQf,aAAeA,CAChC,EAvImBhC,EA0IZwD,uBAAyB,SAAST,EAASU,GAChD,OAAqC,IAA7BV,EAAQW,kBAA4BX,EAAQY,KAAOF,CAC7D,EA5ImBzD,EA8IZ4D,gBAAkB,SAASC,GAAwB,IAAdC,EAAI,uDAAG,KACjD,OAAOC,YAAa,kBAAMC,OAAOH,SAAWA,CAAQ,GAAGC,EACzD,EAhJmB9D,EAkJZiE,iBAAmB,SAASC,EAAS5D,GAC1C,IAAI6D,KAAK,CACP7D,OACA8D,OAAQ,WACRC,MAAO,aACPC,KAAMJ,EACNK,UAAW,CACT,QACA,UAEFC,UAAW,CACTC,KAAM,oBACNC,MAAO,wBAERC,MACL,EAjKmB3E,EAmKZ4E,WAAa,SAASC,EAAUC,EAAQC,GAC7C,IAAM9E,EAAM6E,EAAM,UAAMD,GAAQ,OAAGC,GAAW,GAE9C,GAAI7E,GAAO+E,QAAQC,UACjB,OAAOD,QAAQC,UAAU,CAAEF,QAAQ/D,SAASkE,MAAOjF,EAEvD,EAzKmBD,EA2KZmF,WAAa,SAAAC,GAAK,OAAuC,IAAnC,CAAC,QAAQ,GAAMjD,QAAQiD,EAAc,EA3K/CpF,EA6KZqF,YAAc,SAAAD,GAAK,OAAyC,IAArC,CAAC,SAAS,GAAOjD,QAAQiD,EAAc,EA7KlDpF,EA+KZsF,QAAU,SAAS9E,EAAM+E,GAC9B,OAAO/E,EAAKgF,QAAO,SAASC,EAAIC,GAE9B,OADCD,EAAGC,EAAEH,IAAQE,EAAGC,EAAEH,KAAS,IAAII,KAAKD,GAC9BD,CACT,GAAG,CAAC,EACN,EApLmBzF,EAsLZyB,EAAI,SAAS8D,GAAuB,IAAlBK,EAAU,uDAAG,CAAC,EACrC,OAAOpE,IAAWC,EAAE8D,EAAKK,EAC3B,EAxLmB5F,EA0LZ6F,SAAW,SAASC,EAAMC,GAC/B,OAAOvE,IAAWqE,SAASC,EAAMC,EACnC,C,iCC9LF,sCAEIC,EAAa,IAFjB,MAEqBC,GACfzE,EAAa,CACjBC,EAAC,SAAC8D,GAAuB,IAAlBK,EAAU,uDAAG,CAAC,EACnB,OAAOI,EAAWvE,EAAE8D,EAAKK,EAC3B,EACAC,SAAQ,SAACC,EAAMC,GACb,OAAOC,EAAWvE,EAAEqE,EAAMC,EAC5B,EACAG,gBAAe,SAACC,GACdH,EAAWG,aAAeA,CAC5B,GAGFC,OAAOC,OAAO7E,E,m2BCZd,IAAM8E,EAAgB,SAAH,OAAMC,EAAW,EAAXA,YAAaC,EAAY,EAAZA,aAAclG,EAAI,EAAJA,KAAMmG,EAAK,EAALA,MAAOC,EAAU,EAAVA,WAAU,OACzE,yBAAKC,UAAU,wBACb,0BAAMA,UAAU,cAAcC,SAAU5G,IAAMyB,EAAE,iBAAD,OAAkBnB,MACjE,4BACEqG,UAAU,+DACVE,SAAU,SAACC,GAAC,OAAKP,EAAYO,EAAE,SAAD,OAAWxG,GAAO,EAChDkG,aAAcA,GAEb,EAAIO,MAAMN,IAAQO,KAAI,SAACC,EAAIC,GAAK,OAC/B,4BACE3B,IAAG,gBAAWjF,EAAI,mBAAW4G,GAC7BP,UAAU,uBACVC,SAAQ,WAAMM,EAAQ,GAAKR,IAC3B,KAGF,EA2BOS,EAxBc,SAAH,GAA4D,IAAtDC,EAAQ,EAARA,SAAUb,EAAW,EAAXA,YAAac,EAAW,EAAXA,YAAaC,EAAU,EAAVA,WAC5DC,EAAgBH,EAAW,oBAAsB,GAEvD,OACE,yBAAKT,UAAS,aAAQY,IACpB,kBAAC,EAAa,CACZhB,YAAaA,EACbC,aAAca,EACd/G,KAAK,QACLmG,MAAO,GACPC,WAAY,KAGd,kBAAC,EAAa,CACZH,YAAaA,EACbC,aAAcc,EACdhH,KAAK,OACLoG,WAAY,EACZD,MAAO,KAIf,E,yaCzCA,IA2Dee,EA3DU,SAAH,GAAoE,IAA9DJ,EAAQ,EAARA,SAAUK,EAAa,EAAbA,cAAeC,EAAmB,EAAnBA,oBAAwBC,EAAK,OAC1EC,EAAmB,SAACC,EAAM/F,GAC9B,IAAQgG,EAAsBH,EAAtBG,kBACR,MAAM,sBAAN,OAA6BD,EAAI,wBAAgB/F,EAAW,uBAAegG,EAC7E,EAWMP,EAAgBH,EAAW,oBAAsB,GACjDW,EAAW,gDAIjB,OACE,kBAAC,IAAMC,SAAQ,KAEb,yBAAKrB,UAAS,UAAKoB,EAAQ,4BAAoBR,IAC5CE,EAAcT,KAAI,SAACxG,EAAM0G,GACxB,IAnByBW,EAAM/F,EAC7BmG,EAAaC,EAkBTC,GAnBmBN,EAmBmBrH,EAAKqH,KAnBlB/F,EAmBwBtB,EAAKsB,YAlB1DmG,EAAoCN,EAApCM,YAAaC,EAAuBP,EAAvBO,mBACjBD,IAAgBJ,EAAKO,YAAcF,GAAsBpG,EAAYsG,WAChE,UAGF,IAcKC,EAAOT,EAAiBpH,EAAKqH,KAAMrH,EAAKsB,aAC9C,OACE,yBAAKyD,IAAG,+BAA0B2B,GAASP,UAAU,qBACnD,yBAAKA,UAAS,UAZR,6DAYsB,OAAGwB,IAC7B,uBACExB,UAAU,aACV2B,KAAMD,EACNzB,SAAU,CAACpG,EAAKqH,KAAM7H,IAAM6B,QAAQrB,EAAKsB,cAAcyG,KAAK,QAKtE,KAIF,yBAAK5B,UAAS,UAAKoB,EAAQ,qBAAaR,IACtC,4BAAQZ,UAzBM,sFAyBkBH,aAAckB,GAC3CD,EAAcT,KAAI,SAACxG,EAAM0G,GAAK,OAC7B,4BACE3B,IAAG,yCAAoC2B,GACvCP,UAAU,uBACV,YAAWiB,EAAiBpH,EAAKqH,KAAMrH,EAAKsB,aAC5CsD,MAAO,CAAC5E,EAAKqH,KAAM7H,IAAM6B,QAAQrB,EAAKsB,cAAcyG,KAAK,KACzD3B,SAAU,CAACpG,EAAKqH,KAAM7H,IAAM6B,QAAQrB,EAAKsB,cAAcyG,KAAK,MAC5D,MAMd,E,yiDCxDkD,IAE5CC,EAAe,a,sRAAA,U,MAAA,4GAGlB,OAHkB,oCACnBC,gBAAkB,SAACvB,GACjB,EAAKS,MAAMe,WAAWxB,EACxB,EAAC,EAiDA,O,EAjDA,G,EAAA,qBAED,WACE,MAQI9G,KAAKuH,MAPPP,EAAQ,EAARA,SACAuB,EAAU,EAAVA,WACAV,EAAW,EAAXA,YACAC,EAAkB,EAAlBA,mBACAU,EAAgB,EAAhBA,iBACArC,EAAW,EAAXA,YACAsC,EAAe,EAAfA,gBAIIC,EAAWH,EAAa,yBAA2B,gBACnD3F,EAAOhD,IAAM6B,QAAQqG,GACrBa,EAAW,CAACd,EAAajF,EAAM4F,GAAkBL,KAAK,KACtDb,EAAsB,CAACO,EAAajF,GAAMuF,KAAK,KAErD,OACE,yBAAK5B,UAAU,aACb,yBAAKA,UAAU,qCAAqChD,GAAG,oBACrD,wBAAIgD,UAAU,cAAcC,SAAU5G,IAAMyB,EAAEqH,KAC9C,wBAAInC,UAAU,qCAAqCC,SAAUmC,IAE7D,kBAACC,EAAA,EAAmB,CAClB5B,SAAUA,EACV6B,UAAWjJ,IAAM0B,eACjBwH,eAAgBN,EAChBO,YAAa/I,KAAKqI,kBAGpB,6BAECE,EACG,kBAAC,EAAoB,CACnBtB,YAAajH,KAAKuH,MAAMN,YACxBC,WAAYlH,KAAKuH,MAAML,WACvBF,SAAUA,EACVb,YAAaA,IAEf,kBAAC,EAAgB,iBACXnG,KAAKuH,MAAK,CACdF,cAAeoB,EACfnB,oBAAqBA,MAKnC,M,8EAAC,EApDkB,CAAS0B,IAAMC,eAuDrBb,I,k9DC1Df,IAAMc,EAAY,SAAH,OAAMhJ,EAAI,EAAJA,KAAI,OACvB,2BAAOqG,UAAU,iBACf,wBAAIA,UAAU,aACZ,wBAAIA,UAAU,aAAaC,SAAU5G,IAAMyB,EAAE,kBACnC,gBAATnB,GACC,wBAAIqG,UAAU,aAAaC,SAAU5G,IAAMyB,EAAE,kBAG/C,wBAAIkF,UAAU,aAAaC,SAAU5G,IAAMyB,EAAE,oBAC7C,wBAAIkF,UAAU,aAAaC,SAAU5G,IAAMyB,EAAE,oBAEzC,EAGJ8H,EAAa,SAAH,GAAmD,IAA7CC,EAAQ,EAARA,SAAUC,EAAS,EAATA,UAAWC,EAAM,EAANA,OAAQ7C,EAAQ,EAARA,SACjD,OAAK2C,GAAaC,EAKhB,2BACE9C,UAAU,yCACVH,aAAckD,EAAOC,MACrB9C,SAAU,SAACC,GAAC,OAAKD,EAASC,EAAG4C,EAAO/F,GAAG,IAPlC,wBAAIgD,UAAU,+BAA+BC,SAAU8C,EAAOC,OAUzE,EAEMC,EAAY,SAAH,GAAmE,IAA7DC,EAAO,EAAPA,QAASvJ,EAAI,EAAJA,KAAMwJ,EAAa,EAAbA,cAAeC,EAAa,EAAbA,cAAkBpC,EAAK,OACxE,IAAKkC,EAAS,OAAO,KACrB,IAAIG,EAAO,EAEX,OACE,2BAAOrD,UAAU,cACdkD,EAAQ7C,KAAI,SAAC0C,EAAQxC,GACpB8C,EAAOF,EAAcE,EAAM9C,GAC3B,IAAM+C,EAAQ,UAAMP,EAAOlH,WAAU,YAAIkH,EAAOjH,WAEhD,OACE,wBAAIkE,UAAU,YAAYpB,IAAG,oBAAe2B,IAC1C,wBAAIP,UAAU,aAAaC,SAAUoD,IAC3B,gBAAT1J,GACC,wBAAIqG,UAAU,aAAaC,SAAUqD,IAGvC,wBAAItD,UAAU,aAAaC,SAAUmD,EAAcL,KACnD,kBAAC,EAAU,iBAAK/B,EAAK,CAAE+B,OAAQA,KAGrC,IAGN,EAEMQ,EAAY,a,sRAAA,U,MAAA,4GAsBf,OAtBe,oCAChBJ,cAAgB,SAACE,EAAM9C,GACrB,GAAc,IAAVA,EAAa,OAAO,EAExB,IAAQ2C,EAAY,EAAKlC,MAAjBkC,QAGR,OAFqBA,EAAQ3C,GAAOyC,QACdE,EAAQ3C,EAAQ,GAAGyC,MACEK,EAEpC9C,EAAQ,CACjB,EAAC,EAEDL,SAAW,SAACC,EAAGqD,IAGbC,EAFyB,EAAKzC,MAAtByC,cAEKD,EADIE,SAASvD,EAAEwD,OAAOlF,OAErC,EAAC,EAED2E,cAAgB,SAACL,GAGf,OAAOA,EAAOa,OAAOC,MAAQd,EAAOe,WACtC,EAAC,EAiBA,O,EAjBA,G,EAAA,qBAED,WACE,IAAQnK,EAASF,KAAKuH,MAAdrH,KAER,OACE,2BAAOqG,UAAU,sCACf,kBAAC,EAAS,CAACrG,KAAMA,IAEjB,kBAAC,EAAS,iBACJF,KAAKuH,MAAK,CACdmC,cAAe1J,KAAK0J,cACpBjD,SAAUzG,KAAKyG,SACfkD,cAAe3J,KAAK2J,iBAI5B,M,8EAAC,EAvCe,CAASX,IAAMC,eA0ClBa,I,m/FC3Ff,IAAMQ,EAAkB,SAAH,GAAyE,IAAnElB,EAAQ,EAARA,SAAUb,EAAU,EAAVA,WAAYc,EAAS,EAATA,UAAWkB,EAAU,EAAVA,WAAYC,EAAc,EAAdA,eACtE,IAAKpB,GAAYb,EAAY,OAAO,KACpC,IAAMkC,EAAcpB,EAAY,YAAc,OACxCqB,EAAcrB,EAAY,gBAAkB,cAElD,OACE,yBAAK9C,UAAU,mBACb,yBAAKA,UAAU,OAEZ8C,GACC,yBACE9C,UAAU,mCACVoE,QAASJ,EACT/D,SAAU5G,IAAMyB,EAAE,gBAKtB,yBACEkF,UAAS,2BAAsBmE,EAAW,oBAC1CC,QAASH,EACThE,SAAU5G,IAAMyB,EAAE,SAAD,OAAUoJ,OAKrC,EAEMG,EAAc,SAAH,GAA6D,IAAvDvB,EAAS,EAATA,UAAWwB,EAAmB,EAAnBA,oBAAqBC,EAAe,EAAfA,gBACrD,OAAIzB,EAAkB,KAGpB,kBAAC,IAAMzB,SAAQ,KACb,wBAAIrB,UAAU,yBAAyBC,SAAUsE,EAAgB,WACjE,kBAAC,EAAY,CAAC5K,KAAK,QAAQuJ,QAASoB,IAG1C,EAEME,EAAgB,SAACxD,GACrB,IACEP,EAMEO,EANFP,SACAgE,EAKEzD,EALFyD,cACAnD,EAIEN,EAJFM,YACAC,EAGEP,EAHFO,mBACAmD,EAEE1D,EAFF0D,0BACAH,EACEvD,EADFuD,gBAEF,GAAI9D,EACF,OAAO,kBAACkE,EAAA,EAAW,MAGrB,IAAMC,EAAgB,mCAChBC,EAAoBxL,IAAMyB,EAAE,8BAA+B,CAC/DoG,KAAMI,EACNjF,KAAMhD,IAAM6B,QAAQqG,KAEhBuD,EAAkCJ,EAA0BxI,OAAS,EACrE6I,EAAY1L,IAAMyB,EAAE,4BAE1B,OACE,yBAAKkF,UAAU,aACb,kBAAC,EAAoBgB,IAEnByD,GAAiB,wBAAIzE,UAAW4E,EAAe3E,SAAU4E,KACzDC,GAAmC,wBAAI9E,UAAW4E,EAAe3E,SAAU8E,IAC5EN,GAAiBK,GAChB,kBAAC,IAAMzD,SAAQ,KACb,wBAAIrB,UAAU,yBAAyBC,SAAUsE,EAAgB,iBACjE,kBAAC,EAAY,iBACPvD,EAAK,CACTrH,KAAK,cACLuJ,QAASwB,KAEX,kBAAC,EAAgB1D,IAK3B,EAGMgE,GAAO,a,sRAAA,U,MAAA,4GAuGV,OAvGU,oCACXC,MAAQ,CACNxE,UAAU,EACVyE,QAAQ,GACR,EAEFC,gBAAkB,WAChB,MAQI,EAAKF,MAPPC,EAAM,EAANA,OACAxE,EAAW,EAAXA,YACAC,EAAU,EAAVA,WACAQ,EAAiB,EAAjBA,kBACAI,EAAkB,EAAlBA,mBACAD,EAAW,EAAXA,YACAU,EAAU,EAAVA,WAEIoD,EAAc,EAAKpE,MAAMnH,KAC3BkJ,EAAM,sBAAkBmC,EAASxE,EAAc0E,EAAYC,YAO/D,OANAtC,GAAM,sBAAmBmC,EAASvE,EAAayE,EAAYE,WAC3DvC,GAAM,sBAAmBmC,EAAS/D,EAAoBiE,EAAYG,WAClExC,GAAM,sBAAmBmC,EAASlD,EAAaoD,EAAYI,WAC3DzC,GAAM,uBAAoBmC,EAAS3D,EAAqB6D,EAAYK,WACpE1C,GAAM,gBAAamC,EAAS5D,EAAc8D,EAAYlE,KAGxD,EAAC,EAEDwE,YAAc,WACZrI,OAAOsI,wBAAyB,EAChC,IAAMrM,EAAG,6BAAyB,EAAK6L,mBAevC9L,IAAMuM,qBAAqBtM,GAdT,SAACO,GAGjB,GAFAwD,OAAOsI,wBAAyB,EAChC,EAAKE,SAAShM,GACVA,EAAKmI,WAAY,CACnB,IAAM8D,EAAW,sBAAkBjM,EAAK6G,YAAW,uBAAe7G,EAAK8G,WAAU,uBAAe9G,EAAKsH,mBACrG9H,IAAM4E,WAAW,kCAAmC6H,EAAazM,IAAMyB,EAAE,0BAC3E,CACF,IAEgB,WACduC,OAAOsI,wBAAyB,EAChCtM,IAAMiE,iBAAiBjE,IAAMyB,EAAE,uBAAwB,QACzD,GAGF,EAAC,EAMDiH,WAAa,SAACxB,GACZ,MAAwD,EAAK0E,MAArDjD,EAAU,EAAVA,WAAYV,EAAW,EAAXA,YAAaC,EAAkB,EAAlBA,mBAEjC,EAAKsE,SAAS,CAAE1E,kBAAmBZ,EAAOE,UAAU,IAAQ,WAC1D,IAAMsF,EAAU/D,EAAa,iCAAmC,gBAC1D7D,EAAM,gBAAYmD,EAAW,wBAAgBC,EAAkB,uBAAehB,GACpFlH,IAAM4E,WAAW8H,EAAS5H,EAAQ,uBAClC,EAAKuH,aACP,GACF,EAAC,EAED9F,YAAc,SAACO,EAAGxG,GAAU,IAAD,EACzB,EAAKkM,UAAQ,iBAAOlM,GAASwG,EAAEwD,OAAOlF,OAAK,gBAAY,GAAI,IAAI,WAC7D,EAAKiH,aACP,GACF,EAAC,EAEDnB,gBAAkB,SAAC5K,GACjB,MAAgD,EAAKsL,MAA7CjD,EAAU,EAAVA,WAAYtB,EAAW,EAAXA,YAAaC,EAAU,EAAVA,WAC3BqF,EAAkB,gBAATrM,EAA0B+G,EAAcC,EACjDsF,EAASjE,EAAa,WAAa,GAEzC,OAAO3I,IAAMyB,EAAE,eAAD,OAAgBnB,GAAI,OAAGsM,GAAU,CAAED,MAAOA,GAC1D,EAAC,EAED/B,eAAiB,WACf,MAAmE,EAAKgB,MAAhEnC,EAAS,EAATA,UAAWoD,EAAgB,EAAhBA,iBAAkBxB,EAAyB,EAAzBA,0BACjC5B,EAEF,EAAK+C,SAAS,CAAE/C,WAAW,EAAO4B,0BAA2BwB,IAG7D,EAAKL,SAAS,CAAE/C,WAAW,EAAMoD,iBAAiB,EAAMxB,IAE5D,EAAC,EAEDjB,aAAe,SAACzG,EAAImJ,GAClB,IACMC,EADgC,EAAKnB,MAAnCP,0BACqCrE,KAAI,SAAC0C,GAChD,OAAOA,EAAO/F,KAAOA,EAAK+F,EAAM,OAAQA,GAAM,IAAEC,MAAOmD,GACzD,IAEA,EAAKN,SAAS,CAAEnB,0BAA2B0B,GAC7C,EAAC,EAEDpC,WAAa,WACX,IAAMd,EAAU,EAAK+B,MAAMP,0BAA0BrE,KAAI,SAAA0C,GACvD,MAAO,CAAE/F,GAAI+F,EAAO/F,GAAIgG,MAAOD,EAAOC,MACxC,IACAqD,IAAiBC,sBAAsBpD,GAAS,kBAAM,EAAK2C,SAAS,CAAEpF,UAAU,GAAQ,IAExF,EAAKoF,SAAS,CAAEpF,UAAU,GAC5B,EAAC,EAuBA,O,EAvBA,G,EAAA,gCAxDD,WACEhH,KAAKiM,aACP,GAAC,oBAwDD,WAEE,OADmBjM,KAAKwL,MAAhBC,OAIN,yBAAKlF,UAAU,mBACb,kBAAC,EAAe,iBACVvG,KAAKwL,MAAK,CACdlD,WAAYtI,KAAKsI,WACjBnC,YAAanG,KAAKmG,eAGpB,kBAAC,EAAa,iBACRnG,KAAKwL,MAAK,CACdV,gBAAiB9K,KAAK8K,gBACtBd,aAAchK,KAAKgK,aACnBO,WAAYvK,KAAKuK,WACjBC,eAAgBxK,KAAKwK,mBAfP,IAmBtB,M,8EAAC,EA9HU,CAASxB,IAAMC,eAiIbsC,M,sBC1Nf,mmGAAAuB,GAAA,wBAAAA,EAAA,sBAAAA,GAAA,iBAAAA,GAAA,ssDAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,4bAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,yhBAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,qGAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,skBAIAlM,SAASmM,iBAAiB,mBAAkB,cAAE,yGACjB,mCAA4C,KAAD,EAAhEhH,EAAY,OAClB3E,KAAW0E,gBAAgBC,IAErBiH,EAAiBpM,SAASqM,eAAe,8BAEvC1F,EAAQ,CAAEnH,KAAM4M,EAAeE,SACrCC,IAASC,OAAOpE,IAAMqE,cAAc9B,GAAShE,GAAQyF,IACtD,2C,k8DCXH,IAAMM,EAAiB,SAAC/F,GACtB,IACEJ,EAMEI,EANFJ,cACAoG,EAKEhG,EALFgG,eACA1E,EAIEtB,EAJFsB,UACAC,EAGEvB,EAHFuB,eACAC,EAEExB,EAFFwB,YAAY,EAEVxB,EADFiG,kBAAU,MAAG,SAACC,GAAgB,OAAO,IAAM,EAAC,EAExCC,EAAY,UAAMH,EAAc,yCAAiCpG,GAEvE,OACE,yBAAKZ,UAAWmH,GACb7E,EAAUjC,KAAI,SAAC+G,EAAU7G,GACxB,IAAM8G,EAAS9E,IAAmB6E,EAAW,UAAY,GACzD,OACE,yBAAKxI,IAAG,0BAAqB2B,GAASP,UAAU,qBAC9C,yBACEA,UAAS,2EAAsEqH,IAE/E,yBACErH,UAAU,aACVoE,QAAS,kBAAM5B,EAAYjC,EAAM,EACjCN,SAAUmH,IAGXH,EAAWG,IAIpB,IAGN,EAEME,EAAgB,SAACtG,GACrB,IACEJ,EAKEI,EALFJ,cACAoG,EAIEhG,EAJFgG,eACA1E,EAGEtB,EAHFsB,UACAC,EAEEvB,EAFFuB,eACAgF,EACEvG,EADFuG,aAGIJ,EAAY,UAAMH,EAAc,qBAAapG,GAE7C4G,EAAgBlF,EAAUmF,WAAU,SAAC5D,GAAI,OAAKA,IAAStB,CAAc,IAE3E,OACE,yBAAKvC,UAAWmH,GACd,4BAAQnH,UALY,+DAKgBH,aAAc2H,EAAetH,SAAUqH,GACxEjF,EAAUjC,KAAI,SAAC+G,EAAU7G,GACxB,OACE,4BACE3B,IAAG,oCAA+B2B,GAClCP,UAAU,uBACVvB,MAAO8B,EACPN,SAAUmH,GAGhB,KAIR,EAEM/E,EAAmB,a,sRAAA,U,MAAA,4GAKtB,OALsB,oCACvBkF,aAAe,SAACpH,IAGdqC,EAFwB,EAAKxB,MAArBwB,aACcrC,EAAEwD,OAAO+D,QAAQvH,EAAEwD,OAAO6D,eAAe/I,MAEjE,EAAC,EAkBA,O,EAlBA,E,EAAA,qBAED,WACE,MAAkChF,KAAKuH,MAA/BP,EAAQ,EAARA,SAAU+B,EAAW,EAAXA,YAGZmF,E,+VAAW,EACf/G,cAHoBH,EAAW,oBAAsB,GAIrDuG,eAHqB,iDAIlBvN,KAAKuH,OAGV,OACE,kBAAC,IAAMK,SAAQ,KACb,kBAAC0F,EAAc,iBAAKY,EAAW,CAAEnF,YAAaA,KAC9C,kBAAC8E,EAAa,iBAAKK,EAAW,CAAEJ,aAAc9N,KAAK8N,gBAGzD,I,iFAAC,EAvBsB,CAAS9E,IAAMC,eA0BzBL,K,iCC9Ff,oBAcesC,IAZK,SAAH,GAAkC,IAAD,IAA3BiD,oBAAY,OAAQ,EAGzC,OACE,yBAAK5H,UAAS,uBAAkB4H,GAAgB,UAHrC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAI5BvH,KAAI,SAACkG,GAAC,OACV,yBAAK3H,IAAG,eAAU2H,GAAKvG,UAAS,yBAAoBuG,IAAM,IAIlE,C,gkBCZoC,IAEfF,EAAgB,yB,4FAAA,S,UAyNlC,O,EAzNkC,E,EAAA,8BACnC,SAAuB3E,EAAM7H,EAAMN,EAAesO,GAMhD,OALsB,MAAlBA,IACFA,EAAiB,WAAO,GAG1BxK,OAAOsI,wBAAyB,EACzBtM,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAKoI,EACL7H,OACAD,QAAS,SAASe,GAChB0C,OAAOsI,wBAAyB,EAChCtM,IAAMiE,iBAAiB3C,EAAU,WACjCpB,GACF,EACAO,MAAO,SAASgO,GACdzK,OAAOsI,wBAAyB,EAC5BmC,GAAiBA,EAAcjO,MACjCR,IAAMiE,iBAAiBwK,EAAcjO,KAAM,SAE7CgO,GACF,GAEJ,GAAC,yBAED,SAAmBnG,EAAM7H,EAAMkO,EAAYC,GAGzC,OAFA3K,OAAOsI,wBAAyB,EAEzBtM,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAKoI,EACL7H,OACAD,QAAS,SAASe,GAChB0C,OAAOsI,wBAAyB,EAChC,IAAMsC,EAAQC,KAAKC,MAAMxN,EAASsN,OAElC,OADA5O,IAAMiE,iBAAiB3C,EAASyN,IAAK,WAC9BL,EAAWE,EACpB,EACAnO,MAAO,SAASgO,GAKd,OAJAzK,OAAOsI,wBAAyB,EAC5BmC,GAAiBA,EAAcjO,MACjCR,IAAMiE,iBAAiBwK,EAAcjO,KAAM,SAEtCmO,GACT,GAEJ,GAAC,0BAED,SAAoBzM,EAAW8M,EAAmB9O,EAAeC,GAC/D,IAAK+B,IAAcA,EAAUW,OAE3B,OADA1C,IACOH,IAAMiE,iBAAiBjE,IAAMyB,EAAE,+BAAgC,SAGxE,IACMwN,EADMD,EAAkBhI,KAAI,SAAAkI,GAAG,OAAIA,EAAIvL,EAAE,IACvByE,WACxB,OAAOpI,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAK,yBACLO,KAAM,CACJ2O,IAAKF,EACL/M,aAEF3B,QAAS,SAASe,GAEhB,OADAtB,IAAMiE,iBAAiB3C,EAAU,WAC1BpB,EAAcgC,EACvB,EACAzB,MAAO,SAASgO,GAEd,OADAtO,IACOH,IAAMiE,iBAAiBwK,EAAcjO,KAAM,QACpD,GAEJ,GAAC,oCAED,SAA8BwO,EAAmB9O,GAC/C,IACM+O,EADMD,EAAkBhI,KAAI,SAAAkI,GAAG,OAAIA,EAAIvL,EAAE,IACvByE,WACxB,OAAOpI,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAK,2BACLO,KAAM,CACJ2O,IAAKF,GAEP1O,QAAS,SAASe,GAEhB,OADAtB,IAAMiE,iBAAiB3C,EAAU,WAC1BpB,GACT,EACAO,MAAO,SAASgO,GACd,OAAOzO,IAAMiE,iBAAiBwK,EAAcjO,KAAM,QACpD,GAEJ,GAAC,wBAED,SAAkB6H,EAAM7F,EAAYC,EAAW2M,EAAelN,EAAWhC,GACvE,MAAmB,KAAfsC,GAAmC,KAAdC,GAAsC,KAAlB2M,GAAsC,KAAdlN,EAC5DlC,IAAMiE,iBAAiBjE,IAAMyB,EAAE,2BAA4B,UAGpEuC,OAAOsI,wBAAyB,EACzBtM,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAKoI,EACL7H,KAAM,CACJ,WAAcgC,EACd,UAAaC,EACb,KAAQ2M,EACR,UAAalN,GAEf3B,QAAS,SAASe,GAChB0C,OAAOsI,wBAAyB,EAChC,IAAMvJ,EAAU8L,KAAKC,MAAMxN,EAASyB,SAEpC,OADA/C,IAAMiE,iBAAiB3C,EAASyN,IAAK,WAC9B7O,EAAc6C,EACvB,EACAtC,MAAO,SAASgO,GAEd,OADAzK,OAAOsI,wBAAyB,EACzBtM,IAAMiE,iBAAiBwK,EAAcjO,KAAM,QACpD,IAEJ,GAAC,4BAED,SAAsB6H,EAAMnI,EAAemP,GACzC,OAAOrP,IAAMK,cAAc,CACzBC,KAAM,MACNL,IAAKoI,EACL9H,QAAS,SAASe,GAChB,IAAMqB,EAASkM,KAAKC,MAAMxN,EAASqB,QACnC,OAAOzC,EAAcyC,EACvB,EACAlC,MAAO,SAASgO,GAEd,OADAzO,IAAMiE,iBAAiBwK,EAAcjO,KAAM,SACpC6O,GACT,GAEJ,GAAC,gCAED,SAA0BhH,EAAM7F,EAAYC,EAAWoF,EAAM3H,GAC3D,OAAOF,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAKoI,EACL7H,KAAM,CACJ,WAAcgC,EACd,UAAaC,EACb,KAAQoF,GAEVtH,QAAS,SAASe,GAChB,IAAMyB,EAAU8L,KAAKC,MAAMxN,EAASyB,SAEpC,OADA/C,IAAMiE,iBAAiB3C,EAASyN,IAAK,WAC9B7O,EAAc6C,EACvB,EACAtC,MAAO,SAASgO,GACd,OAAOzO,IAAMiE,iBAAiBwK,EAAcjO,KAAM,QACpD,GAEJ,GAAC,sCAED,SAAgC6H,EAAMiH,EAAQD,GAC5C,OAAOrP,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAKoI,EACL7H,KAAM,CACJ,OAAU8O,GAEZ/O,QAAS,SAASe,GAEhB,OADAtB,IAAMiE,iBAAiB3C,EAAU,QAC1BtB,IAAM4D,gBAAgBC,SAASuE,WAAY,IACpD,EACA3H,MAAO,SAASD,GAEd,OADAR,IAAMiE,iBAAiB3C,SAAU,SAC1B+N,GACT,GAEJ,GAAC,2BAED,SAAqBpP,EAAKsP,EAAqBpP,GAC7C,OAAOH,IAAMK,cAAc,CACzBC,KAAM,OACNL,MACAM,QAAS,WAGP,OAFAP,IAAMiE,iBAAiBjE,IAAMyB,EAAE,0BAA2B,WAEtD8N,EACKvP,IAAM4D,gBAAgB,UAEtB5D,IAAMK,cAAc,CACzBC,KAAM,MACNL,IAAK,eACLM,QAAS,WACP,OAAOP,IAAM4D,gBAAgB,QAC/B,GAGN,EACAnD,MAAO,SAASgO,GAEd,OADAtO,IACOH,IAAMiE,iBAAiBwK,EAAcjO,KAAM,QACpD,GAEJ,GAAC,mCAED,SAA6BgP,EAA4BrP,GACvD,OAAOH,IAAMK,cAAc,CACzBC,KAAM,OACNL,IAAK,iCACLO,KAAM,CACJiP,QAASD,GAEXjP,QAAS,SAASe,GAEhB,OADAtB,IAAMiE,iBAAiB3C,EAAU,WAC1BtB,IAAM4D,gBAAgBC,SAASuE,WACxC,EACA3H,MAAO,SAASgO,GAEd,OADAzO,IAAMiE,iBAAiBwK,EAAcjO,KAAM,SACpCL,GACT,GAEJ,K,EAzNmC,O,8EAyNlC,EAzNkC,E","file":"js/Results-efb60e2ad28c5d091c7a.chunk.js","sourcesContent":["import { translator } from './I18n';\n\nexport default class Utils {\n static requestHelper = function(requestOptions = {}) {\n const formattedOptions = {\n method: requestOptions.type,\n url: requestOptions.url,\n withCredentials: true\n };\n if (requestOptions.type === 'POST') {\n formattedOptions.headers = {\n 'Content-Type': 'application/json'\n };\n\n const tokenElement = document.querySelector('[name=\"csrf-token\"]');\n const token = tokenElement && tokenElement.content;\n if (token) {\n formattedOptions.headers['X-CSRF-TOKEN'] = token;\n }\n\n formattedOptions.data = requestOptions.data;\n }\n\n axios(formattedOptions)\n .then(function (response) {\n // Request was a success :)\n if (!requestOptions.success) return;\n\n requestOptions.success(response.data);\n })\n .catch(function (error) {\n // We reached our target server, but it returned an error\n if (!requestOptions.error) return;\n\n requestOptions.error(error.response);\n });\n }\n\n static loadInitialReactData(url, callback_func, error_callback) {\n return this.requestHelper({\n type: 'GET',\n url,\n success: function(data) {\n return callback_func(data);\n },\n error: function(data) {\n return error_callback(data);\n }\n });\n }\n\n static getAllAcademicYears = () => [\n translator.t('basic.years.seventh'),\n translator.t('basic.years.eighth'),\n translator.t('basic.years.fresh'),\n translator.t('basic.years.soph'),\n translator.t('basic.years.junior'),\n translator.t('basic.years.senior')\n ];\n\n static allExamNames = () => [\n translator.t('basic.exams.pre_alg'),\n translator.t('basic.exams.alg_one'),\n translator.t('basic.exams.geo'),\n translator.t('basic.exams.alg_two'),\n translator.t('basic.exams.pre_calc'),\n translator.t('basic.exams.calc')\n ];\n\n static getPackageForTier = (tier) => {\n const PACKAGES = [\n translator.t('basic.package_a.title'),\n translator.t('basic.package_b.title'),\n translator.t('basic.package_c.title')\n ];\n return PACKAGES[tier - 1];\n }\n\n // helper function that takes in an integer and returns a translated term for it\n static getTerm = function(term_as_int) {\n const TERMS = [\n translator.t('basic.spring'),\n translator.t('basic.fall')\n ];\n return TERMS[term_as_int];\n }\n\n // helper function that takes in an integer and returns the exam_name for it.\n // example: getExamName(1) will return \"Algebra I\"\n static getExamName = function(exam_level) {\n const allExamNames = this.allExamNames();\n return allExamNames[exam_level];\n }\n\n static getExamLevel = function(exam_name) {\n const allExamNames = this.allExamNames();\n return allExamNames.indexOf(exam_name);\n }\n\n // helper function that takes in an integer and returns the academic year for it.\n // example: getAcademicYear(1) will return 'Seventh Grade'\n static getAcademicYear = function(year_level) {\n const academic_years = this.getAllAcademicYears();\n return academic_years[year_level];\n };\n\n // function that takes in an object and returns the object's full name\n static getFullName = function(object) {\n if (object) {\n return `${ object.first_name } ${ object.last_name }`;\n } else {\n return '-';\n }\n };\n\n // function that takes in an array of grades and returns if all grades have\n // been submitted\n static allGradesPresent = function(grades, numberActiveStudents) {\n return grades.length === numberActiveStudents;\n }\n\n // function that filters a student based on a filter term\n static fitsSearchTerm = function(student, term) {\n term = term.toLowerCase();\n const first = student.first_name.toLowerCase();\n const last = student.last_name.toLowerCase();\n\n const first_name_match = first.indexOf(term) !== -1;\n const last_name_match = last.indexOf(term) !== -1;\n const combo_match = `${first} ${last}`.indexOf(term) !== -1;\n\n return first_name_match || last_name_match || combo_match || (term === '');\n };\n\n // function that filters a student based on exam_level\n static filterByExamLevel = function(student, exam_level) {\n return student.exam_level === exam_level;\n };\n\n // function that filters a student based on active_live_exam\n static filterByActiveLiveExam = function(student, default_selected_student_id) {\n return (student.active_live_exam === 0) || (student.id === default_selected_student_id);\n }\n\n static delayedRedirect = function(location, time = 1500) {\n return setTimeout(( () => window.location = location), time);\n };\n\n static showNotification = function(message, type) {\n new Noty({\n type,\n layout: 'topRight',\n theme: 'semanticui',\n text: message,\n closeWith: [\n 'click',\n 'button'\n ],\n animation: {\n open: 'noty_effects_open',\n close: 'noty_effects_close'\n }\n }).show();\n }\n\n static setPageUrl = function(base_url, params, view) {\n const url = params ? `${base_url}${params}` : '';\n\n if (url && history.pushState) {\n return history.pushState({ view }, document.title, url);\n }\n };\n\n static verifyTrue = value => ['true', true].indexOf(value) !== -1;\n\n static verifyFalse = value => ['false', false].indexOf(value) !== -1;\n\n static groupBy = function(data, key) {\n return data.reduce(function(rv, x) {\n (rv[x[key]] = rv[x[key]] || []).push(x);\n return rv;\n }, {});\n };\n\n static t = function(key, parameters = {}) {\n return translator.t(key, parameters);\n }\n\n static strftime = function(date, format) {\n return translator.strftime(date, format);\n }\n}\n","import { I18n as I18nPackage } from 'i18n-js';\n\nlet i18nHelper = new I18nPackage();\nconst translator = {\n t(key, parameters = {}) {\n return i18nHelper.t(key, parameters);\n },\n strftime(date, format) {\n return i18nHelper.t(date, format);\n },\n setTranslations(translations) {\n i18nHelper.translations = translations;\n }\n};\n\nObject.freeze(translator);\nexport { translator };\n","import React from 'react';\nimport Utils from '../shared/Utils';\n\nconst CountSelector = ({ changeCount, defaultValue, type, range, multiplier }) => (\n
\n \n changeCount(e, `count_${type}`)}\n defaultValue={defaultValue}\n >\n {[...Array(range)].map((_x, index) => (\n \n ))}\n \n
\n);\n\nconst ResultsCountSwitcher = ({ fetching, changeCount, count_indiv, count_team }) => {\n const fetchingClass = fetching ? ' disabled-element' : '';\n\n return (\n
\n \n\n \n
\n );\n}\n\nexport default ResultsCountSwitcher;\n","import React from 'react';\nimport Utils from '../shared/Utils';\n\nconst YearTermSwitcher = ({ fetching, yearsAndTerms, activeYearTermCombo, ...props }) => {\n const formYearTermLink = (year, term_as_int) => {\n const { active_exam_level } = props;\n return `/home/results?year=${year}&term_as_int=${term_as_int}&exam_level=${active_exam_level}`;\n };\n\n const determineActiveYearTerm = (year, term_as_int) => {\n const { active_year, active_term_as_int } = props;\n if (active_year === year.toString() && active_term_as_int == term_as_int.toString()) {\n return ' active';\n }\n\n return '';\n };\n\n const fetchingClass = fetching ? ' disabled-element' : '';\n const rowClass = 'row align-items-center justify-content-center';\n const cardClass = 'card select-box text-center small-text space-bottom-small';\n const selectClass = 'custom-select custom-select-redirect medium-text space-top-small space-bottom-small';\n\n return (\n \n {/* Desktop Version */}\n
\n {yearsAndTerms.map((data, index) => {\n const activeClass = determineActiveYearTerm(data.year, data.term_as_int);\n const link = formYearTermLink(data.year, data.term_as_int);\n return (\n
\n
\n \n
\n
\n );\n })}\n
\n\n {/* Mobile Version */}\n
\n \n
\n
\n );\n}\n\nexport default YearTermSwitcher;\n","import React from 'react';\nimport Utils from '../shared/Utils';\nimport ExamFilterContainer from '../shared/ExamFilterContainer';\nimport ResultsCountSwitcher from './CountSwitcher';\nimport YearTermSwitcher from './YearTermSwitcher';\n\nclass ResultsSwitcher extends React.PureComponent {\n handleExamClick = (index) => {\n this.props.changeExam(index);\n }\n\n render() {\n const {\n fetching,\n is_preview,\n active_year,\n active_term_as_int,\n active_exam_name,\n changeCount,\n years_and_terms\n } = this.props;\n\n\n const titleKey = is_preview ? 'titles.results_preview' : 'results.title';\n const term = Utils.getTerm(active_term_as_int);\n const subtitle = [active_year, term, active_exam_name].join(' ');\n const activeYearTermCombo = [active_year, term].join(' ');\n\n return (\n
\n
\n

\n

\n\n \n\n
\n\n {is_preview\n ? \n : }\n

\n
\n );\n }\n}\n\nexport default ResultsSwitcher;\n","import React from 'react';\nimport Utils from '../shared/Utils';\n\nconst TableHead = ({ type }) => (\n \n \n \n {type === 'individuals' && (\n \n )}\n\n \n \n \n \n);\n\nconst ResultCell = ({ is_admin, edit_mode, result, onChange }) => {\n if (!is_admin || !edit_mode) {\n return \n }\n\n return (\n onChange(e, result.id) }\n />\n );\n};\n\nconst TableBody = ({ results, type, determineRank, getSchoolName, ...props }) => {\n if (!results) return null;\n let rank = 1;\n\n return (\n \n {results.map((result, index) => {\n rank = determineRank(rank, index);\n const fullName = `${result.first_name} ${result.last_name}`;\n\n return (\n \n \n {type === 'individuals' && (\n \n )}\n\n \n \n \n );\n })}\n \n );\n};\n\nclass ResultsTable extends React.PureComponent {\n determineRank = (rank, index) => {\n if (index === 0) return 1;\n\n const { results } = this.props;\n const currentScore = results[index].score;\n const previousScore = results[index - 1].score;\n if (currentScore === previousScore) return rank;\n\n return index + 1;\n }\n\n onChange = (e, resultId) => {\n const { handleChange } = this.props;\n const newScore = parseInt(e.target.value);\n handleChange(resultId, newScore);\n }\n\n getSchoolName = (result) => {\n // If the school somehow gets deleted, we should\n // fallback on the school_name saved on the HistoricalRecord\n return result.school.name || result.school_name;\n }\n\n render() {\n const { type } = this.props;\n\n return (\n \n \n\n \n
\n );\n }\n}\n\nexport default ResultsTable;\n","import React from 'react';\nimport Utils from '../shared/Utils';\nimport LoadingCube from '../shared/LoadingCube';\nimport ResultsSwitcher from './Switcher';\nimport ResultsTable from './Table';\nimport ProfessorHelpers from '../professors/ProfessorHelpers';\n\n// ---- Beginning of Helper React components ----\nconst EditModeActions = ({ is_admin, is_preview, edit_mode, handleSave, toggleEditMode }) => {\n if (!is_admin || is_preview) return null;\n const editTextKey = edit_mode ? 'stop_edit' : 'edit';\n const toggleClass = edit_mode ? 'btn-secondary' : 'btn-primary';\n\n return (\n
\n
\n {/* Save Button */}\n {edit_mode && (\n \n )}\n\n {/* Toggle Edit Mode Button */}\n \n
\n
\n );\n};\n\nconst TeamResults = ({ edit_mode, active_team_results, determineHeader }) => {\n if (edit_mode) return null;\n\n return (\n \n

\n \n \n );\n}\n\nconst ActualResults = (props) => {\n const {\n fetching,\n results_exist,\n active_year,\n active_term_as_int,\n active_individual_results,\n determineHeader\n } = props;\n if (fetching) {\n return ;\n }\n\n const subtitleClass = 'text-center grey-text push-small';\n const resultsUnreleased = Utils.t('results.no_results_released', {\n year: active_year,\n term: Utils.getTerm(active_term_as_int)\n });\n const resultsExistForCurrentSelection = active_individual_results.length > 0;\n const noResults = Utils.t('results.no_results_exist');\n\n return (\n
\n \n\n {!results_exist &&

}\n {!resultsExistForCurrentSelection &&

}\n {results_exist && resultsExistForCurrentSelection && (\n \n

\n \n \n \n )}\n

\n );\n};\n// ---- End of Helper React components ----\n\nclass Results extends React.PureComponent {\n state = {\n fetching: false,\n loaded: false\n };\n\n formQueryString = () => {\n const {\n loaded,\n count_indiv,\n count_team,\n active_exam_level,\n active_term_as_int,\n active_year,\n is_preview\n } = this.state;\n const initialData = this.props.data;\n let result = `count_indiv=${loaded ? count_indiv : initialData.countIndiv}`;\n result += `&count_team=${loaded ? count_team : initialData.countTeam}`;\n result += `&exam_level=${loaded ? active_exam_level : initialData.examLevel}`;\n result += `&is_preview=${loaded ? is_preview : initialData.isPreview}`;\n result += `&term_as_int=${loaded ? active_term_as_int : initialData.termAsInt}`;\n result += `&year=${loaded ? active_year : initialData.year}`;\n\n return result;\n }\n\n loadResults = () => {\n window.reactFinishedRendering = false;\n const url = `/home/results_data?${this.formQueryString()}`;\n const successCb = (data) => {\n window.reactFinishedRendering = true;\n this.setState(data);\n if (data.is_preview) {\n const queryString = `count_indiv=${data.count_indiv}&count_team=${data.count_team}&exam_level=${data.active_exam_level}`;\n Utils.setPageUrl('/admin/preview_current_results?', queryString, Utils.t('titles.results_preview'));\n }\n };\n\n const errorCb = () => {\n window.reactFinishedRendering = true;\n Utils.showNotification(Utils.t('results.load_failed'), 'error');\n };\n\n Utils.loadInitialReactData(url, successCb, errorCb);\n }\n\n componentDidMount() {\n this.loadResults();\n }\n\n changeExam = (index) => {\n const { is_preview, active_year, active_term_as_int } = this.state;\n\n this.setState({ active_exam_level: index, fetching: true }, () => {\n const baseUrl = is_preview ? '/admin/preview_current_results' : '/home/results';\n const params = `?year=${active_year}&term_as_int=${active_term_as_int}&exam_level=${index}`;\n Utils.setPageUrl(baseUrl, params, 'competition results');\n this.loadResults();\n });\n }\n\n changeCount = (e, type) => {\n this.setState({ [`${type}`]: e.target.value, fetching: true }, () => {\n this.loadResults();\n });\n }\n\n determineHeader = (type) => {\n const { is_preview, count_indiv, count_team } = this.state;\n const count = (type === 'individuals') ? count_indiv : count_team;\n const ending = is_preview ? '_preview' : '';\n\n return Utils.t(`results.top_${type}${ending}`, { count: count });\n }\n\n toggleEditMode = () => {\n const { edit_mode, previous_results, active_individual_results } = this.state;\n if (edit_mode) {\n // CASE: we are turning edit mode off. We need to revert to the previous state\n this.setState({ edit_mode: false, active_individual_results: previous_results });\n } else {\n // CASE: we are turning edit mode on. We need to save the current state\n this.setState({ edit_mode: true, previous_results: [ ...active_individual_results ] });\n }\n }\n\n handleChange = (id, newScore) => {\n const { active_individual_results } = this.state;\n const newResults = active_individual_results.map((result) => {\n return result.id !== id ? result : { ...result, score: newScore }\n });\n\n this.setState({ active_individual_results: newResults });\n }\n\n handleSave = () => {\n const results = this.state.active_individual_results.map(result => {\n return { id: result.id, score: result.score }\n });\n ProfessorHelpers.saveHistoricalRecords(results, () => this.setState({ fetching: false }));\n\n this.setState({ fetching: true });\n }\n\n render() {\n const { loaded } = this.state;\n if (!loaded) return null;\n\n return (\n
\n \n\n \n
\n );\n }\n}\n\nexport default Results;\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport Results from '../results/Main';\nimport { translator } from '../shared/I18n';\n\ndocument.addEventListener('DOMContentLoaded', async () => {\n const translations = await import('../i18n/results_translations.json');\n translator.setTranslations(translations);\n\n const resultsElement = document.getElementById('results-react-container');\n if (resultsElement) {\n const props = { data: resultsElement.dataset };\n ReactDOM.render(React.createElement(Results, props), resultsElement);\n }\n});\n","import React from 'react';\n\nconst DesktopVersion = (props) => {\n const {\n fetchingClass,\n sharedRowClass,\n examNames,\n activeExamName,\n handleClick,\n descriptor = (_examName) => { return null; }\n } = props;\n const rowClassName = `${sharedRowClass} space-bottom d-none d-lg-flex${fetchingClass}`;\n\n return (\n
\n {examNames.map((examName, index) => {\n const active = activeExamName === examName ? ' active' : '';\n return (\n
\n \n handleClick(index)}\n children={examName}\n />\n\n {descriptor(examName)}\n
\n
\n );\n })}\n \n );\n};\n\nconst MobileVersion = (props) => {\n const {\n fetchingClass,\n sharedRowClass,\n examNames,\n activeExamName,\n handleSelect\n } = props;\n\n const rowClassName = `${sharedRowClass} d-lg-none${fetchingClass}`;\n const selectClassName = 'custom-select medium-text space-top-small space-bottom-small';\n const selectedIndex = examNames.findIndex((name) => name === activeExamName);\n\n return (\n
\n \n
\n );\n};\n\nclass ExamFilterContainer extends React.PureComponent {\n handleSelect = (e) => {\n const { handleClick } = this.props;\n const selectedIndex = e.target.options[e.target.selectedIndex].value;\n handleClick(selectedIndex);\n }\n\n render() {\n const { fetching, handleClick } = this.props;\n const fetchingClass = fetching ? ' disabled-element' : '';\n const sharedRowClass = 'row align-items-center justify-content-center'\n const sharedProps = {\n fetchingClass,\n sharedRowClass,\n ...this.props\n };\n\n return (\n \n \n \n \n );\n }\n}\n\nexport default ExamFilterContainer;\n","import React from 'react';\n\nconst LoadingCube = ({ smallVersion = false }) => {\n const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n return (\n
\n {data.map((i) => (\n
\n ))}\n
\n );\n}\n\nexport default LoadingCube;\n","import Utils from '../shared/Utils';\n\nexport default class ProfessorHelpers {\n static genericPostCall(link, data, callback_func, callback_error) {\n if (callback_error == null) {\n callback_error = () => {};\n }\n\n window.reactFinishedRendering = false;\n return Utils.requestHelper({\n type: 'POST',\n url: link,\n data,\n success: function(response) {\n window.reactFinishedRendering = true;\n Utils.showNotification(response, 'success');\n callback_func();\n },\n error: function(errorResponse) {\n window.reactFinishedRendering = true;\n if (errorResponse && errorResponse.data) {\n Utils.showNotification(errorResponse.data, 'error');\n }\n callback_error();\n }\n });\n }\n\n static submitGrade(link, data, on_success, on_failure) {\n window.reactFinishedRendering = false;\n\n return Utils.requestHelper({\n type: 'POST',\n url: link,\n data,\n success: function(response) {\n window.reactFinishedRendering = true;\n const grade = JSON.parse(response.grade);\n Utils.showNotification(response.msg, 'success');\n return on_success(grade);\n },\n error: function(errorResponse) {\n window.reactFinishedRendering = true;\n if (errorResponse && errorResponse.data) {\n Utils.showNotification(errorResponse.data, 'error');\n }\n return on_failure();\n }\n });\n }\n\n static moveStudents(exam_name, selected_students, callback_func, error_callback) {\n if (!exam_name || !exam_name.length) {\n error_callback();\n return Utils.showNotification(Utils.t('moving_students.please_pick'), 'error');\n }\n\n const ids = selected_students.map(obj => obj.id);\n const idsAsString = ids.toString();\n return Utils.requestHelper({\n type: 'POST',\n url: '/students/move_in_bulk',\n data: {\n ids: idsAsString,\n exam_name\n },\n success: function(response) {\n Utils.showNotification(response, 'success');\n return callback_func(exam_name);\n },\n error: function(errorResponse) {\n error_callback();\n return Utils.showNotification(errorResponse.data, 'error');\n }\n });\n }\n\n static deleteSelectedStudents(selected_students, callback_func) {\n const ids = selected_students.map(obj => obj.id);\n const idsAsString = ids.toString();\n return Utils.requestHelper({\n type: 'POST',\n url: '/students/delete_in_bulk',\n data: {\n ids: idsAsString\n },\n success: function(response) {\n Utils.showNotification(response, 'success');\n return callback_func();\n },\n error: function(errorResponse) {\n return Utils.showNotification(errorResponse.data, 'error');\n }\n });\n }\n\n static addStudent(link, first_name, last_name, academic_year, exam_name, callback_func) {\n if (first_name === '' || last_name === '' || academic_year === '' || exam_name === '') {\n return Utils.showNotification(Utils.t('students.fill_in_values'), 'error');\n }\n\n window.reactFinishedRendering = false;\n return Utils.requestHelper({\n type: 'POST',\n url: link,\n data: {\n 'first_name': first_name,\n 'last_name': last_name,\n 'year': academic_year,\n 'exam_name': exam_name\n },\n success: function(response) {\n window.reactFinishedRendering = true;\n const student = JSON.parse(response.student);\n Utils.showNotification(response.msg, 'success');\n return callback_func(student);\n },\n error: function(errorResponse) {\n window.reactFinishedRendering = true;\n return Utils.showNotification(errorResponse.data, 'error');\n }\n });\n }\n\n static getProfileInfo(link, callback_func, errorCallback) {\n return Utils.requestHelper({\n type: 'GET',\n url: link,\n success: function(response) {\n const grades = JSON.parse(response.grades);\n return callback_func(grades);\n },\n error: function(errorResponse) {\n Utils.showNotification(errorResponse.data, 'error');\n return errorCallback();\n }\n });\n }\n\n static editStudentProfile(link, first_name, last_name, year, callback_func) {\n return Utils.requestHelper({\n type: 'POST',\n url: link,\n data: {\n 'first_name': first_name,\n 'last_name': last_name,\n 'year': year\n },\n success: function(response) {\n const student = JSON.parse(response.student);\n Utils.showNotification(response.msg, 'success');\n return callback_func(student);\n },\n error: function(errorResponse) {\n return Utils.showNotification(errorResponse.data, 'error');\n }\n });\n }\n\n static fillOutParticipatingForm(link, answer, errorCallback) {\n return Utils.requestHelper({\n type: 'POST',\n url: link,\n data: {\n 'answer': answer\n },\n success: function(response) {\n Utils.showNotification(response, 'info');\n return Utils.delayedRedirect(location.toString(), 1000);\n },\n error: function(data) {\n Utils.showNotification(response, 'error');\n return errorCallback();\n }\n });\n }\n\n static deleteProfile(url, impersonating_check, error_callback) {\n return Utils.requestHelper({\n type: 'POST',\n url,\n success: function() {\n Utils.showNotification(Utils.t('delete_profile.success'), 'success');\n\n if (impersonating_check) {\n return Utils.delayedRedirect('/admin');\n } else {\n return Utils.requestHelper({\n type: 'GET',\n url: '/home/logout',\n success: function() {\n return Utils.delayedRedirect('/home');\n }\n });\n }\n },\n error: function(errorResponse) {\n error_callback();\n return Utils.showNotification(errorResponse.data, 'error');\n }\n });\n }\n\n static saveHistoricalRecords(updated_historical_records, error_callback) {\n return Utils.requestHelper({\n type: 'POST',\n url: '/admin/edit_historical_records',\n data: {\n records: updated_historical_records\n },\n success: function(response) {\n Utils.showNotification(response, 'success');\n return Utils.delayedRedirect(location.toString());\n },\n error: function(errorResponse) {\n Utils.showNotification(errorResponse.data, 'error');\n return error_callback();\n }\n });\n }\n};\n"],"sourceRoot":""}