{"version":3,"sources":["pages/AdminStatisticsPage/styles.module.scss","pages/TeacherClassroomsPage/styles.module.scss","pages/ClassroomStatisticsPage/styles.module.scss","pages/LandingPage/styles.module.scss","pages/StudentStatisticsPage/styles.module.scss","pages/RatingPage/styles.module.scss","pages/ProfilePages/AdminProfilePage/styles.module.scss","components/UI/AppCircularProgress/styles.module.scss","components/AppInput/styles.module.scss","components/Content/styles.module.scss","components/AppSelectedList/styles.module.scss","components/AppGraph/styles.module.scss","components/AppModal/styles.module.scss","components/Header/styles.module.scss","components/AppActivityIndicator/styles.module.scss","components/AppButton/styles.module.scss","components/UI/ProgressLine/styles.module.scss","components/UI/CardAchievement/styles.module.scss","containers/EnterForm/styles.module.scss","components/AppLogo/styles.module.scss","components/AppWhiteBlock/styles.module.scss","constants/index.jsx","components/Header/index.jsx","helpers/networks.jsx","helpers/RequestWrapper.jsx","store/actions/content.jsx","store/types.jsx","components/Content/index.jsx","pages/ClassroomPage/index.jsx","components/AppLogo/index.jsx","components/AppActivityIndicator/index.jsx","components/AppModal/index.jsx","components/AppButton/index.jsx","components/AppInput/index.jsx","components/AppWhiteBlock/index.jsx","components/UI/ProgressLine/index.jsx","components/UI/CardAchievement/index.jsx","pages/ProfilePages/AdminProfilePage/index.jsx","pages/ProfilePages/StudentProfilePage/index.jsx","pages/ProfilePages/ProfilePage/index.jsx","pages/CompetitionPage/index.jsx","constants/THEME.jsx","pages/RatingPage/index.jsx","containers/EnterForm/index.jsx","components/UI/AppCircularProgress/index.jsx","pages/LandingPage/index.jsx","components/AppSelectedList/index.jsx","components/AppGraph/index.jsx","pages/AdminStatisticsPage/InnerPages/users.jsx","pages/AdminStatisticsPage/InnerPages/products.jsx","pages/AdminStatisticsPage/InnerPages/conversions.jsx","pages/AdminStatisticsPage/InnerPages/activity.jsx","pages/AdminStatisticsPage/InnerPages/productsRating.jsx","pages/AdminStatisticsPage/index.jsx","store/actions/statistics.jsx","routers/AdminStatisticsRouter.jsx","pages/StudentStatisticsPage/index.jsx","pages/ClassroomStatisticsPage/index.jsx","routers/ClassroomStatisticsRouter.jsx","pages/TeacherClassroomsPage/index.jsx","store/actions/classrooms.jsx","pages/LifeHacksPage/index.jsx","pages/CreateTestsPage/index.jsx","routers/index.jsx","store/reducers/user.jsx","store/reducers/token.jsx","store/reducers/content.jsx","store/reducers/statistics.jsx","store/reducers/classrooms.jsx","store/index.jsx","index.js"],"names":["module","exports","MAIN_URL","ADMIN_STATISTICS_URL","METRICS","DB_SP","DB_PATH","USER","N","INIT","CONTENT","STATISTICS","METRIC","DB_URL","COOKIES_NAMES","STATUS_USER_COOKIES","ROLES","SECTIONS","anc","name","periods","ren","mod","PERIODS","description","PERSONS","TAGS","da","tag","pe","ev","ec","re","te","ma","cu","wa","po","ca","tr","studentElements","key","link","teacherElements","adminElements","Header","onClick","role","elements","className","styles","header_main","header__inner","map","elem","header_elem","document","title","TimeoutPromise","ms","promise","totalMs","Promise","resolve","reject","timeoutId","setTimeout","Error","then","res","clearTimeout","err","httpGet","a","request","token","headers","fetch","method","response","ok","json","message","status","type","toString","console","warn","httpPost","body","length","JSON","stringify","GetCorrectRequest","RequestWrapper","children","useCookies","cookie","setCookie","removeCookie","dispatch","useDispatch","AddNewError","error","notification","id","Date","now","SetErrorToken","path","SetRole","result","is_teacher","is_staff","SetRoleRequest","GETWithToken","InnerHandler","handler","meta","code","strong_access","e","log","CheckerRequest","login","first","GET","PROPS","REQUEST","POST","CREATED","EXIT","GET_USER_INFO","SET_ADMIN_ROLE","VALUES","ROLE","STATUS","TOKEN","ErrorMessage","date","cn","request_error","green_notification","request_error_time","getHours","getMinutes","getSeconds","withRouter","history","style","useState","firstRequest","setFirstRequest","deleteCounter","setDeleteCounter","p","useEffect","ERRORS","useSelector","state","content","notifications","c","hasHeader","location","pathname","cookies","window","scroll","push","content_main","request_error_block","filter","i","content_without_header","ClassroomPage","AppLogo","container","alt","src","AppActivityIndicator","myType","animated","animated_small","AppModal","modalVisible","setModalVisible","canCloseOnBackdrop","showLoading","WrapperFunction","modal_background","active","modal_div","active_inner","stopPropagation","AppButton","props","button","button_red","button_orange","AppInput","label","placeholder","value","setValue","onFocus","onBlur","maxLength","editable","onChange","setActive","field_input","inactive","not_editable","input","contentEditable","target","AppWhiteBlock","block","ProgressLine","done","all","height","borderRadius_","styleParameter","borderRadius","opacity","width","borderBottomStartRadius","borderTopStartRadius","textProgress","progress","text","progressDone","CardAchievement","wrapper","progressContainer","roles","compareAchievements","b","v","reducerSum","acc","current","is_open","userData","findIndex","el","activeRole","setActiveRole","nickname","setNickname","firstName","setFirstName","lastName","setLastName","email","setEmail","data","first_name","last_name","username","achievements","setAchievements","achLoading","setAchLoading","ans","mass","sort","reduce","statistics","setStatistics","statLoading","setStatLoading","screen","div_row","div_user_data","justifyContent","paddingLeft","paddingRight","head_text","input_div","div_column","white_block","marginBottom","achievements_list","ach","div_row_settings","div_settings","inner_div_settings","roles_list","role_elem","role_active","StudentProfilePage","setName","marginTop","marginLeft","ProfilePage","loading","setLoading","onGetInfo","ErrorPage","ShowPage","page","setPage","AdminProfilePage","CompetitionPage","THEME","BestPrev","index","color","u","split","bestThreeElem","bestThreeHead","backgroundColor","bestThreePlace","n","bestThreeName","overflow_single","bestThreeValue","r","TableElem","place","user","isMe","tableElemView","tableElemText","textAlign","RatingPage","prev","setPrev","setData","setUser","d","h","time","setTime","day","previous","absolute_fill","zIndex","top","left","right","mainScrollView","prevWeekView","subtitle","bestThreeView","newWeekView","newWeekTitleView","newWeekTimeLeft","ratingView","undefined","EnterForm","onEnter","setLogin","password","setPassword","setError","main_div","head_form","numbers","AppCircularProgress","strokeWidth","percentage","header","centerBeginText","minHeight","beginRadius","fontSize","animatedText","onNext","Math","round","blocksAmount","currentBlock","setCurrentBlock","activeHover","setActiveHover","firstTime","setFirstTime","circleData","setCircleData","dA","PI","radius","dashArray","fO","dashOffset","onHover","headerOpacity","setHeaderOpacity","headerText","setHeaderText","centerText","setCenterText","display","alignItems","flexDirection","x","y","svg_style","svg_on_focus","circle_background","circle_active","cx","cy","onMouseEnter","onMouseLeave","circle_progress","focusable","strokeDasharray","strokeDashoffset","circle_text","dy","textAnchor","div_numbers_array","num","div_number","div_number_active","FullScreen","classname","full_screen","PageSection","this","React","Component","afterEnter","interval","random","setRadius","setX","setY","yTotal","setYTotal","setScroll","handleScroll","scrollY","handleMouseMove","clientX","clientY","handleBigMouseMove","rad","handleBigMouseLeave","getElementById","secondCentral","addEventListener","removeEventListener","innerHeight","svg","maskUnits","fill","text_text","circle","back_image","mask","image","svg2","text_text2","image2","first_body","goToAnchor","white_box","second_body","centered_div","circular_right_header","AppSelectedList","activeIndex","setActiveIndex","nameColumn","onChoose","listStyle","elementStyle","showList","setShowList","main_inactive","minWidth","main_block","s","main_element","list_block","not_shown_list","list_element","makeDataFrom","dataType","series","useR","datums","Array","max","makeSeries","start","startDate","setMinutes","setSeconds","setMilliseconds","min","rMin","rMax","nullChance","_","j","getTime","primary","secondary","floor","lineColors","grayColors","MyChart","datumFormat","primaryAxisType","showLabels","activePoint","setActivePoint","elementType","activeDatumIndex","activeSeriesIndex","setState","useMemo","axes","position","show","format","stacked","axes3","Data","loadingMode","setLoadingMode","GetColor","config","getSeriesStyle","useCallback","med","median","transition","getDatumStyle","datum","seriesIndex","otherHovered","focused","clicked","LoadingData","setLoadingData","showPoints","chart_container","graph_name","loading_div","grouping","secondaryAxisID","secondaryCursor","tooltip","anchor","show_labels_container","label_object","colored_label_line","label_name","bigLabel","AppGraph","TimeData","EntersTypeData","ENTERS_METRICS","short_label","StatisticUsersPage","data1","setData1","data2","setData2","data3","setData3","data4","setData4","data5","setData5","data6","setData6","innerTime","setInnerTime","entersType","setEntersType","SimpleGraphDataRequest","METRICS_NAMES","GetEntersGraph","metric","setD","dates","substr","GetTime","seconds","t","enters","sum","GetEntersData","item","screenId","graphics_container","graphics_line","graphic_elem","activity_div","head_div","activity_inner_div","marginRight","StatisticProductsPage","SelectedFirstMetrics","name1","name2","StatisticConversionsPage","setFirst","second","setSecond","CalculateMetric","R","xAxes","userDate","statMeanLabel","statMeanBigLabel","m","ConversionDataRequest","conversion_settings_div","conversion_div","Objects","Categories","Values","onlyCards","BordersTime","BordersCards","WithUsers","ChooseDiv","list","working","activity_inner_elem","activity_inner_elem_active","activity_inner_elem_disable","StatisticActivityPage","object","setObject","category","setCategory","border","setBorder","withUsers","setWithUsers","borderAmount","withUsersStr","ActivityDataRequest","messagesEndRef","useRef","setDatumFormat","scrollIntoView","behavior","ref","isTime","BestAmount","ListSide","StatisticProductsRatingPage","bestAmount","setBestAmount","listSide","setListSide","setValueColumn","topStr","ProductRatingDataRequest","valueColumn","div_loading","rating_products_div","rating_elem_div","borderBottomStyle","rating_number","rating_text","rating_name","rating_value","sec","GetCompletedTime","setHours","dataLeft","SelectedTimeData","InnerScreensList","AdminStatisticsPage","activeLeft","onChooseTime","SetTime","activeSelected","setActiveSelected","choose_stat_type_block","choose_stat_type","stat_elem","active_stat_elem","StatisticVariant","stat_header","stat_header_section_name","stat_time","main_content","AdminStatisticsRouter","exact","component","AddHeader","section","period","person","GetHeader","StatisticRow","meaning","row_div","row_text","row_number","GetName","dict","StudentStatisticsPage","match","startURL","params","userType","setUserType","tags","setTags","questions","setQuestions","questionModal","setQuestionModal","questionId","setQuestionId","nextType","setNextType","amount","setAmount","linearProgress","setLinearProgress","setProgress","setRight","totalAttempts","setTotalAttempts","totalRight","setTotalRight","Object","keys","addHeader","GetStatistics","setType","linear_progress","total_attempts","total_right","next_type","Number","difficult","v_a","valid_answers","parse","onPrev","column_div","question","fontWeight","attempts","successful_attempts","head_line_div","head_history_div","div_header_elem","info_list","white_block_with_border","grid_div","score","maxWidth","div_question","overflow_div","question_number_right","question_number_wrong","GetClassroomItem","classroom_div","classroom_div_active","GetStudentItem","student_item_div","student_item_div_active","GetNumber","numb","ClassroomStatisticsPage","classroomId","studentId","classrooms","classroom","users","WaitAndThen","waiting","timeout","activeClassroomIndex","setActiveClassroomIndex","activeStudentIndex","setActiveStudentIndex","students","setStudents","studentsIds","find","commonProgress","setCommonProgress","onChooseStudent","studentStatPage","double_left","choose_stat_type_block_second","classroom_list_header_text","student","main_div_common_stat","periods_line","header_common","section_name","header_font","section_progress","section_level","TP","LP","period_and_section_block","section_line","red_color","green_color","mean_color","tp","lp","black_div","ClassroomStatisticsRouter","TeacherClassroomsPage","tests","classTests","setClassTests","testsIds","test","info","modalAddClassroom","setModalAddClassroom","classroomName","setClassroomName","classroomStudent","setClassroomStudent","classroomStudents","setClassroomStudents","classroomAddError","setClassroomAddError","editClassroomMode","setEditClassroomMode","showGroupInfo","setShowGroupInfo","OnAddNewClassroom","trim","payload","isFocusOnStudent","setIsFocusOnStudent","studentModal","setStudentModal","testModal","setTestModal","testName","setTestName","isFocusOnTest","setIsFocusOnTest","onAddTest","testId","modalTestProgress","setModalTestProgress","activeTest","setActiveTest","progressArray","setProgressArray","userId","add_classroom_modal_useful_div","input_student_div","students_modal_choose_div","students_choose_list","includes","slice","student_in_choose_list","student_list_header_text","modal_students_list","modal_student","modal_student_name","modal_student_delete","modal_error_and_button_div","modal_inner_error","modal_tests_list","active_second_block","div_tests_list","test_white_block_div","blue_border","blue_color","full_screen_shadow","full_scale","LifeHacksPage","CreateTestsPage","MainRouter","LandingPage","to","initialState","userName","avatar","activeElemId","TESTS_TYPES","QUESTIONS_TYPES","reducerLP","currentValue","reducerTP","GetStat","assistants","expired","answers","reducer","accumulator","rootReducer","combineReducers","action","maxId3","newStudents","newTests","maxId","maxId2","createStore","applyMiddleware","thunk","ReactDOM","render","store","basename"],"mappings":"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GACN/K,UAAW,KAGnB+D,MAAO,CACH,CACIvvB,KAAM,kFACNsF,GAAI,GAER,CACItF,KAAM,sEACNsF,GAAI,GAER,CACItF,KAAM,4EACNsF,GAAI,GAER,CACItF,KAAM,gEACNsF,GAAI,GAER,CACItF,KAAM,oGACNsF,GAAI,GAER,CACItF,KAAM,oGACNsF,GAAI,GAER,CACItF,KAAM,0DACNsF,GAAI,GAER,CACItF,KAAM,kFACNsF,GAAI,GAER,CACItF,KAAM,0DACNsF,GAAI,GAER,CACItF,KAAM,4EACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,oGACNsF,GAAI,IAER,CACItF,KAAM,gEACNsF,GAAI,IAER,CACItF,KAAM,4EACNsF,GAAI,IAER,CACItF,KAAM,8FACNsF,GAAI,IAER,CACItF,KAAM,oGACNsF,GAAI,IAER,CACItF,KAAM,oGACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,8FACNsF,GAAI,IAER,CACItF,KAAM,gEACNsF,GAAI,IAER,CACItF,KAAM,gEACNsF,GAAI,IAER,CACItF,KAAM,sEACNsF,GAAI,IAER,CACItF,KAAM,8FACNsF,GAAI,IAER,CACItF,KAAM,gEACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,8FACNsF,GAAI,IAER,CACItF,KAAM,0DACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,kFACNsF,GAAI,IAER,CACItF,KAAM,0DACNsF,GAAI,IAER,CACItF,KAAM,gEACNsF,GAAI,KAGZkmB,UAAW,CACP,CACIlmB,GAAI,EACJooB,SAAU,uOACVqJ,QAAS,CAAC,OAAQ,OAAQ,OAAQ,QAClCzJ,cAAe,CAAC,QAChBrpB,KAAMuyB,KAGdjlB,SAAS,GAGPylB,GAAU,SAACC,EAAaP,GAAd,OAA+BxgB,KAAKqH,IAAI0Z,EAAaP,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","file":"static/js/main.f49efaa2.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"choose_stat_type_block\":\"styles_choose_stat_type_block__19xcN\",\"choose_stat_type\":\"styles_choose_stat_type__B08mO\",\"stat_elem\":\"styles_stat_elem__26v79\",\"active_stat_elem\":\"styles_active_stat_elem__1aJFi\",\"stat_header\":\"styles_stat_header__2N95x\",\"stat_time\":\"styles_stat_time__F8BBe\",\"stat_header_section_name\":\"styles_stat_header_section_name__2RM6s\",\"main_content\":\"styles_main_content__C5Fsi\",\"graphics_container\":\"styles_graphics_container__28btR\",\"graphic_elem\":\"styles_graphic_elem__33_EE\",\"graphics_line\":\"styles_graphics_line__NcwwM\",\"div_loading\":\"styles_div_loading__3bxiF\",\"rating_products_div\":\"styles_rating_products_div__2qSHH\",\"rating_elem_div\":\"styles_rating_elem_div__dY_51\",\"rating_text\":\"styles_rating_text__2BXgt\",\"rating_number\":\"styles_rating_number__1enNt\",\"rating_name\":\"styles_rating_name__3POvT\",\"rating_value\":\"styles_rating_value__3QANh\",\"full_white_screen\":\"styles_full_white_screen__2jWuP\",\"conversion_div\":\"styles_conversion_div__1GeyA\",\"head_div\":\"styles_head_div__Zdaey\",\"activity_div\":\"styles_activity_div__271SX\",\"activity_inner_div\":\"styles_activity_inner_div__ZMlcW\",\"activity_inner_elem\":\"styles_activity_inner_elem__MLF8A\",\"activity_inner_elem_active\":\"styles_activity_inner_elem_active__23IJn\",\"activity_inner_elem_disable\":\"styles_activity_inner_elem_disable__1XDdA\",\"text_div\":\"styles_text_div__3zYYA\",\"conversion_settings_div\":\"styles_conversion_settings_div__37j1q\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"choose_stat_type_block\":\"styles_choose_stat_type_block__1EDZX\",\"choose_stat_type_block_second\":\"styles_choose_stat_type_block_second__2Yi49\",\"active_second_block\":\"styles_active_second_block__3FvVj\",\"full_screen_shadow\":\"styles_full_screen_shadow__2646-\",\"full_scale\":\"styles_full_scale__3lY2-\",\"choose_stat_type\":\"styles_choose_stat_type__1Tgtx\",\"stat_elem\":\"styles_stat_elem__3ZM1h\",\"active_stat_elem\":\"styles_active_stat_elem__2VUdW\",\"stat_header\":\"styles_stat_header__M61Zi\",\"stat_time\":\"styles_stat_time__quyWL\",\"stat_header_section_name\":\"styles_stat_header_section_name__3zYv8\",\"main_content\":\"styles_main_content__2wScp\",\"graphics_container\":\"styles_graphics_container__3hThG\",\"graphic_elem\":\"styles_graphic_elem__1wm-F\",\"graphics_line\":\"styles_graphics_line__3x5Fy\",\"div_loading\":\"styles_div_loading__3JoZq\",\"classroom_div\":\"styles_classroom_div__3ehsL\",\"classroom_list_header_text\":\"styles_classroom_list_header_text__2k-Mg\",\"student_item_div\":\"styles_student_item_div__1XhF2\",\"modal_error_and_button_div\":\"styles_modal_error_and_button_div__1gBaq\",\"student_list_header_text\":\"styles_student_list_header_text__3FuPD\",\"student_item_div_active\":\"styles_student_item_div_active__HZAsR\",\"student_in_choose_list\":\"styles_student_in_choose_list__33IiF\",\"classroom_div_active\":\"styles_classroom_div_active__3edw_\",\"black_div\":\"styles_black_div__g5SjH\",\"modal_inner_error\":\"styles_modal_inner_error__2Bgdb\",\"input_student_div\":\"styles_input_student_div__3WCmX\",\"students_choose_list\":\"styles_students_choose_list__u7YLe\",\"students_modal_choose_div\":\"styles_students_modal_choose_div__2l7pf\",\"add_classroom_modal_useful_div\":\"styles_add_classroom_modal_useful_div__tUl-7\",\"modal_students_list\":\"styles_modal_students_list__2xZmE\",\"modal_tests_list\":\"styles_modal_tests_list__17c6c\",\"modal_student\":\"styles_modal_student__3OE-L\",\"modal_student_delete\":\"styles_modal_student_delete__3Oj1p\",\"modal_student_name\":\"styles_modal_student_name__1Cql_\",\"div_tests_list\":\"styles_div_tests_list__EffjU\",\"test_white_block_div\":\"styles_test_white_block_div__2JWR4\",\"blue_border\":\"styles_blue_border__1D93P\",\"blue_color\":\"styles_blue_color__2lNOv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"choose_stat_type_block\":\"styles_choose_stat_type_block__3XU03\",\"choose_stat_type_block_second\":\"styles_choose_stat_type_block_second__IK4cL\",\"choose_stat_type\":\"styles_choose_stat_type__31RnG\",\"stat_elem\":\"styles_stat_elem__8fzDS\",\"active_stat_elem\":\"styles_active_stat_elem__2hR6f\",\"stat_header\":\"styles_stat_header__sR2Ve\",\"double_left\":\"styles_double_left__3bDsa\",\"stat_time\":\"styles_stat_time__3fm7d\",\"stat_header_section_name\":\"styles_stat_header_section_name__wCFuI\",\"main_content\":\"styles_main_content__2MInO\",\"graphics_container\":\"styles_graphics_container__3tCaj\",\"graphic_elem\":\"styles_graphic_elem__kB44q\",\"graphics_line\":\"styles_graphics_line__3oWVS\",\"div_loading\":\"styles_div_loading__5M8vK\",\"classroom_div\":\"styles_classroom_div__ikxpy\",\"classroom_list_header_text\":\"styles_classroom_list_header_text__1Jt14\",\"student_item_div\":\"styles_student_item_div__83nGu\",\"student_item_div_active\":\"styles_student_item_div_active__1IyyJ\",\"classroom_div_active\":\"styles_classroom_div_active__1SGsD\",\"black_div\":\"styles_black_div__2euiN\",\"main_div_common_stat\":\"styles_main_div_common_stat__24eKm\",\"section_line\":\"styles_section_line__1YyPL\",\"section_name\":\"styles_section_name__2TZR9\",\"red_color\":\"styles_red_color__1JJiO\",\"green_color\":\"styles_green_color__1_4iK\",\"mean_color\":\"styles_mean_color__2CwRf\",\"section_progress\":\"styles_section_progress__1WUyh\",\"section_level\":\"styles_section_level__2Z-P7\",\"periods_line\":\"styles_periods_line__3Oq9K\",\"period_and_section_block\":\"styles_period_and_section_block__3lMIe\",\"header_common\":\"styles_header_common__1nkQu\",\"header_font\":\"styles_header_font__3ZBE9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"full_screen\":\"styles_full_screen__2dVXk\",\"white_box\":\"styles_white_box__1KAqS\",\"centered_div\":\"styles_centered_div__3c399\",\"svg\":\"styles_svg__xm_2S\",\"svg2\":\"styles_svg2__2ymdR\",\"first_body\":\"styles_first_body__2prJN\",\"second_body\":\"styles_second_body__2UofU\",\"image\":\"styles_image__2L8OF\",\"image2\":\"styles_image2__1nQZt\",\"back_image\":\"styles_back_image__B1Jic\",\"circle\":\"styles_circle__2-_Gj\",\"text_text\":\"styles_text_text__3JSwH\",\"text_text2\":\"styles_text_text2__hsVNX\",\"title\":\"styles_title__2IL6a\",\"subtitle\":\"styles_subtitle__2OiDW\",\"circular_div\":\"styles_circular_div__3xAaY\",\"circular_right_header\":\"styles_circular_right_header__3wyVZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"main_div\":\"styles_main_div__NTnVQ\",\"white_block\":\"styles_white_block__2pAnR\",\"white_block_with_border\":\"styles_white_block_with_border__rcezl\",\"info_list\":\"styles_info_list__nES3F\",\"row_div\":\"styles_row_div__2HZo8\",\"column_div\":\"styles_column_div__3u-WM\",\"row_text\":\"styles_row_text__3DeKR\",\"row_number\":\"styles_row_number__2xpwq\",\"question_number_right\":\"styles_question_number_right__3ZRlZ\",\"question_number_wrong\":\"styles_question_number_wrong__mwjuJ\",\"grid_div\":\"styles_grid_div__1d-jL\",\"head_line_div\":\"styles_head_line_div__3xEbg\",\"head_history_div\":\"styles_head_history_div__LZjj7\",\"screen\":\"styles_screen__1rALI\",\"overflow_div\":\"styles_overflow_div__3Hth0\",\"overflow_single\":\"styles_overflow_single__Rvdnq\",\"div_question\":\"styles_div_question__3DwB6\",\"div_header_elem\":\"styles_div_header_elem__38u0b\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"screen\":\"styles_screen__4trLF\",\"mainScrollView\":\"styles_mainScrollView__ypvmR\",\"title\":\"styles_title__1vCmg\",\"subtitle\":\"styles_subtitle__p7I3w\",\"description\":\"styles_description__x2bHQ\",\"prevWeekView\":\"styles_prevWeekView__2rZNs\",\"bestThreeView\":\"styles_bestThreeView__2A43Y\",\"bestThreeElem\":\"styles_bestThreeElem__3MdZ-\",\"bestThreeName\":\"styles_bestThreeName__3Oz7z\",\"bestThreePlace\":\"styles_bestThreePlace__3XHac\",\"bestThreeValue\":\"styles_bestThreeValue__2gLX6\",\"bestThreeHead\":\"styles_bestThreeHead__2dtLj\",\"newWeekView\":\"styles_newWeekView__3R3lp\",\"newWeekTitleView\":\"styles_newWeekTitleView__9EwR_\",\"newWeekTimeLeft\":\"styles_newWeekTimeLeft__1mOPV\",\"ratingView\":\"styles_ratingView__2ju8Q\",\"tableElemView\":\"styles_tableElemView__6P6HE\",\"tableElemText\":\"styles_tableElemText__21TUU\",\"place\":\"styles_place__1GYfN\",\"user\":\"styles_user__3Guo2\",\"value\":\"styles_value__1Jh29\",\"overflow_single\":\"styles_overflow_single__3fkvq\",\"absolute_fill\":\"styles_absolute_fill__33kaF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"role_elem\":\"styles_role_elem__2XUhd\",\"role_active\":\"styles_role_active__2tQC0\",\"roles_list\":\"styles_roles_list__1EAfa\",\"div_user_data\":\"styles_div_user_data__1N0_2\",\"input_div\":\"styles_input_div__2vJTy\",\"head_text\":\"styles_head_text__3M67T\",\"screen\":\"styles_screen__2AQWJ\",\"div_row\":\"styles_div_row__1gJ65\",\"div_column\":\"styles_div_column__3T1BK\",\"white_block\":\"styles_white_block__pP7oK\",\"achievements_list\":\"styles_achievements_list__3cS35\",\"div_row_settings\":\"styles_div_row_settings__BTt0g\",\"div_settings\":\"styles_div_settings__3R7Dx\",\"inner_div_settings\":\"styles_inner_div_settings__2pxwk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"circle_background\":\"styles_circle_background__glN-H\",\"circle_progress\":\"styles_circle_progress__2oVXT\",\"circle_active\":\"styles_circle_active__3pCzD\",\"circle_text\":\"styles_circle_text__dzQUB\",\"circle_text_abs\":\"styles_circle_text_abs__HHwSH\",\"svg_style\":\"styles_svg_style__3pNmZ\",\"inactive\":\"styles_inactive__3bTa9\",\"active\":\"styles_active__1La52\",\"header\":\"styles_header__1VVy4\",\"textanim\":\"styles_textanim__lTL3e\",\"div_numbers_array\":\"styles_div_numbers_array__3tBn0\",\"div_number\":\"styles_div_number__3cjaD\",\"div_number_active\":\"styles_div_number_active__1KxBt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"input\":\"styles_input__35lqp\",\"active\":\"styles_active__3SN1Z\",\"inactive\":\"styles_inactive__teONO\",\"not_editable\":\"styles_not_editable__1qLYM\",\"field_input\":\"styles_field_input__2w_l8\",\"label\":\"styles_label__3jzoh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"content_main\":\"styles_content_main__Logqz\",\"content\":\"styles_content__Pe_BN\",\"content_without_header\":\"styles_content_without_header__1tCfK\",\"error\":\"styles_error__1HDIS\",\"head_form\":\"styles_head_form__3KKvd\",\"request_error_block\":\"styles_request_error_block__2F1Uj\",\"request_error\":\"styles_request_error__2npLo\",\"green_notification\":\"styles_green_notification__3XC7u\",\"request_error_time\":\"styles_request_error_time__1ETPc\",\"change\":\"styles_change__xtkNj\",\"date\":\"styles_date__HAB0T\",\"author\":\"styles_author__1vf_8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"main_div\":\"styles_main_div__tzKkm\",\"list_block\":\"styles_list_block__WvP8N\",\"not_shown_list\":\"styles_not_shown_list__35VHk\",\"main_block\":\"styles_main_block__qQxfB\",\"main_inactive\":\"styles_main_inactive__2romF\",\"main_element\":\"styles_main_element__24773\",\"list_element\":\"styles_list_element__1o0WQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"chart_container\":\"styles_chart_container__1gAD9\",\"show_labels_container\":\"styles_show_labels_container__3v61c\",\"label_object\":\"styles_label_object__3tZT1\",\"colored_label_line\":\"styles_colored_label_line__1qGgc\",\"loading_div\":\"styles_loading_div__2cIEO\",\"label_name\":\"styles_label_name__yYZyT\",\"graph_name\":\"styles_graph_name__1hJWn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modal_background\":\"styles_modal_background__3IqAB\",\"active\":\"styles_active__f8nr6\",\"active_inner\":\"styles_active_inner__3HMue\",\"animation_modal\":\"styles_animation_modal__Enna9\",\"centered_div\":\"styles_centered_div__lZnmN\",\"modal_div\":\"styles_modal_div__3Vdym\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header_main\":\"styles_header_main__1PiHg\",\"header__inner\":\"styles_header__inner__16mRd\",\"header_elem\":\"styles_header_elem__121TL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"styles_container__HxjR1\",\"animated\":\"styles_animated__3V1Q2\",\"rotating\":\"styles_rotating__2iqm-\",\"animated_small\":\"styles_animated_small__3R4bs\",\"rotating_small\":\"styles_rotating_small__1z0tx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"styles_button__17PQ-\",\"button_orange\":\"styles_button_orange__1KYGh\",\"button_red\":\"styles_button_red__1SKMb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"progress\":\"styles_progress__3Kyh4\",\"progressDone\":\"styles_progressDone__q9sIE\",\"appearing\":\"styles_appearing__2Ey_d\",\"text\":\"styles_text__aVkHw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"styles_wrapper__gKnzb\",\"title\":\"styles_title__pnLHe\",\"progressContainer\":\"styles_progressContainer__2UWhQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error\":\"styles_error__1yur5\",\"head_form\":\"styles_head_form__1LhOg\",\"main_div\":\"styles_main_div__BuZWP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"styles_container__2NWlA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"block\":\"styles_block__35cDV\"};","// export const C_USER = {\r\n// CHANGE_DATA: \"CHANGE_DATA\",\r\n// CHANGE_AVATAR: \"CHANGE_AVATAR\",\r\n// ADD_USER: \"ADD_USER\",\r\n// REMOVE_USER: \"REMOVE_USER\"\r\n// };\r\n\r\nexport const START_URL = \"/app\";\r\n\r\nexport const MAIN_URL = {\r\n ABOUTUS: \"/about_us\",\r\n PROFILE: \"/profile\",\r\n ADMIN_PROFILE: \"/adminprofile\",\r\n STATISTICS: \"/statistics\",\r\n APP_STATISTICS: \"/appstat\",\r\n CLASSROOM: \"/classroom\",\r\n CLASSROOM_STATISTICS: \"/classroomstat\",\r\n TEST_CREATE: \"/createtests\",\r\n MY_CLASSROOMS: \"/myclassrooms\",\r\n LIFE_HACKS: \"/lifehacks\",\r\n COMPETITION: \"/competition\",\r\n RATING: \"/rating\",\r\n LANDING: \"/landing\",\r\n NOT_FOUND: \"/notfound\",\r\n};\r\n\r\nexport const ADMIN_STATISTICS_URL = {\r\n USERS: \"users\",\r\n PRODUCTS: \"products\",\r\n CONVERSIONS: \"conversions\",\r\n ACTIVITY: \"activity\",\r\n PRODUCTS_RATING: \"products_rating\",\r\n}\r\n\r\nexport const METRICS = {\r\n UNIQUE_USERS: 'unique_users',\r\n ENTERED_USERS: 'entered_users',\r\n COMPLETED_PRODUCTS: 'completed_products',\r\n USER_COMPLETED: 'user_completed',\r\n}\r\n\r\nexport const DB_SP = {\r\n USER: \"user/\",\r\n CONTENT: \"content/\",\r\n STATISTICS: \"statistics/\",\r\n LESSONS: \"lessons/\",\r\n METRIC: \"metric/\",\r\n INIT: \"init/\",\r\n\r\n}\r\n\r\nexport const DB_PATH = {\r\n USER: {\r\n N: DB_SP.USER,\r\n },\r\n INIT: {\r\n N: DB_SP.INIT,\r\n },\r\n CONTENT: {\r\n N: DB_SP.CONTENT,\r\n },\r\n STATISTICS: {\r\n N: DB_SP.STATISTICS,\r\n METRIC: {\r\n N: DB_SP.STATISTICS + DB_SP.METRIC\r\n }\r\n }\r\n}\r\n\r\nexport const DB_URL = {\r\n URL: \"https://mindon.space/api\",\r\n SECOND_URL: \"http://185.148.82.169:8000\", //\"http://mindon.space\", //\"http://localhost:8080\",\r\n};\r\n\r\nexport const COOKIES_NAMES = {\r\n TOKEN: \"token\",\r\n ROLE: \"role\",\r\n STATUS: \"status\",\r\n USER_NAME: \"user_name\",\r\n ACCEPT: \"accept\"\r\n}\r\n\r\nexport const STATUS_USER_COOKIES = {\r\n USER: \"user\",\r\n ADMIN: \"admin\",\r\n}\r\n\r\nexport const ROLES = {\r\n STUDENT: \"student\",\r\n TEACHER: \"teacher\",\r\n ADMIN: \"admin\",\r\n}\r\n\r\nexport const DESIGN = {\r\n MARGIN_TOP_HEADER: \"45px\",\r\n}\r\n\r\nexport const SECTIONS = {\r\n anc: {name: \"Древность и средневековье\", periods: [\"01\", \"02\", \"03\", \"04\"]},\r\n ren: {name: \"Новое время\", periods: [\"05\", \"06\", \"07\"]},\r\n mod: {name: \"Новейшее время\", periods: [\"08\", \"09\"]},\r\n}\r\n\r\nexport const PERIODS = {\r\n \"01\" : {name: \"IX – XII вв.\" , description : \"Образование Древнерусского государства Киевской Руси\"},\r\n \"02\" : {name: \"XII – XIII вв.\", description: \"Период феодальной раздроблености, начало монгольского владычества\"},\r\n \"03\" : {name: \"Конец XIII – первая половина XV в.\", description: \"Возвышение Москвы, начало объединения русских земель\"},\r\n \"04\" : {name: \"Вторая половина XV – начало XVI в.\", description: \"Завершение объединения русских земель вокруг Москвы, образование Русского централизованного государства\"},\r\n \"05\" : {name: \"XVI – XVII вв.\", description: \"Становление российского самодержавия, смутное время, правление первых Романовых\"},\r\n \"06\" : {name: \"XVIII – конец XIX в.\", description: \"Становление и расцвет Российской империи\"},\r\n \"07\" : {name: \"Конец XIX – начало XX в.\", description: \"Падение Российской империи, Временное правительство России\"},\r\n \"08\" : {name: \"XX в.\", description: \"Советская республика\"},\r\n \"09\" : {name: \"Конец XX – начало XXI в.\", description: \"Российская Федерация \"},\r\n}\r\n\r\nexport const PERSONS = {\r\n \"1\": {name: \"Иван III Васильевич\", description:\t\"1462 - 1505\"},\r\n \"2\": {name: \"Василий III Иванович\", description: \"1505 - 1533\"},\r\n \"3\": {name: \"Елена Васильевна Глинская (регент при Иване IV)\", description:\t\"1533 - 1548\"},\r\n \"4\": {name: \"Иван IV Васильевич \\\"Грозный\\\"\", description:\t\"1548 - 1584\"},\r\n \"5\": {name: \"Федор I Иванович\", description: \"1584 - 1598\"},\r\n \"6\": {name: \"Борис Федорович Годунов\", description:\t\"1598 - 1605\"},\r\n \"7\": {name: \"Федор Борисович Годунов\", description:\t\"1605 - 1605\"},\r\n \"8\": {name: \"Лжедмитрий I\", description: \"1605 - 1606\"},\r\n \"9\": {name: \"Василий IV Шуйский\", description: \"1606 - 1610\"},\r\n \"10\": {name: \"Семибоярщина\", description: \"1610 - 1612\"},\r\n \"11\": {name: \"Михаил Федорович Романов\", description: \"1613 - 1645\"},\r\n \"12\": {name: \"Алексей Михайлович Романов Тишайший\", description: \"1645 - 1676\"},\r\n \"13\": {name: \"Федор Алексеевич Романов\", description: \"1676 - 1682\"},\r\n \"14\": {name: \"Софья Алексеевна Романова (регент при Петре I и Иване V)\", description: \"1682 - 1689\"},\r\n \"15\": {name: \"Петр I Алексеевич\", description: \"1689 - 1725\"},\r\n \"16\": {name: \"Екатерина I Алексеевна\", description: \"1725 - 1727\"},\r\n \"17\": {name: \"Петр II Алексеевич\", description: \"1727 - 1730\"},\r\n \"18\": {name: \"Анна Иоанновна\", description: \"1730 - 1740\"},\r\n \"19\": {name: \"Иван VI Антонович (свергнут малолетним)\", description: \"1740 - 1741\"},\r\n \"20\": {name: \"Елизавета Петровна\", description: \"1741 - 1761\"},\r\n \"21\": {name: \"Петр III Федорович\", description: \"1761 - 1762\"},\r\n \"22\": {name: \"Екатерина II Алексеевна\", description: \"1762 - 1796\"},\r\n \"23\": {name: \"Павел I Петрович\", description: \"1796 - 1801\"},\r\n \"24\": {name: \"Александр I Павлович\", description: \"1801 - 1825\"},\r\n \"25\": {name: \"Николай I Павлович\", description: \"1825 - 1855\"},\r\n \"26\": {name: \"Александр II Николаевич\", description: \"1855 - 1881\"},\r\n \"27\": {name: \"Александр III Александрович\", description: \"1881 - 1894\"},\r\n \"28\": {name: \"Николай II Александрович\", description: \"1894 - 1917\"},\r\n \"29\": {name: \"Период Временного правительства\", description: \"1917\"},\r\n \"30\": {name: \"Ленин Владимир Ильич\", description: \"1917 - 1924\"},\r\n \"31\": {name: \"Сталин Иосиф Виссарионович\", description: \"1924 - 1953\"},\r\n \"32\": {name: \"Хрущёв Никита Сергеевич\", description: \"1953 - 1964\"},\r\n \"33\": {name: \"Брежнев Леонид Ильич\", description: \"1964 - 1982\"},\r\n \"34\": {name: \"Андропов Юрий Владимирович\", description: \"1982 - 1984\"},\r\n \"35\": {name: \"Черненко Константин Устинович\", description: \"1984 - 1985\"},\r\n \"36\": {name: \"Горбачёв Михаил Сергеевич\", description: \"1985 - 1991\"},\r\n \"37\": {name: \"Ельцин Борис Николаевич\", description: \"1991 - 1999\"},\r\n \"38\": {name: \"Путин Владимир Владимирович\", description: \"1999 - 2008\"},\r\n \"39\": {name: \"Медведев Дмитрий Анатольевич\", description: \"2008 - 1012\"},\r\n \"40\": {name: \"Путин Владимир Владимирович\", description: \"2012 - наши дни\"},\r\n}\r\n\r\nexport const TAGS = {\r\n da: { name: \"Даты\", tag: \"da\" },\r\n pe: { name: \"Личности\", tag: \"pe\"},\r\n ev: { name: \"События\", tag: \"ev\"},\r\n ec: { name: \"Экономика\", tag: \"ec\" },\r\n re: { name: \"Реформы\", tag: \"re\" },\r\n te: { name: \"Термины и понятия\", tag: \"te\" },\r\n ma: { name: \"Карты и география\", tag: \"ma\" },\r\n cu: { name: \"Наука и культура\", tag: \"cu\" },\r\n wa: { name: \"Войны и битвы\", tag: \"wa\" },\r\n po: { name: \"Власть и политика\", tag: \"po\" },\r\n ca: { name: `Причинно-следственные связи`, tag: \"ca\" },\r\n tr: { name: \"Мирные соглашения и договоры\", tag: \"tr\" },\r\n};","import React, {useEffect} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport {COOKIES_NAMES, MAIN_URL, ROLES} from \"../../constants\";\r\n\r\nconst studentElements = [\r\n {\r\n key: \"0\",\r\n name: \"Занятия\",\r\n link: MAIN_URL.CLASSROOM,\r\n },\r\n {\r\n key: \"1\",\r\n name: \"Рейтинг\",\r\n link: MAIN_URL.RATING,\r\n },\r\n {\r\n key: \"2\",\r\n name: \"Моя статистика\",\r\n link: MAIN_URL.STATISTICS,\r\n },\r\n {\r\n key: \"3\",\r\n name: \"Лайфхаки\",\r\n link: MAIN_URL.LIFE_HACKS,\r\n },\r\n {\r\n key: \"4\",\r\n name: \"Профиль\",\r\n link: MAIN_URL.PROFILE,\r\n }\r\n]\r\n\r\nconst teacherElements = [\r\n {\r\n key: \"0\",\r\n name: \"Конструктор тестов\",\r\n link: MAIN_URL.TEST_CREATE,\r\n },\r\n {\r\n key: \"1\",\r\n name: \"Мои группы\",\r\n link: MAIN_URL.MY_CLASSROOMS,\r\n },\r\n {\r\n key: \"2\",\r\n name: \"Статистика учеников\",\r\n link: MAIN_URL.CLASSROOM_STATISTICS,\r\n },\r\n {\r\n key: \"3\",\r\n name: \"Профиль\",\r\n link: MAIN_URL.PROFILE,\r\n }\r\n]\r\n\r\nconst adminElements = [\r\n {\r\n key: \"0\",\r\n name: \"Занятия\",\r\n link: MAIN_URL.CLASSROOM,\r\n },\r\n {\r\n key: \"1\",\r\n name: \"Статистика\",\r\n link: MAIN_URL.APP_STATISTICS,\r\n },\r\n {\r\n key: \"2\",\r\n name: \"Профиль\",\r\n link: MAIN_URL.PROFILE,\r\n }\r\n]\r\n\r\nfunction Header({onClick, role}) {\r\n\r\n const elements = role === ROLES.TEACHER ? teacherElements :\r\n (role === ROLES.ADMIN ? adminElements : studentElements);\r\n\r\n return
\r\n
\r\n {elements.map(elem =>\r\n
{\r\n onClick(elem.link);\r\n document.title = elem.name;\r\n }}>\r\n {elem.name}\r\n
\r\n )}\r\n
\r\n
;\r\n}\r\n\r\n\r\nexport default Header;\r\n","import {DB_URL} from \"../constants\";\r\n\r\nconst TimeoutPromise = ({ms = 10000, promise}) => {\r\n const totalMs = ms || 10000;\r\n return new Promise((resolve, reject) => {\r\n const timeoutId = setTimeout(() => {\r\n // {status: 408, json: {}, message: \"Превышено время ожидания запроса\"}\r\n reject(new Error(\"Превышено время ожидания запроса\"))\r\n }, totalMs);\r\n promise.then(\r\n (res) => {\r\n clearTimeout(timeoutId);\r\n resolve(res);\r\n },\r\n (err) => {\r\n clearTimeout(timeoutId);\r\n reject(err);\r\n }\r\n );\r\n })\r\n}\r\n\r\nexport const httpGet = async ({request, token = \"\", ms = 10000}) => {\r\n try {\r\n let headers = {\r\n \"Content-Type\": \"application/json\"\r\n };\r\n if (token) {\r\n headers = {\r\n 'Authorization': 'Token ' + token,\r\n \"Content-Type\": \"application/json\"\r\n }\r\n }\r\n const response = await TimeoutPromise({ms, promise: fetch(`${DB_URL.URL}/${request}`, {\r\n method: 'GET',\r\n headers: headers\r\n })});\r\n if (response.ok) {\r\n //console.log(\"GET OK\", response);\r\n const json = await response.json();\r\n return {json: json, message: \"\", status: 200, type: 0}\r\n } else {\r\n let message = \"\";\r\n if (response.status === 400) {\r\n message = \"Ошибка запроса: неверно составленный запрос\"\r\n } else if (response.status === 401) {\r\n message = \"Пользователь не авторизован\"\r\n } else if (response.status === 404) {\r\n message = \"Пользователь не найден\"\r\n } else if (response.status === 409) {\r\n message = \"Пользователь с таким логином уже существует\"\r\n } else if (response.status === 403) {\r\n message = \"Ошибка доступа\"\r\n } else {\r\n message = \"Ошибка, код \" + response.status.toString(10)\r\n }\r\n //const json = await response.json();\r\n return {json: {}, message: message, status: response.status, type: 1}\r\n }\r\n } catch (err) {\r\n console.warn('httpGet error ', err);\r\n return {json: {}, message: err.toString(), status: 0, type: 2}\r\n }\r\n};\r\n\r\nexport const httpPost = async ({request, token = \"\", body, ms = 10000}) => {\r\n try {\r\n let headers = {\r\n \"Content-Type\": \"application/json\"\r\n };\r\n if (token.length > 0) {\r\n headers = {\r\n 'Authorization': 'Token ' + token,\r\n \"Content-Type\": \"application/json\"\r\n }\r\n }\r\n const response = await TimeoutPromise({ms, promise: fetch(`${DB_URL.URL}/${request}`, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(body)\r\n })});\r\n if (response.ok) {\r\n //console.log(\"POST OK\", response);\r\n const json = await response.json();\r\n return {json: json, message: \"\", status: 200, type: 0}\r\n } else {\r\n let message = \"\";\r\n //console.log(\"RRR\", response);\r\n if (response.status === 400) {\r\n message = \"Неверно составленный запрос, жалуйся на разработчиков...\"\r\n } else if (response.status === 401) {\r\n message = \"Пользователь не авторизован\"\r\n } else if (response.status === 404) {\r\n message = \"Мы очень хотели, но не нашли такого пользователя :(\"\r\n } else if (response.status === 409) {\r\n message = \"Пользователь с таким логином уже существует! Не притворяйся:)\"\r\n } else if (response.status === 403) {\r\n message = \"Ошибка доступа\"\r\n } else {\r\n message = \"Ошибка, код \" + response.status.toString(10)\r\n }\r\n const json = {};//await response.json();\r\n return {json: json, message: message, status: response.status, type: 1}\r\n }\r\n } catch (err) {\r\n console.warn('httpPost error ', err);\r\n return {json: {}, message: err.toString(), status: 0, type: 2}\r\n }\r\n};","import React from 'react';\r\nimport { useCookies } from 'react-cookie';\r\nimport {COOKIES_NAMES, ROLES, STATUS_USER_COOKIES} from \"../constants\";\r\nimport {httpGet, httpPost} from \"./networks\";\r\nimport {useDispatch} from \"react-redux\";\r\nimport {addNotification} from \"../store/actions/content\";\r\n\r\n\r\nconst GetCorrectRequest = (request) => {\r\n if (typeof request === 'string') {\r\n return request\r\n } else {\r\n return request.N\r\n }\r\n}\r\n\r\nconst RequestWrapper = (children) => {\r\n const [cookie, setCookie, removeCookie] = useCookies(\r\n [COOKIES_NAMES.TOKEN, COOKIES_NAMES.ROLE, COOKIES_NAMES.STATUS]);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const AddNewError = (error) => {\r\n dispatch(addNotification({...error, id: Date.now()}))\r\n }\r\n\r\n const SetErrorToken = () => {\r\n removeCookie(COOKIES_NAMES.TOKEN, {path: '/'});\r\n removeCookie(COOKIES_NAMES.ROLE, {path: '/'});\r\n removeCookie(COOKIES_NAMES.STATUS, {path: '/'})\r\n }\r\n\r\n const SetRole = ({result}) => {\r\n if (result.json.is_teacher) {\r\n setCookie(COOKIES_NAMES.ROLE, ROLES.TEACHER, {path: '/'})\r\n setCookie(COOKIES_NAMES.STATUS, STATUS_USER_COOKIES.USER, {path: '/'})\r\n } else if (result.json.is_staff) {\r\n setCookie(COOKIES_NAMES.STATUS, STATUS_USER_COOKIES.ADMIN, {path: '/'})\r\n if (!cookie.role) {\r\n setCookie(COOKIES_NAMES.ROLE, ROLES.ADMIN, {path: '/'})\r\n }\r\n } else {\r\n setCookie(COOKIES_NAMES.ROLE, ROLES.STUDENT, {path: '/'})\r\n setCookie(COOKIES_NAMES.STATUS, STATUS_USER_COOKIES.USER, {path: '/'})\r\n }\r\n }\r\n\r\n const SetAdminRole = (role) => {\r\n if (cookie.status === STATUS_USER_COOKIES.ADMIN) {\r\n setCookie(COOKIES_NAMES.ROLE, role, {path: '/'})\r\n }\r\n }\r\n\r\n const SetRoleRequest = ({token = cookie.token}) => {\r\n GETWithToken({request: \"user/\", token}).then(result => SetRole({result}))\r\n }\r\n\r\n const CheckerRequest = ({result, meta}) => {\r\n try {\r\n if (result.status === 401) {\r\n SetErrorToken()\r\n AddNewError({code: 401, message: \"Ошибка авторизации\"});\r\n return false\r\n } else if (result.status === 403) {\r\n if (meta.strong_access) {\r\n SetRoleRequest({});\r\n }\r\n AddNewError({code: 403, message: \"Ошибка доступа\"})\r\n return false\r\n } else if (result.status !== 200) {\r\n AddNewError({code: result.status || 0, message: result.message})\r\n return false\r\n }\r\n //AddNewError({code: 200, message: \"Всё ок!\"})\r\n return true\r\n } catch (e) {\r\n console.log(\"Checker error\", e);\r\n return true;\r\n }\r\n }\r\n\r\n const InnerHandler = ({result, handler, meta}) => {\r\n try {\r\n const isCorrect = CheckerRequest({result, meta})\r\n if (!isCorrect) {\r\n console.log(\"Checker catch errors:\", result.message)\r\n } else {\r\n if (meta.login) {\r\n const token = result.json[\"Token\"];\r\n //SetRoleRequest({token});\r\n setCookie(COOKIES_NAMES.TOKEN, token, {path: '/'})\r\n SetRoleRequest({token});\r\n }\r\n if (meta.first) {\r\n SetRole({result});\r\n }\r\n }\r\n } catch (e) {\r\n\r\n }\r\n if (handler) {\r\n return handler(result)\r\n } else {\r\n return Promise.resolve(result)\r\n }\r\n }\r\n\r\n const onExit = () => {\r\n SetErrorToken()\r\n }\r\n\r\n const onGetUserInfo = () => {\r\n return GET({request: \"user/\"})\r\n }\r\n\r\n const GETWithToken = ({request, handler, token, meta = {}}) => {\r\n return httpGet({request: GetCorrectRequest(request), token, ms: meta.ms})\r\n .then(result => InnerHandler({result, handler, meta}))\r\n }\r\n\r\n const GET = ({request, handler, meta = {}}) => {\r\n return httpGet({request: GetCorrectRequest(request), token: cookie.token, ms: meta.ms})\r\n .then(result => InnerHandler({result, handler, meta}))\r\n }\r\n\r\n const POST = ({request, body, handler, meta = {}}) => {\r\n return httpPost({request: GetCorrectRequest(request), body, token: cookie.token, ms: meta.ms})\r\n .then(result => InnerHandler({result, handler, meta}))\r\n }\r\n\r\n const PROPS = {\r\n REQUEST: {\r\n GET,\r\n POST,\r\n CREATED: {\r\n EXIT: onExit,\r\n GET_USER_INFO: onGetUserInfo,\r\n SET_ADMIN_ROLE: SetAdminRole,\r\n },\r\n VALUES: {\r\n ROLE: cookie.role,\r\n STATUS: cookie.status,\r\n TOKEN: cookie.token,\r\n }\r\n },\r\n }\r\n\r\n\r\n if (typeof children === 'function') {\r\n return children(PROPS)\r\n }\r\n\r\n return PROPS\r\n\r\n\r\n}\r\n\r\n\r\nexport default RequestWrapper;","import {ADD_NOTIFICATION, DELETE_NOTIFICATION, DELETE_ALL_NOTIFICATIONS} from \"../types\";\r\n\r\nexport const addNotification = (notification) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: ADD_NOTIFICATION,\r\n notification\r\n });\r\n };\r\n};\r\n\r\nexport const deleteNotification = (notification) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: DELETE_NOTIFICATION,\r\n notification\r\n });\r\n };\r\n};\r\n\r\nexport const deleteAllNotifications = () => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: DELETE_ALL_NOTIFICATIONS,\r\n });\r\n };\r\n};","export const SET_USER_DATA = 'SET_USER_DATA';\r\nexport const UPDATE_USER = 'UPDATE_USER';\r\nexport const REMOVE_USER = 'REMOVE_USER';\r\nexport const VK_USER = 'VK_USER';\r\nexport const SET_TOKEN = 'SET_TOKEN';\r\nexport const SET_TOKEN_FROM_DB = 'SET_TOKEN_FROM_DB';\r\nexport const DELETE_TOKEN = 'DELETE_TOKEN';\r\nexport const SET_ERROR_TOKEN = 'SET_ERROR_TOKEN';\r\nexport const SET_ACTIVE_LESSON_STATE = 'SET_ACTIVE_LESSON_STATE';\r\n\r\n// CONTENT\r\nexport const ADD_NOTIFICATION = 'ADD_NOTIFICATION';\r\nexport const DELETE_NOTIFICATION = 'DELETE_NOTIFICATION';\r\nexport const DELETE_ALL_NOTIFICATIONS = 'DELETE_ALL_NOTIFICATIONS';\r\n\r\n// STATISTICS\r\nexport const SET_TIME = 'SET_TIME'\r\nexport const SET_MENU_ELEMENT_ID = 'SET_MENU_ELEMENT_ID'\r\n\r\n// CLASSROOMS\r\nexport const ADD_CLASSROOM = 'ADD_CLASSROOM'\r\nexport const EDIT_CLASSROOM = 'EDIT_CLASSROOM'\r\nexport const ADD_USER_TO_CLASSROOM = 'ADD_USER_TO_CLASSROOM'\r\nexport const DELETE_USER_FROM_CLASSROOM = 'DELETE_USER_FROM_CLASSROOM'\r\nexport const ADD_TEST_TO_CLASSROOM = 'ADD_TEST_TO_CLASSROOM'\r\nexport const DELETE_TEST_FROM_CLASSROOM = 'DELETE_TEST_FROM_CLASSROOM'\r\nexport const CREATE_NEW_TEST = 'CREATE_NEW_TEST'\r\nexport const EDIT_TEST = 'EDIT_TEST'\r\nexport const CREATE_NEW_QUESTION = 'CREATE_NEW_QUESTION'\r\nexport const EDIT_QUESTION = 'EDIT_QUESTION'\r\n","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\n// import {NavLink} from \"react-router-dom\";\r\nimport {withRouter} from 'react-router-dom';\r\nimport cn from 'classnames';\r\nimport Header from \"../Header\";\r\n// import {AppModal} from \"../AppModal\";\r\n// import AppInput from \"../AppInput\";\r\n//import AppButton from \"../AppButton\";\r\nimport { useCookies } from 'react-cookie';\r\nimport {COOKIES_NAMES, DB_PATH, MAIN_URL} from \"../../constants\";\r\nimport RequestWrapper from \"../../helpers/RequestWrapper\";\r\nimport {useSelector, useDispatch} from \"react-redux\";\r\nimport {deleteNotification} from \"../../store/actions/content\";\r\n\r\n\r\nconst ErrorMessage = ({error}) => {\r\n const date = new Date(error.id);\r\n return
\r\n
\r\n {error.message + \" \"}\r\n
\r\n
\r\n {\r\n date.getHours().toString()\r\n }:\r\n {\r\n date.getMinutes().toString().length === 1 ?\r\n \"0\" + date.getMinutes().toString() : date.getMinutes().toString()\r\n }:\r\n {\r\n date.getSeconds().toString().length === 1 ?\r\n \"0\" + date.getSeconds().toString() : date.getSeconds().toString()\r\n }\r\n
\r\n
\r\n}\r\n\r\n\r\nfunction Content({history, children, style={}}) {\r\n\r\n //const [context, setContext] = useContext(Context);\r\n\r\n // const [counter, setCounter] = useState(1)\r\n const [firstRequest, setFirstRequest] = useState(false);\r\n const [deleteCounter, setDeleteCounter] = useState(0);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const ChangePage = (name) => {\r\n window.scroll(0, 0);\r\n history.push(name);\r\n }\r\n\r\n const {REQUEST} = RequestWrapper( (p) => ({...p}))\r\n\r\n useEffect(() => {\r\n if (!firstRequest && REQUEST.VALUES.TOKEN) {\r\n setFirstRequest(true)\r\n REQUEST.GET({request: DB_PATH.USER, meta: {first: true}})\r\n .then(res => {\r\n console.log(\"Res CHECK first:\", res)\r\n setFirstRequest(true);\r\n })\r\n }\r\n setFirstRequest(true);\r\n }, [firstRequest])\r\n\r\n const ERRORS = useSelector(state => state.content.notifications);\r\n\r\n useEffect(() => {\r\n try {\r\n if (ERRORS.length && ERRORS.length > deleteCounter) {\r\n setTimeout(() => {\r\n dispatch(deleteNotification(ERRORS[deleteCounter]))\r\n setDeleteCounter(c => c - 1)\r\n },\r\n 4000)\r\n setDeleteCounter(c => c + 1)\r\n }\r\n console.log(\"NOTIFICATIONS! Length:\", ERRORS.length, \" toDelete:\", deleteCounter)\r\n } catch (e) {\r\n console.log(\"Delete error\", e)\r\n }\r\n }, [ERRORS, deleteCounter])\r\n\r\n const hasHeader = history.location.pathname.toString() !== MAIN_URL.LANDING;\r\n\r\n // const [login, setLogin] = useState(\"denis_2\")\r\n // const [password, setPassword] = useState(\"denis_2denis_2\")\r\n // const [error, setError] = useState(\"\")\r\n\r\n const [cookies, setCookie, removeCookie] = useCookies([COOKIES_NAMES.TOKEN, COOKIES_NAMES.ROLE]);\r\n\r\n // function onSetToken(newToken) {\r\n // setCookie(COOKIES_NAMES.TOKEN, newToken, { path: '/', maxAge: 60*60*24*30*2 }); // 2 month\r\n // }\r\n\r\n // const onLogin = () => {\r\n // //console.log(\"Start auth\");\r\n // setError(\"\");\r\n // if (login === \"\" || password === \"\") {\r\n // setError(\"Заполните все поля\");\r\n // } else {\r\n // httpGet({\r\n // request: `auth/?username=${login}&password=${password}`,\r\n // }).then((res) => {\r\n // if (res.message) {\r\n // setError(\"Ошибка: \" + res.message);\r\n // } else {\r\n // onSetToken(res[\"json\"][\"Token\"])\r\n // }\r\n // });\r\n // }\r\n // }\r\n\r\n // const SetErrorToken = () => {\r\n // removeCookie(COOKIES_NAMES.TOKEN, {path: '/'});\r\n // }\r\n //\r\n // const onCheckRequest = (req) => {\r\n // try {\r\n // if (req.status === 401) {\r\n // SetErrorToken()\r\n // }\r\n // } catch (e) {\r\n // console.log(\"Checker error\", e);\r\n // }\r\n // }\r\n\r\n //const ContentContext = React.createContext({onCheckRequest});\r\n\r\n //const token = useSelector((state) => state.token.token);\r\n\r\n useEffect(() => {\r\n console.log(\"COOKIES NEW\")\r\n //console.log(\"History\", history)\r\n //setModal(!cookies.token)\r\n if (!cookies.token) {\r\n window.scroll(0, 0);\r\n history.push(MAIN_URL.LANDING);\r\n }\r\n }, [cookies])\r\n\r\n // useEffect(() => {\r\n // console.log(\"Errors in CONTENT\", ERRORS)\r\n // }, [ERRORS])\r\n\r\n // const [modal, setModal] = useState(false)\r\n\r\n //console.log(\"Type content children:\", typeof children)\r\n\r\n return
\r\n {hasHeader &&
}\r\n
\r\n {ERRORS.filter((e, i) => i < 3)\r\n .map((error, i) => )}\r\n
\r\n {/* setModal(false)}*/}\r\n {/* modalVisible={modal}*/}\r\n {/* canCloseOnBackdrop={false}*/}\r\n {/*>*/}\r\n {/*
Войти
*/}\r\n {/*
*/}\r\n {/* */}\r\n {/* */}\r\n {/*
*/}\r\n {/*
{error}
*/}\r\n {/* {}}>Войти*/}\r\n {/**/}\r\n
\r\n {/*{children}*/}\r\n {typeof children === 'function' ? RequestWrapper((p) => children({...p})) : children}\r\n
\r\n
;\r\n}\r\n\r\n\r\nexport default withRouter(Content);\r\n","import React, {useEffect} from 'react';\r\n// import styles from \"./styles.module.scss\";\r\nimport Content from \"../../components/Content\";\r\n\r\n\r\nfunction ClassroomPage() {\r\n\r\n useEffect(() => {\r\n document.title = \"Занятия\";\r\n }, [])\r\n\r\n return
\r\n

ЗАНЯТИЯ

\r\n
\r\n}\r\n\r\nexport default ClassroomPage;\r\n","import React from \"react\";\r\nimport styles from \"./styles.module.scss\";\r\n\r\nexport const AppLogo = () => {\r\n\r\n return
\r\n \"logo\"\r\n\r\n
\r\n};","import React from \"react\";\r\nimport {AppLogo} from \"../AppLogo/index\"\r\nimport styles from \"./styles.module.scss\";\r\n//import cn from \"classnames\";\r\n\r\nexport const AppActivityIndicator = ({style={}, type=\"big\"}) => {\r\n const myType = type === \"big\" ? \"big\" : \"small\";\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport cn from 'classnames';\r\nimport {AppActivityIndicator} from \"../AppActivityIndicator\";\r\n\r\n\r\nexport const AppModal=({modalVisible, setModalVisible, children,\r\n canCloseOnBackdrop=true, showLoading=false}) => {\r\n\r\n const WrapperFunction = canCloseOnBackdrop ? () => setModalVisible(false) : () => {};\r\n\r\n return \r\n {showLoading ? :\r\n
e.stopPropagation()}>\r\n {children}\r\n
\r\n }\r\n \r\n};\r\n","import React from \"react\";\r\nimport styles from './styles.module.scss';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst AppButton = (\r\n {\r\n children,\r\n onClick = () => {},\r\n style = {},\r\n type = \"orange\",\r\n // height_ = \"40px\",\r\n // width_ = \"200px\",\r\n ...props\r\n }) => {\r\n\r\n return \r\n {children}\r\n ;\r\n\r\n};\r\n\r\n\r\nexport default AppButton;\r\n","import React, {useState} from \"react\";\r\nimport cn from \"classnames\";\r\nimport styles from \"./styles.module.scss\";\r\n\r\nfunction AppInput(\r\n {\r\n label= \"\",\r\n placeholder = \"\",\r\n value = \"\",\r\n setValue = () => {},\r\n onFocus = () => {},\r\n onBlur = () => {},\r\n maxLength = 60,\r\n type = \"text\",\r\n editable = true,\r\n ...props}) {\r\n const onChange = editable ? setValue : (e) => {}\r\n\r\n const [active, setActive] = useState(false);\r\n\r\n return
\r\n \r\n onChange(e.target.value)}\r\n onFocus={(e) => {\r\n setActive(true)\r\n onFocus(e)\r\n // console.log(e)\r\n }}\r\n onBlur={(e) => {\r\n setActive(false);\r\n onBlur(e)\r\n //console.log(\"ACTIVE\", e)\r\n }}\r\n {...props}\r\n />\r\n
;\r\n}\r\n\r\n\r\nexport default AppInput;\r\n","import React from \"react\";\r\nimport styles from \"./styles.module.scss\";\r\nimport cn from \"classnames\";\r\n\r\nexport const AppWhiteBlock = ({ children, style={}, className}) => {\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n","import React, { useState } from \"react\";\r\nimport styles from \"./styles.module.scss\";\r\n\r\nexport const ProgressLine = (\r\n {\r\n done,\r\n all = 100,\r\n height = 30,\r\n borderRadius_ = 9,\r\n }) => {\r\n\r\n const styleParameter = {\r\n height: height,\r\n borderRadius: borderRadius_,\r\n };\r\n let style = {\r\n opacity: 1,\r\n width: `${done}%`,\r\n height: height,\r\n borderRadius: borderRadius_,\r\n borderBottomStartRadius: borderRadius_,\r\n borderTopStartRadius: borderRadius_,\r\n };\r\n let textProgress = `${done}%`;\r\n if (all !== 100) {\r\n textProgress = `${done}/${all}`;\r\n const percent = (100 / all) * done;\r\n style = {\r\n borderRadius: borderRadius_,\r\n opacity: 1,\r\n borderBottomStartRadius: borderRadius_,\r\n borderTopStartRadius: borderRadius_,\r\n width: `${percent}%`,\r\n height: height,\r\n };\r\n }\r\n\r\n if (done === all) {\r\n style = {\r\n borderRadius: borderRadius_,\r\n borderBottomStartRadius: borderRadius_,\r\n borderTopStartRadius: borderRadius_,\r\n ...style,\r\n };\r\n }\r\n return (\r\n
\r\n
\r\n {textProgress}\r\n
\r\n
\r\n
\r\n );\r\n};","import React, { useState } from \"react\";\r\nimport { ProgressLine } from \"./../ProgressLine/index\";\r\nimport styles from \"./styles.module.scss\"\r\n\r\n\r\nexport const CardAchievement = ({ all = 100, done, name, i=0, onClick = () => {} }) => {\r\n // const [modalVisible, setModalVisible] = useState(false);\r\n // const all = card.achievements.length;\r\n // const done = card.achievements.reduce(reducerSum, 0)\r\n return (\r\n
\r\n
\r\n
{name}
\r\n \r\n
\r\n
\r\n );\r\n};","import React, {useEffect, useState} from 'react';\r\nimport AppButton from \"../../../components/AppButton\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {MAIN_URL, ROLES, SECTIONS} from \"../../../constants\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport cn from 'classnames';\r\nimport styles from \"./styles.module.scss\";\r\nimport AppInput from \"../../../components/AppInput\";\r\nimport {AppWhiteBlock} from \"../../../components/AppWhiteBlock\";\r\nimport {CardAchievement} from \"../../../components/UI/CardAchievement\";\r\nimport {AppActivityIndicator} from \"../../../components/AppActivityIndicator\";\r\n\r\nconst roles = [\r\n {key: 0, name: ROLES.ADMIN,},\r\n {key: 1, name: ROLES.STUDENT},\r\n {key: 2, name: ROLES.TEACHER}\r\n]\r\n\r\nfunction compareAchievements( a, b ) {\r\n if ( a.v < b.v ) {\r\n return -1;\r\n }\r\n if ( a.v > b.v ) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n\r\nconst reducerSum = (acc, current) => acc + (current.is_open ? 1 : 0);\r\n\r\nfunction AdminProfilePage({history, userData}) {\r\n\r\n const {REQUEST} = RequestWrapper()\r\n\r\n const [activeRole, setActiveRole] = useState(roles.findIndex(el => el.name === REQUEST.VALUES.ROLE));\r\n\r\n const [name, setName] = useState(\"who?\")\r\n const [nickname, setNickname] = useState(\"\")\r\n const [firstName, setFirstName] = useState(\"\")\r\n const [lastName, setLastName] = useState(\"\")\r\n const [email, setEmail] = useState(\"\")\r\n\r\n // const [loading, setLoading] = useState(true);\r\n\r\n const onExit = () => {\r\n REQUEST.CREATED.EXIT()\r\n }\r\n\r\n const RoleElem = (role) => {\r\n return
{\r\n REQUEST.CREATED.SET_ADMIN_ROLE(role.name);\r\n setActiveRole(role.key)\r\n }}\r\n key={role.key.toString()}\r\n className={cn(styles.role_elem, role.key === activeRole && styles.role_active)}\r\n >\r\n {role.name}\r\n
\r\n }\r\n\r\n const toUsualProfile = () => {\r\n history.push(MAIN_URL.PROFILE);\r\n }\r\n\r\n const DataDict = {\r\n first_name: {\r\n value: firstName,\r\n setValue: setFirstName,\r\n },\r\n last_name: {\r\n value: lastName,\r\n setValue: setLastName\r\n },\r\n nickname: {\r\n value: nickname,\r\n setValue: setNickname,\r\n },\r\n email: {\r\n value: email,\r\n setValue: setEmail\r\n }\r\n }\r\n\r\n const SetUserData = (data) => {\r\n setFirstName(data.first_name || \"\")\r\n setLastName(data.last_name || \"\")\r\n setNickname(data.nickname || \"\")\r\n setEmail(data.username || \"\")\r\n }\r\n\r\n useEffect(() => {\r\n SetUserData(userData)\r\n }, [])\r\n\r\n const onGetInfo = () => {\r\n REQUEST.CREATED.GET_USER_INFO().then(res => {\r\n try {\r\n console.log(\"AdminProfile user info:\", res.json)\r\n if (!res.json.is_staff) {\r\n toUsualProfile();\r\n return;\r\n }\r\n setName(JSON.stringify(res.json))\r\n //SetUserData(res.json)\r\n\r\n // setLoading(false)\r\n } catch (e) {\r\n console.log(\"ERR\", e);\r\n }\r\n })\r\n };\r\n\r\n const [achievements, setAchievements] = useState([])\r\n const [achLoading, setAchLoading] = useState(true)\r\n\r\n useEffect(() => {\r\n REQUEST.GET({request: \"achievements/\"}).then(res => {\r\n let ans = []\r\n for (let key in res.json) {\r\n let mass = res.json[key]\r\n mass.sort(compareAchievements)\r\n let elem = {\r\n name: key,\r\n all: mass.length,\r\n done: mass.reduce(reducerSum, 0)\r\n }\r\n ans.push(elem)\r\n }\r\n setAchievements(ans)\r\n setAchLoading(false)\r\n // console.log(res.json)\r\n })\r\n }, [])\r\n\r\n const [statistics, setStatistics] = useState([])\r\n const [statLoading, setStatLoading] = useState(true)\r\n\r\n // const NamesSection = {\r\n // anc: \"Древность\",\r\n // ren: \"Новое время\",\r\n // mod: \"Новейшее время\"\r\n // }\r\n\r\n useEffect(() => {\r\n REQUEST.GET({request: \"statistics/\"}).then(res => {\r\n let ans = []\r\n for (let key in res.json) {\r\n let elem = {\r\n name: SECTIONS[key].name,\r\n all: 100,\r\n onClick: () => history.push(MAIN_URL.STATISTICS + '/' + key),\r\n done: res.json[key]\r\n }\r\n ans.push(elem)\r\n }\r\n setStatistics(ans)\r\n setStatLoading(false)\r\n // console.log(res.json)\r\n })\r\n }, [])\r\n\r\n\r\n return
\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 {statLoading ? :\r\n statistics.map((ach, i) => CardAchievement({...ach, i}))}\r\n
\r\n
\r\n \r\n
Достижения
\r\n
\r\n {achLoading ? :\r\n achievements.map((ach, i) => CardAchievement({...ach, i}))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
Роль
\r\n {roles.map(elem => RoleElem(elem))}\r\n
\r\n \r\n Выйти\r\n \r\n
\r\n
\r\n
\r\n
\r\n}\r\n\r\nexport default withRouter(AdminProfilePage);\r\n","import React, {useState} from 'react';\r\nimport AppButton from \"../../../components/AppButton\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {AppModal} from \"../../../components/AppModal\";\r\n\r\n\r\nfunction StudentProfilePage() {\r\n\r\n const {REQUEST} = RequestWrapper()\r\n\r\n const [name, setName] = useState(\"who?\")\r\n\r\n const onExit = () => {\r\n REQUEST.CREATED.EXIT()\r\n }\r\n\r\n const onGetInfo = () => {\r\n REQUEST.GET({request: \"user/\"}).then(res => {\r\n try {\r\n console.log(\"Profile user info\", res.json)\r\n setName(res.json.username)\r\n } catch (e) {\r\n console.log(\"ERR\", e);\r\n }\r\n })\r\n };\r\n\r\n return
\r\n

ПРОФИЛЬ STUDENT!

\r\n
\r\n Выйти\r\n Проверка инфы\r\n

You are {name}

\r\n
\r\n
\r\n}\r\n\r\nexport default StudentProfilePage;\r\n","import React, {useEffect, useState} from 'react';\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {AppModal} from \"../../../components/AppModal\";\r\nimport AdminProfilePage from \"../AdminProfilePage\";\r\nimport StudentProfilePage from \"../StudentProfilePage\";\r\n\r\n\r\nfunction ProfilePage() {\r\n\r\n const {REQUEST} = RequestWrapper()\r\n\r\n const [loading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n onGetInfo()\r\n }, [])\r\n \r\n const onExit = () => {\r\n REQUEST.CREATED.EXIT()\r\n }\r\n\r\n const ErrorPage = () => (\r\n
\r\n Ошибка. Перезагрузите страничку.\r\n
\r\n )\r\n\r\n const ShowPage = () => {\r\n setTimeout(() => setLoading(false), 300);\r\n }\r\n\r\n const [page, setPage] = useState(ErrorPage)\r\n\r\n const onGetInfo = () => {\r\n REQUEST.CREATED.GET_USER_INFO().then(res => {\r\n try {\r\n console.log(\"Profile user info\", res.json)\r\n if (res.json.is_staff) {\r\n setPage((props) => AdminProfilePage({...props, userData: res.json}))\r\n } else {\r\n setPage(StudentProfilePage)\r\n }\r\n ShowPage()\r\n } catch (e) {\r\n setPage(ErrorPage)\r\n console.log(\"ERR\", e);\r\n ShowPage();\r\n }\r\n })\r\n };\r\n\r\n // const onTest = () => {\r\n // return Promise.resolve(5 + 5)\r\n // }\r\n //\r\n // useEffect(() => {\r\n // onTest().then(res => console.log(\"FIVE\", res))\r\n // })\r\n\r\n return
\r\n {\r\n loading ? :\r\n page\r\n }\r\n
\r\n}\r\n\r\nexport default ProfilePage;\r\n","import React from 'react';\r\n// import styles from \"./styles.module.scss\";\r\n\r\n\r\nfunction CompetitionPage() {\r\n\r\n // function Right (index) {\r\n // document.getElementById(index.toString()).classList.add(styles.right);\r\n // document.getElementById(index.toString()).classList.remove(styles.wrong)\r\n // }\r\n //\r\n // function Wrong (index) {\r\n // document.getElementById(index.toString()).classList.remove(styles.right);\r\n // document.getElementById(index.toString()).classList.add(styles.wrong)\r\n // }\r\n\r\n return
\r\n

СОРЕВНОВАНИЯ

\r\n
\r\n}\r\n\r\nexport default CompetitionPage;\r\n","export const THEME = {\r\n MAIN_COLOR: \"#303f9f\",\r\n DANGER_COLOR: \"#D81B60\",\r\n NOT_ACTIVE: \"#4d4d4d\",\r\n\r\n ORANGE_500: \"#FF9900\",\r\n ORANGE_400: \"#FFBA3F\",\r\n ORANGE_300: \"#FFCE66\",\r\n ORANGE_200: \"#FFE299\",\r\n\r\n RED_500: \"#FF675B\",\r\n RED_400: \"#FF9783\",\r\n RED_300: \"#FFB49C\",\r\n RED_200: \"#FFD2BD\",\r\n\r\n BLUE_500: \"#4A5784\",\r\n BLUE_400: \"#7988B5\",\r\n BLUE_300: \"#A0B0DA\",\r\n BLUE_200: \"#C8D4F2\",\r\n\r\n GRAY_500: \"#2F4858\",\r\n GRAY_400: \"#647E8F\",\r\n GRAY_300: \"#AFC1CC\",\r\n GRAY_200: \"#e6eef2\",\r\n GRAY_50: \"#f5fafc\",\r\n\r\n BACKGROUND_COLOR: \"#f5fafc\",\r\n\r\n GREEN_100: \"#beffe6\",\r\n GREEN_200: \"#58FFB8\",\r\n GREEN_500: \"#00D077\",\r\n PINK_200: \"#FABFC5\",\r\n PINK_500: \"#D6578B\",\r\n\r\n MAIN_FONT: \"PT-Sans\",\r\n MAIN_FONT_BOLD: \"PT-Sans-bold\",\r\n TEXT_FONT_BOLD: \"Roboto-Bold\",\r\n TEXT_FONT_ITALIC: \"Roboto-Italic\",\r\n TEXT_FONT_BOLD_ITALIC: \"Roboto-BoldItalic\",\r\n TEXT_FONT: \"Roboto-Regular\",\r\n TEXT_SIZE: 12,\r\n};","import React, {useState, useEffect} from 'react';\r\nimport AppButton from \"../../components/AppButton\";\r\nimport RequestWrapper from \"../../helpers/RequestWrapper\";\r\nimport styles from \"./styles.module.scss\";\r\n\r\nimport {THEME} from \"../../constants/THEME\";\r\nimport {AppActivityIndicator} from \"../../components/AppActivityIndicator\";\r\nimport cn from 'classnames';\r\n\r\nconst GOLD = \"#ffce2a\"\r\nconst SILVER = \"#c4c4c4\"\r\nconst BRONZE = \"#d66800\"\r\n\r\nconst BestPrev = (elem, index) => {\r\n const color = index === 1 ? GOLD : index === 2 ? SILVER : BRONZE;\r\n const marginTop = index === 1 ? 0 : 20;\r\n let name = elem.u.split(' ')\r\n return
\r\n
\r\n
\r\n {`${index} МЕСТО`}\r\n
\r\n
\r\n {name.map((n, i) =>\r\n
\r\n {n}\r\n
\r\n )}\r\n
\r\n {elem.r}\r\n
\r\n
\r\n}\r\n\r\n\r\nconst TableElem = (place, user, value, index, isMe) => {\r\n const backgroundColor = isMe ? THEME.ORANGE_300 : 'rgba(0, 0, 0, 0)'\r\n const color = index === 1 ? GOLD : index === 2 ? SILVER : index === 3 ? BRONZE :\r\n index === 0 ? 'rgba(0, 0, 0, 0)' : 'rgba(0, 0, 0, 0)';\r\n return
\r\n
\r\n
{place}
\r\n
\r\n
\r\n
{user}
\r\n
\r\n
\r\n
\r\n {value}\r\n
\r\n
\r\n
\r\n}\r\n\r\n\r\nfunction RatingPage({}) {\r\n\r\n const [prev, setPrev] = useState([])\r\n const [data, setData] = useState([])\r\n const [user, setUser] = useState({})\r\n const [time, setTime] = useState({d: 4, h: 22})\r\n const [loading, setLoading] = useState(true)\r\n\r\n const {REQUEST} = RequestWrapper()\r\n\r\n const GetData = () => {\r\n REQUEST.GET({request: \"statistics/rating/?action=get\"}).then(res => {\r\n setData(res.json.data)\r\n setUser(res.json.user)\r\n // console.log(\"USER RATING\", res.json.user)\r\n setTime(res.json.day)\r\n setPrev(res.json.previous)\r\n setTimeout(() => setLoading(false), 500)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n GetData()\r\n }, [])\r\n\r\n const MIN_DATA_LENGTH = 7;\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {/**/}\r\n
\r\n
\r\n РЕЙТИНГ\r\n
\r\n
\r\n {loading ? :\r\n
\r\n {\r\n prev && prev.length >= 3 &&\r\n
\r\n
\r\n ПОБЕДИТЕЛИ ПРОШЛОЙ НЕДЕЛИ\r\n
\r\n
\r\n {BestPrev(prev[1], 2)}\r\n {BestPrev(prev[0], 1)}\r\n {BestPrev(prev[2], 3)}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n ЕЖЕНЕДЕЛЬНЫЙ ТУРНИР\r\n
\r\n
\r\n ОСТАЛОСЬ: {time.d}Д. {time.h}Ч\r\n
\r\n
\r\n
\r\n {TableElem(\"МЕСТО\", \"ПОЛЬЗОВАТЕЛЬ\", \"ОЧКИ\", 0)}\r\n {\r\n data.length >= MIN_DATA_LENGTH ? data.map((elem, i) =>\r\n TableElem(i + 1, elem.u, elem.r, i + 1, i + 1 === user.place)) :\r\n \r\n Данные по рейтингу скоро появятся\r\n
\r\n }\r\n {\r\n data.length >= MIN_DATA_LENGTH && user.place > 0 && user.place > data.length &&\r\n TableElem(user.place, user.u, user.r, user.place, true)\r\n }\r\n {\r\n data.length >= MIN_DATA_LENGTH &&\r\n (user.place <= 0 || user.place === undefined) && \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\nexport default RatingPage;\r\n","import React, {useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport AppButton from \"../../components/AppButton\";\r\nimport AppInput from \"../../components/AppInput\";\r\nimport {AppWhiteBlock} from \"../../components/AppWhiteBlock\";\r\n\r\n\r\nfunction EnterForm({onEnter, REQUEST}) {\r\n\r\n const [login, setLogin] = useState(\"\") // denis_2 // vk__103159559\r\n // denis13011999dXyZ\r\n const [password, setPassword] = useState(\"\") // denis_2denis_2\r\n const [error, setError] = useState(\"\")\r\n\r\n // const [cookies, setCookie] = useCookies([COOKIES_NAMES.TOKEN]);\r\n\r\n // function onSetToken(newToken) {\r\n // setCookie(COOKIES_NAMES.TOKEN, newToken, { path: '/' }); // 2 month: maxAge: 60*60*24*30*2\r\n // if (newToken) {\r\n // onEnter();\r\n // }\r\n // }\r\n\r\n // const [person, setPerson] = useState(ROLES.STUDENT)\r\n\r\n const onLogin = () => {\r\n console.log(\"Start auth\");\r\n setError(\"\");\r\n if (login === \"\" || password === \"\") {\r\n setError(\"Заполните все поля\");\r\n } else {\r\n REQUEST.GET({\r\n request: `auth/?username=${login}&password=${password}`, meta: {login: true},\r\n handler: (res) => {\r\n if (res.message) {\r\n setError(\"Ошибка: \" + res.message);\r\n } else {\r\n onEnter();\r\n }\r\n }\r\n })\r\n // }).then((res) => {\r\n // if (res.message) {\r\n // setError(\"Ошибка: \" + res.message);\r\n // } else {\r\n // onEnter();\r\n // console.log(\"USER REQUEST JSON:\\n\", res.json)\r\n // const token = res[\"json\"][\"Token\"];\r\n // httpGet({request: \"user/\", token}).then(result => {\r\n // try {\r\n // console.log(\"USER\", result.json)\r\n // if (result.json.is_staff) {\r\n // setPerson(ROLES.ADMIN)\r\n // } else if (result.json.is_teacher) {\r\n // setPerson(ROLES.TEACHER)\r\n // }\r\n // } catch (e) {\r\n // console.log(\"ERR\", e);\r\n // }\r\n // })\r\n // onSetToken(token)\r\n // }\r\n //});\r\n }\r\n }\r\n\r\n // const setUserInfo = () => {\r\n // httpGet({request: \"user/\" + userName, token}).then(res => {\r\n // try {\r\n // console.log(res.json)\r\n // setIsStaff(res.json.is_staff);\r\n // const localName = res.json.first_name + ' ' + res.json.last_name;\r\n // fromVK ? dispatch(updateVkUser({name: localName, userName})) : dispatch(updateUser({userName}));\r\n // setLoadingUserInfo(false);\r\n // } catch (e) {\r\n // console.log(\"ERR\", userName);\r\n // setLoadingUserInfo(false);\r\n // }\r\n // })\r\n // };\r\n\r\n\r\n // useEffect(() => {\r\n // console.log(\"token\", cookies.token)\r\n // //setModal(!cookies.token)\r\n // if (!cookies.token) {\r\n // onEnter();\r\n // }\r\n // }, [cookies])\r\n\r\n return \r\n
\r\n
Войти
\r\n {/*
*/}\r\n \r\n \r\n {/*
*/}\r\n
{error}
\r\n Войти\r\n
\r\n
\r\n}\r\n\r\nexport default EnterForm;\r\n","import React, {useEffect, useState} from 'react';\r\nimport styles from './styles.module.scss';\r\nimport cn from 'classnames';\r\nimport {THEME} from \"../../../constants/THEME\";\r\n\r\nconst numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]\r\n\r\nconst AppCircularProgress = (\r\n {\r\n //sqSize = 200,\r\n //percentage = 0,\r\n strokeWidth = 20,\r\n data = [{id: 0, percentage: 20, name: \"Древность\"},\r\n {id: 1, percentage: 70, name: \"Новое время\"},\r\n {id: 2, percentage: 55, name: \"Новейшее время\"}],\r\n hasHeader = true,\r\n header = \"Прогресс\",\r\n centerBeginText = \"\",\r\n minHeight = \"370px\",\r\n beginRadius = 60,\r\n fontSize = \"24px\",\r\n animatedText = true,\r\n onNext = () => {},\r\n }) => {\r\n\r\n // const sqSize = this.props.sqSize;\r\n // SVG centers the stroke width on the radius, subtract out so circle fits in square\r\n //const radius = (sqSize - strokeWidth) / 2;\r\n //const beginRadius = 60;\r\n const indent = 3;\r\n const oneBlockAmount = 5;\r\n const [blocksAmount, setBlocksAmount] = useState(Math.round(data.length / oneBlockAmount))\r\n const [currentBlock, setCurrentBlock] = useState(0)\r\n\r\n const [activeHover, setActiveHover] = useState(-1)\r\n const [firstTime, setFirstTime] = useState(true)\r\n\r\n const [circleData, setCircleData] = useState([])\r\n\r\n useEffect(() => {\r\n setCircleData(data.filter((elem, i) =>\r\n i >= currentBlock * oneBlockAmount && i < (currentBlock + 1) * oneBlockAmount).map((elem, i) => {\r\n const r = beginRadius + i * (indent + strokeWidth);\r\n const dA = r * Math.PI * 2;\r\n return {\r\n ...elem,\r\n radius: r,\r\n dashArray: dA,\r\n fO: dA - dA * (elem.percentage ? elem.percentage : 1) / 100,\r\n dashOffset: firstTime ? dA : dA - dA * (elem.percentage ? elem.percentage : 1) / 100\r\n }}))\r\n }, [currentBlock, oneBlockAmount, firstTime, data])\r\n\r\n useEffect(() => {\r\n //console.log(\"CIRCLE DATA\", data)\r\n setTimeout(() => {\r\n setCircleData(c => c.map(elem => ({...elem, dashOffset: elem.fO})))\r\n setFirstTime(false)\r\n }, 100)\r\n }, [])\r\n\r\n const onHover = (id) => {\r\n setActiveHover(id)\r\n }\r\n const [headerOpacity, setHeaderOpacity] = useState('rgba(0, 0, 0, 1)')\r\n const [headerText, setHeaderText] = useState(header)\r\n const [centerText, setCenterText] = useState(centerBeginText)\r\n\r\n useEffect(() => {\r\n if (animatedText) {\r\n setHeaderOpacity('rgba(0, 0, 0, 0)')\r\n // setHeaderOpacity('rgba(0, 0, 0, 1)')\r\n setTimeout(() => {\r\n setHeaderOpacity('rgba(0, 0, 0, 1)');\r\n setHeaderText(activeHover >= 0 ? circleData[activeHover].name : header)\r\n setCenterText(activeHover >= 0 ? `${circleData[activeHover].percentage}%` : centerBeginText)\r\n }, 300)\r\n }\r\n }, [activeHover])\r\n\r\n return (\r\n
\r\n {hasHeader &&
\r\n {headerText}\r\n
}\r\n = 0 && styles.svg_on_focus)}\r\n style={{minHeight,\r\n //backgroundColor: \"red\"\r\n }}\r\n >\r\n \r\n {circleData.map((elem, i) => (\r\n onNext(currentBlock * oneBlockAmount + i)}\r\n className={cn(styles.circle_background,\r\n activeHover === i && styles.circle_active\r\n )}\r\n cx=\"50%\"\r\n cy=\"50%\"\r\n onMouseEnter={() => onHover(i)}\r\n onMouseLeave={() => onHover(-1)}\r\n // onFocus={() => onHover(i)}\r\n // onBlur={() => onHover(-1)}\r\n r={elem.radius}\r\n strokeWidth={`${strokeWidth + indent}px`}\r\n >\r\n {/**/}\r\n {/* elem.id}*/}\r\n {/**/}\r\n ))}\r\n {circleData.map((elem, i) => (\r\n = 0 && activeHover !== i && styles.inactive,\r\n activeHover === i && styles.active\r\n )}\r\n cx=\"50%\"\r\n cy=\"50%\"\r\n focusable={true}\r\n onClick={() => onNext(currentBlock * oneBlockAmount + i)}\r\n onMouseEnter={() => onHover(i)}\r\n onMouseLeave={() => onHover(-1)}\r\n onFocus={() => onHover(i)}\r\n onBlur={() => onHover(i)}\r\n r={elem.radius}\r\n strokeWidth={`${strokeWidth}px`}\r\n style={{\r\n strokeDasharray: elem.dashArray,\r\n strokeDashoffset: elem.dashOffset\r\n }}\r\n />))}\r\n \r\n \r\n {centerText}\r\n \r\n \r\n {/*GGG
*/}\r\n {blocksAmount > 1 &&
\r\n {numbers.filter(num => num < blocksAmount).map((num, i) => {\r\n return setCurrentBlock(i)}\r\n >\r\n {num + 1}\r\n
\r\n })}\r\n }\r\n \r\n );\r\n}\r\n\r\n\r\nexport default AppCircularProgress","import React, {useEffect, useRef, useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {MAIN_URL, PERSONS} from \"../../constants\";\r\nimport AppButton from \"../../components/AppButton\";\r\nimport EnterForm from \"../../containers/EnterForm\";\r\nimport ScrollableAnchor , { goToAnchor, removeHash } from 'react-scrollable-anchor';\r\nimport RequestWrapper from \"../../helpers/RequestWrapper\";\r\nimport cn from \"classnames\";\r\nimport {THEME} from \"../../constants/THEME\";\r\nimport AppCircularProgress from \"../../components/UI/AppCircularProgress\";\r\n\r\nconst FullScreen = ({children, style={}, classname}) => {\r\n return
\r\n {children}\r\n
\r\n}\r\n\r\nclass PageSection extends React.Component {\r\n render() {\r\n return this.props.content\r\n }\r\n}\r\n// PageSection.propTypes = {\r\n// content: React.PropTypes.node.isRequired\r\n// }\r\n\r\n\r\nfunction LandingPage({history}) {\r\n\r\n const afterEnter = () => {\r\n window.scroll(0, 0);\r\n history.push(MAIN_URL.PROFILE)\r\n }\r\n\r\n const {REQUEST} = RequestWrapper({children: (p) => ({...p})})\r\n\r\n const exampleWithoutAuth = () => {\r\n REQUEST.GET({request: \"statistics/\"}).then(res => console.log(\"UnAuth\", res.status))\r\n }\r\n\r\n useEffect(() => {\r\n document.title = \"Mind ON | История\";\r\n }, [])\r\n\r\n const [circleData, setCircleData] = useState([\r\n {...PERSONS[\"28\"], percentage: 30},\r\n {...PERSONS[\"29\"], percentage: 70},\r\n {...PERSONS[\"30\"], percentage: 82},\r\n {...PERSONS[\"31\"], percentage: 12},\r\n {...PERSONS[\"32\"], percentage: 36}\r\n ])\r\n\r\n useEffect(() => {\r\n let interval = setTimeout(() => {\r\n setCircleData(c => c.map((elem) =>\r\n ({...elem, percentage: Math.round(Math.random() * 100)})))\r\n }, 2500)\r\n return () => clearTimeout(interval)\r\n }, [circleData])\r\n\r\n\r\n const mainRadius = 150;\r\n\r\n const [radius, setRadius] = useState(mainRadius)\r\n const [x, setX] = useState(0)\r\n const [y, setY] = useState(0)\r\n const [yTotal, setYTotal] = useState(0)\r\n const [scroll, setScroll] = useState(0)\r\n\r\n const handleScroll = (e) => {\r\n // console.log(\"SCROLL\", e)\r\n setTimeout(() => {\r\n // setX(x => e.clientX)\r\n setScroll(window.scrollY)\r\n //setRadius(150)\r\n }, 50)\r\n }\r\n\r\n const handleMouseMove = (e) => {\r\n setTimeout(() => {\r\n setX(x => e.clientX)\r\n setY(e.clientY)\r\n //setRadius(150)\r\n }, 50)\r\n }\r\n\r\n const handleBigMouseMove = (e, rad = 250) => {\r\n setTimeout(() => {\r\n setX(x => e.clientX)\r\n setY(e.clientY)\r\n setRadius(rad)\r\n }, 50)\r\n }\r\n\r\n const handleBigMouseLeave = (e, rad = mainRadius) => {\r\n setTimeout(() => {\r\n setX(x => e.clientX)\r\n setY(e.clientY)\r\n setRadius(rad)\r\n }, 50)\r\n // setRadius(250)\r\n }\r\n\r\n useEffect(() => {\r\n setYTotal(y + scroll)\r\n }, [scroll, y])\r\n\r\n useEffect(() => {\r\n // const img = document.getElementById(\"image\");\r\n // const imgPos = img.getBoundingClientRect();\r\n // var imgX = imgPos.left;\r\n // var imgY = imgPos.top;\r\n // var rect = document.getElementsByTagName(\"rect\")[1];\r\n // var rectHalfWidth = rect.getAttribute(\"width\") / 2;\r\n // var rectHalfHeight = rect.getAttribute(\"height\") / 2;\r\n // img.addEventListener(\"mousemove\", function (e) {\r\n // rect.setAttribute(\"x\", e.clientX - imgX - rectHalfWidth);\r\n // rect.setAttribute(\"y\", e.clientY - imgY - rectHalfHeight);\r\n // }, false);\r\n\r\n const img = document.getElementById(\"circle\");\r\n const svg = document.getElementById(\"svg\");\r\n const title = document.getElementById(\"title\");\r\n const subtitle = document.getElementById(\"subtitle\")\r\n const secondCentral = document.getElementById(\"second_central\")\r\n // const imgPos = img.getBoundingClientRect();\r\n // var imgX = imgPos.left;\r\n // var imgY = imgPos.top;\r\n window.addEventListener(\"scroll\", handleScroll, false)\r\n window.addEventListener(\"mousemove\", handleMouseMove, false);\r\n title.addEventListener(\"mousemove\",\r\n (e) => handleBigMouseMove(e, 450), false)\r\n title.addEventListener(\"mouseleave\",\r\n (e) => handleBigMouseLeave(e, mainRadius), false)\r\n subtitle.addEventListener(\"mousemove\",\r\n (e) => handleBigMouseMove(e, 30), false)\r\n subtitle.addEventListener(\"mouseleave\",\r\n (e) => handleBigMouseLeave(e, mainRadius), false)\r\n secondCentral.addEventListener(\"mousemove\",\r\n (e) => handleBigMouseMove(e, 350), false)\r\n secondCentral.addEventListener(\"mouseleave\",\r\n (e) => handleBigMouseLeave(e, mainRadius), false)\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll);\r\n window.removeEventListener(\"mousemove\", handleMouseMove);\r\n }\r\n }, [])\r\n\r\n const h = window.innerHeight;\r\n\r\n return
\r\n \r\n \r\n \r\n {/**/}\r\n \r\n \r\n \r\n Mind ON\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 Mind ON\r\n \r\n \r\n \r\n \r\n Mind ON\r\n \r\n \r\n Mind ON\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 \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 разделам истории!\r\n \r\n\r\n \r\n \r\n \r\n \r\n
goToAnchor('form', false)}\r\n className={cn(styles.text_text, styles.title)}\r\n style={{zIndex: 1000}}\r\n >\r\n Присоединиться\r\n
\r\n
goToAnchor('form', false)}\r\n className={cn(styles.text_text, styles.subtitle)}\r\n style={{zIndex: 1000}}\r\n >\r\n У меня уже есть аккаунт\r\n
\r\n\r\n {/*

This is Mind ON!

*/}\r\n {/* {*/}\r\n {/* goToAnchor('form', false)*/}\r\n {/* //removeHash()*/}\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 {RequestWrapper((p) => EnterForm({onEnter: afterEnter, ...p}))}\r\n
\r\n \r\n }/>\r\n
\r\n
\r\n}\r\n\r\nexport default withRouter(LandingPage);\r\n","import React, {useState} from \"react\";\r\nimport styles from './styles.module.scss';\r\n\r\nimport cn from 'classnames';\r\nimport {AppWhiteBlock} from \"../AppWhiteBlock\";\r\n\r\nconst AppSelectedList = (\r\n {\r\n data,\r\n activeIndex,\r\n setActiveIndex,\r\n active=true,\r\n width=\"200px\",\r\n nameColumn = \"name\",\r\n onChoose = () => {},\r\n listStyle = {},\r\n elementStyle = {}\r\n }) => {\r\n\r\n const [showList, setShowList] = useState(false);\r\n\r\n const onClickElem = (id) => {\r\n setActiveIndex(id);\r\n setShowList(false);\r\n onChoose(id);\r\n }\r\n\r\n return
\r\n
{\r\n if (active) setShowList(s => !s)\r\n }}>\r\n
\r\n {data[activeIndex][nameColumn]}\r\n
\r\n {/**/}\r\n
\r\n
\r\n {data.map((elem, i) =>\r\n
onClickElem(i)}\r\n className={styles.list_element}\r\n key={elem.key} style={elementStyle}\r\n >\r\n {elem[nameColumn]}\r\n
\r\n )}\r\n
\r\n
;\r\n\r\n};\r\n\r\n\r\nexport default AppSelectedList;\r\n","import React, {useEffect, useMemo, useState} from \"react\";\r\nimport styles from './styles.module.scss';\r\nimport cn from 'classnames';\r\nimport { Chart } from 'react-charts'\r\nimport {AppActivityIndicator} from \"../AppActivityIndicator\";\r\n//\r\n\r\n// const options = {\r\n// elementType: [\"line\", \"area\", \"bar\", \"bubble\"],\r\n// primaryAxisType: [\"linear\", \"time\", \"log\", \"ordinal\"],\r\n// secondaryAxisType: [\"linear\", \"time\", \"log\", \"ordinal\"],\r\n// primaryAxisPosition: [\"top\", \"left\", \"right\", \"bottom\"],\r\n// secondaryAxisPosition: [\"top\", \"left\", \"right\", \"bottom\"],\r\n// secondaryAxisStack: [true, false],\r\n// primaryAxisShow: [true, false],\r\n// secondaryAxisShow: [true, false],\r\n// grouping: [\"single\", \"series\", \"primary\", \"secondary\"],\r\n// tooltipAnchor: [\r\n// \"closest\",\r\n// \"top\",\r\n// \"bottom\",\r\n// \"left\",\r\n// \"right\",\r\n// \"center\",\r\n// \"gridTop\",\r\n// \"gridBottom\",\r\n// \"gridLeft\",\r\n// \"gridRight\",\r\n// \"gridCenter\",\r\n// \"pointer\"\r\n// ],\r\n// tooltipAlign: [\r\n// \"auto\",\r\n// \"top\",\r\n// \"bottom\",\r\n// \"left\",\r\n// \"right\",\r\n// \"topLeft\",\r\n// \"topRight\",\r\n// \"bottomLeft\",\r\n// \"bottomRight\",\r\n// \"center\"\r\n// ],\r\n// snapCursor: [true, false]\r\n// };\r\n//\r\n// const optionKeys = Object.keys(options);\r\n//\r\n// export function useChartConfig({\r\n// series,\r\n// useR,\r\n// show = [],\r\n// count = 1,\r\n// resizable = true,\r\n// canRandomize = true,\r\n// dataType = \"time\",\r\n// elementType = \"line\",\r\n// primaryAxisType = \"time\",\r\n// secondaryAxisType = \"linear\",\r\n// primaryAxisPosition = \"bottom\",\r\n// secondaryAxisPosition = \"left\",\r\n// primaryAxisStack = false,\r\n// secondaryAxisStack = true,\r\n// primaryAxisShow = true,\r\n// secondaryAxisShow = true,\r\n// tooltipAnchor = \"closest\",\r\n// tooltipAlign = \"auto\",\r\n// grouping = \"primary\",\r\n// snapCursor = true,\r\n// datums = 10\r\n// }) {\r\n// const [state, setState] = React.useState({\r\n// count,\r\n// resizable,\r\n// canRandomize,\r\n// dataType,\r\n// elementType,\r\n// primaryAxisType,\r\n// secondaryAxisType,\r\n// primaryAxisPosition,\r\n// secondaryAxisPosition,\r\n// primaryAxisStack,\r\n// secondaryAxisStack,\r\n// primaryAxisShow,\r\n// secondaryAxisShow,\r\n// tooltipAnchor,\r\n// tooltipAlign,\r\n// grouping,\r\n// snapCursor,\r\n// datums,\r\n// data: makeDataFrom(dataType, series, useR, datums)\r\n// });\r\n//\r\n// React.useEffect(() => {\r\n// setState(old => ({\r\n// ...old,\r\n// data: makeDataFrom(dataType, series, useR, datums)\r\n// }));\r\n// }, [count, dataType, datums, series, useR]);\r\n//\r\n// const randomizeData = () =>\r\n// setState(old => ({\r\n// ...old,\r\n// data: makeDataFrom(dataType, series, useR, datums)\r\n// }));\r\n//\r\n// const Options = optionKeys\r\n// .filter(option => show.indexOf(option) > -1)\r\n// .map(option => (\r\n//
\r\n// {option}:  \r\n// \r\n// setState(old => ({\r\n// ...old,\r\n// [option]:\r\n// typeof options[option][0] === \"boolean\"\r\n// ? value === \"true\"\r\n// : value\r\n// }))\r\n// }\r\n// >\r\n// {options[option].map(d => (\r\n// \r\n// ))}\r\n// \r\n//
\r\n//
\r\n// ));\r\n//\r\n// return {\r\n// ...state,\r\n// randomizeData,\r\n// Options\r\n// };\r\n// }\r\n//\r\nfunction makeDataFrom(dataType='time', series=2, useR=true, datums=8) {\r\n return [\r\n ...new Array(series || Math.max(Math.round(Math.random() * 5), 1))\r\n ].map((d, i) => makeSeries(i, dataType, useR, datums));\r\n}\r\n//\r\nfunction makeSeries(i, dataType = 'linear', useR = false, datums = 10) {\r\n const start = 0;\r\n const startDate = new Date();\r\n startDate.setMinutes(0);\r\n startDate.setSeconds(0);\r\n startDate.setMilliseconds(0);\r\n // const length = 5 + Math.round(Math.random() * 15)\r\n const length = datums;\r\n const min = 0;\r\n const max = 100;\r\n const rMin = 2;\r\n const rMax = 20;\r\n const nullChance = 0;\r\n return {\r\n label: `Series ${i + 1}`,\r\n data: [...new Array(length)].map((_, j) => {\r\n let x = j * 10 + start;\r\n if (dataType === \"ordinal\") {\r\n x = `Ordinal Group ${x}`;\r\n }\r\n if (dataType === \"time\") {\r\n x = new Date(startDate.getTime() + 60 * 1000 * 30 * j);\r\n }\r\n if (dataType === \"linear\") {\r\n x = j * 10\r\n // Math.random() < nullChance\r\n // ? null\r\n // : min + Math.round(Math.random() * (max - min));\r\n }\r\n const distribution = 1.1;\r\n const y =\r\n Math.random() < nullChance\r\n ? null\r\n : min + Math.round(Math.random() * (max - min));\r\n const r = !useR\r\n ? undefined\r\n : rMax -\r\n Math.floor(\r\n Math.log(Math.random() * (distribution ** rMax - rMin) + rMin) /\r\n Math.log(distribution)\r\n );\r\n return {\r\n primary: x,\r\n secondary: y,\r\n radius: r\r\n };\r\n })\r\n };\r\n}\r\n\r\n\r\nexport function AppGraph(\r\n {\r\n data,\r\n datumFormat= x => x,\r\n name=\"Название графика\",\r\n primaryAxisType=\"linear\",\r\n width=\"70%\",\r\n height=\"300px\",\r\n }) {\r\n const [{ activeSeriesIndex, activeDatumIndex }, setState] = React.useState({\r\n activeSeriesIndex: -1,\r\n activeDatumIndex: -1\r\n });\r\n\r\n const [activePoint, setActivePoint] = useState(false);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst lineColors = [\r\n \"#2447FF\",\r\n \"#F32F85\",\r\n \"#60EA72\",\r\n \"#134848\",\r\n \"#8CF9FC\",\r\n \"#EA7060\",\r\n \"#EAD360\",\r\n \"#e70fc4\",\r\n \"#6eea60\",\r\n \"#ea9760\",\r\n \"#94a0a0\",\r\n]\r\n\r\nconst grayColors = [\r\n \"#0a0a0b\",\r\n \"#222225\",\r\n \"#3b3b40\",\r\n \"#53535a\",\r\n \"#6c6c75\",\r\n \"#85858e\",\r\n \"#a0a0a7\",\r\n \"#bababf\",\r\n \"#d5d5d8\",\r\n \"#efeff0\",\r\n]\r\n\r\nconst medianColor = \"#3354FF\";\r\n\r\nexport function MyChart(\r\n {\r\n data,\r\n datumFormat= x => x,\r\n primaryAxisType=\"linear\",\r\n showLabels=true,\r\n name=\"Название графика\",\r\n activePoint,\r\n width=\"70%\",\r\n height=\"300px\",\r\n setActivePoint,\r\n elementType=\"line\",\r\n loading=false,\r\n activeDatumIndex,\r\n activeSeriesIndex,\r\n setState\r\n }) {\r\n //useLagRadar();\r\n\r\n // const { data, grouping, randomizeData } = useChartConfig({\r\n // series: 4,\r\n // //useR: true,\r\n // height: 200,\r\n // grouping: \"primary\",\r\n // dataType: \"ordinal\",\r\n // show: [\"elementType\", \"grouping\"]\r\n // });\r\n\r\n // \"single\", \"series\", \"primary\", \"secondary\"\r\n const grouping = \"primary\";\r\n\r\n const series = React.useMemo(\r\n () => ({\r\n type: elementType,\r\n //showPoints: false\r\n }),\r\n [elementType]\r\n );\r\n\r\n const axes = React.useMemo(\r\n () => [\r\n {\r\n primary: true,\r\n type: primaryAxisType, // \"linear\", \"time\", \"log\", \"ordinal\"\r\n position: \"bottom\",\r\n show: true,\r\n },\r\n {\r\n type: \"linear\",\r\n id: 'first',\r\n format: datumFormat,\r\n position: \"left\",\r\n stacked: false\r\n }],\r\n []\r\n );\r\n\r\n const axes3 = React.useMemo(\r\n () => [\r\n {\r\n primary: true,\r\n type: primaryAxisType, // \"linear\", \"time\", \"log\", \"ordinal\"\r\n position: \"bottom\",\r\n show: true,\r\n },\r\n {\r\n type: \"linear\",\r\n id: 'first',\r\n format: datumFormat,\r\n position: \"left\",\r\n stacked: false\r\n },\r\n {\r\n type: \"linear\",\r\n id: 'second',\r\n position: \"right\",\r\n stacked: false,\r\n }],\r\n []\r\n );\r\n\r\n\r\n const Data = useMemo(() => data, [data]);\r\n\r\n const [loadingMode, setLoadingMode] = useState(true)\r\n\r\n useEffect(() => {\r\n setTimeout(() => setLoadingMode(!data || data.length === 0), 500);\r\n }, [data])\r\n\r\n const GetColor = (i) => {\r\n //console.log(\"CONF\", config)\r\n // return medianColor\r\n //console.log(\"index\", i, Data[i], Data)\r\n //return lineColors[i % lineColors.length]\r\n const config = Data[i] ? Data[i].config : undefined;\r\n if (config) {\r\n if (config.color) {\r\n return config.color\r\n } else if (config.type === \"median\") {\r\n //console.log(\"CONF MED\", config)\r\n return medianColor\r\n } else if (config.type === \"gray\") {\r\n //console.log(\"CONF GRAY\", config)\r\n return grayColors[i % grayColors.length]\r\n }\r\n //return config.color\r\n }\r\n return lineColors[i % lineColors.length]\r\n }\r\n\r\n const getSeriesStyle = React.useCallback(\r\n series => {\r\n let med = 0;\r\n if (data) {\r\n if (data[series.index].config.median) {\r\n med = 1;\r\n }\r\n }\r\n return {\r\n transition: 'all 0.2s ease',\r\n color: GetColor(series.index), // `url(#${series.index % 4})`,\r\n //height: \"20px\",\r\n opacity:\r\n activeSeriesIndex > -1\r\n ? series.index === activeSeriesIndex || med\r\n ? 1\r\n : 0.3\r\n : 0.8\r\n }},\r\n [activeSeriesIndex, Data]\r\n );\r\n\r\n const getDatumStyle = React.useCallback(\r\n datum => ({\r\n //color: medianColor,\r\n transition: 'all 0.2s ease',\r\n r:\r\n activeDatumIndex === datum.index &&\r\n activeSeriesIndex === datum.seriesIndex\r\n ? 5\r\n : activeDatumIndex === datum.index\r\n ? 2\r\n : datum.series.index === activeSeriesIndex\r\n ? 2\r\n : datum.otherHovered\r\n ? 1\r\n : 1\r\n }),\r\n [activeDatumIndex, activeSeriesIndex]\r\n );\r\n\r\n const onFocus = React.useCallback(\r\n focused => {\r\n if (!activePoint)\r\n setState({\r\n activeSeriesIndex: focused ? focused.series.id : -1,\r\n activeDatumIndex: focused ? focused.index : -1\r\n })},\r\n [setState, activePoint]\r\n );\r\n\r\n const onClick = React.useCallback(\r\n clicked => {\r\n if (activePoint) {\r\n setActivePoint(false)\r\n setState({\r\n activeSeriesIndex: -1,\r\n activeDatumIndex: -1\r\n })\r\n } else {\r\n setActivePoint(true);\r\n setState({\r\n activeSeriesIndex: clicked ? clicked.series.id : -1,\r\n activeDatumIndex: clicked ? clicked.index : -1\r\n })\r\n }\r\n },\r\n [setState, activePoint, setActivePoint]\r\n );\r\n\r\n // if (!Data.length) {\r\n // return
\r\n // \r\n //
\r\n // }\r\n\r\n const [LoadingData, setLoadingData] = useState(makeDataFrom());\r\n\r\n useEffect(() => {\r\n if (loadingMode) {\r\n setTimeout(() => setLoadingData(makeDataFrom()), 1000)\r\n }\r\n }, [loadingMode, LoadingData])\r\n\r\n const loadingSeries = React.useMemo(\r\n () => ({\r\n type: \"bar\",\r\n showPoints: false\r\n }),\r\n []\r\n );\r\n\r\n const getSeriesLoadingStyle = React.useCallback(\r\n () => ({\r\n transition: 'all 1.0s ease'\r\n }),\r\n []\r\n )\r\n const getDatumLoadingStyle = React.useCallback(\r\n () => ({\r\n transition: 'all 1.0s ease'\r\n }),\r\n []\r\n )\r\n\r\n const loadingAxes = React.useMemo(\r\n () => [\r\n {\r\n primary: true,\r\n type: \"linear\", // \"linear\", \"time\", \"log\", \"ordinal\"\r\n position: \"bottom\",\r\n show: false,\r\n },\r\n {\r\n type: \"linear\",\r\n position: \"left\",\r\n stacked: true,\r\n show: false,\r\n }\r\n ],\r\n []\r\n );\r\n\r\n const GetWaiting = () => {\r\n\r\n // return \r\n\r\n return
\r\n \r\n
\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {name}\r\n
\r\n
\r\n { loadingMode || loading ? GetWaiting() :\r\n el.secondaryAxisID === 'second') >= 0 ? axes3 : axes}\r\n getSeriesStyle={getSeriesStyle}\r\n getDatumStyle={getDatumStyle}\r\n onFocus={onFocus}\r\n onClick={onClick}\r\n //primaryCursor\r\n secondaryCursor\r\n tooltip={{anchor: \"gridRight\", color: \"white\"}}\r\n // renderSVG={() => (\r\n // \r\n // {data.map((elem, i) =>\r\n // \r\n // \r\n // \r\n // \r\n // )}\r\n // \r\n // )}\r\n />}\r\n
\r\n {showLabels && data ?\r\n
\r\n {data.map((elem, i) =>\r\n
\r\n
\r\n
{elem.bigLabel}
\r\n
\r\n )}\r\n
\r\n :
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default AppGraph;\r\n","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./../styles.module.scss\";\r\nimport AdminStatisticsPage, {GetTime, METRICS_NAMES, SimpleGraphDataRequest} from \"../index\";\r\nimport AppGraph, {MyChart} from \"../../../components/AppGraph\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {useSelector} from \"react-redux\";\r\nimport AppSelectedList from \"../../../components/AppSelectedList\";\r\nimport AppButton from \"../../../components/AppButton\";\r\nimport {DB_PATH} from \"../../../constants\";\r\n\r\nconst TimeData = [\r\n {id: 0, key: \"0\", name: \"За 3 дня\", value: 3},\r\n {id: 1, key: \"1\", name: \"За 5 дней\", value: 5},\r\n {id: 2, key: \"2\", name: \"За 7 дней\", value: 7},\r\n]\r\n\r\nconst EntersTypeData = [\r\n {id: 0, key: \"0\", name: \"Уникальные пользователи\", value: \"unique_users\"},\r\n {id: 1, key: \"1\", name: \"Всего заходов\", value: \"entered_users\"},\r\n]\r\n\r\nconst ENTERS_METRICS = [\r\n {\r\n name: \"unique_users_times\",\r\n key: \"0\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Входы уникальных пользователей каждые 30 минут\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"users_times\",\r\n key: \"1\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Все входы пользователей каждые 30 минут\",\r\n short_label: \"\",\r\n },\r\n]\r\n\r\nconst GetEntersData = (REQUEST, metric, setD, time) => {\r\n REQUEST.GET({request: DB_PATH.STATISTICS.METRIC.N + `?metric=${metric.name}&time=${time}`,\r\n meta: {ms: 300000}}).then(res => {\r\n try {\r\n //console.log(res.json);\r\n // return;\r\n // const xAxes = res.json.dates\r\n setD([...res.json.dates.map((date, i) => ({\r\n label: date.substr(5),\r\n bigLabel: metric.bigLabel + ` (${date.substr(5)})`,\r\n config: {type: \"gray\"},\r\n data: res.json.data.map((el, j) => ({\r\n x: GetTime({seconds: el.t}),\r\n y: el.enters[i]\r\n }))\r\n })), {\r\n label: \"Среднее\",\r\n bigLabel: metric.bigLabel + \" (среднее)\",\r\n config: {type: \"median\", color: \"#3354FF\", median: true},\r\n data: res.json.data.map((el, j) => ({\r\n x: GetTime({seconds: el.t}),\r\n y: el.enters.reduce((sum, current) => sum + current, 0) / el.enters.length,\r\n }))\r\n }])\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n })\r\n}\r\n\r\nconst labelUsers = \"Юзеры\";\r\nconst labelProducts = \"Продукты\";\r\n\r\nconst StatisticUsersPage = ({history}) => {\r\n\r\n const [data1, setData1] = useState([])\r\n const [data2, setData2] = useState([])\r\n const [data3, setData3] = useState([])\r\n const [data4, setData4] = useState([])\r\n\r\n const [data5, setData5] = useState([])\r\n const [data6, setData6] = useState([])\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n if (data1.length && data2.length && data3.length && data4.length) {\r\n setLoading(false)\r\n } else {\r\n setLoading(true)\r\n }\r\n }, [data1, data2, data3, data4])\r\n\r\n const [{ activeSeriesIndex, activeDatumIndex }, setState] = React.useState({\r\n activeSeriesIndex: -1,\r\n activeDatumIndex: -1\r\n });\r\n\r\n const [activePoint, setActivePoint] = useState(false);\r\n\r\n const {REQUEST} = RequestWrapper();\r\n\r\n const clearData = () => {\r\n const clearAll = () => {\r\n setData1([]);\r\n setData2([]);\r\n setData3([]);\r\n setData4([]);\r\n }\r\n return Promise.resolve(clearAll())\r\n }\r\n const time = useSelector(state => state.statistics.time);\r\n const [innerTime, setInnerTime] = useState(0)\r\n const [entersType, setEntersType] = useState(0)\r\n\r\n useEffect(() => {\r\n clearData().then(res => {\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[0], setData1, labelUsers, time);\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[1], setData2, labelUsers, time);\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[2], setData3, labelProducts, time);\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[3], setData4, labelProducts, time);\r\n });\r\n }, [time])\r\n\r\n const GetEntersGraph = () => {\r\n Promise.resolve(setData5([])).then(res => {\r\n GetEntersData(REQUEST, ENTERS_METRICS[entersType], setData5, TimeData[innerTime].value)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n // console.log(\"D5\", data5)\r\n setData6(data5.map(elem => {\r\n let sum = 0;\r\n return {\r\n ...elem, data: elem.data.map(item => {\r\n sum += item.y;\r\n return {...item, y: sum}\r\n })\r\n }}))\r\n }, [data5])\r\n\r\n useEffect(() => {\r\n GetEntersGraph()\r\n }, [])\r\n\r\n return \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 \r\n
\r\n
\r\n GetEntersGraph()}>\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\nexport default StatisticUsersPage;","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./../styles.module.scss\";\r\nimport AdminStatisticsPage, {METRICS_NAMES, SimpleGraphDataRequest} from \"../index\";\r\nimport AppGraph from \"../../../components/AppGraph\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {useSelector} from \"react-redux\";\r\n\r\nconst StatisticProductsPage = ({history}) => {\r\n\r\n const [data3, setData3] = useState([])\r\n const [data4, setData4] = useState([])\r\n\r\n const {REQUEST} = RequestWrapper();\r\n\r\n const label = \"Продукты\";\r\n\r\n // const [time, setTime] = useState(7);\r\n // const SetTime = (t) => {\r\n // let storeTime = useSelector(state => state.statistics.time);\r\n //\r\n // }\r\n const time = useSelector(state => state.statistics.time);\r\n\r\n const clearData = () => {\r\n const clearAll = () => {\r\n setData3([]);\r\n setData4([]);\r\n }\r\n return Promise.resolve(clearAll())\r\n }\r\n\r\n useEffect(() => {\r\n clearData().then(res => {\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[2], setData3, label, time);\r\n SimpleGraphDataRequest(REQUEST, METRICS_NAMES[3], setData4, label, time);\r\n });\r\n }, [time])\r\n\r\n return \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\nexport default StatisticProductsPage;","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./../styles.module.scss\";\r\nimport AdminStatisticsPage, {\r\n GetTime,\r\n METRICS_NAMES,\r\n SimpleGraphDataRequest,\r\n statMeanBigLabel,\r\n statMeanLabel\r\n} from \"../index\";\r\nimport AppGraph from \"../../../components/AppGraph\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {DB_PATH, METRICS} from \"../../../constants\";\r\nimport AppSelectedList from \"../../../components/AppSelectedList\";\r\nimport AppButton from \"../../../components/AppButton\";\r\n\r\n\r\nexport const ConversionDataRequest = (R, first, second, setD, label, time) => {\r\n R.GET({request: DB_PATH.STATISTICS.METRIC.N +\r\n `?metric=conversion&first=${first.name}&second=${second.name}&time=${time}`,\r\n meta: {ms: 300000}}).then(res => {\r\n try {\r\n const xAxes = res.json.data.map(elem => GetTime({userDate: elem.d}))\r\n setD([\r\n {\r\n label: \"Доля\",\r\n secondaryAxisID: 'first',\r\n bigLabel: `Доля из \"${first.bigLabel}\" в \"${second.bigLabel}\"`,\r\n config: {type: \"gray\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.v}))\r\n },\r\n {\r\n label: first.label,\r\n secondaryAxisID: 'second',\r\n bigLabel: first.bigLabel,\r\n config: {color: \"#FA0000\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.c}))\r\n },\r\n {\r\n label: statMeanLabel,\r\n bigLabel: statMeanBigLabel,\r\n config: {type: \"median\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.m}))\r\n }\r\n ])\r\n } catch (e) {\r\n console.log(e)\r\n // setError(\"Error: \" + e)\r\n }\r\n })\r\n}\r\n\r\nconst SelectedFirstMetrics = [\r\n {id: 0, key: \"0\", name: METRICS.UNIQUE_USERS,\r\n name1: \"уникальных пользователей\", name2: \"уникальным пользователям\"},\r\n {id: 1, key: \"1\", name: METRICS.ENTERED_USERS,\r\n name1: \"зашедших пользователей\", name2: \"зашедшим пользователям\"},\r\n {id: 2, key: \"2\", name: METRICS.COMPLETED_PRODUCTS,\r\n name1: \"пройденных продуктов\", name2: \"пройденным продуктам\"},\r\n {id: 3, key: \"3\", name: METRICS.USER_COMPLETED,\r\n name1: \"прошедших пользователей\", name2: \"прошедшим пользователям\"},\r\n]\r\n\r\n\r\n\r\n\r\nconst StatisticConversionsPage = ({history}) => {\r\n\r\n const [data, setData] = useState([])\r\n\r\n const {REQUEST} = RequestWrapper();\r\n\r\n const label = \"Доля\";\r\n\r\n const time = useSelector(state => state.statistics.time);\r\n\r\n const clearData = () => {\r\n const clearAll = () => {\r\n setData([]);\r\n }\r\n return Promise.resolve(clearAll())\r\n }\r\n const [first, setFirst] = useState(0)\r\n const [second, setSecond] = useState(0)\r\n const [secondId, setSecondId] = useState(1)\r\n\r\n const CalculateMetric = () => {\r\n clearData().then(res => {\r\n ConversionDataRequest(REQUEST, METRICS_NAMES[first],\r\n METRICS_NAMES[SelectedFirstMetrics.filter((e, i) => i !== first)[second].id], setData, label, time);\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n CalculateMetric()\r\n }, [time])\r\n\r\n useEffect(() => {\r\n if (SelectedFirstMetrics[first].id ===\r\n SelectedFirstMetrics.filter((e, i) => i !== first)[second].id) {\r\n // console.log(\"FS\", first, second)\r\n if (first === 0) {\r\n setSecond(1)\r\n } else {\r\n setSecond(0)\r\n }\r\n }\r\n }, [first, second])\r\n\r\n return \r\n
\r\n
\r\n
\r\n
Отношение
\r\n \r\n
к
\r\n i !== first)}/>\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\nexport default StatisticConversionsPage;","import React, {useEffect, useRef, useState} from 'react';\r\nimport styles from \"./../styles.module.scss\";\r\nimport AdminStatisticsPage, {\r\n GetTime,\r\n METRICS_NAMES,\r\n SimpleGraphDataRequest,\r\n statMeanBigLabel,\r\n statMeanLabel\r\n} from \"../index\";\r\nimport AppGraph from \"../../../components/AppGraph\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {DB_PATH, METRICS} from \"../../../constants\";\r\nimport AppSelectedList from \"../../../components/AppSelectedList\";\r\nimport AppButton from \"../../../components/AppButton\";\r\nimport cn from 'classnames';\r\n\r\n\r\nexport const ActivityDataRequest =\r\n ({R, object, category, value, border, setD, label, time, withUsers=false}) => {\r\n const withUsersStr = withUsers ? `&with_users=${withUsers}` : \"\";\r\n R.GET({request: DB_PATH.STATISTICS.METRIC.N +\r\n `?metric=activity&object=${object}&category=${category}&value=${value}&border=${border}&time=${time}${withUsersStr}`,\r\n meta: {ms: 300000}}).then(res => {\r\n try {\r\n const xAxes = res.json.data.map(elem => GetTime({userDate: elem.d}))\r\n withUsers ?\r\n setD([\r\n {\r\n label: value,\r\n secondaryAxisID: 'first',\r\n bigLabel: `${object} & ${category}`,\r\n config: {type: \"gray\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.v}))\r\n },\r\n {\r\n label: withUsers,\r\n secondaryAxisID: 'second',\r\n bigLabel: withUsers,\r\n config: {color: \"#FA0000\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.u}))\r\n },\r\n {\r\n label: statMeanLabel,\r\n bigLabel: statMeanBigLabel,\r\n config: {type: \"median\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.m}))\r\n }\r\n ]) :\r\n setD([\r\n {\r\n label: value,\r\n secondaryAxisID: 'first',\r\n bigLabel: `${object} & ${category}`,\r\n config: {type: \"gray\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.v}))\r\n },\r\n {\r\n label: statMeanLabel,\r\n bigLabel: statMeanBigLabel,\r\n config: {type: \"median\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.m}))\r\n }\r\n ])\r\n } catch (e) {\r\n console.log(e)\r\n // setError(\"Error: \" + e)\r\n }\r\n })\r\n}\r\n\r\nconst Objects = [\r\n {id: 0, key: \"0\", name: \"Карточки\", value: 'cards'},\r\n {id: 1, key: \"1\", name: \"Списки\", value: 'list'}\r\n]\r\n\r\nconst Categories = [\r\n {id: 0, key: \"0\", name: \"Даты истории России\", value: 'rus'},\r\n {id: 1, key: \"1\", name: \"Даты истории мира\", value: 'world'},\r\n {id: 2, key: \"2\", name: \"Термины\", value: 'terms'},\r\n]\r\n\r\nconst Values = [\r\n {id: 0, key: \"0\", name: \"Уникальные пользователи\", value: 'unique_users'},\r\n {id: 1, key: \"1\", name: \"Количество использований\", value: 'total_usages'},\r\n {id: 2, key: \"2\", name: \"Время сессии\", value: 'time'},\r\n {id: 3, key: \"3\", name: \"Количество карточек\", value: 'cards_amount', onlyCards: true},\r\n]\r\n\r\nconst BordersTime = [\r\n {id: 0, key: \"0\", name: \"0 секунд\", value: 0},\r\n {id: 1, key: \"1\", name: \"5 секунд\", value: 7},\r\n {id: 2, key: \"2\", name: \"10 секунд\", value: 10},\r\n {id: 3, key: \"3\", name: \"30 секунд\", value: 30},\r\n]\r\n\r\nconst BordersCards = [\r\n {id: 0, key: \"0\", name: \"0 карточек\", value: 0},\r\n {id: 1, key: \"1\", name: \"1 карточка\", value: 1},\r\n {id: 2, key: \"2\", name: \"3 карточки\", value: 3},\r\n {id: 3, key: \"3\", name: \"10 карточек\", value: 10},\r\n]\r\n\r\nconst WithUsers = [\r\n {id: 0, key: \"0\", name: \"Без сравнения\", value: ''},\r\n {id: 1, key: \"1\", name: \"Уникальные пользователи\", value: 'unique_users'},\r\n {id: 2, key: \"2\", name: \"Количество использований\", value: 'total_usages'},\r\n]\r\n\r\nexport const ChooseDiv = ({list, active, setActive, name, working=true}) => {\r\n return
\r\n
{name}
\r\n
\r\n {list.map((elem, i) => working ?
setActive(i)} key={elem.key}>\r\n {elem.name}\r\n
:\r\n
\r\n {elem.name}\r\n
\r\n )}\r\n
\r\n
\r\n}\r\n\r\nconst StatisticActivityPage = ({history}) => {\r\n\r\n const [data, setData] = useState([])\r\n const {REQUEST} = RequestWrapper();\r\n\r\n const label = \"Доля\";\r\n\r\n const time = useSelector(state => state.statistics.time);\r\n\r\n const clearData = () => {\r\n const clearAll = () => {\r\n setData([]);\r\n }\r\n return Promise.resolve(clearAll())\r\n }\r\n\r\n const [object, setObject] = useState(0) // ['list', 'cards']\r\n const [category, setCategory] = useState(0) // ['rus', 'world', 'terms']\r\n const [value, setValue] = useState(0) // ['time', 'unique_users', 'total_usages', 'cards_amount']\r\n const [border, setBorder] = useState(0) // unsigned int\r\n const [withUsers, setWithUsers] = useState(0) // ['', 'unique_users', 'total_usages']\r\n\r\n const CalculateMetric = () => {\r\n clearData().then(res => {\r\n const borderAmount = Values[value].value === 'time' ? BordersTime[border].value :\r\n (Values[value].value === 'cards_amount' ? BordersCards[border].value : 0);\r\n ActivityDataRequest({\r\n R: REQUEST, setD: setData, time,\r\n object: Objects[object].value,\r\n category: Categories[category].value,\r\n value: Values[value].value,\r\n border: borderAmount,\r\n withUsers: WithUsers[withUsers].value,\r\n label: \"smth\"\r\n });\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n CalculateMetric()\r\n }, [time])\r\n\r\n useEffect(() => {\r\n\r\n }, [])\r\n\r\n const messagesEndRef = useRef(null)\r\n\r\n const scrollToBottom = () => {\r\n messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" })\r\n }\r\n\r\n const [datumFormat, setDatumFormat] = useState((x) => x)\r\n const datumFormatRef = useRef(datumFormat);\r\n\r\n useEffect(() => {\r\n setDatumFormat(Values[value].value === 'time' ?\r\n (x) => `${Math.floor(x / 60)}m ${x % 60}s` : x => x)\r\n }, [value])\r\n\r\n const GetDatumFormat = () => {\r\n if (Values[value].value === 'time') {\r\n return (x) => `${Math.floor(x / 60)}m ${x % 60}s`\r\n }\r\n return x => x\r\n }\r\n\r\n return \r\n
\r\n
\r\n {ChooseDiv({list: Objects, active: object, setActive: setObject,\r\n name: \"Данные для анализа\"})}\r\n {ChooseDiv({list: Categories, active: category, setActive: setCategory,\r\n name: \"Категория данных\"})}\r\n {ChooseDiv({list: Objects[object].value === 'cards' ? Values :\r\n Values.filter(elem => !elem.onlyCards)\r\n , active: value, setActive: setValue,\r\n name: \"Параметр отображения\"})}\r\n {ChooseDiv({list:\r\n Values[value].value === 'cards_amount' ? BordersCards : BordersTime,\r\n active: border, setActive: setBorder,\r\n name: \"Граница рассмотрения\",\r\n working: Values[value].value === 'time' || Values[value].value === 'cards_amount'})}\r\n {ChooseDiv({list: WithUsers, active: withUsers, setActive: setWithUsers,\r\n name: \"Добавление данных о пользователях для сравнения\",\r\n working: Values[value].value === 'time' || Values[value].value === 'cards_amount'\r\n })}\r\n\r\n
\r\n {\r\n CalculateMetric();\r\n scrollToBottom();\r\n }}>Посчитать метрику\r\n
\r\n
\r\n\r\n
\r\n {Values[value].value === 'time' ? `${Math.floor(x / 60)}m ${x % 60}s`}\r\n primaryAxisType=\"time\"\r\n /> : `${Math.floor(x / 60)}m ${x % 60}s` : x => x}\r\n primaryAxisType=\"time\"\r\n />\r\n }\r\n
\r\n
\r\n
\r\n}\r\n\r\nexport default StatisticActivityPage;","import React, {useEffect, useRef, useState} from 'react';\r\nimport styles from \"./../styles.module.scss\";\r\nimport AdminStatisticsPage, {\r\n GetTime,\r\n METRICS_NAMES,\r\n SimpleGraphDataRequest,\r\n statMeanBigLabel,\r\n statMeanLabel\r\n} from \"../index\";\r\nimport AppGraph from \"../../../components/AppGraph\";\r\nimport RequestWrapper from \"../../../helpers/RequestWrapper\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {DB_PATH, METRICS} from \"../../../constants\";\r\nimport AppSelectedList from \"../../../components/AppSelectedList\";\r\nimport AppButton from \"../../../components/AppButton\";\r\nimport cn from 'classnames';\r\nimport {ChooseDiv} from \"./activity\";\r\nimport {AppActivityIndicator} from \"../../../components/AppActivityIndicator\";\r\n\r\n\r\nexport const ProductRatingDataRequest = ({R, object, category, value, bestAmount, listSide, setD, time, setLoading}) => {\r\n const topStr = `&top=${bestAmount}`;\r\n setLoading(true)\r\n R.GET({request: DB_PATH.STATISTICS.METRIC.N +\r\n `?metric=product_rating&object=${object}&category=${category}&value=${value}&best=${listSide}&time=${time}${topStr}`,\r\n meta: {ms: 300000}}).then(res => {\r\n try {\r\n setD(res.json.data)\r\n setLoading(false)\r\n } catch (e) {\r\n console.log(e)\r\n // setError(\"Error: \" + e)\r\n }\r\n })\r\n}\r\n\r\nconst Objects = [\r\n {id: 0, key: \"0\", name: \"Теория\", value: 'theory'},\r\n {id: 1, key: \"1\", name: \"Тесты\", value: 'tests'}\r\n]\r\n\r\nconst Categories = [\r\n {id: 0, key: \"0\", name: \"Все категории\", value: 'all'},\r\n {id: 1, key: \"1\", name: \"Древность\", value: 'anc'},\r\n {id: 2, key: \"2\", name: \"Новое время\", value: 'ren'},\r\n {id: 3, key: \"3\", name: \"Новейшее время\", value: 'mod'},\r\n]\r\n\r\nconst Values = [\r\n {id: 0, key: \"0\", name: \"Количество использований\", value: 'total_usages'},\r\n {id: 1, key: \"1\", name: \"Среднее время прохождения\", value: 'average_time', isTime: true},\r\n {id: 2, key: \"2\", name: \"Суммарное время прохождения\", value: 'total_time', isTime: true},\r\n {id: 3, key: \"3\", name: \"Среднее по блокам\", value: 'average_completed_blocks'},\r\n {id: 4, key: \"4\", name: \"Суммарное по блокам\", value: 'completed_blocks'},\r\n {id: 5, key: \"5\", name: \"Средний прогресс, %\", value: 'average_progress'},\r\n]\r\n\r\nconst BestAmount = [\r\n {id: 0, key: \"0\", name: \"ТОП-3\", value: 3},\r\n {id: 1, key: \"1\", name: \"ТОП-5\", value: 5},\r\n {id: 2, key: \"2\", name: \"ТОП-10\", value: 10},\r\n {id: 3, key: \"3\", name: \"ТОП-20\", value: 20},\r\n]\r\n\r\nconst ListSide = [ // Формировать топ по показателям\r\n {id: 0, key: \"0\", name: \"Лучших продуктов\", value: \"True\"},\r\n {id: 1, key: \"1\", name: \"Худших продуктов\", value: \"False\"},\r\n]\r\n\r\n// const WithUsers = [\r\n// {id: 0, key: \"0\", name: \"Без сравнения\", value: ''},\r\n// {id: 1, key: \"1\", name: \"Уникальные пользователи\", value: 'unique_users'},\r\n// {id: 2, key: \"2\", name: \"Количество использований\", value: 'total_usages'},\r\n// ]\r\n\r\n// export const ChooseDiv = ({list, active, setActive, name, working=true}) => {\r\n// return
\r\n//
{name}
\r\n//
\r\n// {list.map((elem, i) => working ?
setActive(i)} key={elem.key}>\r\n// {elem.name}\r\n//
:\r\n//
\r\n// {elem.name}\r\n//
\r\n// )}\r\n//
\r\n//
\r\n// }\r\n\r\n\r\nconst GetCompletedTime = (time) => {\r\n const s = Math.floor(time % 60).toString()\r\n const sec = s.length === 1 ? \"0\" + s : s\r\n const m = Math.floor((time % 3600) / 60).toString()\r\n const min = m.length === 1 ? \"0\" + m : m;\r\n if (Math.floor(time / 3600) > 0) {\r\n return `${Math.floor(time / 3600)}:${min}:${sec}`\r\n }\r\n return `${min}:${sec}`\r\n}\r\n\r\nconst StatisticProductsRatingPage = ({history}) => {\r\n\r\n const [data, setData] = useState([])\r\n const {REQUEST} = RequestWrapper();\r\n\r\n const label = \"Доля\";\r\n\r\n const time = useSelector(state => state.statistics.time);\r\n\r\n const clearData = () => {\r\n const clearAll = () => {\r\n setData([]);\r\n }\r\n return Promise.resolve(clearAll())\r\n }\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const [object, setObject] = useState(1) // ['theory', 'tests']\r\n const [category, setCategory] = useState(0) // ['rus', 'world', 'terms']\r\n const [value, setValue] = useState(0) // ['time', 'unique_users', 'total_usages', 'cards_amount']\r\n const [bestAmount, setBestAmount] = useState(2) // unsigned int\r\n const [listSide, setListSide] = useState(0) // ['True', 'False']\r\n\r\n const CalculateMetric = () => {\r\n setValueColumn(value)\r\n clearData().then(res => {\r\n ProductRatingDataRequest({\r\n R: REQUEST, setD: setData, time,\r\n setLoading,\r\n object: Objects[object].value,\r\n category: Categories[category].value,\r\n value: Values[value].value,\r\n bestAmount: BestAmount[bestAmount].value,\r\n listSide: ListSide[listSide].value\r\n });\r\n });\r\n }\r\n\r\n const [valueColumn, setValueColumn] = useState(value)\r\n\r\n useEffect(() => {\r\n CalculateMetric()\r\n }, [time])\r\n\r\n useEffect(() => {\r\n\r\n }, [])\r\n\r\n const messagesEndRef = useRef(null)\r\n\r\n const scrollToBottom = () => {\r\n messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" })\r\n }\r\n\r\n\r\n return \r\n
\r\n
\r\n {ChooseDiv({list: Objects, active: object, setActive: setObject,\r\n name: \"Данные для анализа\"})}\r\n {ChooseDiv({list: Categories, active: category, setActive: setCategory,\r\n name: \"Категория данных\"})}\r\n {ChooseDiv({list: Values, active: value, setActive: setValue,\r\n name: \"Параметр отображения\"})}\r\n {ChooseDiv({list: BestAmount, active: bestAmount, setActive: setBestAmount,\r\n name: \"Количество продуктов в списке\",})}\r\n {ChooseDiv({list: ListSide, active: listSide, setActive: setListSide,\r\n name: \"Использовать вывод со стороны\"})}\r\n\r\n
\r\n {\r\n CalculateMetric();\r\n scrollToBottom();\r\n }}>Посчитать метрику\r\n
\r\n
\r\n\r\n
\r\n {/*{JSON.stringify(data)}*/}\r\n {\r\n loading ?
\r\n \r\n
:
\r\n
\r\n
\r\n Номер\r\n
\r\n
\r\n {`Название продукта из категории \"${Categories[category].name}\"`}\r\n
\r\n
\r\n {Values[valueColumn].name}\r\n
\r\n
\r\n {data.map((elem, i) =>
\r\n
\r\n {i + 1}\r\n
\r\n
\r\n {elem.name}\r\n
\r\n
\r\n {Values[valueColumn].isTime ?\r\n GetCompletedTime(elem.value)\r\n : elem.value}\r\n
\r\n
)}\r\n
\r\n }\r\n\r\n
\r\n
\r\n
\r\n}\r\n\r\nexport default StatisticProductsRatingPage;","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport cn from 'classnames';\r\nimport {ADMIN_STATISTICS_URL, DB_PATH, MAIN_URL} from \"../../constants\";\r\nimport AppSelectedList from \"../../components/AppSelectedList\";\r\nimport StatisticUsersPage from \"./InnerPages/users\";\r\nimport StatisticProductsPage from \"./InnerPages/products\";\r\nimport {useDispatch} from \"react-redux\";\r\nimport {setTime} from \"../../store/actions/statistics\";\r\nimport StatisticConversionsPage from \"./InnerPages/conversions\";\r\nimport StatisticActivityPage from \"./InnerPages/activity\";\r\nimport StatisticProductsRatingPage from \"./InnerPages/productsRating\";\r\n\r\n\r\nexport const GetTime = ({seconds, userDate = \"\"}) => {\r\n if (userDate) {\r\n return new Date(userDate);\r\n }\r\n const startDate = new Date();\r\n startDate.setHours(0)\r\n startDate.setMinutes(0);\r\n startDate.setSeconds(0);\r\n startDate.setMilliseconds(0);\r\n return new Date(startDate.getTime() + seconds * 1000);\r\n let hours = Math.floor(seconds / 3600);\r\n let minutes = Math.floor((seconds - (hours * 3600)) / 60);\r\n\r\n if (hours < 10) {hours = \"0\"+hours;}\r\n if (minutes < 10) {minutes = \"0\"+minutes;}\r\n return hours+':'+minutes;\r\n}\r\n\r\n\r\nconst STAT_TYPES = {\r\n STAT_SIMPLE: 'stat_simple',\r\n USERS: 'users',\r\n PRODUCTS: 'products',\r\n CONVERSIONS: \"conversions\",\r\n ACTIVITY: \"activity\",\r\n PRODUCTS_RATING: \"products_rating\",\r\n}\r\n\r\nconst dataLeft = [\r\n {\r\n key: \"0\",\r\n name: 'Сводная статистика',\r\n value: STAT_TYPES.USERS\r\n },\r\n // {\r\n // key: \"1\",\r\n // name: \"Продукты (сводная)\",\r\n // value: STAT_TYPES.PRODUCTS\r\n // },\r\n {\r\n key: \"2\",\r\n name: \"Конверсии\",\r\n value: STAT_TYPES.CONVERSIONS\r\n },\r\n {\r\n key: \"3\",\r\n name: \"Активности\",\r\n value: STAT_TYPES.ACTIVITY\r\n },\r\n {\r\n key: \"4\",\r\n name: \"Анализ популярных продуктов\",\r\n value: STAT_TYPES.PRODUCTS_RATING,\r\n }\r\n];\r\n\r\nconst StatisticVariant = (elem, onClick) => {\r\n return
\r\n {elem.name}\r\n
\r\n}\r\n\r\n// const data_ = [[\r\n// {\r\n// label: \"A\",\r\n// data: [{x:\"3 feb\", y:1}, {x:2, y:2}, {x: \"5 mar\", y: 5}, {x: \"5 marf\", y: 5}]\r\n// },\r\n// {\r\n// label: \"BBB\",\r\n// data: [{x:\"3 feb\", y:3}, {x:2, y:1.5}, {x: \"5 mar\", y: 3}, {x: \"5 marf\", y: 5.6}]\r\n// }\r\n// ]]\r\n\r\nexport const METRICS_NAMES = [\r\n {\r\n name: \"unique_users\",\r\n key: \"0\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Уникальные пользователи\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"entered_users\",\r\n key: \"1\",\r\n label: \"Заходы\",\r\n bigLabel: \"Заходы в приложение\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"completed_products\",\r\n key: \"2\",\r\n label: \"Продукты\",\r\n bigLabel: \"Пройденные продукты\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"user_completed\",\r\n key: \"3\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Количество пользователей, которые использовали продукты в этот день\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"unique_users_times\",\r\n key: \"4\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Входы уникальных пользователей каждые 30 минут\",\r\n short_label: \"\",\r\n },\r\n {\r\n name: \"users_times\",\r\n key: \"5\",\r\n label: \"Пользователи\",\r\n bigLabel: \"Все входы пользователей каждые 30 минут\",\r\n short_label: \"\",\r\n },\r\n]\r\n\r\nexport const SimpleGraphDataRequest = (R, metric, setD, label, time) => {\r\n R.GET({request: DB_PATH.STATISTICS.METRIC.N + `?metric=${metric.name}&time=${time}`,\r\n meta: {ms: 300000}}).then(res => {\r\n try {\r\n const xAxes = res.json.data.map(elem => GetTime({userDate: elem.d}))\r\n setD([\r\n {\r\n label: metric.label,\r\n bigLabel: metric.bigLabel,\r\n config: {type: \"gray\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.v}))\r\n },\r\n {\r\n label: statMeanLabel,\r\n bigLabel: metric.bigLabel + statMeanBigLabel,\r\n config: {type: \"median\"},\r\n data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.m}))\r\n }\r\n ])\r\n } catch (e) {\r\n console.log(e)\r\n // setError(\"Error: \" + e)\r\n }\r\n })\r\n}\r\n\r\nexport const SelectedTimeData = [\r\n {id: 0, key: \"0\", name: \"За 3 дня\", value: 3},\r\n {id: 1, key: \"1\", name: \"За 7 дней\", value: 7},\r\n {id: 2, key: \"2\", name: \"За 14 дней\", value: 14},\r\n {id: 3, key: \"3\", name: \"За 30 дней\", value: 30},\r\n // {id: 4, key: \"4\", name: \"За 30 дней\", value: 30},\r\n // {id: 5, key: \"5\", name: \"За 30 дней\", value: 30},\r\n]\r\n\r\n// const labels = [\"Юзеры\", \"Продукты\"];\r\nexport const statMeanLabel = \"Среднее\";//\"Скользящее среднее за 30 дней\";\r\nexport const statMeanBigLabel = \" (скользящее среднее за 30 дней)\"\r\n\r\n\r\nconst InnerScreensList = [\r\n {id: 0, key: \"0\", path: ADMIN_STATISTICS_URL.USERS, screen: StatisticUsersPage},\r\n // {id: 1, key: \"1\", path: ADMIN_STATISTICS_URL.PRODUCTS, screen: StatisticProductsPage},\r\n {id: 1, key: \"1\", path: ADMIN_STATISTICS_URL.CONVERSIONS, screen: StatisticConversionsPage},\r\n {id: 2, key: \"2\", path: ADMIN_STATISTICS_URL.ACTIVITY, screen: StatisticActivityPage},\r\n {id: 3, key: \"3\", path: ADMIN_STATISTICS_URL.PRODUCTS_RATING, screen: StatisticProductsRatingPage},\r\n]\r\n\r\nconst GetScreen = (path) => {\r\n if (path === undefined) {\r\n return InnerScreensList[0]\r\n }\r\n const ind = InnerScreensList.findIndex(elem => elem.path === path)\r\n if (ind >= 0) {\r\n return InnerScreensList[ind]\r\n }\r\n return InnerScreensList[0]\r\n}\r\n\r\n\r\nexport function AdminStatisticsPage({history, screenId, children, time}) {\r\n\r\n // const Screen = GetScreen(history.location.pathname.split(\"/\")[-1]);\r\n // const category = match.params.category;\r\n // const Screen = GetScreen(category);\r\n\r\n const [activeLeft, setActiveLeft_] = useState(screenId);\r\n const setActiveLeft = (id) => {\r\n //setActiveLeft_(id);\r\n history.push(MAIN_URL.APP_STATISTICS + \"/\" + InnerScreensList[id].path)\r\n }\r\n\r\n\r\n const dispatch = useDispatch();\r\n const onChooseTime = (id) => dispatch(setTime(SelectedTimeData[id].value))\r\n\r\n const SetTime = (t) => {\r\n const id = SelectedTimeData.findIndex(elem => elem.value === t);\r\n if (id >= 0) return id\r\n onChooseTime(1)\r\n return 1\r\n }\r\n\r\n const [activeSelected, setActiveSelected] = useState(SetTime(time));\r\n\r\n // const GetData = (metric, setD, label, another=false) => {\r\n // REQUEST.GET({request: DB_PATH.STATISTICS.METRIC.N + `?metric=${metric.name}&time=${time}`,\r\n // meta: {ms: 300000}}).then(res => {\r\n // try {\r\n // if (!another) {\r\n // const xAxes = res.json.data.map(elem => GetTime({userDate: elem.d}))\r\n // setD([\r\n // {\r\n // label: metric.label,\r\n // bigLabel: metric.bigLabel,\r\n // config: {type: \"gray\"},\r\n // data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.v}))\r\n // },\r\n // {\r\n // label: statMeanLabel,\r\n // bigLabel: metric.bigLabel + statMeanBigLabel,\r\n // config: {type: \"median\"},\r\n // data: res.json.data.map((el, i) => ({x: xAxes[i], y: el.m}))\r\n // }\r\n // ])\r\n // } else {\r\n // //console.log(res.json);\r\n // // return;\r\n // // const xAxes = res.json.dates\r\n // setD([...res.json.dates.map((date, i) => ({\r\n // label: date.substr(5),\r\n // bigLabel: metric.bigLabel + ` (${date.substr(5)})`,\r\n // config: {type: \"gray\"},\r\n // data: res.json.data.map((el, j) => ({\r\n // x: GetTime({seconds: el.t}),\r\n // y: el.enters[i]\r\n // }))\r\n // })), {\r\n // label: statMeanLabel,\r\n // bigLabel: metric.bigLabel + statMeanBigLabel,\r\n // config: {type: \"median\", color: \"#3354FF\", median: true},\r\n // data: res.json.data.map((el, j) => ({\r\n // x: GetTime({seconds: el.t}),\r\n // y: el.enters.reduce((sum, current) => sum + current, 0) / el.enters.length,\r\n // }))\r\n // }])\r\n // }\r\n // } catch (e) {\r\n // console.log(e)\r\n // setError(\"Error: \" + e)\r\n // setLoading(false)\r\n // }\r\n // })\r\n // }\r\n\r\n // const GetGraphs = () => {\r\n // return InnerScreensList[activeLeft].screen({time})\r\n // }\r\n\r\n return
\r\n {/*
*/}\r\n
\r\n
\r\n {dataLeft.map((elem, i) => {\r\n return StatisticVariant({...elem, active: i === activeLeft},\r\n () => setActiveLeft(i))\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {dataLeft[activeLeft].name}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n {children}\r\n {/*{Screen.screen({time, REQUEST})}*/}\r\n {/*/!*{GetGraphs()}*!/*/}\r\n
\r\n
\r\n}\r\n\r\nexport default AdminStatisticsPage;\r\n","import {SET_MENU_ELEMENT_ID, SET_TIME} from \"../types\";\r\n\r\n\r\nexport const setTime = (time) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: SET_TIME,\r\n time\r\n });\r\n };\r\n};\r\n\r\nexport const setActiveElementId = (id) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: SET_MENU_ELEMENT_ID,\r\n activeElemId: id\r\n });\r\n };\r\n};","import React, {} from \"react\";\r\nimport {Route, Switch} from 'react-router-dom';\r\nimport {ADMIN_STATISTICS_URL, MAIN_URL} from \"../constants\";\r\nimport AdminStatisticsPage from \"../pages/AdminStatisticsPage\";\r\nimport StatisticUsersPage from \"../pages/AdminStatisticsPage/InnerPages/users\";\r\nimport StatisticProductsPage from \"../pages/AdminStatisticsPage/InnerPages/products\";\r\nimport StatisticConversionsPage from \"../pages/AdminStatisticsPage/InnerPages/conversions\";\r\nimport StatisticActivityPage from \"../pages/AdminStatisticsPage/InnerPages/activity\";\r\nimport StatisticProductsRatingPage from \"../pages/AdminStatisticsPage/InnerPages/productsRating\";\r\n\r\nconst GetLocalRoute = ({path}) => {\r\n console.log(\"PP\", MAIN_URL.APP_STATISTICS + \"/\" + path)\r\n return AdminStatisticsPage({category: path})}/>\r\n}\r\n\r\nconst InnerScreensList = [\r\n {id: 0, key: \"0\", path: ADMIN_STATISTICS_URL.USERS, screen: StatisticUsersPage},\r\n {id: 1, key: \"1\", path: ADMIN_STATISTICS_URL.PRODUCTS, screen: StatisticProductsPage},\r\n]\r\n\r\nconst AdminStatisticsRouter = () => {\r\n\r\n return \r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n};\r\n\r\n\r\nexport default AdminStatisticsRouter;\r\n","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport {AppModal} from \"../../components/AppModal\";\r\nimport RequestWrapper from \"../../helpers/RequestWrapper\";\r\nimport {MAIN_URL, PERIODS, PERSONS, SECTIONS, TAGS} from \"../../constants\";\r\nimport AppCircularProgress from \"../../components/UI/AppCircularProgress\";\r\nimport {AppWhiteBlock} from \"../../components/AppWhiteBlock\";\r\nimport AppButton from \"../../components/AppButton\";\r\n\r\nconst GetStatistics = ({REQUEST, type = \"common\", person = \"\", section = \"\", period = \"\", handler = () => {}}) => {\r\n let params = `type=${type}`\r\n if (person && person in PERSONS) {\r\n params += `&person=${person}`\r\n } else if (period && period in PERIODS) {\r\n params += `&period=${period}`\r\n } else if (section && section in SECTIONS) {\r\n params += `§ion=${section}`\r\n }\r\n return REQUEST.GET({request: \"statistics/progress/?\" + params})\r\n}\r\n\r\nconst AddHeader = ({section, period, person}) => {\r\n try {\r\n if (person) {\r\n return PERSONS[person].name\r\n } else if (period) {\r\n return PERIODS[period].name\r\n } else if (section) {\r\n return SECTIONS[section].name\r\n }\r\n } catch (e) {\r\n return \"\"\r\n }\r\n return \"\"\r\n}\r\n\r\nconst GetHeader = ({section, period, person}) => {\r\n let header = AddHeader({section, period, person})\r\n if (header) return header\r\n return \"Прогресс\"\r\n}\r\n\r\nconst StatisticRow = ({text, meaning}) => (\r\n
\r\n
\r\n {text}\r\n
\r\n
\r\n {meaning}\r\n
\r\n
\r\n)\r\n\r\nconst GetName = (dict, name) => {\r\n try {\r\n return dict[name].name\r\n } catch (e) {\r\n return \"\"\r\n }\r\n}\r\n\r\nfunction StudentStatisticsPage({history, match, startURL = MAIN_URL.STATISTICS}) {\r\n\r\n const section = match.params.section;\r\n const period = match.params.period;\r\n const person = match.params.person;\r\n\r\n // useEffect(() => {\r\n // if (section) {\r\n // if (!section in Object.keys(SECTIONS)) {\r\n // history.push(startURL)\r\n // }\r\n // }\r\n // }, [section])\r\n\r\n const [userType, setUserType] = useState(\"common\");\r\n // location.state && location.state.type && location.state.type in [\"common\", \"detail\"] ?\r\n // location.state.type : \"common\";\r\n const {REQUEST} = RequestWrapper();\r\n const [loading, setLoading] = useState(true)\r\n const [error, setError] = useState(\"\")\r\n\r\n const [data, setData] = useState([])\r\n const [tags, setTags] = useState([])\r\n const [questions, setQuestions] = useState([])\r\n\r\n const [questionModal, setQuestionModal] = useState(false)\r\n const [questionId, setQuestionId] = useState(-1)\r\n\r\n const [nextType, setNextType] = useState(\"\")\r\n const [amount, setAmount] = useState(0)\r\n const [linearProgress, setLinearProgress] = useState(0)\r\n const [progress, setProgress] = useState(0)\r\n const [right, setRight] = useState(0)\r\n const [totalAttempts, setTotalAttempts] = useState(0)\r\n const [totalRight, setTotalRight] = useState(0)\r\n useEffect(() => {\r\n setLoading(true)\r\n console.log(\"Sec\", section, \", period\", period, \", person\", person, \", TYPE\", userType)\r\n\r\n if (section && !(Object.keys(SECTIONS).findIndex(s => s === section) >= 0) ||\r\n period && !(Object.keys(PERIODS).findIndex(s => s === period) >= 0) ||\r\n person && !(Object.keys(PERSONS).findIndex(s => s === person) >= 0)\r\n ) {\r\n history.push(startURL);\r\n setLoading(false)\r\n return () => {}\r\n }\r\n\r\n let addHeader = AddHeader({section, person, period})\r\n if (addHeader) {\r\n document.title = \"Моя статистика | \" + addHeader\r\n } else {\r\n document.title = \"Моя статистика\"\r\n }\r\n GetStatistics({REQUEST, section, person, period, type: userType}).then(res => {\r\n if (res.status !== 200) {\r\n setError(\"Ошибка загрузки статистики \" + JSON.stringify(res.message))\r\n // setData(JSON.stringify(res.json))\r\n } else {\r\n setType(res.json.type)\r\n setAmount(res.json.amount)\r\n setProgress(res.json.progress)\r\n setLinearProgress(res.json.linear_progress)\r\n setRight(res.json.right)\r\n setTotalAttempts(res.json.total_attempts)\r\n setTotalRight(res.json.total_right)\r\n console.log(\"JSON\", res.json)\r\n if (res.json.type === \"common\") {\r\n setNextType(res.json.next_type)\r\n setData(res.json.data.map(elem => ({...elem, percentage: Number(elem.progress)})))\r\n } else {\r\n setTags(res.json.tags)\r\n setQuestions(res.json.difficult.map(elem => {\r\n let v_a;\r\n if (typeof elem.valid_answers === 'object') {\r\n v_a = elem.valid_answers\r\n } else {\r\n v_a = JSON.parse(elem.valid_answers)\r\n }\r\n return {...elem, valid_answers: v_a}\r\n }))\r\n }\r\n }\r\n setLoading(false)\r\n })\r\n }, [section, period, person, userType])\r\n //useEffect(() => console.log(\"RERENDER\"))\r\n const [type, setType] = useState(\"common\")\r\n //const []\r\n const onNext = (id) => {\r\n console.log(\"ID\", id, history.location.pathname + '/' + data[id][nextType])\r\n history.push(history.location.pathname + '/' + data[id][nextType])\r\n }\r\n\r\n const onPrev = (elem) => {\r\n if (elem === \"person\") {\r\n history.push(startURL + '/' + section + '/' + period + '/' + person)\r\n } else if (elem === 'period') {\r\n history.push(startURL + '/' + section + '/' + period)\r\n } else if (elem === 'section') {\r\n history.push(startURL + '/' + section)\r\n } else {\r\n history.push(startURL)\r\n }\r\n }\r\n\r\n return
\r\n {questions.length > 0 && \r\n

Информация о задании

\r\n
\r\n
\r\n
Вопрос
\r\n

{questions.length > 0 && questionId >= 0 && questions[questionId].question}

\r\n
\r\n
\r\n

Верный ответ:

\r\n

{questions.length > 0 && questionId >= 0 && questions[questionId].valid_answers[0]}

\r\n
\r\n
\r\n

Всего попыток:

\r\n

{questions.length > 0 && questionId >= 0 && questions[questionId].attempts}

\r\n
\r\n
\r\n

Попыток с правильным ответом:

\r\n

{questions.length > 0 && questionId >= 0 && questions[questionId].successful_attempts}

\r\n
\r\n
\r\n setQuestionModal(false)} type={\"red\"}>Закрыть\r\n
}\r\n
\r\n
\r\n
onPrev(\"all\")}>\r\n Общее\r\n
\r\n {section &&
onPrev(\"section\")}>\r\n {GetName(SECTIONS, section)}\r\n
}\r\n {period &&
onPrev(\"period\")}\r\n style={{backgroundColor: '#e6ebfc'}}>\r\n {GetName(PERIODS, period)}\r\n
}\r\n {person &&
onPrev(\"person\")}\r\n style={{backgroundColor: '#ebeffa'}}>\r\n {GetName(PERSONS, person)}\r\n
}\r\n
\r\n {userType === \"detail\" &&
\r\n setUserType(\"common\")}>\r\n К сводной\r\n \r\n
}\r\n
\r\n {loading ?:(\r\n type === \"common\" ?\r\n
\r\n {/*

Статистика

*/}\r\n {/*
{error ? error : data}
*/}\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 //history.push(location.pathname, {type: \"detail\"})\r\n setUserType(\"detail\")\r\n }}>Подробно\r\n
\r\n
:
\r\n
\r\n \r\n

Статистика по разделам

\r\n
\r\n {tags.filter(elem => elem.tag in TAGS).map((elem, i) => {\r\n let name = TAGS[elem.tag].name\r\n return \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 {/*{userType === \"detail\" && {*/}\r\n {/* //history.push(location.pathname, {type: \"detail\"})*/}\r\n {/* //console.log(\"CLICK\", userType)*/}\r\n {/* setUserType(\"common\")*/}\r\n {/*}}>Назад к сводной}*/}\r\n
\r\n
\r\n
\r\n \r\n

Самые трудные вопросы

\r\n {questions.map((elem, i) => (\r\n {\r\n setQuestionId(i);\r\n setQuestionModal(true)\r\n }}\r\n key={i.toString()}>\r\n
\r\n
\r\n {elem.question}\r\n
\r\n
\r\n
\r\n {elem.successful_attempts}\r\n
\r\n
\r\n {elem.attempts - elem.successful_attempts}\r\n
\r\n
\r\n ))}\r\n \r\n
\r\n
\r\n )}\r\n
\r\n}\r\n\r\nexport default StudentStatisticsPage;\r\n","import React, {useEffect, useState} from 'react';\r\nimport {AppModal} from \"../../components/AppModal\";\r\nimport styles from './styles.module.scss'\r\nimport {useSelector} from \"react-redux\";\r\nimport {MAIN_URL, PERIODS, SECTIONS} from \"../../constants\";\r\nimport cn from 'classnames';\r\nimport StudentStatisticsPage from \"../StudentStatisticsPage\";\r\n\r\n\r\nexport const GetClassroomItem = ({name, id, active, index, onClick}) => {\r\n return
\r\n {name}\r\n
\r\n}\r\n\r\nexport const GetStudentItem = ({name, id, active=false, index, onClick}) => {\r\n return
\r\n {name}\r\n
\r\n}\r\n\r\n\r\nexport const GetNumber = (numb) => {\r\n try {\r\n return Number(numb)\r\n } catch (e) {\r\n return -1\r\n }\r\n}\r\n\r\n\r\nfunction ClassroomStatisticsPage({history, match}) {\r\n\r\n const classroomId = GetNumber(match.params.classroomId);\r\n const studentId = GetNumber(match.params.studentId);\r\n\r\n const classrooms = useSelector(state => state.classroom.classrooms)\r\n const users = useSelector(state => state.classroom.users)\r\n\r\n const [loading, setLoading] = useState(true);\r\n\r\n const WaitAndThen = (handler = () => {}) => {\r\n setLoading(true)\r\n setTimeout(() => {\r\n handler()\r\n setLoading(false);\r\n }, waiting)\r\n }\r\n\r\n const waiting = 800;\r\n useEffect(() => {\r\n //setLoading(true)\r\n const timeout = setTimeout(() => setLoading(false), waiting)\r\n return () => clearTimeout(timeout)\r\n }, [])\r\n\r\n const [activeClassroomIndex, setActiveClassroomIndex] = useState(\r\n classroomId ? classrooms.findIndex(c => c.id === Number(classroomId)) : -1)\r\n const [activeStudentIndex, setActiveStudentIndex] = useState(-1)\r\n\r\n\r\n const onChooseClassroom = (id) => {\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + id)\r\n }\r\n\r\n const [students, setStudents] = useState([])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) >= 0) {\r\n const studentsIds = classrooms.find(c => c.id === classroomId).students\r\n setStudents(users.filter(u => studentsIds.findIndex(s => s === u.id) !== -1))\r\n // console.log(\"Students\", classrooms.find(c => c.id === classroomId).students)\r\n }\r\n }, [classroomId])\r\n\r\n const [commonProgress, setCommonProgress] = useState([])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) >= 0) {\r\n const statistics = classrooms.find(c => c.id === classroomId).statistics\r\n setCommonProgress(statistics)\r\n // console.log(\"Students\", classrooms.find(c => c.id === classroomId).students)\r\n }\r\n }, [classroomId])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) < 0) {\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS)\r\n }\r\n }, [classroomId])\r\n\r\n const onChooseStudent = (id) => {\r\n if (id > 0) {\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId + '/' + id.toString())\r\n } else {\r\n if (classroomId && classroomId > 0) {\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId)\r\n } else {\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS)\r\n }\r\n }\r\n }\r\n\r\n const studentStatPage = StudentStatisticsPage(\r\n {history,\r\n match,\r\n startURL: MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId + '/' + studentId})\r\n\r\n // useEffect(() => {\r\n // setStudentStatPage(\r\n // StudentStatisticsPage({history, match,\r\n // startURL: MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId + '/' + studentId})\r\n // )\r\n // }, [classroomId, studentId])\r\n\r\n useEffect(() => {\r\n // console.log(\"C_ID\", classroomId)\r\n if (classroomId) {\r\n setActiveClassroomIndex(classrooms.findIndex(c => c.id === Number(classroomId)))\r\n // console.log(\"FIND\", activeClassroomIndex, classrooms.findIndex(c => c.id === Number(classroomId)))\r\n } else {\r\n setActiveClassroomIndex(-1)\r\n }\r\n }, [classroomId])\r\n\r\n useEffect(() => {\r\n // console.log(\"SET STUD INDEX\", studentId)\r\n if (studentId) {\r\n try {\r\n // console.log(\"ERROR 1111 !!!!\", students\r\n // .findIndex(s => s.id === studentId), students.map(e => e.id))\r\n setActiveStudentIndex(students\r\n .findIndex(s => s.id === studentId))\r\n } catch (e) {\r\n // console.log(\"ERROR!!!!\")\r\n setActiveStudentIndex(-1)\r\n }\r\n } else {\r\n setActiveStudentIndex(-1)\r\n }\r\n }, [studentId, students])\r\n\r\n return
\r\n {/*
*/}\r\n \r\n
\r\n
\r\n {classroomId ? (studentId && (studentId >= 0) &&\r\n (students.findIndex(s => s.id === studentId) >= 0) ?\r\n students.find(s => s.id === studentId).name : \"Сводная статистика\") : \"\"}\r\n
\r\n {/*
*/}\r\n {/* */}\r\n {/*
*/}\r\n
\r\n {classroomId ?
\r\n
\r\n
\r\n Статистика\r\n
\r\n {GetStudentItem(\r\n {\r\n name: \"Сводная\",\r\n id: -1,\r\n index: -1,\r\n active: -1 === activeStudentIndex,\r\n onClick: () => WaitAndThen(() => onChooseStudent(-1))\r\n })\r\n }\r\n
\r\n {`По ученикам (${students.length} учеников)`}\r\n
\r\n {students.map((student, index) => {\r\n return GetStudentItem(\r\n {\r\n name: student.name,\r\n id: student.id,\r\n index,\r\n active: index === activeStudentIndex,\r\n onClick: () => WaitAndThen(() => onChooseStudent(student.id))\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 {classrooms.map((classroom, index) => {\r\n return GetClassroomItem(\r\n {\r\n name: classroom.name,\r\n id: classroom.id,\r\n index,\r\n active: index === activeClassroomIndex,\r\n onClick: () => WaitAndThen(() => onChooseClassroom(classroom.id))\r\n })\r\n })}\r\n
\r\n
\r\n\r\n
\r\n {/*{classroomId > 0 && studentId > 0 && studentStatPage}*/}\r\n {classroomId > 0 ? (studentId > 0 ? studentStatPage :\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 {/*{Object*/}\r\n {/* .keys(SECTIONS)*/}\r\n {/* .map(sec => ({...SECTIONS[sec], key: sec}))*/}\r\n {/* .map((sec, i) => {*/}\r\n {/* const reducerLP =*/}\r\n {/* (acc, currentValue) => acc + currentValue.lp;*/}\r\n {/* const reducerTP =*/}\r\n {/* (acc, currentValue) => acc + currentValue.tp;*/}\r\n {/* const progress = sec.periods.map(period =>*/}\r\n {/* ({...PERIODS[period],*/}\r\n {/* lp: Math.round(Math.random() * 100)}))*/}\r\n {/* .map(period => ({...period,*/}\r\n {/* tp: Math.min(100, Math.round(period.lp * (1 + Math.random() / 2)))}))*/}\r\n {/* const TP = Math.round(progress.reduce(reducerTP, 0) / progress.length);*/}\r\n {/* const LP = Math.round(progress.reduce(reducerLP, 0) / progress.length);*/}\r\n {students.length > 0 ? commonProgress.map(({progress, TP, LP, sec}, i) => {\r\n return
\r\n
\r\n
{sec.name}
\r\n
{\r\n `${TP}%`\r\n }
\r\n
{\r\n `${LP}%`\r\n }
\r\n
= 80 && styles.green_color\r\n , TP > 30 && TP < 80 && styles.mean_color\r\n )}>{\r\n (TP <= 30) ? \"Низкий\" : (\r\n TP < 80 ? \"Средний\" : \"Высокий\"\r\n )\r\n }
\r\n
\r\n {progress.map((period, index) => (\r\n
\r\n
{period.name}
\r\n
{\r\n `${period.tp}%`\r\n }
\r\n
{\r\n `${period.lp}%`\r\n }
\r\n
= 80 && styles.green_color\r\n , period.tp > 30 && period.tp < 80 && styles.mean_color\r\n )}>{\r\n (period.tp <= 30) ? \"Низкий\" : (\r\n period.tp < 80 ? \"Средний\" : \"Высокий\"\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\nexport default ClassroomStatisticsPage;\r\n","import React, {} from \"react\";\r\nimport {Route, Switch} from 'react-router-dom';\r\nimport {MAIN_URL} from \"../constants\";\r\nimport ClassroomStatisticsPage from \"../pages/ClassroomStatisticsPage\";\r\nimport StudentStatisticsPage from \"../pages/StudentStatisticsPage\";\r\n\r\n\r\nconst ClassroomStatisticsRouter = () => {\r\n\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n};\r\n\r\n\r\nexport default ClassroomStatisticsRouter;\r\n","import React, {useEffect, useState} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {MAIN_URL} from \"../../constants\";\r\nimport {AppModal} from \"../../components/AppModal\";\r\nimport {GetClassroomItem, GetNumber, GetStudentItem} from \"../ClassroomStatisticsPage\";\r\nimport {addClassroom, addTestToClassroom, deleteUserFromClassroom, editClassroom} from \"../../store/actions/classrooms\";\r\nimport AppInput from \"../../components/AppInput\";\r\nimport AppButton from \"../../components/AppButton\";\r\nimport cn from 'classnames';\r\nimport {ProgressLine} from \"../../components/UI/ProgressLine\";\r\n\r\n\r\nfunction TeacherClassroomsPage({history, match}) {\r\n\r\n const classroomId = GetNumber(match.params.classroomId);\r\n //const studentId = GetNumber(match.params.studentId);\r\n\r\n const dispatch = useDispatch();\r\n const classrooms = useSelector(state => state.classroom.classrooms)\r\n const users = useSelector(state => state.classroom.users)\r\n const tests = useSelector(state => state.classroom.tests)\r\n // const allClassroom = useSelector(state => state.classroom)\r\n //\r\n // useEffect(() => {\r\n // console.log(\"CLASSROOMS\", allClassroom)\r\n // }, [allClassroom])\r\n\r\n const [loading, setLoading] = useState(true);\r\n\r\n const WaitAndThen = (handler = () => {}) => {\r\n setLoading(true)\r\n setTimeout(() => {\r\n handler()\r\n setLoading(false);\r\n }, waiting)\r\n }\r\n\r\n const waiting = 800;\r\n useEffect(() => {\r\n //setLoading(true)\r\n const timeout = setTimeout(() => setLoading(false), waiting)\r\n return () => clearTimeout(timeout)\r\n }, [])\r\n\r\n const [activeClassroomIndex, setActiveClassroomIndex] = useState(\r\n classroomId ? classrooms.findIndex(c => c.id === Number(classroomId)) : -1)\r\n const [activeStudentIndex, setActiveStudentIndex] = useState(-1)\r\n\r\n\r\n const onChooseClassroom = (id) => {\r\n history.push(MAIN_URL.MY_CLASSROOMS + '/' + id)\r\n }\r\n\r\n const [students, setStudents] = useState([])\r\n const [classTests, setClassTests] = useState([])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) >= 0) {\r\n const studentsIds = classrooms.find(c => c.id === classroomId).students\r\n setStudents(users.filter(u => studentsIds.findIndex(s => s === u.id) !== -1))\r\n // console.log(\"Students\", classrooms.find(c => c.id === classroomId).students)\r\n }\r\n }, [classroomId, classrooms, users])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) >= 0) {\r\n const testsIds = classrooms.find(c => c.id === classroomId).tests\r\n setClassTests(testsIds.map(test => {\r\n const info = tests.find(i => i.id === test.id)\r\n return {...test, ...info}\r\n })\r\n )\r\n // console.log(\"Tests\", classrooms.find(c => c.id === classroomId).tests)\r\n }\r\n }, [classroomId, classrooms, tests])\r\n\r\n useEffect(() => {\r\n if (classrooms.findIndex(c => c.id === classroomId) < 0) {\r\n history.push(MAIN_URL.MY_CLASSROOMS)\r\n }\r\n }, [classrooms, classroomId])\r\n\r\n\r\n\r\n\r\n const onChooseStudent = (id) => {\r\n setActiveStudentIndex(id)\r\n setStudentModal(true)\r\n // if (id > 0) {\r\n // history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId + '/' + id.toString())\r\n // } else {\r\n // if (classroomId && classroomId > 0) {\r\n // history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId)\r\n // } else {\r\n // history.push(MAIN_URL.CLASSROOM_STATISTICS)\r\n // }\r\n // }\r\n }\r\n\r\n useEffect(() => {\r\n // console.log(\"C_ID\", classroomId)\r\n if (classroomId) {\r\n setActiveClassroomIndex(classrooms.findIndex(c => c.id === Number(classroomId)))\r\n // console.log(\"FIND\", activeClassroomIndex, classrooms.findIndex(c => c.id === Number(classroomId)))\r\n } else {\r\n setActiveClassroomIndex(-1)\r\n }\r\n }, [classroomId, classrooms])\r\n\r\n // useEffect(() => {\r\n // if (studentId) {\r\n // try {\r\n // setActiveStudentIndex(students\r\n // .findIndex(s => s.id === studentId))\r\n // } catch (e) {\r\n // setActiveStudentIndex(-1)\r\n // }\r\n // } else {\r\n // setActiveStudentIndex(-1)\r\n // }\r\n // }, [studentId])\r\n \r\n const [modalAddClassroom, setModalAddClassroom] = useState(false)\r\n const [classroomName, setClassroomName] = useState(\"\")\r\n const [classroomStudent, setClassroomStudent] = useState(\"\")\r\n const [classroomStudents, setClassroomStudents] = useState([])\r\n const [classroomAssistants, setClassroomAssistants] = useState([])\r\n const [classroomAddError, setClassroomAddError] = useState(\"\")\r\n\r\n const [editClassroomMode, setEditClassroomMode] = useState(false)\r\n\r\n useEffect(() => {\r\n if (editClassroomMode)\r\n setClassroomStudents(students)\r\n }, [students, editClassroomMode])\r\n\r\n useEffect(() => {\r\n if (editClassroomMode) {\r\n setClassroomName(classrooms.find(c => c.id === classroomId).name)\r\n }\r\n }, [editClassroomMode, classrooms])\r\n\r\n // const [modalAddStudent, setModalAddStudent] = useState(false)\r\n\r\n const [showGroupInfo, setShowGroupInfo] = useState(false)\r\n \r\n const OnAddNewClassroom = () => {\r\n setClassroomAddError(\"\")\r\n if (classroomName.trim().length === 0) {\r\n setClassroomName(n => n.trim())\r\n setClassroomAddError(\"Введите название группы\")\r\n return \r\n }\r\n dispatch(addClassroom({name: classroomName.trim(), students: classroomStudents.map(s => s.id)}))\r\n setModalAddClassroom(false)\r\n setClassroomStudent(\"\")\r\n setClassroomName(\"\")\r\n setClassroomStudents([])\r\n // setClassroomName(n => n.trim())\r\n }\r\n\r\n const onAddStudent = (user) => {\r\n setIsFocusOnStudent(false)\r\n setClassroomStudents(s => [user, ...s])\r\n setClassroomStudent(\"\")\r\n }\r\n\r\n const [isFocusOnStudent, setIsFocusOnStudent] = useState(false)\r\n\r\n const [studentModal, setStudentModal] = useState(false)\r\n\r\n const [testModal, setTestModal] = useState(false)\r\n const [testName, setTestName] = useState(\"\")\r\n const [isFocusOnTest, setIsFocusOnTest] = useState(false)\r\n\r\n const onAddTest = (test) => {\r\n setIsFocusOnTest(false)\r\n dispatch(addTestToClassroom({classroomId, testId: test.id}))\r\n setTestName(\"\")\r\n setTestModal(false)\r\n }\r\n\r\n const [modalTestProgress, setModalTestProgress] = useState(false)\r\n const [activeTest, setActiveTest] = useState({name: \"\", attempts: 0, progress: 0, id: -1})\r\n\r\n const [progressArray, setProgressArray] = useState(students.map(i => 0))\r\n\r\n useEffect(() => {\r\n setProgressArray(students.map(s => Math.round(Math.random() * 100)))\r\n }, [students])\r\n\r\n return
\r\n {/*
*/}\r\n \r\n
\r\n Информация об ученике\r\n
\r\n {activeStudentIndex >= 0 && students.length > 0 &&\r\n s.id === activeStudentIndex).name}\r\n label=\"Имя\"\r\n editable={false}\r\n />}\r\n {/*
*/}\r\n history.push(MAIN_URL.CLASSROOM_STATISTICS + '/' + classroomId\r\n + '/' + activeStudentIndex)}\r\n >Смотреть статистику ученика\r\n {\r\n WaitAndThen(() => {\r\n setActiveStudentIndex(-1)\r\n dispatch(deleteUserFromClassroom({classroomId, userId: activeStudentIndex}))\r\n setStudentModal(false)\r\n })\r\n }}>\r\n Удалить ученика из группы\r\n \r\n {/*
*/}\r\n {\r\n //setActiveStudentIndex(-1)\r\n setStudentModal(false)\r\n }} type=\"red\">\r\n Закрыть\r\n \r\n
\r\n \r\n
\r\n {editClassroomMode ? \"Редактирование группы\" : \"Добавление новой группы\"}\r\n
\r\n
\r\n \r\n
\r\n setIsFocusOnStudent(true)}\r\n //onBlur={() => setIsFocusOnStudent(false)}\r\n />\r\n
\r\n {isFocusOnStudent ?
\r\n {users\r\n .filter(u => u.name.includes(classroomStudent))\r\n .filter(u => classroomStudents.findIndex(s => s.id === u.id) === -1)\r\n .slice(0, 10)\r\n .map((u, i) => (\r\n
onAddStudent(u)}\r\n >{u.name}\r\n
\r\n ))}\r\n
:
}\r\n
\r\n
\r\n Ученики в группе\r\n
\r\n
\r\n
\r\n {classroomStudents.length > 0 ? classroomStudents.map((s, i) => (\r\n
\r\n
{s.name}
\r\n
{\r\n // editClassroom ?\r\n // dispatch(deleteUserFromClassroom({classroomId, userId: s.id})) :\r\n setClassroomStudents(list => list.filter(u => u.id !== s.id))\r\n }}\r\n >Удалить
\r\n
\r\n )) :
Пока не добавлено ни одного ученика
}\r\n
\r\n
\r\n
\r\n
\r\n {classroomAddError}\r\n
\r\n {\r\n if (editClassroomMode) {\r\n setClassroomAddError(\"\")\r\n if (classroomName.trim().length === 0) {\r\n setClassroomName(n => n.trim())\r\n setClassroomAddError(\"Введите название группы\")\r\n return\r\n }\r\n dispatch(editClassroom({id: classroomId,\r\n info: {name: classroomName.trim(), students: classroomStudents.map(s => s.id)}}))\r\n setModalAddClassroom(false)\r\n setClassroomStudent(\"\")\r\n setClassroomName(\"\")\r\n setClassroomStudents([])\r\n } else {\r\n OnAddNewClassroom()\r\n }\r\n setEditClassroomMode(false)\r\n }}>\r\n Сохранить\r\n \r\n
\r\n \r\n \r\n
\r\n Выставить новый тест группе\r\n
\r\n
\r\n
\r\n setIsFocusOnTest(true)}\r\n //onBlur={() => setIsFocusOnStudent(false)}\r\n />\r\n
\r\n {isFocusOnTest ?
\r\n {tests\r\n .filter(t => t.name.includes(testName))\r\n .filter(t => classTests.findIndex(c => c.id === t.id) === -1)\r\n .slice(0, 10)\r\n .map((t, i) => (\r\n
onAddTest(t)}\r\n >{t.name}\r\n
\r\n ))}\r\n
:
}\r\n
\r\n
\r\n
\r\n
\r\n {\r\n setIsFocusOnTest(false)\r\n setTestName(\"\")\r\n setTestModal(false)\r\n }} type=\"red\">\r\n Закрыть\r\n \r\n
\r\n \r\n \r\n
\r\n {`Результаты прохождения теста ${activeTest.name}`}\r\n
\r\n
\r\n
\r\n
\r\n {`Средний прогресс: ${activeTest.progress}`}\r\n
\r\n
\r\n {`Всего попыток: ${activeTest.attempts}`}\r\n
\r\n
\r\n Прогресс по ученикам\r\n
\r\n
\r\n
\r\n {students.length > 0 && progressArray.length > 0 ? students.map((s, i) => (\r\n
\r\n
{s.name}
\r\n
\r\n \r\n
\r\n
\r\n )) :
Пока нет ни одного ученика
}\r\n
\r\n
\r\n
\r\n {\r\n setModalTestProgress(false)\r\n }} type={\"red\"}>\r\n Закрыть\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n {classroomId ? \"Выставленные тесты\" : \"\"}\r\n
\r\n {classroomId ?
\r\n setShowGroupInfo(i => !i)}>\r\n Информация о группе\r\n \r\n
:
}\r\n
\r\n\r\n {classroomId ?
\r\n
\r\n {/*
*/}\r\n {/* Редактировать данные*/}\r\n {/*
*/}\r\n {/*{GetStudentItem(*/}\r\n {/* {*/}\r\n {/* name: \"Сводная\",*/}\r\n {/* id: -1,*/}\r\n {/* index: -1,*/}\r\n {/* //active: -1 === activeStudentIndex,*/}\r\n {/* onClick: () => WaitAndThen(() => onChooseStudent(-1))*/}\r\n {/* })*/}\r\n {/*}*/}\r\n
{\r\n setEditClassroomMode(true)\r\n setModalAddClassroom(true)\r\n }}\r\n className={cn(styles.student_item_div, styles.classroom_list_header_text)}\r\n style={{fontSize: \"16px\", marginBottom: \"0\"}}\r\n >\r\n Редактировать данные\r\n
\r\n
\r\n {`Ученики (${students.length})`}\r\n
\r\n {students.map((student, index) => {\r\n return GetStudentItem(\r\n {\r\n name: student.name,\r\n id: student.id,\r\n index,\r\n //active: index === activeStudentIndex,\r\n onClick: () => WaitAndThen(() => onChooseStudent(student.id))\r\n })\r\n })}\r\n
\r\n
: ''}\r\n
\r\n
\r\n
\r\n Группы\r\n
\r\n {GetClassroomItem(\r\n {\r\n name: \"+ Добавить\",\r\n id: 0,\r\n index: -2,\r\n active: false,\r\n onClick: () => setModalAddClassroom(true)\r\n })}\r\n {classrooms.map((classroom, index) => {\r\n return GetClassroomItem(\r\n {\r\n name: classroom.name,\r\n id: classroom.id,\r\n index,\r\n active: index === activeClassroomIndex,\r\n onClick: () => WaitAndThen(() => onChooseClassroom(classroom.id))\r\n })\r\n })}\r\n
\r\n
\r\n\r\n\r\n
\r\n {classroomId ?\r\n
\r\n
setTestModal(true)}>\r\n
{\"+ Добавить\"}
\r\n
\r\n {classTests.map((test, i) => {\r\n return {\r\n setActiveTest(test)\r\n setModalTestProgress(true)\r\n }}\r\n >\r\n
{test.name}
\r\n {/*
{test.progress.toString() + '%'}
*/}\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
setShowGroupInfo(false)}\r\n />\r\n
\r\n}\r\n\r\nexport default TeacherClassroomsPage;\r\n","import {\r\n ADD_CLASSROOM,\r\n ADD_TEST_TO_CLASSROOM,\r\n ADD_USER_TO_CLASSROOM, CREATE_NEW_QUESTION, CREATE_NEW_TEST,\r\n DELETE_TEST_FROM_CLASSROOM,\r\n DELETE_USER_FROM_CLASSROOM, EDIT_CLASSROOM, EDIT_QUESTION, EDIT_TEST\r\n} from \"../types\";\r\n\r\n\r\n// data = {name, students: [...], assistants: [...], tests: [...]}\r\nexport const addClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: ADD_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {id, info: {...}}\r\nexport const editClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: EDIT_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {classroomId, userId}\r\nexport const addUserToClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: ADD_USER_TO_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {classroomId, userId}\r\nexport const deleteUserFromClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: DELETE_USER_FROM_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {classroomId, testId}\r\nexport const addTestToClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: ADD_TEST_TO_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {classroomId, testId}\r\nexport const deleteTestFromClassroom = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: DELETE_TEST_FROM_CLASSROOM,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {name: string, questions: [..., questionId: int, ...]}\r\n// example: {name: \"Петр I\", questions: [2, 3, 7, 15, 18, 59, 60, 61]}\r\nexport const createNewTest = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: CREATE_NEW_TEST,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {id: int, info: {...}}\r\n// example: {id: 5, info: {name: \"Петр I (часть 1)\"}}\r\nexport const editTest = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: EDIT_TEST,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {question: string, answers: [..., string, ...], valid_answers: [..., string, ...]}\r\nexport const createNewQuestion = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: CREATE_NEW_QUESTION,\r\n payload: data,\r\n });\r\n };\r\n};\r\n\r\n// data = {id: int, info: {...}}\r\n// example: {id: 15, info: {valid_answers: [\"1786 год\"]}}\r\nexport const editQuestion = (data) => {\r\n return async (dispatch) => {\r\n dispatch({\r\n type: EDIT_QUESTION,\r\n payload: data,\r\n });\r\n };\r\n};","import React, {useEffect} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\n\r\n\r\nfunction LifeHacksPage() {\r\n\r\n useEffect(() => {\r\n document.title = \"История | Лайфхаки\";\r\n }, [])\r\n\r\n return
\r\n

Лайфхаки

\r\n
\r\n}\r\n\r\nexport default LifeHacksPage;\r\n","import React, {useEffect} from 'react';\r\nimport styles from \"./styles.module.scss\";\r\n\r\n\r\nfunction CreateTestsPage() {\r\n\r\n useEffect(() => {\r\n document.title = \"Конструктор тестов\";\r\n }, [])\r\n\r\n return
\r\n

Конструктор тестов

\r\n
\r\n}\r\n\r\nexport default CreateTestsPage;\r\n","import React, {} from \"react\";\r\nimport {Route, Switch, Redirect} from 'react-router-dom';\r\nimport {MAIN_URL} from \"../constants\";\r\nimport ClassroomPage from \"../pages/ClassroomPage\";\r\nimport ProfilePage from \"../pages/ProfilePages/ProfilePage\";\r\nimport CompetitionPage from \"../pages/CompetitionPage\";\r\nimport RatingPage from \"../pages/RatingPage\";\r\nimport LandingPage from \"../pages/LandingPage\";\r\nimport AdminStatisticsRouter from \"./AdminStatisticsRouter\";\r\nimport StudentStatisticsPage from \"../pages/StudentStatisticsPage\";\r\nimport ClassroomStatisticsRouter from \"./ClassroomStatisticsRouter\";\r\nimport TeacherClassroomsPage from \"../pages/TeacherClassroomsPage\";\r\nimport LifeHacksPage from \"../pages/LifeHacksPage\";\r\nimport CreateTestsPage from \"../pages/CreateTestsPage\";\r\n\r\n\r\nconst MainRouter = ({...p}) => {\r\n\r\n // const MyRoute = ({component, ...props}) => {\r\n // return component({...p})} {...props}/>\r\n // //return component({...pr})})} {...props}/>\r\n // }\r\n\r\n return \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\nexport default MainRouter;\r\n","import {UPDATE_USER, VK_USER, SET_USER_DATA, REMOVE_USER} from \"../types\";\r\n\r\nconst initialState = {\r\n name: \"\",\r\n userName: \"\",\r\n password: \"temppassword\",\r\n avatar: \"https://img2.freepng.ru/20180420/krw/kisspng-computer-icons-mobile-app-development-android-my-account-icon-5ada4ab46cb066.5797683215242554124452.jpg\",\r\n email: \"\",\r\n loading: true,\r\n};\r\n\r\nexport const UserReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_USER_DATA:\r\n return {\r\n ...state,\r\n loading: false,\r\n };\r\n case UPDATE_USER:\r\n return {\r\n ...state,\r\n name: action.payload.name,\r\n userName: action.payload.userName,\r\n password: action.payload.password,\r\n email: action.payload.email,\r\n loading: false,\r\n };\r\n case VK_USER:\r\n return {\r\n ...state,\r\n name: action.payload.name,\r\n userName: action.payload.userName,\r\n loading: false,\r\n };\r\n case REMOVE_USER:\r\n return {\r\n ...state,\r\n name: \"\",\r\n userName: \"\",\r\n password: \"\",\r\n email: \"\",\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {DELETE_TOKEN, SET_TOKEN, SET_ERROR_TOKEN, SET_TOKEN_FROM_DB} from \"../types\";\r\n\r\nconst initialState = {\r\n token: \"\",\r\n userName: \"\",\r\n loading: true,\r\n error: false,\r\n};\r\n\r\nexport const TokenReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_TOKEN_FROM_DB:\r\n return {\r\n ...state,\r\n token: action.token,\r\n userName: action.userName,\r\n loading: false,\r\n error: false,\r\n };\r\n case SET_TOKEN:\r\n return {\r\n ...state,\r\n token: action.token,\r\n userName: action.userName,\r\n loading: false,\r\n error: false,\r\n };\r\n case DELETE_TOKEN:\r\n return {\r\n ...state,\r\n token: \"\",\r\n userName: \"\",\r\n };\r\n\r\n case SET_ERROR_TOKEN:\r\n return {\r\n ...state,\r\n token: \"\",\r\n userName: \"\",\r\n error: action.error,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {ADD_NOTIFICATION, DELETE_NOTIFICATION, DELETE_ALL_NOTIFICATIONS} from \"../types\";\r\n\r\nconst initialState = {\r\n notifications: [],\r\n loading: false,\r\n error: false,\r\n};\r\n\r\nexport const ContentReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ADD_NOTIFICATION:\r\n return {\r\n ...state,\r\n notifications: [...state.notifications, action.notification],\r\n loading: false,\r\n error: false,\r\n };\r\n case DELETE_NOTIFICATION:\r\n return {\r\n ...state,\r\n notifications: state.notifications.filter(n => n.id !== action.notification.id),\r\n loading: false,\r\n error: false,\r\n };\r\n case DELETE_ALL_NOTIFICATIONS:\r\n return {\r\n ...state,\r\n notifications: [],\r\n loading: false,\r\n error: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {SET_TIME, SET_MENU_ELEMENT_ID} from \"../types\";\r\n\r\nconst initialState = {\r\n activeElemId: 0,\r\n time: 7,\r\n loading: false,\r\n error: false,\r\n};\r\n\r\nexport const StatisticsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_TIME:\r\n return {\r\n ...state,\r\n time: action.time,\r\n loading: false,\r\n error: false,\r\n };\r\n case SET_MENU_ELEMENT_ID:\r\n return {\r\n ...state,\r\n activeElemId: action.activeElemId,\r\n loading: false,\r\n error: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {\r\n ADD_CLASSROOM,\r\n ADD_TEST_TO_CLASSROOM,\r\n ADD_USER_TO_CLASSROOM, CREATE_NEW_QUESTION, CREATE_NEW_TEST,\r\n DELETE_TEST_FROM_CLASSROOM,\r\n DELETE_USER_FROM_CLASSROOM, EDIT_CLASSROOM, EDIT_QUESTION, EDIT_TEST\r\n} from \"../types\";\r\nimport {PERIODS, SECTIONS} from \"../../constants\";\r\n\r\nexport const TESTS_TYPES = {\r\n COMMON: 'COMMON',\r\n MY: 'MY',\r\n}\r\n\r\nexport const QUESTIONS_TYPES = {\r\n COMMON: 'COMMON',\r\n MY: 'MY',\r\n}\r\n\r\nconst reducerLP =\r\n (acc, currentValue) => acc + currentValue.lp;\r\nconst reducerTP =\r\n (acc, currentValue) => acc + currentValue.tp;\r\n\r\nconst GetStat = () => {\r\n return Object\r\n .keys(SECTIONS)\r\n .map(sec => ({...SECTIONS[sec], key: sec}))\r\n .map((sec, i) => {\r\n const progress = sec.periods.map(period =>\r\n ({...PERIODS[period],\r\n lp: Math.round(Math.random() * 100)}))\r\n .map(period => ({...period,\r\n tp: Math.min(100, Math.round(period.lp * (1 + Math.random() / 2)))}))\r\n const TP = Math.round(progress.reduce(reducerTP, 0) / progress.length);\r\n const LP = Math.round(progress.reduce(reducerLP, 0) / progress.length);\r\n return {progress, TP, LP, sec}\r\n })\r\n}\r\n\r\nconst initialState = {\r\n classrooms: [\r\n {\r\n name: \"После занятий\",\r\n id: 1,\r\n assistants: [2, 3],\r\n students: [\r\n 1, 3, 5, 7, 9, 10, 11, 13, 14, 15, 17, 20, 21, 23, 25\r\n ],\r\n tests: [\r\n {\r\n id: 1,\r\n progress: 60,\r\n expired: \"\",\r\n attempts: 24\r\n },\r\n {\r\n id: 2,\r\n progress: 35,\r\n expired: \"\",\r\n attempts: 28\r\n },\r\n {\r\n id: 7,\r\n progress: 40,\r\n expired: \"\",\r\n attempts: 15\r\n },\r\n {\r\n id: 5,\r\n progress: 77,\r\n expired: \"\",\r\n attempts: 19\r\n },\r\n {\r\n id: 6,\r\n progress: 96,\r\n expired: \"\",\r\n attempts: 18\r\n },\r\n {\r\n id: 8,\r\n progress: 30,\r\n expired: \"\",\r\n attempts: 30\r\n },\r\n {\r\n id: 13,\r\n progress: 43,\r\n expired: \"\",\r\n attempts: 21\r\n },\r\n {\r\n id: 17,\r\n progress: 60,\r\n expired: \"\",\r\n attempts: 24\r\n },\r\n {\r\n id: 19,\r\n progress: 40,\r\n expired: \"\",\r\n attempts: 10\r\n }\r\n ],\r\n statistics: GetStat()\r\n },\r\n {\r\n name: \"История 11А\",\r\n id: 2,\r\n assistants: [1, 3],\r\n students: [\r\n 6, 8, 9, 10, 11, 14, 15, 16, 17, 19, 22, 23\r\n ],\r\n tests: [\r\n {\r\n id: 1,\r\n progress: 30,\r\n expired: \"\",\r\n attempts: 20\r\n },\r\n {\r\n id: 3,\r\n progress: 35,\r\n expired: \"\",\r\n attempts: 28\r\n },\r\n {\r\n id: 4,\r\n progress: 10,\r\n expired: \"\",\r\n attempts: 5\r\n },\r\n {\r\n id: 5,\r\n progress: 70,\r\n expired: \"\",\r\n attempts: 39\r\n },\r\n {\r\n id: 6,\r\n progress: 96,\r\n expired: \"\",\r\n attempts: 15\r\n },\r\n {\r\n id: 8,\r\n progress: 30,\r\n expired: \"\",\r\n attempts: 30\r\n },\r\n {\r\n id: 9,\r\n progress: 56,\r\n expired: \"\",\r\n attempts: 29\r\n },\r\n {\r\n id: 11,\r\n progress: 43,\r\n expired: \"\",\r\n attempts: 21\r\n },\r\n {\r\n id: 18,\r\n progress: 50,\r\n expired: \"\",\r\n attempts: 24\r\n },\r\n {\r\n id: 19,\r\n progress: 40,\r\n expired: \"\",\r\n attempts: 10\r\n }\r\n ],\r\n statistics: GetStat()\r\n }\r\n ],\r\n tests: [\r\n {\r\n id: 1,\r\n name: \"Петр I (Часть 1)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 2,\r\n name: \"Петр I (Часть 2)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 3,\r\n name: \"Петр I (Часть 3)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 4,\r\n name: \"Ленин (часть 1)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 5,\r\n name: \"Ленин (часть 2)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 6,\r\n name: \"Ленин (часть 3)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 7,\r\n name: \"Ленин (часть 4)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 8,\r\n name: \"Ленин (часть 5)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 9,\r\n name: \"Путин и Медведев (часть 1)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 10,\r\n name: \"Путин и Медведев (часть 2)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 11,\r\n name: \"Путин и Медведев (часть 3)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 12,\r\n name: \"Ельцин (часть 1)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 13,\r\n name: \"Ельцин (часть 2)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 14,\r\n name: \"Ельцин (часть 3)\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 15,\r\n name: \"Политика Хрущева\",\r\n type: TESTS_TYPES.COMMON,\r\n questions: []\r\n },\r\n {\r\n id: 16,\r\n name: \"Культура 9 века\",\r\n type: TESTS_TYPES.MY,\r\n questions: []\r\n },\r\n {\r\n id: 17,\r\n name: \"Культура 10 века\",\r\n type: TESTS_TYPES.MY,\r\n questions: []\r\n },\r\n {\r\n id: 18,\r\n name: \"Культура 11 века\",\r\n type: TESTS_TYPES.MY,\r\n questions: []\r\n },\r\n {\r\n id: 19,\r\n name: \"Живопись 14 века\",\r\n type: TESTS_TYPES.MY,\r\n questions: []\r\n },\r\n {\r\n id: 20,\r\n name: \"Живопись 15 века\",\r\n type: TESTS_TYPES.MY,\r\n questions: []\r\n },\r\n ],\r\n users: [\r\n {\r\n name: \"Варя Огорькова\",\r\n id: 1\r\n },\r\n {\r\n name: \"Валя Толкина\",\r\n id: 2\r\n },\r\n {\r\n name: \"Денис Неверов\",\r\n id: 3\r\n },\r\n {\r\n name: \"Женя Оленин\",\r\n id: 4\r\n },\r\n {\r\n name: \"Анастасия Павлова\",\r\n id: 5\r\n },\r\n {\r\n name: \"Анатолий Малькута\",\r\n id: 6\r\n },\r\n {\r\n name: \"Коля Серый\",\r\n id: 7\r\n },\r\n {\r\n name: \"Наташа Чернова\",\r\n id: 8\r\n },\r\n {\r\n name: \"Иван Бунин\",\r\n id: 9\r\n },\r\n {\r\n name: \"Артём Зарипов\",\r\n id: 10\r\n },\r\n {\r\n name: \"Мария Демидова\",\r\n id: 11\r\n },\r\n {\r\n name: \"Артём Александров\",\r\n id: 12\r\n },\r\n {\r\n name: \"Антон Ильин\",\r\n id: 13\r\n },\r\n {\r\n name: \"Денис Ефремов\",\r\n id: 14\r\n },\r\n {\r\n name: \"Наталия Тюленева\",\r\n id: 15\r\n },\r\n {\r\n name: \"Марина Парентьева\",\r\n id: 16\r\n },\r\n {\r\n name: \"Георгий Черданцев\",\r\n id: 17\r\n },\r\n {\r\n name: \"Алексей Афонин\",\r\n id: 18\r\n },\r\n {\r\n name: \"Елена Лицарева\",\r\n id: 19\r\n },\r\n {\r\n name: \"Мария Слепцова\",\r\n id: 20\r\n },\r\n {\r\n name: \"Галина Федоренко\",\r\n id: 21\r\n },\r\n {\r\n name: \"Катя Рябина\",\r\n id: 22\r\n },\r\n {\r\n name: \"Дарья Троян\",\r\n id: 23\r\n },\r\n {\r\n name: \"Ира Новикова\",\r\n id: 24\r\n },\r\n {\r\n name: \"Влад Краснопёров\",\r\n id: 25\r\n },\r\n {\r\n name: \"Женя Волков\",\r\n id: 26\r\n },\r\n {\r\n name: \"Игорь Дробышев\",\r\n id: 27\r\n },\r\n {\r\n name: \"Николай Харченко\",\r\n id: 28\r\n },\r\n {\r\n name: \"Зоя Сузина\",\r\n id: 29\r\n },\r\n {\r\n name: \"Антон Белоусов\",\r\n id: 30\r\n },\r\n {\r\n name: \"Игорь Кикнадзе\",\r\n id: 31\r\n },\r\n {\r\n name: \"Юрий Орлов\",\r\n id: 32\r\n },\r\n {\r\n name: \"Павел Белов\",\r\n id: 33\r\n },\r\n ],\r\n questions: [\r\n {\r\n id: 1,\r\n question: \"В каком году произошло Полтавское сражение?\",\r\n answers: [\"1709\", \"1702\", \"1714\", \"1711\"],\r\n valid_answers: [\"1709\"],\r\n type: QUESTIONS_TYPES.COMMON\r\n }\r\n ],\r\n loading: false,\r\n};\r\n\r\nconst reducer = (accumulator, currentValue) => Math.max(accumulator, currentValue.id);\r\n\r\nexport const ClassroomReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ADD_CLASSROOM:\r\n const maxId3 = state.classrooms.reduce(reducer, 0) + 1;\r\n // console.log(\"ADD! id:\", maxId3)\r\n return {\r\n ...state,\r\n classrooms: [{\r\n id: maxId3,\r\n name: \"#NoName\",\r\n students: [],\r\n assistants: [],\r\n tests: [],\r\n statistics: GetStat(),\r\n ...action.payload\r\n }, ...state.classrooms]\r\n }\r\n case EDIT_CLASSROOM:\r\n return {\r\n ...state,\r\n classrooms: state.classrooms.map(classroom => {\r\n if (classroom.id === action.payload.id) {\r\n return {...classroom, ...action.payload.info}\r\n }\r\n return classroom\r\n })\r\n }\r\n case ADD_USER_TO_CLASSROOM:\r\n return {\r\n ...state,\r\n classrooms: state.classrooms.map((classroom) => {\r\n if (classroom.id === action.payload.classroomId) {\r\n if (classroom.students.findIndex(s => s === action.payload.userId) < 0) {\r\n classroom.students.push(action.payload.userId)\r\n }\r\n }\r\n return classroom\r\n }),\r\n loading: false,\r\n };\r\n case DELETE_USER_FROM_CLASSROOM:\r\n return {\r\n ...state,\r\n classrooms: state.classrooms.map((classroom) => {\r\n if (classroom.id === action.payload.classroomId) {\r\n const newStudents = classroom.students.filter(s => s !== action.payload.userId);\r\n return {...classroom, students: newStudents}\r\n }\r\n return classroom\r\n }),\r\n }\r\n case ADD_TEST_TO_CLASSROOM:\r\n return {\r\n ...state,\r\n classrooms: state.classrooms.map((classroom) => {\r\n if (classroom.id === action.payload.classroomId) {\r\n classroom.tests = [{id: action.payload.testId, progress: 0, attempts: 0, expired: \"\"},\r\n ...classroom.tests]\r\n }\r\n return classroom\r\n }),\r\n }\r\n case DELETE_TEST_FROM_CLASSROOM:\r\n return {\r\n ...state,\r\n classrooms: state.classrooms.map((classroom) => {\r\n if (classroom.id === action.payload.classroomId) {\r\n const newTests = classroom.tests.filter(t => t.id !== action.payload.testId)\r\n return {...classroom, tests: newTests}\r\n }\r\n return classroom\r\n }),\r\n }\r\n case CREATE_NEW_TEST:\r\n const maxId = state.tests.reduce(reducer, 0) + 1;\r\n return {\r\n ...state,\r\n tests: [...state.tests,\r\n {id: maxId, type: TESTS_TYPES.MY, name: \"\", questions: [], ...action.payload}\r\n ]\r\n }\r\n case EDIT_TEST:\r\n return {\r\n ...state,\r\n tests: state.tests.map(test => {\r\n if (test.id === action.payload.id) {\r\n return {...test, ...action.payload.info}\r\n }\r\n return test\r\n })\r\n }\r\n case CREATE_NEW_QUESTION:\r\n const maxId2 = state.questions.reduce(reducer, 0) + 1;\r\n return {\r\n ...state,\r\n questions: [...state.questions,\r\n {id: maxId2, type: QUESTIONS_TYPES.MY,\r\n question: \"\",\r\n valid_answers: [],\r\n answers: [], ...action.payload}\r\n ]\r\n }\r\n case EDIT_QUESTION:\r\n return {\r\n ...state,\r\n questions: state.questions.map(question => {\r\n if (question.id === action.payload.id) {\r\n return {...question, ...action.payload.info}\r\n }\r\n return question\r\n })\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {createStore, combineReducers, applyMiddleware} from 'redux';\r\nimport thunk from \"redux-thunk\";\r\nimport {UserReducer} from \"./reducers/user\";\r\nimport {TokenReducer} from \"./reducers/token\";\r\nimport {ContentReducer} from \"./reducers/content\";\r\nimport {StatisticsReducer} from \"./reducers/statistics\";\r\nimport {ClassroomReducer} from \"./reducers/classrooms\";\r\n\r\n// const store_name = \"MindON-user-v.1.0.0\";\r\n\r\nconst rootReducer = combineReducers({\r\n content: ContentReducer,\r\n user: UserReducer,\r\n token: TokenReducer,\r\n statistics: StatisticsReducer,\r\n classroom: ClassroomReducer,\r\n});\r\n\r\nexport default createStore(rootReducer, applyMiddleware(thunk));\r\n\r\n//\r\n// const logger = store => next => action => {\r\n// let result;\r\n// console.groupCollapsed(\"dispatching\", action.type);\r\n// console.log('prev state', store.getState());\r\n// console.log('action', action);\r\n// result = next(action);\r\n// console.log('next state', store.getState());\r\n// console.groupEnd();\r\n// return result;\r\n// };\r\n//\r\n// const saver = store => next => action => {\r\n// let result = next(action);\r\n// localStorage[store_name] = JSON.stringify(store.getState());\r\n// return result;\r\n// };\r\n//\r\n// const initStorage = (initialState = {}) => {\r\n// if (localStorage.getItem(store_name) !== null) {\r\n// return JSON.parse(localStorage.getItem(store_name));\r\n// } else {\r\n// localStorage.setItem(store_name, JSON.stringify(initialState));\r\n// return initialState;\r\n// }\r\n// };\r\n//\r\n// export const storeFactory = (initialState = {}) => (\r\n// applyMiddleware(logger, saver)(createStore)(\r\n// combineReducers({\r\n// user,\r\n// courses\r\n// }),\r\n// initStorage(initialState)\r\n// )\r\n// );\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\n// import {createBrowserHistory} from 'history';\r\n// import {useRouterHistory, Router, Route} from 'react-router';\r\nimport {BrowserRouter, HashRouter} from 'react-router-dom';\r\nimport MainRouter from \"./routers\";\r\nimport store from \"./store\"\r\nimport {Provider} from 'react-redux';\r\n// import { CookiesProvider as Provider } from 'react-cookie';\r\nimport Content from \"./components/Content\";\r\nimport {START_URL} from \"./constants\";\r\n\r\n\r\nReactDOM.render(\r\n // \r\n \r\n {/**/}\r\n {/**/}\r\n {/* Content({...props, children:*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*})}/>*/}\r\n \r\n {/* Content({...props, children: MainRouter})}/>*/}\r\n \r\n \r\n {/**/}\r\n {/* */}\r\n \r\n,\r\ndocument.getElementById('root'));\r\n\r\n"],"sourceRoot":""}