{"version":3,"sources":["services/codingCam.service.js","redux/reducer/taskPageSlice.js","services/groupChatService.js","services/locaStorage.service.js","services/chuyenDeService.js","redux/reducer/chuyenDeReducer-Chat.js","services/axios.service.js","redux/reducer/vatPhamSlice.js","services/vatPham.service.js","i18n.js","index.js","redux/reducer/spinnerReducer.js","redux/reducer/groupChatReducer.js","services/issueService.js","services/packageService.js","redux/reducer/themeReducer.js","components/ModalConfetti/giftSlice.js","redux/reducer/issueReducer-Chat.js","redux/reducer/dashboardSlice.js","utils/config.js","services/nguoiDungService.js","pages/Runcode/runcodeSlice.js","template/HeaderTask/loTrinhSlice.js","services/groupForTaskService.js","redux/reducer/groupForTaskReducer.js","services/nopbaiService.js","redux/reducer/MessageReducer-Chat.js","services/monHocService.js","redux/reducer/nopBaiReducer-Chat.js","redux/store.js","environments/environment.js","redux/reducer/chartReducer.js","pages/TestQuizPage/testDauVaoSlice.js","hook/useWindowSize.js","components/BtnLoginFacebook/LoginFacebook.js","components/BtnLoginFacebook/BtnLoginFacebook.js","pages/LoginPage/LoginPageDesktop.js","pages/LoginPageEmail/InputOtp.js","pages/LoginPageEmail/FormLogin.js","components/CustomInput/CustomInput.js","pages/LoginPageEmail/FormLoginEmailPhone.js","pages/LoginPage/LoginPageTablet.js","pages/LoginPage/LoginPage.js","components/BtnGoogleCapcha/BtnGoogleCapcha.js","pages/SignUp/SignUpDesktop/FormDieuKhoan.js","pages/SignUp/SignUpDesktop/ModalDieuKhoan.js","pages/SignUp/SignUpDesktop/ThongTinChinh.js","pages/SignUp/SignUpDesktop/UploadImg.js","pages/SignUp/SignUpDesktop/Modal_MinhHoa.js","pages/SignUp/SignUpDesktop/FormThongTinChiTiet.js","pages/SignUp/SignUpDesktop/ThongTinChiTiet.js","pages/SignUp/SignUpDesktop/HoanThanh.js","pages/SignUp/SignUpDesktop/StepSignup.js","pages/SignUp/SignUpDesktop/ContainerSigupDesktop.js","pages/SignUp/SignUpDesktop/SignUpDesktop.js","pages/SignUp/SignUpPage.js","components/ProgressLine/ProgressLine.js","components/ModalWrapper/ModalWrapper.js","components/Badge/flag.svg","components/Badge/Badge.js","components/TooltipContentNhiemVu/TooltipContentNhiemVu.js","hook/useLstLoTrinhUser.js","components/TitleTaskNavigate/TitleTaskNavigate.js","pages/TaskPage/CollapseTask/ItemTask.js","pages/ServicePakages/PackageBottomFix.jsx","pages/ServicePakages/PackageTable.jsx","pages/ServicePakages/PackageTableV2.jsx","hook/useLstImgTag.js","pages/TaskPage/CollapseTask/CollapseTask.js","pages/TaskPage/Banner/ItemBanner.js","pages/TaskPage/Banner/utils.js","components/ModalContentIcon/ModalContentIcon.js","components/ModalContentIcon/IconTichCucKinhNghiem.js","components/ModalContentIcon/utilities.js","pages/TaskPage/Banner/ItemNoiDungChuyenDe.js","pages/TaskPage/Banner/ThongKeTienDo.js","utils/ConvertNameUser.js","utils/GetHinhanh.js","components/BangXeHangThanhTich/ItemRanking.js","components/BangXeHangThanhTich/ItemTop.js","components/BangXeHangThanhTich/img/top1.png","components/BangXeHangThanhTich/img/top2.png","components/BangXeHangThanhTich/img/top3.png","components/ContentTab/ContentTab.js","components/BangXeHangThanhTich/BangXeHangThanhTich.js","pages/TaskPage/utils/utils.js","components/Spinner/index.js","pages/TaskPage/Banner/BannerTask.js","pages/TaskPage/TaskPage.js","components/ListRequireNopBai/AssignmentAndDetail.js","components/ListRequireNopBai/TimeRemain.js","components/VatPham/dollar.png","components/VatPham/ContentVatPham.js","components/ListRequireNopBai/ButtonGiaHanBaiTap.js","components/ListRequireNopBai/InformationProject.js","components/ButtonNopBai/ButtonNopBai.js","components/video/HLSSource.js","components/video/VideoPlayer.js","components/StepProjectInstruction/StepProjectInstruction.js","components/ListRequireNopBai/ContentGuide.js","components/ListRequireNopBai/ListRequireNopBai.js","components/ContentTabCol/ContentTabCol.js","components/ModalClickZoomImg/ModalClickZoomImg.js","pages/DetailScreenCapstone/DetailScreenCapstone.js","model/QuizzModel.js","components/Pratices/Practices_SingleChoice.js","components/Pratices/Praticees_ChooseAnserToFill.js","components/Pratices/Practices_HTML_CSS.js","components/Pratices/Practices_MultipleChoice.js","components/List4TypeQuiz/utils.js","components/List4TypeQuiz/Pratices/TabSubContentQuiz.js","components/List4TypeQuiz/Pratices/Practices_SingleChoice.js","components/List4TypeQuiz/Pratices/HightLightLanguage.js","components/List4TypeQuiz/Pratices/Praticees_ChooseAnserToFill.js","components/List4TypeQuiz/Pratices/Practices_HTML_CSS.js","components/List4TypeQuiz/Pratices/Practices_FillCodeToInput.js","components/List4TypeQuiz/Pratices/Practices_MultipleChoice.js","components/List4TypeQuiz/List4TypeQuiz.js","components/ContentTracNghiemExtra/TracNghiem_Start.js","components/ContentTracNghiemExtra/Navigate_Footer_PraticesResult.js","components/ContentTracNghiemExtra/ResultTracNghiem_Start.jsx","pages/DetailScreenQuizz/DaChamContent.js","pages/DetailScreenQuizz/sad.png","pages/DetailScreenQuizz/ButtonGiamThoiGian.js","pages/DetailScreenQuizz/LamLaiContent.js","pages/DetailScreenQuizz/DetailScreenQuizz.js","components/ToolTipCoin/ToolTipCoin.js","components/ItemCoin/ItemCoin.js","hook/usePrevious.js","components/ToolTipLevel/ToolTipLevel.js","components/BarTichCucKinhNghiem/BarTichCucKinhNghiem.js","template/HeaderTask/DropdownLoTrinh.js","hook/useDataCybersoft.js","template/HeaderTask/DropdowThongBao/IconReminder.js","template/HeaderTask/DropdowThongBao/DropdowThongBao.js","constants/httpServContant.js","template/utils.js","template/HeaderTask/HeaderTask.js","components/StackChat/components/PopupChat.jsx","components/DanhSachChat/DanhSachChat.jsx","hook/chatHub.js","utils/convertAlias.js","components/StackChat/components/TabsChat/TabChat.jsx","components/StackChat/components/TabsChat/TabsChat.jsx","components/StackChat/StackChat.jsx","components/FlashSale/FlashSale.jsx","template/HeaderBottom/HeaderBottom.jsx","components/ZaloOA/ZaloOA.js","components/FacebookChat/FBChat.js","components/NotificaSound/NotificationSound.jsx","template/SideNavigation/ItemSidebar.js","template/SideNavigation/SideNavigation.js","components/BreadCrumbNav/configBreadCrumb.js","components/BreadCrumbNav/CollapseTask/ItemTask.js","components/BreadCrumbNav/CollapseTask/CollapseTask.js","components/BreadCrumbNav/OutlineTaskList.js","components/BreadCrumbNav/BreadCrumbNav.js","template/HomeSidebar.js","template/HomeTemplate.js","utils/GenerateDataSetChart.js","pages/DashBroad/DailyXpByTime/DetailTaskByTime.js","pages/DashBroad/ChartStatisticTimeLearning/Static.js","pages/DashBroad/ChartStatisticTimeLearning/ChartStatisticTimeLearning.js","utils/GenerateDay.js","components/AvatarUserCicle/circleBg.png","components/AvatarUserCicle/AvatarUserCicle.js","pages/DashBroad/OverviewInfoUser/utils.js","pages/DashBroad/OverviewInfoUser/LootBox/LootBox.js","components/ModalConfetti/image/coin.png","components/ModalConfetti/ModalConfetti.js","components/TimeTracker/Heatmap.js","pages/DashBroad/OverviewInfoUser/ModalHeatMap/ModalHeatMap.js","pages/DashBroad/OverviewInfoUser/ChuoiDiemDanh.js","components/RankedSystem/columBg.png","components/RankedSystem/ItemRank.js","components/RankedSystem/RankedSystem.js","pages/DashBroad/OverviewInfoUser/ModalDanhHieu.js","pages/DashBroad/OverviewInfoUser/OverviewInfoUser.js","pages/DashBroad/ThanhTichDashBoard/ThanhTichDashBoard.js","pages/DashBroad/ListModule/ItemBanner.js","pages/DashBroad/ListModule/ListSkill.js","pages/DashBroad/ListModule/Item.js","pages/DashBroad/ListModule/ListModule.js","pages/DashBroad/DashboardDesktop.jsx","pages/DashBroad/Mobile/OverviewInforUserPhone/OverviewInfoUserPhone.jsx","pages/DashBroad/ListModule/ListModulePhone.js","pages/DashBroad/DasboardPhone.jsx","pages/DashBroad/Dashboard.js","pages/Discussion/DiscussionTopic/CardDiscussion.js","pages/Discussion/DiscussionTopic/DiscussionTopic.js","pages/Discussion/FrameComment/UserComment.js","pages/Discussion/FrameComment/FrameComment.js","pages/Discussion/Discussion.js","pages/Runcode/components/SelectLanguages/SelectLanguages.js","pages/Runcode/components/SelectThemes/SelectThemes.js","pages/Runcode/components/ProblemAndSolution/Content/ContentProblemText.js","pages/Runcode/components/runcode.constant.js","pages/Runcode/components/Testcase/Content/ContentTestCase.js","pages/Runcode/components/Testcase/Testcase.js","pages/Runcode/components/RuncodeEditor/RuncodeEditor.js","pages/Runcode/components/ProblemAndSolution/Content/ContentHintRunCode.js","pages/Runcode/components/ProblemAndSolution/ProblemAndSolution.js","pages/Runcode/components/UserGuilde/UserGuilde.js","pages/Runcode/components/ModelZoomImgRunCode.jsx","pages/Runcode/Runcode.js","pages/DetailExercise/DetailExercise.js","pages/LearnVideoPage/ScreenVideo.js","helper/watermark.js","pages/LearnVideoPage/SidebarLearnVideo.js","pages/LearnVideoPage/TabLearnVideo.js","pages/LearnVideoPage/LearnVideoPage.js","pages/PracticePage/DailyActive/util.js","pages/PracticePage/DailyActive/TitleItemPratice.js","pages/PracticePage/DailyActive/DailiActive.js","pages/PracticePage/LootBox/close.png","pages/PracticePage/LootBox/open.png","pages/PracticePage/LootBox/LootBox.js","pages/PracticePage/Bonous.js","pages/PracticePage/PracticePage.js","pages/DocumentPage/extractIcon.js","pages/DocumentPage/ItemPosted.js","pages/DocumentPage/DocumentPage.js","pages/BestPracticePage/ContentBestPractice/icon/saved.svg","pages/BestPracticePage/ContentBestPractice/icon/notSaved.svg","pages/BestPracticePage/ContentBestPractice/CardBestPractice.js","pages/BestPracticePage/ContentBestPractice/background.png","pages/BestPracticePage/ContentBestPractice/ListCardBestPracTice.js","pages/BestPracticePage/ContentBestPractice/ContentBestPractice.js","pages/BestPracticePage/BestPracticePage.js","pages/CompetitionsPage/ListCompetitions/CardCompetitions.js","pages/CompetitionsPage/ListCompetitions/ListCompetitions.js","pages/CompetitionsPage/CompetitionsPage.js","pages/LiveEventPage/LiveEventPage.js","pages/DetailDocumentPage/DetailPosted/DetailPosted.js","pages/DetailDocumentPage/CommentOfPosted/CommentOfPosted.js","pages/DetailDocumentPage/WriteComment/WriteComment.js","pages/DetailDocumentPage/DetailDocumentPage.js","pages/DetailCompetitionsPage/ContentChallenge.js","pages/DetailCompetitionsPage/TableTopUserChallenge.js","pages/DetailCompetitionsPage/DetailCompetitionsPage.js","pages/BestPraticeDetail/Banner.js","pages/BestPraticeDetail/Content.js","pages/BestPraticeDetail/BestPracticeDetail.js","pages/ShopPage/ShopFilter.js","pages/ShopPage/dollar.png","pages/ShopPage/effect.png","pages/ShopPage/ModalShopItem.js","pages/ShopPage/ShopList.js","pages/ShopPage/SwapItem/VatPhamGhep.js","pages/ShopPage/SwapItem/VatPhamMo.js","pages/ShopPage/SwapItem/SwapItem.js","pages/ShopPage/YourList.js","pages/ShopPage/ShopPage.js","components/Content_Quizz_DauVao/Navigate_Footer_Pratices_DaoVao.js","components/List4TypeQuiz/List4TypeQuizDauVao.js","components/Content_Quizz_DauVao/Content_Quizz_TestDauVao.js","pages/TestQuizPage/FormDieuKhoan.js","pages/TestQuizPage/FormEmail.js","pages/TestQuizPage/TestQuizPage.js","components/PraticesAnswer/Answer_Practices_ChooseAnser.js","components/PraticesAnswer/HightLightLanguage.js","components/PraticesAnswer/Answer_Praticees_ChooseAnserToFill.js","components/PraticesAnswer/Answer_Practices_HTML_CSS.js","components/PraticesAnswer/Answer_Practices_FillCodeToInput.js","components/PraticesAnswer/Answer_Practices_MultipleChoice.js","components/Navigate_Footer_ViewAnsers/Navigate_Footer_ViewAnsers.js","components/Content_Quizz/Content_Quizz_ViewAnswer.js","pages/TestQuizPage_ShowDapAn/TestQuizPage_ShowDapAn.js","pages/TuongNhaPage/VideoList/List.js","pages/TuongNhaPage/BagdesTab/BagdesTab.js","pages/TuongNhaPage/ListThanhTich/ListThanhTich.js","services/userWall.service.js","pages/TuongNhaPage/BtnFollow/BtnFollow.js","utils/markEmail.js","pages/TuongNhaPage/ListFollow/Item.js","pages/TuongNhaPage/ListFollow/ListFollow.js","pages/TuongNhaPage/ScoreStatic/TableScore.js","pages/TuongNhaPage/ScoreStatic/ScoreStatic.js","pages/TuongNhaPage/TabTuongNha.js","pages/TuongNhaPage/AvatarWall/AvatarWall.js","pages/TuongNhaPage/GuestHeader.js","pages/TuongNhaPage/Header.js","pages/TuongNhaPage/TuongNhaPage.js","pages/TaskPage/TaskPageTest.js","pages/LoginPageEmail/LoginPageDesktop.js","pages/LoginPageEmail/LoginPageTablet.js","pages/LoginPageEmail/LoginPageEmail.js","pages/TuongNhaPage/DetailWall/MainContent.js","pages/TuongNhaPage/DetailWall/Desc.js","pages/TuongNhaPage/DetailWall/Discuss/GuestLogin.js","pages/TuongNhaPage/DetailWall/Discuss/ItemReplied.js","pages/TuongNhaPage/DetailWall/Discuss/UserReplied.js","pages/TuongNhaPage/DetailWall/Discuss/InputComment.js","pages/TuongNhaPage/DetailWall/Discuss/Discuss.js","pages/TuongNhaPage/DetailWall/DetailWall.js","components/TimeTracker/TimeTracker.js","pages/BlogPage/BlogPage.jsx","pages/WorkShop/Collapse.js","pages/WorkShop/WorkShop.js","hook/auth.js","components/Form_Login_Demo/Form_Login_Demo.js","pages/LoginPage/LoginHocDemo.js","pages/ServicePakages/PackageDesktop.jsx","pages/ServicePakages/ListService.jsx","pages/ServicePakages/ViewPackage/DieuKhoanThanhToan.jsx","pages/ServicePakages/ConfirmPayment.jsx","components/BangXeHangThanhTich/BangXeHangThanhTichFree.js","pages/TaskPage/Banner/BannerTaskFree.js","pages/TaskPage/TaskPageFree.js","template/HeaderTaskFree/HeaderTaskFree.js","template/HomeSideBarFree.js","pages/ServicePakages/PaymentSuccess.jsx","pages/ServicePakages/CardLoTrinh/Static_Public_Desktop.js","pages/ServicePakages/CardLoTrinh/StaticDemo_Tablet.js","pages/ServicePakages/CardLoTrinh/StaticUser_Tablet.js","pages/ServicePakages/CardLoTrinh/Static_Public_Tablet.js","pages/ServicePakages/CardLoTrinh/Static_Public.js","pages/ServicePakages/CardLoTrinh/StartEndDay.js","pages/ServicePakages/CardLoTrinh/CardDetailLoTrinh.js","pages/ServicePakages/CardLoTrinh/IntroLoTrinh.jsx","pages/ServicePakages/CardLoTrinh/CardLoTrinh.jsx","pages/ServicePakages/ViewPackage/ViewPackage.jsx","pages/SignUp/SignUpDesktop/FormDieuKhoanPhone.js","pages/SignUp/SignUpFree/ThongTinChinhFree.js","pages/SignUp/SignUpFree/HoanThanhFree.js","pages/SignUp/SignUpFree/StepSignupFree.js","pages/SignUp/SignUpFree/ContainerSigupDesktopFree.js","pages/SignUp/SignUpFree/SignUpDesktopFree.js","pages/SignUp/SignUpPageFree.js","pages/SignUp/FormTuVan/FormThongTinChiTietTV.js","pages/SignUp/FormTuVan/ThongTinChiTietTV.js","pages/SignUp/FormTuVan/FormDieuKhoanTV.js","pages/SignUp/FormTuVan/ThongTinChinhTV.js","pages/SignUp/FormTuVan/HoanThanhTV.js","pages/SignUp/FormTuVan/StepTuVan.js","pages/SignUp/FormTuVan/ContainerTuVanDesktop.js","pages/SignUp/FormTuVan/FormTVDesktop.js","pages/SignUp/FormTuVan.js","App.js","redux/reducer/authReducer.js","redux/reducer/packageReducer.js","services/danhGiaIssue.js","redux/reducer/danhGiaReducer.js","routes/utitlity.js","services/baiHocService.js","utils/taskUtils.js","utils/HocDemoUtils.js","redux/reducer/stackChatReducer.js","services/http.service.js","pages/TuongNhaPage/tuongNhaSlice.js","utils/urlDomain.js","components/ContentTracNghiemExtra/Navigate_Footer_Pratices.js","redux/reducer/signUpReducer.js","components/StepProjectInstruction/util.js","constants/theme.js","pages/Runcode/utils.js"],"names":["servCodingCamp","constructor","postDangKyUser","data","setLoading","arguments","length","undefined","uri","AxiosServCodingCamp","postMethod","postDangKyUserV2","login","getDataTaskPage","maChuyenDe","concat","getMethod","loginTrialService","model","time","loginUserService","getDataTaskPageTrial","getDataTaskFreePage","getDetailTask","chuyenDeId","monHocId","taskId","getDetailTaskTrial","getListThongBao","getLichSuTuongTac","postHoanThanhHoc","postLayDanhSachHoanThanhHoc","postlayDanhSachHoangThanh","batDauLamBaiTap","postNopBaiTap","postNopLaiBaiTap","getLayThongTinBaiTap","getLayThongTinBaiTapNop","getLayDanhSachDiemDanh","postDiemDanh","getThongKeHocDashboard","thoiGian","getThongTinMoRong","getBestPractice","postToggleSaveBestPratice","option","postViewsBestPratice","getListPratice","postThayDoiMucTieuHoc","getDocumentByOption","getListCompetition","getXepHangTong","loai","getDataChartThongKe","top","getThongKeTask_ThoiGian","chuyeDeId","getXepHangTheoChuyenDe","getXepHangTheoChuyenDeFree","id","getDanhSachVatPham","ghepVatPham","vatPhamId","muaVatPham","homDoCuaBan","loaiVatPham","getDataBaiTest","type","getDataBaiTestAdmin","getDataRunCodeById","axios","get","putNopBaiTestDauVao","putMethod","checkTrangThaiHint","moHint","moHintPratice","checkTrangThaiHintPractice","getThongTinTuongNha","userId","pageIndex","postMoHopQuaPratice","luyenTapId","point","getDetailVideoWall","nopBaiId","getBinhLuanVideo","binhLuanId","postCommentVideo","trangThaiId","postTangViewVideo","BASE_URL_CODINGCAMP","post","checkFollow","toggleFlollow","status","toogleLikeVideo","toogleSaveVideo","chiaTaskCapstone","layLotrinhUser","layAllChuyenDeTrial","getCheckGmail","gmail","getListThanhTich","getUrlVideoRecord_FPT","noiDung","getUrlVideo_FPT","getUrlVideoSolution_FPT","layMocHuyHieu","postTimeHoatDong","postDPutNguoiDung","getNguoiDungById","getFileFtpCyberLearn","getDataTaskPageAction","createAsyncThunk","async","thunkAPI","content","error","history","push","message","warning","getDataTaskPageTrialAction","getDataTaskPageFreeAction","values","email","matKhau","er","taskPageSlice","createSlice","name","initialState","dataTaskPage","loading","reducers","extraReducers","fulfilled","state","action","payload","pending","rejected","actions","GET_PATH","groupChatService","getListGroupChat","http","addGroupChat","DSUser","getGroupChatById","groupChatId","editGroupChat","dsUser","put","delGroupChat","delete","getGroupChatByDSChat","dschat1","gftid","JSON","stringify","dschat","encodeURIComponent","getGroupChatByChuyenDeId","params","getGroupChatBot","sendGroupChatBot","obj","BaseStorage","_key","set","value","dataString","localStorage","setItem","this","key","getItem","parse","remove","removeItem","localStorageServ","ACCESS_TOKEN","USER_INFOR","USER_DEMO","USER_TOUR","TIME_DEMO","CODE_DEMO","TIME_LOGIN","NUOCNGOAI_DEMO","LUCKY_WHEEL","LUCKY_WHEEL_NEW","MODE_THEME","DATA_DETAIL_PAGE_CAPS","DATA_LEARN_VIDEO_PAGE","DATA_LEARN_QUIZ_PAGE","DATA_LEARN_RUNCODE_PAGE","DATA_LEARN_BAI_TAP_PAGE","ACTIVE_INDEX_NAV","REFER_LINK","REGIS_PACKAGE","INFOR_SIGNUP","KHOA_HOC","super","clearLocalStorage","clear","accessToken","userInfo","userDemo","userTour","timeDemo","codeDemo","timeLogin","nuocngoaiDemo","luckyWhell","luckyWhellNew","modeTheme","dataDetailPageCaps","dataLearnVideoPage","dataLearnQuizPage","dataLearnRunCode","dataLearnBaiTaiTapPage","activeIndexNav","referLink","regisPackage","inforSignUp","khoahoc","chuyenDeService","layDanhSachChuyenDe","getChuyenDeHocVienDK","tag","chuyenDeReducer","arrChuyenDe","arrTag","DSChuyenDeMentorPhuTrach","DSChuyenDeHocVienDangKy","lstCDByTag","getChuyenDeAction","getListTagAction","getDSChuyenDeMentorPhuTrach","getDSChuyenDeHocVienDangKy","getLstByTag","getChuyenDeApi","result","dispatch","console","log","getDSChuyenDeHocVienDangKyApi","_rs$data","rs","getLstByTagApi","_rs$data2","AxiosService","baseURL","getAxiosConfig","_token","_localStorageServ$use","axiosConfig","headers","token","apiKey","removeAxiosConfig","iKeapy","handleError","err","_err$response","response","axiosInstance","req","Axios","create","handleFlow","patchMethod","patch","deleteMothod","method","store","set_request_spinner_started","Promise","resolve","reject","then","res","set_request_spinner_ended","isSuccess","catch","AxiosServ","getVatPhamUserAction","servVatPham","vatPhamSlice","vatPhamUser","showItemGiamThoiGianQuiz","showItemGiamThoiGianBaiTap","moHopQua","giamThoiGianChoQuiz","giamThoiGianChoBaiTap","getLang","resources","en","translation","translationEN","vi","translationVI","i18n","use","Backend","initReactI18next","init","fallbackLng","whitelist","debug","interpolation","escapeValue","queryClient","QueryClient","ReactDOM","render","_jsx","QueryClientProvider","client","children","Provider","I18nextProvider","App","document","getElementById","spinnerSlice","count","isLoading","groupChatReducer","groupChats","groupChatsByChuyenDe","chats","chatBots","lastGroupChat","danhSachChat","noiDungChat","ngayTao","groupForTaskId","issueId","lastChat","joinRoom","room","taskid","joinRoom2","getGroupChatByDsChat","map","gc","jsonB","flat","getGroupChatByDsChatByChuyenDeId","setChats","addUserId","setJoinRoom","setJoinRoom2","setChatBot","getChatBot","sendChatBotApi","issueService","getAllIssue","getIssueById","postIssue","putIssue","delIssue","getAllIssueByMentor","mentorId","getIssueHocVienTheoTungChuyenDeService","packageService","getPackageByIdCourse","sendRedirectONEPAY","ghiDanhPackage","getPackageService","insertTrackingPayment","sendMail","addLeadformCybersoft","theme","LIGHT_MODE","setModeTheme","phanThuongSlice","phanThuong","setPhanThuong","issueReducer","issueState","hocVienId","title","trangThai","issuesMentorPhuTrach","issueHocVienTheoTungChuyenDe","getIssueAllMentorPhuTrach","setIssueState","getIssueHocVienTheoTungChuyenDe","getIssueHocVienTheoTungChuyenDeApi","putoptionalApi","statisChartArr","labelChart","topUsers","tichCuc","hocGioi","capDo","danhSachDeadline","initialDemoTaskDeadline","khoaDangHoc","allItems","yourItems","dialogItem","isShow","canBuyItem","dataItem","listImgTag","getYoursItemAciton","httpServ","getYoursItems","dashboardSlice","setTopUpser","setDanhSachDeadline","setKhoaDangHoc","setAllItem","setYourItem","setDialogItem","setListImageTag","setStatisChartArr","setLabelChart","config","setCookie","days","expires","date","Date","setTime","getTime","toUTCString","cookie","getCookie","nameEQ","ca","split","i","c","charAt","substring","indexOf","getStore","setStore","setStoreJson","json","getStoreJson","removeStore","USER_LOGIN","API_URL_DOMAIN","timeout","interceptors","request","alert","nguoiDungService","getDanhSachMentor","dangNhap","layThongTinUser","getNguoiDungPhanTrang","pageSize","maNhomQuyen","filter","tuKhoa","deleteNguoiDung","updateNguoiDung","dangKyNguoiDung","checkPassNguoiDung","layDsNguoiDungByString","ds","GetDSByMentorIdService","layDsNguoiDungChuyenDe","checkSubmitDataRuncode","url","Accept","checkAnswers","runcodeSlice","dataRuncode","testCaseRuncode","resetResultTestCase","startLoadingRunCode","endLoadingRunCode","builder","addCase","loTrinhSlice","lisLoTrinh","setListLoTrinh","selectListLoTrinh","groupForTaskService","getDsGroupForTaskHocVienService","groupForTaskReducer","dsGroupForTaskHocVien","groupForTaskViewMentorModel","groupForTask","danhSachHocVien","isDone","maLoai","baiHoc","ghiChu","moTa","tenBaiHoc","thoiLuong","xemDemo","currentRequire","requireId","ketQua","hint","solution","videoSolution","requires","requireForStudents","checkRequireForStudents","arrDanhSachHocVien","arrDSNguoiDung","thongTinMentor","avatar","hoTen","soDt","urls","GetGroupForTaskByMentorId","getGroupForTask","newds","e","trim","getBaiHoc","setCurrentRequire","setRequires","newRequire","setRequireForStudentsByJson","getTodate","toISOString","slice","sst","newRequireForStudent","require","hvId","studentId","deadline","daXoa","setRequireForStudentByTaskId","putRequireForStudent","index","findIndex","getDsNguoiDung","arr","sort","a","b","getThongTinMentor","getDsGroupForTaskHocVienAction","layDsNguoiDungByStringApi","getDsGroupForTaskHocVienApi","messageReducer","description","setMessage","nopBaiReducer","NopBaiState","loaiModule","baiLam","diem","hanNopBai","nguoiCham","nguoiDungId","nhanXet","nopBaiCurrent","dsNopBaiByGroup","dsNopBaiByMentorId","dsNopBaiByMentorIdViewMentor","dsbailamtheoids","dsHocVienByMentorId","dsMonHocByChuyenDe","setNopBaiState","getDsNopBaiByGroup","getNopBaiCurrent","GetDsNopBaiByMentorId","GetNopBaisByNguoiDungViewModel","GetDSByMentorId","GetMonHocsByListId","configureStore","reducer","chart","chartReducer","signUp","signUpReducer","spinner","spinnerReducer","themeReducer","authUser","authReducer","user","testDauVaoSlice","giftSlice","groupChat","issue","chuyenDe","nopBai","tuongNhaSlice","stackChatReducer","danhGiaReducer","packageReducer","devTools","process","environment","baseUrl","faceBookAppId","env","production","enableCheat","version","chartSlice","info","setDataTestDauVao","useWindowSize","windowSize","setWindowSize","useState","widthWindow","window","innerWidth","heightWindow","innerHeight","useEffect","handler","addEventListener","removeEventListener","FacebookLogin","_ref","appId","responseFacebook","FB","script","createElement","src","onload","autoLogAppEvents","xfbml","body","appendChild","className","onClick","handleFBLogin","authResponse","api","fields","scope","publicIp","BtnLoginFacebook","isPhone","getCurrentDay","moment","format","location","reload","setMessge","thongTinUser","setThongTinUser","facebookId","diachiIp","isLogin","setIsLogin","useDispatch","setAppId","_jsxs","LoginFacebook","v4","codingfServ","removeDemoUser","setUserInfor","href","Modal","visible","width","closable","cancelButtonProps","hidden","onOk","onChange","target","LoginPageDeskTop","alt","Lottie","loop","animationData","login_bg","style","height","InputOtp","formValue","isDisableResent","setIsDisableResent","countdown","setCountdown","rendererTimer","_ref2","hours","minutes","seconds","handleResetnt","toast","success","Form","layout","labelCol","span","wrapperCol","initialValues","remember","onFinish","opt","onFinishFailed","errorInfo","autoComplete","Item","label","rules","required","Input","Countdown","now","renderer","onComplete","FormLogin","isShowOtp","setIsShowOtp","setformValue","Password","CustomInput","placeholder","isRead","props","isFocused","setIsFocused","hasValue","setHasValue","onFocus","handleFocus","onBlur","readOnly","FormLoginEmailPhone","textAlign","LoginPageTablet","Desktop","useMediaQuery","minWidth","Tablet","maxWidth","LoginPage","_ref3","_Fragment","BtnGoogleCapcha","GoogleReCaptchaProvider","reCaptchaKey","language","FormDieuKhoan","handleOpenModal","congViecHienTai","setCongViecHienTai","form","useForm","setFieldsValue","congViecHienTai1","luongMongMuon","Option","Select","currentStep","useSelector","isVietNam","setIsVietNam","subFormHocVien","validator","_","isNaN","max","min","sm","xl","newUserInfor","sdt","soDT","splice","join","thongTinMoRong","noiCongTacHienTai","noiCongTac","congViecHienTai2","congViecHienTai3","hoTenPH","emailPH","soDTPH","getCheckSDT","setCurrentStep","Radio","Group","defaultValue","renderFormPhuHuynh","compact","valuePropName","Checkbox","offset","md","Button","htmlType","ModalDieuKhoan","isShowDieuKhoan","handleCloseModal","onCancel","footer","m","listStyleType","ThongTinChinh","setIsShowDieuKhoan","UploadImg","Component","previewVisible","previewImage","previewTitle","fileList","handleCancel","setState","handlePreview","file","preview","reader","FileReader","readAsDataURL","onerror","getBase64","originFileObj","lastIndexOf","handleChange","event","listImg","beforeUpload","bodyFormData1","FormData","bodyFormData2","append","hadleGetImgAfterConver","isJpgOrPng","isLt2M","size","uploadButton","PlusOutlined","marginTop","getValueFromEvent","Array","isArray","validateTrigger","Upload","customRequest","onSuccess","setTimeout","listType","onPreview","Modal_MinhHoa","isModalVisible","setIsModalVisible","showModal","handleOk","FormThongTinChiTiet","listLoTrinh","listCMND_IMG","setListCMND_IMG","getMaVaTenLoTrinh","namSinh","hinhCmnd","facebookUrl","soCmnd","predictiveIndexRequire","predictiveIndex","maGioiThieu","DatePicker","toLowerCase","prev","ThongTinChiTiet","HoanThanh","StepSignup","Mobile","Step","Steps","current","ContainerSigupDesktop","renderConTentStep","SignUpDesktop","root","documentElement","classList","DARK_MODE","qs","SignUpPage","reffer","search","ignoreQueryPrefix","listColor","blue","filledColor","unfilledColor","red","yellow","ProgressLine","percent","witdh","color","background","boxShadow","ModalWrapper","icon","isModalOpen","setIsModalOpen","contentWithProps","React","cloneElement","bodyStyle","borderRadius","overflow","Badge","right","flagImg","TooltipContentNhiemVu","maLoaiNhiemVu","nhiemVu","typeTaskIcon","nhiemVuColor","useLstLoTrinhUser","shouldActivateQuery","isDemoUser","useMemo","checkDemoUser","useParams","useQuery","queryKey","queryFn","kichHoat","staleTime","cacheTime","refetchOnWindowFocus","retry","enabled","useLstLoTrinh","useLstLoTrinhDangHoc","TitleTaskNavigate","task","selectThongTinMoRong","navigate","useNavigate","isLearning","checkLearning","handleOpenTaiLieu","open","noiDungNhiemVu","markTaskAsCompleted","typeTask","TAILIEU","isAllow","truyCap","includes","navigatePageByTask","parentPage","tenNhiemVu","hoanThanhLabel","Tooltip","trigger","placement","arrowPointAtCenter","isIconColappse","renderTrangThaiBaiTap","BAITAP","trangThaiBaiTap","typeTrangThaiNop","CHO_CHAM","DA_CHAM","VIDEO","QUIZ","RUNCODE","ItemTask","iconIsDemo","class","iconIsFinish","hoanThanh","emal","emailFree","tongExp","tongCoin","PackageBottomFix","PackageTable","isCombo","arrPackageByCourse","setArrPackageByCourse","arrRender","setArrRender","arrRes","setArrRes","shouldShowSlider","forEach","item","existingItem","find","r","danhSachKhoaHoc","Slider","dots","infinite","slidesToShow","slidesToScroll","cssEase","arrows","idx","isBoder","hinhAnh","tenGoi","cd","idx1","_arrChuyenDe$find","cdName","tenChuyenDe","inf","thang","hocPhi","_arrChuyenDe$find2","PackageTableV2","Fragment","useLstImgTag","CollapseTask","dataContent","t","useTranslation","expandedRows","setExpandedRows","setHeight","soLuongHoanThanh","danhSachNoiDung","toggleRow","rowId","prevExpandedRows","notify","danhSachTag","tenMonHoc","item1","image","toFixed","AnimateHeight","duration","borderCollapse","loaiNhiemVu","HOMEWORK","RECORD","marginRight","cursor","colSpan","chiTiet","ct","padding","renderListBaiTap","listBaiTap","renderListRecord","_ref4","fontSize","ItemBanner","getThongKetChiTietChuyenDe","_chuyenDe$danhSachMon","_chuyenDe$danhSachMon2","tongMonHoc","danhSachMonHoc","tongVideo","tongNhiemVu","tongTracNghiem","tongDuAnCaps","monHoc","_monHoc$danhSachNoiDu","_monHoc$danhSachNoiDu2","_noiDung$noiDungNhiem","chuongHoc","_chuongHoc$noiDungBai","noiDungBaiHoc","tongBaiTap","arrayItemNoiDungChuyenDe","total","contentText","about","ModelContentIcon","desc","iconUp","iconDown","WrapperIcon","isUpPercent","percentChange","Math","floor","IconTichCuc","_useSelector","_useSelector2","phanTramTichCuc","phanTramKinhNghiem","tichCucToiDa","tichCucTang","phanTramTichCucKinhNghiem","IconKinhNghiem","_useSelector3","_useSelector4","kinhNghiem","kinhNghiemToiDa","kinhNghiemTang","Icon","iconNangDong","Trans","i18nKey","iconXp","iconXpHangNgay","iconChuoiDiemDanh","iconDiemDanh","iconTaskTheoTungHangMuc","iconKhoaHocTheoTungHangMuc","iconDuAnTheoTungHangMuc","iconSkillPyThon","iconSkillDotNet","iconSkillReactJs","iconSkillHtml","iconSkillCss","iconTongThoiGianHocTap","iconTongSoTracNghiem","iconTongSoRunCode","iconTongSoCapstone","iconTongSoDiem","iconChungNhanDotNet","iconChungNhanPython","iconChungNhanReact","iconCoin","coin_lottie","iconLevel","iconMonHocCuaChuyenDe","iconVideoCuaChuyenDe","iconNhiemVuCuaChuyenDe","iconTracNghiemCuaChuyenDe","iconRuncodeCuaChuyenDe","iconDuAnCuaChuyenDe","iconDashBoard","Level","Coin","Xp","NangDong","XpHangNgay","ChuoiDiemDanh","TaskTheoTungHangMuc","DiemDanh","KhoaHocTheoTungHangMuc","DuAnTheoTungHangMuc","SkillPyThon","SkillDotNet","SkillReactJs","TongThoiGianHocTap","TongSoTracNghiem","TongSoRunCode","TongSoCapstone","TongSoDiem","ChungNhanDotNet","ChungNhanPython","ChungNhanReact","iconTaskPage","SkillHtml","SkillCss","MonHocCuaChuyenDe","VideoCuaChuyenDe","NhiemVuCuaChuyenDe","TracNghiemCuaChuyenDe","RuncodeCuaChuyenDe","DuAnCuaChuyenDe","ItemNoiDungChuyenDe","extractIconModal","ThongKeTienDo","isChuyenDeIntern","thongKe","setThongKe","renderDetailTask","_thongKe$thongKeChiTi","iconArray","thongKeChiTiet","tongSoLuong","tieuDe","ConvertNameUser","string","_arrName","_arrName2","arrName","getHinhAnh","getHinhAnhFB","getHinhAnh2","ItemRanking","activeIndex","setActiveIndex","classNames","listTop","ItemTop","rank","transform","borderColor","ContentTab","paddingHeaderX","paddingHeaderY","paddingTabItemX","paddingTabItemY","backgroundHeader","borderHeader","Tabs","tabBarGutter","tabBarStyle","border","defaultActiveKey","d","TabPane","tab","BangXeHangThanhTich","heightList","btnFilter","isGetAll","listUser","setListUser","handleGetXepHang","CHUYEN_DE_INTERN","SpinnerComponent","Spin","tip","BannerTask","dataTask","contentNoiDung","tongNoiDung","contentPhanThuong","loaiChuyenDe","TaskPage","_dataTaskPage$danhSac","isCollapse","setIsCollapse","showAll","setShowAll","arrCyber","setArrCyber","dataDangHoc","setArrChuyenDe","displayedItems","connection","signalR","withUrl","configureLogging","Information","build","start","on","off","stop","metaData","linkMoTa","tenSanPham","handleShowMore","ItemPhanCong","_require$dsRequire","isFinish","setIsFinish","options","tenHocVien","dsRequire","AssignmentAndDetail","_assignment$listDsReq","assignment","setAssignment","listDsRequireHv","TimeRemain","trangThaiTongBaiTap","handleBatDauLamBaiTap","_err$err$response","_err$err$response$dat","givenDate","deadLine","today","diff","CHUA_LAM","DANG_LAM","ContentVatPham","_info$userInfo","onFetch","currentCoin","coin","tenVatPham","hanSuDung","chiPhi","HtmlParser","bgCoin","handleBuy","updateThongTinMoRongAction","ButtonGiaHanBaiTap","setData","fetchData","handleSuDungVp","daSoHuu","canMua","InformationProject","_trangThaiTongBaiTap$","detail","maNhiemVu","HET_HAN","ReactHtmlParser","styleBtn","left","ButtonNopBai","text","HLSSource","context","hls","Hls","componentDidMount","video","isSupported","loadSource","attachMedia","Events","MANIFEST_PARSED","play","componentWillUnmount","destroy","VideoPlayer","source","playerRef","useRef","load","Player","playsInline","fluid","isVideoChild","ControlBar","PlaybackRateMenuButton","rates","order","inputCaps","Dragger","StepProjectInstruction","orderNumber","getThongTinBaiTapNop","countRequire","indexThongTinNop","thongTinNop","thongTinBaiTap","arrFile","setArrFile","handleNopLaiBai","inputs","querySelectorAll","isValid","from","input","handleNopBai","createPayloadNopBai","navigatePageByTaskNext","multiple","accept","isZip","isLt1M","newArr","onDrop","listGuide","arrayBaiLam","currentIndex","replace","match","replacement","indexSquare","addInputToLayout","renderTrangThai","NOP_LAI","setSource","lstVideoHuongDan","huongDan","onTabClick","HINT","SOLUTION","SOLUTION_VIDEO","RESULT","ContentGuide","valueGuide","listStatus","handleBuyGuide","guide","maTieuDe","renderContentGuide","lstVideo","_lstVideo$","solutionCyberlearn","_lstVideo$index","Popconfirm","onConfirm","ListRequireNopBai","solutionCoin","videoSolutionCoin","hintCoin","setListStatus","fetchListStatus","currentUrl","isPracticePage","pratice","isTaskPage","typeId","servCheckHint","servMoHint","loaiHint","StepListRequireNopBai","minHeight","dataBuyHint","ContentTabCol","borderWidth","borderLeft","ModalClickZoomImg","modalVisible","setModalVisible","clickedImageUrl","setClickedImageUrl","handleClick","tagName","imageUrl","container","DetailScreenCapstone","_detailPage$noiDungNh","_detailPage$noiDungNh2","detailPage","setDetailPage","setTrangThaiTongBaiTap","listTabPane","setListTabPane","listRequire","noiDungBaiTap","createPayloadLayThongTinBaiTap","lengthArr","getListPanel","SingleChoice_Answer","cauTraLoi","convertDataQuizz","dataRaw","listQuestionRaw","question","maLoaiBaiTap","isCorrect","userAnsers","canClickNextQuestion","allQuestions","currentQuestionIndex","_allQuestions$current","isDisableNextBtn","typeQuestion","_allQuestions$current2","_allQuestions$current3","_allQuestions$current4","_allQuestions$current5","TabSubContentQuiz","anserOption","entities","alphabet","Practices_SingleChoice","handle_CheckSingleChoice","visited","decodeHTML","inPut","answers","ma","activeBtnArr","setActiveBtnArr","contentAnserOption","activeCss","activeItem","activeBtn","temp","onCopy","preventDefault","SyntaxHighlighter","dracula","codeTagPros","customStyle","lineHeight","wrapLines","lineProps","wordBreak","whiteSpace","outPut","HightLightLanguage","Practices_SingleChoiceToFill","handle_CheckFinll_IN_Blank","cauHoi","anser1","setstateAnser1","anser2","setstateAnser2","answerArr","setAnswerArr","dapAn","isRenderChooseBtn","SetIsRenderChooseBtn","SetActiveIndex","totalChossenBtn","totalChossenBtnLength","resetTextMonitor","answerEls","innerText","renderDataConvert","editor","querySelector","innerHTML","replaceAll","answerDiv","add","setActiveCss","indexActive","contains","nextBtnCss","tempAnserArr","Practices_HTML_CSS","handle_CheckFinll_IN_Blank_CSS","noiDungCss","inputCss","RegExp","Practices_FillCodeToInput","handleSetEnableBtn","handle_CheckFillInput","containerRef","inputEl","arrValue","el","userAnser","ref","showLineNumbers","Practices_MultipleChoice","handle_CheckMultipleChoice","cauhoi","List4TypeQuiz","setListQuestion","decrypt","cipherText","keyBytes","CryptoJS","enc","Utf8","iv","Hex","encrypted","Base64","AES","ciphertext","mode","CBC","pad","Pkcs7","toString","_userAnsers$","newCurrentQuestion","newAllQuestion","deCodeDA","every","arrRenderQuestion","keyIndex","TracNghiem_Start","setNextTask","setCurrentQuestsionIndex","scoreQuiz","setScoreQuiz","Navigate_Footer_Pratices","handleClickNextQuestion","isDisableBtn","listQuestion","Navigate_Footer_PraticesResult","handleClickPreQuestion","Progress","step","showInfo","strokeWidth","strokeColor","trailColor","handle_PostKetQua","ResultTracNghiem_Start","datares","noiDungBaiNop","nd","ans","DaChamContent","nextTask","bgAnimate","ButtonGiamThoiGian","fetchThongTinBaiNop","messsage","LamLaiContent","thoiGianCho","sty","sadIcon","baiNop","DetailScreenQuizz","setVisited","setThongTinBaiTap","nguoidungId","LAM_LAI","ToolTipCoin","mouseEnterDelay","mouseLeaveDelay","animation","overlayClassName","overlayStyle","NavLink","to","memo","ItemCoin","isShowEffect","setIsShowEffect","prevAmountCoin","usePrevious","fistRender","setFistRender","coin_jump","ToolTipLevel","BarTichCucKinhNghiem","DropdownLoTrinh","_arrCyber$data","menu","Menu","active","Dropdown","arrow","overlay","checkActiveNavlink","IconReminder","DropdowThongBao","allThongBao","newThongBao","daXem","handleFetch","getAllThongBao","handleChangStatusThongBao","getChangeStatusThongBao","as","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Items","thongBao","cssText","ngayThang","subItems","path","dataHeaderPackage","dataHeader","HeaderTask","GeneralIntroUser","_localStorageServ$use2","PopupChat","showDrawer","setArrow","dspopup","popup","setPopup","ActiveChat1","ActiveChat2","dataChat1","dataChat2","ActiveCurrent","ActiveChatBot","mergedArrow","pointAtCenter","opacity","areObjectsEqual","obj1","obj2","keys1","Object","keys","keys2","PushDataTabChat","ChangeActiveChatBot","updateDataChatBot","ChangeActiveChat1","ChangeActiveChat2","updateDataChat2","changeCurrentActive","updateDataChat1","dsMentor","UserOutlined","Panel","Collapse","random","DanhSachChat","closeDrawer","handleClickGroupChuyenDe","danhSachPopup","isObjectInArray","array","element","unshift","pop","getAllUserInChuyenDeApi","zIndex","display","transition","CloseOutlined","accordion","header","_issueHocVienTheoTung","shape","AuthContext","createContext","myRoom","myUser","messages","sendMessage","sendUsersConnected","closeConnection","changeConn","findConnection","changeMyRoomRef","getMyRoomRef","connection2","myRoom2","myUser2","sendMessage2","sendUsersConnected2","closeConnection2","changeConn2","findConnection2","changeMyRoomRef2","getMyRoomRef2","apiUrl","AuthProvider","myRoomRef","myRoomRef2","myUserIdRef","myUserIdRef2","setMessages","setConnection","setConnection2","handleGetGroupChat","dsChat","handleGetGroupChat2","returnTen","Values","userid","HubConnectionBuilder","LogLevel","userM","list","onclose","connectionId","userConnection","Number","invoke","HubConnection","toAliasString","str","toLocaleString","convertTime","dateTimeString","dateTime","hour","getHours","minute","getMinutes","formattedHour","period","TabChat","_dataDangHoc$find","_arrDSNguoiDung$","_data$tenBaiHoc","_data$tenChuyenDe","activeChat","conection","messageApi","contextHolder","useMessage","inputValue","setInputValue","checkImgGuest","setcheckImgGuest","checkImgUser","setcheckImgUser","groupChats2","groupChatsByChuyenDe2","chats2","lastGroupChat2","lastChat2","userId2","chatBot","dataChatBot","countTime","setCountTime","lastTime","setLastTime","setDsUser","dsMentorDanhGia","danhSachMentor","setRoom","setIssue","messageRef","checkTypeChat","issueChat","loadApi","scrollHeight","clientHeight","scrollTo","behavior","getGroupChatByDsChatByChuyenDeApi2","getGroupChatByDsChatByChuyenDeApi","getGroupChatByDsChatApi2","getGroupChatByDsChatApi","convertHoTen","showContentChat","mess","_convertHoTen","_convertHoTen2","UserSendId","Popover","Avatar","dangerouslySetInnerHTML","__html","Content","TimeCreate","selectedTags","setSelectedTags","openFillCode","setOpenFillCode","openBot","setOpenBot","contentBot","setContentBot","handleClearPopup","findObjectIndexInArray","isSameDate","dateA","currentDate","getFullYear","getMonth","getDate","handleInputChange","handleClearInput","IsDelete","UserChat","Id","newGC","_issueChat","issueStatus","objtesst","statusCode","putGroupChatApi2","postGroupChatApi2","putGroupChatApi","postGroupChatApi","groupTaskId","canCallAPI","code","setCode","bug","setBug","CheckIssue","danhSachMentorPhuTrach","_userM$userid","_userM$userid2","ApiCHat","mini","close","showFull","setShowFull","thisIssue","setThisIssue","ndDanhGia","setNDdanhGia","mentorDuocDanhGia","setMentorDuocDanhGia","handleChangeTabs","valueVote","setValueVote","chamBaiDungHan","chiaSeKienThuc","kienThucCao","nangDong","hoTroHocVien","thanThien","handleVote","newobj","changeDanhGia","setOpen","postDanhGia","MoreOutlined","MinusOutlined","disabled","SendOutlined","newIssue","handelUpdateIssue","CheckCircleOutlined","okText","itm","Rate","tooltips","rows","ShrinkOutlined","ArrowsAltOutlined","arrContent","lstW","startsWith","openContentCode","objbot","cnt","CheckableTag","backgroundColor","checked","fontFamily","TabsChat","numTab","setNumTab","setWidth","resize","onresize","StackChat","FlashSale","show","setShow","useLocation","HeaderBottom","showNav","setShowNav","hideTimeout","setHideTimeout","lastScrollTop","handleScroll","scrollTop","pageYOffset","clearTimeout","handleTouchStart","activeClassName","ZaloBtn","FBChat","FacebookProvider","chatSupport","NotificationSound","playSound","audioRef","playPromise","preload","ItemSidebar","isCollapsed","isActive","SideNavigation","routesBreadcrumb","breadcrumb","ModuleName","loTrinh","OutlineTaskList","BreadCrumbNav","tenTask","setTenTask","breadcrumbs","useBreadcrumbs","Breadcrumb","pathname","Header","Sider","Layout","checkChatMess","searchValue","HomeSidebar","setPlaySound","collapsed","setCollapsed","extractLayoutSideBar","collapsible","margin","paddingTop","Outlet","HomeTemplate","interval","setInterval","kiemTraThoiGian","thoiGianDaLuu","thoiGianHienTai","thoiGianHienTaiMilliseconds","parseInt","thoiGianDaLuuMilliseconds","clearInterval","gerateDataSetChart","arrData","canvas","gradient_bg_1","getContext","createLinearGradient","addColorStop","arrColor","userIndex","dataUser","dataShow","lstSoPhut","nameUser","fill","pointBackgroundColor","lineTension","cubicInterpolationMode","pointStyle","pointRadius","pointHoverRadius","fontColor","generateOption","statisArr","responsive","maintainAspectRatio","legend","position","labels","marggin","datasetStrokeWidth","pointDotStrokeWidth","scales","xAxes","grid","ticks","yAxes","beginAtZero","stepSize","suggestedMin","suggestedMax","plugins","align","usePointStyle","boxWidth","interaction","intersect","radius","yAlign","xAlign","DetailTaskByTime","_statis$","_statis$2","_statis$3","typeFilter","statis","setStatis","course","project","ModalContentIcon","Static","ChartStatisticTimeLearning","activeIndexFitler","setActiveIndexFiler","activeChartIndex","setActiveChartIndex","labelChartRedux","labeArr","handleChangeFilter","getDayName","idFilter","daysDate","setDate","tempt1","dayName","weekday","reverse","tempt2","tempt3","dayjs","Line","datasets","AvatarUserCicle","circleBg","letters","getCurrentWeekDay","listDiemDanh","startOfWeek","clone","startOf","weekDays","day","isToday","letter","getImgDanhHieu","LootBox","currentWeek","ModalConfetti","danhSachVatPham","coinBg","currentYear","monthLabels","HeatMapTimeOnline","setListDiemDanh","fetchListDiemDanh","dateParts","ngayDiemDanh","timeParts","Chart","weekLabels","startDate","endDate","rectRender","legendCellSize","panelColors","ModalHeatMap","renderDayOfTheWeek","listDays","ItemRank","_item$thanhTichCan","_item$vatPhamCan","_item$vatPhamCan2","_item$vatPhamCan3","_item$vatPhamCan4","_item$vatPhamCan5","owner","danhSachThanhTich","listVatPham","overlayInnerStyle","thanhTichCan","tt","number","tenThanhTich","Tag","vatPhamCan","paddingBottom","mauSac","dff","hinhDanhHieu","tenDanhHieu","RankedSystem","currentRank","ModalDanhHieu","danhHieu","setList","maskSize","maskImage","WebkitMaskImage","bsPrefix","OverviewInfoUser","_userInfo$danhHieu","_userInfo$danhHieu2","classnName","tenDanhHieuEN","ThanhTichDashBoard","thongKeChuyenDe","_typeTaskIcon$maLoai","_typeTaskIcon$maLoai2","ListSkill","listTag","ListModule","setLoad","DashboardDesktop","OverviewInfoUserPhone","ListModulePhone","DashboardMobile","Dashboard","CardDiscussion","dTopic","DiscussionTopic","UserComment","dataComment","role","FrameComment","dataFake","dataDiscussion","Discussion","SelectLanguages","setLanguages","filteredLanguages","init_code","some","_language","onSelect","lang","SelectThemes","setThemes","themes","ContentProblemText","question_title","easy","medium","hard","_level","problem","spellcheck","input_format","output_format","explanation","constraint_input","constraint_output","constraint_time","sample_input","sample_output","dapAnDung","dapAnSai","ContentTestCase","dataInput","dataOutput","actualOutput","Testcase","_question$test_case","renderIconTestCase","_testCaseRuncode$inde","_testCaseRuncode$inde2","test_case","testcase_id","_input","_output","RuncodeEditor","idCauHoi","disabledButton","setDisabledButton","increaseQuestionIndex","isShowNextQuestion","languages","fecthdata","editorRef","defaultCode","setDefaultCode","renderDefaultCode","formattedValue","_function","isJson","baiLamTracNghiem","onSubmitCorrect","assignmentData","getValue","submitAssignmentData","taskCompletionData","baiHocId","soPhutThucHien","spinning","Editor","languageEditor","onMount","monaco","tabSize","minimap","unwrapResult","ContentHintRunCode","callback","ProblemAndSolution","detailTask","defaultHint","setDefaultHint","defaultSolution","setDefaultSolution","formattedSolution","video_solution","UserGuilde","stopVideo","iframe","frameborder","allow","allowfullscreen","ModelZoomImgRunCode","Runcode","_question$vi","setDetailTask","arrIdRuncode","setArrIdRuncode","arrIdFinished","setArrIdFinished","questionIndex","setQuestionIndex","setQuestion","thoiGianBatDau","fectdata","newInitCode","base_code","_answer","isJsonString","getQuestion","decreaseQuestionIndex","question_id","levelClassName","SplitPane","defaultSize","minSize","maxSize","DetailExercise","lstBaiHoc","setLstBaiHoc","ScreenVideo","_baiHoc$content5","_baiHoc$content6","_baiHoc$content7","_baiHoc$content8","handleHoanThanhBaiHoc","handleChangeNext","handleChangePrevious","listBaiHoc","urlVideo","setUrlVideo","isDisableHoanThanh","seIsDisableHoanThanh","_baiHoc$content","_baiHoc$content2","_baiHoc$content3","layCyberLearn","_baiHoc$content4","videoCyberLearn","nuocNgoai","infor","dienThoai","myInterval","stringName","getElementsByClassName","ran","warterMark","insertAdjacentElement","bottom","setAttribute","isHoanThanh","viTri","defaultVisible","activeVideo","titleVideo","buttonHoanThanh","SidebarLearnVideo","handleChangeBaiHoc","activeID","toggle","maxHeight","isDaHoanThanh","isVideo","styleButtonVideo","styteButtonHoanThanh","styleText","TabLearnVideo","LearnVideoPage","setListBaiHoc","setBaiHoc","getListBaiHoc","isFristFetch","listData","tenChuong","chuongHocId","firstVideoIndex","payloadHoanThanhTask","btnCss","TitleItemPratice","btnTiepTucHoc","complete","DailiActive","dataPratice","isUsed","isDisabled","isOpen","setIsOpen","openBg","closeBg","Bonous","_phanThuong","pointDaNhan","currentPercent","PracticPage","setDataPratice","skillLanguage","extractSkillLanguage","skill","styleButton","fontWeight","ItemPosted","dataDocment","isLayoutGrid","renderInteractiveBar","luotXem","luotLike","luotTraLoi","img","renderSkill","userName","DocumentPage","setIsLayoutGrid","listDocument","setListDocument","handleOnListLayout","handleOnGridLayout","WebkitBackgroundClip","WebkitTextFillColor","backgroundClip","textFillColor","CardBestPractice","isSave","backgroundImage","backgroundRepeat","backgroundSize","handleToggleSave","notSavedIcon","savedIcon","handleViewsPratice","ListCardBestPracTice","ContentBestPractice","dataBestPractice","danhSachDaLuu","danhSachBestPractice","dataTab","BestPracticePage","setDataBestPractice","CardCompetitions","diamon","gift","participants","ListCompetitions","dataAll","view","CompetitionsPage","competion","setCompetion","LiveEventPage","DetailPosted","mainPost","tagSkill","loaiBaiViet","nguoiTao","nguoiDuyet","baiVietCha","luotVote","bookMark","s","CommentOfPosted","WriteComment","DetailDocumentPage","idDocument","detailDocument","setDetailDocument","arrContentChallenge","poin","ContentChallenge","isEnd","heightProcess","TableTopUserChallenge","DetailCompetitionsPage","Banner","BestPracticeDetail","dataDetail","setDataDetail","idBestPractice","ShopFilter","activeFilter","setActiveFilter","setOptions","borderBottom","ShopItem","squareBG","ModalShopItem","ShopList","setListVatPham","filteredVatPham","maNhom","VatPhamGhep","danhSachVatPhamGhep","VatPhamMo","handleMoHopQua","typeVatPham","SwapItem","_item$danhSachVatPham","soLuong","YourList","selectedIndex","setSelectedIndex","renderGridLayout","newList","gridContainer","ShopPage","Navigate_Footer_Pratices_DaoVao","maBaiTest","setloading","countCorrected","inforQuizz","soCauDung","noiDungBaiLam","luaChon","noiDungbaiLam","dataNopBai","linkNopBai","List4TypeQuizDauVao","arrDapAn","Content_Quizz_TestDauVao","handleSuccess","listNgonNgu","setListNgonNgu","FormEmail","TestQuizPage","isShowQuiz","setIsShowQuiz","Answer_Practices_SingleChoice","_question$noiDung","Answer_Practices_SingleChoiceToFill","answerDivs","listCauTraLoi","newItem","listDapAn","arrQuestion","Answer_Practices_HTML_CSS","Answer_Practices_FillCodeToInput","Navigate_Footer_ViewAnsers","handleChangeCurrentQuestion","ContentQuizz_ViewAnsers","Answer_Practices_MultipleChoice","containerTracNhiem","widthContainer","clientWidth","navigateFooter","rect","getBoundingClientRect","marginLeft","Portal","TestQuizPage_ShowDapAn","optionList","setOptionList","selectedOption","setSelectedOption","List","videoList","youtube","faker","datatype","rgb","xmlns","viewBox","stroke","strokeLinecap","strokeLinejoin","BagdesTab","profile","danhSachVideo","selectPersonalState","personal","newListVideo","danhSachVideoDaLuu","setPersonalState","ListThanhTich","listThanhTich","selectListThanhTich","lst","setlst","conv","dsnhom","thanhTich","_itemcuoi","_itemcuoi2","_item$","_itemcuoi3","_item$2","_itemcuoi4","_item$3","itemcuoi","soHuu","typeTrangThaiFllow","servUserWall","danhSachFllow","BtnFollow","isFllow","setIsFllow","fetchCheckFollow","handleFollowUser","maskEmail","localPart","domain","localPartLength","repeat","_user$danhHieu","ListFollow","listFllow","setListFllow","columns","dataIndex","TableScore","diemTrungBinh","thoiGianHoc","phanTramHoanThanh","Table","pagination","dataSource","danhSachSkill","ScoreStatic","renderListChuyenDe","_project$chiTietChuye","chiTietChuyenDe","TabTuongNha","searchParams","setSearchParams","useSearchParams","idUserLocal","activeKey","dangFollow","follow","AvatarWall","_profile$danhHieu","_profile$danhHieu2","GuestHeader","HeaderPersonalPage","TuongNhaPage","setListThanhTich","TaskPageTest","setDataTaskPage","dataHoanThanh","setDataHoanThanh","password","setPassword","getData","onSubmit","LoginPageEmail","MainContent","selectVideoWall","Desc","targetDate","ngayUp","daysDifference","GuestLogin","ItemReplied","tenNguoiBinhLuan","ngayBinhLuan","handleToggleLike","daLike","binhLuanChaId","getListBinhLuanServ","payloadComment","replyTo","commentStatus","setDataComment","UserReplied","listBinhLuan","setlistBinhLuan","setIsShow","handleViewMore","binhLuanCon","InputComment","selectDataComment","formRef","inputRef","focus","comment","setComment","preFixReply","payloadComent","TextArea","onKeyDown","autoSize","minRows","maxRows","ItemTodal","Discuss","idVideo","selectListBinhLuan","videoWall","getDetailVideoWallServ","daLuu","handleToggleSaveVideo","luotLuu","DetailWall","OnlineTimeTracker","onlineTime","setOnlineTime","updateOnlineTimeInterval","prevTime","handleBeforeUnload","soPhutHoatDong","formatTime","timeInSeconds","padTime","padStart","BlogPage","setNoiDung","param","page","end","flexGrow","Pagination","setVisible","listVideo","setListVideo","_res$data$content$tho","_res$data$content$tho2","thongTinChuongHoc","thongTinBaiHoc","centered","tenKhoaHoc","soLuotXem","handleGetVideoTrongNuoc","handleGetVideoNuocNgoai","WorkShop","listWorkShop","setListWorkShop","withAuth","Navigate","Form_Login_Demo","valuesForm","setValuesForm","handleGetValueForm","htmlFor","handleRemoveUser","test","postCheckUserDemoLogin","sodt","setInforLoginDemo","LoginPageDemo","PackageDesktop","ListService","DieuKhoanThanhToan","ConfirmPayment","ipAddress","setIpAddress","futureDate","setMonth","thisDate","toLocaleDateString","month","year","nextDate","ip_address","ip","check","setCheck","cellSpacing","cellPadding","borderTop","marginBottom","paddingLeft","bgcolor","paddingRight","classname","back","handleRedirect","currentURL","origin","arrKH","tenCombo","khoaHoc","soTien","ngayBd","ngayKt","BangXeHangThanhTichFree","BannerTaskFree","TaskPageFree","HeaderTaskFree","HomeSidebarFree","PaymentSuccess","vpc_AuthorizeId","vpc_Card","vpc_CardExp","vpc_CardNum","vpc_CardUid","vpc_Command","vpc_MerchTxnRef","vpc_Merchant","vpc_Message","vpc_OrderInfo","vpc_PayChannel","vpc_TransactionNo","vpc_TxnResponseCode","vpc_Version","vpc_BinCountry","vpc_SecureHash","vpc_Amount","setInfor","setIsLoading","paymentInfor","vpcAuthorizeId","vpcCard","vpcCardExp","vpcCardNum","vpcCardUid","vpcCommand","vpcMerchTxnRef","vpcMerchant","vpcMessage","vpcOrderInfo","vpcPayChannel","vpcTransactionNo","vpcTxnResponseCode","vpcVersion","vpcBinCountry","vpcSecureHash","vpcAmount","x","y","x1","x2","y1","y2","gradientUnits","Static_Public_Desktop","_loTrinh$info","loTrinhPublic","isBlackFridayDay","widthItem","arr1","totalTask","textTitle","textNumber","Static_Demo_Tablet","tongKhoa","tongBaiHoc","tongPhut","StaticUser_Tablet","tongBaiTapNop","Static_PublicTablet","StaticDemo_Tablet","Static_Public","ngayBatDau","ngayKetThuc","CardDetailLoTrinh","loTrinhDetail","percentPhut","soPhutHoanThanh","percentBaiTapNop","baiTapNopHoanThanh","percentTracNghiem","tracNghiemHoanThanh","totalDays","asDays","remainDay","dayDaHoc","percentDay","StartEndDay","IntroLoTrinh","isHoverActive","btn_tuVan","toUpperCase","CardLoTrinh","isLoadingTag","errorTag","isShowDate","_item$thongKeChuyenDe","_item$danhSachTag","renderTask","ViewPackage","refs","arrPackage","setArrPackage","cdDangHoc","setCdDangHoc","isloadTag","setChuyenDeId","isComBo","setIsCombo","taskFree","menuGoi","Link","smooth","hocPhiGiam","_ref5","Element","ref_Props","FormDieuKhoanPhone","khoa_hoc","thanks","setThanks","Authorization","URL","ThongTinChinhFree","HoanThanhFree","StepSignupFree","ContainerSigupDesktopFree","SignUpDesktopFree","SignUpPageFree","FormThongTinChiTietTV","ThongTinChiTietTV","FormDieuKhoanTV","getFieldValue","getCheckAccount","ThongTinChinhTV","HoanThanhTV","StepTuVan","ContainerTuVanDesktop","FormTVDesktop","idUser","newInfor","FormTuVan","createBrowserHistory","withAutomaticReconnect","MessengerCustomerChat","pageId","Toaster","HistoryRouter","Routes","Route","DaskBroad","PracticePage","authSlice","setTimeUserDemo","setThongTinMoRong","getArrPackageCourse","getArrPackage","danhGiaService","dsDanhGia","setDSdanhGia","CAPS","urlString","parentPath","createTaskIcon","HELPFRIEND","CHAT","TASK","DUAN","DISCUSS","dataUserDemo","tenBaiTap","ngayHetHan","hetHan","joinRoomCd","joinRoomCd2","setJoinRoomCd","getGroupChatByDsChat2","getGroupChatByDsChatByChuyenDeId2","setChats2","addGroupChat2","editGroupChat2","addUserId2","setJoinRoomCd2","getLoTrinhDaDangKI","getTatCaLoTrinh","getDetailKhoaHoc","getCheckUserDetailBaiHoc","idLoTrinh","getDanhSachBaiDaHoc","idKhoacHoc","idNguoiDung","getQandA_KhoacHoc","getInforUser","postCompletedBaiHoc","getDiemAndBaiTap","idBaiTap","getGiaHanBaiTapNop","getGiaHanBaiTapTracNghiem","getGiamThoiGianTracNghiem","getTrangThaiQuizz","idBaiHoc","getLamLaiTracNghiem","postStartBaiTapNop","postNopBaiTapNop","postKetQuaQuizz","getStatisChartDashboard","getStatisTopUser","getDanhSachDeadline","getKhoaDangHoc","getAllItems","getBuyItem","idVatPham","getAllDiemBaiTapUser","getLichSuHoatDong","getAllTypeLoTrinh","getTatCaBaiTapDaLam","getMuaItem","getCheckThoiGianHocDemo","soDienThoai","postUpCMND","postKetQuaLuckyWhell","postNhaUuDai","getReportLoTrinh","NguoiDungId","LoTrinhId","getLayDuongDanVideoDigitalService","fileName","getDetailRoadMap","getDanhSachCauHoiTestDauVao","getKiemTraEmailTestDauVao","setVideoWall","timmer","totalTime","_result$data","clearImmediate","SignUpSlice","maLoTrinh","nguonGioiThieu","dongYHoTroTimViec","truongHoc","tenTruong","tenCongTy","chucVu","capDanhHieu","gioiThieu","isShowModal","listCMND","listCauHoi","isJavaCourse","setImgCMND","setLoadingSigup","setListCauHoiDauVao","setIsJavaCourse","setSignUp","js","py","cpp","java"],"mappings":"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","file":"static/js/main.8858f0b1.chunk.js","sourcesContent":["import axios from \"axios\";\nimport { AxiosServCodingCamp, BASE_URL_CODINGCAMP } from \"./axios.service\";\n\n/* eslint-disable no-useless-constructor */\n\nclass CodingCampRequestService {\n constructor() { }\n postDangKyUser = (data, setLoading = true) => {\n const uri = `nguoidung/dang-ky-nguoi-dung`;\n return AxiosServCodingCamp.postMethod(uri, data, setLoading);\n };\n postDangKyUserV2 = (data, setLoading = true) => {\n const uri = `nguoidung/dang-ky-nguoi-dung-v2`;\n return AxiosServCodingCamp.postMethod(uri, data, setLoading);\n };\n login = (data, setLoading = true) => {\n const uri = \"nguoidung/facebook\";\n return AxiosServCodingCamp.postMethod(uri, data, setLoading);\n };\n getDataTaskPage = (maChuyenDe, setLoading = true) => {\n const uri = `data-main/${maChuyenDe}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n loginTrialService = (model, time) => {\n const uri = `nguoidung/loginTrial?time=${time}`;\n return AxiosServCodingCamp.postMethod(uri, model);\n };\n loginUserService = (model) => {\n const uri = `nguoidung/login-user`;\n return AxiosServCodingCamp.postMethod(uri, model);\n };\n getDataTaskPageTrial = (maChuyenDe, setLoading = true) => {\n const uri = `data-main/trial/${maChuyenDe}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n getDataTaskFreePage = (maChuyenDe, data, setLoading = true) => {\n const uri = `data-main/free/${maChuyenDe}`;\n return AxiosServCodingCamp.postMethod(uri, data, setLoading);\n };\n getDetailTask = (chuyenDeId, monHocId, taskId, setLoading = true) => {\n const uri = `data-main/${chuyenDeId}/${monHocId}/${taskId}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n getDetailTaskTrial = (chuyenDeId, monHocId, taskId, setLoading = true) => {\n const uri = `data-main/trial/${chuyenDeId}/${monHocId}/${taskId}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n getListThongBao = () => {\n const uri = `thongbao/laythongbao`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n getLichSuTuongTac = () => {\n const uri = `lichsutuongtac/laylichsu`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n postHoanThanhHoc = (data) => {\n const uri = \"lich-su-hoc-tap/hoan-thanh-hoc\";\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n postLayDanhSachHoanThanhHoc = (data) => {\n const uri = \"lich-su-hoc-tap/get-hoan-thanh-hoc\";\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n postlayDanhSachHoangThanh = (data) => {\n const uri = \"lich-su-hoc-tap/get-task-hoan-thanh\";\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n // nop bai tap\n batDauLamBaiTap = (data) => {\n let uri = \"nopbai/bat-dau-bai-tap\";\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n postNopBaiTap = (data) => {\n let uri = \"nopbai\";\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n postNopLaiBaiTap = (data) => {\n let uri = \"nopbai/nop-bai-lai\";\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n\n getLayThongTinBaiTap = (data) => {\n let uri = `nopbai/get-diem-bai-tap`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n getLayThongTinBaiTapNop = (data) => {\n let uri = `nopbai/get-diem-bai-tap-nop`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n\n // diem danh\n getLayDanhSachDiemDanh = () => {\n let uri = \"diemdanh/get-diem-danh-tuan\";\n return AxiosServCodingCamp.getMethod(uri);\n };\n postDiemDanh = () => {\n let uri = \"diemdanh\";\n return AxiosServCodingCamp.postMethod(uri);\n };\n getThongKeHocDashboard = (chuyenDeId, thoiGian) => {\n let uri = `thong-ke/thong-ke-hoc-tap-theo-ngay/${chuyenDeId}/${thoiGian}`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n // thong tin user : thà nh tÃch\n getThongTinMoRong = () => {\n let uri = \"lichsutuongtac/lay-thongtin-user\";\n return AxiosServCodingCamp.getMethod(uri);\n };\n\n // best practice\n getBestPractice = (chuyenDeId) => {\n let uri = `best-practice/${chuyenDeId}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n postToggleSaveBestPratice = (option, data) => {\n // remove: 0: lÆ°u bà i , 1 = xóa bà i lÆ°u\n let uri = `best-practice/save-best-practice/${option}`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n postViewsBestPratice = (data) => {\n // tang luot xem\n let uri = `best-practice/hoan-thanh-hoc`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n\n // luyện táºp\n getListPratice = (chuyenDeId) => {\n let uri = `practice/${chuyenDeId}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n // mục tiêu há»c\n postThayDoiMucTieuHoc = (data) => {\n let uri = `dangkyhoc/thay-doi-muc-tieu`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n\n // tà i liệu\n getDocumentByOption = (option) => {\n // option=0 : lấy tất cả\n // option = id in list : detail\n let uri = `/bai-viet/lay-baiviet/1/${option}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n\n // cuá»™c thi\n getListCompetition = () => {\n let uri = `/cuocthi/get-cuocthi/1`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n // xep hang tong\n getXepHangTong = (chuyenDeId = 1, loai = 0) => {\n let uri = `thong-ke/xep-hang-tong-chuyende/${chuyenDeId}/${loai}`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n // chart thong ke thoi gian hoc\n // ThoiGian: 0: Tuần , 1: ThángTop: true: lấy top 3, false : lấy theo user\n getDataChartThongKe = (thoiGian, top = false) => {\n const uri = `thong-ke/lay-thoi-gian-hoc/${thoiGian}/${top}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n getThongKeTask_ThoiGian = (chuyeDeId) => {\n const uri = `thong-ke/thong-ke-hoc-tap/${chuyeDeId}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n getXepHangTheoChuyenDe = (chuyenDeId, loai) => {\n const uri = `thong-ke/xep-hang-chuyende/${chuyenDeId}/${loai}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n getXepHangTheoChuyenDeFree = (id, chuyenDeId, loai) => {\n const uri = `thong-ke/xep-hang-chuyende-free/${id}/${chuyenDeId}/${loai}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n // thong ke task va thoi gian\n\n // váºt phẩm\n getDanhSachVatPham = () => {\n const uri = `vatpham/danh-sach-vatpham`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n ghepVatPham = (vatPhamId) => {\n const uri = `vatpham/ghep-vatpham/${vatPhamId}`;\n return AxiosServCodingCamp.postMethod(uri, false);\n };\n muaVatPham = (vatPhamId) => {\n const uri = `vatpham/mua-vatpham/${vatPhamId}`;\n return AxiosServCodingCamp.postMethod(uri);\n };\n homDoCuaBan = () => {\n let uri = `vatpham/hom-do-user`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n loaiVatPham = () => {\n let uri = `vatpham/loai-vatpham`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n // bà i test\n getDataBaiTest = (type) => {\n let uri = `bai-test/quiz-test/${type}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n getDataBaiTestAdmin = (type) => {\n let uri = `bai-test/quiz-test-all/${type}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n\n // runcode\n getDataRunCodeById = (id) => {\n let uri = `https://runcode.cyberlearn.vn/getQuestionID/${id}`;\n return axios.get(uri);\n };\n putNopBaiTestDauVao = (data, setLoading = true) => {\n const uri = \"bai-test/nopbaiTest\";\n return AxiosServCodingCamp.putMethod(uri, data, setLoading);\n };\n // hint\n checkTrangThaiHint = (data) => {\n const uri = \"lichsutuongtac/check-hint\";\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n moHint = (data) => {\n const uri = \"lichsutuongtac/mo-hint\";\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n moHintPratice = (data) => {\n const uri = \"lichsutuongtac/mo-hint-pratice\";\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n checkTrangThaiHintPractice = (data) => {\n const uri = \"lichsutuongtac/check-hint-practice\";\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n // tÆ°á»ng nhà \n getThongTinTuongNha = (userId, pageIndex) => {\n let uri = `nguoidung/get-thongtin-user/${userId}/${pageIndex}`;\n return AxiosServCodingCamp.getMethod(uri, true);\n };\n postMoHopQuaPratice = (luyenTapId, point) => {\n let uri = `practice/nhan-thuong/${luyenTapId}/${point}`;\n return AxiosServCodingCamp.postMethod(uri, {}, false);\n };\n getDetailVideoWall = (nopBaiId) => {\n let uri = `/tuong-tac-video/chi-tiet-video/${nopBaiId}`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n getBinhLuanVideo = (nopBaiId, binhLuanId) => {\n let uri = `tuong-tac-video/lay-binh-luan/${nopBaiId}/${binhLuanId}`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n postCommentVideo = (trangThaiId, data) => {\n let uri = `tuong-tac-video/binh-luan/${trangThaiId}`;\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n // tăng tÆ°Æ¡ng tác\n postTangViewVideo = (nopBaiId) => {\n let uri = `${BASE_URL_CODINGCAMP}/api/tuong-tac-video/them-view/${nopBaiId}`;\n return axios.post(uri);\n };\n\n // check follow\n checkFollow = (userId) => {\n let uri = `tuong-tac-video/check-follow/${userId}`;\n return AxiosServCodingCamp.postMethod(uri, {}, false);\n };\n toggleFlollow = (userId, status) => {\n let uri = `tuong-tac-video/follow-user/${userId}/${status}`;\n return AxiosServCodingCamp.postMethod(uri, {}, false);\n };\n\n toogleLikeVideo = (nopBaiId, status) => {\n let uri = `tuong-tac-video/like-video/${nopBaiId}/${status}`;\n return AxiosServCodingCamp.postMethod(uri, {}, false);\n };\n toogleSaveVideo = (nopBaiId, status) => {\n let uri = `tuong-tac-video/luu-video/${nopBaiId}/${status}`;\n return AxiosServCodingCamp.postMethod(uri, {}, false);\n };\n\n // like comment\n // rangThai\n // phân task0\n chiaTaskCapstone = (data) => {\n let uri = `requireforstudent/get-task-user`;\n return AxiosServCodingCamp.postMethod(uri, data);\n };\n layLotrinhUser = (id) => {\n let uri = `dangkyhoc/get-lo-trinh-user/?id=${id}`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n layAllChuyenDeTrial = () => {\n let uri = `chuyende/trial`;\n return AxiosServCodingCamp.getMethod(uri);\n }\n getCheckGmail = (gmail, setLoading = true) => {\n const uri = `nguoidung/email/${gmail}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n // thanhTich\n getListThanhTich = () => {\n const uri = `thanh-tich`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n getUrlVideoRecord_FPT = (noiDung, setLoading = true) => {\n const uri = `file/ftp-video-record/${noiDung}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n\n getUrlVideo_FPT = (noiDung, setLoading = true) => {\n const uri = `file/ftp-video/${noiDung}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n\n getUrlVideoSolution_FPT = (noiDung, setLoading = true) => {\n const uri = `file/ftp-video-solution/${noiDung}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n // huy hieu\n layMocHuyHieu = () => {\n const uri = `cauhinh/get-moc-huy-hieu`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n // lÆ°u time hoạt Ä‘á»™ng=\n postTimeHoatDong = (data) => {\n const uri = `diemdanh/time-hoat-dong`;\n return AxiosServCodingCamp.postMethod(uri, data, false);\n };\n postDPutNguoiDung = (data, setLoading = true) => {\n const uri = `nguoidung/post-put-nguoidung`;\n return AxiosServCodingCamp.postMethod(uri, data, setLoading);\n };\n getNguoiDungById = (id, setLoading = true) => {\n const uri = `nguoidung/${id}`;\n return AxiosServCodingCamp.getMethod(uri, setLoading);\n };\n\n\n // get video cyberlearn\n getFileFtpCyberLearn = (noiDung) => {\n return axios.get(`https://backend.cyberlearn.vn/api/file/ftp-video/${noiDung}`)\n }\n\n}\n\nconst servCodingCamp = new CodingCampRequestService();\n\nexport default servCodingCamp;","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { message } from \"antd\";\nimport { history } from \"../../App\";\nimport axios from \"axios\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nconst initialState = {\n dataTaskPage: {},\n loading: false,\n error: null,\n};\nexport const getDataTaskPageAction = createAsyncThunk(\n \"task/getDataTaskPage\",\n async (chuyenDeId, thunkAPI) => {\n try {\n const res = await servCodingCamp.getDataTaskPage(chuyenDeId);\n return res.data.content;\n } catch (error) {\n history.push(\"/\");\n message.warning(\"Bạn đã hết thá»i gian tham gia khóa há»c\");\n }\n }\n);\nexport const getDataTaskPageTrialAction = createAsyncThunk(\n \"task/getDataTaskPage\",\n async (chuyenDeId, thunkAPI) => {\n try {\n const res = await servCodingCamp.getDataTaskPageTrial(chuyenDeId);\n return res.data.content;\n } catch (error) {\n history.push(\"/\");\n message.warning(\"Bạn đã hết thá»i gian tham gia khóa há»c\");\n }\n }\n);\nexport const getDataTaskPageFreeAction = createAsyncThunk(\n \"task/getDataTaskPage\",\n async (chuyenDeId, thunkAPI) => {\n try {\n const values = {\n email: \"freeacc@gmail.com\",\n matKhau: \"111111\",\n };\n const res = await servCodingCamp.getDataTaskFreePage(chuyenDeId,values);\n return res.data.content;\n \n }\n catch(er){\n\n }\n }\n \n);\nconst taskPageSlice = createSlice({\n name: \"taskPageSlice\",\n initialState,\n reducers: {},\n extraReducers: {\n [getDataTaskPageAction.fulfilled]: (state, action) => {\n state.dataTaskPage = action.payload;\n state.loading = false;\n },\n [getDataTaskPageAction.pending]: (state) => {\n state.loading = true;\n },\n [getDataTaskPageAction.rejected]: (state, action) => {\n state.error = action.payload;\n state.loading = false;\n },\n },\n});\n\nexport const {} = taskPageSlice.actions;\nexport default taskPageSlice.reducer;\n","import { http } from \"../utils/config\";\n\nconst GET_PATH = \"/groupchat\";\n\nconst getListGroupChat = () => {\n return http.get(GET_PATH);\n};\n\nconst addGroupChat = (data,DSUser) => {\n return http.post(`${GET_PATH}?DSUser=${DSUser}`, data);\n};\n\nconst getGroupChatById = (groupChatId) => {\n return http.get(`${GET_PATH}/${groupChatId}`);\n};\n\nconst editGroupChat = (groupChatId, data, dsUser) => {\n return http.put(`${GET_PATH}/${groupChatId || data.id}?DSUser=${dsUser}`, data);\n};\n\nconst delGroupChat = (groupChatId) => {\n return http.delete(`${GET_PATH}/${groupChatId}`);\n};\n\nconst getGroupChatByDSChat = (dschat1, gftid) => {\n let dschat2 = JSON.stringify(dschat1);\n\n// Mã hóa chuá»—i JSON để sá» dụng trong query params\nlet dschat = encodeURIComponent(dschat1);\n // console.log(dschat, gftid)\n return http.get(`${GET_PATH}/getDsChat?dsChat=${dschat}&gftid=${gftid}`);\n};\n\nconst getGroupChatByChuyenDeId = (dschat, chuyenDeId) => {\n // console.log(dschat,chuyenDeId)\n return http.get(`${GET_PATH}/getDsChatByChuyenDeId`, { params: { dschat, chuyenDeId } });\n};\nconst getGroupChatBot = () => {\n // console.log(dschat,chuyenDeId)\n return http.get(`${GET_PATH}/chatBot`);\n};\nconst sendGroupChatBot = (obj) => {\n // console.log(dschat,chuyenDeId)\n return http.put(`${GET_PATH}/sendChatBot`,obj);\n};\n\nexport const groupChatService = {\n getListGroupChat,\n addGroupChat,\n getGroupChatById,\n editGroupChat,\n delGroupChat,\n getGroupChatByDSChat,\n getGroupChatByChuyenDeId,\n getGroupChatBot,\n sendGroupChatBot\n};\n","/* eslint-disable no-useless-constructor */\nclass LocalStorageKey {\n ACCESS_TOKEN = \"ACCESS_TOKEN\";\n USER_INFOR = \"USER_INFOR_TECH_X\";\n USER_DEMO = \"USER_DEMO\";\n USER_TOUR = \"USER_TOUR\";\n TIME_DEMO = \"TIME_DEMO\";\n CODE_DEMO = \"CODE_DEMO\";\n TIME_LOGIN = \"TIME_LOGIN\";\n NUOCNGOAI_DEMO = \"NUOCNGOAI_DEMO\";\n LUCKY_WHEEL = \"LUCKY_WHEEL\";\n LUCKY_WHEEL_NEW = \"LUCKY_WHEEL_NEW\";\n MODE_THEME = \"MODE_THEME\";\n DATA_DETAIL_PAGE_CAPS = \"DATA_DETAIL_PAGE_CAPS\";\n DATA_LEARN_VIDEO_PAGE = \" DATA_LEARN_VIDEO_PAGE\";\n DATA_LEARN_QUIZ_PAGE = \" DATA_LEARN_QUIZ_PAGE\";\n DATA_LEARN_RUNCODE_PAGE = \" DATA_LEARN_RUNCODE_PAGE\";\n DATA_LEARN_BAI_TAP_PAGE = \" DATA_LEARN_BAI_TAP_PAGE\";\n ACTIVE_INDEX_NAV = \"ACTIVE_INDEX_NAV\";\n REFER_LINK = \"REFER_LINK\";\n REGIS_PACKAGE = \"REGIS_PACKAGE\";\n INFOR_SIGNUP = \"INFOR_SIGNUP\";\n KHOA_HOC = \"KHOA_HOC\";\n}\n\nclass BaseStorage {\n key;\n\n constructor(_key) {\n this.key = _key;\n }\n\n set = (value) => {\n const dataString = JSON.stringify(value);\n localStorage.setItem(this.key, dataString);\n };\n\n get = () => {\n const dataString = localStorage.getItem(this.key);\n return !dataString ? null : JSON.parse(dataString);\n };\n\n remove = () => {\n localStorage.removeItem(this.key);\n };\n}\n\nclass LocalStorageService extends LocalStorageKey {\n constructor() {\n super();\n }\n\n clearLocalStorage = () => {\n localStorage.clear();\n };\n /**\n * access token storage\n */\n\n accessToken = new BaseStorage(this.ACCESS_TOKEN);\n\n /**\n * user info\n */\n\n userInfo = new BaseStorage(this.USER_INFOR);\n userDemo = new BaseStorage(this.USER_DEMO);\n userTour = new BaseStorage(this.USER_TOUR);\n timeDemo = new BaseStorage(this.TIME_DEMO);\n codeDemo = new BaseStorage(this.CODE_DEMO);\n timeLogin = new BaseStorage(this.TIME_LOGIN);\n nuocngoaiDemo = new BaseStorage(this.NUOCNGOAI_DEMO);\n luckyWhell = new BaseStorage(this.LUCKY_WHEEL);\n luckyWhellNew = new BaseStorage(this.LUCKY_WHEEL_NEW);\n modeTheme = new BaseStorage(this.MODE_THEME);\n dataDetailPageCaps = new BaseStorage(this.DATA_DETAIL_PAGE_CAPS);\n dataLearnVideoPage = new BaseStorage(this.DATA_LEARN_VIDEO_PAGE);\n dataLearnQuizPage = new BaseStorage(this.DATA_LEARN_QUIZ_PAGE);\n dataLearnRunCode = new BaseStorage(this.DATA_LEARN_RUNCODE_PAGE);\n dataLearnBaiTaiTapPage = new BaseStorage(this.DATA_LEARN_BAI_TAP_PAGE);\n activeIndexNav = new BaseStorage(this.ACTIVE_INDEX_NAV);\n referLink = new BaseStorage(this.REFER_LINK);\n regisPackage = new BaseStorage(this.REGIS_PACKAGE);\n inforSignUp = new BaseStorage(this.INFOR_SIGNUP);\n khoahoc = new BaseStorage(this.KHOA_HOC);\n}\n\nconst localStorageServ = new LocalStorageService();\n\nexport default localStorageServ;\n","import { http } from \"../utils/config\";\n\nconst GET_PATH = '/chuyende';\n\nconst layDanhSachChuyenDe = () => {\n return http.get(GET_PATH);\n}\n\nconst themChuyenDe = (data) => {\n return http.post(GET_PATH, data);\n}\nconst suaChuyenDe = (data) => {\n console.log(data)\n return http.put(`${GET_PATH}/${data.id}`, data);\n}\nconst xoaChuyenDe = (id) => {\n return http.delete(`${GET_PATH}/${id}`);\n}\nconst getChuyenDeMentorPhuTrach = (mentorId) => {\n return http.get(`${GET_PATH}/chuyendementorphutrach?mentorId=${mentorId}`)\n}\n\nconst getChuyenDeHocVienDK = ()=>{\n return http.get(`${GET_PATH}/cacChuyenDeHocVienDangKy`)\n}\nconst getChuyenDeByTag = (tag)=>{\n return http.get(`${GET_PATH}/tag/${tag}`)\n}\n\nexport const chuyenDeService = {\n layDanhSachChuyenDe,\n themChuyenDe,\n suaChuyenDe,\n xoaChuyenDe,\n getChuyenDeMentorPhuTrach,\n getChuyenDeHocVienDK,\n getChuyenDeByTag\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { chuyenDeService } from \"../../services/chuyenDeService\";\nimport { danhSachTagService } from \"../../services/danhSachTagService\";\n\nconst initialState = {\n arrChuyenDe: [],\n arrTag: [],\n DSChuyenDeMentorPhuTrach: [],\n DSChuyenDeHocVienDangKy: [],\n lstCDByTag: [],\n loading: false,\n};\n\nconst chuyenDeReducer = createSlice({\n name: \"chuyenDeReducer\",\n initialState,\n reducers: {\n getChuyenDeAction: (state, action) => {\n state.arrChuyenDe = action.payload;\n },\n getListTagAction: (state, action) => {\n state.arrTag = action.payload;\n },\n getDSChuyenDeMentorPhuTrach: (state, action) => {\n state.DSChuyenDeMentorPhuTrach = [...action.payload];\n },\n getDSChuyenDeHocVienDangKy: (state, action) => {\n state.DSChuyenDeHocVienDangKy = [...action.payload];\n },\n getLstByTag: (state, action) => {\n state.lstCDByTag = action.payload;\n }\n },\n});\n\nexport const {\n getChuyenDeAction,\n getListTagAction,\n getDSChuyenDeMentorPhuTrach,\n getDSChuyenDeHocVienDangKy,\n getLstByTag\n} = chuyenDeReducer.actions;\nexport default chuyenDeReducer.reducer;\n\n//--------- action async ------------\n\nexport const getChuyenDeApi = () => {\n return async (dispatch) => {\n try {\n const result = await chuyenDeService.layDanhSachChuyenDe();\n\n dispatch(getChuyenDeAction(result.data.content));\n } catch (er) {\n console.log(er);\n }\n };\n};\n\n// get danh sach tag\n\nexport const getListTagApi = () => {\n return async (dispatch) => {\n try {\n const result = await danhSachTagService.getDanhSachTag();\n\n dispatch(getListTagAction(result.data.content));\n } catch (er) {\n\n }\n };\n};\n\nexport const getDSChuyenDeMentorPhuTrachApi = (mentorId) => {\n return async (dispatch) => {\n const result = await chuyenDeService.getChuyenDeMentorPhuTrach(mentorId);\n dispatch(getDSChuyenDeMentorPhuTrach(result.data.content));\n };\n};\n\nexport const getDSChuyenDeHocVienDangKyApi = () => {\n return async (dispatch) => {\n try {\n const rs = await chuyenDeService.getChuyenDeHocVienDK();\n dispatch(getDSChuyenDeHocVienDangKy(rs?.data?.content));\n } catch (error) {\n \n }\n };\n};\nexport const getLstByTagApi = (tag) => {\n return async (dispatch) => {\n try {\n const rs = await chuyenDeService.getChuyenDeByTag(tag);\n dispatch(getLstByTag(rs?.data?.content));\n } catch (error) {\n \n }\n };\n};\n","import Axios from \"axios\";\nimport environment from \"../environments/environment\";\nimport {\n set_request_spinner_ended,\n set_request_spinner_started,\n} from \"../redux/reducer/spinnerReducer\";\nimport store from \"../redux/store\";\nimport localStorageServ from \"./locaStorage.service\";\nimport { API_URL_DOMAIN } from \"../utils/urlDomain\";\n\nexport class AxiosService {\n axios;\n axiosConfig;\n authService;\n constructor(baseURL) {\n this.axios = Axios.create({\n // baseURL: this.getBaseUrl(),\n baseURL: baseURL + \"/api\",\n });\n this.getAxiosConfig();\n this.baseURL = baseURL;\n }\n\n // getBaseUrl() {\n // return this.baseURL + \"/api\";\n // }\n\n getAxiosConfig = (_token) => {\n // const token = _token ? _token : localStorageServ.accessToken.get();\n this.axiosConfig = {\n headers: {\n token: localStorageServ.userInfo.get()?.token,\n apiKey: \"UPD124yRTWF124QJFweUaCYSECETBERS\",\n \"Content-Type\": \"application/json\",\n },\n };\n };\n\n removeAxiosConfig = () => {\n this.axiosConfig = {\n headers: {\n iKeapy: ``,\n \"Content-Type\": \"application/json\",\n },\n };\n };\n\n getMethod(uri, loading = true) {\n return this.handleFlow(this.axios.get(uri, this.axiosConfig), loading);\n }\n\n postMethod(uri, data, loading = true) {\n return this.handleFlow(this.axios.post(uri, data, this.axiosConfig), loading);\n }\n\n putMethod(uri, data, loading = true) {\n return this.handleFlow(this.axios.put(uri, data, this.axiosConfig), loading);\n }\n\n patchMethod(uri, data, loading = true) {\n return this.handleFlow(this.axios.patch(uri, data, this.axiosConfig), loading);\n }\n\n deleteMothod(uri, loading = true) {\n return this.handleFlow(this.axios.delete(uri, this.axiosConfig), loading);\n }\n\n handleFlow(method, loading = true) {\n loading && store.dispatch(set_request_spinner_started());\n return new Promise((resolve, reject) => {\n method\n .then((res) => {\n loading && store.dispatch(set_request_spinner_ended());\n\n resolve({\n data: res.data,\n status: res.status,\n isSuccess: true,\n });\n })\n .catch((err) => {\n loading && store.dispatch(set_request_spinner_ended());\n\n this.handleError(err);\n reject({\n err: err,\n });\n });\n });\n }\n\n handleError = (err) => {\n const status = err.response?.status;\n switch (status) {\n case 401:\n case 403:\n // window.location.assign(\"/login\");\n break;\n default:\n break;\n }\n };\n //\n axiosInstance = (req) => {\n this.axios(req, this.axiosConfig);\n };\n}\n\n\n\n// export let BASE_URL_CODINGCAMP = \"https://localhost:44366\";\n// export let BASE_URL_CODINGCAMP = \"https://localhost:5001\";\nexport let BASE_URL_CODINGCAMP = \"https://apimentor11.cybersoft.edu.vn\";\n\n\nexport const AxiosServCodingCamp = new AxiosService(BASE_URL_CODINGCAMP);\n\nexport const AxiosServ = new AxiosService(BASE_URL_CODINGCAMP);","import { createAsyncThunk, createSlice } from \"@reduxjs/toolkit\";\nimport servVatPham from \"../../services/vatPham.service\";\n\nconst initialState = {};\nexport const getVatPhamUserAction = createAsyncThunk(\"getHomDoUserAction\", async (thunkAPI) => {\n const response = await servVatPham.homDoCuaBan();\n return response.data.content;\n});\nconst vatPhamSlice = createSlice({\n name: \"vatPhamSlice\",\n initialState,\n reducers: {\n vatPhamUser: [],\n },\n extraReducers: {\n [getVatPhamUserAction.fulfilled]: (state, action) => {\n state.vatPhamUser = action.payload;\n },\n },\n});\n\nexport const {} = vatPhamSlice.actions;\n\nexport default vatPhamSlice.reducer;\n","import axios from \"axios\";\nimport { AxiosServCodingCamp } from \"./axios.service\";\n\n/* eslint-disable no-useless-constructor */\n\nclass VatPhamRequestService {\n constructor() {}\n\n showItemGiamThoiGianQuiz = () => {\n const uri = `vatpham/giam-time-quiz-item`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n showItemGiamThoiGianBaiTap = () => {\n const uri = `vatpham/mo-nop-bai-tap-item`;\n return AxiosServCodingCamp.getMethod(uri, false);\n };\n moHopQua = () => {\n const uri = `vatpham/su-dung-hop-qua`;\n return AxiosServCodingCamp.postMethod(uri, false);\n };\n homDoCuaBan = () => {\n let uri = `vatpham/hom-do-user`;\n return AxiosServCodingCamp.getMethod(uri);\n };\n giamThoiGianChoQuiz = (nopBaiId) => {\n let uri = `vatpham/giam-time-quiz/${nopBaiId}`;\n return AxiosServCodingCamp.postMethod(uri, false);\n };\n giamThoiGianChoBaiTap = (nopBaiId) => {\n let uri = `vatpham/mo-nop-bai-tap/${nopBaiId}`;\n return AxiosServCodingCamp.postMethod(uri, false);\n };\n}\n\nconst servVatPham = new VatPhamRequestService();\n\nexport default servVatPham;\n","\nimport i18n from 'i18next';\nimport Backend from 'i18next-http-backend';\nimport { initReactI18next } from 'react-i18next';\n\nimport translationEN from './locales/en/translation.json';\nimport translationVI from './locales/vi/translation.json';\n\nlet getLang = localStorage.getItem(\"lang\")\nif(!getLang)\n{\n localStorage.setItem(\"lang\",\"en\")\n}\n\n// the translations\nconst resources = {\n en: {\n translation: translationEN\n },\n vi: {\n translation: translationVI\n }\n};\n\ni18n\n .use(Backend)\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: !getLang ? 'en' : getLang,\n whitelist:['vi','en'],\n debug: true,\n interpolation: {\n escapeValue: false // not needed for react as it escapes by default\n }\n });\n\nexport default i18n;\n\n"," import ReactDOM from \"react-dom\";\n import { Provider } from \"react-redux\";\n import App from \"./App\";\n import \"./index.css\";\n import \"./index.scss\";\n import store from \"./redux/store\";\n import {\n QueryClient,\n QueryClientProvider,\n } from '@tanstack/react-query'\n\n import i18n from './i18n';\n import { I18nextProvider } from 'react-i18next';\n\n\n if (process.env.NODE_ENV === \"production\") {\n console.log = () => { };\n console.error = () => { };\n console.debug = () => { };\n }\n // Create a client\n const queryClient = new QueryClient()\n\n ReactDOM.render(\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <I18nextProvider i18n={i18n}>\n <App />\n </I18nextProvider>\n </Provider>\n </QueryClientProvider>\n ,\n document.getElementById(\"root\")\n );\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nconst initialState = {\n count: 0,\n isLoading: false,\n};\n\nexport const spinnerSlice = createSlice({\n name: \"Reducer\",\n initialState,\n reducers: {\n set_request_spinner_started: (state, action) => {\n state.isLoading = true\n ++state.count\n },\n set_request_spinner_ended: (state, action) => {\n if (--state.count === 0) { state.isLoading = false }\n }\n },\n});\nexport const { set_request_spinner_started, set_request_spinner_ended } = spinnerSlice.actions;\nexport default spinnerSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport jsonB from \"json-bigint\";\nimport { groupChatService } from \"../../services/groupChatService\";\nimport { getGroupChatBot } from \"./stackChatReducer\";\n\nconst initialState = {\n groupChats: [],\n groupChatsByChuyenDe: [],\n chats: [],\n chatBots:[],\n lastGroupChat: {\n id: 1,\n danhSachChat: \"\",\n noiDungChat: \"\",\n ngayTao: \"\",\n groupForTaskId: 0,\n chuyenDeId: 0,\n issueId: 0\n },\n lastChat: [],\n userId: 0,\n joinRoom: { room: \"\", taskid: 0 },\n joinRoom2: { room: \"\", chuyenDeId: 0 },\n};\n\nconst groupChatReducer = createSlice({\n name: \"groupChat\",\n initialState,\n reducers: {\n getGroupChatByDsChat: (state, action) => {\n state.groupChats = action.payload;\n console.log(state.groupChats && state.groupChats.length !== 0, \"task\");\n if (state.groupChats && state.groupChats.length !== 0) {\n state.chats = action.payload.map(gc =>\n jsonB.parse(gc.noiDungChat)\n ).flat();\n state.lastGroupChat = state.groupChats[state.groupChats.length - 1];\n const lastChat = [...jsonB.parse(state.lastGroupChat.noiDungChat)];\n state.lastChat = lastChat;\n }\n },\n getGroupChatByDsChatByChuyenDeId: (state, action) => {\n state.groupChatsByChuyenDe = action.payload;\n // console.log(state.groupChatsByChuyenDe && state.groupChatsByChuyenDe.length !== 0, 'chuyende');\n if (state.groupChatsByChuyenDe && state.groupChatsByChuyenDe.length !== 0) {\n state.chats = action.payload.map(gc =>\n jsonB.parse(gc.noiDungChat)\n ).flat();\n state.lastGroupChat = state.groupChatsByChuyenDe[state.groupChatsByChuyenDe.length - 1];\n const lastChat = [...jsonB.parse(state.lastGroupChat.noiDungChat)];\n state.lastChat = lastChat;\n }\n },\n setChats: (state, action) => {\n state.chats = action.payload;\n },\n addGroupChat: (state, action) => {\n console.log(action.payload);\n },\n editGroupChat: (state, action) => {\n console.log(action.payload);\n },\n addUserId: (state, action) => {\n state.userId = action.payload;\n localStorage.setItem(\"userId\", jsonB.stringify(action.payload));\n },\n setJoinRoom: (state, action) => {\n state.joinRoom = { ...action.payload };\n localStorage.setItem(\"currentRoom\", JSON.stringify(action.payload));\n },\n setJoinRoom2: (state, action) => {\n state.joinRoom2 = { ...action.payload };\n localStorage.setItem(\"currentRoom\", JSON.stringify(action.payload));\n },\n setChatBot:(state,action)=>{\n state.chatBots = action.payload\n }\n },\n});\n\nexport const {\n getGroupChatByDsChat,\n getGroupChatByDsChatByChuyenDeId,\n addGroupChat,\n editGroupChat,\n addUserId,\n setJoinRoom,\n setJoinRoom2,\n setChats,\n setChatBot\n} = groupChatReducer.actions;\n\nexport default groupChatReducer.reducer;\n\n//!--------- action async ------------\nexport const getGroupChatByDsChatApi = (room, taskid) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByDSChat(room, taskid);\n const action = getGroupChatByDsChat(result.data.content);\n dispatch(action);\n } catch (error) {\n console.log(error);\n }\n };\n};\n\nexport const getGroupChatByDsChatByChuyenDeApi = (room, chuyenDeId) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByChuyenDeId(room, chuyenDeId);\n const action = getGroupChatByDsChatByChuyenDeId(result.data.content);\n dispatch(action);\n } catch (error) {\n console.log(error);\n }\n };\n};\n\nexport const postGroupChatApi = groupChat => {\n return async dispatch => {\n try {\n const res = await groupChatService.addGroupChat(groupChat);\n const action = addGroupChat(res.status);\n dispatch(action);\n } catch (err) {\n console.error(\"postGroupChatApi\", err);\n }\n };\n};\n\nexport const putGroupChatApi = (groupChatId, groupChat) => {\n return async dispatch => {\n try {\n const res = await groupChatService.editGroupChat(groupChatId, groupChat);\n const action = editGroupChat(res.status);\n dispatch(action);\n } catch (err) {\n console.error(\"postGroupChatApi\", err);\n }\n };\n};\nexport const getChatBot = () => {\n return async dispatch => {\n try {\n const res = await groupChatService.getGroupChatBot();\n const action = setChatBot(res.data.content);\n dispatch(action);\n dispatch(getGroupChatBot(res.data.content))\n } catch (err) {\n console.error(\"getChatBotApi\", err);\n }\n };\n};\nexport const sendChatBotApi = (obj) => {\n return async dispatch => {\n try {\n const res = await groupChatService.sendGroupChatBot(obj);\n await dispatch(getChatBot())\n } catch (err) {\n console.error(\"getChatBotApi\", err);\n }\n };\n};\n","import { http } from \"../utils/config\";\n\nconst GET_PATH = \"/issue\";\n\nconst getAllIssue = () => {\n return http.get(GET_PATH);\n};\n\nconst getIssueById = (id) => {\n return http.get(`${GET_PATH}/${id}`);\n};\n\nconst postIssue = (data) => {\n return http.post(`${GET_PATH}`, data);\n};\n\nconst putIssue = (id,data) => {\n return http.put(`${GET_PATH}/putoptional/${id}`,data);\n};\n\nconst delIssue = (id) => {\n return http.delete(`${GET_PATH}/${id}`);\n};\n\nconst getAllIssueByMentor = (mentorId) => {\n return http.get(`${GET_PATH}/getbymentor/${mentorId}`);\n};\n\nconst getIssueHocVienTheoTungChuyenDeService=()=>{\n return http.get(GET_PATH+'/getbyhocvien');\n}\n\nexport const issueService = {\n getAllIssue,\n getIssueById,\n postIssue,\n putIssue,\n delIssue,\n getAllIssueByMentor,\n getIssueHocVienTheoTungChuyenDeService\n};\n","import { http } from \"../utils/config\"\n\nconst GET_PATH = \"/package\"\nconst GET_PATH_TRACKING = \"/trackingPayment\"\n\nconst getPackageService = function(){\n return http.get(`${GET_PATH}`)\n}\nconst getPackageByIdCourse = function(id){\n return http.get(`${GET_PATH}/course?id=${id}`)\n}\nconst sendRedirectONEPAY = function(obj){\n return http.post(`${GET_PATH}/redirect`,obj)\n}\nconst ghiDanhPackage = function(obj){\n return http.post(`/dangkyhoc/ghiDanhPackage`,obj)\n}\nconst insertTrackingPayment = function(obj){\n return http.post(`/trackingPayment`,obj)\n}\nconst sendMail = function(obj){\n return http.post(`${GET_PATH_TRACKING}/sendMailPaymentInfor`,obj)\n}\nconst addLeadformCybersoft = function(obj){\n return http.post(`https://apicrm.cybersoft.edu.vn/api/leadform`,obj)\n}\n\nexport const packageService = {\n getPackageByIdCourse,\n sendRedirectONEPAY,\n ghiDanhPackage,\n getPackageService,\n insertTrackingPayment,\n sendMail,\n addLeadformCybersoft\n}","import { createSlice } from \"@reduxjs/toolkit\";\nimport { LIGHT_MODE } from \"../../constants/theme\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nconst initialState = {\n theme: localStorageServ.modeTheme.get() ? localStorageServ.modeTheme.get() : LIGHT_MODE\n};\n\nexport const theme = createSlice({\n name: \"themeReducer\",\n initialState,\n reducers: {\n setModeTheme: (state, action) => {\n state.theme = action.payload;\n }\n },\n});\nexport const { setModeTheme } = theme.actions;\nexport default theme.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nconst initialState = {\n phanThuong: {},\n};\n\nconst phanThuongSlice = createSlice({\n name: \"phanThuongSlice\",\n initialState,\n reducers: {\n setPhanThuong: (state, action) => {\n // state.phanThuong = action.payload;\n if (action.payload == null) {\n state.phanThuong = null;\n } else {\n state.phanThuong = action.payload;\n }\n },\n },\n});\n\nexport const { setPhanThuong } = phanThuongSlice.actions;\nexport default phanThuongSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { baiHocService } from \"../../services/baiHocService\";\nimport moment from \"moment\";\nimport { issueService } from \"../../services/issueService\";\n\nconst initialState = {\n issueState: {\n id: 0,\n chuyenDeId: 0,\n hocVienId: \"\",\n ngayTao: \"\",\n noiDung: \"\",\n title: \"\",\n trangThai: \"DANG_HO_TRO\",\n },\n issuesMentorPhuTrach: [],\n issueHocVienTheoTungChuyenDe: [],\n};\n\nconst issueReducer = createSlice({\n name: \"issueReducer\",\n initialState,\n reducers: {\n getIssueAllMentorPhuTrach: (state, action) => {\n state.issuesMentorPhuTrach = [...action.payload];\n },\n setIssueState: (state, action) => {\n console.log(action.payload);\n state.issueState = { ...action.payload };\n },\n getIssueHocVienTheoTungChuyenDe: (state, action) => {\n state.issueHocVienTheoTungChuyenDe = [...action.payload];\n },\n },\n});\n\nexport const { getIssueAllMentorPhuTrach, setIssueState, getIssueHocVienTheoTungChuyenDe } =\n issueReducer.actions;\nexport default issueReducer.reducer;\n\n//--------- action async ------------\n\nexport const getIssueAllMentorPhuTrachApi = (mentorId) => {\n return async (dispatch) => {\n try {\n const result = await issueService.getAllIssueByMentor(mentorId);\n const action = getIssueAllMentorPhuTrach(result.data.content);\n dispatch(action);\n } catch (error) {\n console.log(error);\n }\n };\n};\nexport const createNewIssue = (newIssue) => {\n return async (dispatch) => {\n try {\n const result = await issueService.postIssue(newIssue);\n const action = getIssueAllMentorPhuTrach(result.data.content);\n dispatch(action);\n } catch (error) {\n console.log(error);\n }\n };\n};\nexport const getIssueHocVienTheoTungChuyenDeApi = () => {\n return async (dispatch) => {\n try {\n const result = await issueService.getIssueHocVienTheoTungChuyenDeService();\n const action = getIssueHocVienTheoTungChuyenDe(result.data.content);\n dispatch(action);\n } catch (error) {\n console.log(error);\n }\n };\n};\nexport const putoptionalApi = (id,data) => {\n return async (dispatch) => {\n try {\n const res = await issueService.putIssue(id,data);\n if(res?.status==200)\n console.log('update issue success');\n } catch (error) {\n console.log('putoptional',error);\n }\n };\n};\n","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport httpServ from \"../../services/http.service\";\n\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { initialDemoTaskDeadline } from \"../../utils/HocDemoUtils\";\n\nconst initialState = {\n statisChartArr: [],\n labelChart: [],\n topUsers: {\n tichCuc: [],\n hocGioi: [],\n capDo: [],\n },\n danhSachDeadline: localStorageServ.userDemo.get()\n ? initialDemoTaskDeadline()\n : [],\n khoaDangHoc: [],\n allItems: [],\n yourItems: [],\n dialogItem: {\n isShow: \"\",\n canBuyItem: \"\",\n dataItem: \"\",\n },\n listImgTag: [],\n};\nexport const getYoursItemAciton = createAsyncThunk(\n \"lotrinh/getYoursItemAciton\",\n async (userId, thunkAPI) => {\n const response = await httpServ.getYoursItems(userId, false);\n return response.data.content;\n }\n);\nconst dashboardSlice = createSlice({\n name: \"dashboardSlice\",\n initialState,\n reducers: {\n setTopUpser: (state, action) => {\n state.topUsers = action.payload;\n },\n setDanhSachDeadline: (state, action) => {\n state.danhSachDeadline = action.payload;\n },\n setKhoaDangHoc: (state, action) => {\n state.khoaDangHoc = action.payload;\n },\n setAllItem: (state, action) => {\n state.allItems = action.payload;\n },\n setYourItem: (state, action) => {\n state.yourItems = action.payload;\n },\n setDialogItem: (state, action) => {\n state.dialogItem = action.payload;\n },\n setListImageTag: (state, action) => {\n state.listImgTag = action.payload;\n },\n },\n extraReducers: {\n [getYoursItemAciton.fulfilled]: (state, action) => {\n state.yourItems = action.payload;\n },\n },\n});\n\nexport const {\n setDialogItem,\n setStatisChartArr,\n setLabelChart,\n setTopUpser,\n setDanhSachDeadline,\n setKhoaDangHoc,\n setAllItem,\n setYourItem,\n setListImageTag,\n} = dashboardSlice.actions;\nexport default dashboardSlice.reducer;\n","import axios from \"axios\";\nimport { API_URL_DOMAIN } from \"./urlDomain\";\nimport localStorageServ from \"../services/locaStorage.service\";\n\n// import {history} from '../index';\nexport const config = {\n setCookie: function (name, value, days) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n },\n getCookie: function (name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(\";\");\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n getStore: function (name) {\n if (localStorage.getItem(name)) {\n return localStorage.getItem(name);\n }\n return null;\n },\n setStore: function (name, value) {\n localStorage.setItem(name, value);\n },\n setStoreJson: function (name, value) {\n let json = JSON.stringify(value);\n localStorage.setItem(name, json);\n },\n getStoreJson: function (name) {\n if (localStorage.getItem(name)) {\n let result = localStorage.getItem(name);\n return JSON.parse(result);\n }\n return null;\n },\n removeStore: function (name) {\n localStorage.removeItem(name);\n },\n ACCESS_TOKEN: localStorage.getItem('ACCESS_TOKEN'),\n USER_LOGIN: \"userLogin\",\n};\n\nexport const {\n setCookie,\n getCookie,\n getStore,\n setStore,\n setStoreJson,\n removeStore,\n getStoreJson,\n ACCESS_TOKEN,\n USER_LOGIN,\n} = config;\n\nexport const http = axios.create({\n baseURL: API_URL_DOMAIN,\n timeout: 30000,\n});\n\n\nconst token=localStorageServ.userInfo.get();\n\nhttp.interceptors.request.use(\n function (config) {\n config.headers['Token'] = token.token;\n // cosole.log(config);\n return config;\n },\n function (error) {\n return Promise.reject(error);\n }\n);\n// http.interceptors.request.use(\n// function (config) {\n// if (ACCESS_TOKEN)\n// config.data = {\n// ...config.data,\n// Token: ACCESS_TOKEN\n// };\n// console.log(ACCESS_TOKEN);\n// console.log(config);\n// return config;\n// },\n// function (error) {\n// return Promise.reject(error);\n// }\n// );\n\n\nhttp.interceptors.response.use(\n function (response) {\n return response;\n },\n function (err) {\n if (err.response.status === 400 || err.response.status === 404) {\n return Promise.reject(err);\n }\n if (err.response.status === 401 || err.response.status === 403) {\n alert(\"Token không hợp lệ ! Vui lòng đăng nháºp lại !\");\n return Promise.reject(err);\n }\n }\n);\n\n","import { getStoreJson, http } from \"../utils/config\";\n\nconst GET_PATH = \"/nguoidung\";\n\nconst getDanhSachMentor = () => {\n return http.get(`${GET_PATH}/get-list-mentor`);\n};\n\nconst dangNhap = (data) => {\n return http.post(`api/nguoidung/login`, data);\n};\n\nconst layThongTinUser = (id) => {\n return http.get(`${GET_PATH}/laythongtinuser/${id}`);\n};\n\nconst getNguoiDungPhanTrang = (data) => {\n return http.get(\n `${GET_PATH}/phan-trang?pageIndex=${data.pageIndex}&pageSize=${data.pageSize}&keyword=maNhomQuyen%20LIKE%20%27%40%40${data.maNhomQuyen}%40%40%27%20%20AND%20${data.filter}%20LIKE%20%27%40%40${data.tuKhoa}%40%40%27`\n );\n};\n\nconst dangKyNguoiDung = (data) => {\n return http.post(`${GET_PATH}`, data);\n};\n\nconst updateNguoiDung = (data) => {\n console.log(data);\n return http.put(`${GET_PATH}/${data.id}`, data);\n};\n\nconst deleteNguoiDung = (id) => {\n return http.delete(`${GET_PATH}/${id}`);\n};\n\nconst checkPassNguoiDung = () => {\n const id = getStoreJson(\"USER_LOGIN\").id;\n const matKhau = getStoreJson(\"USER_LOGIN\").matKhau;\n const data = {\n id: id,\n email: \"string\",\n hoTen: \"string\",\n soDt: \"string\",\n avatar: \"string\",\n urls: \"string\",\n thongTinMoRong: \"string\",\n maNhomQuyen: \"string\",\n kichHoat: true,\n ngayTao: \"2023-04-06T03:44:12.756Z\",\n maGioiThieu: \"string\",\n iPaddress: \"string\",\n matKhau: matKhau,\n nuocNgoai: true,\n guiMail: true,\n kinhNghiem: 0,\n tichCuc: 0,\n coin: 0,\n ngayDangNhap: \"2023-04-06T03:44:12.756Z\",\n };\n return http.post(`${GET_PATH}/check-pass`, getStoreJson(\"USER_LOGIN\"));\n};\n\nconst layDsNguoiDungByString = (ds) => {\n return http.post(`${GET_PATH}/laydanhsachnguoidungbystring`, ds);\n}\n\nconst GetDSByMentorIdService = (mentorId) => {\n console.log(mentorId)\n return http.get(`${GET_PATH}/getdshocvienbymentorid?mentorId=${mentorId}`)\n}\n\n//lấy tất cả user có trong chuyên Ä‘á» by user id\nconst layDsNguoiDungChuyenDe = () => {\n return http.get(`${GET_PATH}/getAll`);\n}\n\n\nexport const nguoiDungService = {\n getDanhSachMentor,\n dangNhap,\n layThongTinUser,\n getNguoiDungPhanTrang,\n deleteNguoiDung,\n updateNguoiDung,\n dangKyNguoiDung,\n checkPassNguoiDung,\n layDsNguoiDungByString,\n GetDSByMentorIdService,\n layDsNguoiDungChuyenDe\n};\n","import { createAsyncThunk, createSlice } from \"@reduxjs/toolkit\";\nimport axios from \"axios\";\nimport { checkAnswers } from \"./utils\";\n\nconst initialState = {\n dataRuncode: [],\n testCaseRuncode: [],\n isLoading:false\n // ! đáp án của hệ thống sau khi submit\n};\nexport const checkSubmitDataRuncode = createAsyncThunk(\n // ! api xá» lý đáp án của user\n \"users/checkSubmitDataRuncode\",\n async (data, thunkAPI) => {\n try {\n const res = await axios({\n url: \"https://runcode.cyberlearn.vn/submit\",\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n data,\n });\n // console.log(res);\n\n const check = checkAnswers(res.data);\n if (check) {\n // gá»i api lÆ°u Ä‘iểm\n let payload = {\n // id: 0,\n // taskId: taskId,\n // requireId: requireId,\n // baiLam: baiLam,\n // maLoai: maLoai,\n // chuyenDeId,\n // monHocId,\n };\n }\n return res.data;\n } catch (error) {\n console.log(error);\n }\n }\n);\nconst runcodeSlice = createSlice({\n name: \"runcodeSlice\",\n initialState,\n reducers: {\n resetResultTestCase: (state, action) => {\n state.testCaseRuncode = [];\n },\n startLoadingRunCode: (state, action) => {\n state.isLoading = true;\n },\n endLoadingRunCode: (state, action) => {\n state.isLoading = false\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(checkSubmitDataRuncode.pending, (state, action) => {\n state.isLoading = true;\n })\n .addCase(checkSubmitDataRuncode.fulfilled, (state, action) => {\n state.isLoading = false;\n state.testCaseRuncode = action.payload;\n })\n .addCase(checkSubmitDataRuncode.rejected, (state, action) => {\n state.isLoading = false;\n });\n },\n});\n\nexport const { resetResultTestCase,\n startLoadingRunCode,\n endLoadingRunCode\n } = runcodeSlice.actions;\n\nexport default runcodeSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nconst initialState = {\n lisLoTrinh: [],\n};\n\nconst loTrinhSlice = createSlice({\n name: \"loTrinhSlice\",\n initialState,\n reducers: {\n setListLoTrinh: (state, action) => {\n state.lisLoTrinh = action.payload;\n },\n },\n});\n\nexport const { setListLoTrinh } = loTrinhSlice.actions;\n\nexport default loTrinhSlice.reducer;\n\nexport let selectListLoTrinh = (state) => state.loTrinhSlice.lisLoTrinh;\n","import { http } from \"../utils/config\";\n\n\nconst GET_PATH = \"/groupfortask\";\n\nconst getListGroupForTask = () => {\n return http.get(GET_PATH);\n}\n\nconst addGroupForTask = (data) => {\n return http.post(GET_PATH, data);\n}\n\nconst getGroupForTaskById = (id) => {\n return http.get(GET_PATH + \"/\" + id);\n}\n\nconst editGroupForTask = (id, data) => {\n return http.put(GET_PATH + \"/\" + id, data);\n}\n\nconst delGroupForTask = (id) => {\n return http.delete(GET_PATH + \"/\" + id);\n}\n\nconst getBaiHocById = (id) => {\n return http.get(\"/api/baihoc/\" + id);\n}\n\nconst getThongTinNguoiDung = (id) => {\n return http.get(\"/api/nguoidung/\" + id);\n}\n\nconst GetGroupForTaskByMentorId = (mentorId) => {\n return http.get(`${GET_PATH}/bymentor?mentorId=${mentorId}`)\n}\nconst getDsGroupForTaskHocVienService = () => {\n return http.get(`${GET_PATH}/ds_grouptask_hocvien`)\n}\n\nexport const groupForTaskService = {\n getListGroupForTask,\n addGroupForTask,\n getGroupForTaskById,\n editGroupForTask,\n delGroupForTask,\n getBaiHocById,\n getThongTinNguoiDung,\n GetGroupForTaskByMentorId,\n getDsGroupForTaskHocVienService\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { groupForTaskService } from \"../../services/groupForTaskService\";\nimport { requireForStudentService } from \"../../services/requireForStudentService\";\nimport { nguoiDungService } from \"../../services/nguoiDungService\";\n\nconst initialState = {\n dsGroupForTaskHocVien:[],\n groupForTaskViewMentorModel: [],\n groupForTask: {\n id: 0,\n danhSachHocVien: \"\",\n mentorId: \"\",\n ngayTao: \"\",\n isDone: false,\n taskId: 0,\n chuyenDeId: 0,\n maLoai: \"\",\n monHocId: 0,\n },\n baiHoc: {\n id: 0,\n capDo: 0,\n ghiChu: \"\",\n maLoai: \"\",\n moTa: \"\",\n noiDung: \"\",\n tenBaiHoc: \"\",\n thoiLuong: \"\",\n xemDemo: false,\n },\n currentRequire: {\n requireId: 0,\n noiDung: \"\",\n ketQua: \"\",\n hint: \"\",\n solution: \"\",\n videoSolution: \"\",\n },\n requires: [],\n requireForStudents: [],\n checkRequireForStudents: false,\n arrDanhSachHocVien: [],\n arrDSNguoiDung: [],\n thongTinMentor: {\n id: \"\",\n avatar: \"\",\n hoTen: \"\",\n soDt: \"\",\n urls: \"\",\n },\n};\n\nconst groupForTaskReducer = createSlice({\n name: \"groupForTask\",\n initialState,\n reducers: {\n GetGroupForTaskByMentorId: (state, action) => {\n state.groupForTaskViewMentorModel = [...action.payload];\n },\n getGroupForTask: (state, action) => {\n state.groupForTask = action.payload;\n const newds = JSON.parse(state.groupForTask.danhSachHocVien);\n\n state.arrDanhSachHocVien = newds.map(e => e.trim());\n },\n getBaiHoc: (state, action) => {\n state.baiHoc = { ...action.payload };\n },\n setCurrentRequire: (state, action) => {\n state.currentRequire = { ...action.payload };\n },\n setRequires: (state, action) => {\n const newRequire = JSON.parse(action.payload);\n if (newRequire) state.requires = [...newRequire];\n },\n setRequireForStudentsByJson: (state, action) => {\n const getTodate = () => {\n const currentDate = new Date();\n return currentDate.toISOString().slice(0, 19);\n };\n let count = 0;\n let sst = 0;\n const newRequireForStudent = JSON.parse(action.payload).map(require => {\n let hvId = \"\";\n if (count < state.arrDanhSachHocVien.length) hvId = state.arrDanhSachHocVien[count];\n else {\n count = 0;\n hvId = state.arrDanhSachHocVien[count];\n }\n count++;\n sst++;\n return {\n id: sst,\n studentId: hvId,\n noiDung: require.noiDung,\n deadline: getTodate(),\n isDone: false,\n requireId: require.requireId,\n groupForTaskId: state.groupForTask.id,\n ngayTao: getTodate(),\n daXoa: false,\n };\n });\n if (newRequireForStudent.length !== 0) state.requireForStudents = [...newRequireForStudent];\n },\n setRequireForStudentByTaskId: (state, action) => {\n if (action.payload.length !== 0) {\n state.requireForStudents = [...action.payload];\n state.checkRequireForStudents = true;\n } else state.checkRequireForStudents = false;\n },\n putRequireForStudent: (state, action) => {\n const index = state.requireForStudents.findIndex(e => e.id === action.payload.id);\n state.requireForStudents[index].studentId = action.payload.studentId;\n },\n getDsNguoiDung: (state, action) => {\n const arr = action.payload.sort((a, b) => {\n return state.arrDanhSachHocVien.indexOf(a.id) - state.arrDanhSachHocVien.indexOf(b.id);\n });\n state.arrDSNguoiDung = [...arr];\n },\n getThongTinMentor: (state, action) => {\n state.thongTinMentor = { ...action.payload };\n },\n getDsGroupForTaskHocVienAction:(state,action)=>{\n state.dsGroupForTaskHocVien=[...action.payload]\n }\n },\n});\n\nexport const {\n getBaiHoc,\n getGroupForTask,\n setRequires,\n setRequireForStudentsByJson,\n setRequireForStudentByTaskId,\n putRequireForStudent,\n getDsNguoiDung,\n getThongTinMentor,\n setCurrentRequire,\n GetGroupForTaskByMentorId,\n getDsGroupForTaskHocVienAction\n} = groupForTaskReducer.actions;\nexport default groupForTaskReducer.reducer;\n\n//--------- action async ------------\n\nexport const getGroupForTaskApi = (id) => {\n return async (dispatch) => {\n try {\n const result = await groupForTaskService.getGroupForTaskById(id);\n if (result.data.content) dispatch(getGroupForTask(result.data.content));\n } catch (error) {\n console.log(error);\n }\n };\n};\n\nexport const getBaiHocApi = (id) => {\n console.log(id)\n return async (dispatch) => {\n try {\n const result = await groupForTaskService.getBaiHocById(id);\n dispatch(getBaiHoc(result.data.content));\n } catch (error) {\n console.log(error);\n }\n };\n};\n\nexport const getRequireForStudentByTaskIdApi = (id) => {\n return async (dispatch) => {\n try {\n const result = await requireForStudentService.getRequireForStudentByTaskId(id);\n dispatch(setRequireForStudentByTaskId(result.data.content));\n } catch (error) {\n console.log(error);\n }\n };\n};\n\nexport const postOrPutRequireForStudentApi = (list) => {\n return async () => {\n try {\n await requireForStudentService.postOrPutRequireForStudent(list);\n console.log(\"postOrPutRequireForStudentApi success\");\n } catch (err) {\n console.log(err);\n console.log(\"postOrPutRequireForStudentApi Not success\");\n }\n };\n};\n\nexport const layDsNguoiDungByStringApi = (ds) => {\n return async (dispatch) => {\n try {\n const result = await nguoiDungService.layDsNguoiDungByString(ds);\n if (result.data.content) dispatch(getDsNguoiDung(result.data.content));\n } catch (err) {\n console.log(err);\n console.log(\"layDsNguoiDungByString Not success\");\n }\n };\n};\n\nexport const getThongTinMentorApi = (id) => {\n return async (dispatch) => {\n try {\n const result = await groupForTaskService.getThongTinNguoiDung(id);\n dispatch(getThongTinMentor(result.data.content));\n } catch (error) {\n console.log(error);\n console.log(\"getThongTinMentorApi Not success\");\n }\n };\n};\n\nexport const GetGroupForTaskByMentorIdApi = (mentorId) => {\n return async (dispatch) => {\n try {\n const result = await groupForTaskService.GetGroupForTaskByMentorId(mentorId);\n if (result.data.content) dispatch(GetGroupForTaskByMentorId(result.data.content));\n } catch (err) {\n console.log(err);\n }\n };\n};\n\nexport const getDsGroupForTaskHocVienApi=()=>{\n return async (dispatch) => {\n try {\n const result = await groupForTaskService.getDsGroupForTaskHocVienService();\n if (result.data.content) dispatch(getDsGroupForTaskHocVienAction(result.data.content));\n } catch (err) {\n console.log(err);\n }\n };\n}\n","import { getStoreJson, http } from \"../utils/config\";\n\nconst GET_PATH = \"/api/nopbai\";\n\nconst GetDSByGtaskId = function (gtaskId, mentorId) {\n return http.get(`${GET_PATH}/get-ds-gtaskid-mentorid?gtaskid=${gtaskId}&mentorId=${mentorId}`)\n}\n\nconst mentorChamBai = function (mentorId, mentorChamBai) {\n return http.put(`${GET_PATH}/mentorchambai?mentorId=${mentorId}`, mentorChamBai)\n}\n\nconst GetNopBaisByNguoiDungService = function (mentorId) {\n return http.get(`${GET_PATH}/mentorchambai?mentorId=${mentorId}`)\n}\n\nconst GetNopBaisByNguoiDungViewModelService = function (mentorId) {\n return http.get(`${GET_PATH}/mentorchambaiviewmodel?mentorId=${mentorId}`)\n}\n\nexport const nopbaiService = {\n GetDSByGtaskId,\n mentorChamBai,\n GetNopBaisByNguoiDungViewModelService,\n GetNopBaisByNguoiDungService\n}\n","const { createSlice } = require(\"@reduxjs/toolkit\");\n\nconst initialState = {\n type: \"success\",\n message: \"\",\n description: \"\",\n};\n\nconst messageReducer = createSlice({\n name: \"message\",\n initialState,\n reducers: {\n setMessage: function (state, action) {\n const { description, type, message } = action.payload;\n state.type = type;\n state.message = message;\n state.description = description;\n },\n },\n});\n\nexport const { setMessage } = messageReducer.actions;\nexport default messageReducer.reducer;\n","import { http } from \"../utils/config\";\n\nconst GET_PATH = '/api/monhoc';\n\nconst layDanhSachMonHoc = function () {\n return http.get(GET_PATH);\n}\n\nconst themMonHoc = function (data) {\n return http.post(GET_PATH, data);\n}\n\nconst suaMonHoc = function (data) {\n return http.put(`${GET_PATH}/${data.id}`, data);\n}\n\nconst xoaMonHoc = function (id) {\n return http.delete(`${GET_PATH}/${id}`);\n}\n\nconst GetMonHocsByListIdService = function (ds) {\n return http.post(`${GET_PATH}/getmonhocbylist`, ds)\n}\n\nexport const monHocService = {\n layDanhSachMonHoc,\n themMonHoc,\n suaMonHoc,\n xoaMonHoc,\n GetMonHocsByListIdService\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { nopbaiService } from \"../../services/nopbaiService\";\nimport { setMessage } from \"./MessageReducer-Chat\";\nimport { nguoiDungService } from \"../../services/nguoiDungService\";\nimport { monHocService } from \"../../services/monHocService\";\n\nconst initialState = {\n NopBaiState: {\n chuyenDeId: 0,\n loaiModule: \"\",\n monHocId: 0,\n baiLam: \"\",\n daXoa: false,\n diem: 0,\n hanNopBai: \"\",\n id: 0,\n maLoai: \"\",\n ngayTao: \"\",\n nguoiCham: \"\",\n nguoiDungId: \"\",\n nhanXet: \"\",\n requireId: 0,\n taskId: 0,\n trangThai: \"\",\n },\n nopBaiCurrent: {\n chuyenDeId: 0,\n loaiModule: \"\",\n monHocId: 0,\n baiLam: \"\",\n daXoa: false,\n diem: 0,\n hanNopBai: \"\",\n id: 0,\n maLoai: \"\",\n ngayTao: \"\",\n nguoiCham: \"\",\n nguoiDungId: \"\",\n nhanXet: \"\",\n requireId: 0,\n taskId: 0,\n trangThai: \"\",\n },\n dsNopBaiByGroup: [],\n dsNopBaiByMentorId: [],\n dsNopBaiByMentorIdViewMentor: [],\n dsbailamtheoids: [],\n dsHocVienByMentorId: [],\n dsMonHocByChuyenDe: [],\n};\n\nconst nopBaiReducer = createSlice({\n name: \"monHocReducer\",\n initialState,\n reducers: {\n setNopBaiState: (state, action) => {\n state.NopBaiState = { ...action.payload };\n },\n getDsNopBaiByGroup: (state, action) => {\n if (action.payload.length) {\n state.dsNopBaiByGroup = [...action.payload.sort((a, b) => a.requireId - b.requireId)];\n }\n },\n getNopBaiCurrent: (state, action) => {\n state.nopBaiCurrent = action.payload;\n if (action.payload.baiLam) state.dsbailamtheoids = JSON.parse(action.payload.baiLam);\n },\n GetDsNopBaiByMentorId: (state, action) => {\n state.dsNopBaiByMentorId = [...action.payload];\n },\n GetNopBaisByNguoiDungViewModel: (state, action) => {\n state.dsNopBaiByMentorIdViewMentor = [...action.payload];\n },\n GetDSByMentorId: (state, action) => {\n state.dsHocVienByMentorId = [...action.payload];\n },\n GetMonHocsByListId: (state, action) => {\n state.dsMonHocByChuyenDe = [...action.payload];\n },\n },\n});\n\nexport const {\n setNopBaiState,\n getDsNopBaiByGroup,\n getNopBaiCurrent,\n GetDsNopBaiByMentorId,\n GetNopBaisByNguoiDungViewModel,\n GetDSByMentorId,\n GetMonHocsByListId,\n} = nopBaiReducer.actions;\nexport default nopBaiReducer.reducer;\n//--------- action async ------------\n\nexport const getDsNopBaiByGroupApi = (gtaskId, mentorId) => {\n return async (dispatch) => {\n const result = await nopbaiService.GetDSByGtaskId(gtaskId, mentorId);\n const action = getDsNopBaiByGroup(result.data.content);\n dispatch(action);\n };\n};\n\nexport const putMentorChamBai = (mentorId, MentorChamBai) => {\n return async (dispatch) => {\n try {\n const result = await nopbaiService.mentorChamBai(mentorId, MentorChamBai);\n if (result.status === 200) {\n const action = setMessage({\n type: \"success\",\n message: \"Chấm Bà i Thà nh Công\",\n description: \"\",\n });\n dispatch(action);\n } else {\n const action = setMessage({\n type: \"error\",\n message: \"Chấm Bà i Không Thà nh Công\",\n description: \"Có Thể Hệ Thống Äang Có Vấn Äá» !\",\n });\n dispatch(action);\n }\n } catch (error) {\n console.log(error);\n }\n };\n};\nexport const GetDsNopBaiByMentorIdApi = (mentorId) => {\n return async (dispatch) => {\n const result = await nopbaiService.GetNopBaisByNguoiDungService(mentorId);\n const action = GetDsNopBaiByMentorId(result.data.content);\n // console.log(action)\n dispatch(action);\n };\n};\n\nexport const GetNopBaisByNguoiDungViewModelApi = (mentorId) => {\n return async (dispatch) => {\n const result = await nopbaiService.GetNopBaisByNguoiDungViewModelService(mentorId);\n const action = GetNopBaisByNguoiDungViewModel(result.data.content);\n // console.log(action)\n dispatch(action);\n };\n};\nexport const GetDSByMentorIdApi = (mentorId) => {\n return async (dispatch) => {\n const result = await nguoiDungService.GetDSByMentorIdService(mentorId);\n const action = GetDSByMentorId(result.data.content);\n // console.log(action)\n dispatch(action);\n };\n};\nexport const GetMonHocsByListIdApi = (ds) => {\n return async (dispatch) => {\n const result = await monHocService.GetMonHocsByListIdService(ds);\n const action = GetMonHocsByListId(result.data.content);\n // console.log(action)\n dispatch(action);\n };\n};\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport chartReducer from \"./reducer/chartReducer\";\nimport signUpReducer from \"./reducer/signUpReducer\";\nimport spinnerReducer from \"./reducer/spinnerReducer\";\nimport themeReducer from \"./reducer/themeReducer\";\nimport authReducer from \"./reducer/authReducer\";\nimport testDauVaoSlice from \"../pages/TestQuizPage/testDauVaoSlice\";\nimport giftSlice from \"../components/ModalConfetti/giftSlice\";\nimport groupChatReducer from \"./reducer/groupChatReducer\";\nimport issueReducer from \"./reducer/issueReducer-Chat\";\nimport groupForTaskReducer from \"./reducer/groupForTaskReducer\";\nimport chuyenDeReducer from \"./reducer/chuyenDeReducer-Chat\";\nimport nopBaiReducer from \"./reducer/nopBaiReducer-Chat\";\nimport runcodeSlice from \"../pages/Runcode/runcodeSlice\";\nimport dashboardSlice from \"./reducer/dashboardSlice\";\nimport loTrinhSlice from \"../template/HeaderTask/loTrinhSlice\";\nimport stackChatReducer from \"./reducer/stackChatReducer\";\nimport taskPageSlice from \"./reducer/taskPageSlice\";\nimport vatPhamSlice from \"./reducer/vatPhamSlice\";\nimport tuongNhaSlice from \"../pages/TuongNhaPage/tuongNhaSlice\";\nimport danhGiaReducer from \"./reducer/danhGiaReducer\";\nimport packageReducer from \"./reducer/packageReducer\";\n\nexport default configureStore({\n reducer: {\n chart: chartReducer,\n signUp: signUpReducer,\n spinner: spinnerReducer,\n theme: themeReducer,\n authUser: authReducer,\n runcodeSlice: runcodeSlice,\n user: authReducer,\n testDauVaoSlice: testDauVaoSlice,\n phanThuongSlice: giftSlice,\n groupChat: groupChatReducer,\n groupForTask: groupForTaskReducer,\n issue: issueReducer,\n chuyenDe: chuyenDeReducer,\n nopBai: nopBaiReducer,\n tuongNhaSlice: tuongNhaSlice,\n dashboardSlice,\n loTrinhSlice: loTrinhSlice,\n stackChatReducer,\n taskPageSlice,\n vatPhamSlice,\n danhGiaReducer:danhGiaReducer,\n packageReducer\n },\n devTools: process.env.NODE_ENV !== \"production\",\n});\n","// eslint-disable-next-line import/no-anonymous-default-export\nconst environment = {\n //baseUrl: \"https://localhost:5001\",\n baseUrl: \"https://backend.cyberlearn.vn\",\n faceBookAppId: \"130543658347826\",\n env: \"dev\",\n production: false,\n enableCheat: true,\n version: \"1.0.0\",\n};\nexport default environment;\n","import { createSlice } from \"@reduxjs/toolkit\";\n// localStorageServ\n\nconst initialState = {\n statisChartArr: [],\n labelChart: [],\n};\n\nexport const chartSlice = createSlice({\n name: \"chartUser\",\n initialState,\n reducers: {\n setStatisChartArr: (state, action) => {\n state.statisChartArr = action.payload;\n },\n\n setLabelChart: (state, action) => {\n state.labelChart = action.payload;\n },\n },\n});\nexport const { setStatisChartArr, setLabelChart } = chartSlice.actions;\nexport default chartSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nconst initialState = {\n info: null,\n};\n\nconst testDauVaoSlice = createSlice({\n name: \"testDauVaoSlice\",\n initialState,\n reducers: {\n setDataTestDauVao: (state, action) => {\n state.info = action.payload;\n },\n },\n});\n\nexport const { setDataTestDauVao } = testDauVaoSlice.actions;\n\nexport default testDauVaoSlice.reducer;\n// https://localhost:3000/test-quiz?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiVEVTVF9DQVAyIiwiaWF0IjoxNjkwMzQxOTI5LCJleHAiOjE2OTAzNDQwMjl9.pGJZIPjgpv62EU-lU23OAQFETrSlS5ds10r5dl6r6ds\n","import { useEffect, useState } from 'react'\n\n\n\nfunction useWindowSize() {\n const [windowSize, setWindowSize] = useState({\n widthWindow: window.innerWidth,\n heightWindow: window.innerHeight,\n })\n\n useEffect(() => {\n const handler = () => {\n setWindowSize({\n widthWindow: window.innerWidth,\n heightWindow: window.innerHeight,\n })\n }\n\n // Set size at the first client-side load\n handler()\n\n window.addEventListener('resize', handler)\n\n // Remove event listener on cleanup\n return () => {\n window.removeEventListener('resize', handler)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return windowSize\n}\n\nexport default useWindowSize","import React, { useEffect } from 'react';\n\nconst FacebookLogin = ({ appId, responseFacebook }) => {\n\n useEffect(() => {\n // Kiểm tra nếu SDK chÆ°a được tải\n if (!window.FB) {\n // Tạo script để tải SDK\n const script = document.createElement('script');\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.onload = () => {\n window.FB.init({\n appId: '303284849320308', // Thay bằng app ID của bạn\n autoLogAppEvents: true,\n xfbml: true,\n version: 'v11.0'\n });\n };\n document.body.appendChild(script);\n }\n }, []);\n\n const handleFBLogin = () => {\n\n window.FB.login(function (response) {\n\n if (response.authResponse) {\n\n window.FB.api('/me', { fields: 'name,email' }, function (response) {\n responseFacebook(response)\n console.log('User info: ', response);\n });\n }\n }, { scope: 'public_profile,email' });\n\n };\n\n return (\n <div className=\"App\">\n\n <button className='btn btn-primary p-5' onClick={handleFBLogin}>Login with Facebook</button>\n </div>\n );\n}\n\nexport default FacebookLogin;\n","import React, { useEffect, useState } from \"react\";\nimport FacebookLogin from \"react-facebook-login\";\nimport { useDispatch } from \"react-redux\";\nimport { setUserInfor } from \"../../redux/reducer/authReducer\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { removeDemoUser } from \"../../utils/HocDemoUtils\";\nimport { Modal } from \"antd\";\nimport codingfServ from \"../../services/codingCam.service\";\nimport axios from \"axios\";\nimport moment from \"moment\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport { history } from \"../../App\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport LoginFacebook from './LoginFacebook'\n\nconst publicIp = require(\"public-ip\");\n\nexport default function BtnLoginFacebook() {\n const { widthWindow, heightWindow } = useWindowSize();\n\n const isPhone = widthWindow < 639 ? true : false\n const getCurrentDay = () => {\n return moment(new Date()).format(\"DD/MM/YYYY\");\n };\n const versionLocalStorage = localStorage.getItem(\"version\");\n if (!versionLocalStorage) {\n localStorage.setItem(\"version\", \"1\");\n window.location.reload();\n }\n\n const [message, setMessge] = useState(\"\");\n const [thongTinUser, setThongTinUser] = useState({\n facebookId: \"\",\n email: \"\",\n avatar: \"\",\n diachiIp: \"\",\n });\n const [isLogin, setIsLogin] = useState(false);\n\n const dispatch = useDispatch();\n const [appId, setAppId] = useState(false);\n\n\n useEffect(() => {\n axios\n .get(\n BASE_URL_CODINGCAMP + \"/api/cauhinh/get-faceid?fbclid=IwAR3ivxDEK6Bz2bQ_-VRQIprjbglf-u8uMlG-Jb6rDzKv0VO2ENtiqEojJfE\"\n )\n .then((result) => {\n setAppId(result.data.content);\n })\n .catch((err) => { });\n }, []);\n const responseFacebook = (res) => {\n let login = async () => {\n let ipUser = await publicIp.v4();\n let userInfo = {\n facebookId: res.id,\n // facebookId: \"2756514864396809\",\n\n email: \"\",\n avatar: \"\",\n diachiIp: \"\",\n // email: res.email,\n // avatar: `https://graph.facebook.com/${res.id}/picture?type=large`,\n // diachiIp: ipUser,\n };\n codingfServ\n .login(userInfo)\n .then((res) => {\n if (res.data.content) {\n switch (res.data.content) {\n case 1:\n setThongTinUser(userInfo);\n setIsLogin(true);\n break;\n case 0:\n setMessge(res.data.message);\n break;\n case 2:\n\n break;\n default:\n localStorageServ.userInfo.set(res.data.content);\n localStorageServ.timeLogin.set(getCurrentDay());\n removeDemoUser();\n dispatch(setUserInfor(res.data.content));\n window.location.href = \"/\";\n break;\n }\n } else {\n setMessge(res.data.message);\n }\n })\n .catch((er) => { });\n };\n login();\n };\n\n // Äăng nháºp sá» dụng tà i khoản facebook\n const onDangNhap = () => {\n codingfServ\n .login(thongTinUser)\n .then((res) => {\n if (res.data.content) {\n switch (res.data.content) {\n case 0:\n setMessge(res.data.message);\n break;\n case 2:\n // setMessge(res.data.message);\n\n window.location.href = \"/signup\";\n // history.push = \"signup\";\n break;\n default:\n localStorageServ.userInfo.set(res.data.content);\n localStorageServ.timeLogin.set(getCurrentDay());\n removeDemoUser();\n dispatch(setUserInfor(res.data.content));\n window.location.href = \"/\";\n break;\n }\n } else {\n setMessge(res.data.message);\n }\n })\n .catch((er) => { });\n };\n\n\n return (\n <div className=\"text-center w-max h-max-content rounded overflow-hidden space-y-5\">\n\n {!isPhone && <p className=\"text-content text-base mb-5\">Vui lòng đăng nháºp bằng Facebook để há»c táºp</p>}\n \n <LoginFacebook responseFacebook={responseFacebook} />\n {/* {appId &&\n <FacebookLogin\n appId={appId}\n autoLoad={false}\n textButton=\"Äăng nháºp vá»›i Facebook\"\n fields=\"name,email,picture\"\n callback={responseFacebook}\n icon={<i className=\"fab fa-facebook-f text-xl mr-2 wtext-white font-extralight\" />}\n ></FacebookLogin>\n\n } */}\n\n {message ? <p className=\"w-96 mt-4 text-red-500 transform duration-300\">{message}</p> : \"\"}\n <Modal\n title=\"Kiểm tra thông tin\"\n visible={isLogin}\n width={500}\n closable={false}\n cancelButtonProps={{ hidden: true }}\n onOk={() => onDangNhap()}\n >\n <p>\n Nháºp email:{\" \"}\n <input\n onChange={(e) => setThongTinUser({ ...thongTinUser, email: e.target.value })}\n className=\"border rounded-lg w-full hover:shadow-xl p-2 px-3 text-black\"\n />\n <p className=\"w-96 mt-4 text-red-500 transform duration-300\">{message}</p>\n </p>\n </Modal>\n {/* <LoginBackup /> */}\n </div>\n );\n}\n","import React from \"react\";\nimport Lottie from \"lottie-react\";\nimport login_bg from \"../../assets/lottie_json/login-bg.json\";\nimport \"../../css/loginPage.css\";\nimport BtnLoginFacebook from \"../../components/BtnLoginFacebook/BtnLoginFacebook\";\nimport { history } from \"../../App\";\n\nexport default function LoginPageDeskTop() {\n return (\n <div className=\"w-screen h-screen overflow-hidden bg-cover flex-col bg-fixed p-10 flex \">\n <div className=\"card-theme w-full flex-grow flex flex-col relative overflow-hidden\">\n <div className=\"w-full flex flex-grow relative\">\n <div className=\"absolute bottom-3 space-x-3 left-1/2 transform -translate-x-1/2 z-20\">\n <a\n href=\"https://cybersoft.edu.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CyberSoft\n </a>\n <a\n href=\"https://cyberlearn.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CodeZuni\n </a>\n </div>\n <div className=\"h-full w-3/5 flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 ml-10 pb-24 relative z-10\">\n <p className=\"title_login \">Hệ thống há»c táºp CodeZuni !</p>\n\n <BtnLoginFacebook />\n <p className=\"cursor-pointer\" onClick={() => { \n history.push('/signup-user')\n }}>ChÆ°a có tà i khoản. <span className=\"underline\">Äăng ký</span></p>\n </div>\n </div>\n <div className=\"w-2/5 h-full flex items-center justify-center relative \">\n <img\n src=\"https://hubspot.iqonic.design/hubfs/raw_assets/public/xamin-theme/images/banner/circle-white.png\"\n className=\"absolute border-t-0 -right-1/3 object-contain scale-150 transform\"\n alt=\"\"\n />\n <div className=\"w-full h-full transform translate-y-32 -translate-x-32 scale-150\">\n <Lottie loop={false} animationData={login_bg} style={{ width: 600, height: 600 }} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import axios from \"axios\";\nimport React, { useEffect, useState } from \"react\";\nimport toast from \"react-hot-toast\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { Form, Input } from \"antd\";\nimport Countdown from \"react-countdown\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\n\nexport default function InputOtp({ formValue }) {\n const [isDisableResent, setIsDisableResent] = useState(true);\n const [countdown, setCountdown] = useState(30);\n const rendererTimer = ({ hours, minutes, seconds }) => {\n if (hours == 0 && minutes == 0 && seconds == 0) {\n }\n return (\n <p className=\" text-base text-gray-300 py-5\"> Vui lòng chá» {seconds} giây để gá»i lại.</p>\n );\n };\n const onFinish = (values) => {\n console.log(\"Success:\", values);\n axios\n .post(`${BASE_URL_CODINGCAMP}/api/nguoidung/login-user-code/${values.opt}`)\n .then((res) => {\n console.log(res);\n toast.success(\"Äăng nháºp thà nh công\");\n localStorageServ.userInfo.set(res.data.content);\n window.location.href = \"/\";\n })\n .catch((err) => {\n console.log(err);\n toast.error(err.response.data.message);\n });\n };\n const onFinishFailed = (errorInfo) => {\n console.log(\"Failed:\", errorInfo);\n };\n const handleResetnt = () => {\n setIsDisableResent(true);\n\n axios\n .post(`${BASE_URL_CODINGCAMP}/api/nguoidung/login-user`, formValue)\n .then((res) => {\n console.log(res);\n toast.success(\"Mã OTP đã được gá»i và o email của bạn\");\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const renderCountDown = () => {\n if (isDisableResent)\n return (\n <Countdown\n // onComplete={console.log(\"compllete\")}\n // date={Date.now() + 500000000}\n date={Date.now() + 60 * 1000}\n // date={Date.now() + 10 * 1000}\n renderer={rendererTimer}\n onComplete={() => {\n setIsDisableResent(false);\n }}\n />\n );\n return (\n <p className=\"text-white py-5\">\n Bạn vẫn chÆ°a nháºn được?{\" \"}\n <span onClick={handleResetnt} className=\"text-blue-400 font-medium cursor-pointer\">\n Gá»i lại\n </span>\n </p>\n );\n };\n return (\n <Form\n name=\"basic\"\n layout=\"vertical\"\n labelCol={{\n span: 16,\n }}\n wrapperCol={{\n span: 16,\n }}\n initialValues={{\n remember: true,\n }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <Form.Item\n label={\n <p>\n Mã xác thá»±c sẽ được gá»i qua email đến{\" \"}\n <span className=\"underline font-medium\">{formValue.email}</span>{\" \"}\n </p>\n }\n name=\"opt\"\n rules={[\n {\n required: true,\n message: \"Mã opt không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n {renderCountDown()}\n <Form.Item\n wrapperCol={{\n span: 16,\n }}\n >\n <button className=\"btn_theme_red h-10 leading-9 p-0 px-5 pb-5\">Xác thá»±c</button>\n </Form.Item>\n {/* <button\n className=\"btn_theme_red h-10 leading-9 p-0 px-5 pb-5\"\n onClick={handleClick}\n disabled={isDisableResent}\n >\n {isDisableResent ? `Resend OTP (${countdown}s)` : \"Resend OTP\"}\n </button> */}\n </Form>\n );\n}\n","import { Button, Checkbox, Form, Input } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport \"./style.scss\";\nimport axios from \"axios\";\nimport toast from \"react-hot-toast\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport InputOtp from \"./InputOtp\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nconst FormLogin = () => {\n const [isShowOtp, setIsShowOtp] = useState(false);\n const [formValue, setformValue] = useState({});\n\n const onFinish = (values) => {\n axios\n .post(`${BASE_URL_CODINGCAMP}/api/nguoidung/login-user`, values)\n .then((res) => {\n console.log(res);\n toast.success(\"Äăng nháºp thà nh công\");\n localStorageServ.userInfo.set(res.data.content);\n // window.location.href = \"/\";\n setformValue(values);\n setIsShowOtp(true);\n })\n .catch((err) => {\n console.log(err);\n toast.error(err.response.data.message);\n });\n };\n const onFinishFailed = (errorInfo) => {\n console.log(\"Failed:\", errorInfo);\n };\n return (\n <div id=\"formLogin\">\n {!isShowOtp ? (\n <Form\n name=\"basic\"\n layout=\"vertical\"\n labelCol={{\n span: 8,\n }}\n wrapperCol={{\n span: 16,\n }}\n initialValues={{\n remember: true,\n }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <Form.Item\n label=\"Email\"\n name=\"email\"\n rules={[\n {\n required: true,\n message: \"Email không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n\n <Form.Item\n label=\"Máºt khẩu\"\n name=\"matKhau\"\n rules={[\n {\n required: true,\n message: \"Máºt khẩu không được để trống\",\n },\n ]}\n >\n <Input.Password />\n </Form.Item>\n\n <Form.Item\n wrapperCol={{\n span: 16,\n }}\n >\n <button className=\"btn_theme_red h-10 leading-9 p-0 px-5 pb-5\">Äăng nháºp</button>\n </Form.Item>\n </Form>\n ) : (\n <InputOtp formValue={formValue} />\n )}\n </div>\n );\n};\nexport default FormLogin;\n","import React, { useEffect, useState } from 'react';\nimport { Input } from 'antd';\nimport './CustomInput.css';\n\nconst CustomInput = ({ placeholder, type = \"text\", name, value, isRead, ...props }) => {\n const [isFocused, setIsFocused] = useState(false);\n const [hasValue, setHasValue] = useState(false);\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = (e) => {\n setIsFocused(false);\n setHasValue(e.target.value !== '');\n };\n\n useEffect(() => {\n if (value) {\n setHasValue(true);\n }\n }, [value]);\n return (\n <div className={`custom-input ${isFocused || hasValue ? 'focused' : ''}`}>\n <Input \n {...props} \n type={type}\n value={value}\n onFocus={handleFocus} \n onBlur={handleBlur}\n readOnly={isRead}\n />\n <label className=\"labelGG\">{placeholder}</label>\n </div>\n );\n};\n\nexport default CustomInput;\n","import { Button, Checkbox, Form, Input } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport \"./style.scss\";\nimport axios from \"axios\";\nimport toast from \"react-hot-toast\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport InputOtp from \"./InputOtp\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport CustomInput from \"../../components/CustomInput/CustomInput\";\nconst FormLoginEmailPhone = () => {\n const [isShowOtp, setIsShowOtp] = useState(false);\n const [formValue, setformValue] = useState({});\n\n const onFinish = (values) => {\n axios\n .post(`${BASE_URL_CODINGCAMP}/api/nguoidung/login-user`, values)\n .then((res) => {\n console.log(res);\n toast.success(\"Äăng nháºp thà nh công\");\n localStorageServ.userInfo.set(res.data.content);\n // window.location.href = \"/\";\n setformValue(values);\n setIsShowOtp(true);\n })\n .catch((err) => {\n console.log(err);\n toast.error(err.response.data.message);\n });\n };\n const onFinishFailed = (errorInfo) => {\n console.log(\"Failed:\", errorInfo);\n };\n return (\n <div id=\"formLogin\">\n {!isShowOtp ? (\n <Form\n style={{width:'100%'}}\n name=\"basic\"\n layout=\"vertical\"\n labelCol={{\n span: 8,\n }}\n wrapperCol={{\n span: 16,\n }}\n initialValues={{\n remember: true,\n }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <Form.Item\n name=\"email\"\n rules={[\n {\n required: true,\n message: \"Email không được để trống\",\n },\n ]}\n >\n <CustomInput placeholder=\"Email\"/>\n </Form.Item>\n\n <Form.Item\n name=\"matKhau\"\n rules={[\n {\n required: true,\n message: \"Số Ä‘iện thoại không được để trống\",\n },\n ]}\n >\n <CustomInput placeholder=\"Số Ä‘iện thoại\"/>\n </Form.Item>\n\n <Form.Item\n \n style={{textAlign:'center'}}\n wrapperCol={{\n span: 16,\n }}\n >\n <button className=\"btnLoginMobile h-10 leading-9 p-0 px-5 pb-5\">Äăng nháºp</button>\n </Form.Item>\n </Form>\n ) : (\n <InputOtp formValue={formValue} />\n )}\n </div>\n );\n};\nexport default FormLoginEmailPhone;","import React, { useState } from \"react\";\nimport Lottie from \"lottie-react\";\nimport login_bg from \"../../assets/lottie_json/login-bg.json\";\nimport \"../../css/loginPage.css\";\nimport BtnLoginFacebook from \"../../components/BtnLoginFacebook/BtnLoginFacebook\";\nimport { history } from \"../../App\";\nimport FormLogin from \"../LoginPageEmail/FormLogin\";\nimport FormLoginEmailPhone from \"../LoginPageEmail/FormLoginEmailPhone\";\n\nexport default function LoginPageTablet() {\n return (\n <div className=\"w-screen h-screen overflow-hidden bg-cover flex flex-col bg-fixed py-10 \">\n <div className=\" w-full flex-grow flex flex-col relative\">\n <div className=\"w-full flex flex-grow flex-col relative overflow-hidden\">\n <div className=\"absolute bottom-3 space-x-3 left-1/2 transform -translate-x-1/2\">\n <a\n href=\"https://cybersoft.edu.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CyberSoft\n </a>\n <a\n href=\"https://cyberlearn.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CodeZuni\n </a>\n q\n </div>\n <div className=\" w-full flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 pb-24 relative z-10 items-center\">\n <p className=\"title_login text-3xl text-white text-center\">Hệ thống há»c táºp CodeZuni</p>\n <BtnLoginFacebook />\n <span className=\"pt-3\">HOẶC</span>\n <div style={{width:'90%'}}>\n <FormLoginEmailPhone/>\n </div>\n <p className=\"cursor-pointer\" onClick={() => { \n history.push('/signup-user')\n }}>ChÆ°a có tà i khoản. <span className=\"underline\">Äăng ký</span></p>\n </div>\n </div>\n <div className=\"w-full flex items-center justify-center relative \">\n <img\n src=\"https://hubspot.iqonic.design/hubfs/raw_assets/public/xamin-theme/images/banner/circle-white.png\"\n className=\"absolute border-t-0 -right-1/3 object-contain transform\"\n alt=\"\"\n />\n <div className=\"h-96 w-96 flex items-center justify-center \">\n <div className=\" transform scale-150\">\n <Lottie animationData={login_bg} style={{ width: 500, height: 500 }} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useMediaQuery } from \"react-responsive\";\nimport React from \"react\";\nimport LoginPageDeskTop from \"./LoginPageDesktop\";\nimport LoginPageTablet from \"./LoginPageTablet\";\n\nconst Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 640 });\n return isDesktop ? children : null;\n};\nconst Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ maxWidth: 639 });\n\n return isTablet ? children : null;\n};\n\nexport default function LoginPage({}) {\n return (\n <>\n <Desktop>\n <LoginPageDeskTop />\n </Desktop>\n <Tablet>\n <LoginPageTablet />\n </Tablet>\n </>\n );\n}\n","import React from 'react'\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\nexport default function BtnGoogleCapcha() {\n return (\n <GoogleReCaptchaProvider\n reCaptchaKey=\"6Ldb3eEUAAAAAHRKJkJeU7QDppMGw4rtwmkXi1qU\"\n language=\"vi\"\n />\n )\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, Select, Radio } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { message } from \"antd\";\nimport {\n setCurrentStep,\n setUserInfor,\n} from \"../../../redux/reducer/signUpReducer\";\nimport httpServ from \"../../../services/http.service\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport axios from \"axios\";\nimport { history } from \"../../../App\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nimport CustomInput from \"../../../components/CustomInput/CustomInput\";\nexport default function FormDieuKhoan({ handleOpenModal }) {\n // start\n \n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow< 768?true:false\n const regisPackage = localStorageServ.regisPackage.get();\n const [congViecHienTai, setCongViecHienTai] = useState(\"SV\");\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue({\n congViecHienTai1: \"SV\",\n luongMongMuon: 0,\n // hoTenPH: \"\",\n // emailPH: \"\",\n // emailPH: \"\",\n });\n }, []);\n // end\n const { Option } = Select;\n let { currentStep } = useSelector((state) => state.signUp);\n const { userInfo } = useSelector((state) => state.signUp);\n const onFinish = (values) => {\n let newUserInfor = JSON.parse(JSON.stringify(userInfo));\n\n let sdt = values.soDT;\n if (sdt.length > 0 && sdt[0] === \"+\") {\n sdt = sdt.split(\"\"); // or newStr = [...str];\n sdt.splice(0, 1);\n\n sdt = sdt.join(\"\");\n }\n newUserInfor.email = values.email;\n newUserInfor.hoTen = values.hoTen;\n newUserInfor.soDT = sdt;\n newUserInfor.thongTinMoRong.noiCongTacHienTai = values.noiCongTac;\n newUserInfor.thongTinMoRong.congViecHienTai = JSON.stringify([\n values.congViecHienTai1,\n values.congViecHienTai2,\n values.congViecHienTai3,\n ]);\n // thong tin phụ huynh\n if (values.hoTenPH) {\n newUserInfor.thongTinMoRong.hoTenPH = values.hoTenPH;\n newUserInfor.thongTinMoRong.emailPH = values.emailPH;\n newUserInfor.thongTinMoRong.soDTPH = values.soDTPH;\n }\n\n httpServ\n .getCheckGmail(values.email)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Email đã tồn tại\");\n } else {\n httpServ\n .getCheckSDT(sdt)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Số Ä‘iện thoại đã tồn tại\");\n } else {\n dispatch(setUserInfor(newUserInfor));\n dispatch(setCurrentStep(1));\n }\n })\n .catch((err) => {\n // console.log(\"yes\");\n });\n }\n })\n .catch((err) => {});\n };\n const dispatch = useDispatch();\n\n const onFinishFailed = (errorInfo) => {\n // console.log(\"Failed:\", errorInfo);\n };\n const [isVietNam, setIsVietNam] = useState(true);\n const handleNoiHocTap = (value) => {\n value === \"vn\" ? setIsVietNam(true) : setIsVietNam(false);\n };\n const handleValidateEmail = (_, value, callback) => {\n httpServ\n .getCheckGmail(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Email đã tồn tại\");\n }\n })\n .catch((err) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n // console.log(\"yes\");\n });\n });\n };\n const handleValidateSDT = (_, value, callback) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n callback(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n callback();\n });\n };\n let subFormHocVien = (\n <>\n <Form.Item\n // label=\"Há» và tên\"\n name=\"hoTen\"\n rules={[{ required: true, message: \"TrÆ°á»ng nà y không được để trống\" }]}\n >\n <CustomInput placeholder=\"Há» và tên\"/>\n </Form.Item>\n <Form.Item\n // label=\"Email\"\n name=\"email\"\n rules={[\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n {/* <Input /> */}\n <CustomInput placeholder=\"Email\" />\n </Form.Item>\n <Form.Item\n // label=\"Số ÄT\"\n name=\"soDT\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder=\"Số DT\"/>\n </Form.Item>\n </>\n );\n let renderFormPhuHuynh = () => {\n if (congViecHienTai == \"C2\" || congViecHienTai == \"C3\") {\n return (\n <>\n <p className=\"text-white py-2\">\n {\" \"}\n Bạn vui lòng cung cấp thông tin phụ huynh của bạn để CodeZuni thông\n báo thông tin há»c táºp của bạn đến Phụ huynh khi cần nhé ( Sau đây\n gá»i tắt là Phụ Huynh ) :\n </p>\n\n <Form.Item\n name=\"hoTenPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n >\n <CustomInput placeholder={\"Há» và tên\"} />\n </Form.Item>\n <Form.Item\n name=\"emailPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <CustomInput placeholder={\"Email\"} />\n </Form.Item>\n <Form.Item\n name=\"soDTPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder={\"Số DT\"} />\n </Form.Item>\n </>\n );\n }\n };\n return (\n <div className=\"w-full flex justify-center flex-col items-center h-full\">\n <Form\n layout=\"vertical\"\n name=\"basic\"\n className={`${isPhone?'':'container'}`}\n labelCol={{ sm: { span: 6 }, xl: { span: 4 } }}\n wrapperCol={{ span: 24 }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <Form.Item label=\"Bạn Ä‘ang là :\" name=\"congViecHienTai1\" rules={[]}>\n <Radio.Group\n onChange={(e) => {\n setCongViecHienTai(e.target.value);\n // console.log(e.target.value);\n }}\n defaultValue=\"SV\"\n >\n <Radio className=\"text-white\" value=\"SV\">\n Sinh viên CNTT\n </Radio>\n <Radio className=\"text-white\" value=\"DL\">\n CNTT đã Ä‘i là m{\" \"}\n </Radio>\n <Radio className=\"text-white\" value=\"TN\">\n Trái ngà nh\n </Radio>\n <Radio className=\"text-white\" value=\"C2\">\n Há»c sinh cấp 2\n </Radio>\n <Radio className=\"text-white\" value=\"C3\">\n Há»c sinh cấp 3\n </Radio>\n </Radio.Group>\n </Form.Item>\n\n <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai2\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn há»c trÆ°á»ng nà o...?\"\n : congViecHienTai === \"DL\"\n ? \"Bạn là m công ty nà o...?\"\n : congViecHienTai == \"TN\"\n ? \"Bạn là m ngà nh gì...?\"\n : \"Bạn há»c trÆ°á»ng nà o?\"\n }\n />\n </Form.Item>\n <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai3\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn là sinh viên năm mấy...?\"\n : congViecHienTai === \"DL\"\n ? \"Bao nhiêu năm kinh nghiệm...?\"\n : congViecHienTai == \"TN\"\n ? \"Äã là m bao lâu...?\"\n : \"Bạn há»c lá»›p mấy?\"\n }\n />\n </Form.Item>\n {renderFormPhuHuynh()}\n\n {/* from phụ huynh */}\n <h4 className=\"text-white\">\n Thông tin há»c viên ( Sau đây gá»i tắt là Há»c Viên ):\n </h4>\n {subFormHocVien}\n <Form.Item label=\"NÆ¡i há»c táºp/ là m việc\">\n <Input.Group compact>\n <Select\n onChange={handleNoiHocTap}\n defaultValue=\"Việt Nam\"\n style={{ width: 'auto' }}\n >\n <Option value=\"vn\">Việt Nam</Option>\n <Option value=\"tg\">Quốc gia khác</Option>\n </Select>\n {isVietNam ? (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Select placeholder=\"NÆ¡i ở/ là m việc\">\n <Option value=\"Hồ Chà Minh\">Hồ Chà Minh</Option>\n <Option value=\"Hà Ná»™i\">Hà Ná»™i</Option>\n <Option value=\"Cần ThÆ¡\">Cần ThÆ¡</Option>\n <Option value=\"Nha Trang\">Nha Trang</Option>\n <Option value=\"Huế\">Huế </Option>\n <Option value=\"Vinh\">Vinh</Option>\n <Option value=\"Khác\">Khác</Option>\n </Select>\n </Form.Item>\n ) : (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n )}\n </Input.Group>\n </Form.Item>\n\n {/* <Form.Item label=\"Mã giá»›i thiệu/Ưu đãi\" name=\"maGioiThieu\">\n <Input defaultValue=\"\" />\n </Form.Item> */}\n <Form.Item\n name=\"agreement\"\n label=\"\"\n valuePropName=\"checked\"\n rules={[\n {\n required: true,\n message: \"Hãy Ä‘á»c và đồng ý các Ä‘iá»u khoản của CodeZuni\",\n },\n ]}\n >\n <Checkbox className=\"text-white\">\n Tôi đồng ý vá»›i các{\" \"}\n <span\n onClick={() => {\n handleOpenModal();\n }}\n className=\"text-yellow-400 underline cursor-pointer\"\n >\n ÄIỀU KHOẢN\n </span>{\" \"}\n của CodeZuni\n </Checkbox>\n </Form.Item>\n <Form.Item\n wrapperCol={{ sm: { offset: 0 }, md: { offset: 4 }, span: 16 }}\n >\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button\n className=\"px-5 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Tiếp theo\n </Button>\n </div>\n </Form.Item>\n </Form>\n <p className=\"cursor-pointer\" onClick={() => { \n history.push('/login')\n }}>Äã có tà i khoản. <span className=\"underline\">Äăng nháºp</span></p>\n <div></div>\n </div>\n );\n}","import React from \"react\";\nimport { Modal } from \"antd\";\nimport \"./dieuKhoan.scss\";\n\nexport default function ModalDieuKhoan({ isShowDieuKhoan, handleCloseModal }) {\n return (\n <div className=\"\" id=\"modal-dieu-khoan\">\n <Modal\n style={{ top: 20 }}\n title=\"Quy Äịnh Há»c Táºp\"\n className=\"rounded-xl w-4/5 felx flex-col items-center h-5/6 \"\n // onOk={handleOk}\n visible={isShowDieuKhoan}\n onCancel={() => {\n handleCloseModal();\n }}\n footer={\n <button\n onClick={() => {\n handleCloseModal();\n }}\n className=\" cursor-pointe bg-yellow-theme px-5 py-2 rounded text-black font-medium\"\n >\n Äồng ý\n </button>\n }\n >\n <div\n id=\"form-dieu-khoan\"\n m\n className=\"space-y-2 text-content text-black bg-white p-10\"\n >\n <p className=\"text-xl font-medium text-center text-gray-900\">\n ÄIỀU KHOẢN QUY ÄỊNH HỌC TẬP\n </p>\n <p className=\"\">\n {/* DÆ°á»›i đây là những Ä‘iá»u khoản được áp dụng cho há»c viên của CodeZuni. Xin hãy Ä‘á»c kỹ toà n bá»™ thá»a thuáºn trÆ°á»›c khi tham gia. Má»™t khi bạn đã đăng ký tham\n gia trên CodeZuni chúng tôi sẽ hiểu rằng bạn đã Ä‘á»c và đồng ý toà n bá»™ Ä‘iá»u khoản được Ä‘Æ°a ra trong bản thá»a thuáºn nà y. */}\n *Có hiệu lá»±c từ ngà y 01.08.2023, và áp dụng cho tất cả há»c viên Ä‘ang\n há»c tại CodeZuni. Phụ Huynh, há»c viên vui lòng Ä‘á»c kỹ và ký xác nháºn\n tuân thủ những quy định đã được trình bà y trong bảng nà y khi đăng ký\n nháºp há»c. CodeZuni áp dụng bảng ná»™i quy nà y nhằm tạo Ä‘iá»u kiện há»c táºp\n tốt nhất cho Há»c viên và đảm bảo chất lượng giảng dạy. Trong trÆ°á»ng\n hợp Ná»™i Quy Há»c Táºp có ná»™i dung cáºp nháºt má»›i được gá»i qua\n SMS/Zalo/Email mà Phụ Huynh và Há»c Viên không láºp tức có bất kỳ phản\n đối nà o, CodeZuni sẽ hiểu rằng Phụ Huynh và Há»c Viên đã đồng ý vá»›i ná»™i\n dung cáºp nháºt của Ná»™i Quy Há»c Táºp\n </p>\n <ol className=\"list-decimal text-lg\">\n {/* big 1 */}\n <li>\n <h3 className=\"underline\">Äiá»u kiện nháºp há»c: </h3>\n <ol id=\"sub-1\" className=\"list-decimal\">\n <li>\n Há»c viên phải hoà n thà nh bà i thi xếp lá»›p trÆ°á»›c khi nháºp há»c.\n </li>\n <li>\n Tham gia khóa há»c theo lá»™ trình đã được trao đổi và thống nhất\n vá»›i Bá»™ Pháºn TÆ° Vấn.\n </li>\n <li>\n Hoà n thà nh 100% há»c phà trÆ°á»›c khi nháºp há»c. Quy định vá» há»c\n phÃ:\n </li>\n <li>\n Há»c phÃ:\n <p>\n Há»c phà là khoản tiá»n mà ngÆ°á»i há»c thanh toán để chi trả cho\n dịch vụ giáo dục, Ä‘Ã o tạo theo lá»™ trình há»c đã đồng thuáºn\n cùng CodeZuni. Há»c viên xác nháºn đã tìm hiểu chÆ°Æ¡ng trình há»c,\n Ä‘iá»u kiện cÆ¡ sở váºt chất, trang thiết bị phục vụ há»c táºp và \n các dịch vụ trÆ°á»›c khi đăng ký há»c.\n </p>\n </li>\n <li>\n Hoà n lại há»c phÃ\n <ol className=\"list-decimal\" id=\"sub-1-5\">\n <li>\n Há»c phà sẽ KHÔNG được hoà n lại trừ các trÆ°á»ng hợp sau:\n <ol style={{ listStyleType: \"lower-alpha\" }} className=\"\">\n <li>\n Sau ba (03) buổi há»c đầu tiên há»c viên cảm thấy không\n hứng thú vá»›i việc há»c nà y{\" \"}\n </li>\n <li>Hoặc lá»—i xuất phát từ CodeZuni</li>\n </ol>\n </li>\n <li>\n Quy định hoà n há»c phà cho các trÆ°á»ng hợp được hoà n phÃ:\n <ol style={{ listStyleType: \"lower-alpha\" }} className=\"\">\n <li>\n Sau ba (03) buổi há»c đầu tiên há»c viên cảm thấy không\n hứng thú vá»›i việc há»c nà y: CodeZuni sẽ hoà n 100% há»c phÃ\n các buổi chÆ°a há»c.{\" \"}\n </li>\n <li>\n Lá»—i xuất phát từ CodeZuni: CodeZuni sẽ hoà n 100% há»c phà các\n buổi chÆ°a há»c nếu phát sinh các tình huống sau:\n <ul className=\"list-disc\">\n <li>\n CodeZuni đã trì hoãn lá»›p há»c quá ba (03) tháng kể từ\n ngà y dá»± kiến khai giảng\n </li>\n <li>\n CodeZuni dịch chuyển Trung tâm CodeZuni ra khá»i phạm vị\n Quáºn/Huyện so vá»›i địa Ä‘iểm đăng ký ban đầu của Há»c\n Viên.\n </li>\n </ul>\n </li>\n </ol>\n </li>\n <li>\n Thá»i gian hoà n há»c phà và các khoản loại trừ:\n <ul className=\"list-disc\">\n <li>\n Việc hoà n tiá»n sẽ được thá»±c hiện trong vòng 10 ngà y\n là m việc sau khi CodeZuni nháºn Ä‘Æ¡n yêu cầu hoà n tiá»n được\n ký xác nháºn bởi Phụ Huynh.\n </li>\n <li>\n CodeZuni chỉ hoà n phần há»c phà còn lại sau khi trừ Ä‘i các\n chi phà cần thiết gồm phà chuyển đổi trả góp và chÆ°Æ¡ng\n trình khuyến mãi (nếu có)\n </li>\n <li>\n Hồ sÆ¡ hoà n phà gồm: ÄÆ¡n yêu cầu hoà n phÃ; Căn cÆ°á»›c\n công dân/Chứng minh nhân dân/Giấy phép lái xe; Hồ sÆ¡\n khác theo yêu cầu từ CodeZuni (nếu có).\n </li>\n </ul>\n </li>\n </ol>\n </li>\n <li>\n Bảo lÆ°u há»c phÃ:\n <ol className=\"list-decimal\" id=\"sub-1-6\">\n <li>\n Há»c viên đăng ký 1 khóa há»c\n <p>\n Há»c viên chỉ được bảo lÆ°u há»c phà khi đáp ứng đủ các\n Ä‘iá»u kiện sau:\n </p>\n <ul className=\"list-disc\">\n <li>\n Chỉ được bảo lÆ°u khi lá»›p khai giảng tối Ä‘a 2 tuần và \n phà bảo lÆ°u là 30% há»c phà khóa má»›i sẽ chuyển qua.\n </li>\n <li>\n Nếu há»c viên bảo lÆ°u trÆ°á»›c ngà y khai giảng của khóa\n tối thiểu 20 ngà y thì được bảo lÆ°u miá»…n phÃ\n </li>\n <li>\n CodeZuni chỉ bảo lÆ°u há»c phà của những buổi há»c còn lại\n chÆ°a diá»…n ra và KHÔNG bảo lÆ°u chÆ°Æ¡ng trình ƯU ÄÃI.\n </li>\n <li>\n Há»c viên thông báo việc bảo lÆ°u trÆ°á»›c Ãt nhất 48h cho\n CodeZuni. Há»c phà được bảo lÆ°u sẽ tÃnh từ ngà y Há»c viên\n hoà n thà nh thủ tục bảo lÆ°u vá»›i CodeZuni.\n </li>\n <li>\n Há»c phà bảo lÆ°u chỉ được bảo lÆ°u trong vòng ba (03)\n tháng kể từ ngà y hoà n tất thủ tục bảo lÆ°u. Sau ba (03)\n tháng, số tiá»n bảo lÆ°u sẽ hết hạn sá» dụng và khách\n hà ng sẽ thanh toán 100% há»c phà nếu muốn đăng ký há»c\n lại.\n </li>\n <li>\n Há»c phà bảo lÆ°u sẽ KHÔNG được hoà n lại vá»›i bất kỳ lý\n do gì.\n </li>\n <li>\n Há»c viên chỉ được bảo lÆ°u má»™t (01) lần duy nhất cho\n khóa há»c đã đăng ký.\n </li>\n <li>\n Äể đảm bảo chất lượng há»c táºp, Há»c viên khi quay lại\n nên tham gia khóa há»c từ đầu khóa và đóng há»c phà bổ\n sung nếu có.\n </li>\n </ul>\n </li>\n <li>\n Há»c viên đăng ký lá»™ trình 2-3-4-5 khóa trở lên (combo)\n <p>\n Há»c viên được khuyến khÃch chá»n lá»›p tiếp theo sá»›m để\n kiến thức được liên tục. Trong trÆ°á»ng hợp có việc báºn\n chÆ°a thể tiếp tục ngay sau khi xong khóa há»c, há»c viên\n được bảo lÆ°u tối Ä‘a 2 tháng để ghi danh và o khóa há»c\n tiếp theo. TrÆ°á»›c 1 tháng khi lá»›p má»›i bắt đầu, há»c viên\n cần thông báo để CodeZuni sắp xếp lá»›p phù hợp.\n </p>\n </li>\n </ol>\n </li>\n <li>\n Chuyển đổi há»c phà sang hình thức tÃn dụng cho Há»c viên khác:\n <p>\n TrÆ°á»ng hợp Há»c viên không tiếp tục tham gia khóa há»c mà \n không thuá»™c các trÆ°á»ng hợp nêu tại mục 2.2, Há»c viên chỉ\n được chuyển há»c phà cho Há»c viên khác nếu Há»c viên đó là \n ngÆ°á»i có mối quan hệ trong gia đình vá»›i Há»c viên gồm: vợ,\n chồng, cha đẻ, mẹ đẻ, con đẻ của Há»c viên; anh, chị, em ruá»™t\n của Há»c viên. Há»c viên bắt buá»™c cung cấp chứng từ để chứng\n minh nếu nhÆ° có yêu cầu từ phÃa CodeZuni.\n </p>\n </li>\n <li>\n Äóng há»c phà chênh lệch khi Há»c viên chuyển sang cấp Ä‘á»™ khác,\n chÆ°Æ¡ng trình khác, mô hình há»c táºp khác:\n <ol className=\"list-decimal\" id=\"sub-1-8\">\n <li>\n Trong trÆ°á»ng hợp Há»c viên chuyển từ lá»›p có há»c phà cao hÆ¡n\n sang lá»›p có há»c phà thấp hÆ¡n, há»c phà còn dÆ° sẽ được bảo\n lÆ°u cho khóa há»c tiếp theo và không được hoà n trả dÆ°á»›i bất\n kỳ hình thức nà o.\n </li>\n <li>\n TrÆ°á»ng hợp Há»c viên chuyển từ lá»›p có há»c phà thấp hÆ¡n sang\n lá»›p có há»c phà cao hÆ¡n, Há»c viên phải đóng thêm khoản há»c\n phà chênh lệch giữa hai lá»›p há»c.\n </li>\n </ol>\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\">\n {\" \"}\n Quy định chuyển lá»›p và chuyển đổi mô hình há»c táºp:\n </h3>\n <ol id=\"sub-2\" className=\"list-decimal\">\n <li>\n Há»c viên không được chuyển lá»›p quá hai (02) lần trong má»™t (01)\n lá»™ trình há»c ( Lá»™ trình há»c bao gồm nhiá»u khóa há»c )\n </li>\n <li>\n TrÆ°á»ng hợp Há»c viên chuyển từ khóa há»c có chÆ°Æ¡ng trình Æ°u đãi\n sang khóa há»c không Æ°u đãi hoặc từ khóa há»c có Æ°u đãi cao sang\n khóa há»c có Æ°u đãi thấp hÆ¡n, thì Há»c viên sẽ phải bắt buá»™c\n đóng bổ sung há»c phà chênh lệch. TrÆ°á»ng hợp Há»c viên chuyển từ\n khóa há»c có Æ°u đãi thấp hÆ¡n sang khóa há»c có Æ°u đãi cao thì\n há»c phà chênh lệch sẽ không được hoà n lại dÆ°á»›i bất kỳ hình\n thức nà o.\n </li>\n <li>\n Khi nháºn được chỉ đạo từ Sở Giáo Dục của địa phÆ°Æ¡ng hoặc các\n cÆ¡ quan nhà nÆ°á»›c có thẩm quyá»n vá» việc chuyển đổi mô hình há»c\n táºp từ trá»±c tiếp tại trung tâm (offline) sang mô hình há»c trá»±c\n tuyến qua mạng (online), CodeZuni sẽ thông báo cho Há»c viên vá»\n việc chuyển đổi nà y và sẽ sắp xếp các lá»›p há»c hiện tại được\n diá»…n ra tiếp tục dÆ°á»›i hình thức online. Trong trÆ°á»ng hợp Há»c\n viên vắng mặt ở các buổi há»c online, thì há»c phà trong giai\n Ä‘oạn há»c online nà y vẫn được ghi nháºn và sẽ không được hoà n\n lại dù bất kỳ lý do gì.\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Quy định vượt lá»›p:</h3>\n <ol id=\"sub-3\">\n <li>\n Có được nháºn xét tốt và được Ä‘á» nghị từ giảng viên đứng lá»›p\n </li>\n <li>\n Há»c viên phải hoà n thà nh bà i thi vượt lá»›p đạt tiêu chuẩn Ä‘á» ra\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Thái Ä‘á»™ há»c táºp của Há»c viên: </h3>\n <ol id=\"sub-4\">\n <li>Äi há»c chuyên cần, đúng giá» quy định.</li>\n <li>\n Không sá» dụng Ä‘iện thoại trong giá» há»c trừ khi được giảng viên\n đứng lá»›p cho phép.\n </li>\n <li>\n Phải hoà n thà nh bà i táºp vá» nhà do giảng viên đứng lá»›p giao\n trÆ°á»›c khi đến lá»›p.\n </li>\n <li>\n Nghiêm cấm hà nh vi thiếu tôn trá»ng, gây thÆ°Æ¡ng tÃch đối vá»›i\n giáo viên, nhân viên CodeZuni và các Há»c viên khác. Há»c viên sẽ\n không được tiếp tục theo há»c và KHÔNG được hoà n lại phà nếu vi\n phạm Ä‘iá»u nà y.\n </li>\n <li>\n Phải chịu trách nhiệm đối vá»›i những hà nh vi phá hoại tà i sản\n chung của tòa nhà hoặc là m ảnh hưởng đến cÆ¡ sở váºt chất, môi\n trÆ°á»ng giảng dạy và há»c táºp của CodeZuni.\n </li>\n <li>\n CodeZuni không chịu trách nhiệm quản lý Há»c viên ngoà i giá» há»c\n chÃnh thức và các Há»c viên tá»± ý Ä‘i ra ngoà i khuôn viên CodeZuni\n mà không có sá»± cho phép của CodeZuni.\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\">Tham dá»± lá»›p:</h3>\n <p>\n Nếu Há»c viên xin phép nghỉ phải có sá»± đồng ý của phụ huynh. Phụ\n huynh phải gá»i Ä‘iện đến xin phép trÆ°á»›c khi buổi há»c bắt đầu. Nếu\n Há»c viên nghỉ há»c mà không thông báo cho CodeZuni thì Há»c viên được\n xem là nghỉ không phép.\n </p>\n </li>\n <li>\n <h3 className=\"underline\"> Bà i kiểm tra và bà i thi :</h3>\n <ol id=\"sub-6\">\n <li>\n Há»c viên bắt buá»™c phải hoà n thà nh các bà i thi, bà i táºp, dá»± án\n (đã được thông báo trong ngà y đầu tiên của khóa há»c) để đánh\n giá chất lượng há»c táºp của Há»c viên.\n </li>\n <li>\n Nếu Há»c viên không thể tham dá»± ngà y thi giữa khóa hoặc cuối\n khóa, Há»c viên phải thông báo trÆ°á»›c 1 tuần vá»›i Bá»™ Pháºn Há»c Vụ\n để sắp xếp ngà y thi lại thÃch hợp nhất và phải có lý do chÃnh\n đáng (tham dá»± các kỳ thi há»c kỳ/thi chứng chỉ, tham gia lá»›p\n há»c khác tại CodeZuni, Há»c viên Ä‘i du há»c hoặc bị bệnh/tai nạn/sá»±\n cố trong ngà y thi).\n </li>\n <li>\n Nếu Há»c viên vắng thi mà không báo trÆ°á»›c vá»›i Bá»™ Pháºn Há»c Vụ\n hoặc vắng thi ngoà i những lý do nêu trên thì Há»c viên phải\n đóng lệ phà thi bổ sung (200.000 VNÄ/bà i thi).\n </li>\n <li>\n Há»c viên phải trung thá»±c trong các kỳ thi. Nếu phát hiện gian\n láºn, kết quả Há»c viên sẽ bị hủy và Há»c viên phải là m lại bà i\n thi khác\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Sá» dụng hình ảnh truyá»n thông :</h3>\n <p>\n Trong quá trình há»c táºp và tham gia các hoạt Ä‘á»™ng ngoại khóa, sá»±\n kiện tại CodeZuni, hình ảnh của phụ huynh và há»c viên có thể được\n sá» dụng vá»›i mục Ä‘Ãch truyá»n thông cho CodeZuni, cụ thể vá» ná»™i dung\n hình ảnh sẽ được đăng tải trên các kênh truyá»n thông, mạng xã\n há»™i nhÆ°: há»c viên Ä‘ang há»c táºp, tham gia các sá»± kiện do CodeZuni tổ\n chức, tÆ°Æ¡ng tác, vui chÆ¡i vá»›i giáo viên, bạn bè và phụ huynh.\n Trong trÆ°á»ng hợp phụ huynh và há»c viên không đồng ý vá»›i Ä‘iá»u\n khoản trên, Phụ huynh và há»c viên báo vá»›i quản lý trung tâm để\n gạch bá» và ký tên xác nháºn vô hiệu hóa Ä‘iá»u khoản nà y.\n </p>\n </li>\n {/* upate thêm li */}\n <li>\n <h3 className=\"underline\"> Việc bảo máºt thông tin :</h3>\n <ol id=\"sub-8\">\n <li>\n Bạn có trách nhiệm tá»± mình bảo quản Tà i Khoản, nếu Tà i Khoản\n bị lá»™ ra ngoà i dÆ°á»›i bất kỳ hình thức nà o, CodeZuni sẽ không chịu\n trách nhiệm vá» má»i tổn thất phát sinh. Bạn không được download\n video, không được chia sẻ video, tà i liệu, mã nguồn, tà i\n nguyên mà CodeZuni cung cấp cho bạn lên Internet vá»›i bất kỳ hình\n thức nà o. Nếu vi phạm, tà i khoản của bạn sẽ bị dừng hoạt Ä‘á»™ng\n và phải chịu trách nhiệm trÆ°á»›c pháp luáºt vá» hà nh vi xâm phạm\n sở hữu trà tuệ.{\" \"}\n </li>\n <li>\n CodeZuni có thể gá»i thông báo tình hình há»c táºp, chÆ°Æ¡ng trình\n khuyến mãi (nếu có), thông báo khóa há»c má»›i sắp ra mắt để há»c\n viên quan tâm có thể đăng ký ngay để được Æ°u đãi.\n </li>\n <li>\n Há»c viên có trách nhiệm bảo máºt tà i khoản, toà n bá»™ video, tà i\n liệu mà trung tâm đã cung cấp. Há»c viên không được cung cấp\n cho bất kì bên thứ 3 nà o mà chÆ°a được sá»± đồng ý của CodeZuni. Nếu\n cố tình vi phạm bạn sẽ bị xá» phạt 200,000,000 VND (hai trăm\n triệu Việt Nam Äồng) và CodeZuni sẽ toà n quyá»n xá» lý các vi phạm.\n Tà i khoản đăng nháºp hệ thống là tà i khoản facebook chÃnh chủ,\n chỉ xét duyệt và chấp nháºn 1 lần duy nhất lúc đăng kÃ. Bất kì\n lý do nà o liên quan đến việc thay đổi tà i khoản đăng nháºp sau\n nà y Ä‘á»u KHÔNG được há»— trợ.\n </li>\n\n <li>\n Há»c viên không được dùng các thiết bị ghi âm, ghi hình lại\n buổi há»c trên lá»›p. Nếu cần tà i liệu, chú thÃch, há»— trợ thì có\n thể tá»± viết lại hoặc nhá» giảng viên hoặc mentor tổng hợp lại\n và cung cấp sau má»—i buổi há»c. Nếu CodeZuni phát hiện trÆ°á»ng hợp\n há»c viên cố tình ghi âm, ghi hình lại buổi há»c thì CodeZuni sẽ\n toà n quyá»n xá» lý.\n </li>\n </ol>\n </li>\n </ol>\n </div>\n </Modal>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport FormDieuKhoan from \"./FormDieuKhoan\";\nimport ModalDieuKhoan from \"./ModalDieuKhoan\";\n\nexport default function ThongTinChinh() {\n const [isShowDieuKhoan, setIsShowDieuKhoan] = useState(false);\n const handleCloseModal = () => {\n setIsShowDieuKhoan(false);\n };\n const handleOpenModal = () => {\n setIsShowDieuKhoan(true);\n };\n\n return (\n <div className=\"w-full h-full p-3 flex flex-col items-center space-y-5 text-white\">\n <p className=\"uppercase text-lg lg:text-xl \">ÄÄ‚NG Kà THÔNG TIN CHÃNH</p>\n <div className=\"text-content text-base md:text-lg\">\n <p>* LÆ°u ý:</p>\n {/* <p>\n - Vui lòng Ä‘á»c{\" \"}\n <span\n onClick={() => {\n setIsShowDieuKhoan(true);\n }}\n className=\"text-yellow-400 underline cursor-pointer\"\n >\n ÄIỀU KHOẢN\n </span>{\" \"}\n trÆ°á»›c khi đăng ký. Vui lòng cung cấp đầy đủ các thông tin để TechX xét duyệt. TechX chỉ cung cấp khóa há»c cho các tà i khoản tháºt và có nhu cầu há»c\n tháºt sá»±.\n </p> */}\n <p>- Hệ thống đăng nháºp bằng facebook, nên email bạn đăng ký phải là email facebook của bạn.</p>\n </div>\n\n <FormDieuKhoan handleOpenModal={handleOpenModal} />\n <ModalDieuKhoan isShowDieuKhoan={isShowDieuKhoan} handleCloseModal={handleCloseModal} />\n </div>\n );\n}\n","import React, { Component } from \"react\";\nimport { Form, Modal, Upload, message } from \"antd\";\nimport { PlusOutlined } from \"@ant-design/icons\";\nimport environment from \"../../../environments/environment\";\nimport axios from \"axios\";\n\nfunction getBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n}\n\nexport default class UploadImg extends Component {\n state = {\n previewVisible: false,\n previewImage: \"\",\n previewTitle: \"\",\n fileList: [],\n };\n\n handleCancel = () => this.setState({ previewVisible: false });\n\n handlePreview = async (file) => {\n console.log(file);\n if (!file.url && !file.preview) {\n file.preview = await getBase64(file.originFileObj);\n }\n\n this.setState({\n previewImage: file.url || file.preview,\n previewVisible: true,\n previewTitle: file.name || file.url.substring(file.url.lastIndexOf(\"/\") + 1),\n });\n };\n\n handleChange = ({ file, fileList, event }) => {\n this.setState({ fileList });\n\n if (file.status === \"uploading\") {\n let listImg = [];\n if (this.beforeUpload(file)) {\n // kiem tra\n // call api luu anh\n if (fileList.length == 2) {\n let bodyFormData1 = new FormData();\n let bodyFormData2 = new FormData();\n bodyFormData1.append(\"file\", fileList[0].originFileObj);\n bodyFormData2.append(\"file\", fileList[1].originFileObj);\n axios({\n method: \"POST\",\n url: environment.baseUrl + \"/api/file/cmnd\",\n data: bodyFormData1,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n apiKey: \"UPD124yRTWF124QJFweUaCYSECETBERS\",\n },\n })\n .then((res) => {\n // console.log('res1', res);\n listImg.push(res.data);\n axios({\n method: \"POST\",\n url: environment.baseUrl + \"/api/file/cmnd\",\n data: bodyFormData2,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n apiKey: \"UPD124yRTWF124QJFweUaCYSECETBERS\",\n },\n }).then((res) => {\n listImg.push(res.data);\n this.props.hadleGetImgAfterConver(listImg);\n });\n })\n .catch((err) => {\n console.log(err);\n });\n }\n }\n }\n\n if (file.status === \"done\") {\n // up anh xong\n // console.log(\"done\");\n }\n\n if (file.status === \"removed\") {\n //xoa anh xong\n\n if (fileList.length == 0) {\n }\n }\n };\n beforeUpload = (file) => {\n const isJpgOrPng =\n file.type === \"image/jpeg\" || file.type === \"image/png\" || file.type === \"image/heic\";\n if (!isJpgOrPng) {\n message.error(\"Hãy chá»n hình ảnh !\");\n }\n\n const isLt2M = file.size / 1024 / 1024 < 10;\n\n if (!isLt2M) {\n message.error(\"Ảnh quá lá»›n < 10MB !\");\n }\n\n return isJpgOrPng && isLt2M;\n };\n\n render() {\n const { previewVisible, previewImage, fileList, previewTitle } = this.state;\n const uploadButton = (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}> {fileList.length === 0 ? \"Mặt trÆ°á»›c\" : \"Mặt sau\"} </div>\n </div>\n );\n const getFile = (e) => {\n // console.log(\"Upload event:\", e);\n\n if (Array.isArray(e)) {\n return e;\n }\n return e && e.fileList;\n };\n\n return (\n <Form.Item\n getValueFromEvent={getFile}\n label=\"Ảnh mặt trÆ°á»›c, mặt sau giấy tá» tùy thân\"\n name=\"anhcmmS\"\n rules={[\n {\n validateTrigger: \"onSubmit\",\n required: fileList.length !== 2,\n message: \"Hãy chá»n đầy đủ ảnh\",\n },\n ]}\n >\n <Upload\n customRequest={({ file, onSuccess }) => {\n setTimeout(() => {\n onSuccess(\"ok\");\n }, 0);\n }}\n listType=\"picture-card\"\n fileList={fileList}\n onPreview={this.handlePreview}\n onChange={this.handleChange}\n >\n {fileList.length >= 2 ? null : uploadButton}\n </Upload>\n <Modal\n visible={previewVisible}\n title={previewTitle}\n footer={null}\n onCancel={this.handleCancel}\n >\n <img alt=\"example\" style={{ width: \"100%\" }} src={previewImage} />\n </Modal>\n </Form.Item>\n );\n }\n}\n","import React, { useState } from \"react\";\n// import mtImg from \"../../../assets/img/CMND_truoc.7460b9e4.jpg\";\n// import msImg from \"../../../assets/img/CMND_sau.11d7fa83.jpg\";\nimport { Modal } from \"antd\";\nexport default function Modal_MinhHoa() {\n const [isModalVisible, setIsModalVisible] = useState(false);\n\n const showModal = () => {\n setIsModalVisible(true);\n };\n\n const handleOk = () => {\n setIsModalVisible(false);\n };\n\n const handleCancel = () => {\n setIsModalVisible(false);\n };\n return (\n <>\n <span\n className=\"text-blue-600 font-medium cursor-pointer\"\n onClick={showModal}\n >\n (<span>Ảnh minh hoạ</span>)\n </span>\n <Modal\n // title=\"Basic Modal\"\n visible={isModalVisible}\n onOk={handleOk}\n onCancel={handleCancel}\n footer={null}\n className=\"w-max\"\n >\n <div className=\"flex\">\n <div className=\"w-1/2 p-5\">\n <p className=\"text-xl\">Mặt trÆ°á»›c</p>\n {/* <img src={mtImg} className=\"w-full object-contain \" alt=\"\" /> */}\n </div>\n <div className=\"w-1/2 p-5\">\n <p className=\"text-xl\">Mặt sau</p>\n {/* <img src={msImg} className=\"w-full object-contain \" alt=\"\" /> */}\n </div>\n </div>\n </Modal>\n </>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, DatePicker, Radio } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport httpServ from \"../../../services/http.service\";\nimport moment from \"moment\";\nimport \"moment/locale/vi\";\nimport UploadImg from \"./UploadImg\";\nimport Modal_MinhHoa from \"./Modal_MinhHoa\";\nimport { setCurrentStep, setUserInfor } from \"../../../redux/reducer/signUpReducer\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { history } from \"../../../App\";\n\nexport default function FormThongTinChiTiet() {\n const dispatch = useDispatch();\n const [form] = Form.useForm();\n const regisPackage = localStorageServ.regisPackage.get();\n useEffect(() => {\n form.setFieldsValue({\n congViecHienTai1: \"SV\",\n luongMongMuon: 0,\n });\n }, []);\n let { currentStep } = useSelector((state) => state.signUp);\n const [listLoTrinh, setListLoTrinh] = useState([]);\n const [listCMND_IMG, setListCMND_IMG] = useState([]);\n const { userInfo } = useSelector((state) => state.signUp);\n useEffect(() => {\n httpServ\n .getMaVaTenLoTrinh()\n .then((res) => {\n setListLoTrinh(res.data.content);\n })\n .catch((err) => {\n // console.log(err);\n });\n }, []);\n const hadleGetImgAfterConver = (value) => {\n setListCMND_IMG(value);\n };\n const onFinish = (values) => {\n // console.log(\"Success form:\", values);\n let newUserInfor = JSON.parse(JSON.stringify(userInfo));\n newUserInfor.thongTinMoRong.namSinh = moment(values.namSinh).format(\"MM/DD/YYYY\");\n // newUserInfor.thongTinMoRong.hinhCmnd = JSON.stringify(listCMND_IMG);\n newUserInfor.thongTinMoRong.hinhCmnd = listCMND_IMG;\n newUserInfor.thongTinMoRong.luongMongMuon = values.luongMongMuon ? values.luongMongMuon * 1 : 0;\n // newUserInfor.maLoTrinh = values.maLoTrinh;\n newUserInfor.thongTinMoRong.facebookUrl = values.facebookUrl;\n newUserInfor.thongTinMoRong.soCmnd = values.soCmnd;\n newUserInfor.thongTinMoRong.predictiveIndexRequire = [];\n newUserInfor.thongTinMoRong.predictiveIndex = [];\n // newUserInfor.thongTinMoRong = JSON.stringify(newUserInfor.thongTinMoRong);\n newUserInfor.maGioiThieu = localStorageServ.referLink.get() || \"\";\n\n servCodingCamp\n .postDangKyUserV2(newUserInfor)\n .then((res) => {\n localStorageServ.inforSignUp.set(res.data.content)\n dispatch(setCurrentStep(currentStep + 1));\n if (regisPackage != 0) {\n history.push('/confirm-payment')\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const onFinishFailed = (errorInfo) => {\n console.log(\"😀 - onFinishFailed - errorInfo\", errorInfo);\n };\n return (\n <div className=\"flex w-full \">\n <div className=\"w-full flex-grow \">\n <Form\n form={form}\n layout=\"vertical\"\n name=\"basic\"\n className=\"container \"\n wrapperCol={{ span: 24 }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <div className=\"wfull flex flex-col \">\n <div className=\" w-full pr-5\">\n <Form.Item\n label=\"Ngà y Sinh\"\n name=\"namSinh\"\n rules={[\n {\n type: \"object\",\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <DatePicker placeholder=\"Nháºp ngà y sinh\" className=\"w-full\" />\n </Form.Item>\n\n <Form.Item\n label=\"LÆ°Æ¡ng mong muốn khi xin việc\"\n name=\"luongMongMuon\"\n rules={[\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"LÆ°Æ¡ng mong muốn phải là chữ số, và dụ: 1000000\");\n }\n\n return Promise.resolve();\n },\n }),\n ]}\n >\n <Input />\n </Form.Item>\n </div>\n <div className=\" w-full pr-5\">\n <Form.Item\n label=\"Link facebook\"\n name=\"facebookUrl\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n () => ({\n validator(_, value) {\n let data =\n value != undefined ? value.toLowerCase().indexOf(\"facebook.com\") : \"\";\n if (value != undefined && value != \"\" && data == -1) {\n return Promise.reject(\"Facebook không hợp lệ\");\n }\n\n return Promise.resolve();\n },\n }),\n ]}\n >\n <Input />\n </Form.Item>\n <Form.Item\n label=\"Số CMND (Căn cÆ°á»›c, Há»™ chiếu)\"\n name=\"soCmnd\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n {\n max: 12,\n message: \"Số giấy tá» tuỳ thân có Ä‘á»™ dà i 8 - 12 chữ số\",\n },\n {\n min: 8,\n message: \"Số giấy tá» tuỳ thân có Ä‘á»™ dà i 8 - 12 chữ số\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n {/*\n\n file\n */}\n <UploadImg hadleGetImgAfterConver={hadleGetImgAfterConver} />\n <div className=\"text-white text-xl\">\n LÆ°u ý:\n <p>- Giấy tá» tùy thân có thể là Giấy phép lái xe hoặc thẻ sinh viên, há»c sinh,...</p>\n <p>\n - Hình chụp phải rõ, thấy khuôn mặt nằm thẳng đứng <Modal_MinhHoa />.\n </p>\n <p>\n - Nếu bạn có vấn Ä‘á» khi upload hãy liên hệ\n <a\n className=\"underline ml-1 text-blue-600 font-medium\"\n target=\"_blank\"\n href=\"https://www.facebook.com/codezuni\"\n >\n Link\n </a>\n nà y\n </p>\n <p>\n - Việc cung cấp các hình ảnh trên để xác minh há»c viên và phục vụ việc cấp\n chứng nháºn cÅ©ng nhÆ° để đảm bảo việc bảo máºt tà i nguyên của CodeZuni. CodeZuni cam Ä‘oan sẽ\n <b> KHÔNG </b>\n cung cấp hình ảnh nà y cho bất kỳ bên nà o khác.\n </p>\n </div>\n </div>\n </div>\n <Form.Item>\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button\n onClick={() => {\n let prev = currentStep - 1;\n dispatch(setCurrentStep(prev));\n }}\n // type=\"primary\"\n htmlType=\"submit\"\n className=\"w-24 rounded-sm\"\n >\n Quay lại\n </Button>\n <Button\n className=\"px-5 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Hoà n thà nh\n </Button>\n </div>\n </Form.Item>\n </Form>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport FormThongTinChiTiet from \"./FormThongTinChiTiet\";\n\nexport default function ThongTinChiTiet() {\n return (\n <div className=\"w-full p-3 flex flex-col items-center space-y-5\">\n <p className=\"uppercase text-xl text-white\">ÄÄ‚NG Kà THÔNG TIN CHÃNH</p>\n <FormThongTinChiTiet />\n </div>\n );\n}\n","import { Button } from \"antd\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport BtnLoginFacebook from \"../../../components/BtnLoginFacebook/BtnLoginFacebook\";\nimport FormLoginEmailPhone from \"../../LoginPageEmail/FormLoginEmailPhone\";\n\nexport default function HoanThanh() {\n return (\n <div className=\"w-full flex flex-col space-y-10 justify-center items-center p-5 text-white\">\n <>\n <p className=\"text-lg lg:text-2xl\">ÄÄ‚NG Kà THÀNH CÔNG</p>\n <p className=\"text-base md:text-lg lg:text-2xl\">\n Cảm Æ¡n bạn đã đăng ký! CodeZuni sẽ xét duyệt hồ sÆ¡ và liên hệ sá»›m nhất đến các hồ sÆ¡ đạt yêu cầu! Các hồ sÆ¡ đạt yêu cầu sẽ được gởi email và liên lạc qua\n Ä‘iện thoại/zalo để hÆ°á»›ng dẫn trá»±c tiếp cho bạn!\n </p>\n\n {/* <Button className=\"px-5 bg-yellow-400 border-none text-black\" type=\"primary\" htmlType=\"submit\">\n <a href=\"/login\"> Vá» trang chủ</a>\n </Button> */}\n <div className=\" w-full flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 pb-24 relative z-10 items-center\">\n <p className=\"title_login text-3xl text-white text-center\">Hệ thống há»c táºp CodeZuni</p>\n <BtnLoginFacebook />\n <span className=\"pt-3\">HOẶC</span>\n <div style={{width:'90%'}}>\n <FormLoginEmailPhone/>\n </div>\n \n </div>\n </div>\n {/* <BtnLoginFacebook /> */}\n </>\n </div>\n );\n}\n","import React from \"react\";\nimport { Steps } from \"antd\";\nimport { useMediaQuery } from \"react-responsive\";\n\nimport { useSelector } from \"react-redux\";\nexport default function StepSignup() {\n const { currentStep } = useSelector((state) => state.signUp);\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 992 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n return isTablet ? children : null;\n };\n const Mobile = ({ children }) => {\n const isMobile = useMediaQuery({ maxWidth: 767 });\n return isMobile ? children : null;\n };\n const { Step } = Steps;\n\n return (\n <div className=\"text-white\">\n <Desktop>\n <Steps className=\"px-5 text-white\" current={currentStep}>\n <Step title=\"Thông tin chÃnh\" />\n <Step title=\"Thông tin chi tiết\" />\n <Step title=\"Hoà n thà nh\" />\n </Steps>\n </Desktop>\n <isTablet></isTablet>\n <Mobile>\n <Steps current={currentStep}>\n <Step />\n <Step />\n <Step />\n </Steps>\n </Mobile>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport ThongTinChinh from \"./ThongTinChinh\";\nimport { useSelector } from \"react-redux\";\nimport ThongTinChiTiet from \"./ThongTinChiTiet\";\nimport HoanThanh from \"./HoanThanh\";\nimport StepSignup from \"./StepSignup\";\nexport default function ContainerSigupDesktop() {\n const { currentStep } = useSelector((state) => state.signUp);\n\n const renderConTentStep = () => {\n switch (currentStep) {\n case 0:\n return <ThongTinChinh />;\n case 1:\n return <ThongTinChiTiet />;\n\n case 2:\n return <HoanThanh />;\n default:\n break;\n }\n };\n return (\n <div className=\"w-full h-full p-3 lg:p-5 space-y-10 flex-grow card-theme border-none \">\n <StepSignup />\n <div className=\"lg:w-full w-2/3 mx-auto\">{renderConTentStep()}</div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport BtnGoogleCapcha from \"../../../components/BtnGoogleCapcha/BtnGoogleCapcha\";\nimport { DARK_MODE, LIGHT_MODE } from \"../../../constants/theme\";\nimport { setModeTheme } from \"../../../redux/reducer/themeReducer\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport ContainerSigupDesktop from \"./ContainerSigupDesktop\";\n\nexport default function SignUpDesktop() {\n const dispatch = useDispatch();\n\n useEffect(() => {\n const root = window.document.documentElement;\n\n if (root.classList.remove(DARK_MODE)) {\n root.classList.remove(DARK_MODE);\n root.classList.remove(LIGHT_MODE);\n }\n localStorageServ.modeTheme.set(LIGHT_MODE);\n dispatch(setModeTheme(LIGHT_MODE));\n }, []);\n return (\n <div\n // style={{\n // backgroundImage: `url(${backGrountTemplate})`,\n // }}\n className=\"w-full min-h-screen overflow-y-auto bg-cover flex-col bg-fixed p-3 md:p-7 lg:p-10 flex \"\n >\n <BtnGoogleCapcha />\n\n <div className=\" h-full w-full flex-grow flex flex-col relative overflow-y-auto overflow-x-hidden 2xl:container mx-auto sm:p-3\">\n <div className=\"w-full flex-grow flex flex-col card-theme\">\n <ContainerSigupDesktop />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useMediaQuery } from \"react-responsive\";\nimport SignUpDesktop from \"./SignUpDesktop/SignUpDesktop\";\nimport \"./Sigup.css\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nvar qs = require(\"qs\");\n\nexport default function SignUpPage() {\n useEffect(() => {\n let { reffer } = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n });\n\n reffer && localStorageServ.referLink.set(reffer);\n }, []);\n return <SignUpDesktop />;\n}\n","import React from \"react\";\n\nlet listColor = {\n blue: {\n filledColor:\n \"linear-gradient(360deg, #272ec3 -3.43%, #5687E2 33.79%, #115BC0 79.29%, #62BDFF 218.89%\",\n // unfilledColor:\n // \"linear-gradient(180deg, #3D78D7 0%, rgba(24, 73, 245, 0.1) 100%)\",\n unfilledColor:\n \"linear-gradient(180deg, #275bb0 0%, rgba(119, 141, 219, 0.2) 100%)\",\n },\n red: {\n filledColor:\n \"linear-gradient(180deg, #FF0000 -113.05%, rgba(224, 0, 0, 0.555209) 44%, rgba(90, 0, 0, 0) 170%)\",\n unfilledColor:\n \"linear-gradient(180deg, #EA2F24 -130%, rgba(240, 151, 145, 0) 170%)\",\n },\n yellow: {\n filledColor: \"linear-gradient(77.47deg, #5F4400 -18.18%, #FFB800 100%)\",\n unfilledColor:\n \"linear-gradient(180deg, #FFEE96 0%, rgba(255, 255, 255, 0) 100%)\",\n },\n};\n\nexport default function ProgressLine({\n percent,\n type,\n witdh = \"100%\",\n size = 2,\n}) {\n let color = listColor[type];\n\n return (\n <div\n style={{ background: color.unfilledColor, witdh: witdh }}\n className={` rounded-xl mx-auto lg:h-${size * 2} w-full md:h-${size}`}\n >\n <div\n style={{\n width: `${percent}%`,\n background: color.filledColor,\n boxShadow: \"0px 2px 4px rgba(0, 0, 0, 0.25)\",\n }}\n className=\"h-full flex justify-end rounded-xl text-content px-2 font-bold leading-none items-center\"\n >\n <span>{percent}%</span>\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { Modal } from \"antd\";\nfunction ModalWrapper({ icon, content }) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const showModal = () => {\n setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n const contentWithProps = React.cloneElement(content, { isModalOpen, setIsModalOpen });\n\n return (\n <div id=\"tooltip_modal \" className=\"w-full\">\n <div\n className=\"cursor-pointer flex flex-col justify-center w-full items-center \"\n onClick={showModal}\n >\n {icon}\n </div>\n <Modal\n visible={isModalOpen}\n onOk={handleOk}\n onCancel={() => {\n handleCancel();\n }}\n footer=\"\"\n bodyStyle={{\n borderRadius: \"20px\",\n overflow: \"hidden\",\n }}\n style={{\n borderRadius: \"20px\",\n maxWidth: \"900px\",\n minWidth: \"400px\",\n // width: 900,\n }}\n className=\"w-max\"\n >\n <div className=\"p-5\">{contentWithProps}</div>\n </Modal>\n </div>\n );\n}\n\n// icon, title, moTa\n// export default React.forwardRef(ModalWrapper);\nexport default ModalWrapper;\n","export default __webpack_public_path__ + \"static/media/flag.49e949a1.svg\";","import React, { useState } from \"react\";\nimport { Modal } from \"antd\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport flagImg from \"./flag.svg\";\n\nexport default function Badge({ title, right, size }) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const showModal = () => {\n // setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n let icon = (\n <div\n style={{\n right: right,\n width: size,\n height: 60,\n }}\n className={`absolute top-0 `}\n >\n <span className=\"absolute top-1/3 left-1/2 transform -translate-y-1/2 -translate-x-1/2 text-white font-medium text-sm\">\n {title}\n </span>\n <img src={flagImg} alt=\"\" className=\" w-full h-full\" />\n </div>\n );\n return (\n <div id=\"tooltip_modal \" className=\"w-full\">\n <div\n className=\"cursor-pointer flex flex-col justify-center w-full items-center \"\n onClick={showModal}\n >\n {icon}\n </div>\n <Modal\n title=\"\"\n visible={isModalOpen}\n onOk={handleOk}\n onCancel={handleCancel}\n footer=\"\"\n bodyStyle={{\n borderRadius: \"20px\",\n overflow: \"hidden\",\n }}\n style={{\n borderRadius: \"20px\",\n maxWidth: \"700px\",\n minWidth: \"200px\",\n }}\n >\n <div className=\"flex space-x-5 items-center \">\n <div className=\"h-full \">\n <div className=\"relative w-20 \">\n <span className=\"absolute top-1/3 left-1/2 transform -translate-y-1/2 -translate-x-1/2 text-white font-medium text-sm\">\n {title}\n </span>\n <img src={flagImg} alt=\"\" className=\"w-full \" />\n </div>\n Lorem ipsum dolor, sit amet consectetur adipisicing elit. Tenetur\n vitae amet, sequi, magnam rerum illo iure culpa quia fuga blanditiis\n animi quidem sunt corporis doloribus cumque iste consectetur\n incidunt harum.\n </div>\n {/* <div className=\"c-card-content text-3xl w-full\">{title}</div> */}\n </div>\n </Modal>\n </div>\n );\n}","import React, { useState } from \"react\";\nimport { Button, Modal } from \"antd\";\nimport { loaiNhiemVu, nhiemVuColor, typeTaskIcon } from \"../../utils/taskUtils\";\n\nexport default function TooltipContentNhiemVu({ maLoaiNhiemVu }) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const showModal = () => {\n setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n let nhiemVu = typeTaskIcon[maLoaiNhiemVu];\n return (\n <>\n <button\n className=\"cursor-pointer flex flex-col justify-start\"\n onClick={showModal}\n >\n <span style={{ color: nhiemVuColor[maLoaiNhiemVu] }}>\n {nhiemVu?.icon}\n </span>\n </button>\n <Modal\n title=\"\"\n visible={isModalOpen}\n onOk={handleOk}\n onCancel={handleCancel}\n footer=\"\"\n width={400}\n bodyStyle={{\n borderRadius: \"20px\",\n overflow: \"hidden\",\n }}\n style={{\n borderRadius: \"20px\",\n }}\n >\n <div className=\"text-title py-5\">\n <p>Thông tin váºt phẩm</p>\n {nhiemVu?.content}\n </div>\n </Modal>\n </>\n );\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport servCodingCamp from \"../services/codingCam.service\";\nimport { checkDemoUser } from \"../utils/HocDemoUtils\";\nimport { useMemo } from \"react\";\nimport { API_URL_DOMAIN } from \"../utils/urlDomain\";\nimport axios from \"axios\";\nimport { useParams } from \"react-router-dom\";\n\nexport function useLstLoTrinhUser(userInfo) {\n const shouldActivateQuery =\n !!userInfo && userInfo.email !== \"freeacc@gmail.com\";\n let isDemoUser = useMemo(() => checkDemoUser(), []);\n\n let { id } = useParams(\"id\")\n\n\n return useQuery({\n queryKey: [\"loTrinhUser\", userInfo?.id], // Dùng id ngÆ°á»i dùng để đảm bảo tÃnh duy nhất của key\n queryFn: () => {\n if (isDemoUser || !userInfo?.kichHoat) {\n return servCodingCamp\n .layAllChuyenDeTrial()\n .then((res) => res.data.content);\n } else {\n return servCodingCamp.layLotrinhUser(id ? \"1\" : \"0\").then((res) => res.data.content);\n }\n },\n staleTime: 60 * 60 * 1000, // Dữ liệu được coi là má»›i trong 60 phút\n cacheTime: 24 * 60 * 60 * 1000, // Dữ liệu còn trong bá»™ nhá»› cache 30 phút sau khi không còn được sá» dụng\n refetchOnWindowFocus: false,\n retry: false,\n enabled: shouldActivateQuery, // Chỉ kÃch hoạt query khi có thông tin ngÆ°á»i dùng\n });\n}\nexport function useLstLoTrinh() {\n return useQuery({\n queryKey: [\"loTrinh\"],\n queryFn: () => {\n return servCodingCamp\n .layAllChuyenDeTrial()\n .then((res) => res.data.content);\n },\n staleTime: 60 * 60 * 1000, // Dữ liệu được coi là má»›i trong 60 phút\n cacheTime: 24 * 60 * 60 * 1000, // Dữ liệu còn trong bá»™ nhá»› cache 30 phút sau khi không còn được sá» dụng\n refetchOnWindowFocus: false,\n retry: false,\n });\n}\nexport function useLstLoTrinhDangHoc(userId) {\n return useQuery({\n queryKey: [\"loTrinhDangHoc\", userId],\n queryFn: () => {\n return axios\n .get(`${API_URL_DOMAIN}/dangkyhoc/get-theo-user/${userId}`)\n .then((res) => res.data.content)\n },\n staleTime: 60 * 60 * 1000, // Dữ liệu được coi là má»›i trong 60 phút\n cacheTime: 24 * 60 * 60 * 1000, // Dữ liệu còn trong bá»™ nhá»› cache 30 phút sau khi không còn được sá» dụng\n refetchOnWindowFocus: false,\n retry: false,\n });\n}\n","import React, { useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport TooltipContentNhiemVu from \"../TooltipContentNhiemVu/TooltipContentNhiemVu\";\nimport {\n navigatePageByTask,\n parentPage,\n typeTask,\n} from \"../../routes/utitlity\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { markTaskAsCompleted, nhiemVuColor } from \"../../utils/taskUtils\";\nimport { Tooltip } from \"antd\";\nimport { typeTrangThaiNop } from \"../StepProjectInstruction/util\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getDataTaskPageAction, getDataTaskPageTrialAction } from \"../../redux/reducer/taskPageSlice\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport { isIconColappse } from \"../../pages/TaskPage/CollapseTask/ItemTask\";\n\nexport default function TitleTaskNavigate({ task, showModal }) {\n const { userInfo } = useSelector(selectThongTinMoRong);\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n let { chuyenDeId } = useParams();\n const navigate = useNavigate();\n let dispatch = useDispatch();\n const isLearning =checkLearning(chuyenDeId,data)\n const handleOpenTaiLieu = async ({ chuyenDeId, monHocId, taskId }) => {\n isDemoUser || !userInfo.kichHoat ?\n servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n console.log('mở file')\n window.open(\n `${BASE_URL_CODINGCAMP}/${res.data.content.noiDungNhiemVu[0].noiDung}`\n );\n })\n .catch((err) => {\n console.log(err);\n })\n :\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n window.open(\n `${BASE_URL_CODINGCAMP}/${res.data.content.noiDungNhiemVu[0].noiDung}`\n );\n })\n .catch((err) => {\n console.log(err);\n });\n await markTaskAsCompleted(\n chuyenDeId,\n monHocId,\n taskId,\n typeTask.TAILIEU,\n taskId\n );\n isDemoUser || !userInfo.kichHoat ?\n dispatch(getDataTaskPageTrialAction(chuyenDeId))\n :\n dispatch(getDataTaskPageAction(chuyenDeId));\n };\n let isAllow = task.truyCap || window.location.href.includes(\"test\");\n\n let renderTrangThaiBaiTap = () => {\n if (!task.maLoaiNhiemVu == typeTask.BAITAP) return <></>;\n switch (task.trangThaiBaiTap) {\n case typeTrangThaiNop.CHO_CHAM:\n return <span className=\"text-yellow-theme\">Chá» chấm</span>;\n case typeTrangThaiNop.DA_CHAM:\n return (\n <span style={{ color: \"#39ff14\" }} className=\"icon-green\">\n Äã chấm\n </span>\n );\n default:\n return <></>;\n return <span className=\"text-green-theme\">{task.trangThaiBaiTap}</span>;\n }\n };\n let isDemoUser = useMemo(() => checkDemoUser(), []);\n return (\n <button className=\"flex justify-between w-full text-black\">\n <div className=\"flex\">\n <div className=\"flex items-center space-x-3\">\n <TooltipContentNhiemVu maLoaiNhiemVu={task.maLoaiNhiemVu} />\n {isDemoUser || !userInfo.kichHoat || !isLearning ? (\n task.xemDemo ? (\n userInfo.email=='freeacc@gmail.com'?\n \n <p className=\"font-semibold text-left text-content \" onClick={() => { \n if(!isIconColappse(task.maLoaiNhiemVu)){\n showModal()\n }\n }}>\n {\" \"}\n {task.tenNhiemVu}\n <span className=\"pl-2\">({task.hoanThanhLabel})</span>\n <span className=\"mark__free\">Free</span>\n </p>\n :\n <p\n onClick={() => {\n if (task.maLoaiNhiemVu == typeTask.TAILIEU) {\n let { chuyenDeId, monHocId, id: taskId } = task;\n handleOpenTaiLieu({ chuyenDeId, monHocId, taskId });\n }\n navigatePageByTask(task, navigate, parentPage.task);\n }}\n className=\"font-semibold text-left text-content \"\n >\n {task.tenNhiemVu}\n <span className=\"pl-2\">({task.hoanThanhLabel})</span>\n <span className=\"mark__free\">Free</span>\n </p>\n ) : (\n // <Tooltip\n // trigger={\"click\"}\n // placement=\"topLeft\"\n // title={\n // <p className=\"bg-white text-black p-1 rounded\" onClick={showModal}>\n // Bạn cần đăng ký khóa há»c để xem ná»™i dung nà y.\n // </p>\n // }\n // arrowPointAtCenter\n // >\n <p className=\"font-semibold text-left text-gray-500 \" onClick={() => { \n if(!task.xemDemo){\n showModal()\n }\n }}>\n {\" \"}\n {task.tenNhiemVu}\n <span className=\"pl-2\">({task.hoanThanhLabel})</span>\n </p>\n // </Tooltip>\n )\n ) :\n isAllow ? (\n <p\n onClick={() => {\n if (task.maLoaiNhiemVu == typeTask.TAILIEU) {\n let { chuyenDeId, monHocId, id: taskId } = task;\n handleOpenTaiLieu({ chuyenDeId, monHocId, taskId });\n }\n navigatePageByTask(task, navigate, parentPage.task);\n }}\n className=\"font-semibold text-left text-content \"\n >\n {task.tenNhiemVu}\n <span className=\"pl-2\">({task.hoanThanhLabel})</span>\n </p>\n ) : (\n <Tooltip\n trigger={\"click\"}\n placement=\"topLeft\"\n title={\n <p className=\"bg-white text-black p-1 rounded\">\n Bạn cần hoà n thà nh bà i há»c trÆ°á»›c đó trÆ°á»›c khi tiếp tục.\n </p>\n }\n arrowPointAtCenter\n >\n <p className=\"font-semibold text-left text-gray-500 \">\n {\" \"}\n {task.tenNhiemVu}\n <span className=\"pl-2\">({task.hoanThanhLabel})</span>\n </p>\n </Tooltip>\n )}\n {renderTrangThaiBaiTap()}\n </div>\n </div>\n </button>\n );\n}","import React, { useMemo, useState } from \"react\";\nimport TitleTaskNavigate from \"../../../components/TitleTaskNavigate/TitleTaskNavigate\";\nimport \"./style.scss\";\nimport { checkDemoUser } from \"../../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport { useSelector } from \"react-redux\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nimport { emailFree } from \"../../../utils/urlDomain\";\nimport { typeTask } from \"../../../routes/utitlity\";\nexport const isIconColappse = (type) => { \n switch(type){\n case typeTask.VIDEO:\n return true\n case typeTask.QUIZ:\n return true\n case typeTask.RUNCODE:\n return true\n default :\n return false\n }\n }\nexport default function ItemTask({ task, showModal,icon }) {\n \n const { widthWindow, heightWindow } = useWindowSize();\n let iconIsAllow = task.truyCap ? (\n <i class=\"fa fa-unlock-alt green-icon\"></i>\n ) : (\n <i class=\"fa fa-lock red-icon\"></i>\n );\n let iconIsDemo = task.xemDemo ? (\n <i class=\"fa fa-unlock-alt green-icon\"></i>\n ) : (\n <i class=\"fa fa-lock red-icon\"></i>\n );\n let iconIsFinish = task.hoanThanh ? (\n <i class=\"fa-solid text-black rounded-full green-icon-bg h-5 w-5 text-center leading-6 fa-check\"></i>\n ) : (\n <i class=\"fa-solid fa-triangle-exclamation red-icon\"></i>\n );\n \n let isDemoUser = useMemo(() => checkDemoUser(), [])\n const { userInfo } = useSelector(selectThongTinMoRong);\n return (\n <div className=\"flex items-center justify-between item-task\">\n <TitleTaskNavigate task={task} showModal={showModal} />\n {(isDemoUser || !userInfo.kichHoat ||userInfo.emal==emailFree )&& isIconColappse(task.maLoaiNhiemVu) &&task.xemDemo && icon}\n {widthWindow<639?\n \"\"\n :\n <div className={` flex space-x-3 items-center lg justify-between ${widthWindow<992?'w-80':'w-72'} `}>\n <span>{}</span>\n <span className=\"tenChuyenDe text-title\">\n {task.tongExp} XP + {task.tongCoin} COIN\n </span>\n <div className=\"space-x-5\">\n {/* {iconIsAllow} */}\n {(isDemoUser || !userInfo.kichHoat ||userInfo.emal==emailFree ) && iconIsDemo}\n {iconIsFinish}\n </div>\n </div>\n }\n </div>\n );\n}","import React, { useState } from 'react'\nimport './style.css'\nimport { history } from '../../App'\nconst PackageBottomFix = () => {\n const [active, setActive] = useState(false)\n return (\n <div className={`package ${active ? \"show\" : \"\"}`} >\n <div className=\"arrowBtn\" onClick={() => { setActive(!active) }}>\n {active ? <i className=\"fa-solid fa-angle-down\"></i> : <i className=\"fa-solid fa-angle-up\"></i>}\n </div>\n <div className=\"package_content\">\n <button className='btn_register' >Free</button>\n <button className='btn_register' onClick={() => { \n console.log('medium')\n history.push('confirm-payment?g=Medium')\n }}>Medium</button>\n <button className='btn_register' onClick={() => { \n console.log('medium')\n history.push('confirm-payment?g=VIP')\n }}>VIP</button>\n </div>\n <div className=\"row\">\n <div className=\"col-md-4 ftco-animate fadeInUp ftco-animated h-full\">\n <div className=\"block-7\">\n <div className=\"img\" style={{ backgroundColor: '#FFB6C1' }} >\n <span className=\"excerpt d-block\">Free</span>\n <span className=\"price\"><sup>$</sup> <span className=\"number\">0</span> <sub>/year</sub></span>\n </div>\n <div className=\"bottom_content text-center p-4\">\n <ul className=\"pricing-text mb-5\">\n <li><span className=\"fa fa-check mr-2\" />Há»c free các ná»™i dung có mark free</li>\n <li><span className=\"fa fa-check mr-2\" />Há»— trợ BOT chat</li>\n <li><span className=\"fa fa-check mr-2\" />Tham gia cá»™ng đồng Discord</li>\n </ul>\n <a href=\"#\" className=\"disable btn btn-primary d-block px-2 py-3\">Buy</a>\n </div>\n </div>\n </div>\n <div className=\"col-md-4 ftco-animate fadeInUp ftco-animated h-full\">\n <div className=\"block-7\">\n <div className=\"img\" style={{ backgroundColor: '#87CEFA' }} >\n <span className=\"excerpt d-block\">Business</span>\n <span className=\"price\"><sup>$</sup> <span className=\"number\">250</span> <sub>/year</sub></span>\n </div>\n <div className=\"bottom_content text-center p-4\">\n <ul className=\"pricing-text mb-5\">\n <li><span className=\"fa fa-check mr-2\" />Há»c free các ná»™i dung có mark free</li>\n <li><span className=\"fa fa-check mr-2\" />Há»— trợ BOT chat</li>\n <li><span className=\"fa fa-check mr-2\" />Tham gia cá»™ng đồng Discord</li>\n <li><span className=\"fa fa-check mr-2\" />Chá»n 1 khóa combo 3 môn</li>\n <li><span className=\"fa fa-check mr-2\" />Chá»n 1 khóa combo 3 môn</li>\n </ul>\n <button className=\"btn btn-primary d-block px-2 py-3\" onClick={() => { \n console.log('medium')\n history.push('confirm-payment?g=Medium')\n }}>Buy</button>\n </div>\n </div>\n </div>\n <div className=\"col-md-4 ftco-animate fadeInUp ftco-animated h-full\">\n <div className=\"block-7\">\n <div className=\"img\" style={{ backgroundColor: '#FF7F50' }} >\n <span className=\"excerpt d-block\">Ultimate</span>\n <span className=\"price\"><sup>$</sup> <span className=\"number\">500</span> <sub>/year</sub></span>\n </div>\n <div className=\"bottom_content text-center p-4\">\n <ul className=\"pricing-text mb-5\">\n <li><span className=\"fa fa-check mr-2\" />Há»c free các ná»™i dung có mark free</li>\n <li><span className=\"fa fa-check mr-2\" />Há»— trợ BOT chat</li>\n <li><span className=\"fa fa-check mr-2\" />Tham gia cá»™ng đồng Discord</li>\n <li><span className=\"fa fa-check mr-2\" />Chá»n 1 khóa combo 3 môn</li>\n <li><span className=\"fa fa-check mr-2\" />Äược há»c tất cả các khóa</li>\n <li><span className=\"fa fa-check mr-2\" />Äược tham gia Workshop</li>\n <li><span className=\"fa fa-check mr-2\" />Äược mentor há»— trợ chấm bà i</li>\n <li><span className=\"fa fa-check mr-2\" />Äược trung tâm há»— trợ việc là m</li>\n </ul>\n <button className=\"btn btn-primary d-block px-2 py-3\" onClick={() => { \n history.push('confirm-payment?g=VIP')\n }}>Buy</button>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n )\n}\n\nexport default PackageBottomFix","import React, { Fragment, useEffect, useState } from 'react'\nimport './style.css'\nimport { history } from '../../App'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { use } from 'i18next'\nimport { getArrPackageCourseApi } from '../../redux/reducer/packageReducer'\n\nimport Slider from 'react-slick';\nimport localStorageServ from '../../services/locaStorage.service'\nimport { selectThongTinMoRong } from '../../redux/reducer/authReducer'\nimport { BASE_URL_CODINGCAMP } from '../../services/axios.service'\nimport axios from 'axios'\nimport { API_URL_DOMAIN } from '../../utils/urlDomain'\nconst PackageTable = ({ id, arrChuyenDe, isCombo }) => {\n\n const [arrPackageByCourse, setArrPackageByCourse] = useState([])\n const [arrRender, setArrRender] = useState()\n const [arrRes, setArrRes] = useState()\n let userInfo = localStorageServ.userInfo.get()\n const shouldShowSlider = arrRes?.length > 1\n\n const dispatch = useDispatch()\n useEffect(() => {\n axios.get(`${API_URL_DOMAIN}/package/course?id=${id}`).then((res) => {\n setArrPackageByCourse(res.data.content)\n })\n // dispatch(getArrPackageCourseApi(id))\n }, [id])\n console.log(arrPackageByCourse)\n const settings = {\n dots: true,\n infinite: true,\n slidesToShow: 1,\n slidesToScroll: 1,\n // autoplay: true,\n // speed: 10000,\n // autoplaySpeed: 1000,\n cssEase: \"linear\",\n arrows: false\n };\n useEffect(() => {\n setArrRender(arrPackageByCourse)\n }, [arrPackageByCourse])\n useEffect(() => {\n let res = []\n arrRender?.forEach(item => {\n const existingItem = res.find(r => r.danhSachKhoaHoc === item.danhSachKhoaHoc);\n\n if (existingItem) {\n existingItem.info.push(item);\n } else {\n res.push({\n ...item,\n info: [item]\n\n });\n }\n });\n setArrRes(res)\n }, [arrRender])\n return (\n <div className={`row w-full ${shouldShowSlider ? \"\" : \"flex justify-center\"}`}>\n\n {shouldShowSlider ?\n <Slider {...settings} className='h-full'>\n\n\n {arrRes.map((item, idx) => {\n let isBoder = arrPackageByCourse.length == 1\n let ds = JSON.parse(item.danhSachKhoaHoc)\n return <div key={idx} className={`itemPac col ${isBoder ? ' bg-transparent' : \"\"}`}>\n <div className=''>\n <img src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt=\"\" />\n </div>\n <div>\n <h4 className='text-white my-1'>{item.tenGoi}</h4>\n {/* <p><span className=\" text-xl\"><sup>Ä‘</sup>{item.hocPhi / 1000}<sub>.000{'/' + item.thang + 'Tháng'}</sub></span></p> */}\n {/* <p>10,000 monthly visits</p> */}\n <ul>\n {ds.map((cd, idx1) => {\n const cdName = arrChuyenDe?.find(a => a.id === cd)?.tenChuyenDe || ''\n return <li key={idx1}><span className=\"fa fa-check mr-2\" />{cdName}</li>\n })}\n </ul>\n </div>\n <div className=\"btn_footer\">\n {item.info.map((inf, idx) => {\n return <div key={idx} className='relative inline-block'>\n <button href className={`btn_theme_red m-1 ${inf.thang == 3 ? 'bestSeller' : \"\"}`} onClick={() => {\n localStorageServ.regisPackage.set(inf)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n } else {\n history.push('/confirm-payment')\n }\n }}>{inf.hocPhi / 1000000} triệu/<sub>{inf.thang} tháng</sub></button>\n {inf.thang == 3 && <p className='btnBest absolute'>Best Seller</p>}\n </div>\n })}\n </div>\n </div>\n\n\n })}\n </Slider>\n :\n arrRes?.map((item, idx) => {\n let isBoder = arrPackageByCourse.length == 1\n let ds = JSON.parse(item.danhSachKhoaHoc)\n return <div key={idx} className={`itemPac col ${isBoder ? ' bg-transparent' : \"\"}`}>\n <div className=''>\n <img src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt=\"\" />\n </div>\n <div>\n <h4 className='text-white my-1'>{item.tenGoi}</h4>\n {/* <p><span className=\" text-xl\"><sup>Ä‘</sup>{item.hocPhi / 1000}<sub>.000{'/' + item.thang + 'Tháng'}</sub></span></p> */}\n {/* <p>10,000 monthly visits</p> */}\n <ul>\n {ds.map((cd, idx1) => {\n const cdName = arrChuyenDe?.find(a => a.id === cd)?.tenChuyenDe || ''\n return <li key={idx1}><span className=\"fa fa-check mr-2\" />{cdName}</li>\n })}\n </ul>\n </div>\n <div className=\"btn_footer\">\n {item.info.map((inf, idx) => {\n return <div key={idx} className='relative inline-block'>\n <button href className={`btn_theme_red m-1 ${inf.thang == 3 ? 'bestSeller' : \"\"}`} onClick={() => {\n localStorageServ.regisPackage.set(inf)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n } else {\n history.push('/confirm-payment')\n }\n }}>{inf.hocPhi / 1000000} triệu/<sub>{inf.thang} tháng</sub></button>\n {inf.thang == 3 && <p className='btnBest absolute'>Best Seller</p>}\n </div>\n })}\n </div>\n </div>\n\n\n })}\n\n\n </div>\n\n )\n}\n\nexport default PackageTable","import React, { Fragment, useEffect, useState } from 'react'\nimport './style.css'\nimport { history } from '../../App'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { use } from 'i18next'\nimport { getArrPackageCourseApi } from '../../redux/reducer/packageReducer'\n\nimport Slider from 'react-slick';\nimport localStorageServ from '../../services/locaStorage.service'\nimport { selectThongTinMoRong } from '../../redux/reducer/authReducer'\nimport { BASE_URL_CODINGCAMP } from '../../services/axios.service'\nimport { API_URL_DOMAIN } from '../../utils/urlDomain'\nimport axios from 'axios'\nconst PackageTableV2 = ({ id, arrChuyenDe, isCombo }) => {\n\n\n const [arrPackageByCourse, setArrPackageByCourse] = useState([])\n // let { arrChuyenDe } = useSelector((state) => state.chuyenDe);\n const [arrRender, setArrRender] = useState()\n const [arrRes, setArrRes] = useState()\n let userInfo = localStorageServ.userInfo.get()\n\n const dispatch = useDispatch()\n useEffect(() => {\n axios.get(`${API_URL_DOMAIN}/package/course?id=${id}`).then((res) => {\n setArrPackageByCourse(res.data.content)\n }).catch((err) => {\n console.log(err)\n })\n // dispatch(getArrPackageCourseApi(id))\n }, [id])\n useEffect(() => {\n // Tạo mảng chứa các phần tá» có danhSachKhoaHoc chỉ chứa má»™t id\n const singleIdArr = arrPackageByCourse.filter(item => JSON.parse(item.danhSachKhoaHoc).length === 1)\n\n // Tạo mảng chứa các phần tá» có danhSachKhoaHoc chứa nhiá»u hÆ¡n má»™t id\n const multipleIdArr = arrPackageByCourse.filter(item => JSON.parse(item.danhSachKhoaHoc).length > 1);\n setArrRender(arrPackageByCourse)\n // setArrRender(isCombo ? multipleIdArr : singleIdArr)\n }, [arrPackageByCourse])\n useEffect(() => {\n let res = []\n arrRender?.forEach(item => {\n const existingItem = res.find(r => r.danhSachKhoaHoc === item.danhSachKhoaHoc);\n\n if (existingItem) {\n existingItem.info.push(item);\n } else {\n res.push({\n ...item,\n info: [item]\n\n });\n }\n });\n setArrRes(res)\n }, [arrRender])\n\n console.log('checktype', userInfo?.email == 'freeacc@gmail.com' || !userInfo)\n return (\n <div className=''>\n <div className={`row m-0 gap-3 w-full px-5 ${\"flex justify-center mb-2\"}`}>\n\n <Fragment>\n {(userInfo?.email == 'freeacc@gmail.com' || !userInfo) && <div className=\"itemPac col\">\n <div>\n <h4 className='text-white '>Free</h4>\n <p><span className=\" text-xl\"><sup>Ä‘</sup>0<sub>{'/Tháng'}</sub></span></p>\n <ul className=\"pricing-text\">\n <li><span className=\"fa fa-check mr-2\" />Há»c free các ná»™i dung có mark free</li>\n <li><span className=\"fa fa-check mr-2\" />Há»— trợ BOT chat</li>\n <li><span className=\"fa fa-check mr-2\" />Tham gia cá»™ng đồng Discord</li>\n </ul>\n </div>\n <div className=\"btn_footer\">\n <div className=\"relative inline-block\">\n <button href className=\"btn_theme_red\" onClick={() => {\n localStorageServ.regisPackage.set(0)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n }\n }}>Äăng ký</button>\n </div>\n </div>\n </div>}\n {(userInfo && userInfo?.email!=='freeacc@gmail.com') && arrRes?.map((item, idx) => {\n let isBoder = arrPackageByCourse.length == 1\n let ds = JSON.parse(item.danhSachKhoaHoc)\n if (ds.length == 1) {\n return <div key={idx} className={`itemPac col ${isBoder ? ' bg-transparent' : \"\"}`}>\n <div className=''>\n <img src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt=\"\" />\n </div>\n <div>\n <h4 className='text-white my-1'>{item.tenGoi}</h4>\n {/* <p><span className=\" text-xl\"><sup>Ä‘</sup>{item.hocPhi / 1000}<sub>.000{'/' + item.thang + 'Tháng'}</sub></span></p> */}\n {/* <p>10,000 monthly visits</p> */}\n <ul>\n {ds.map((cd, idx1) => {\n const cdName = arrChuyenDe?.find(a => a.id === cd)?.tenChuyenDe || ''\n return <li key={idx1}><span className=\"fa fa-check mr-2\" />{cdName}</li>\n })}\n </ul>\n </div>\n <div className=\"btn_footer\">\n {item.info.map((inf, idx) => {\n return <div key={idx} className='relative inline-block'>\n <button href className={`btn_theme_red m-1 ${inf.thang == 3 ? 'bestSeller' : \"\"}`} onClick={() => {\n localStorageServ.regisPackage.set(inf)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n } else {\n history.push('/confirm-payment')\n }\n }}>{inf.hocPhi / 1000000} triệu/<sub>{inf.thang} tháng</sub></button>\n {inf.thang == 3 && <p className='btnBest absolute'>Best Seller</p>}\n </div>\n })}\n </div>\n </div>\n }\n\n })}\n </Fragment>\n\n </div>\n\n {userInfo && userInfo?.email!=='freeacc@gmail.com' && <div className={`row m-0 gap-3 w-full px-5 ${\"flex justify-center\"}`}>\n {arrRes?.map((item, idx) => {\n let isBoder = arrPackageByCourse.length == 1\n let ds = JSON.parse(item.danhSachKhoaHoc)\n if (ds.length > 1) {\n return <div key={idx} className={`itemPac col ${isBoder ? ' bg-transparent' : \"\"}`}>\n <div className=''>\n <img src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt=\"\" />\n </div>\n <div>\n <h4 className='text-white my-1'>{item.tenGoi}</h4>\n {/* <p><span className=\" text-xl\"><sup>Ä‘</sup>{item.hocPhi / 1000}<sub>.000{'/' + item.thang + 'Tháng'}</sub></span></p> */}\n {/* <p>10,000 monthly visits</p> */}\n <ul>\n {ds.map((cd, idx1) => {\n const cdName = arrChuyenDe?.find(a => a.id === cd)?.tenChuyenDe || ''\n return <li key={idx1}><span className=\"fa fa-check mr-2\" />{cdName}</li>\n })}\n </ul>\n </div>\n <div className=\"btn_footer\">\n {item.info.map((inf, idx) => {\n return <div key={idx} className='relative inline-block'>\n <button href className={`btn_theme_red m-1 ${inf.thang == 3 ? 'bestSeller' : \"\"}`} onClick={() => {\n localStorageServ.regisPackage.set(inf)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n } else {\n history.push('/confirm-payment')\n }\n }}>{inf.hocPhi / 1000000} triệu/<sub>{inf.thang} tháng</sub>\n\n </button>\n {inf.thang == 3 && <p className='btnBest absolute'>Best Seller</p>}\n </div>\n })}\n </div>\n <div className=\"absolute top-0 bg-green-500 left-0 p-2 border-0 border rounded-lg\">\n <i className=\"fa-solid fa-bolt-lightning\"></i> Combo\n </div>\n </div>\n }\n\n })}\n </div>}\n </div>\n\n )\n}\n\nexport default PackageTableV2","import { useQuery } from \"@tanstack/react-query\";\nimport axios from 'axios';\n\nexport function useLstImgTag() {\n return useQuery({\n queryKey: ['lstImgTag'],\n queryFn: () => {\n return axios\n .get(\"https://apimentor11.cybersoft.edu.vn/api/danh-sach-tag/lay-hinh-tag\")\n .then(res => res.data.content);\n },\n staleTime: 24 * 60 * 60 * 1000, // Dữ liệu được coi là má»›i trong 24h\n cacheTime: 7 * 24 * 60 * 60 * 1000, // Dữ liệu còn trong bá»™ nhá»› cache 7 ngà y sau khi không còn được sá» dụng\n refetchOnWindowFocus: false,\n retry: false,\n });\n}\n","import React, { useEffect, useState } from \"react\";\nimport AnimateHeight from \"react-animate-height\";\n\nimport ProgressLine from \"../../../components/ProgressLine/ProgressLine\";\nimport Badge from \"../../../components/Badge/Badge\";\nimport { loaiNhiemVu } from \"../../../utils/taskUtils\";\nimport ItemTask, { isIconColappse } from \"./ItemTask\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal } from \"antd\";\nimport PackageBottomFix from \"../../ServicePakages/PackageBottomFix\";\nimport { history } from \"../../../App\";\nimport PackageTable from \"../../ServicePakages/PackageTable\";\nimport { useParams } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport PackageTableV2 from \"../../ServicePakages/PackageTableV2\";\nimport axios from \"axios\";\nimport { API_URL_DOMAIN, emailFree } from \"../../../utils/urlDomain\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nimport { useLstImgTag } from \"../../../hook/useLstImgTag\";\n\nexport default function CollapseTask({ dataContent, index,arrChuyenDe }) {\n const { t } = useTranslation();\n let { chuyenDeId } = useParams();\n const [isModalOpen, setIsModalOpen] = useState(false);\n const { data: listImgTag, isLoading, error } = useLstImgTag();\n\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 768 ? true : false;\n let userInfo = localStorageServ.userInfo.get();\n const [expandedRows, setExpandedRows] = useState({});\n const showModal = () => {\n setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n const [height, setHeight] = useState(index == 0 ? \"auto\" :'0');\n\n let soLuongHoanThanh = dataContent?.danhSachNoiDung.filter((item) => {\n return item.hoanThanh;\n }).length;\n\n // useEffect(() => {\n // if (soLuongHoanThanh !== 0 && soLuongHoanThanh !== dataContent.danhSachNoiDung.length) {\n // setHeight(\"auto\");\n // }\n // return () => {\n // setHeight(\"0\");\n // };\n // }, [soLuongHoanThanh, dataContent.danhSachNoiDung.length]);\n if (!dataContent) {\n return null;\n }\n\n const toggleRow = (rowId) => {\n setExpandedRows((prevExpandedRows) => ({\n ...prevExpandedRows,\n [rowId]: !prevExpandedRows[rowId],\n }));\n };\n let renderDanhSachNhiemVu = () => {\n return (\n <table style={{ width: \"100%\" , borderCollapse: \"collapse\" }}>\n <tbody>\n {dataContent.danhSachNoiDung\n .filter(\n ({ maLoaiNhiemVu }) =>\n maLoaiNhiemVu != loaiNhiemVu.HOMEWORK &&\n maLoaiNhiemVu != loaiNhiemVu.RECORD\n )\n .map((item, idx) => (\n <React.Fragment key={item.id}>\n <tr>\n <td className=\"pb-1\">\n <span onClick={() => toggleRow(item.id)} className=\"\">\n <ItemTask key={index} task={item} showModal={showModal} \n icon={<i className={`text-white ${expandedRows[item.id] ? 'fa-regular fa-square-minus' : 'fa-regular fa-square-plus'}`} style={{ marginRight: \"8px\" }}></i>}/>\n </span>\n </td>\n </tr>\n {expandedRows[item.id] && item.xemDemo && userInfo.email==emailFree && isIconColappse(item.maLoaiNhiemVu) && (\n <tr style={{ cursor: \"pointer\" }} onClick={showModal}>\n <td colSpan=\"4\">\n {item.chiTiet.map((ct, index) => {\n return (\n <div\n className=\"flex items-center space-x-3\"\n style={{ padding: \"0px 0px 10px 30px\" }}\n >\n <button className=\"cursor-pointer flex flex-col justify-start\">\n <span style={{ color: \"#ffca3a\" }}>\n <div className=\"icon_item_theme w-10 h-10 icon-main flex items-center justify-center\">\n <i className=\"fa-regular fa-diagram-subtask\"></i>\n <span className=\"bg_icon_item_theme \"></span>\n </div>\n </span>\n </button>\n <p className=\"font-semibold text-left text-content\">\n {ct}\n </p>\n </div>\n );\n })}\n </td>\n </tr>\n )}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n );\n // return dataContent.danhSachNoiDung\n // .filter(\n // ({ maLoaiNhiemVu }) =>\n // maLoaiNhiemVu != loaiNhiemVu.HOMEWORK &&\n // maLoaiNhiemVu != loaiNhiemVu.RECORD\n // )\n // .map((item, index) => {\n // // let nextItem = listBaiTap[index + 1]; // Lấy item phÃa sau\n // return <ItemTask key={index} task={item} showModal={showModal} />;\n // });\n };\n let renderListBaiTap = () => {\n let listBaiTap = dataContent.danhSachNoiDung.filter(\n ({ maLoaiNhiemVu }) =>\n maLoaiNhiemVu == loaiNhiemVu.HOMEWORK &&\n maLoaiNhiemVu != loaiNhiemVu.RECORD\n );\n if (listBaiTap.length == 0) return;\n return (\n <table style={{ width: \"100%\", borderCollapse: \"collapse\" }}>\n <tbody>\n {listBaiTap.map((item, idx) => (\n <React.Fragment key={item.id}>\n <tr>\n <td className=\"pb-1\">\n <span onClick={() => toggleRow(item.id)}>\n <ItemTask key={index} task={item} showModal={showModal}\n icon={<i className={`text-white ${expandedRows[item.id] ? 'fa-regular fa-square-minus' : 'fa-regular fa-square-plus'}`} style={{ marginRight: \"8px\" }}></i>}\n />\n </span>\n </td>\n </tr>\n {expandedRows[item.id] && item.xemDemo && userInfo.email==emailFree && (\n <tr style={{ cursor: \"pointer\" }} onClick={showModal}>\n <td colSpan=\"4\">\n {item.chiTiet.map((ct, index) => {\n return (\n <p\n className=\"font-semibold text-left text-content\"\n style={{ padding: \"0px 0px 10px 50px\" }}\n >\n {ct}\n </p>\n );\n })}\n </td>\n </tr>\n )}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n );\n // let listBaiTap = dataContent.danhSachNoiDung.filter(\n // ({ maLoaiNhiemVu }) =>\n // maLoaiNhiemVu == loaiNhiemVu.HOMEWORK &&\n // maLoaiNhiemVu != loaiNhiemVu.RECORD\n // );\n // if (listBaiTap.length == 0) return;\n // return (\n // <div>\n // <div className=\"w-5/5 my-2 mx-auto h-0.5 bg-white\"></div>\n // <h1\n // className=\"text-content text-center tenChuyenDe py-5\"\n // style={{ fontSize: 20 }}\n // >\n // {t(\"loTrinh.baiTapVeNha\")}\n // </h1>\n // {listBaiTap.map((item, index) => {\n // // let nextItem = listBaiTap[index + 1]; // Lấy item phÃa sau\n // return <ItemTask key={index} task={item} showModal={showModal} />;\n // })}\n // </div>\n // );\n };\n let renderListRecord = () => {\n let listBaiTap = dataContent.danhSachNoiDung.filter(\n ({ maLoaiNhiemVu }) => maLoaiNhiemVu == loaiNhiemVu.RECORD\n );\n if (listBaiTap.length == 0) return;\n return (\n <div className=\"space-y-1.5\">\n <div className=\"w-5/5 my-2 mx-auto h-0.5 bg-white\"></div>\n <h1\n className=\"text-content text-center tenChuyenDe py-5\"\n style={{ fontSize: 20 }}\n >\n {t(\"loTrinh.xemLaiBuoiHoc\")}\n </h1>\n {listBaiTap.map((item, index) => {\n // let nextItem = listBaiTap[index + 1]; // Lấy item phÃa sau\n return <ItemTask key={index} task={item} showModal={showModal} />;\n })}\n </div>\n );\n };\n // tenChuyenDe\n\n // const isHeighAuto =\n // soLuongHoanThanh !== 0 && soLuongHoanThanh !== dataContent.danhSachNoiDung.length;\n\n return (\n <div className=\" c-col-full card-theme p-0 relative\">\n {dataContent.notify && (\n <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10\"></span>\n )}\n\n {!isPhone &&\n dataContent?.danhSachTag.length <= 2 &&\n dataContent?.danhSachTag.map((tag, index) => {\n return <Badge title={tag} right={90 * index + 20} size={70} />;\n })}\n <div className=\" text-black overflow-hidden\">\n <button\n aria-expanded={height !== 0}\n aria-controls=\"example-panel\"\n onClick={() => setHeight(height == 0 ? \"auto\" : 0)}\n className=\"w-full space-y-2 c-card-content \"\n >\n <p className=\"font-bold text-title text-left\">\n {dataContent.tenMonHoc}\n </p>\n <div className=\"flex flex-wrap mb-2\">\n {isPhone &&\n dataContent.danhSachTag.map((tag) => {\n let item1 = listImgTag?.find((item1) => {\n return item1?.value == tag;\n });\n return (\n <div className={\"md:w-8 md:h-8 w-10 h-10 p-1\"}>\n <img\n className=\"w-full h-full object-cover rounded\"\n src={item1?.image}\n alt\n />\n </div>\n );\n })}\n {!isPhone && dataContent?.danhSachTag.length > 2 && dataContent.danhSachTag.map((tag) => {\n let item1 = listImgTag?.find((item1) => {\n return item1?.value == tag;\n });\n return (\n <div className={\"md:w-8 md:h-8 w-10 h-10 p-1\"}>\n <img\n className=\"w-full h-full object-cover rounded\"\n src={item1?.image}\n alt\n />\n </div>\n );\n })}\n </div>\n <div className=\"flex items-center space-x-10 pt-5\">\n <p className=\"text-content flex-shrink-0\">{t(\"loTrinh.tienDo\")}</p>\n <ProgressLine\n type=\"blue\"\n percent={\n (soLuongHoanThanh / dataContent.danhSachNoiDung.length).toFixed(\n 1\n ) * 100 || 0\n }\n />\n <p className=\"flex-shrink-0 text-content\">\n {t(\"loTrinh.nhiemVuHoanThanh\")}: {soLuongHoanThanh}/\n {dataContent.danhSachNoiDung.length}\n </p>\n <i\n className={`fa fa-angle-up transform text-white ${\n height === \"auto\" ? \"rotate-180\" : \"rotate-0\"\n }`}\n ></i>\n </div>\n </button>\n <AnimateHeight id=\"example-panel\" duration={500} height={height}>\n <div className=\"\">\n <div className=\"space-y-1.5 c-card-content\">\n {renderDanhSachNhiemVu()}\n {renderListBaiTap()}\n {renderListRecord()}\n </div>\n </div>\n </AnimateHeight>\n\n <Modal\n visible={isModalOpen}\n onOk={handleOk}\n onCancel={handleCancel}\n className=\"modelPackage\"\n footer={null}\n closable={true}\n // bodyStyle={{\n // overflow: \"hidden\",\n // }}\n width={\"max-content\"}\n style={{\n // maxWidth: \"900px\",\n // minWidth: \"400px\",\n top: 10,\n // width: \"90%\",\n }}\n >\n {isPhone && userInfo.email != \"freeacc@gmail.com\" ? (\n <PackageTable\n id={chuyenDeId}\n arrChuyenDe={arrChuyenDe}\n isCombo={false}\n />\n ) : (\n <PackageTableV2\n id={chuyenDeId}\n arrChuyenDe={arrChuyenDe}\n isCombo={false}\n />\n )}\n </Modal>\n </div>\n </div>\n );\n}","import React from \"react\";\nexport default function ItemBanner({ title, content, width = \"30%\" }) {\n return (\n <div style={{ width: width }} className=\"item_banner p-2 \">\n <h4 className=\"uppercase text-content \">{title}</h4>\n\n <div className=\"space-y-1\">{content}</div>\n </div>\n );\n}\n","export const loaiNhiemVu = {\n VIDEO: \"VIDEO\",\n BAITAP: \"BAITAP\",\n QUIZ: \"QUIZ\",\n CAPS: \"CAPS\",\n};\nexport function getThongKetChiTietChuyenDe(chuyenDe) {\n if (!chuyenDe) {\n return [];\n }\n\n let tongMonHoc = chuyenDe.danhSachMonHoc?.length;\n let tongVideo = 0;\n let tongBaiTap = 0;\n let tongNhiemVu = 0;\n let tongTracNghiem = 0;\n let tongRunCode = 0;\n let tongDuAnCaps = 0;\n\n let phanThuong = {\n tongCoin: 0,\n tongExp: 0,\n };\n chuyenDe.danhSachMonHoc?.forEach((monHoc) => {\n tongNhiemVu += monHoc.danhSachNoiDung?.length;\n monHoc.danhSachNoiDung?.forEach((noiDung) => {\n phanThuong.tongCoin += noiDung.tongCoin;\n phanThuong.tongExp += noiDung.tongExp;\n let { maLoaiNhiemVu } = noiDung;\n if (maLoaiNhiemVu == loaiNhiemVu.VIDEO) {\n noiDung.noiDungNhiemVu?.forEach((chuongHoc) => {\n // tongVideo\n tongVideo += chuongHoc.noiDungBaiHoc?.length;\n });\n }\n if (maLoaiNhiemVu == loaiNhiemVu.BAITAP) {\n tongBaiTap++;\n }\n if ((maLoaiNhiemVu = loaiNhiemVu.QUIZ)) {\n tongTracNghiem++;\n }\n if ((maLoaiNhiemVu = loaiNhiemVu.CAPS)) {\n tongDuAnCaps++;\n }\n });\n });\n\n const arrayItemNoiDungChuyenDe = [\n {\n total: tongMonHoc,\n icon: <i class=\"fab fa-leanpub\"></i>,\n contentText: \"Môn há»c\",\n about: <div>{tongMonHoc} môn há»c</div>,\n type: \"monhoc\",\n },\n {\n total: tongVideo,\n icon: <i class=\"fa fa-video\"></i>,\n contentText: \"Video\",\n about: <div>{tongVideo} video</div>,\n type: \"video\",\n },\n {\n total: tongNhiemVu,\n icon: <i class=\"fa fa-tasks\"></i>,\n contentText: \"Nhiệm vụ\",\n about: <div>{tongNhiemVu} nhiệm vụ</div>,\n type: \"nhiemvu\",\n },\n {\n total: tongTracNghiem,\n icon: <i class=\"fa fa-pencil-ruler\"></i>,\n contentText: \"Hệ thống trắc nghiệm hiện đại\",\n about: <div>{tongTracNghiem} trắc nghiệm</div>,\n type: \"tracnghiem\",\n },\n {\n total: tongRunCode,\n icon: <i className=\"fas fa-laptop-code\"></i>,\n contentText: \"Hệ thống run-code\",\n about: <div>{tongRunCode} Live coding </div>,\n type: \"runcode\",\n },\n {\n total: tongDuAnCaps,\n icon: <i className=\"fas fa-flag-checkered\"></i>,\n contentText: \"Dá»± án\",\n about: <div>{tongDuAnCaps} dá»± án</div>,\n type: \"capstone\",\n },\n ];\n return { arrayItemNoiDungChuyenDe, phanThuong };\n}\n\n/**\n * đây nhé ku [\n { value: \"VIDEO\", label: 'Video', time: \"phút\" },\n { value: \"BAITAP\", label: 'Bà i táºp ná»™p', time: \"giá»\" },\n { value: \"DISCUSS\", label: 'Thảo luáºn', time: \"giá»\" },\n { value: \"CAPS\", label: 'Capstone', time: \"ngà y\" },\n { value: \"DUAN\", label: 'Dá»± án cuối khóa', time: \"ngà y\" },\n { value: \"TAILIEU\", label: 'Tà i liệu', time: \"phút\" },\n { value: \"QUIZ\", label: 'Trắc nghiệm', time: \"phút\" },\n { value: \"RUNCODES\", label: 'RUNCODE', time: \"phút\" },\n]\n */\n\nexport let getThongKetChiTietMonHoc = function (monHoc, hoanThanh) {\n return;\n};\n","import React, { useState } from \"react\";\nimport { Modal } from \"antd\";\nimport \"./ModalContentIcon.css\";\nimport { useTranslation } from \"react-i18next\";\nexport default function ModelContentIcon({ loai }) {\n const { t, i18n } = useTranslation()\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const showModal = () => {\n setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n return (\n <div id=\"tooltip_modal \" className=\"w-full\">\n <div\n className=\"cursor-pointer flex flex-col justify-center w-full items-center \"\n onClick={showModal}\n >\n {loai.icon}\n </div>\n <Modal\n title=\"\"\n visible={isModalOpen}\n onOk={handleOk}\n onCancel={handleCancel}\n footer=\"\"\n bodyStyle={{\n borderRadius: \"20px\",\n overflow: \"hidden\",\n }}\n style={{\n borderRadius: \"20px\",\n maxWidth: \"700px\",\n minWidth: \"200px\",\n }}\n >\n <div className=\"flex space-x-5 items-center \">\n <div className=\"h-full w-48 flex items-center justify-center flex-shrink-0\">\n {\" \"}\n {loai.title}\n </div>\n {/* <div className=\"c-card-content text-3xl w-full\">{loai.title}</div> */}\n <div className=\" h-full text-sub-title\">\n <h4 className=\"text-title\">{t('header.thongTinVatPham')} :</h4>\n <p>{loai.desc}</p>\n </div>\n </div>\n </Modal>\n </div>\n );\n}\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong, selectUserInfor } from \"../../redux/reducer/authReducer\";\nimport ProgressLine from \"../ProgressLine/ProgressLine\";\nimport { useTranslation } from \"react-i18next\";\n\nlet iconUp = (\n <span style={{ color: \"#16FF00\" }} className=\"\">\n <i class=\" fa fa-long-arrow-alt-up \"></i>\n </span>\n);\nlet iconDown = (\n <span style={{ color: \"#dc3545\" }} className=\"\">\n <i class=\" fa fa-long-arrow-alt-down \"></i>\n </span>\n);\n\nfunction WrapperIcon({ title, current, total, isUpPercent, color, icon, percentChange }) {\n let percent = total!=0?Math.floor((current / total) * 100):0\n return (\n <div className=\"w-full\">\n <div className=\"flex justify-between items-center\">\n <div className=\"text-content font-bold space-x-1 flex items-center\">\n {icon}\n <span className=\"whitespace-nowrap\">{title}</span>\n <div className=\"text-sub-content\">\n ({current}/{total})\n </div>\n </div>\n <div className=\"flex items-center space-x-1\">\n {isUpPercent ? iconUp : iconDown}\n {percentChange && <span className=\"text-content\">{percentChange}%</span>}\n </div>\n </div>\n <ProgressLine size={1} type={color} percent={percent >= 100 ? 100 : percent} />\n </div>\n );\n}\n\nexport let IconTichCuc = () => {\n const { phanTramTichCuc, phanTramKinhNghiem, tichCuc, tichCucToiDa } =\n useSelector(selectThongTinMoRong)?.userInfo;\n const { tichCucTang } = useSelector(selectThongTinMoRong)?.phanTramTichCucKinhNghiem;\n const { t } = useTranslation()\n \n let icon = <i style={{ color: \"#ffc107\" }} class=\"fa fa-bolt\"></i>;\n let percent = tichCucToiDa!=0?Math.floor((tichCuc / tichCucToiDa) * 100):0;\n return (\n <div className=\"w-full\">\n <div className=\"flex justify-between items-center\">\n <div className=\"text-content font-bold space-x-1 flex items-center\">\n {icon}\n <span className=\"whitespace-nowrap\"> {t('header.tichCuc')}</span>\n <div className=\"text-sub-content\">\n ({tichCuc}/{tichCucToiDa})\n </div>\n </div>\n <div className=\"flex items-center space-x-1\">\n {tichCucTang ? iconUp : iconDown}\n {phanTramTichCuc && <span className=\"text-content\">{phanTramTichCuc}%</span>}\n </div>\n </div>\n <ProgressLine size={1} type={\"red\"} percent={percent} />\n </div>\n )\n};\nexport let IconKinhNghiem = () => {\n const { phanTramTichCuc, tichCucTang, phanTramKinhNghiem, kinhNghiem, kinhNghiemToiDa } =\n useSelector(selectThongTinMoRong)?.userInfo;\n const { t } = useTranslation()\n\n const { kinhNghiemTang } = useSelector(selectThongTinMoRong)?.phanTramTichCucKinhNghiem;\n let icon = (\n <span>\n <i style={{ color: \"rgba(0, 209, 255, 1)\" }} class=\"fa fa-star\"></i>\n </span>\n );\n return (\n <WrapperIcon\n title={t('header.xp')}\n current={kinhNghiem}\n total={kinhNghiemToiDa}\n color={\"yellow\"}\n icon={icon}\n isUpPercent={kinhNghiemTang}\n percentChange={kinhNghiemTang}\n />\n );\n};\n","import Lottie from \"lottie-react\";\nimport coin_lottie from \"../../assets/lottie_json/18089-gold-coin.json\";\nimport { IconKinhNghiem, IconTichCuc } from \"./IconTichCucKinhNghiem\";\nimport { Trans } from \"react-i18next\";\nclass Icon {\n constructor(icon, title, desc) {\n this.icon = icon;\n this.title = title;\n this.desc = desc;\n }\n}\nlet iconNangDong = new Icon(\n <IconTichCuc />,\n (\n <div className=\"space-y-5\">\n <IconTichCuc />\n <p className=\"text-title\">\n <Trans i18nKey='moTaChung.diemTichCuc' />\n </p>\n </div>\n ),\n (\n <div className=\"flex items-center justify-center\">\n <div className=\" text-base space-y-3 text-gray-800\">\n <p>Äây là khu vá»±c hiển thị Ä‘iểm tÃch cá»±c của bạn</p>\n <p>Bạn sẽ nháºn được Ä‘iểm kinh nghiệm sau khi hoà n thà nh lá»™ trình, khoá há»c, bà i há»c, bà i táºp,...</p>\n <p>Bạn sẽ bị trừ Ä‘iểm tÃch cá»±c sau khi không há»c trong 1 khoảng thá»i gian, ná»™p bà i quá hạn, là m sai trắc nghiệm,..</p>\n </div>\n </div>\n )\n);\nlet iconXp = new Icon(\n <IconKinhNghiem />,\n (\n <div className=\"space-y-5\">\n <IconKinhNghiem />\n <p className=\"text-title\">Äiểm kinh nhiệm</p>\n </div>\n ),\n (\n <div className=\"flex items-center justify-center\">\n <div className=\" text-base space-y-3 text-gray-800\">\n <p>Äây là khu vá»±c hiển thị Ä‘iểm kinh nhiệm của bạn</p>\n <p>Bạn sẽ nháºn được Ä‘iểm kinh nghiệm sau khi hoà n thà nh lá»™ trình, khoá há»c, bà i há»c, bà i táºp,...</p>\n <p>Bạn sẽ bị trừ Ä‘iểm năng Ä‘á»™ng sau khi không há»c trong 1 khoảng thá»i gian, ná»™p bà i quá hạn, là m sai trắc nghiệm,..</p>\n </div>\n </div>\n )\n);\nlet iconXpHangNgay = new Icon(\n <i class=\"fa fa-calendar-alt\"></i>,\n (\n <div className=\"flex items-center space-x-2\">\n <i class=\"fa fa-calendar-alt\"></i>\n <span>DAILY</span>\n </div>\n ),\n \"Äây là điểm XP hằng ngà y của các bạn\"\n);\nlet iconChuoiDiemDanh = new Icon(\n <i class=\"fa fa-bolt\"></i>,\n (\n <div>\n <i class=\"fa fa-bolt\"></i>\n </div>\n ),\n \"Äây là chuá»—i Ä‘iểm danh của bạn\"\n);\nlet iconDiemDanh = new Icon(\n <i class=\"fa fa-bolt\"></i>,\n (\n <div>\n <i class=\"fa fa-bolt\"></i>\n </div>\n ),\n \"Chúc mừng bạn đã Ä‘iểm danh\"\n);\nlet iconTaskTheoTungHangMuc = new Icon(\n <i class=\"fa fa-list \"></i>,\n (\n <div className=\"text-center space-y-5\">\n <i class=\"fa fa-list text-5xl\"></i>\n <p className=\"text-title\">Task</p>\n </div>\n ),\n \"Tổng số lượng task các bạn đã hoà n thà nh theo từng hạng mục\"\n);\nlet iconKhoaHocTheoTungHangMuc = new Icon(\n <i class=\"fa fa-graduation-cap\"></i>,\n (\n <div>\n <i class=\"fa fa-graduation-cap\"></i>\n </div>\n ),\n \"Tổng số khóa há»c các bạn đã hoà n thà nh theo từng hạng mục\"\n);\nlet iconDuAnTheoTungHangMuc = new Icon(\n <i class=\"fa fa-chart-area\"></i>,\n (\n <div>\n <i class=\"fa fa-chart-area\"></i>\n </div>\n ),\n \"Tổng số dá»± án các bạn đã hoà n thà nh theo từng hạng mục\"\n);\nlet iconSkillPyThon = new Icon(\n <img src={\"./img/logo-python.png\"} className=\"w-full h-full object-cover\" alt=\"\" />,\n (\n <div className=\"w-32 h-32\">\n <img src={\"./img/logo-python.png\"} className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n ),\n \"Python là má»™t ngôn ngữ láºp trình được sá» dụng rá»™ng rãi trong các ứng dụng web, phát triển phần má»m, khoa há»c dữ liệu và máy há»c (ML). Các nhà phát triển sá» dụng Python vì nó hiệu quả, dá»… há»c và có thể chạy trên nhiá»u ná»n tảng khác nhau.\"\n);\nlet iconSkillDotNet = new Icon(\n <img src={\"./img/dot-net.png\"} className=\"w-full h-full object-cover\" alt=\"\" />,\n (\n <div className=\"w-32 h-32\">\n <img src={\"./img/dot-net.png\"} className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n ),\n \".NET là công cụ giúp phát triển ứng dụng dá»… dà ng trên nhiá»u hệ Ä‘iá»u hà nh khác nhau, vá»›i tÃnh chất đồng nhất giúp đảm bảo chất lượng sản phẩm.\"\n);\nlet iconSkillReactJs = new Icon(\n <img src={\"./img/logo192.png\"} className=\"w-full h-full object-cover\" alt=\"\" />,\n (\n <div className=\"w-32 h-32\">\n <img src={\"./img/logo192.png\"} className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n ),\n \"React JS là má»™t thÆ° viện JavaScript giúp phát triển giao diện ngÆ°á»i dùng (UI) Ä‘á»™c láºp vá»›i các hệ thống khác, tăng tốc Ä‘á»™ hiển thị trang web, tối Æ°u hóa tÆ°Æ¡ng tác ngÆ°á»i dùng.\"\n);\nlet iconSkillHtml = new Icon(\n <img src={\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original-wordmark.svg\"} className=\"w-full h-full object-cover\" alt=\"\" />,\n (\n <div className=\"w-32 h-32\">\n <img src={\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original-wordmark.svg\"} className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n ),\n \"HTML (Hypertext Markup Language) là ngôn ngữ đánh dấu siêu văn bản giúp tạo nên ná»™i dung trên các trang web, Ä‘Æ¡n giản, dá»… há»c và rất phổ biến trên toà n thế giá»›i.\"\n);\nlet iconSkillCss = new Icon(\n <img src={\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original-wordmark.svg\"} className=\"w-full h-full object-cover\" alt=\"\" />,\n (\n <div className=\"w-32 h-32\">\n <img src={\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original-wordmark.svg\"} className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n ),\n \"HTML (Hypertext Markup Language) là ngôn ngữ đánh dấu siêu văn bản giúp tạo nên ná»™i dung trên các trang web, Ä‘Æ¡n giản, dá»… há»c và rất phổ biến trên toà n thế giá»›i.\"\n);\nlet iconTongThoiGianHocTap = new Icon(\n <i class=\"fa fa-clock layout-icon text-title mr-3\"></i>,\n (\n <div>\n <i class=\"fa fa-clock layout-icon text-title mr-3\"></i>\n </div>\n ),\n \"Äây là khu vá»±c hiển thị tổng số thá»i gian của ngÆ°á»i dùng đã há»c\"\n);\nlet iconTongSoTracNghiem = new Icon(\n <i class=\"fa fa-pencil-ruler\"></i>,\n (\n <div>\n <i class=\"fa fa-pencil-ruler\"></i>\n </div>\n ),\n \"Äây là khu vá»±c hiển thị tổng số trắc nghiệm của ngÆ°á»i dùng đã là m\"\n);\nlet iconTongSoRunCode = new Icon(\n <i class=\"fa fa-laptop-code\"></i>,\n (\n <div>\n <i class=\"fa fa-laptop-code\"></i>\n </div>\n ),\n \"Äây là khu vá»±c hiển thị tổng số bà i run code của ngÆ°á»i dùng đã là m\"\n);\nlet iconTongSoCapstone = new Icon(\n <i class=\"fab fa-galactic-republic\"></i>,\n (\n <div>\n <i class=\"fab fa-galactic-republic\"></i>\n </div>\n ),\n \"Äây là khu vá»±c hiển thị tổng số bà i capstone của ngÆ°á»i dùng đã là m\"\n);\nlet iconTongSoDiem = new Icon(\n <i class=\"fab fa-tripadvisor\"></i>,\n (\n <div>\n <i class=\"fab fa-tripadvisor\"></i>\n </div>\n ),\n \"Äây là khu vá»±c hiển thị tổng số Ä‘iểm của ngÆ°á»i dùng\"\n);\nlet iconChungNhanDotNet = new Icon(\n (\n <div className=\"p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/dot-net.png\"} alt=\"\" />\n </div>\n ),\n (\n <div className=\"flex space-x-4\">\n <div className=\"w-1/6 p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/dot-net.png\"} alt=\"\" />\n </div>\n <div className=\"w-5/6 text-content\">\n <p>Bạn đã xuất sắc hoà n thà nh chứng nháºn</p>\n <p className=\"font-bold\">Chuyên Ä‘á»: Láºp trình .net từ cÆ¡ bản đến nâng cao. Tổng Ä‘iểm: 88/100</p>\n </div>\n </div>\n ),\n (\n <div className=\"flex items-center justify-around\">\n <button className=\"bg-main py-2 px-3\">Xem Chứng Nháºn</button>\n <button className=\"bg-main py-2 px-3\">Chia Sẻ</button>\n <button className=\"bg-main py-2 px-3\">Äăng ký nháºn bảng giấy</button>\n </div>\n )\n);\nlet iconChungNhanPython = new Icon(\n (\n <div className=\"p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/logo-python.png\"} alt=\"\" />\n </div>\n ),\n (\n <div className=\"flex space-x-4\">\n <div className=\"w-1/6 p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/logo-python.png\"} alt=\"\" />\n </div>\n <div className=\"w-5/6 text-content\">\n <p>Bạn đã xuất sắc hoà n thà nh chứng nháºn</p>\n <p className=\"font-bold\">Chuyên Ä‘á»: Láºp trình .net từ cÆ¡ bản đến nâng cao. Tổng Ä‘iểm: 88/100</p>\n </div>\n </div>\n ),\n (\n <div className=\"flex items-center justify-around\">\n <button className=\"bg-main py-2 px-3\">Xem Chứng Nháºn</button>\n <button className=\"bg-main py-2 px-3\">Chia Sẻ</button>\n <button className=\"bg-main py-2 px-3\">Äăng ký nháºn bảng giấy</button>\n </div>\n )\n);\nlet iconChungNhanReact = new Icon(\n (\n <div className=\"p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/logo192.png\"} alt=\"\" />\n </div>\n ),\n (\n <div className=\"flex space-x-4\">\n <div className=\"w-1/6 p-3 flex justify-center items-center card-theme rounded-lg\">\n <img className=\"object-cover w-full h-full\" src={\"./img/logo192.png\"} alt=\"\" />\n </div>\n <div className=\"w-5/6 text-content\">\n <p>Bạn đã xuất sắc hoà n thà nh chứng nháºn</p>\n <p className=\"font-bold\">Chuyên Ä‘á»: Láºp trình .net từ cÆ¡ bản đến nâng cao. Tổng Ä‘iểm: 88/100</p>\n </div>\n </div>\n ),\n (\n <div className=\"flex items-center justify-around\">\n <button className=\"bg-main py-2 px-3\">Xem Chứng Nháºn</button>\n <button className=\"bg-main py-2 px-3\">Chia Sẻ</button>\n <button className=\"bg-main py-2 px-3\">Äăng ký nháºn bảng giấy</button>\n </div>\n )\n);\nlet iconCoin = new Icon(\n <Lottie loop={true} animationData={coin_lottie} style={{ cursor: \"pointer\" }} className=\"lg:w-10 md:w-9 lg:h-10 md:h-9\" />,\n (\n <div>\n <Lottie loop={true} animationData={coin_lottie} style={{ cursor: \"pointer\" }} className=\"lg:w-10 md:w-9 lg:h-10 md:h-9\" />\n </div>\n ),\n (\n <div className=\"text-content\">\n <p>\n Công dụng: Bạn có thể dùng coin để mua váºt phẩm để đổi voucher hoặc tăng Ä‘iểm tÃch cá»±c và điểm kinh nghiệm. Bạn sẽ nháºn được coin sau khi há»c bà i, hoà n\n thà nh bà i táºp , hoà n hà nh trắc nghiệm,... và ngà y tÃch lÅ©y.\n </p>\n </div>\n )\n);\nlet iconLevel = new Icon(\n \"Level\",\n (\n <span>\n <i class=\"fa fa-level-up-alt\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là level hiện tại của bạn, há»c cà ng nhiá»u, level cà ng cao, nếu bạn há»c giá»i sẽ được ghi danh và o TOP USER</p>\n </div>\n )\n);\nlet iconMonHocCuaChuyenDe = new Icon(\n <i class=\"fab fa-leanpub\"></i>,\n (\n <span>\n <i class=\"fab fa-leanpub\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số môn há»c bạn cần há»c của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nlet iconVideoCuaChuyenDe = new Icon(\n <i class=\"fa fa-video\"></i>,\n (\n <span>\n <i class=\"fa fa-video\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số video bạn cần xem của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nlet iconNhiemVuCuaChuyenDe = new Icon(\n <i class=\"fa fa-tasks\"></i>,\n (\n <span>\n <i class=\"fa fa-tasks\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số nhiệm vụ bạn cần là m của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nlet iconTracNghiemCuaChuyenDe = new Icon(\n <i class=\"fa fa-pencil-ruler\"></i>,\n (\n <span>\n <i class=\"fa fa-pencil-ruler\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số bà i trắc nghiệm bạn cần là m của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nlet iconRuncodeCuaChuyenDe = new Icon(\n <i className=\"fas fa-laptop-code\"></i>,\n (\n <span>\n <i className=\"fas fa-laptop-code\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số bà i run code bạn cần là m của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nlet iconDuAnCuaChuyenDe = new Icon(\n <i class=\"fab fa-galactic-republic\"></i>,\n (\n <span>\n <i class=\"fab fa-galactic-republic\"></i>\n </span>\n ),\n (\n <div className=\"text-content\">\n <p>Äây là tổng số bà i capstone bạn cần là m của chuyên Ä‘á» nà y</p>\n </div>\n )\n);\nexport let iconDashBoard = {\n Level: iconLevel,\n Coin: iconCoin,\n Xp: iconXp,\n NangDong: iconNangDong,\n XpHangNgay: iconXpHangNgay,\n ChuoiDiemDanh: iconChuoiDiemDanh,\n TaskTheoTungHangMuc: iconTaskTheoTungHangMuc,\n DiemDanh: iconDiemDanh,\n KhoaHocTheoTungHangMuc: iconKhoaHocTheoTungHangMuc,\n DuAnTheoTungHangMuc: iconDuAnTheoTungHangMuc,\n\n SkillPyThon: iconSkillPyThon,\n SkillDotNet: iconSkillDotNet,\n SkillReactJs: iconSkillReactJs,\n TongThoiGianHocTap: iconTongThoiGianHocTap,\n TongSoTracNghiem: iconTongSoTracNghiem,\n TongSoRunCode: iconTongSoRunCode,\n TongSoCapstone: iconTongSoCapstone,\n TongSoDiem: iconTongSoDiem,\n ChungNhanDotNet: iconChungNhanDotNet,\n ChungNhanPython: iconChungNhanPython,\n ChungNhanReact: iconChungNhanReact,\n};\n\nexport let iconTaskPage = {\n SkillHtml: iconSkillHtml,\n SkillCss: iconSkillCss,\n MonHocCuaChuyenDe: iconMonHocCuaChuyenDe,\n VideoCuaChuyenDe: iconVideoCuaChuyenDe,\n NhiemVuCuaChuyenDe: iconNhiemVuCuaChuyenDe,\n TracNghiemCuaChuyenDe: iconTracNghiemCuaChuyenDe,\n RuncodeCuaChuyenDe: iconRuncodeCuaChuyenDe,\n DuAnCuaChuyenDe: iconDuAnCuaChuyenDe,\n TaskTheoTungHangMuc: iconTaskTheoTungHangMuc,\n TongSoTracNghiem: iconTongSoTracNghiem,\n TongSoRunCode: iconTongSoRunCode,\n TongSoCapstone: iconTongSoCapstone,\n TongSoDiem: iconTongSoDiem,\n TongThoiGianHocTap: iconTongThoiGianHocTap,\n};\n\nexport let iconBestPractice = {\n SkillHtml: iconSkillHtml,\n SkillCss: iconSkillCss,\n SkillPyThon: iconSkillPyThon,\n SkillDotNet: iconSkillDotNet,\n SkillReactJs: iconSkillReactJs,\n};\n","import React from \"react\";\nimport ModelContentIcon from \"../../../components/ModalContentIcon/ModalContentIcon\";\nimport { iconTaskPage } from \"../../../components/ModalContentIcon/utilities\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nexport default function ItemNoiDungChuyenDe({ item }) {\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 768 ? true : false\n const extractIconModal = (loai) => {\n switch (loai) {\n case \"monhoc\":\n return <ModelContentIcon loai={iconTaskPage.MonHocCuaChuyenDe} />;\n case \"video\":\n return <ModelContentIcon loai={iconTaskPage.VideoCuaChuyenDe} />;\n case \"nhiemvu\":\n return <ModelContentIcon loai={iconTaskPage.NhiemVuCuaChuyenDe} />;\n case \"runcode\":\n return <ModelContentIcon loai={iconTaskPage.RuncodeCuaChuyenDe} />;\n case \"capstone\":\n return <ModelContentIcon loai={iconTaskPage.DuAnCuaChuyenDe} />;\n case \"tracnghiem\":\n return <ModelContentIcon loai={iconTaskPage.TracNghiemCuaChuyenDe} />;\n }\n };\n return (\n <div className=\"flex items-center\">\n <div className=\"icon_item_theme w-8 h-8 mr-2 icon-main\">\n {extractIconModal(item.type)}\n <span className=\"bg_icon_item_theme\"></span>\n </div>\n <p className=\"text-content uppercase text-left\" style={{fontSize:`${isPhone?'9px':''}`}}>{item.about}</p>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\nexport default function ThongKeTienDo({ isChuyenDeIntern }) {\n const [thongKe, setThongKe] = useState({});\n let { chuyenDeId } = useParams();\n const { t } = useTranslation()\n\n useEffect(() => {\n servCodingCamp\n .getThongKeTask_ThoiGian(chuyenDeId)\n .then((res) => {\n setThongKe(res.data.content[res.data.content.length - 1]);\n })\n .catch((err) => {\n console.log(err);\n });\n }, [chuyenDeId]);\n\n const renderDetailTask = () => {\n let iconArray = [\n <i className=\" fa fa-clipboard-list\"></i>,\n <i className=\" fa fa-file-alt\"></i>,\n <i className=\" fa fa-code\"></i>,\n <i className=\" fa fa-hammer\"></i>,\n <i className=\" fa fa-newspaper\"></i>,\n <i className=\" fa fa-laptop\"></i>,\n <i className=\" fa fa-file-alt\"></i>,\n <i className=\" fa fa-user-friends\"></i>,\n <i className=\" fa fa-calendar-check\"></i>,\n ];\n return thongKe.thongKeChiTiet\n ?.filter(({ tongSoLuong }) => tongSoLuong > 0)\n .map(({ tieuDe, tongSoLuong, soLuongHoanThanh, thoiGian }, index) => {\n return (\n <div key={index} className=\"flex justify-between px-1 space-x-1\">\n <div className=\"flex items-center space-x-3 text-content \">\n <p className=\"text-left\">\n <span className=\"inline-block w-10 text-center\">{iconArray[index]}</span>\n {tieuDe} ({soLuongHoanThanh}/{tongSoLuong})\n </p>\n </div>\n <p className=\"text-xs text-gray-200\">{thoiGian} phút</p>\n </div>\n );\n });\n };\n\n return (\n <div className=\"item_banner space-y-4 w-full p-2 py-5\">\n <p className=\"text-title\">{t('loTrinh.thongKeNhiemVuHoanThanh')}</p>\n <div className=\" w-full overflow-y-scroll scrollbar-thin scrollbar-thumb-gray-200 scrollbar-track-white scrollbar-thumb-rounded-xl scrollbar-track-rounded-xl pr-4 grid grid-cols-2 gap-1 gap-y-2 \">\n {renderDetailTask()}\n </div>\n </div>\n );\n}\n","export const ConvertNameUser = (string, length = 3) => {\n let arrName = string?.split(\" \");\n if (arrName?.length > length) {\n arrName = arrName.slice(0, length);\n }\n // return arrName;\n return arrName?.join(\" \");\n};\n","import environment from \"../environments/environment\";\n\nexport const getHinhAnh = (url) => {\n return `https://apimentor11.cybersoft.edu.vn/images/${url}`;\n};\n\nexport let getHinhAnhFB = (id,data) => {\n\n if (!id) {\n return `https://ui-avatars.com/api/?name=${data?.hoTen}&background=random&bold=true`;\n }\n return `https://graph.facebook.com/${id}/picture?type=large`;\n};\nexport const getHinhAnh2 = (data) => {\n if(data.hinhAnh){\n return `https://apimentor11.cybersoft.edu.vn/${data.hinhAnh}`;\n }\n else{\n return `https://ui-avatars.com/api/?name=${data?.tenChuyenDe}&background=random&bold=true`;\n }\n \n};\n","import React from \"react\";\nimport \"./ranking.css\";\nimport classNames from \"classnames\";\n\nimport { useNavigate } from \"react-router-dom\";\nimport { ConvertNameUser } from \"../../utils/ConvertNameUser\";\nimport { getHinhAnhFB } from \"../../utils/GetHinhanh\";\nimport { Tooltip } from \"antd\";\nexport default function ItemRanking({ data, index, activeIndex, setActiveIndex }) {\n let navigate = useNavigate();\n return (\n <div\n onClick={() => {\n setActiveIndex(index);\n navigate(`/profile/${data.nguoiDungId}`);\n }}\n className={classNames(\n \" flex items-center justify-between px-2 space-x-4 py-2 text-content item_ranking\"\n // {\n // active_item_ranking: activeIndex == index,\n // }\n )}\n >\n <span className=\"font-medium\">#{index + 1}</span>\n \n <div className=\"flex text-right flex-grow items-center\">\n <img\n src={getHinhAnhFB(data?.avatar,data)}\n className=\"w-10 h-10 object-cover rounded-full mr-2\"\n alt=\"\"\n />\n\n <p className=\" capitalize\">{ConvertNameUser(data.hoTen)}</p>\n </div>\n <div className=\"font-bold text-left flex flex-col items-end\">\n <Tooltip placement=\"topLeft\" title={\" kinh nghiệm\"}>\n <p className=\"text-sm\">\n <i className=\"fa fa-star mr-1\"></i>\n {data.kinhNghiem}\n </p>\n </Tooltip>\n <Tooltip placement=\"topLeft\" title={\"cấp Ä‘á»™\"}>\n <p> Lv {data.capDo}</p>\n </Tooltip>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport top1 from \"./img/top1.png\";\nimport top2 from \"./img/top2.png\";\nimport top3 from \"./img/top3.png\";\nimport { useNavigate } from \"react-router-dom\";\nimport { ConvertNameUser } from \"../../utils/ConvertNameUser\";\nimport { getHinhAnhFB } from \"../../utils/GetHinhanh\";\nlet listTop = [top1, top2, top3];\nexport default function ItemTop({ user, rank, size }) {\n let navigate = useNavigate();\n\n return (\n <div\n style={{\n transform: size == 1 ? \"translateY(-15px)\" : \"translateY(0)\",\n }}\n className=\"flex flex-col items-center space-y-0.5 text-content w-1/3 text-center\"\n >\n <span\n style={{\n transform: `scale(${size}`,\n }}\n className=\"font-bold text-xl\"\n >\n #{rank + 1}\n </span>\n <img\n onClick={() => {\n // navigate(`/profile/${user.nguoiDungId}`);\n \n }}\n style={{\n transform: `scale(${size}`,\n borderColor: \"#DBB845\",\n }}\n className=\"w-20 h-20 object-cover rounded-full border-4 squre cursor-pointer \"\n src={getHinhAnhFB(user?.avatar,user)}\n alt=\"\"\n />\n\n <img\n style={{\n transform: `scale(${size}`,\n }}\n src={listTop[rank]}\n alt=\"\"\n className=\"w-1/2\"\n />\n <span className=\"capitalize\">{ConvertNameUser(user?.hoTen, 3)}</span>\n </div>\n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAABCCAYAAADkFt79AAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABA6SURBVHgB3VtvbBzHdX8z++f+8cg7UqIjWbKXsCjLbVNTbVC4KVwdG/hLkTZ20aboJ5NAGvdLGhr9g3woShJoURQtIrFpvrRFSRUp3CQIJMWOm6aIeXLa/HGA6OTYSSzT5iaiSesPySOPd7e3u7OTNzO794c8ihR9ug9+wN7tzszOzG/em/fevJklcAB69d9/b50Az2RjFaCEAVAOBvXhUHITgHC8ArxA/cf6ZT4A3usJAC2Oz/jY+0sAR34f77VGxdRU/6tfwrI9AP0fA6j+GKD2Gr6H79JkWK8oGz7rh4ZIYtSGuyAdDkIE5jgnEzWmQUL3MYEDQySbbgKSZg10ARy4KuuuqoEQwL0gvAc1GP5mVF/jX1wb3wAwDgH0/CrA1mWA0gv4DlF1SMDhRaBArGs23CXp7tdPXDEO8YxghOyn9TfY4H0At74K4CwCHP80wGufAJVPniWjb11kXnBeN2ix5MWnSn4MCAIxNR/WCY58mUtgGmWgaQximgu6gdKAFeiYVh+ANQTMXm4Abb42DeRsDV9BwO67eKUxnTSB5ZBOOnOm4V0SINY/PzzW+zCbpDFQbDz8u+oqfw8H7HmAwT9FPH+t8igv6kGNCMAWBCFnZK3hPXNBpkcDEkBGJJ/+5MUC/hW+9y8fn3K4ARqK8QAtyY6JYoYQa+x9EGgIOICE5nKOI0aIGhCOl+9cRzBLdSAe1yRgj+vyOYAKsMpL4Af4rKW5rDACjn+3Sunzjzyez4cSksMkS0pDNHCiJ1wNtppCPBrVgg6MFwWw0mbsxSuFBz4PL88qwCi1TAL/B/iVo/Q/+4aCDHDe1ywmx5IbsOomZYU9ugOaHgCN99fnc1C7DSnDhR6zQiAELOc5JXWOgeiPRprEflClRfnUE/fEC6gcEJQhcL1V7DZtdAT7RVA4Ap/aP3rtyDMAPwBdx0vUows98Tk4Nmj+W/yEdxwLF3VW5QUcjJF0Ty155i+//iK0oeI/PyTK5LDyJ/FxJkpHztn4awnQokOUu9D/+N/KvMBZhbXvfIYHnJCwYyEHiLoH0pjLERM0HMChzyLw4yo92MK8mrw1MN+QaTchdfNPsIxrR/0wUnxEyqge5D/4zMvfaIeBXR5Oq7bpVeo75KdSCph6sR1VN/hl7okGIce/ZtXLIc9KVGpqAgw5QUKwDSSgOMJDsC3Ed94LjWzej/8pddX1LG99VVTlQFHc3vrciZzRh6ItxpbBZWhD7teGR8BUUxN7WKCUQj6oyHmb4fNWW+BxLzhXXsZG5FQlF/h/W5bsI8BbUsi44rTojL+51OgZB8IYaXQ0AkAg5DY08BDSpmUG217GfpbFO0UyZBdX/u6U1XM4mDUzsj6b/OZbc20qAdSfI0LHqsaMAlpXv+CXSNg4/Vi7l7JTdrG0QqertwlIpcfI/LUvnJkNSJCRnEbyA6G4kOMhpwnaZC67rbWCiwCQUOPURZy3ablNWoAKziWw/OUPTfSdgvn4ALfwXWRIMAq7ENfIkwo0scnQjwo0O24XgyrNSy4yntvtxaN/tXBu4206vfWOAs4ZH/NYkNMIj7BwHzWwt/5GHTSRVWJGk9IprTFYvubB8hs+LP/YBfsNDe6K2E0cWIpKFc7iRLcwJY/K8TQZte3dXiH9p86oASZ58Sx74zn8EqsKbpMcvzKR2+3lI5MLU1srwdDKFTJj3tzIk7JTRHusUHOhYQXoN6OmUJMPSOCRORKUNh04Gr8NR7UVvN4F6vuNBrYzljNozcTLvykk3IYtd4aV+Ch5YnH0ToDdrwyP0Q/8Wka9y86LNKkpAt2fYxVtUjNwsmcffVqO3m7Ap2QDE+J+aTY3gl2+Um8AbSr3ywj8GhjZYTDSx6GGZksMhhlp6B6UM8dBT8vfWfmOaR3szPQWIX40OHf011+dgX0QSfU+TbIPA9wEm5xcyIs0yWkh4v4WOccF07TkGF+Zt/ZTISp0WxO+d6iEmJzXEIq44rQsx7Q9wJH2DfBgZ1pwGy9yFfbTvy+fytGskQsfp6P0+mRzwZ/xNmlRSpHGZvdT6dB4HsWb27RJLh1mgLP8bXmvpZS9dZnehItsE2PeUGKs2pTcRhKE3fbeFq0UYD+UYmepcKdIArn85lyUXActuF1ZIzNBraLs8cr/5vZVMQ8KGmlwxEMRZ86a5HZsUFlAYat5QNoq4xYNjpq5Qf5OAai9XjdXsAdVnxse005+dESZyMR0cx5tKen455wfXrRl5959aZbPWpm9Kseyl3XSUDhi/jK8KovPowZP1kW8ihIADU2/Nwkltt2MOa+guiR7crk6e8oyfuEPJ0kC2/bX5kjvR+aa81tAZ5+1i+47r4+7Cy+hTJYtGEhf2KsBVAMFjbbOPVdq8WvgFa9B7PCIHEMl4vtBGxK6tDtGx3kdlQZc2utVcvIjF7UHf8sCrdcGzZvenk+3J2Q/tZDfKnxxhhXRs4odzfHlb569UwO+7xdi1F9vTqv6puRSefGrYB4+LZZHKESmEnEJqG1XWx8l6OZKX5E2Ghcrd+S0c+HEWXPQeFRWF3tknDyy05zRdi8OfOqticrbr+YDoUsCPsGfe2BylzakMiOUX9WbuI0BBqgFBvjIbb+0pLwzkSZEvD1iqLun9UevNVsEEkDM55/kd6kAql85MWke5hNEoArYNMk+0bYs3a0C5vhPlZZuFIIKupWMTvEvWLvOcZ+RFwzCWtIEZwWV3/wvjBANSKhlT6zyye5zOhoP7rSaq615rPA1qT92eRPcSyfOxg7zKSKs49Y1AXhqt7K7ghbzm1eKo5v5fypIjqPbiWvHKwjc2l625NBLInLSDMZjVNpngcPbui6zXOS0u4GASuV6uRQrwdL1eGuFQZPpQg8MNr6o7gns0DErZy3Le+GheSMTTEjAIrrz6ItTcAeid8oUwLOf/P/Tm6v6OacqEWF0gi/y863i/ouf+J8Fg7KGvSZq8VxBbtcDGZIwWCHiENleDPrh/0AfDBxF17TXbw+a4+Dc+Hsc8BtiXY6jR1s47X7pobHBYXpFT4o1A8FFBxslH144B3sQhX1Q9s8Wnt0o0okyOi9ibmIDU/z8g4v8P6yxiPMYBDof00IRF4EDomy2MGFNmME1UlBODSrgCBoO9UJfXxNouXT0FYeXMa7lLqKka2S9lM6TR35iy2qet3L8haF5ozeYpXGxTsaFRMBOk8ft/D7g7Mti1kmsX03NnUykgrFET10hFZGzFz2IXV7RrdkNL6HQheEhHRevmcRWaKNVSIii0hvo2cBwTtAaGopjBHTgozh/MexbeUXmicXKejkN2qY7N7BRRBMEYxhutcIwEz4H4+SJ/YE9EOg6+CnLMgw6megNxmK4ftB0VdOqcQRu+f0g4lkqIKfAJI0ahoar9diZEBYd42n9yZKKlMrgYBjipTg1KAai8HnLjeOVAKFT7nvntiqrcbFMymNd0+R37g7sewLdDN5ztFw6GzxtxHhO60/ADf04bAotTRrcRpMGmVgJOcyAhAMhltjiPoFx8kSsBqahBskVgT90ZMp+TKIXPdTWPTi8uWqzAM5vvQv57F8cDGxHQDfT4p+fyA1awfxa9gHYYEnkcxSODePgxIe+eBmjsbwR+RThMwLhQIDgIuKkYkjqaQEyt2elBH2kPET+aPd1893QvhTZfmjoHxfyXiUAr+pjoEBGMMNJrIjh3Cx78XoSb3LDGwVF4JzXI0lSGa5TMHy/2CnAgjoGWhH2mfnISGajCdsWBMNFEjOh4iqbvN0NJ2T7+oJzjoPoL0PHqWOgFyeGR+Ko0cWORG3LH08bjh3uaDSg4J2w3RU/HgLkLcFhAk0RUmH2CsWL4PkiP8Ofs3LQIeoY6MOW92lIGGI22sN//H95VFTjKb0mY2eqBKnLcsWNQVlynJK65xmViZ4DmHZX3Bl9s6Js/eEPTUKHqCOgFz9jWfEeGKvwuFBAz4q043+Qz5vUHU8azUtEHso1l775WiUF0tOSJdRklkymwdT9o9+dGjpn57VSOe842M0krviu7zOwsQd1BHQ6q8/6QG3G+OjDz3zrYpR+7OPfmjO12lMps6YiHbz+IykQjkclDaVaXERXcCLIva6p+8+8Mh2VYTof95drdmVpCVdsN85CB6gjJuvK1GPW6anv2rvlr1x4zPI39MUaQS9G53JjiqJdpuhsGDHc2cY0YgirzMcHf+P7c23rQJ8AlyrFoam9Q0V70cE25bfRnQAL8hfA0uIMkgkmN+0TKXRGUrheFqtPsdo0cewT6L6mMdoB329bRxh67gh1BPReROLkSUC9ZZgM+pJlxW1ByZO4tjyGYDF+F8d/ksSbz8K9po55ZHciId7obc3jCs2K6y4k8Yrp7vZiNnpjuFuhVlL3kroCWpAAzjEIgU1m+mIVXIQ40scWnpoINqDn/VT2twsXoQvUYY9sdzryFM77MHwrz54giShqCVdRwj3tFmBBXQMtCC3Shmw03BwQmwQp5Lg4EgFdpO6CRm9N/BPSsNXi/Nl+AvidpO6CDrgUYVeGghVVfGGz+J4B/E5SV0xWRL79gUItVQLHjMOD/TfRlAXSjIHp29BF6iqnGa+eYY4OOu4Fib184WmLOZ1JlEagi9RVTmsD1VENoaYSuDvZ24/OSRbDIuiUxO4707R9fM+pq6DNjGsJx8A0hWOCirxyC69rIsuCLlJXxRtXjn27ZFnQReoqaJzClvjbvrUrs+Z3bhfdK+ou6GaOmmqzXi40JCX3PgDQIeoa6MULI5lGo00RwER4DpT5FnSJugbagKQV3Td7ZHXQhL//OM31oBWUllT/qZNhArGgS9Q90NAALU79y28y5ENCze/3I6d1DCC0zRCAhTLjtA+6RN3jNCdNimwbSU53z1Z302RZ0Q0R62kxpyOzJZQZ5xZ0iboGGr2xB1sSaKJxr5TZ+29OQyjeLd6YEXJacVx8WdAV4F0U723aWUu0ZofAoQvU9TlNozPckZ2OSIp4d1zRe7q05M+dnMR4d2496IXVckwOcdwQm3GY6Sxh62ivSy+rsyZp5Hw8McsXhosQf8Amx745DveI3nPce/FCLqPrzojG+UjAqaUR3oc7kSMe0zN+QDOOb2SC8BuOBAb4U6YDIu4dMylomUcxYHYbAwofxJ6EcbPaTYDqIl5yG6eozocFV3E71A7PhdrvdUPgwKCvP/9YTuMwia5WrjndR4Bl3IUUZ8iaKa650BNzWtKMvpOgsXXcz6sC6f8w6NH5ExDHT7YwznAVNPd6U2919bVt4ngBYv0z5Jf/dQ4OQAcWb+3N+CTuWOSEaBI9Og6FrGEpKPMY9JpV0MXRSXlOjMOxnjV5iih6lsPdu6H2q6s/w1G5X31mLA/hhBv4afTUKtfrh3JkvgBtaiO4YzCLKXNwADr4nI5Ok8izMbz+RWGUWQt0joNCNB60LiV3nAIm4YGTpufoIxdevwnTkfsMrxrqA34cDkoHB13/SFUenGxMk/BOHH2u+br8iI5quJPh1CCFzWm6OEuG+9MaA83TJNeJL77ywTkefjUbHcKh8rRlM/BG/eBfh4PSzwF6hrlqACPmsAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport { Tabs } from \"antd\";\nimport \"./ContenTab.css\";\n\nexport default function ContentTab(props) {\n const {\n paddingHeaderX,\n paddingHeaderY,\n paddingTabItemX,\n paddingTabItemY = 20,\n backgroundHeader = \"#2F3237\",\n borderHeader = \"tranparent\",\n } = props;\n\n const renderContentByTab = () => {\n return props.data.map((d, i) => {\n return (\n <Tabs.TabPane\n tab={\n <span\n style={{ padding: `${paddingTabItemY}px ${paddingTabItemX}px` }}\n className=\"text-content\"\n >\n {d.label}\n </span>\n }\n key={d.key}\n >\n {d.children}\n </Tabs.TabPane>\n );\n });\n };\n return (\n <div className=\"tabRow w-full \">\n <Tabs\n {...props}\n size=\"small\"\n tabBarGutter={50}\n tabBarStyle={{\n // background: \"linear-gradient(180deg, #66676C 31.25%, #353034 100%)\",\n background: backgroundHeader,\n padding: `${paddingHeaderY}px ${paddingHeaderX}px`,\n borderRadius: \"10px\",\n border: `1px solid ${borderHeader}`,\n height: \"100%\",\n }}\n defaultActiveKey=\"0\"\n // className=\"bg-main\"\n >\n {renderContentByTab()}\n </Tabs>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ItemRanking from \"./ItemRanking\";\nimport ItemTop from \"./ItemTop\";\nimport ContentTab from \"../ContentTab/ContentTab\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\nexport default function BangXeHangThanhTich({ heightList = 350, btnFilter, isGetAll = true }) {\n let params = useParams();\n const [listUser, setListUser] = useState([]);\n const [activeIndex, setActiveIndex] = useState(1);\n let handleGetXepHang = (option = 1) => {\n let api = isGetAll ? servCodingCamp.getXepHangTong : servCodingCamp.getXepHangTheoChuyenDe;\n api(params.chuyenDeId, option)\n .then((res) => {\n setListUser(res.data.content);\n })\n .catch((err) => {\n \n });\n };\n\n let renderOptionButton = () => {\n return btnFilter.map(({ title, key }, index) => {\n return {\n label: (\n <button\n onClick={() => {\n handleGetXepHang(key);\n }}\n className=\" rounded-full text-content font-medium\"\n >\n {title}\n </button>\n ),\n key: index,\n children: \"\",\n };\n });\n };\n\n let renderTopThree = () => {\n return [\n <ItemTop size={0.8} user={listUser[1]} rank={1} />,\n <ItemTop size={1} user={listUser[0]} rank={0} />,\n <ItemTop size={0.8} user={listUser[2]} rank={2} />,\n ];\n };\n useEffect(() => {\n handleGetXepHang();\n }, [params.chuyenDeId]);\n const { t } = useTranslation()\n\n return (\n <div className=\" h-full flex flex-col\">\n <div className=\"c-card-content pt-0 text-title flex items-center \">\n <p className=\"text-title\">\n <i className=\"fa fa-chart-bar text-white text-2xl mr-2 capitalize\"></i>\n <span> {t('trangChu.bangXepHangThanhTich')}</span>\n </p>\n </div>\n\n <div style={{ maxWidth: 300 }} className=\"flex mb-2 mx-auto flex-shrink0 space-x-3\">\n {renderTopThree()}\n </div>\n <div className=\" \">\n <ContentTab\n paddingHeaderX={15}\n paddingHeaderY={3}\n paddingTabItemX={15}\n paddingTabItemY={5}\n data={renderOptionButton()}\n />\n <div\n style={{ height: heightList }}\n className=\" list_ranking space-y-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-rounded-xl scrollbar-track-rounded-xl scrollbar-thumb-gray-400 scrollbar-track-gray-300 \"\n >\n {listUser.map((item, index) => {\n return (\n <ItemRanking\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n data={item}\n index={index}\n key={index}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","export const CHUYEN_DE_INTERN = \"INTERN\";\n","import { Spin } from \"antd\";\nimport \"./style.css\";\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\n\nexport default function SpinnerComponent() {\n const { isLoading } = useSelector((state) => state.spinner);\n return isLoading ? (\n <div className=\"page-overlay-wrapper\">\n <div class=\"mask\">\n <div class=\"loader\">\n <Spin tip=\"Loading\"></Spin>\n\n </div>\n </div>\n </div>\n ) : (\n <Fragment></Fragment>\n );\n}\n","import React, { useEffect } from \"react\";\nimport ItemBanner from \"./ItemBanner\";\nimport { getThongKetChiTietChuyenDe } from \"./utils\";\nimport ItemNoiDungChuyenDe from \"./ItemNoiDungChuyenDe\";\nimport ThongKeTienDo from \"./ThongKeTienDo\";\nimport BangXeHangThanhTich from \"../../../components/BangXeHangThanhTich/BangXeHangThanhTich\";\nimport ModalWrapper from \"../../../components/ModalWrapper/ModalWrapper\";\nimport { CHUYEN_DE_INTERN } from \"../utils/utils\";\nimport \"./style.scss\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport SpinnerComponent from \"../../../components/Spinner\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\n\nexport default function BannerTask({ dataTask }) {\n let { arrayItemNoiDungChuyenDe, phanThuong } =\n getThongKetChiTietChuyenDe(dataTask);\n let contentNoiDung = (\n <div className=\" grid grid-cols-2 gap-1\">\n {arrayItemNoiDungChuyenDe\n ?.filter(({ total: tongNoiDung }) => tongNoiDung > 0)\n .map((item, index) => {\n return <ItemNoiDungChuyenDe key={index} item={item} />;\n })}\n </div>\n );\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 639 ? true : false\n let contentPhanThuong = (\n <div className=\" space-y-5 w-full h-full \">\n <p className=\"tenChuyenDe text-center\">{phanThuong?.tongCoin} COIN</p>\n <p className=\"tenChuyenDe text-center\">{phanThuong?.tongExp} XP</p>\n </div>\n );\n const { t } = useTranslation();\n\n return (\n <div style={{ height: 'auto' }} className=\"flex justify-between \">\n <div className={`${isPhone?'c-col-full':'c-col-60'} card-theme space-y-2 relative`}>\n <h2 className=\"tenChuyenDe \">{dataTask?.tenChuyenDe}</h2>\n <p className=\"text-center text-title\">\n <Trans i18nKey=\"loTrinh.tienDo\" />{\" \"}\n {dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN ? (\n <Trans i18nKey=\"loTrinh.congVien\" />\n ) : (\n <Trans i18nKey=\"loTrinh.khoaHoc\" />\n )}\n </p>\n {/* <ProgressLine percent={40} type=\"blue\" /> */}\n <div className={`flex ${isPhone?'space-x-2':'space-x-10'} text-center `}>\n <ItemBanner\n width={isPhone?'100%':'70%'}\n title={t(\"trangChu.noiDungModule\")}\n content={contentNoiDung}\n />\n\n <ItemBanner\n width={isPhone?'100%':'30%'}\n title={t(\"loTrinh.phanThuong\")}\n content={\n <ModalWrapper\n content={<div>{t(\"loTrinh.moTaPhanThuong\")}</div>}\n icon={<div className=\"space-y-1\">{contentPhanThuong}</div>}\n />\n }\n />\n </div>\n <ThongKeTienDo\n isChuyenDeIntern={dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN}\n />\n {/* <div className=\"text-white c-card-content gioiThieuTask\"></div> */}\n </div>\n\n {isPhone? (\n \"\"\n ) : (\n <div className=\"c-col-38 card-theme h-full relative\">\n <BangXeHangThanhTich\n btnFilter={[\n {\n title: t(\"trangChu.tichCuc\"),\n key: 1,\n },\n {\n title:\n dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN\n ? t(\"loTrinh.thanhTichCao\")\n : t(\"trangChu.hocGioi\"),\n key: 2,\n },\n ]}\n heightList={150}\n isGetAll={false}\n />\n </div>\n )}\n </div>\n );\n}\n","import React, { Fragment, useEffect, useMemo, useState } from \"react\";\n\nimport CollapseTask from \"./CollapseTask/CollapseTask\";\nimport BannerTask from \"./Banner/BannerTask\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getDataTaskPageAction,\n getDataTaskPageFreeAction,\n getDataTaskPageTrialAction,\n} from \"../../redux/reducer/taskPageSlice\";\nimport SpinnerComponent from \"../../components/Spinner\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport * as signalR from \"@microsoft/signalr\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport {\n getChuyenDeApi,\n getListTagAction,\n getLstByTag,\n getLstByTagApi,\n} from \"../../redux/reducer/chuyenDeReducer-Chat\";\nimport {\n useLstLoTrinhDangHoc,\n useLstLoTrinhUser,\n} from \"../../hook/useLstLoTrinhUser\";\nimport { API_URL_DOMAIN } from \"../../utils/urlDomain\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport { useLstImgTag } from \"../../hook/useLstImgTag\";\nimport { history } from \"../../App\";\nimport axios from \"axios\";\nimport \"./utils/taskPage.scss\";\nexport default function TaskPage() {\n //collapse list_course\n const [isCollapse, setIsCollapse] = useState(true);\n const [showAll, setShowAll] = useState(false);\n const [arrCyber, setArrCyber] = useState([]);\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 798 ? true : false;\n let { dataTaskPage, loading } = useSelector((state) => state.taskPageSlice);\n let { lstCDByTag } = useSelector((state) => state.chuyenDe);\n let { chuyenDeId } = useParams();\n let dispatch = useDispatch();\n let isDemoUser = useMemo(() => checkDemoUser(), []);\n const { userInfo } = useSelector(selectThongTinMoRong);\n\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const { data: listImgTag } = useLstImgTag();\n\n const [arrChuyenDe, setArrChuyenDe] = useState();\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n\n const handleShowMore = () => {\n setShowAll(!showAll);\n };\n const displayedItems = showAll ? arrCyber : arrCyber.slice(0, 3);\n useEffect(() => {\n if (dataDangHoc) {\n isDemoUser || !userInfo.kichHoat || !isLearning\n ? dispatch(getDataTaskPageTrialAction(chuyenDeId))\n : dispatch(getDataTaskPageAction(chuyenDeId));\n return () => {\n dispatch(getDataTaskPageAction.fulfilled({}));\n dispatch(getLstByTag([]));\n };\n }\n }, [chuyenDeId, dataDangHoc]);\n useEffect(() => {\n axios\n .get(`${API_URL_DOMAIN}/chuyende`)\n .then((res) => {\n setArrChuyenDe(res.data.content);\n })\n .catch((err) => {});\n }, [chuyenDeId]);\n useEffect(() => {\n if (dataTaskPage) {\n dispatch(getLstByTagApi(JSON.stringify(dataTaskPage?.danhSachTag)));\n }\n }, [dataTaskPage]);\n useEffect(() => {\n axios.get(`https://apicrm.cybersoft.edu.vn/api/gioithieu`).then((res) => {\n setArrCyber(res.data.content);\n });\n dispatch(getChuyenDeApi());\n\n if (isDemoUser || !userInfo.kichHoat) {\n const connection = new signalR.HubConnectionBuilder()\n .withUrl(`${BASE_URL_CODINGCAMP}/chat`)\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n connection\n .start()\n .then(() => {})\n .catch((err) => {});\n\n connection.on(\"updateDemoBH\", (message) => {\n dispatch(getDataTaskPageTrialAction(chuyenDeId));\n });\n\n // Cleanup function\n return () => {\n connection.off(\"updateDemoBH\");\n connection.stop();\n };\n }\n }, []);\n return (\n <div className=\"w-full h-full \">\n <div className=\"c-col-full\">\n <BannerTask dataTask={dataTaskPage} />\n </div>\n <div className=\"flex relative taskPageCourse\">\n <div\n className={`${\n isPhone ? \"c-col-full\" : isCollapse ? \"c-col-66\" : \"c-col-95\"\n } space-y-5`}\n >\n {loading && (\n <div className=\"flex justify-center\">\n {\" \"}\n <div className=\" loading_progress\"></div>\n </div>\n )}\n {dataTaskPage?.danhSachMonHoc?.map((item, index) => {\n return (\n <CollapseTask\n dataContent={item}\n key={index}\n index={index}\n arrChuyenDe={arrChuyenDe}\n />\n );\n })}\n </div>\n {isPhone ? (\n \"\"\n ) : (\n <Fragment>\n <div\n className={`csm34 ${isCollapse ? \" c-col-34\" : \"collapsed w-0\"}`}\n >\n <div className=\"c-col-full card-theme\">\n <i\n className=\"fa-regular fa-sidebar-flip pr-2 cursor-pointer text-right d-block font-bold text-title\"\n onClick={() => setIsCollapse(false)}\n ></i>\n <p className=\"font-bold text-title text-left\">\n Khoá há»c kiến táºp sá»± nghiệp tại CyberSoft\n </p>\n <div className=\"py-5\">\n {displayedItems?.map((item, idx) => {\n if (item.metaData === \"Cybersoft\") {\n return (\n <div\n key={idx}\n className=\"flex items-center py-3 cursor-pointer\"\n onClick={() => {\n window.open(item.linkMoTa, \"_blank\");\n }}\n >\n <img\n className=\"object-cover rounded-lg w-48 md:rounded-none md:rounded-s-lg\"\n src={`${item.hinhAnh}`}\n alt={item.tenSanPham}\n />\n <div className=\"flex flex-col justify-between p-2 leading-normal\">\n <p className=\"mb-2 text-base font-bold tracking-tight text-white\">\n {item.tenSanPham}\n </p>\n </div>\n </div>\n );\n }\n })}\n {arrCyber.length > 3 && (\n <div className=\"text-center\">\n <button\n className=\"text-white hover:underline\"\n onClick={handleShowMore}\n >\n {showAll ? \"Thu gá»n\" : \"Xem thêm\"}\n </button>\n </div>\n )}\n </div>\n <p className=\"font-bold text-title text-left pt-4\">\n <i\n className=\"fa-regular fa-sidebar-flip pr-2 cursor-pointer\"\n onClick={() => setIsCollapse(false)}\n ></i>\n Khoá há»c cao cấp liên quan\n </p>\n <div className=\"py-5\">\n {lstCDByTag\n ?.filter((item) => {\n let checkLearn = checkLearning(item.id, dataDangHoc);\n return !checkLearn && item.id !== chuyenDeId;\n })\n .slice(0, 3)\n .map((item, idx) => {\n let arrTag = JSON.parse(item.danhSachTag);\n\n return (\n <div\n key={idx}\n className=\"flex items-center py-3 cursor-pointer\"\n onClick={() => {\n history.push(`/task-page-free/${item.id}`);\n }}\n >\n <img\n className=\"object-cover rounded-lg w-48 md:rounded-none md:rounded-s-lg\"\n src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`}\n alt={item.tenChuyenDe}\n />\n <div className=\"flex flex-col justify-between p-2 leading-normal\">\n <p className=\"mb-2 text-base font-bold tracking-tight text-white\">\n {item.tenChuyenDe}\n </p>\n <div className=\"flex flex-wrap mb-2\">\n {arrTag.map((tag) => {\n let item1 = listImgTag?.find(\n (item1) => item1?.value === tag\n );\n return (\n <div key={tag.value} className=\"w-6 h-6 p-1\">\n <img\n className=\"w-full h-full object-cover rounded\"\n src={item1?.image}\n alt={item1?.value}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n })}\n <div className=\"text-center\">\n <button\n className=\"text-white hover:underline\"\n onClick={() => history.push(\"/package\")}\n >\n Xem thêm\n </button>\n </div>\n </div>\n </div>\n </div>\n <div className={`csm34 ${isCollapse ? \"expanded w-0 \" : \"c-col-5\"}`}>\n <div className=\"c-col-full\">\n <p className=\"text-end\">\n <i\n className=\"text-title fa-regular fa-sidebar-flip pr-2 cursor-pointer\"\n onClick={() => setIsCollapse(true)}\n ></i>\n </p>\n </div>\n </div>\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n","// import { Segmented } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport ContentTab from \"../ContentTab/ContentTab\";\nimport { useParams } from \"react-router-dom\";\n\nlet ItemPhanCong = ({ require }) => {\n const [isFinish, setIsFinish] = useState(true);\n let options = [\n {\n title: \"ChÆ°a là m\",\n isDone: false,\n },\n {\n title: \"Äã là m\",\n isDone: true,\n },\n ];\n let renderList = () => {\n return options?.map(({ title, isDone }, index) => {\n return {\n label: (\n <button\n onClick={() => {\n setIsFinish(isDone);\n }}\n className=\" rounded-full text-content font-medium\"\n >\n {title}\n </button>\n ),\n key: index,\n children: <p className=\"text-white\"></p>,\n };\n });\n };\n return (\n <div className=\"text-content \">\n <h3 className=\"text-white capitalize font-medium text-center\">{require.tenHocVien}</h3>\n <ContentTab\n paddingHeaderX={15}\n paddingHeaderY={3}\n paddingTabItemX={15}\n paddingTabItemY={5}\n data={renderList()}\n />\n\n <ul className=\" list-item space-y-3 h-24 overflow-y-scroll scrollbar-thin scrollbar-thumb-gray-200 scrollbar-track-white scrollbar-thumb-rounded-xl scrollbar-track-rounded-xl\">\n {require?.dsRequire\n ?.filter(({ isDone }) => isDone == isFinish)\n .map((item, index) => {\n\n return (\n <li className=\"text-white\">\n {/* {item.noiDung} */}\n Task {item.requireId + 1}\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\nexport default function AssignmentAndDetail() {\n const [assignment, setAssignment] = useState({});\n let { chuyenDeId, taskId, monHocId } = useParams();\n\n useEffect(() => {\n let payload = {\n chuyenDeId,\n monHocId,\n taskId,\n };\n servCodingCamp\n .chiaTaskCapstone(payload)\n .then((res) => {\n\n setAssignment(res.data.content);\n })\n .catch((err) => {\n \n });\n }, []);\n return (\n <>\n <div className=\"c-col-full flex-grow\">\n <div className=\" h-full overflow-hidden\">\n <div className=\"c-card-content flex items-center border-b border-black\">\n <p className=\"text-title font-bold \">\n <div className=\"icon_theme w-11 h-11 mr-2 \">\n <i className=\"fas fa-wrench\"></i>\n {/* <span className=\"bg_icon_theme\"></span> */}\n </div>\n Bảng phân công công việc\n </p>\n </div>\n <div className=\"c-card-content text-white flex justify-between\">\n {assignment?.listDsRequireHv?.map((item, key) => {\n return <ItemPhanCong require={item} key={key} />;\n })}\n </div>\n </div>\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport clockImg from \"./img/clock.png\";\nimport { typeTrangThaiNop } from \"../StepProjectInstruction/util\";\nimport \"./style.scss\";\nimport moment from \"moment\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { message } from \"antd\";\nexport default function TimeRemain({ deadline = 0, trangThaiTongBaiTap, label = \"\" }) {\n let user = localStorageServ.userInfo.get();\n let { chuyenDeId, taskId, monHocId } = useParams();\n\n let handleBatDauLamBaiTap = () => {\n let data = { chuyenDeId, taskId, monHocId, nguoiDungId: user.id };\n servCodingCamp\n .batDauLamBaiTap(data)\n .then((res) => {\n window.location.reload();\n })\n .catch((err) => {\n message.error(err?.err.response?.data?.message);\n });\n };\n var givenDate = moment(trangThaiTongBaiTap.deadLine);\n\n // Today's date\n var today = moment();\n\n // Calculate the difference in days\n var daysDifference = givenDate.diff(today, \"days\");\n\n if (trangThaiTongBaiTap?.trangThai == typeTrangThaiNop.CHUA_LAM) {\n return (\n <div className=\"space-y-3 px-5\">\n <p className=\"text-red-600 text-xl\">\n *LÆ°u ý: <span className=\"capitalize\">{label}</span> sẽ được bắt đầu tÃnh deadline sau khi\n bạn chá»n kÃch hoạt {label}\n </p>\n <button className=\"btn_theme_red\" onClick={handleBatDauLamBaiTap}>\n Bắt đầu là m {label}\n </button>\n </div>\n );\n }\n\n if (trangThaiTongBaiTap?.trangThai == typeTrangThaiNop.DANG_LAM)\n return (\n <div className=\"flex items-center space-x-5 justify-start \">\n\n <p className=\"text-title text-danger\">\n <div className=\"icon_theme w-11 h-11 \">\n <i className=\"fa fa-clock\"></i>\n </div>\n\n Deadline bà i táºp: {moment(trangThaiTongBaiTap?.deadLine).format(\"DD/MM/YYYY\")}\n </p>\n </div>\n );\n return <></>;\n}\n","export default __webpack_public_path__ + \"static/media/dollar.84cf06a8.png\";","import { useDispatch, useSelector } from \"react-redux\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { selectThongTinMoRong, updateThongTinMoRongAction } from \"../../redux/reducer/authReducer\";\n\nimport bgCoin from \"./dollar.png\";\nimport toast from \"react-hot-toast\";\nimport HtmlParser from \"react-html-parser\";\nimport { useTranslation } from \"react-i18next\";\nimport { getVatPhamUserAction } from \"../../redux/reducer/vatPhamSlice\";\nexport let ContentVatPham = ({ item, setIsModalOpen, onFetch = () => { } }) => {\n const { t } = useTranslation()\n\n let info = useSelector(selectThongTinMoRong);\n let currentCoin = info.userInfo?.coin;\n let { hinhAnh, tenVatPham, moTa, hanSuDung, chiPhi, id } = item || {};\n let dispatch = useDispatch();\n\n const handleBuy = () => {\n servCodingCamp\n .muaVatPham(id)\n .then((res) => {\n if (!res.data.content) {\n // mua thất bại\n toast.error(res.data.message);\n } else {\n onFetch();\n toast.success(\"Mua váºt phẩm thà nh công\");\n dispatch(updateThongTinMoRongAction());\n dispatch(getVatPhamUserAction());\n setIsModalOpen(false)\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n return (\n <div className=\"flex text-title space-x-24 h-full w-full\">\n <div className=\"w-96 space-y-5 text-center rounded \">\n <img src={hinhAnh} className=\"w-full h-4/5 object-contain rounded\" alt=\"\" />\n <h3 className=\"text-title\">{tenVatPham}</h3>\n </div>\n <div style={{ width: \"100%\" }} className=\" space-y-5 px-5\">\n <h3 className=\"text-center text-title\">\n {t('vatPham.thongTinVatPham')}\n\n </h3>\n <p className=\"\">{HtmlParser(moTa)}</p>\n <p>\n {t('vatPham.hanDung')}\n : {hanSuDung == 0 ? t('vatPham.vinhVien') : `${hanSuDung} ${t('vatPham.ngay')}`} </p>\n <p className=\"flex items-center\">\n <span className=\"mr-2\">\n {t('vatPham.giaVatPham')}\n : {chiPhi} </span>\n <img src={bgCoin} className=\"w-10\" alt=\"\" />\n </p>\n {chiPhi <= currentCoin && (\n <button\n onClick={handleBuy}\n className=\" py-2 text-white uppercase font-medium text-lg btn_vat_pham w-40\"\n >\n {t('vatPham.muaVatPham')}\n\n </button>\n )}\n {/* show message sau khi mua váºt phẩm */}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport servVatPham from \"../../services/vatPham.service\";\nimport { ContentVatPham } from \"../VatPham/ContentVatPham\";\nimport HtmlParser from \"react-html-parser\";\n\nexport default function ButtonGiaHanBaiTap({ nopBaiId }) {\n const [data, setData] = useState({});\n useEffect(() => {\n fetchData();\n }, []);\n let fetchData = () => {\n servVatPham\n .showItemGiamThoiGianBaiTap()\n .then((res) => {\n setData(res.data.content);\n\n })\n .catch((err) => {\n \n });\n };\n let handleSuDungVp = () => {\n servVatPham\n .giamThoiGianChoBaiTap(nopBaiId)\n .then((res) => {\n // fetchThongTinBaiNop();\n window.location.reload();\n })\n .catch((err) => {\n \n // toast(err.response.data.messsage);\n });\n };\n if (data.daSoHuu) {\n let { hinhAnh, tenVatPham, moTa, hanSuDung, chiPhi, id } = data.canMua;\n return (\n <div>\n <div className=\"flex text-title space-x-24 h-full\">\n <div className=\"w-96 space-y-5 text-center rounded \">\n <img src={hinhAnh} className=\"w-full h-4/5 object-contain rounded\" alt=\"\" />\n </div>\n <div style={{ width: 400 }} className=\" space-y-5 px-5\">\n <h3 className=\"text-center text-title\">Thông tin váºt phẩm</h3>\n <p className=\"\">{HtmlParser(moTa)}</p>\n <p className=\"flex items-center\"></p>\n <button onClick={handleSuDungVp} className=\"btn_theme_red\">\n Sá» dụng váºt phẩm\n </button>\n\n {/* show message sau khi mua váºt phẩm */}\n </div>\n </div>\n </div>\n );\n } else {\n return (\n <div style={{ height: \"max-content\" }} className=\" w-full px-5\">\n <ContentVatPham onFetch={fetchData} item={data.canMua} />\n </div>\n );\n }\n}\n","import React from \"react\";\nimport AssignmentAndDetail from \"./AssignmentAndDetail\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport { loaiNhiemVu } from \"../../utils/taskUtils\";\nimport TimeRemain from \"./TimeRemain\";\nimport { typeTrangThaiNop } from \"../StepProjectInstruction/util\";\nimport ButtonGiaHanBaiTap from \"./ButtonGiaHanBaiTap\";\nimport { CHUYEN_DE_INTERN } from \"../../pages/TaskPage/utils/utils\";\nimport { useTranslation } from \"react-i18next\";\nimport { useState } from \"react\";\nimport PopUpChat from \"../PopUpChat/PopUpChat\";\nfunction InformationProject({ trangThaiTongBaiTap, detail, maNhiemVu }) {\n const { t } = useTranslation()\n\n let { deadline, ghiChu, tenNhiemVu, loaiChuyenDe } = detail;\n let label = loaiChuyenDe == CHUYEN_DE_INTERN ? \"task\" : \"bà i táºp\";\n return (\n <div className=\"card-theme overflow-hidden row\">\n <div className={`c-card-content ${maNhiemVu === loaiNhiemVu.BAITAP ? 'col-12' : 'col-6'} `}>\n\n <div className=\"text-title font-bold pl-2\">\n <p className=\" \">\n <div className=\"icon_theme w-11 h-11 \">\n <i className=\"fas fa-trophy\"></i>\n </div>\n {t('chiTietNhiemVu.tenNhiemVu')}\n : {tenNhiemVu}\n </p>\n\n {/* Nếu không phải là mã loại nhiệm vụ là bà i táºp thì k có section phân chia nhóm */}\n <TimeRemain label={label} trangThaiTongBaiTap={trangThaiTongBaiTap} deadline={deadline} />\n\n {trangThaiTongBaiTap?.trangThai == typeTrangThaiNop.HET_HAN && (\n <div className=\"flex flex-col items-center space-y-5\">\n <p className=\"teaxt-center text-red-700 capitalize\">{label} nà y đã quá hạn ná»™p</p>\n <ButtonGiaHanBaiTap nopBaiId={trangThaiTongBaiTap?.noiDung[0]?.id || 0} />\n </div>\n )}\n\n <p className=\"text-content\">{ReactHtmlParser(ghiChu)}</p>\n </div>\n </div>\n {maNhiemVu === loaiNhiemVu.BAITAP ? (\n \"\"\n ) : (\n <div className=\"flex col-6\">\n <AssignmentAndDetail />\n </div>\n\n )}\n\n </div>\n );\n}\n\nexport default InformationProject;\n","import React from \"react\";\nlet styleBtn = {\n left: \"1137px\",\n top: \"658px\",\n background:\n \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"11px\",\n border: \"2px solid #F5BC7A\",\n};\nexport default function ButtonNopBai({ text = \"Ná»™p bà i\", onClick = () => {} }) {\n return (\n <div class=\" text-content mt-2\">\n <button onClick={onClick} style={styleBtn} className=\"px-8 py-2\">\n {text}\n </button>\n </div>\n );\n}\n","import React, { Component } from 'react';\nimport Hls from 'hls.js';\n\nexport default class HLSSource extends Component {\n constructor(props, context) {\n super(props, context);\n this.state = {\n hls: new Hls(),\n url: ''\n }\n }\n\n componentDidMount() {\n // `src` is the property get from this component\n // `video` is the property insert from `Video` component\n // `video` is the html5 video element\n const { src, video } = this.props;\n // load hls video source base on hls.js\n if (Hls.isSupported()) {\n this.state.hls.loadSource(src);\n this.state.hls.attachMedia(video);\n this.state.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n video.play();\n });\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n const { src, video } = props;\n // load hls video source base on hls.js\n if (state.url !== src && Hls.isSupported()) {\n state.hls.loadSource(src);\n state.hls.attachMedia(video);\n state.hls.on(Hls.Events.MANIFEST_PARSED, () => {\n video.play();\n });\n return {...state, url: src };\n }\n return null;\n }\n\n componentWillUnmount() {\n // destroy hls video source\n if (this.hls) {\n this.hls.destroy();\n }\n }\n\n render() {\n return (\n <source\n src={this.props.src}\n type={this.props.type || 'application/x-mpegURL'}\n />\n );\n }\n}","import React, { Component, useEffect, useRef } from 'react'\nimport { Player, ControlBar, ReplayControl, PlaybackRateMenuButton } from 'video-react';\nimport HLSSource from './HLSSource';\n\nimport { Anchor } from 'antd';\nimport useWindowSize from '../../hook/useWindowSize';\n\nexport default function VideoPlayer({ source }) {\n const { widthWindow, heightWindow } = useWindowSize();\n\n const playerRef = useRef(null);\n useEffect(() => {\n if (playerRef.current) {\n playerRef.current.load();\n }\n }, [source]);\n \n return (\n <div >\n\n {source ?\n <Player playsInline fluid={false} width={\"100%\"} height={widthWindow<768?300:550}>\n\n <HLSSource\n isVideoChild\n src={source && source}\n />\n <ControlBar>\n <PlaybackRateMenuButton rates={[3, 2.5, 2, 1.5, 1]} order={10} />\n </ControlBar>\n\n </Player>\n : \"\"}\n\n </div>\n )\n\n}\n","import React, { useEffect, useState } from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport ButtonNopBai from \"../ButtonNopBai/ButtonNopBai\";\nimport { createPayloadNopBai, loaiNhiemVu, markTaskAsCompleted } from \"../../utils/taskUtils\";\nimport \"./style.scss\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { typeTrangThaiNop } from \"./util\";\nimport toast from \"react-hot-toast\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, message, Upload } from 'antd';\n\nimport { InboxOutlined, UploadOutlined } from \"@ant-design/icons\";\nimport { API_URL_DOMAIN } from \"../../utils/urlDomain\";\nimport ContentTab from \"../ContentTab/ContentTab\";\nimport ReactPlayer from \"react-player\";\nimport VideoPlayer from \"../video/VideoPlayer\";\n\nimport { navigatePageByTaskNext, parentPage } from \"../../routes/utitlity\";\nimport { checkLearning } from \"../../utils/HocDemoUtils\";\nimport { useLstLoTrinhDangHoc } from \"../../hook/useLstLoTrinhUser\";\nlet inputCaps =\n \" bg-gray-50 border border-gray-300 text-gray-900 text-content rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 italic block\";\n\n\nconst { Dragger } = Upload;\n\nlet styleBtn = {\n left: \"1137px\",\n top: \"658px\",\n background:\n \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"11px\",\n border: \"2px solid #F5BC7A\",\n};\n\nexport default function StepProjectInstruction({\n noiDung,\n orderNumber,\n requireId = 1,\n trangThaiTongBaiTap = {},\n getThongTinBaiTapNop = () => { },\n tongCoin,\n tongExp,\n maLoaiNhiemVu,\n required,\n countRequire\n}) {\n const { t } = useTranslation()\n \n const navigate = useNavigate();\n let user = localStorageServ.userInfo.get();\n let indexThongTinNop = trangThaiTongBaiTap.noiDung.findIndex(\n (thongTinNop) => thongTinNop.requireId == required.requireId\n );\n\n let thongTinBaiTap = trangThaiTongBaiTap?.noiDung[indexThongTinNop] || {};\n let { chuyenDeId, taskId, monHocId } = useParams();\n let { baiLam, diem, nhanXet, trangThai, id: nopBaiId } = thongTinBaiTap;\n let [arrFile,setArrFile] = useState([])\n \n const { data: dataDangHoc } = useLstLoTrinhDangHoc(user?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n\n\n // convert heart to input html\n let handleNopLaiBai = () => {\n const inputs = document.querySelectorAll(`#noiDungCaps_${orderNumber} #input_box`);\n // các link input render then trái tim\n const baiLam = [...arrFile];\n let isValid = true;\n Array.from(inputs).forEach((input) => {\n if (input.value.trim() === \"\") {\n isValid = false;\n }\n baiLam.push(input.value);\n });\n if (isValid == false) {\n toast.error(\"Bạn vui lòng ná»™p đầy đủ các link theo yêu cầu\");\n return;\n }\n // validate\n let payload = {\n nopBaiId,\n baiLam: JSON.stringify(baiLam),\n };\n servCodingCamp\n .postNopLaiBaiTap(payload)\n .then((res) => {\n getThongTinBaiTapNop();\n toast.success(\"Bạn đã cáºp nháºt bà i táºp thà nh công\");\n })\n .catch((err) => {\n \n });\n };\n let handleNopBai = () => {\n const inputs = document.querySelectorAll(`#noiDungCaps_${orderNumber} #input_box`);\n // các link input render then trái tim\n const baiLam = [...arrFile];\n\n let isValid = true;\n Array.from(inputs).forEach((input) => {\n\n if (input.value.trim() === \"\") {\n isValid = false;\n }\n baiLam.push(input.value);\n });\n if (isValid == false) {\n toast.error(\"Bạn vui lòng ná»™p đầy đủ các link theo yêu cầu\");\n\n return;\n }\n\n let payload = createPayloadNopBai(\n taskId,\n maLoaiNhiemVu,\n JSON.stringify(baiLam),\n requireId,\n chuyenDeId,\n monHocId\n );\n console.log(\"payload\", payload)\n servCodingCamp\n .postNopBaiTap(payload)\n .then((res) => {\n getThongTinBaiTapNop();\n toast.success(\"Bạn đã ná»™p bà i táºp thà nh công!\");\n\n //chuyển trang\n if(maLoaiNhiemVu!=loaiNhiemVu.QUIZ && maLoaiNhiemVu!=loaiNhiemVu.RUNCODE && countRequire==requireId && isLearning ){\n navigatePageByTaskNext(res.data.content, navigate, parentPage.task, monHocId, chuyenDeId);\n toast.success(\" Hãy đến vá»›i nhiệm vụ tiếp theo!\")\n }\n \n })\n .catch((err) => {\n \n });\n };\n\n\n const props = {\n name: 'file',\n multiple: true,\n action: `${API_URL_DOMAIN}/file`,\n accept: \"application/zip,.jpg,.png,.gif\",\n\n beforeUpload(file) {\n const isZip = file.type === 'application/zip' ||\n file.type === 'application/x-zip-compressed' ||\n file.type === 'application/x-compressed-zip' ||\n file.type === 'application/zip-compressed';\n if (!isZip) {\n message.error('Bạn chỉ có thể upload file ZIP!');\n }\n const isLt1M = file.size / 1024 / 1024 < 1;\n if (!isLt1M) {\n message.error('File phải nhá» hÆ¡n 1MB!');\n }\n return isZip && isLt1M;\n },\n\n onChange(info) {\n const { status } = info.file;\n let newArr = [...arrFile]\n if (status !== 'uploading') {\n }\n if (status === 'done') {\n message.success(`${info.file.name} file uploaded successfully.`);\n const response = info.file.response;\n Array.from(response).forEach((file) => {\n newArr.push(`https://apimentor11.cybersoft.edu.vn/${file}`);\n });\n setArrFile(newArr);\n } else if (status === 'error') {\n message.error(`${info.file.name} file upload failed.`);\n }\n },\n onDrop(e) {\n \n },\n };\n\n let addInputToLayout = (noiDung) => {\n\n\n\n let arrayBaiLam = JSON.parse(baiLam || \"[]\");\n if (noiDung.includes(\"♥\")) {\n // list input cần convert\n var currentIndex = 0;\n\n var noiDung = noiDung.replace(/♥/g, function (match) {\n if (baiLam?.length) {\n var replacement = ` <input type=\"text\" class='practice_fill_input text-black ${inputCaps}' placeholder='${arrayBaiLam[currentIndex] || \"\"\n }' id='input_box' /> `;\n currentIndex++;\n\n return replacement;\n }\n var replacement = `<input type=\"text\" class='practice_fill_input text-black ${inputCaps}' placeholder='${arrayBaiLam[currentIndex] || \"Dán link ná»™p bà i và o đây\"\n }' id='input_box' /> `;\n currentIndex++;\n return replacement;\n });\n }\n\n let indexSquare = noiDung.split(\"♠ï¸\");\n\n return indexSquare?.map((item, index) => {\n\n return <>\n {HtmlParser(item)}\n\n {index != indexSquare.length - 1 && <Upload {...props} >\n <button className=\"px-5 py-2 text-white\" style={styleBtn}><i className=\"fa fa-upload\"></i> Click or drag file</button>\n </Upload>} </>;\n })\n };\n\n\n let handleBatDauLamBaiTap = () => {\n let data = { chuyenDeId, taskId, monHocId, nguoiDungId: user.id };\n servCodingCamp\n .batDauLamBaiTap(data)\n .then((res) => {\n window.location.reload();\n })\n .catch((err) => {\n \n });\n };\n let renderTrangThai = () => {\n if (trangThaiTongBaiTap.trangThai == typeTrangThaiNop.CHUA_LAM) {\n return <></>;\n }\n if (trangThaiTongBaiTap.trangThai == typeTrangThaiNop.HET_HAN) {\n return <></>;\n }\n switch (trangThai) {\n case typeTrangThaiNop.DA_CHAM: {\n return (\n <div className=\"text-yellow card-theme p-2 rounded\">\n <p>\n {\" \"}\n {t('chiTietNhiemVu.diemCuaBan')}\n : <span className=\"font-medium\">\n {diem}\n </span>\n {t('chiTietNhiemVu.diem')}\n\n </p>\n {nhanXet && <p>\n {t('chiTietNhiemVu.nhanXet')} {HtmlParser(nhanXet)}</p>}\n </div>\n );\n }\n case typeTrangThaiNop.NOP_LAI: {\n return (\n <div>\n <div className=\"text-yellow\">\n {t('chiTietNhiemVu.banCanBoSungLai')}\n\n </div>\n <ButtonNopBai text=\"Cáºp nháºt\" onClick={handleNopLaiBai} />\n </div>\n );\n }\n case typeTrangThaiNop.CHO_CHAM: {\n return <div>\n <div className=\"text-danger\">\n <p class=\"text-red-600 text-xl\">Bà i của bạn Ä‘ang được chấm</p>\n </div>\n <ButtonNopBai text=\"Cáºp nháºt\" onClick={handleNopLaiBai} />\n </div>;\n }\n case typeTrangThaiNop.HET_HAN: {\n return <div className=\"\"></div>;\n }\n default:\n return <ButtonNopBai onClick={handleNopBai} />;\n }\n };\n\n\n const listGuide = [\n {\n label: \"Äá» bà i\",\n children: (\n <>\n\n <div>\n <p\n id={`noiDungCaps_${orderNumber}`}\n className=\"c-card-content text-content p-0 stepListRequireNopBai leading-7\"\n >\n {addInputToLayout(noiDung)}\n </p>\n </div>\n {/* !!!!!!! đã chấm rồi thì ko cho ná»™p lại */}\n\n <div className=\"text-xl text-left \">{renderTrangThai()}</div>\n </>\n )\n }\n ]\n\n const [source, setSource] = useState(\"\");\n let lstVideoHuongDan = required && required.huongDan ? JSON.parse(required.huongDan) : []\n if (lstVideoHuongDan.length > 0) {\n listGuide.push({\n label: \"HÆ°á»›ng dẫn ná»™p bà i\",\n key: 1,\n children: (\n <div className=\"c-card-content text-content space-y-1 leading-7\">\n {/* <ReactPlayer\n playbackRate={1}\n playing={true}\n url={source}\n width=\"100%\"\n height=\"100%\"\n // style={{ borderRadius: \"100px\" }}\n controls={true}\n config={{\n file: {\n forceHLS: true,\n },\n }}\n /> */}\n <VideoPlayer source={source} />\n {Array.from({ length: lstVideoHuongDan.length }, (_, index) => {\n\n return <button onClick={() => {\n\n servCodingCamp.getUrlVideoSolution_FPT(lstVideoHuongDan[index].noiDung).then(res => {\n setSource(res.data)\n })\n\n }} style={styleBtn} className=\"m-2 px-3 py-1\">\n {index + 1}\n </button>\n }\n )\n }\n </div>\n ),\n })\n }\n\n const renderDetailTask = () => {\n return listGuide.map(({ label, children }, index) => {\n\n return {\n label,\n key: index,\n children,\n\n };\n });\n };\n\n return (\n <div className=\"p-3 h-full w-full\">\n\n <ContentTab\n paddingHeaderX={15}\n paddingHeaderY={3}\n paddingTabItemX={15}\n paddingTabItemY={5}\n data={renderDetailTask()}\n onTabClick={(key) => {\n\n // set video tá»± Ä‘á»™ng chạy lân2 đầu\n if (key == 1 && source == \"\") {\n servCodingCamp.getUrlVideoSolution_FPT(lstVideoHuongDan[0].noiDung).then(res => {\n setSource(res.data)\n })\n }\n }}\n />\n\n\n </div>\n );\n}\n","import { Pagination, Popconfirm, Tooltip } from \"antd\";\nimport _ from \"lodash\";\nimport React, { useEffect, useState } from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport ReactPlayer from \"react-player\";\nimport ButtonNopBai from \"../ButtonNopBai/ButtonNopBai\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport VideoPlayer from \"../video/VideoPlayer\";\n\nexport const HINT = \"HINT\";\nexport const SOLUTION = \"SOLUTION\";\nexport const SOLUTION_VIDEO = \"SOLUTION_VIDEO\";\nexport const RESULT = \"RESULT\";\n\nlet styleBtn = {\n left: \"1137px\",\n top: \"658px\",\n background:\n \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"11px\",\n border: \"2px solid #F5BC7A\",\n};\n\nexport default function ContentGuide({\n type,\n valueGuide,\n listStatus,\n handleBuyGuide,\n coin,\n label = \"\",\n}) {\n\n const [source, setSource] = useState(\"\");\n\n let guide = _.find(listStatus, { maTieuDe: type });\n\n\n let renderContentGuide = () => {\n\n if (type == RESULT) {\n return HtmlParser(valueGuide);\n }\n if (guide?.trangThai) {\n // trangThai false => mở khoá\n\n switch (type) {\n case \"SOLUTION_VIDEO\":\n let lstVideo = JSON.parse(valueGuide)\n\n if (source == \"\") {\n if (lstVideo[0]?.solutionCyberlearn) {\n servCodingCamp.getFileFtpCyberLearn(lstVideo[0].noiDung).then(res => {\n setSource(res.data)\n })\n return;\n\n }\n\n servCodingCamp.getUrlVideoSolution_FPT(lstVideo[0].noiDung).then(res => {\n setSource(res.data)\n })\n }\n\n\n return <div>\n {/* <ReactPlayer\n\n playbackRate={1}\n playing={true}\n url={source}\n width=\"100%\"\n height=\"100%\"\n // style={{ borderRadius: \"100px\" }}\n controls={true}\n config={{\n file: {\n forceHLS: true,\n },\n }}\n /> */}\n <VideoPlayer source={source} />\n {Array.from({ length: lstVideo.length }, (_, index) => {\n\n return <button onClick={() => {\n\n\n if (lstVideo[index]?.solutionCyberlearn) {\n servCodingCamp.getFileFtpCyberLearn(lstVideo[index].noiDung).then(res => {\n setSource(res.data)\n })\n return;\n\n }\n\n servCodingCamp.getUrlVideoSolution_FPT(lstVideo[index].noiDung).then(res => {\n setSource(res.data)\n })\n\n }} style={styleBtn} className=\"m-2 px-3 py-1\">\n {index + 1}\n </button>\n }\n )\n }\n\n </div >;\n }\n\n return <div> {HtmlParser(valueGuide)}</div>;\n }\n return (\n <div className=\" h-full flex justify-center\">\n <Popconfirm\n title=\"Bạn chắc có muốn tiếp tục ?\"\n\n onConfirm={handleBuyGuide}\n >\n <button\n className=\"card-theme rounded px-5 py-1 capitalize space-x-2 border-2 font-medium\"\n >\n <i class=\"fa fa-lightbulb\"></i>{\" \"}\n <span className=\"capitalize\"> Xem {label}</span>{\" \"}\n <span>(<i className=\"fa fa-coins\"></i> {coin} coin)</span>\n </button>\n </Popconfirm>\n </div>\n );\n };\n\n return <div>{renderContentGuide()}</div>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport \"./style.scss\";\nimport StepListRequireNopBai from \"../StepProjectInstruction/StepProjectInstruction\";\nimport ContentTab from \"../ContentTab/ContentTab\";\nimport ContentGuide, { HINT, SOLUTION, SOLUTION_VIDEO, RESULT } from \"./ContentGuide\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { parentPage } from \"../../routes/utitlity\";\n\nimport toast from \"react-hot-toast\";\nimport classNames from \"classnames\";\nimport { updateThongTinMoRongAction } from \"../../redux/reducer/authReducer\";\nimport { useDispatch } from \"react-redux\";\nexport default function ListRequireNopBai({\n countRequire,\n noiDungNhiemVu,\n required,\n orderNumber,\n trangThaiTongBaiTap,\n monHocId,\n taskId,\n chuyenDeId,\n maLoaiNhiemVu,\n getThongTinBaiTapNop = () => {},\n tongExp,\n tongCoin,\n}) {\n const {\n noiDung,\n hint,\n ketQua,\n solution,\n videoSolution,\n requireId,\n solutionCoin,\n videoSolutionCoin,\n hintCoin,\n } = required || {};\n const [listStatus, setListStatus] = useState([]);\n let dispatch = useDispatch();\n\n useEffect(() => {\n fetchListStatus();\n }, []);\n // check task page or pratice page to call api that suit\n\n const currentUrl = window.location.href;\n const isPracticePage = currentUrl.includes(parentPage.pratice);\n const isTaskPage = currentUrl.includes(parentPage.task);\n const listGuide = [\n // loaiHint: 0: mở hint, 1: mở solution, 2: mở solution video\n\n { label: \"Äáp án\", value: ketQua, type: RESULT },\n { label: \"Gợi ý\", value: hint, type: HINT, typeId: 0, coin: noiDungNhiemVu.hintCoin },\n {\n label: \"HÆ°á»›ng dẫn\",\n value: solution,\n type: SOLUTION,\n typeId: 1,\n coin: noiDungNhiemVu.solutionCoin,\n },\n {\n label: \"Video hÆ°á»›ng dẫn\",\n value: videoSolution,\n type: SOLUTION_VIDEO,\n coin: noiDungNhiemVu.solutionCoin,\n typeId: 2,\n },\n ].filter((item) => {\n // if (item.type == RESULT) return true;\n return item.value != undefined && item.value.trim() != \"\";\n });\n let servCheckHint;\n let servMoHint;\n if (isPracticePage) {\n servCheckHint = servCodingCamp.checkTrangThaiHintPractice;\n servMoHint = servCodingCamp.moHintPratice;\n }\n if (isTaskPage) {\n servCheckHint = servCodingCamp.checkTrangThaiHint;\n servMoHint = servCodingCamp.moHint;\n }\n let fetchListStatus = () => {\n let payload = {\n requireId: requireId,\n loaiHint: 0,\n maLoai: maLoaiNhiemVu,\n monHocId,\n taskId,\n chuyenDeId,\n };\n servCheckHint(payload)\n .then((res) => {\n setListStatus(res.data.content);\n })\n .catch((err) => {\n \n });\n };\n const handleBuyGuide = (payload) => {\n servMoHint(payload)\n .then((res) => {\n\n if (res.data.content) {\n // mua thà nh công\n fetchListStatus();\n dispatch(updateThongTinMoRongAction());\n toast.success(res.data.message);\n } else {\n toast.error(res.data.message);\n }\n })\n .catch((err) => {\n \n });\n // loaiHint: 0: mở hint, 1: mở solution, 2: mở solution video\n };\n\n const renderDetailTask = () => {\n return listGuide.map(({ label, value, type, typeId, coin }, index) => {\n let dataBuyHint = {\n chuyenDeId,\n monHocId,\n taskId,\n requireId: requireId,\n maLoai: maLoaiNhiemVu,\n loaiHint: typeId,\n };\n return {\n label,\n key: index,\n children: (\n <div className=\"c-card-content text-content space-y-1 leading-7\">\n <ContentGuide\n handleBuyGuide={() => {\n handleBuyGuide(dataBuyHint);\n }}\n dataBuyHint={dataBuyHint}\n listStatus={listStatus}\n type={type}\n valueGuide={value}\n coin={coin}\n label={label}\n />\n </div>\n ),\n };\n });\n };\n // listGuide\n\n // check nếu ko có đáp án, hint, video,.. thì ẩn =>widht =0\n return (\n <div className=\"flex lg:flex-col flex-row gap-4 h-full md:h-auto\" >\n <div\n className={classNames(\" h-full tabStepListRequireNopBai\", {\n \"c-col-50\": listGuide.length > 0,\n \"c-col-full\": listGuide.length == 0,\n })}\n >\n <div className=\"c-card-content card-theme h-full\">\n {/* yêu cầu */}\n <StepListRequireNopBai\n getThongTinBaiTapNop={getThongTinBaiTapNop}\n trangThaiTongBaiTap={trangThaiTongBaiTap}\n noiDung={noiDung}\n orderNumber={orderNumber}\n requireId={requireId}\n tongExp={tongExp}\n tongCoin={tongCoin}\n maLoaiNhiemVu={maLoaiNhiemVu}\n required={required}\n countRequire={countRequire}\n />\n </div>\n </div>\n <div id=\"\" style={{ minHeight: 500 }} className=\" w-full h-full \">\n <div className=\"c-card-content tab-hint card-theme h-full\">\n <ContentTab\n paddingHeaderX={15}\n paddingHeaderY={3}\n paddingTabItemX={15}\n paddingTabItemY={5}\n data={renderDetailTask()}\n \n />\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { Tabs } from \"antd\";\nimport \"./ContentTabCol.scss\";\nimport { useTranslation } from \"react-i18next\";\nexport default function ContentTabCol(props) {\n const { t } = useTranslation()\n\n const renderContentByTab = () => {\n\n return props.data.map((d, i) => {\n return (\n <Tabs.TabPane\n style={{ padding: 0 }}\n tab={\n <span\n style={{ padding: `0px 0px` }}\n // style={{ padding: `${paddingTabItemY}px ${paddingTabItemX}px` }}\n className=\" inline-block itemCol text-black rounded-full w-10 h-10 leading-10 text-center\"\n >\n {d.label}\n </span>\n }\n key={d.key}\n >\n {d.children}\n </Tabs.TabPane>\n );\n });\n };\n return (\n <div className=\"c-card-content project_instruction space-y-3d\">\n <p className=\"text-title font-bold text-white mt-5\">\n <i className=\"fas fa-trophy mr-2\"></i>\n {t('chiTietNhiemVu.cacBuocThucHien')}\n </p>\n <Tabs\n // tabPosition=\"left\"\n size=\"small\"\n className=\"w-full \"\n tabBarGutter={30}\n tabBarStyle={{\n background:\n \" radial-gradient(158.28% 164.47% at 100% 135.53%, #F8DB77 8.4%, #ECA937 31.76%, #FFC94C 51.58%) \",\n borderWidth: \"0\",\n borderLeft: \"0\",\n padding: `5px`,\n height: 50,\n border: \"none\",\n borderRadius: 8,\n }}\n defaultActiveKey=\"1\"\n >\n {renderContentByTab()}\n </Tabs>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Modal } from \"antd\";\n// import Modal from \"react-bootstrap/Modal\";\nexport default function ModalClickZoomImg() {\n const [modalVisible, setModalVisible] = useState(false);\n const [clickedImageUrl, setClickedImageUrl] = useState(\"\");\n useEffect(() => {\n const handleClick = (event) => {\n if (event.target.tagName === \"IMG\") {\n // User clicked on an image\n\n // You can do further processing here\n const imageUrl = event.target.src;\n setClickedImageUrl(imageUrl);\n setModalVisible(true);\n }\n };\n\n // Attach the click event listener to a common ancestor element\n const container = document.getElementById(\"containerNoiDungBaiTap\");\n\n if (container) {\n container.addEventListener(\"click\", handleClick);\n }\n\n // Cleanup the event listener when the component unmounts\n return () => {\n if (container) {\n container.removeEventListener(\"click\", handleClick);\n }\n };\n }, []);\n return (\n <>\n <Modal\n visible={modalVisible}\n onCancel={() => {\n setModalVisible(false);\n }}\n footer={null}\n width={'60%'}\n\n >\n \n {/* <Modal.Body className=\"flex justify-center\"> */}\n <img alt=\"Clicked Image\" style={{ width: \"100vw\" }} src={clickedImageUrl} />\n {/* </Modal.Body> */}\n </Modal>\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport InformationProject from \"../../components/ListRequireNopBai/InformationProject\";\nimport { loaiNhiemVu, createPayloadLayThongTinBaiTap } from \"../../utils/taskUtils\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport ListRequireNopBai from \"../../components/ListRequireNopBai/ListRequireNopBai\";\nimport ContentTabCol from \"../../components/ContentTabCol/ContentTabCol\";\nimport ModalClickZoomImg from \"../../components/ModalClickZoomImg/ModalClickZoomImg\";\nimport { typeTrangThaiNop } from \"../../components/StepProjectInstruction/util\";\n\nexport default function DetailScreenCapstone() {\n let { chuyenDeId, taskId, monHocId } = useParams();\n const [detailPage, setDetailPage] = useState({});\n const [trangThaiTongBaiTap, setTrangThaiTongBaiTap] = useState({\n noiDung: [],\n });\n\n const maLoaiNhiemVu = detailPage.maLoaiNhiemVu;\n\n\n const [listTabPane, setListTabPane] = useState([]);\n let listRequire = [];\n if (detailPage.noiDungNhiemVu?.noiDungBaiTap?.noiDung) {\n listRequire = JSON.parse(detailPage.noiDungNhiemVu.noiDungBaiTap.noiDung);\n }\n\n console.log(detailPage.noiDungNhiemVu)\n let getListPanel = (trangThaiTongBaiTap) => {\n\n let lengthArr = listRequire.length()\n let listTabPane = listRequire.map((required, index) => {\n // kiểm tra bà i đã ná»™p hay chÆ°a\n\n // -1 => false => chÆ°a ná»™p\n\n return {\n label: required.requireId,\n key: required.requireId,\n children: (\n <ListRequireNopBai\n countRequire = {lengthArr}\n monHocId={monHocId}\n taskId={taskId}\n chuyenDeId={chuyenDeId}\n trangThaiTongBaiTap={trangThaiTongBaiTap}\n required={required}\n orderNumber={index}\n getThongTinBaiTapNop={getThongTinBaiTapNop}\n maLoaiNhiemVu={maLoaiNhiemVu}\n tongCoin={detailPage.tongCoin}\n tongExp={detailPage.tongExp}\n\n noiDungNhiemVu={detailPage.noiDungNhiemVu}\n />\n ),\n };\n });\n setListTabPane(listTabPane);\n };\n let getThongTinBaiTapNop = () => {\n let payload = createPayloadLayThongTinBaiTap(taskId, chuyenDeId, monHocId);\n servCodingCamp\n .getLayThongTinBaiTapNop(payload)\n .then((res) => {\n setTrangThaiTongBaiTap(res.data.content);\n getListPanel(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n useEffect(() => {\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n console.log(res);\n\n setDetailPage(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n useEffect(() => {\n getThongTinBaiTapNop();\n }, [detailPage.id]);\n\n return (\n <div id=\"containerNoiDungBaiTap\" className=\"flex w-full flex-wrap\">\n <ModalClickZoomImg />\n <div className=\"c-col-full\">\n <InformationProject\n trangThaiTongBaiTap={trangThaiTongBaiTap}\n maNhiemVu={maLoaiNhiemVu}\n detail={detailPage}\n />\n </div>\n {\n trangThaiTongBaiTap.trangThai != typeTrangThaiNop.CHUA_LAM &&\n <div className=\"tabCol w-full\">\n <ContentTabCol data={listTabPane} />\n </div>\n }\n\n </div>\n );\n}\n","export class SingleChoice_Answer {\n constructor(id, cauTraLoi, noiDung) {\n this.id = id;\n this.cauTraLoi = cauTraLoi;\n this.noiDung = noiDung;\n }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { SingleChoice_Answer } from \"../../model/QuizzModel\";\nimport TabSubContentQuiz from \"./TabSubContentQuiz\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Practices_SingleChoice({ question, handle_CheckSingleChoice }) {\n const noiDung = entities.decodeHTML(question.noiDung.inPut);\n const answers = question.noiDung.cauTraLoi.map((item, index) => {\n // console.log(\"😀 - answers - item\", item);\n return new SingleChoice_Answer(item.ma, item.ma, item.noiDung);\n });\n const [activeBtnArr, setActiveBtnArr] = useState(\n question.userAnsers\n // []\n );\n // console.log(\"😀 - Practices_SingleChoice - activeBtnArr\", activeBtnArr);\n useEffect(() => {\n setActiveBtnArr(question.userAnsers);\n }, [question.id]);\n const handle_ChooseAnser = () => {\n // if (activeBtnArr.length === 1) {\n // // console.log(\"yes 1 choice\");\n // handle_CheckSingleChoice(question.id, activeBtnArr[0].luaChon, activeBtnArr);\n // } else {\n handle_CheckSingleChoice(question.id, activeBtnArr);\n // }\n };\n useEffect(() => {\n handle_ChooseAnser();\n }, [activeBtnArr]);\n\n const contentAnserOption = (\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {answers.map((item, index) => {\n let activeCss = \"\";\n let result = activeBtnArr.find((activeItem) => {\n return activeItem.id === item.id;\n });\n if (result) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n return (\n <div\n className={\n \"text-content w-full cursor-pointer flex shadow-lg items-center space-x-5 rounded-lg transition card-theme p-5 text-black py-2 hover:shadow-xl duration-200\"\n }\n onClick={() => {\n let index = activeBtnArr.findIndex((activeBtn) => {\n return activeBtn.id === item.id;\n });\n if (index !== -1) {\n let temp = [...activeBtnArr];\n temp.splice(index, 1);\n setActiveBtnArr(temp);\n } else {\n setActiveBtnArr([item]);\n }\n }}\n >\n <span\n className={\n \"h-9 border-2 flex-shrink-0 border-white w-9 text-center font-bold leading-8 rounded-full \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm \">{item.noiDung}</p>\n </div>\n );\n })}\n </div>\n );\n // console.log(answers);\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-3 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium\">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n style={dracula}\n codeTagPros={{\n fontSize: \"20\",\n }}\n customStyle={{\n lineHeight: \"0.75\",\n fontSize: \"1.2em\",\n }}\n wrapLines={true}\n lineProps={{ style: { wordBreak: \"break-all\", whiteSpace: \"pre-wrap\" } }}\n >\n {noiDung}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content capitalize\t\">{question.noiDung.outPut}</p>\n <TabSubContentQuiz anserOption={contentAnserOption} />\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ReactHtmlParser from \"react-html-parser\";\n// import Highlight from \"react-highlight\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { Button } from \"antd\";\nimport HightLightLanguage from \"./HightLightLanguage\";\nimport TabSubContentQuiz from \"./TabSubContentQuiz\";\n\nconst entities = require(\"entities\");\n\nconst setActiveCss = (arr, indexActive) => {\n let list = Array.from(arr);\n list.map((item, index) => {\n if (index !== indexActive) {\n item.classList.contains(\"practice_choose_ansewer--active\");\n item.classList.remove(\"practice_choose_ansewer--active\");\n } else {\n item.classList.add(\"practice_choose_ansewer--active\");\n }\n });\n};\n\nexport default function Practices_SingleChoiceToFill({\n question,\n handle_CheckFinll_IN_Blank,\n key,\n}) {\n let cauHoi = question.noiDung;\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const [anser1, setstateAnser1] = useState(\"?\");\n const [anser2, setstateAnser2] = useState(\"?\");\n const [answerArr, setAnswerArr] = useState(new Array(cauHoi.dapAn.length));\n\n const [isRenderChooseBtn, SetIsRenderChooseBtn] = useState(false);\n const [activeIndex, SetActiveIndex] = useState(0);\n const totalChossenBtn = document.querySelectorAll(\".practice_choose_ansewer\");\n const totalChossenBtnLength = totalChossenBtn.length;\n\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor\");\n // const editor = document.querySelector(\"#editor pre code\");\n\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<span class='practice_choose_ansewer'>${anser1}</span>`\n );\n SetIsRenderChooseBtn(true);\n }\n const answerDiv = document.querySelector(\".practice_choose_ansewer\");\n if (answerDiv) {\n answerDiv.innerHTML = anser1;\n answerDiv.classList.add(\"practice_choose_ansewer--active\");\n }\n };\n const resetTextMonitor = () => {\n let answerEls = document.querySelectorAll(\".practice_choose_ansewer\");\n for (let index = 0; index < answerEls.length; index++) {\n const element = answerEls[index];\n element.innerText = \"?\";\n }\n };\n useEffect(() => {\n renderDataConvert();\n }, [question.id]);\n\n useEffect(() => {\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }, [question.id]);\n\n useEffect(() => {\n setActiveCss(totalChossenBtn, activeIndex);\n handle_CheckFinll_IN_Blank(question.id, answerArr);\n }, [activeIndex, answerArr]);\n const nextBtnCss = !answerArr[0]\n ? \" text-gray-600 bg-gray-400 cursor-not-allowed\"\n : \" btn-theme text-white \";\n\n const renderNoiDung = () => {\n // console.log(\"redner\");\n return (\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n // showLineNumbers={true}\n >\n {noiDung}\n </SyntaxHighlighter>\n );\n };\n const contentAnserOption = (\n <div className=\"practice_output space-x-5\">\n {cauHoi.cauTraLoi.map((item, index) => {\n return (\n <button\n key={index}\n className=\" px-4 py-2 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700\"\n onClick={() => {\n totalChossenBtn[activeIndex].innerText = item.noiDung;\n totalChossenBtn[activeIndex].classList.add(\"practice_choose_ansewer--active\");\n let tempAnserArr = [...answerArr];\n tempAnserArr[activeIndex] = item.ma;\n setAnswerArr(tempAnserArr);\n if (activeIndex == totalChossenBtnLength - 1) {\n SetActiveIndex(0);\n } else {\n SetActiveIndex(activeIndex + 1);\n }\n }}\n >\n {item.noiDung}\n </button>\n );\n })}\n </div>\n );\n return (\n <div key={key} className=\"w-full h-full flex flex-col flex-grow p-3\">\n <div className=\"w-full mx-auto flex flex-col space-y-5 relative\">\n <p className=\"practice_tieuDe text-content font-medium \">{cauHoi.tieuDe}</p>\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden text-blue-800\">\n {/* {renderNoiDung()} */}\n <HightLightLanguage noiDung={noiDung} />\n </div>\n <p className=\"practice_tieuDe text-content font-medium \">Kết quả:</p>\n <div className=\"px-8 py-4 mx-auto bg-white rounded-lg shadow-md w-full \">\n <div className=\"practice_output space-y-5\">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <Button\n onClick={() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }}\n className={\n \" text-white font-bold px-4 space-x-2 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n >\n <i className=\"fa fa-redo hover:rotate-90 transform duration-200\"></i> Chá»n lại\n </Button>\n </div>\n <div className=\" w-full \">\n <TabSubContentQuiz anserOption={contentAnserOption} />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Button } from \"antd\";\n\nimport ReactHtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nconst setActiveCss = (arr, indexActive) => {\n let list = Array.from(arr);\n list.map((item, index) => {\n if (index !== indexActive) {\n item.classList.contains(\"practice_choose_ansewer--active\");\n item.classList.remove(\"practice_choose_ansewer--active\");\n } else {\n item.classList.add(\"practice_choose_ansewer--active\");\n }\n });\n};\nexport default function Practices_HTML_CSS({ question, handle_CheckFinll_IN_Blank_CSS }) {\n let cauHoi = question.noiDung;\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const noiDungCss = entities.decodeHTML(cauHoi.inputCss);\n\n const [anser1, setstateAnser1] = useState(\"?\");\n const [answerArr, setAnswerArr] = useState(new Array(cauHoi.dapAn.length));\n\n const [isRenderChooseBtn, SetIsRenderChooseBtn] = useState(false);\n const [activeIndex, SetActiveIndex] = useState(0);\n\n const totalChossenBtn = document.querySelectorAll(\".practice_choose_ansewer\");\n const totalChossenBtnLength = totalChossenBtn.length;\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor \");\n if (editor.innerText.includes(\"♥\")) {\n let find = \"♥\";\n let re = new RegExp(find, \"g\");\n\n // let str = str.replace(re, \"\");\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<span class='practice_choose_ansewer'>${anser1}</span>`\n );\n SetIsRenderChooseBtn(true);\n }\n const answerDiv = document.querySelector(\".practice_choose_ansewer\");\n if (answerDiv) {\n answerDiv.innerHTML = anser1;\n answerDiv.classList.add(\"practice_choose_ansewer--active\");\n }\n };\n const resetTextMonitor = () => {\n let answerEls = document.querySelectorAll(\".practice_choose_ansewer\");\n for (let index = 0; index < answerEls.length; index++) {\n const element = answerEls[index];\n element.innerText = \"?\";\n }\n };\n useEffect(() => {\n renderDataConvert();\n }, []);\n useEffect(() => {\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }, [question.id]);\n useEffect(() => {\n setActiveCss(totalChossenBtn, activeIndex);\n handle_CheckFinll_IN_Blank_CSS(question.id, answerArr);\n }, [activeIndex, answerArr]);\n useEffect(() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n }, [question.id]);\n const nextBtnCss = !answerArr[0]\n ? \" text-gray-600 bg-gray-400 cursor-not-allowed\"\n : \" btn-theme text-white \";\n return (\n <div className=\"w-full flex flex-grow flex-col box-border p-3 space-y-5 \">\n <p className=\"practice_tieuDe flex-shrink-0 text-lg text-content font-medium \">\n {cauHoi.tieuDe}\n </p>\n <div className=\"w-full flex-grow items-start h-full flex \">\n <div className=\"w-1/2 justify-between flex-shrink-0 \">\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden space-y-5 text-blue-800\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">\n {/* {data.tieuDe} */}\n HTML\n </p>\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-5\"\n language=\"html\"\n style={dracula}\n >\n {noiDung}\n </SyntaxHighlighter>\n <p className=\"practice_tieuDe text-lg text-content font-medium \">\n {/* {data.tieuDe} */}\n CSS\n </p>\n <SyntaxHighlighter language=\"javascript\" className=\"p-5\" language=\"css\" style={dracula}>\n {noiDungCss}\n </SyntaxHighlighter>\n </div>\n </div>\n <div className=\" h-full w-1/2 space-y-5 pl-5\">\n <div className=\"h-max-content w-full space-y-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Kết quả:</p>\n <div className=\"p-5 bg-white rounded-lg shadow-md w-full h-max-content\">\n <div className=\"practice_output \">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n </div>\n <div className=\"flex w-full\">\n <div className=\"h-1/2 space-y-5 w-full\">\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Câu trả lá»i</p>\n <Button\n onClick={() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }}\n className={\n \" text-white font-bold px-4 space-x-2 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n >\n <i className=\"fa fa-redo hover:rotate-90 transform duration-200\"></i> Chá»n lại\n </Button>\n </div>\n <div\n className=\"\n p-3 bg-white rounded-lg shadow-md w-full flex flex-wrap justify-between\n \"\n >\n {cauHoi.cauTraLoi.map((item) => {\n return (\n <button\n className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \"\n onClick={() => {\n // setstateAnser1(item.noiDung);\n\n totalChossenBtn[activeIndex].innerText = item.noiDung;\n totalChossenBtn[activeIndex].classList.add(\n \"practice_choose_ansewer--active\"\n );\n let tempAnserArr = [...answerArr];\n tempAnserArr[activeIndex] = item.ma;\n setAnswerArr(tempAnserArr);\n if (activeIndex == totalChossenBtnLength - 1) {\n SetActiveIndex(0);\n } else {\n SetActiveIndex(activeIndex + 1);\n }\n }}\n >\n {item.noiDung}\n </button>\n );\n })}\n <button className=\"flex-grow\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport ReactHtmlParser from \"react-html-parser\";\n\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Practices_MultipleChoice({ question, handle_CheckMultipleChoice }) {\n let cauhoi = question.noiDung;\n\n useEffect(() => {\n setActiveBtnArr([]);\n }, [question?.id]);\n const [activeBtnArr, setActiveBtnArr] = useState([]);\n\n const handlerActiveBtn = (idBtn) => {\n let index = activeBtnArr.findIndex((index) => {\n return index === idBtn;\n });\n if (index !== -1) {\n activeBtnArr.splice(index, 1);\n } else {\n activeBtnArr.push(idBtn);\n }\n };\n useEffect(() => {\n handle_CheckMultipleChoice(question.id, activeBtnArr);\n }, [activeBtnArr]);\n\n const nextBtnCss =\n activeBtnArr.length == 0 ? \" text-gray-600 bg-gray-400 cursor-not-allowed\" : \" btn-theme \";\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-5 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"w-full mx-auto flex flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium\">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter language=\"javascript\" className=\"p-10\" style={dracula}>\n {entities.decodeHTML(question.noiDung.inPut)}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content \t\">\n <pre>{ReactHtmlParser(cauhoi.outPut)}</pre>\n </p>\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {cauhoi.cauTraLoi.map((item, index) => {\n let indexBtn = activeBtnArr.findIndex((id) => {\n return id === item.ma;\n });\n let activeCss = \"\";\n if (indexBtn !== -1) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n return (\n <div\n className={\n \"w-full cursor-pointer flex shadow-lg items-center space-x-5 rounded-lg transition duration-200 card-theme text-black text-content p-5 py-2 hover:shadow-xl\"\n }\n onClick={() => {\n let index = activeBtnArr.findIndex((id) => {\n return id === item.ma;\n });\n if (index !== -1) {\n let temp = [...activeBtnArr];\n temp.splice(index, 1);\n setActiveBtnArr(temp);\n } else {\n setActiveBtnArr((activeBtnArr) => [...activeBtnArr, item.ma]);\n }\n }}\n >\n <span\n className={\n \"h-9 rounded-lg border-2 flex-shrink-0 border-white w-9 text-center font-bold leading-8 \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm text-black text-content\">{item.noiDung}</p>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export let convertDataQuizz = (dataRaw) => {\n let listQuestionRaw = dataRaw\n .filter((question) => {\n return question?.maLoaiBaiTap != \"runcode\";\n })\n .map((item, index) => {\n // console.log(\"item off\", item);\n return {\n // id: item.id,\n id: index,\n noiDung: item,\n isCorrect: false,\n userAnsers: [],\n maLoaiBaiTap: item.maLoaiBaiTap,\n };\n });\n listQuestionRaw = listQuestionRaw || [];\n return listQuestionRaw;\n};\n\nexport let canClickNextQuestion = (allQuestions, currentQuestionIndex) => {\n let isDisableNextBtn;\n\n let typeQuestion = allQuestions[currentQuestionIndex]?.noiDung.maLoaiBaiTap;\n if (typeQuestion === \"multiple_choice\" || typeQuestion === \"fill_input\") {\n isDisableNextBtn =\n allQuestions[currentQuestionIndex]?.userAnsers?.length === 0;\n }\n if (typeQuestion === \"single\" || typeQuestion === \"multiple_choice\") {\n isDisableNextBtn =\n allQuestions[currentQuestionIndex]?.userAnsers?.length === 0;\n }\n if (typeQuestion === \"fill_inblank_css\" || typeQuestion === \"fill_inblank\") {\n isDisableNextBtn = !allQuestions[currentQuestionIndex].userAnsers[0];\n }\n return isDisableNextBtn;\n};\n","import React from \"react\";\nimport \"./tabSubContent.css\";\nexport default function TabSubContentQuiz({ anserOption }) {\n const renderDetailTask = () => {\n return [\n {\n label: <span className=\"text-content px-5 font-bold\">ANSWER</span>,\n key: \"1\",\n children: (\n <div className=\"c-card-content card-theme rounded text-content space-y-1 leading-7\">\n {anserOption}\n </div>\n ),\n },\n {\n label: <span className=\"text-content px-5 font-bold\">HINT</span>,\n key: \"3\",\n children: (\n <div className=\"c-card-content card-theme rounded text-content space-y-1 leading-7\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt soluta\n repudiandae quod perferendis quo numquam quasi. Fugiat sed\n consequatur dolorum, nam nulla omnis, in sint facere exercitationem\n eaque, ea praesentium.\n </div>\n ),\n },\n {\n label: <span className=\"text-content px-5 font-bold\">SOLUTION</span>,\n key: \"2\",\n children: (\n <div className=\"c-card-content card-theme rounded text-content space-y-1 leading-7\">\n {\" \"}\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt soluta\n repudiandae quod perferendis quo numquam quasi. Fugiat sed\n consequatur dolorum, nam nulla omnis, in sint facere exercitationem\n eaque, ea praesentium.\n </div>\n ),\n },\n ];\n };\n return (\n <div style={{}} id=\"sub_content_quiz\">\n {/* <ContentTab\n // paddingHeaderX={10}\n paddingHeaderX={0}\n paddingHeaderY={0}\n // paddingHeaderY={widthWindow > 1024 ? 12 : 7}\n paddingTabItemX={10}\n paddingTabItemY={15}\n backgroundHeader=\"transparent\"\n data={[renderDetailTask()[0]]}\n /> */}\n <p className=\"practice_tieuDe text-content font-medium my-3\">\n Câu trả lá»i:\n </p>\n <div className=\"c-card-content card-theme rounded text-content space-y-1 leading-7\">\n {anserOption}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport TabSubContentQuiz from \"./TabSubContentQuiz\";\nimport { SingleChoice_Answer } from \"../../../model/QuizzModel\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Practices_SingleChoice({ question, handle_CheckSingleChoice,visited }) {\n const noiDung = entities.decodeHTML(question.noiDung.inPut);\n const answers = question.noiDung.cauTraLoi.map((item, index) => {\n // console.log(\"😀 - answers - item\", item);\n return new SingleChoice_Answer(item.ma, item.ma, item.noiDung);\n });\n const [activeBtnArr, setActiveBtnArr] = useState(\n question.userAnsers\n // []\n );\n // console.log(\"😀 - Practices_SingleChoice - activeBtnArr\", activeBtnArr);\n useEffect(() => {\n setActiveBtnArr(question.userAnsers);\n }, [question.id]);\n const handle_ChooseAnser = () => {\n // if (activeBtnArr.length === 1) {\n // // console.log(\"yes 1 choice\");\n // handle_CheckSingleChoice(question.id, activeBtnArr[0].luaChon, activeBtnArr);\n // } else {\n handle_CheckSingleChoice(question.id, activeBtnArr);\n // }\n };\n useEffect(() => {\n handle_ChooseAnser();\n }, [activeBtnArr]);\n\n const contentAnserOption = (\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {answers.map((item, index) => {\n let activeCss = \"\";\n let result = activeBtnArr.find((activeItem) => {\n return activeItem.id === item.id;\n });\n if (result) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n return (\n <div\n className={\n `text-content w-full ${!visited?\"cursor-pointer\":\"cursor-not-allowed\"} flex shadow-lg items-center space-x-5 rounded-lg transition card-theme p-5 text-black py-2 hover:shadow-xl duration-200 `\n }\n onClick={() => {\n if(!visited){\n let index = activeBtnArr.findIndex((activeBtn) => {\n return activeBtn.id === item.id;\n });\n if (index !== -1) {\n let temp = [...activeBtnArr];\n temp.splice(index, 1);\n setActiveBtnArr(temp);\n } else {\n setActiveBtnArr([item]);\n }\n }\n }}\n >\n <span\n className={\n \"h-9 border-2 flex-shrink-0 border-white w-9 text-center font-bold leading-8 rounded-full \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm \">{item.noiDung}</p>\n </div>\n );\n })}\n </div>\n );\n // console.log(answers);\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-3 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium\">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n style={dracula}\n codeTagPros={{\n fontSize: \"20\",\n }}\n customStyle={{\n lineHeight: \"0.75\",\n fontSize: \"1.2em\",\n }}\n wrapLines={true}\n lineProps={{\n style: { wordBreak: \"break-all\", whiteSpace: \"pre-wrap\" },\n }}\n >\n {noiDung}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content capitalize\t\">{question.noiDung.outPut}</p>\n <TabSubContentQuiz anserOption={contentAnserOption} />\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nexport default function HightLightLanguage({ noiDung }) {\n return (\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n >\n {noiDung}\n </SyntaxHighlighter>\n );\n}\n","import React, { Fragment, useEffect, useState } from \"react\";\nimport ReactHtmlParser from \"react-html-parser\";\n// import Highlight from \"react-highlight\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { Button } from \"antd\";\nimport HightLightLanguage from \"./HightLightLanguage\";\nimport TabSubContentQuiz from \"./TabSubContentQuiz\";\n\nconst entities = require(\"entities\");\n\nconst setActiveCss = (arr, indexActive) => {\n let list = Array.from(arr);\n list.map((item, index) => {\n if (index !== indexActive) {\n item.classList.contains(\"practice_choose_ansewer--active\");\n item.classList.remove(\"practice_choose_ansewer--active\");\n } else {\n item.classList.add(\"practice_choose_ansewer--active\");\n }\n });\n};\n\nexport default function Practices_SingleChoiceToFill({\n question,\n handle_CheckFinll_IN_Blank,\n key,\n visited\n}) {\n let cauHoi = question.noiDung;\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const [anser1, setstateAnser1] = useState(\"?\");\n const [anser2, setstateAnser2] = useState(\"?\");\n const [answerArr, setAnswerArr] = useState(new Array(cauHoi.dapAn.length));\n\n const [isRenderChooseBtn, SetIsRenderChooseBtn] = useState(false);\n const [activeIndex, SetActiveIndex] = useState(0);\n const totalChossenBtn = document.querySelectorAll(\".practice_choose_ansewer\");\n const totalChossenBtnLength = totalChossenBtn.length;\n\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor\");\n // const editor = document.querySelector(\"#editor pre code\");\n\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<span class='practice_choose_ansewer'>${anser1}</span>`\n );\n SetIsRenderChooseBtn(true);\n }\n const answerDiv = document.querySelector(\".practice_choose_ansewer\");\n if (answerDiv) {\n answerDiv.innerHTML = anser1;\n answerDiv.classList.add(\"practice_choose_ansewer--active\");\n }\n };\n const resetTextMonitor = () => {\n let answerEls = document.querySelectorAll(\".practice_choose_ansewer\");\n for (let index = 0; index < answerEls.length; index++) {\n const element = answerEls[index];\n element.innerText = \"?\";\n }\n };\n useEffect(() => {\n renderDataConvert();\n }, [question.id]);\n\n useEffect(() => {\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }, [question.id]);\n\n useEffect(() => {\n setActiveCss(totalChossenBtn, activeIndex);\n handle_CheckFinll_IN_Blank(question.id, answerArr);\n }, [activeIndex, answerArr]);\n const nextBtnCss = !answerArr[0]\n ? \" text-gray-600 bg-gray-400 cursor-not-allowed\"\n : \" btn-theme text-white \";\n\n const renderNoiDung = () => {\n // console.log(\"redner\");\n return (\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n // showLineNumbers={true}\n >\n {noiDung}\n </SyntaxHighlighter>\n );\n };\n const contentAnserOption = (\n <div className=\"practice_output space-x-5\">\n {cauHoi.cauTraLoi.map((item, index) => {\n return (\n <button\n key={index}\n className={`px-4 py-2 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 ${!visited?\"cursor-pointer\":\"cursor-not-allowed\"}`}\n onClick={() => {\n if(!visited){\n totalChossenBtn[activeIndex].innerText = item.noiDung;\n totalChossenBtn[activeIndex].classList.add(\"practice_choose_ansewer--active\");\n let tempAnserArr = [...answerArr];\n tempAnserArr[activeIndex] = item.ma;\n setAnswerArr(tempAnserArr);\n if (activeIndex == totalChossenBtnLength - 1) {\n SetActiveIndex(0);\n } else {\n SetActiveIndex(activeIndex + 1);\n }\n }\n }}\n >\n {item.noiDung}\n </button>\n );\n })}\n </div>\n );\n return (\n <div key={key} className=\"w-full h-full flex flex-col flex-grow p-3\">\n <div className=\"w-full mx-auto flex flex-col space-y-5 relative\">\n <p className=\"practice_tieuDe text-content font-medium \">{cauHoi.tieuDe}</p>\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden text-blue-800\">\n {/* {renderNoiDung()} */}\n <HightLightLanguage noiDung={noiDung} />\n </div>\n {cauHoi.outPut.length>0 && <Fragment>\n <p className=\"practice_tieuDe text-content font-medium \">Kết quả:</p>\n <div className=\"px-8 py-4 mx-auto rounded-lg shadow-md w-full \" style={{background:'rgb(40, 42, 54)'}}>\n <div className=\"practice_output space-y-5\">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n </Fragment>}\n \n <div className=\"w-full flex items-center justify-between space-x-5\">\n <Button\n onClick={() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }}\n className={\n \" text-white font-bold px-4 space-x-2 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n >\n <i className=\"fa fa-redo hover:rotate-90 transform duration-200\"></i> Chá»n lại\n </Button>\n </div>\n <div className=\" w-full \">\n <TabSubContentQuiz anserOption={contentAnserOption} />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Button } from \"antd\";\n\nimport ReactHtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nconst setActiveCss = (arr, indexActive) => {\n let list = Array.from(arr);\n list.map((item, index) => {\n if (index !== indexActive) {\n item.classList.contains(\"practice_choose_ansewer--active\");\n item.classList.remove(\"practice_choose_ansewer--active\");\n } else {\n item.classList.add(\"practice_choose_ansewer--active\");\n }\n });\n};\nexport default function Practices_HTML_CSS({ question, handle_CheckFinll_IN_Blank_CSS, visited }) {\n let cauHoi = question.noiDung;\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const noiDungCss = entities.decodeHTML(cauHoi.inputCss);\n\n const [anser1, setstateAnser1] = useState(\"?\");\n const [answerArr, setAnswerArr] = useState(new Array(cauHoi.dapAn.length));\n\n const [isRenderChooseBtn, SetIsRenderChooseBtn] = useState(false);\n const [activeIndex, SetActiveIndex] = useState(0);\n\n const totalChossenBtn = document.querySelectorAll(\".practice_choose_ansewer\");\n const totalChossenBtnLength = totalChossenBtn.length;\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor \");\n if (editor.innerText.includes(\"♥\")) {\n let find = \"♥\";\n let re = new RegExp(find, \"g\");\n\n // let str = str.replace(re, \"\");\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<span class='practice_choose_ansewer'>${anser1}</span>`\n );\n SetIsRenderChooseBtn(true);\n }\n const answerDiv = document.querySelector(\".practice_choose_ansewer\");\n if (answerDiv) {\n answerDiv.innerHTML = anser1;\n answerDiv.classList.add(\"practice_choose_ansewer--active\");\n }\n };\n const resetTextMonitor = () => {\n let answerEls = document.querySelectorAll(\".practice_choose_ansewer\");\n for (let index = 0; index < answerEls.length; index++) {\n const element = answerEls[index];\n element.innerText = \"?\";\n }\n };\n useEffect(() => {\n renderDataConvert();\n }, []);\n useEffect(() => {\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }, [question.id]);\n useEffect(() => {\n setActiveCss(totalChossenBtn, activeIndex);\n handle_CheckFinll_IN_Blank_CSS(question.id, answerArr);\n }, [activeIndex, answerArr]);\n useEffect(() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n }, [question.id]);\n const nextBtnCss = !answerArr[0]\n ? \" text-gray-600 bg-gray-400 cursor-not-allowed\"\n : \" btn-theme text-white \";\n return (\n <div className=\"w-full flex flex-grow flex-col box-border p-3 space-y-5 \">\n <p className=\"practice_tieuDe flex-shrink-0 text-lg text-content font-medium \">\n {cauHoi.tieuDe}\n </p>\n <div className=\"w-full flex-grow items-start h-full flex \">\n <div className=\"w-1/2 justify-between flex-shrink-0 \">\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden space-y-5 text-blue-800\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">\n {/* {data.tieuDe} */}\n HTML\n </p>\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-5\"\n language=\"html\"\n style={dracula}\n >\n {noiDung}\n </SyntaxHighlighter>\n <p className=\"practice_tieuDe text-lg text-content font-medium \">\n {/* {data.tieuDe} */}\n CSS\n </p>\n <SyntaxHighlighter language=\"javascript\" className=\"p-5\" language=\"css\" style={dracula}>\n {noiDungCss}\n </SyntaxHighlighter>\n </div>\n </div>\n <div className=\" h-full w-1/2 space-y-5 pl-5\">\n <div className=\"h-max-content w-full space-y-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Kết quả:</p>\n <div className=\"p-5 bg-white rounded-lg shadow-md w-full h-max-content\">\n <div className=\"practice_output \">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n </div>\n <div className=\"flex w-full\">\n <div className=\"h-1/2 space-y-5 w-full\">\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Câu trả lá»i</p>\n <Button\n onClick={() => {\n SetActiveIndex(0);\n setAnswerArr(new Array(cauHoi.dapAn.length));\n resetTextMonitor();\n }}\n className={\n \" text-white font-bold px-4 space-x-2 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n >\n <i className=\"fa fa-redo hover:rotate-90 transform duration-200\"></i> Chá»n lại\n </Button>\n </div>\n <div\n className=\"\n p-3 bg-white rounded-lg shadow-md w-full flex flex-wrap justify-between\n \"\n >\n {cauHoi.cauTraLoi.map((item) => {\n return (\n <button\n className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \"\n onClick={() => {\n // setstateAnser1(item.noiDung);\n\n totalChossenBtn[activeIndex].innerText = item.noiDung;\n totalChossenBtn[activeIndex].classList.add(\n \"practice_choose_ansewer--active\"\n );\n let tempAnserArr = [...answerArr];\n tempAnserArr[activeIndex] = item.ma;\n setAnswerArr(tempAnserArr);\n if (activeIndex == totalChossenBtnLength - 1) {\n SetActiveIndex(0);\n } else {\n SetActiveIndex(activeIndex + 1);\n }\n }}\n >\n {item.noiDung}\n </button>\n );\n })}\n <button className=\"flex-grow\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { Fragment, useEffect, useRef, useState } from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\n\nexport default function Practices_FillCodeToInput({\n handleSetEnableBtn,\n question,\n handle_CheckFillInput,\n}) {\n const containerRef = useRef();\n\n useEffect(() => {\n const editor = document.querySelector(\"#editor pre code\");\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<input class='practice_fill_input input_box' /> `\n );\n }\n if (containerRef.current) {\n window.addEventListener(\"keyup\", () => {\n let inputEl = document.querySelectorAll(\".input_box\");\n // if (inputEl) {\n // handle_CheckFillInput(question.id, [inputEl.value.trim()]);\n // }\n if (inputEl && inputEl.length > 0) {\n let arrValue = Array.from(inputEl).map(el => el.value.trim());\n handle_CheckFillInput(question.id, arrValue);\n }\n });\n }\n }, [question.userAnser]);\n\n return (\n <div className=\"w-full h-max-content p-3 flex-grow flex flex-col \">\n <div className=\"w-full mx-auto flex flex-col space-y-5 relative\">\n <p className=\"practice_tieuDe text-content text____title font-medium \">\n {question.noiDung.tieuDe}\n </p>\n <div\n ref={containerRef}\n id=\"editor\"\n className=\"w-full rounded-xl overflow-hidden \"\n >\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n showLineNumbers={true}\n >\n {HtmlParser(question.noiDung.inPut)}\n </SyntaxHighlighter>\n </div>\n {question.noiDung.outPut.length > 0 && (\n <Fragment>\n <p className=\"practice_tieuDe text-content text____title font-medium \">\n Output:\n </p>\n <div\n className=\"px-8 py-4 mx-auto rounded-lg shadow-md w-full \"\n style={{ background: \"rgb(40, 42, 54)\" }}\n >\n <div className=\"practice_output space-y-5\">\n {ReactHtmlParser(question.noiDung.outPut)}\n </div>\n </div>\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport ReactHtmlParser from \"react-html-parser\";\n\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Practices_MultipleChoice({ question, handle_CheckMultipleChoice, visited }) {\n let cauhoi = question.noiDung;\n\n useEffect(() => {\n setActiveBtnArr([]);\n }, [question?.id]);\n const [activeBtnArr, setActiveBtnArr] = useState([]);\n\n const handlerActiveBtn = (idBtn) => {\n let index = activeBtnArr.findIndex((index) => {\n return index === idBtn;\n });\n if (index !== -1) {\n activeBtnArr.splice(index, 1);\n } else {\n activeBtnArr.push(idBtn);\n }\n };\n useEffect(() => {\n handle_CheckMultipleChoice(question.id, activeBtnArr);\n }, [activeBtnArr]);\n\n const nextBtnCss =\n activeBtnArr.length == 0 ? \" text-gray-600 bg-gray-400 cursor-not-allowed\" : \" btn-theme \";\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-5 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"w-full mx-auto flex flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium\">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter language=\"javascript\" className=\"p-10\" style={dracula}>\n {entities.decodeHTML(question.noiDung.inPut)}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content \t\">\n <pre>{ReactHtmlParser(cauhoi.outPut)}</pre>\n </p>\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {cauhoi.cauTraLoi.map((item, index) => {\n let indexBtn = activeBtnArr.findIndex((id) => {\n return id === item.ma;\n });\n let activeCss = \"\";\n if (indexBtn !== -1) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n return (\n <div\n className={\n `w-full ${!visited?\"cursor-pointer\":\"cursor-not-allowed\"} flex shadow-lg items-center space-x-5 rounded-lg transition duration-200 card-theme text-black text-content p-5 py-2 hover:shadow-xl`\n }\n onClick={() => {\n if(!visited){\n let index = activeBtnArr.findIndex((id) => {\n return id === item.ma;\n });\n if (index !== -1) {\n let temp = [...activeBtnArr];\n temp.splice(index, 1);\n setActiveBtnArr(temp);\n } else {\n setActiveBtnArr((activeBtnArr) => [...activeBtnArr, item.ma]);\n }\n }\n }}\n >\n <span\n className={\n \"h-9 rounded-lg border-2 flex-shrink-0 border-white w-9 text-center font-bold leading-8 \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm text-black text-content\">{item.noiDung}</p>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport Practices_SingleChoice from \"./Pratices/Practices_SingleChoice\";\nimport Practices_SingleChoiceToFill from \"./Pratices/Praticees_ChooseAnserToFill\";\nimport Practices_HTML_CSS from \"./Pratices/Practices_HTML_CSS\";\nimport Practices_FillCodeToInput from \"./Pratices/Practices_FillCodeToInput\";\nimport Practices_MultipleChoice from \"./Pratices/Practices_MultipleChoice\";\nimport _ from \"lodash\";\n import CryptoJS from 'crypto-js';\nexport default function List4TypeQuiz({ currentQuestionIndex, allQuestions, setListQuestion, visited }) {\n\n //decode đáp án trắc nghiệm theo chuẩn Backend\nconst key = 'b2314589FASe41121fbbce2eQF412916';\nconst decrypt = (cipherText) => {\n const keyBytes = CryptoJS.enc.Utf8.parse(key);\n const iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000'); // IV vá»›i toà n số 0\n\n const encrypted = CryptoJS.enc.Base64.parse(cipherText);\n\n const decrypted = CryptoJS.AES.decrypt(\n { ciphertext: encrypted },\n keyBytes,\n {\n iv: iv,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7\n }\n );\n\n return decrypted.toString(CryptoJS.enc.Utf8);\n};\n let handle_CheckSingleChoice = (id, userAnsers) => {\n\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n\n // if (newCurrentQuestion.noiDung.dapAn[0] == userAnsers[0]?.cauTraLoi) {\n if (decrypt(newCurrentQuestion.noiDung.dapAn[0]) == userAnsers[0]?.cauTraLoi) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n\n newCurrentQuestion.userAnsers = userAnsers;\n let newAllQuestion = [...allQuestions];\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckMultipleChoice = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n // let arrDapAn = [...newCurrentQuestion.noiDung.dapAn];\n let deCodeDA = newCurrentQuestion.noiDung.dapAn.map((item)=>decrypt(item))\n let arrDapAn = [...deCodeDA];\n if (arrDapAn.sort().toString() == userAnsers.sort().toString()) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n let newAllQuestion = [...allQuestions];\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFinll_IN_Blank = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n let deCodeDA = newCurrentQuestion.noiDung.dapAn.map((item)=>decrypt(item))\n if (\n newCurrentQuestion.noiDung.dapAn.length === userAnsers.length &&\n // newCurrentQuestion.noiDung.dapAn.every(function (value, index) {\n deCodeDA.every(function (value, index) {\n return value == userAnsers[index];\n })\n ) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n let newAllQuestion = [...allQuestions];\n\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFillInput = (id, userAnsers = []) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n let deCodeDA = newCurrentQuestion.noiDung.dapAn.map((item)=>decrypt(item))\n if (\n newCurrentQuestion.noiDung.dapAn.length === userAnsers.length &&\n // newCurrentQuestion.noiDung.dapAn.every(function (value, index) {\n deCodeDA.every(function (value, index) {\n return value == userAnsers[index];\n })\n ) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n let newAllQuestion = [...allQuestions];\n\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFinll_IN_Blank_CSS = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n let deCodeDA = newCurrentQuestion.noiDung.dapAn.map((item)=>decrypt(item))\n if (\n newCurrentQuestion.noiDung.dapAn.length === userAnsers.length &&\n // newCurrentQuestion.noiDung.dapAn.every(function (value, index) {\n deCodeDA.every(function (value, index) {\n return value == userAnsers[index];\n })\n ) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n newCurrentQuestion.userAnsers = userAnsers;\n let newAllQuestion = [...allQuestions];\n newAllQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let arrRenderQuestion = allQuestions.map((question, index) => {\n let keyIndex = index;\n switch (question?.noiDung.maLoaiBaiTap) {\n case \"single\":\n return (\n <Practices_SingleChoice\n key={keyIndex}\n question={question}\n handle_CheckSingleChoice={handle_CheckSingleChoice}\n visited={visited}\n />\n );\n case \"multiple_choice\":\n return (\n <Practices_MultipleChoice\n key={keyIndex}\n handle_CheckMultipleChoice={handle_CheckMultipleChoice}\n question={question}\n visited={visited}\n />\n );\n case \"fill_inblank_css\":\n return (\n <Practices_HTML_CSS\n key={keyIndex}\n handle_CheckFinll_IN_Blank_CSS={handle_CheckFinll_IN_Blank_CSS}\n question={question}\n visited={visited}\n />\n );\n case \"fill_inblank\":\n return (\n <Practices_SingleChoiceToFill\n key={keyIndex}\n handle_CheckFinll_IN_Blank={handle_CheckFinll_IN_Blank}\n question={question}\n visited={visited}\n />\n );\n case \"fill_input\":\n return (\n <Practices_FillCodeToInput\n key={keyIndex}\n question={allQuestions[currentQuestionIndex]}\n handle_CheckFillInput={handle_CheckFillInput}\n visited={visited}\n />\n );\n\n default:\n break;\n }\n });\n\n return arrRenderQuestion.length > 0 ? arrRenderQuestion[currentQuestionIndex] : <></>;\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport Practices_SingleChoice from \"../Pratices/Practices_SingleChoice\";\nimport Practices_SingleChoiceToFill from \"../Pratices/Praticees_ChooseAnserToFill\";\nimport Practices_HTML_CSS from \"../Pratices/Practices_HTML_CSS\";\nimport Practices_FillCodeToInput from \"../Pratices/Practices_FillCodeToInput\";\nimport Practices_MultipleChoice from \"../Pratices/Practices_MultipleChoice\";\nimport _ from \"lodash\";\nimport Navigate_Footer_Pratices from \"./Navigate_Footer_Pratices\";\nimport \"./Praticess.css\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { convertDataQuizz, canClickNextQuestion } from \"../List4TypeQuiz/utils\";\nimport List4TypeQuiz from \"../List4TypeQuiz/List4TypeQuiz\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { useSelector } from \"react-redux\";\nimport { useLstLoTrinhDangHoc, useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nexport default function TracNghiem_Start({ onSuccess,setNextTask, visited }) {\n let { chuyenDeId, taskId, monHocId } = useParams();\n let [currentQuestionIndex, setCurrentQuestsionIndex] = useState(0);\n let [scoreQuiz, setScoreQuiz] = useState(null);\n const [allQuestions, setListQuestion] = useState([]);\n let isDemoUser = useMemo(() => checkDemoUser(), [])\n let userInfo = localStorageServ.userInfo.get();\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const isLearning =checkLearning(chuyenDeId,dataDangHoc)\n useEffect(() => {\n if(dataDangHoc){\n isDemoUser || !userInfo.kichHoat || !isLearning?\n servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setListQuestion(convertDataQuizz(res.data.content.noiDungNhiemVu));\n })\n .catch((err) => {\n \n })\n :\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setListQuestion(convertDataQuizz(res.data.content.noiDungNhiemVu));\n })\n .catch((err) => {\n \n });\n }\n }, [chuyenDeId, taskId, monHocId, dataDangHoc]);\n let handleClickNextQuestion = () => {\n setCurrentQuestsionIndex(currentQuestionIndex + 1);\n };\n let isDisableNextBtn = canClickNextQuestion(allQuestions, currentQuestionIndex);\n return (\n <div className=\"w-full c-card-content \">\n <div className=\"w-full \">\n <List4TypeQuiz\n visited={visited}\n setListQuestion={setListQuestion}\n currentQuestionIndex={currentQuestionIndex}\n allQuestions={allQuestions}\n />\n </div>\n <Navigate_Footer_Pratices\n current={currentQuestionIndex + 1}\n total={allQuestions.length}\n handleClickNextQuestion={handleClickNextQuestion}\n isDisableBtn={isDisableNextBtn}\n listQuestion={allQuestions}\n setScoreQuiz={setScoreQuiz}\n onSuccess={onSuccess}\n setNextTask={setNextTask}\n />\n </div>\n );\n}\n","import { Button, message, Progress } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { createPayloadNopBai } from \"../../utils/taskUtils\";\nimport { typeTask } from \"../../routes/utitlity\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport toast from \"react-hot-toast\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { typeTrangThaiNop } from \"../StepProjectInstruction/util\";\nimport { useDispatch } from \"react-redux\";\nimport { updateThongTinMoRongAction } from \"../../redux/reducer/authReducer\";\nimport { useTranslation } from \"react-i18next\";\nexport default function Navigate_Footer_PraticesResult({\n current,\n total,\n handleClickNextQuestion,\n handleClickPreQuestion,\n isDisableBtn,\n listQuestion,\n onSuccess,\n setNextTask,\n data\n}) {\n const { t } = useTranslation()\n\n // const nguoiDung = LocalStorageUtil.getLoginLocalStorage();\n\n const handle_PostKetQua = async () => {\n \n // gá»i api hoà n thà nh\n };\n\n const handleClickNext = () => {handleClickNextQuestion()\n };\n const percent = Math.floor((current / total) * 100);\n const nextBtnCss = isDisableBtn\n ? \" bg-blue-theme text-white\"\n : \" bg-blue-theme text-white \";\n return (\n <div\n style={{\n background:\n \"radial-gradient(91.01% 91.01% at 16.52% 42.45%, #ffc94c 0%, #eebe47 23%, #edb720 52%\",\n }}\n className=\" bg-white flex items-center h-16 w-full justify-center space-x-10 px-16 border-none rounded-2xl\"\n >\n <div className=\"flex items-cente space-x-5 justify-center max-w-screen-md w-full\">\n <Progress\n step={total}\n percent={percent}\n // size=\"small\"\n className=\"w-full\"\n showInfo={false}\n strokeWidth={15}\n // rgb(139, 29, 234) 1.36%, rgb(74, 0, 224) 100%)\n strokeColor={{\n // \"0%\": \"#4A00E0\",\n \"0%\": \"#301D09\",\n \"100%\": \"#FF0C0C\",\n // \"100%\": \"#8E2DE2\",\n }}\n trailColor={\"rgba(68, 66, 178, 0.1)\"}\n />\n <span className=\"font-bold flex-shrink-0 text-content text-black\">\n {current}/{total} câu\n </span>\n </div>\n <Button\n onClick={() => {\n handleClickPreQuestion();\n }}\n className={\n \" text-white duration-150 font-bold px-8 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n // loading={loading}\n >\n {t('chiTietNhiemVu.cauTruoc')}\n </Button>\n <Button\n onClick={() => {\n return current === total ? handle_PostKetQua() : handleClickNext();\n }}\n className={\n \" text-white duration-150 font-bold px-8 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n // loading={loading}\n >\n {t('chiTietNhiemVu.cauTiepTheo')}\n </Button>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { useLstLoTrinhDangHoc } from \"../../hook/useLstLoTrinhUser\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport List4TypeQuiz from \"../List4TypeQuiz/List4TypeQuiz\";\nimport { canClickNextQuestion, convertDataQuizz } from \"../List4TypeQuiz/utils\";\nimport Navigate_Footer_PraticesResult from \"./Navigate_Footer_PraticesResult\";\nimport \"./Praticess.css\";\n\nexport default function ResultTracNghiem_Start({ data, onSuccess,setNextTask, visited}) {\n let { chuyenDeId, taskId, monHocId } = useParams();\n let [currentQuestionIndex, setCurrentQuestsionIndex] = useState(0);\n let [scoreQuiz, setScoreQuiz] = useState(null);\n const [allQuestions, setListQuestion] = useState([]);\n let isDemoUser = useMemo(() => checkDemoUser(), [])\n let userInfo = localStorageServ.userInfo.get();\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const isLearning =checkLearning(chuyenDeId,dataDangHoc)\n useEffect(() => {\n if(dataDangHoc){\n isDemoUser || !userInfo.kichHoat || !isLearning?\n servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setListQuestion(convertDataQuizz(res.data.content.noiDungNhiemVu));\n })\n .catch((err) => {\n \n })\n :\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setListQuestion(convertDataQuizz(res.data.content.noiDungNhiemVu));\n })\n .catch((err) => {\n \n });\n }\n }, [chuyenDeId, taskId, monHocId, dataDangHoc]);\n let handleClickNextQuestion = () => {\n setCurrentQuestsionIndex(currentQuestionIndex + 1);\n };\n let handleClickPreQuestion = () => {\n if(currentQuestionIndex==0){\n setCurrentQuestsionIndex(0);\n }\n else{\n setCurrentQuestsionIndex(currentQuestionIndex - 1);\n }\n };\n let isDisableNextBtn = canClickNextQuestion(allQuestions, currentQuestionIndex);\n const datares = JSON.parse(data.baiLam).noiDungBaiNop[currentQuestionIndex]\n return (\n <div className=\"w-full c-card-content \">\n <div className=\"w-full \">\n <List4TypeQuiz\n setListQuestion={setListQuestion}\n currentQuestionIndex={currentQuestionIndex}\n allQuestions={allQuestions}\n visited={visited}\n />\n </div>\n {<div className=\"flex w-full mb-4 p-3\">\n <div className=\"h-1/2 space-y-5 w-full\">\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <p className=\"practice_tieuDe text-content font-medium my-3\">Câu trả lá»i bạn chá»n: </p>\n </div>\n <div\n className=\"c-card-content card-theme rounded text-content space-y-1 leading-7\"\n >\n {datares.maLoaiBaiTap==\"single\" && datares.userAnsers.map((item) => {\n return (\n <button\n className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \"\n >\n {item.noiDung}\n </button>\n );\n })}\n {(datares.maLoaiBaiTap==\"multiple_choice\" || datares.maLoaiBaiTap==\"fill_inblank\"\n) && datares.userAnsers.map((item) => {\n let nd = datares.noiDung.cauTraLoi.find(ans =>ans.ma==item)\n if(nd){\n return (\n <button\n className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \"\n >\n {nd.noiDung}\n </button>\n );\n }\n })}\n {datares.maLoaiBaiTap==\"fill_input\" &&datares.userAnsers.map((item) => {\n \n return (\n <button\n className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \"\n >\n {item}\n </button>\n );\n \n }) }\n <span>{datares.isCorrect?<i className=\"text-2xl text-green-600 fa-solid fa-check\"></i>:<i className=\"text-2xl text-red-600 fa-solid fa-xmark\"></i>}</span>\n <button className=\"flex-grow\"></button>\n </div>\n </div>\n </div>}\n <Navigate_Footer_PraticesResult\n current={currentQuestionIndex + 1}\n total={allQuestions.length}\n handleClickNextQuestion={handleClickNextQuestion}\n handleClickPreQuestion={handleClickPreQuestion}\n isDisableBtn={isDisableNextBtn}\n listQuestion={allQuestions}\n setScoreQuiz={setScoreQuiz}\n onSuccess={onSuccess}\n setNextTask={setNextTask}\n data={data}\n />\n </div>\n );\n}\n","import React from \"react\";\nimport Lottie from \"lottie-react\";\nimport bgAnimate from \"./success.json\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { navigatePageByTaskNext, parentPage } from \"../../routes/utitlity\";\nimport { useLstLoTrinhDangHoc } from \"../../hook/useLstLoTrinhUser\";\nimport { checkLearning } from \"../../utils/HocDemoUtils\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport TracNghiem_Start from \"../../components/ContentTracNghiemExtra/TracNghiem_Start\";\nimport ResultTracNghiem_Start from \"../../components/ContentTracNghiemExtra/ResultTracNghiem_Start\";\n\nexport default function DaChamContent({ data,nextTask,onSuccess,setNextTask,visited }) {\n \n let user = localStorageServ.userInfo.get();\n let { chuyenDeId, taskId, monHocId } = useParams();\n const navigate = useNavigate();\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(user?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n \n return (\n <div className=\"flex flex-col items-center \">\n <Lottie loop={false} animationData={bgAnimate} style={{ width: \"20%\", height: \"30%\" }} />\n <p className=\"text-title text-xl transform -translate-y-10\"> Äiểm của bạn: {data.diem}</p>\n {nextTask && <button\n onClick={() => {\n if(nextTask && isLearning){\n navigatePageByTaskNext(nextTask, navigate, parentPage.task, monHocId, chuyenDeId);\n }\n\n }}\n className={`btn_theme_red text-white focus:outline-none p-0 px-2 h-8 leading-8 ${nextTask?\"\":\"opacity-50\"}`}\n >\n Next\n </button>}\n\n <ResultTracNghiem_Start data={data} onSuccess={onSuccess} setNextTask={setNextTask} visited={visited}/>\n </div>\n );\n}\n","export default __webpack_public_path__ + \"static/media/sad.cad8e374.png\";","import React, { useEffect, useState } from \"react\";\nimport servVatPham from \"../../services/vatPham.service\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { ContentVatPham } from \"../../components/VatPham/ContentVatPham\";\nimport bgCoin from \"../../components/VatPham/dollar.png\";\nimport HtmlParser from \"react-html-parser\";\nimport { useParams } from \"react-router-dom\";\nimport toast from \"react-hot-toast\";\nimport { message } from \"antd\";\n\nexport default function ButtonGiamThoiGian({ fetchThongTinBaiNop, nopBaiId }) {\n const [data, setData] = useState({});\n useEffect(() => {\n fetchData();\n }, []);\n let fetchData = () => {\n servVatPham\n .showItemGiamThoiGianQuiz()\n .then((res) => {\n setData(res.data.content);\n console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n let handleSuDungVp = () => {\n servVatPham\n .giamThoiGianChoQuiz(nopBaiId)\n .then((res) => {\n fetchThongTinBaiNop();\n })\n .catch((err) => {\n console.log(err);\n toast(err.response.data.messsage);\n });\n };\n if (data.daSoHuu) {\n let { hinhAnh, tenVatPham, moTa, hanSuDung, chiPhi, id } = data.canMua;\n return (\n <div className=\"card-theme p-3\">\n <div className=\"flex text-title space-x-24 h-full\">\n <div className=\"w-96 space-y-5 text-center rounded \">\n <img src={hinhAnh} className=\"w-full h-4/5 object-contain rounded\" alt=\"\" />\n </div>\n <div style={{ width: 400 }} className=\" space-y-5 px-5\">\n <h3 className=\"text-center text-title\">Thông tin váºt phẩm</h3>\n <p className=\"\">{HtmlParser(moTa)}</p>\n <p className=\"flex items-center\"></p>\n <button onClick={handleSuDungVp} className=\"btn_theme_red\">\n Sá» dụng váºt phẩm\n </button>\n\n {/* show message sau khi mua váºt phẩm */}\n </div>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"card-theme p-3\">\n <div className=\" \">\n <ContentVatPham onFetch={fetchData} item={data.canMua} />\n </div>\n </div>\n );\n }\n}\n","import React, { useEffect } from \"react\";\nimport Countdown from \"react-countdown\";\nimport sadIcon from \"./sad.png\";\nimport servVatPham from \"../../services/vatPham.service\";\nimport ButtonGiamThoiGian from \"./ButtonGiamThoiGian\";\nimport ResultTracNghiem_Start from \"../../components/ContentTracNghiemExtra/ResultTracNghiem_Start\";\nexport default function LamLaiContent({ data, fetchThongTinBaiNop,onSuccess,setNextTask, visited }) {\n const rendererTimer = ({ hours, minutes, seconds }) => {\n if (hours == 0 && minutes == 0 && seconds == 0) {\n }\n return (\n <span className=\"font-medium text-lg\">\n {hours} giá» {minutes} phút {seconds} giây\n </span>\n );\n };\n let hms = data.thoiGianCho; // your input string\n let a = hms.split(\":\"); // split it at the colons\n // minutes are worth 60 seconds. Hours are worth 60 minutes.\n let seconds = +a[0] * 60 * 60 + +a[1] * 60 + +a[2];\n return (\n <div\n sty\n className=\"w-full flex flex-col items-center justify-center text-white space-y-10 xl:space-y-3 xl:mt-5 mt-10\"\n >\n <img className=\"w-28 h-28 object-cover -mb-1\" src={sadIcon} />\n <p className=\"text-xl \">Bạn đã không vượt qua bà i kiểm tra, vui lòng thá» lại sau:</p>\n <Countdown\n // onComplete={console.log(\"compllete\")}\n // date={Date.now() + 500000000}\n date={Date.now() + seconds * 1000}\n // date={Date.now() + 10 * 1000}\n renderer={rendererTimer}\n />\n <ButtonGiamThoiGian nopBaiId={data.id} fetchThongTinBaiNop={fetchThongTinBaiNop} />\n <ResultTracNghiem_Start data={data.baiNop} onSuccess={onSuccess} setNextTask={setNextTask} visited={visited}/>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n// import BaiTapTracNghiem from \"../../components/ContentTracNghiemExtra/BaiTapTracNghiem\";\nimport TracNghiem_Start from \"../../components/ContentTracNghiemExtra/TracNghiem_Start\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { typeTrangThaiNop } from \"../../components/StepProjectInstruction/util\";\nimport DaChamContent from \"./DaChamContent\";\nimport LamLaiContent from \"./LamLaiContent\";\n\nexport default function DetailScreenQuizz() {\n let { chuyenDeId, taskId, monHocId } = useParams();\n let [nextTask, setNextTask] = useState();\n let [visited, setVisited] = useState(false);\n let [thongTinBaiTap, setThongTinBaiTap] = useState({});\n function fetchThongTinBaiNop() {\n let data = {\n nguoidungId: localStorageServ.userInfo.get().id,\n chuyenDeId,\n taskId,\n monHocId,\n };\n servCodingCamp\n .getLayThongTinBaiTap(data)\n .then((res) => {\n setVisited((res.data.content.trangThai == typeTrangThaiNop.LAM_LAI ||\n res.data.content.trangThai == typeTrangThaiNop.DA_CHAM))\n setThongTinBaiTap(res.data.content);\n })\n .catch((err) => {\n // console.log(err);\n });\n }\n useEffect(() => {\n fetchThongTinBaiNop();\n }, [taskId]);\n if (thongTinBaiTap.trangThai == typeTrangThaiNop.DA_CHAM) {\n return <DaChamContent data={thongTinBaiTap} nextTask={nextTask} onSuccess={fetchThongTinBaiNop} setNextTask={setNextTask} visited={visited}/>;\n }\n if (thongTinBaiTap.trangThai == typeTrangThaiNop.LAM_LAI) {\n return <LamLaiContent fetchThongTinBaiNop={fetchThongTinBaiNop} data={thongTinBaiTap} onSuccess={fetchThongTinBaiNop} setNextTask={setNextTask} visited={visited}/>;\n }\n\n return <TracNghiem_Start onSuccess={fetchThongTinBaiNop} setNextTask={setNextTask} visited={visited} />;\n}\n","import React from \"react\";\nimport Lottie from \"lottie-react\";\nimport coin_lottie from \"../../assets/lottie_json/18089-gold-coin.json\";\nimport { Tooltip } from \"antd\";\nimport { checkDemoUser } from \"../../utils/HocDemoUtils\";\nimport moment from \"moment\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { NavLink } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nfunction ToolTipCoin({ loop = true }) {\n const { t } = useTranslation()\n\n let { userInfo } = useSelector(selectThongTinMoRong);\n // const { userInfo } = useSelector(state => state.authUser)\n // return (\n // <Lottie\n // loop={loop}\n // animationData={coin_lottie}\n // style={{ cursor: \"pointer\" }}\n // className=\"h-14 w-14\"\n // />\n // );\n return (\n <Tooltip\n mouseEnterDelay={0.1}\n mouseLeaveDelay={0.1}\n trigger={[\"click\"]}\n placement=\"top\"\n animation=\"zoom\"\n overlayClassName=\" w-max \"\n overlayStyle={{ maxWidth: \"900px\" }}\n color=\"white\"\n title={\n <div className=\"flex items-center w-max p-3 justify-center\">\n <div className=\" text-base w-64 space-y-3 text-gray-800\">\n <p>\n\n {t('header.congDung')}\n\n {/* hoặc tăng Ä‘iểm tÃch cá»±c và điểm kinh nghiệm. Bạn sẽ nháºn được coin\n sau khi há»c bà i, hoà n thà nh bà i táºp , hoà n hà nh trắc nghiệm,... và \n ngà y tÃch lÅ©y. */}\n </p>\n <NavLink\n to={\"/shop-page\"}\n className=\"btn_theme_red hover:text-white px-2 py-1 btn_theme_red\"\n >\n {t('header.diDenCuaHang')}\n\n </NavLink>\n </div>\n </div>\n }\n >\n <Lottie\n loop={loop}\n animationData={coin_lottie}\n style={{ cursor: \"pointer\" }}\n className=\"h-16 w-16\"\n />\n </Tooltip>\n );\n}\nexport default ToolTipCoin = React.memo(ToolTipCoin);\n","import React, { useEffect, useRef, useState } from \"react\";\nimport Lottie from \"lottie-react\";\nimport coin_jump from \"../../assets/lottie_json/coin_jump.json\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport usePrevious from \"../../hook/usePrevious\";\nimport ToolTipCoin from \"../ToolTipCoin/ToolTipCoin\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\n\nexport default function ItemCoin({ loop = true }) {\n let { userInfo } = useSelector(selectThongTinMoRong);\n let { coin } = userInfo;\n // const { coin } = useSelector((state) => state.authUser.userInfo);\n const [isShowEffect, setIsShowEffect] = useState(false);\n const prevAmountCoin = usePrevious(coin);\n\n const [fistRender, setFistRender] = useState(true);\n useEffect(() => {\n // audioEl.play();\n setFistRender(false);\n if (!fistRender) {\n if (prevAmountCoin !== coin) {\n setIsShowEffect(true);\n setTimeout(() => {\n setIsShowEffect(false);\n }, 300);\n }\n }\n }, [coin]);\n\n return (\n <div className=\"flex items-center relative h-max-content \">\n {isShowEffect ? (\n <div className=\"absolute -left-8 -top-4 \">\n <Lottie loop={false} animationData={coin_jump} style={{ width: 120, height: 120 }} />\n </div>\n ) : (\n \"\"\n )}\n <ToolTipCoin loop={loop} />\n\n <span className=\"text-sub-title text-color-blue-white transform -translate-x-2 font-medium \">\n {coin}\n </span>\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\n\nexport default function usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\n\nfunction ToolTipLevel({ capDo }) {\n return (\n <Tooltip\n mouseEnterDelay={0.1}\n mouseLeaveDelay={0.1}\n trigger={[\"click\", \"hover\"]}\n placement=\"top\"\n animation=\"zoom\"\n overlayClassName=\" w-max \"\n overlayStyle={{ maxWidth: \"900px\" }}\n color=\"white\"\n title={\n <div className=\"flex items-center w-max p-3 justify-center\">\n <div className=\" text-content w-64 space-y-3 text-gray-800\">\n <p>\n Äây là level hiện tại của bạn, há»c cà ng nhiá»u, level cà ng cao, nếu\n bạn há»c giá»i sẽ được ghi danh và o TOP USER\n </p>\n </div>\n </div>\n }\n >\n <p className=\"text-content cursor-pointer font-bold\">Level: {capDo}</p>\n </Tooltip>\n );\n}\nexport default ToolTipLevel = React.memo(ToolTipLevel);\n","import React from \"react\";\nimport ItemCoin from \"../ItemCoin/ItemCoin\";\nimport ToolTipLevel from \"../ToolTipLevel/ToolTipLevel\";\nimport ModelContentIcon from \"../ModalContentIcon/ModalContentIcon\";\nimport { iconDashBoard } from \"../ModalContentIcon/utilities\";\n\nexport default function BarTichCucKinhNghiem() {\n return (\n <div className=\"w-80 space-y-2\">\n <div className=\"flex space-x-5 w-full \">\n <ModelContentIcon loai={iconDashBoard.NangDong} />\n <ModelContentIcon loai={iconDashBoard.Xp} />\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { Dropdown, Menu } from \"antd\";\nimport { NavLink } from \"react-router-dom\";\nimport \"./style.scss\";\nimport classNames from \"classnames\";\nimport { checkActiveNavlink, parentPage } from \"../../routes/utitlity\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport { useArrCourseCybersoft } from \"../../hook/useDataCybersoft\";\nexport default function DropdownLoTrinh() {\n const { userInfo } = useSelector(selectThongTinMoRong);\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n const { t } = useTranslation();\n\n // const list = useSelector(selectListLoTrinh);\n let dispatch = useDispatch();\n const arrCyber = useArrCourseCybersoft();\n\n let { chuyenDeId: id } = useParams();\n useEffect(() => {\n // servCodingCamp\n // .layLotrinhUser()\n // .then((res) => {\n // dispatch(setListLoTrinh(res.data.content));\n // // setListLoTrinh(res.data.content);\n // })\n // .catch((err) => {\n // console.log(err);\n // });\n }, []);\n\n const menu = (\n <Menu className=\" rounded dropdown-lo-trinh\">\n <div className=\"row\">\n <div className=\"col p-4 space-y-5\">\n <div className=\"shadow cursor-pointer relative\">\n <p className=\"font-bold\">\n KHÓA ÄANG HỌC\n </p>\n </div>\n {data?.map(({ tenChuyenDe, chuyenDeId, notify }) => {\n return (\n <div key={chuyenDeId} className=\"shadow cursor-pointer relative\">\n {notify && (\n <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"></span>\n )}\n <NavLink\n to={`/${parentPage.task}/${chuyenDeId}`}\n className={classNames({\n active: chuyenDeId == id,\n })}\n >\n {tenChuyenDe.length > 50 ? tenChuyenDe.substring(0, 50) + '...' : tenChuyenDe}\n </NavLink>\n </div>\n );\n })}\n {!data && <div className=\"shadow cursor-pointer relative\">\n <NavLink to={`/package`}>\n Xem tất cả khóa há»c\n </NavLink>\n </div>\n }\n </div>\n <div className=\"col p-4 space-y-5\">\n <div className=\"shadow cursor-pointer relative\">\n <p className=\"font-bold\">\n KHÓA HỌC KIẾN TẬP Sá»° NGHIỆP TẠI CYBERSOFT\n </p>\n </div>\n {arrCyber.data?.map((item, idx) => {\n if (item.metaData == \"Cybersoft\") {\n return (\n <div key={idx} className=\"shadow cursor-pointer relative\">\n <a\n onClick={() => {\n window.open(item?.linkMoTa, \"_blank\");\n }}\n title={item.tenSanPham}\n >\n {item?.tenSanPham.length > 50 ? item?.tenSanPham.substring(0, 50) + '...' : item?.tenSanPham}\n </a>\n </div>\n )\n }\n })}\n </div>\n </div>\n </Menu>\n );\n\n return (\n <div className=\"relative\">\n {data?.map(\n ({ notify }) =>\n notify && (\n <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"></span>\n )\n )}\n\n <Dropdown arrow overlay={menu}>\n <p className=\"p-1 px-3 flex justify-center text-content text-sm items-center rounded-xl z-10 relative duration-500 text-button uppercase whitespace-nowrap cursor-pointer space-x-2\">\n <span\n className={checkActiveNavlink(parentPage.task) ? \"active-link\" : \"\"}\n >\n {\" \"}\n <i className=\"pe-2 fa-solid fa-road\"> </i>\n {t(\"header.loTrinh\")}\n <i class=\"pl-2 fa fa-caret-down \"></i>\n </span>\n </p>\n </Dropdown>\n </div>\n );\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport axios from 'axios';\n\nexport function useArrCourseCybersoft() {\n return useQuery({\n queryKey: ['arrCyber'],\n queryFn: () => {\n return axios\n .get(\"https://apicrm.cybersoft.edu.vn/api/gioithieu\")\n .then(res => res.data.content);\n },\n staleTime: 7 * 24 * 60 * 60 * 1000, // Dữ liệu được coi là má»›i trong 24h\n cacheTime: 14 * 24 * 60 * 60 * 1000, // Dữ liệu còn trong bá»™ nhá»› cache 7 ngà y sau khi không còn được sá» dụng\n refetchOnWindowFocus: false,\n retry: false,\n });\n}\n","import React from \"react\";\n\nexport default function IconReminder({ icon, issue }) {\n return (\n <div className=\"relative \">\n {issue ? (\n <span className=\"absolute top-0 right-0 rounded-full z-50 text-content w-5 h-5 bg-red-500 text-center leading-5 transform translate-x-1/2 -translate-y-1/3\">\n {issue}\n </span>\n ) : (\n \"\"\n )}\n <div style={{ color: \"rgba(255, 210, 32, 1)\" }} className=\"text-xl \">\n {icon}\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n// import { setAllThongBao } from \"../../../redux/reducer/thongBaoReducer\";\nimport httpServ from \"../../../services/http.service\";\n\nimport { Fragment } from \"react\";\nimport { Menu, Transition } from \"@headlessui/react\";\nimport { disableSetLoading } from \"../../../constants/httpServContant\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport IconReminder from \"./IconReminder\";\nexport default function DropdowThongBao() {\n const dispatch = useDispatch();\n // const { allThongBao } = useSelector((state) => state.thongBao);\n const { userInfo } = useSelector(selectThongTinMoRong);\n const allThongBao = [];\n let newThongBao = allThongBao?.filter((item) => {\n return item.daXem === false;\n });\n // let history = useHistory();\n const handleFetch = () => {\n httpServ\n .getAllThongBao(disableSetLoading)\n .then((res) => {\n // dispatch(setAllThongBao(res.data.content));\n })\n .catch((err) => {\n // console.log(err);\n });\n };\n\n const handleChangStatusThongBao = () => {\n httpServ\n .getChangeStatusThongBao(userInfo.id, disableSetLoading)\n .then((res) => {\n // console.log(res);\n handleFetch();\n })\n .catch((err) => {});\n };\n\n useEffect(() => {\n handleFetch();\n }, []);\n\n return (\n <Menu as=\"div\" className=\"relative inline-block text-left z-50\" on>\n {({ open }) => (\n <>\n <Menu.Button className=\"border-0 inline-flex justify-center w-full rounded-md text-sm font-medium text-content \">\n <div\n onClick={handleChangStatusThongBao}\n className=\"relative w-10 h-10 flex justify-center items-center \"\n >\n <IconReminder icon={<i class=\"fa fa-bell\"></i>} issue={0} />\n {newThongBao.length > 0 ? (\n <span className=\" absolute -right-2 -top-1 w-4 h-4 rounded-full text-white text-xs text-center bg-red-500\">\n {newThongBao.length}\n </span>\n ) : (\n \"\"\n )}\n </div>\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items\n id=\"testindex\"\n className=\" absolute left-0 mt-2 w-72 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none\"\n >\n <div className=\"flex justify-end pt-2 pr-2 h-max-content z-50\"></div>\n <div className=\"py-1 p-3 h-96 list_khoaHoc overflow-y-scroll\">\n {allThongBao.length == 0 ? (\n <p className=\"text-center text-black p-5\">Không có thông báo má»›i</p>\n ) : (\n \"\"\n )}\n {allThongBao?.map((thongBao, index) => {\n let cssText = thongBao.daXem\n ? \"text-gray-600 bg-gray-50\"\n : \"text-gray-900 bg-gray-200\";\n return (\n <div\n key={index}\n className={\n \"flex justify-center my-3 space-y-0.5 text-sm h-max-content rounded-lg p-2\" +\n cssText\n }\n >\n <div\n className={\n \"my-3 space-y-0.5 text-sm h-max-content rounded-lg p-2 \" + cssText\n }\n >\n <p className={\" m-0 px-1 leading-5 \"}>{thongBao.noiDung}</p>\n <p className={\" m-0 px-1 leading-5 \"}>{thongBao.ngayThang}</p>\n </div>\n </div>\n );\n })}\n </div>\n </Menu.Items>\n </Transition>\n </>\n )}\n </Menu>\n );\n}\n","export const disableSetLoading = false","import { parentPage } from \"../routes/utitlity\";\nimport localStorageServ from \"../services/locaStorage.service\";\nimport { Trans } from 'react-i18next';\n\nlet userId = localStorageServ.userInfo.get()?.id;\n\nexport const subItems = [\n {\n key: \"1\",\n name: <Trans i18nKey='menuLeft.nhiemVu' />,\n icon: <i className=\"fa fa-book-reader\"></i>,\n path: parentPage.task,\n },\n {\n key: \"2\",\n name: <Trans i18nKey='menuLeft.baiVietNoiBat' />,\n icon: <i className=\"fa fa-newspaper\"></i>,\n path: \"/blog/1\",\n },\n {\n key: \"3\",\n name: <Trans i18nKey='menuLeft.chiaSeMienPhi' />,\n icon: <i className=\"fa fa-star\"></i>,\n path: \"/workshop\",\n },\n {\n key: \"4\",\n name: <Trans i18nKey='menuLeft.kienTapSuNghiep'/>,\n icon: <img src=\"https://cybersoft.edu.vn/wp-content/uploads/2017/03/cropped-min-new-32x32.png\"/>,\n path: \"https://cybersoft.edu.vn/\",\n },\n];\nexport const dataHeaderPackage = [\n {\n key: \"1\",\n name: <Trans i18nKey='header.loTrinh' />,\n path: \"/package\",\n icon: \"fa-solid fa-house\",\n item: [],\n },\n {\n key: \"2\",\n name: <Trans i18nKey='header.combo' />,\n path: \"/package\",\n icon: \"fa-solid fa-road\",\n item: [],\n }\n];\nexport const dataHeader = [\n {\n key: \"1\",\n name: <Trans i18nKey='header.trangChu' />,\n path: \"/dash-broad\",\n icon:\"fa-solid fa-house\",\n item: [],\n },\n {\n key: \"1\",\n name: <Trans i18nKey='header.loTrinh' />,\n path: \"/dash-broad\",\n icon: \"fa-solid fa-house\",\n item: [],\n },\n\n {\n key: \"3\",\n name: <Trans i18nKey='header.tuongCuaToi' />,\n path: `/profile/${userId}`,\n icon:\"fa-regular fa-id-card\",\n item: subItems,\n },\n {\n key: \"4\",\n name: <Trans i18nKey='header.vatPham' />,\n path: `/shop-page`,\n icon:\"fa-brands fa-shopify\",\n item: subItems,\n },\n];\n","import React, { Fragment, useEffect } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport GeneralIntroUser from \"../../components/BarTichCucKinhNghiem/BarTichCucKinhNghiem\";\nimport { NavLink, useNavigate } from \"react-router-dom\";\nimport { updateThongTinMoRongAction, selectThongTinMoRong, setInforLoginDemo } from \"../../redux/reducer/authReducer\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport DropdownLoTrinh from \"./DropdownLoTrinh\";\nimport ItemCoin from \"../../components/ItemCoin/ItemCoin\";\nimport DropdowThongBao from \"./DropdowThongBao/DropdowThongBao\";\nimport { dataHeader } from \"../utils\";\nimport { getHinhAnhFB } from \"../../utils/GetHinhanh\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport useWindowSize from \"../../hook/useWindowSize\";\n\nexport default function HeaderTask({ }) {\n const navigate = useNavigate();\n const dispatch = useDispatch();\n let userId = localStorageServ.userInfo.get()?.id;\n let { userInfo } = useSelector(selectThongTinMoRong);\n\n useEffect(() => {\n dispatch(updateThongTinMoRongAction());\n }, []);\n\n const { t, i18n } = useTranslation()\n const { widthWindow, heightWindow } = useWindowSize();\n return (\n <>\n <div\n onClick={() => {\n navigate(\"/dash-broad\");\n }}\n className=\"logo w-23 flex-shrink-0 h-ful flex items-center cursor-pointer\"\n >\n <img src=\"https://apimentor11.cybersoft.edu.vn//images/24-04-2024-10-46-20-logo-codezuni.png\" alt=\"\" />\n </div>\n {widthWindow<768?\n \"\"\n :\n <Fragment>\n <div className=\"flex rounded-xl relative items-center h-10 \">\n {dataHeader.map((item, index) => {\n if (index == 1) return <DropdownLoTrinh />;\n return (\n <NavLink key={index} to={item.path}>\n\n <button\n className={`p-1 px-3 flex h-full justify-center text-content text-sm items-center rounded-xl z-10 relative duration-500 text-button uppercase w-max`}\n >\n <i className={`pe-2 ${item.icon}`}> </i>\n {item.name}\n </button>\n </NavLink>\n );\n })}\n </div>\n <DropdowThongBao />\n <GeneralIntroUser />\n <ItemCoin />\n <div className=\"w-14 h-14\">\n <NavLink to={`/profile/${userId}`}>\n <img\n src={getHinhAnhFB(userInfo.facebookId, userInfo)}\n className=\"w-full h-full block rounded-full m-0 object-cover \"\n alt=\"\"\n />\n </NavLink>\n </div>\n <div className=\"lang\">\n <Select\n style={{ width: 100, fontSize: 18, color: \"white\" }}\n value={localStorage.getItem(\"lang\")}\n onChange={(value) => {\n localStorage.setItem(\"lang\", value)\n window.location.reload()\n }}\n options={[{ value: 'vi', label: '🇻🇳 VI' }, { value: 'en', label: '🇺🇸 EN' }]}\n\n\n />\n </div>\n </Fragment>\n }\n \n \n <div\n onClick={() => {\n localStorageServ.userInfo?.remove();\n window.location.href = \"/login\";\n }}\n style={{ color: \" rgb(255, 210, 32)\" }}\n className=\" cursor-pointer flex items-center justify-start space-x-2 flex-shrink-0\"\n >\n <p className=\"\"> {t('header.dangXuat')}</p> <i className=\"fa fa-sign-out-alt \"></i>\n </div>\n </>\n );\n}\n","import { MessageOutlined, UserOutlined } from \"@ant-design/icons\";\nimport { Tooltip } from \"antd\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { PostChat, PostChatIssue } from \"../../../model/Chat\";\nimport { config } from \"../../../utils/config\";\nimport { ChangeActiveChat1, ChangeActiveChat2, ChangeActiveChatBot, changeCurrentActive, updateDataChat1, updateDataChat2, updateDataChatBot } from \"../../../redux/reducer/stackChatReducer\";\nimport { useTranslation } from \"react-i18next\";\nimport { getHinhAnh2 } from \"../../../utils/GetHinhanh\";\n\nconst PopupChat = ({ showDrawer }) => {\n const [arrow, setArrow] = useState(\"Show\");\n const dspopup = config.getStoreJson(\"LIST_POPUP\");\n const [popup, setPopup] = useState(dspopup ?? [])\n\n // console.log(\"😀 ~ file: PopupChat.jsx:12 ~ PopupChat ~ dspopup:\", dspopup);\n const dispatch = useDispatch();\n const { ActiveChat1, ActiveChat2, dataChat1, dataChat2, ActiveCurrent, ActiveChatBot } = useSelector(\n (state) => state.stackChatReducer\n );\n // console.log(\n // \"😀 ~ file: PopupChat.jsx:11 ~ PopupChat ~ ActiveChat1:\",\n // ActiveChat1\n // );\n const mergedArrow = useMemo(() => {\n if (arrow === \"Hide\") {\n return false;\n }\n\n if (arrow === \"Show\") {\n return true;\n }\n\n return {\n pointAtCenter: true,\n };\n }, [arrow]);\n \n const style = { opacity: 1, transform: \"translateY(0)\", height: \"100%\" }\n\n const areObjectsEqual = (obj1, obj2) => {\n if (obj1 === obj2) {\n return true; // Cùng má»™t tham chiếu đến đối tượng\n }\n\n if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false; // Má»™t trong hai không phải là đối tượng\n }\n\n if (obj1 === null || obj2 === null) {\n return false; // Má»™t trong hai là null\n }\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) {\n return false; // Số lượng thuá»™c tÃnh khác nhau\n }\n\n for (let key of keys1) {\n if (!areObjectsEqual(obj1[key], obj2[key])) {\n return false; // Kiểm tra đệ quy cho các thuá»™c tÃnh lồng nhau\n }\n }\n\n return true; // Nếu tất cả các kiểm tra trÆ°á»›c đó không trả vá» false, thì hai đối tượng giống nhau.\n };\n\n const { chatBots } = useSelector((state) => state.groupChat)\n const PushDataTabChat = (e) => {\n if(e==0){\n !ActiveChatBot && dispatch(ChangeActiveChatBot());\n dispatch(updateDataChatBot(chatBots[0]))\n }\n else if (areObjectsEqual(e, dataChat1)) {\n !ActiveChat1 && dispatch(ChangeActiveChat1());\n } else if (areObjectsEqual(e, dataChat2)) {\n !ActiveChat2 && dispatch(ChangeActiveChat2());\n } else {\n if (ActiveCurrent) {\n dispatch(updateDataChat2(e));\n dispatch(ChangeActiveChat2());\n dispatch(changeCurrentActive());\n } else {\n \n dispatch(updateDataChat1(e));\n dispatch(ChangeActiveChat1());\n dispatch(changeCurrentActive());\n }\n }\n\n\n };\n\n const rederPopup = () => {\n // console.log(popup);\n return popup?.map((e, i) => {\n return (\n <Tooltip\n key={i + \" popup\"}\n placement=\"left\"\n title={\n e.dsMentor\n ? \"Group Chuyên Äá» \" + e?.tenChuyenDe\n : \"Group task \" + e?.tenBaiHoc ?? \"Group\"\n }\n arrow={mergedArrow}\n color=\"#BF3DC2\"\n >\n <div\n className=\"acc_mess\"\n onClick={() => {\n PushDataTabChat(e)\n }}\n >\n <img src={getHinhAnh2(e)} alt={e.id} />\n </div>\n </Tooltip>\n );\n });\n };\n\n const { t } = useTranslation()\n\n useEffect(() => {\n setPopup(dspopup)\n\n }, [dspopup?.length])\n return (\n <div className=\"popup_chat_container\">\n {popup?.length > 0 && <div className=\"group\">\n\n <div className=\"popup_mes\" style={style}>\n {rederPopup()}\n\n </div>\n </div>}\n <div className=\"group\">\n\n <div className=\"popup_mes\" style={style}>\n <Tooltip\n placement=\"left\"\n title={'Chat with bot'}\n arrow={mergedArrow} \n color=\"#BF3DC2\"\n >\n <div\n className=\"acc_mess\"\n onClick={() => {\n PushDataTabChat(0)\n }}\n >\n <img src='https://play-lh.googleusercontent.com/3dh_AD3dKeum4QVdqjmHILF0JXXuQbe7PxUW9j0VAuOL9R8DXrk06InQhaq0HJ5AeA' />\n </div>\n </Tooltip>\n\n </div>\n </div>\n <div className=\"popup_dsChat\" onClick={showDrawer}>\n <Tooltip placement=\"left\" title={t('drawChat.danhSachChat')} arrow={mergedArrow}>\n <UserOutlined />\n </Tooltip>\n \n </div>\n </div>\n );\n};\n\nexport default PopupChat;\n","import React, { useEffect } from \"react\";\nimport \"./style.css\";\nimport { Avatar, Button, Collapse, message } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getDsGroupForTaskHocVienApi } from \"../../redux/reducer/groupForTaskReducer\";\nimport {\n ChangeActiveChat1,\n ChangeActiveChat2,\n changeCurrentActive,\n\n getAllUserInChuyenDeApi,\n updateDataChat1,\n updateDataChat2,\n} from \"../../redux/reducer/stackChatReducer\";\nimport { config } from \"../../utils/config\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport { useTranslation } from \"react-i18next\";\nimport { getChatBot } from \"../../redux/reducer/groupChatReducer\";\n\nconst { Panel } = Collapse;\nexport const areObjectsEqual = (obj1, obj2) => {\n if (obj1 === obj2) {\n return true; // Cùng má»™t tham chiếu đến đối tượng\n }\n\n if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false; // Má»™t trong hai không phải là đối tượng\n }\n\n if (obj1 === null || obj2 === null) {\n return false; // Má»™t trong hai là null\n }\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) {\n return false; // Số lượng thuá»™c tÃnh khác nhau\n }\n\n for (let key of keys1) {\n if (!areObjectsEqual(obj1[key], obj2[key])) {\n return false; // Kiểm tra đệ quy cho các thuá»™c tÃnh lồng nhau\n }\n }\n\n return true; // Nếu tất cả các kiểm tra trÆ°á»›c đó không trả vá» false, thì hai đối tượng giống nhau.\n};\nexport const isObjectInArray = (array, element) => {\n for (const item of array) {\n if (areObjectsEqual(item, element)) {\n return true;\n }\n }\n return false;\n};\nexport const findObjectIndexInArray = (array, element) => {\n return array.findIndex(item => areObjectsEqual(item, element));\n};\nconst ColorList = [\"#f56a00\", \"#7265e6\", \"#ffbf00\", \"#00a2ae\"];\n// Tạo má»™t số nguyên ngẫu nhiên từ 0 đến 3\nconst randomNumber = Math.floor(Math.random() * ColorList.length); // 0, 1, 2 hoặc 3\n\nconst DanhSachChat = ({ open, closeDrawer }) => {\n const dispatch = useDispatch();\n const { ActiveChat1, ActiveChat2, ActiveCurrent, dataChat1, dataChat2 } =\n useSelector((state) => state.stackChatReducer);\n\n const { issueHocVienTheoTungChuyenDe } = useSelector((state) => state.issue);\n const { DSChuyenDeHocVienDangKy } = useSelector((state) => state.chuyenDe);\n const { dsGroupForTaskHocVien } = useSelector((state) => state.groupForTask);\n const styleDraw = {\n animation: open ? \"\" : \"\",\n };\n\n\n\n const PushDataTabChat = (e) => {\n if (areObjectsEqual(e, dataChat1)) {\n !ActiveChat1 && dispatch(ChangeActiveChat1());\n } else if (areObjectsEqual(e, dataChat2)) {\n !ActiveChat2 && dispatch(ChangeActiveChat2());\n } else {\n if (ActiveCurrent) {\n dispatch(updateDataChat2(e));\n dispatch(ChangeActiveChat2());\n dispatch(changeCurrentActive());\n } else {\n dispatch(updateDataChat1(e));\n dispatch(ChangeActiveChat1());\n dispatch(changeCurrentActive());\n }\n }\n\n\n };\n\n const handleClickGroupChuyenDe = (e) => {\n // if (e == -1) {\n // message.info(\"Vui lòng tạo issue để tiếp tục chat trong chuyên Ä‘á» nà y\")\n // }\n\n const index = issueHocVienTheoTungChuyenDe?.findIndex(\n (issue) => issue?.chuyenDeId == e?.id)\n if (index == -1 && e.dsMentor) { message.info(\"Vui lòng gá»i tin nhắn để tạo issue má»›i\") }\n PushDataTabChat(e);\n const danhSachPopup = config.getStoreJson(\"LIST_POPUP\");\n if (danhSachPopup) {\n\n if (!isObjectInArray(danhSachPopup, e)) {\n\n \n danhSachPopup.unshift(e);\n }\n if (danhSachPopup.length > 4) {\n\n danhSachPopup.pop()\n }\n config.setStoreJson(\"LIST_POPUP\", [...danhSachPopup]);\n }\n else\n config.setStoreJson(\"LIST_POPUP\", [e]);\n\n\n\n\n //CheckTab\n\n // Nếu ko có issue\n //Äóng draw\n closeDrawer();\n\n };\n // if(open)\n //The goupTask\n const renderDsChatG = () => {\n return dsGroupForTaskHocVien?.map((e, i) => {\n return (\n <div\n onClick={() => {\n handleClickGroupChuyenDe(e);\n }}\n key={i + \" draw_group_chat_item\"}\n className=\"draw_group_chat_item p-2 flex gap-2 items-center\"\n >\n\n <img src={`https://ui-avatars.com/api/?name=${e?.tenBaiHoc}&background=random&bold=true`}\n className=\"w-10 h-10 object-cover rounded-full mr-2\"\n alt=\"\"\n />\n <div className=\"flex flex-col gap-1\">\n <p>Chuyên Äá» : {e?.tenChuyenDe}</p>\n {e.tenBaiHoc && <p>{`Task: ${e.tenBaiHoc}`}</p>}\n </div>\n </div>\n );\n });\n };\n //Theo tung chuyen de\n const renderDsChatCd = () => {\n return DSChuyenDeHocVienDangKy?.map((e, i) => {\n const index = issueHocVienTheoTungChuyenDe?.findIndex(\n (issue) => issue?.chuyenDeId == e?.id\n );\n return (\n <div\n onClick={() => {\n handleClickGroupChuyenDe(e)\n }}\n key={i + \" draw_group_chat_item\"}\n className=\"draw_group_chat_item p-2 flex gap-2 items-center\"\n >\n <img\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://apimentor11.cybersoft.edu.vn${e?.hinhAnh}`}\n />\n\n <div className=\"flex flex-col gap-1\">\n <p>Chuyên Äá» : {e?.tenChuyenDe}</p>\n {index >= 0 ? (\n <p>Issue: {issueHocVienTheoTungChuyenDe[index]?.title}</p>\n ) : (\n <></>\n )}\n </div>\n </div >\n );\n });\n };\n\n useEffect(() => {\n dispatch(getDsGroupForTaskHocVienApi());\n dispatch(getAllUserInChuyenDeApi());\n dispatch(getChatBot())\n }, []);\n const { t } = useTranslation()\n\n return (\n <div\n className={`danhsachchat`}\n style={{\n zIndex: open ? \"10000\" : \"-1\",\n opacity: open ? \"1\" : \"0\",\n }}\n >\n <div\n style={{\n opacity: open ? \"1\" : \"0\",\n display: open ? \"block\" : \"none\",\n transition: \"all 1s\",\n }}\n className=\"overLay_dschat\"\n onClick={closeDrawer}\n >\n DanhSachChat\n </div>\n <div\n className={`draw_dsChat`}\n style={{\n transform: open ? \"translateX(0)\" : \"translateX(100%)\",\n transition: \"all 0.3s\",\n }}\n >\n <div className=\"draw_dsChat_head text-lg flex justify-between py-1 px-2\">\n <h5 className=\"font-bold text-blue-500\">{t('drawChat.danhSachChat')}</h5>\n <button\n className=\"flex justify-center text-blue-500 items-center border-0 btn btn-sm btn-outline-light\"\n onClick={closeDrawer}\n >\n <CloseOutlined />\n </button>\n </div>\n <div className=\"draw_dsChat_content text-lg font-bold text-[#7E65D0]\">\n <Collapse\n accordion\n defaultActiveKey={\n DSChuyenDeHocVienDangKy && DSChuyenDeHocVienDangKy?.length > 0\n ? [\"1\"]\n : []\n }\n >\n {DSChuyenDeHocVienDangKy && DSChuyenDeHocVienDangKy?.length > 0 ? (\n <Panel\n className=\"draw_group_chat \"\n header={t('drawChat.danhSachTheoChuyenDe')}\n key=\"1\"\n\n >\n <div>{renderDsChatCd()}</div>\n </Panel>\n ) : (\n <></>\n )}\n {dsGroupForTaskHocVien && dsGroupForTaskHocVien?.length > 0 ? (\n <Panel\n className=\"draw_group_chat\"\n header={t('drawChat.danhSachTheoTask')}\n key=\"2\"\n >\n <div>{renderDsChatG()}</div>\n </Panel>\n ) : (\n <></>\n )}\n </Collapse>\n </div>\n </div>\n </div>\n );\n // else\n // return <></>\n};\n\nexport default DanhSachChat;\n","import React, { createContext, useContext, useRef, useState } from \"react\"\nimport {\n HubConnectionBuilder,\n LogLevel,\n HubConnection\n} from \"@microsoft/signalr\"\n// import { useAppDispatch, useAppSelector } from \"../redux/hooks\"\n// import {\n// getGroupChatByDsChatApi,\n// getGroupChatByDsChatByChuyenDeApi\n// } from \"../redux/GroupChatReducer/groupChatReducer\"\n\n\nimport { message } from \"antd\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { API_URL_DOMAIN } from \"../utils/urlDomain\"\n\nconst AuthContext = createContext({\n connection: null,\n myRoom: { room: \"\", taskid: 0 },\n myUser: \"\",\n messages: { type: \"success\", message: \"\", description: \"\" },\n joinRoom: async function() {},\n sendMessage: async function() {},\n sendUsersConnected: async function() {},\n closeConnection: async function() {},\n changeConn: () => {},\n findConnection: () => \"\",\n changeMyRoomRef: () => {},\n getMyRoomRef: () => ({ room: \"\", taskid: 0 }),\n connection2: null,\n myRoom2: { room: \"\", chuyenDeId: 0 },\n myUser2: \"\",\n joinRoom2: async function() {},\n sendMessage2: async function() {},\n sendUsersConnected2: async function() {},\n closeConnection2: async function() {},\n changeConn2: () => {},\n findConnection2: () => \"\",\n changeMyRoomRef2: () => {},\n getMyRoomRef2: () => ({ room: \"\", chuyenDeId: 0 })\n})\n\nconst apiUrl = API_URL_DOMAIN\n\nexport const AuthProvider = ({ children }) => {\n const dispatch = useDispatch()\n const { arrDSNguoiDung, thongTinMentor } = useSelector(\n state => state.groupForTask\n )\n const myRoomRef = useRef({\n room: \"\",\n taskid: 0\n })\n const myRoomRef2 = useRef({\n room: \"\",\n chuyenDeId: 0\n })\n const myUserIdRef = useRef(\"\")\n const myUserIdRef2 = useRef(\"\")\n\n const [messages, setMessages] = useState({\n type: \"success\",\n message: \"\",\n description: \"\"\n })\n\n const [connection, setConnection] = useState()\n // const [connections, setConnections] = useState([])\n const [connection2, setConnection2] = useState()\n // const [connections2, setConnections2] = useState([])\n\n // Chuyển room\n // const changeMyRoomRef = (room, taskid) => {\n // console.log(\"room change\")\n // myRoomRef.current = { room, taskid }\n // }\n // const changeMyRoomRef2 = (room, chuyenDeId) => {\n // console.log(\"room change\")\n // myRoomRef2.current = { room, chuyenDeId }\n // }\n //lây room hiện tại\n // const getMyRoomRef = () => {\n // return myRoomRef.current\n // }\n // const getMyRoomRef2 = () => {\n // return myRoomRef2.current\n // }\n\n //---- xu ly connections 1----\n // const addConn = (room, taskid, connection) => {\n // setConnections(conns => [...conns, { room, taskid, connection }])\n // }\n // const delConn = (room, taskid) => {\n // setConnections(conns => {\n // const index = conns.findIndex(e => e.room === room && e.taskid === taskid)\n // conns.splice(index, 1)\n // return [...conns]\n // })\n // }\n // const changeConn = connectionId => {\n // const index = connections.findIndex(\n // conn => conn.connection.connectionId === connectionId\n // )\n // if (index !== -1) setConnection(connections[index].connection)\n // }\n // const findConnection = (room, taskid) => {\n // const index = connections.findIndex(\n // e => e.room === room && e.taskid === taskid\n // )\n // if (index !== -1 && connections[index].connection.state === \"Connected\")\n // return connections[index].connection.connectionId\n // return null\n // }\n //----------------------------\n //---- xu ly connections 1----\n // const addConn2 = (room, chuyenDeId, connection) => {\n // setConnections2(conns => [...conns, { room, chuyenDeId, connection }])\n // }\n // const delConn2 = (room, chuyenDeId) => {\n // setConnections2(conns => {\n // const index = conns.findIndex(\n // e => e.room === room && e.chuyenDeId === chuyenDeId\n // )\n // conns.splice(index, 1)\n // return [...conns]\n // })\n // }\n // const changeConn2 = connectionId => {\n // const index = connections2.findIndex(\n // conn => conn.connection.connectionId === connectionId\n // )\n // if (index !== -1) setConnection(connections2[index].connection)\n // }\n // const findConnection2 = (room, chuyenDeId) => {\n // const index = connections2.findIndex(\n // e => e.room === room && e.chuyenDeId === chuyenDeId\n // )\n // if (index !== -1 && connections2[index].connection.state === \"Connected\")\n // return connections2[index].connection.connectionId\n // return null\n // }\n //----------------------------\n\n // Get api noi dung chat vá» reuducer\n const handleGetGroupChat = async (dsChat, taskid) => {\n // await dispatch(getGroupChatByDsChatApi(dsChat, taskid))\n }\n const handleGetGroupChat2 = async (dsChat, chuyenDeId) => {\n // await dispatch(getGroupChatByDsChatByChuyenDeApi(dsChat, chuyenDeId))\n }\n\n // coverten ngÆ°á»i dùng\n const returnTen = (id, arr) => {\n const index = arr.findIndex(e => e.id === id)\n return arr[index].hoTen\n }\n\n //-----hubconnection-----\n const joinRoom = async ({ userid, room, taskid }) => {\n try {\n console.log(\"join conection\", userid, room)\n //?tao má»™t connect map vá»›i hub trên sv\n const connection = new HubConnectionBuilder()\n .withUrl(`${apiUrl}/chat`)\n .configureLogging(LogLevel.Information)\n .build()\n connection.on(\"onJoinRoom\", userM => {\n if (userid !== userM.userid) {\n setMessages({\n ...messages,\n message: `Bạn ${returnTen(\n userM.userid,\n arrDSNguoiDung\n )} vừa On đó !`\n })\n }\n })\n\n connection.on(\"ReceiveMessage\", userM => {\n if (\n myRoomRef.current.room === room &&\n myRoomRef.current.taskid === taskid\n ) {\n console.log(\"tin nhắn má»›i\")\n handleGetGroupChat(room, taskid)\n }\n\n if (myUserIdRef.current !== userM.userid) {\n if (userM.userid === thongTinMentor.id)\n setMessages({\n ...messages,\n message: `Mentor ${thongTinMentor.hoTen} vừa gữi tin !`,\n type: \"info\",\n description: \"\"\n })\n else\n setMessages({\n ...messages,\n message: `Bạn ${returnTen(\n userM.userid,\n arrDSNguoiDung\n )} vừa gữi tin !`,\n type: \"info\",\n description: \"\"\n })\n }\n })\n\n connection.on(\"outReceiveMessage\", userM => {\n if (userid === userM.userid) {\n setMessages({\n ...messages,\n message: `Bạn bị distconnect ra khá»i room ${userM.room}`,\n type: \"warning\"\n })\n } else\n setMessages({\n ...messages,\n message: `${returnTen(userM.userid, arrDSNguoiDung)} vừa Off`\n })\n })\n connection.on(\"UsersInRoom\", list => {\n console.log(list)\n })\n connection.onclose(e => {\n console.log(`Connectid ${connection.connectionId} close`)\n myRoomRef.current = { room: \"\", taskid: 0 }\n myUserIdRef.current = \"\"\n // delConn(room, taskid)\n setConnection(undefined)\n setMessages({ type: \"success\", message: \"\", description: \"\" })\n })\n await connection.start()\n let userConnection = { userid, room, taskid: Number(taskid) }\n console.log(userConnection)\n await connection.invoke(\"JoinRoom\", userConnection)\n myRoomRef.current = { room, taskid }\n myUserIdRef.current = userid\n setConnection(connection)\n // addConn(room, taskid, connection)\n setMessages({\n ...messages,\n message: `Bạn vừa kết nối thà nh công success`,\n type: \"success\",\n description: \"\"\n })\n handleGetGroupChat(room, taskid)\n } catch (e) {\n message.error(\"Lá»—i báo BE\")\n setMessages({\n ...messages,\n message: \"Connecting not successful\",\n type: \"error\",\n description: \"Cần xem lại Ä‘Æ°á»ng truyá»n mạng !\"\n })\n }\n }\n // tạo phÆ°Æ¡ng thức thông báo có tin nhắn má»›i\n const sendMessage = async (userid, room, taskid) => {\n try {\n if (connection instanceof HubConnection)\n await connection.invoke(\"SendMessage\", {\n userid,\n room,\n taskid: Number(taskid)\n })\n } catch (e) {\n console.log(e)\n }\n }\n const sendUsersConnected = async room => {\n try {\n if (connection instanceof HubConnection)\n await connection.invoke(\"SendUsersConnected\", room)\n } catch (error) {\n console.log(error)\n }\n }\n const closeConnection = async () => {\n try {\n if (connection) {\n // đóng connection hiện tại\n await connection.stop()\n }\n } catch (e) {\n message.error(\"Lá»—i báo BE\")\n }\n }\n\n //-----hubconnection2-----\n const joinRoom2 = async ({ userid, room, chuyenDeId }) => {\n try {\n console.log(\"join conection\", userid, room)\n //?tao má»™t connect map vá»›i hub trên sv\n const connection = new HubConnectionBuilder()\n .withUrl(`${apiUrl}/chat`)\n .configureLogging(LogLevel.Information)\n .build()\n connection.on(\"onJoinRoom2\", userM => {\n if (userid !== userM.userid) {\n setMessages({\n ...messages,\n message: `Bạn ${\n userM ? returnTen(userM.userid, arrDSNguoiDung) : \"Nháºt\"\n } vừa On đó !`\n })\n }\n })\n\n connection.on(\"ReceiveMessage2\", userM => {\n if (\n myRoomRef2.current.room === room &&\n myRoomRef2.current.chuyenDeId === chuyenDeId\n ) {\n console.log(\"tin nhắn má»›i\")\n handleGetGroupChat2(room, chuyenDeId)\n }\n if (myUserIdRef2.current !== userM.userid) {\n //!Cần check lại\n if (userM.userid === thongTinMentor.id)\n setMessages({\n ...messages,\n message: `Mentor ${thongTinMentor.hoTen} vừa gữi tin !`,\n type: \"info\",\n description: \"\"\n })\n else\n setMessages({\n ...messages,\n message: `Bạn ${returnTen(\n userM.userid,\n arrDSNguoiDung\n )} vừa gữi tin !`,\n type: \"info\",\n description: \"\"\n })\n }\n })\n\n connection.on(\"outReceiveMessage2\", userM => {\n if (userid === userM.userid) {\n setMessages({\n ...messages,\n message: `Bạn bị distconnect ra khá»i room ${userM.room}`,\n type: \"warning\"\n })\n } else\n setMessages({\n ...messages,\n message: `${\n userM ? returnTen(userM.userid, arrDSNguoiDung) : \"Ai đó\"\n } vừa Off`\n })\n })\n connection.on(\"UsersInRoom2\", list => {\n console.log(list)\n })\n connection.onclose(e => {\n console.log(`Connectid ${connection.connectionId} close`)\n myRoomRef2.current = { room: \"\", chuyenDeId: 0 }\n myUserIdRef2.current = \"\"\n // delConn2(room, chuyenDeId)\n setMessages({ type: \"success\", message: \"\", description: \"\" })\n })\n //Start\n await connection.start()\n let userConnection = { userid, room, chuyenDeId: Number(chuyenDeId) }\n console.log(userConnection)\n await connection.invoke(\"JoinRoom2\", userConnection)\n myRoomRef2.current = { room, chuyenDeId }\n myUserIdRef2.current = userid\n //? LÆ°u connect và o state\n setConnection2(connection)\n //? LÆ°u connect và o connections\n // addConn2(room, chuyenDeId, connection)\n setMessages({\n ...messages,\n message: `Bạn vừa kết nối thà nh công success`,\n type: \"success\",\n description: \"\"\n })\n\n handleGetGroupChat2(room, chuyenDeId)\n } catch (e) {\n console.log(e)\n setMessages({\n ...messages,\n message: \"Connecting not successful\",\n type: \"error\",\n description: \"Cần xem lại Ä‘Æ°á»ng truyá»n mạng !\"\n })\n }\n }\n // tạo phÆ°Æ¡ng thức thông báo có tin nhắn má»›i\n const sendMessage2 = async (userid, room, chuyenDeId) => {\n try {\n if (connection2 instanceof HubConnection)\n await connection2.invoke(\"SendMessage2\", {\n userid,\n room,\n chuyenDeId: Number(chuyenDeId)\n })\n } catch (e) {\n console.log(e)\n }\n }\n const sendUsersConnected2 = async room => {\n try {\n if (connection2 instanceof HubConnection)\n await connection2.invoke(\"SendUsersConnected2\", room)\n } catch (error) {\n console.log(error)\n }\n }\n const closeConnection2 = async () => {\n try {\n if (connection2) {\n await connection2.stop()\n }\n } catch (e) {\n console.log(e)\n }\n }\n //Khai báo values context\n const Values = {\n connection,\n myRoom: myRoomRef.current,\n myUser: myUserIdRef.current,\n messages,\n joinRoom,\n sendMessage,\n closeConnection,\n // changeConn,\n // findConnection,\n // changeMyRoomRef,\n // getMyRoomRef,\n sendUsersConnected,\n connection2,\n myRoom2: myRoomRef2.current,\n myUser2: myUserIdRef2.current,\n joinRoom2,\n sendMessage2,\n closeConnection2,\n // changeConn2,\n // findConnection2,\n // changeMyRoomRef2,\n // getMyRoomRef2,\n sendUsersConnected2\n }\n\n return <AuthContext.Provider value={Values}>{children}</AuthContext.Provider>\n}\n\nexport default function UseConnection() {\n return useContext(AuthContext)\n}\n","export function toAliasString(str) {\n str = str.toLowerCase();\n str = str.replace(/à |á|ạ|ả|ã|â|ầ|ấ|áº|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|á»|ế|ệ|ể|á»…/g, 'e');\n str = str.replace(/ì|Ã|ị|ỉ|Ä©/g, 'i');\n str = str.replace(/ò|ó|á»|á»|õ|ô|ồ|ố|á»™|ổ|á»—|Æ¡|á»|á»›|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|Å©|Æ°|ừ|ứ|á»±|á»|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|á»·|ỹ/g, 'y');\n str = str.replace(/Ä‘/g, 'd');\n str = str.replace(/\\W+/g, ' ');\n str = str.replace(/\\s/g, '-');\n return str;\n}","import {\n ArrowsAltOutlined,\n CheckCircleOutlined,\n CheckOutlined,\n CloseOutlined,\n MinusOutlined,\n MoreOutlined,\n PlusOutlined,\n SendOutlined,\n ShrinkOutlined,\n UserOutlined\n} from \"@ant-design/icons\";\nimport { Avatar, Button, Form, Input, Modal, Popover, Rate, Tabs, Tooltip, message } from \"antd\";\nimport InputEmoji from 'react-input-emoji'\nimport { min } from \"lodash\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n ChangeActiveChat1,\n ChangeActiveChat2,\n ChangeActiveChatBot,\n getGroupChatByDsChatApi,\n getGroupChatByDsChatApi2,\n getGroupChatByDsChatByChuyenDeApi,\n getGroupChatByDsChatByChuyenDeApi2,\n postGroupChatApi,\n postGroupChatApi2,\n putGroupChatApi,\n putGroupChatApi2,\n} from \"../../../../redux/reducer/stackChatReducer\";\nimport { config } from \"../../../../utils/config\";\nimport { findObjectIndexInArray } from \"../../../DanhSachChat/DanhSachChat\";\nimport UseConnection from \"../../../../hook/chatHub\";\nimport {\n HubConnectionBuilder,\n LogLevel,\n HubConnection,\n} from \"@microsoft/signalr\";\nimport { API_URL_DOMAIN } from \"../../../../utils/urlDomain\";\nimport { getIssueHocVienTheoTungChuyenDeApi, putoptionalApi } from \"../../../../redux/reducer/issueReducer-Chat\";\nimport { getHinhAnh2, getHinhAnhFB } from \"../../../../utils/GetHinhanh\";\nimport TextArea from \"antd/lib/input/TextArea\";\nimport { layDsNguoiDungByStringApi } from \"../../../../redux/reducer/groupForTaskReducer\";\nimport { postDanhGia } from \"../../../../redux/reducer/danhGiaReducer\";\nimport { issueService } from \"../../../../services/issueService\";\nimport { BASE_URL_CODINGCAMP } from \"../../../../services/axios.service\";\nimport CheckableTag from \"antd/lib/tag/CheckableTag\";\nimport { getChatBot, sendChatBotApi } from \"../../../../redux/reducer/groupChatReducer\";\nimport { toAliasString } from \"../../../../utils/convertAlias\";\nimport HtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { connection } from \"../../../../App\";\nimport { useLstLoTrinhDangHoc } from \"../../../../hook/useLstLoTrinhUser\";\n\n\nexport const getTodate = () => {\n const currentDate = new Date();\n return currentDate.toLocaleString();\n};\nexport const convertTime = (dateTimeString) => {\n const dateTime = new Date(dateTimeString)\n const hour = dateTime.getHours()\n const minute = dateTime.getMinutes()\n\n let formattedHour = hour % 12\n if (formattedHour === 0) {\n formattedHour = 12\n }\n\n const period = hour >= 12 ? 'PM' : 'AM'\n return `${formattedHour}:${minute < 10 ? '0' + minute : minute} ${period}`\n}\nconst apiUrl = API_URL_DOMAIN;\nconst { TabPane } = Tabs;\nconst TabChat = ({ activeChat, data, current }) => {\n const [conection, setConnection] = useState(null);\n\n const [messageApi, contextHolder] = message.useMessage();\n\n\n const dispatch = useDispatch();\n const dspopup = config.getStoreJson(\"LIST_POPUP\");\n const [form] = Form.useForm();\n const [inputValue, setInputValue] = useState(\"\");\n const [checkImgGuest, setcheckImgGuest] = useState(true)\n const [checkImgUser, setcheckImgUser] = useState(true)\n // console.log(\"😀 ~ file: TabChat.jsx:39 ~ TabChat ~ inputValue:\", inputValue);\n // const inputRef = useRef(null)\n\n //-------------------regex link------------------------------\n const replaceWithLinks = (text) => {\n const regex = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n return text.replace(regex, function (match) {\n return '<a href=\"' + match + '\">' + match + '</a>';\n });\n }\n\n //-----------------end regex link---------------------------------\n\n const {\n groupChats,\n groupChatsByChuyenDe,\n chats,\n lastGroupChat,\n lastChat,\n userId,\n // joinRoom,\n // joinRoomCd,\n groupChats2,\n groupChatsByChuyenDe2,\n chats2,\n lastGroupChat2,\n lastChat2,\n userId2,\n chatBot,\n dataChatBot,\n // joinRoom2,\n // joinRoomCd2,\n listUser\n } = useSelector((state) => state.stackChatReducer);\n const { arrDSNguoiDung } = useSelector((state) => state.groupForTask)\n const { chatBots } = useSelector((state) => state.groupChat)\n const [countTime, setCountTime] = useState(0)\n const [lastTime, setLastTime] = useState(0)\n \nconst [dsUser,setDsUser] = useState(\"\")\n const limit = 10\n const duration = 3600000\n // console.log(current ? chats2 : chats);\n let myUser = config.getStoreJson(\"USER_INFOR_TECH_X\");\n\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(myUser?.id);\n let dsMentorDanhGia = JSON.parse(dataDangHoc?.find(item=>item.chuyenDeId==data?.id)?.danhSachMentor||'[]')\n const [room,setRoom] = useState('[]')\n // room = JSON.stringify([\n // \"00699925-3395-448b-9851-3202a3742964\",\n // \"d74eba9e-56fb-4673-96ef-edfd0f5d211c\",\n // ]);\n\n // console.log(\"room\", room);\n\n const { issueHocVienTheoTungChuyenDe } = useSelector((state) => state.issue);\n\n const [issue, setIssue] = useState(\"\");\n // console.log(\"😀 ~ file: TabChat.jsx:24 ~ TabChat ~ issue:\", issue);\n const messageRef = useRef();\n\n const { ActiveChat1, ActiveChat2 } = useSelector((state) => state.stackChatReducer)\n \n const joinRoom = async () => {\n try {\n //Tạo sá»± kiên lắng nghe khi có ngÆ°á»i kết nối\n connection.on(\"onJoinRoom\", (userM) => {\n if (myUser?.id !== userM?.userid) {\n success(userM?.userid ?? \"Có ngÆ°á»i vừa kết nối group task\");\n }\n });\n connection.on(\"onJoinRoom2\", (userM) => {\n if (myUser?.id !== userM?.userid) {\n success(userM?.userid ?? \"Có ngÆ°á»i vừa kết nối group chuyên Ä‘á»\");\n }\n });\n connection.on('onUpdateIssue', () => {\n loadApi()\n })\n //Sá»± kiện có tin nhắn đến\n connection.on(\"ReceiveMessage\", (userM) => {\n if (myUser?.id !== userM?.userid)\n loadApi()\n });\n connection.on(\"ReceiveMessage2\", (userM) => {\n if (myUser?.id !== userM?.userid) {\n // sendNotify(\"Có tin nhắn má»›i !\",\"\")\n //khi tag chat Ä‘uoc\n\n const ApiCHat = current ? config.getStoreJson('ApiChat2') : config.getStoreJson('ApiChat1')\n\n\n if (ApiCHat && ApiCHat.id !== data.id) {\n // message.info('Có tin nhắn má»›i !', '')\n } else {\n const checkActive = current ? ActiveChat2 : ActiveChat1\n if (!checkActive) {\n // message.info('Có tin nhắn má»›i !', '')\n }\n }\n }\n loadApi()\n });\n //Sk khi có ngÆ°á»i out\n connection.on(\"outReceiveMessage\", (userM) => {\n if (myUser?.id === userM?.userid) {\n // info(\"Bạn vừa tắt chat !\");\n } else {\n info(`Tk ${userM?.userId} vừa tắt`);\n }\n });\n connection.on('outReceiveMessage2', (userM) => {\n if (myUser?.id === userM?.userid) {\n // message.info('Bạn vừa tắt chat !')\n } else {\n // message.info(`Tk ${userM?.userId} vừa tắt`);\n }\n })\n //ds chat\n connection.on(\"UsersInRoom\", (list) => {\n \n });\n //Sk chạy khi connection đóng !\n // connection.onclose((e) => {\n // console.log(`Connectid ${connection?.connectionId} close`);\n // setConnection(null);\n // });\n //Start connection\n // await connection.start();\n let userConnection = null;\n if (checkTypeChat(true, false)) {\n userConnection = {\n userid: myUser.id,\n room,\n chuyenDeId: Number(data.id)\n // userid: myUser.id,\n // hocVienId: newD.hocVienId,\n // chuyenDeId: Number(data.id)\n };\n await connection.invoke(\"JoinRoom2\", userConnection);\n } else {\n userConnection = { userid: myUser.id, taskid: Number(data.id) };\n await connection.invoke(\"JoinRoom\", userConnection);\n }\n // success('kn thanh cong');\n setConnection(connection);\n // success(\"Bạn vừa kết nối thà nh công chat !\");\n\n } catch (error) {\n \n\n }\n };\n\n const sendMessage = async () => {\n try {\n if (conection instanceof HubConnection)\n if (checkTypeChat(true, false)) {\n await conection.invoke(\"SendMessage2\", {\n userid: myUser?.id,\n room,\n chuyenDeId: Number(data?.id),\n dsUser:dsUser\n });\n } else {\n await conection.invoke(\"SendMessage\", {\n userid: myUser?.id,\n room,\n taskid: Number(data?.id),\n });\n }\n } catch (e) {\n \n }\n };\n\n const sendUsersConnected = async (room) => {\n try {\n if (conection instanceof HubConnection)\n await conection.invoke(\"SendUsersConnected\", room);\n } catch (error) {\n \n }\n };\n\n const closeConnection = async () => {\n try {\n if (conection instanceof HubConnection) {\n await conection.stop();\n setConnection(null);\n }\n } catch (e) {\n }\n };\n\n const issueChat = (chuyenDeId) => {\n const index = issueHocVienTheoTungChuyenDe?.findIndex(\n (e) => e.chuyenDeId === chuyenDeId\n );\n if (index >= 0) return issueHocVienTheoTungChuyenDe[index];\n return null;\n };\n\n const success = (content) => {\n messageApi.open({\n type: \"success\",\n content,\n duration: 5,\n });\n };\n const info = (content) => {\n messageApi.open({\n type: \"info\",\n content,\n duration: 5,\n });\n };\n\n //Check chat chuyen de\n const CheckIssue = () => {\n if (data?.dsMentor) {\n //check có issue ko\n const index = issueHocVienTheoTungChuyenDe?.findIndex(\n (e) => e?.chuyenDeId == data?.id\n );\n if (index >= 0) {\n setIssue(issueHocVienTheoTungChuyenDe[index].title);\n } else setIssue(\"\");\n\n //Cáºp nháºp ná»™i dung chat cho content\n } else if (data?.danhSachHocVien) {\n setIssue(\"\");\n }\n };\n\n const loadApi = () => {\n // if(chat)\n if (messageRef && messageRef.current) {\n const { scrollHeight, clientHeight } = messageRef.current;\n messageRef.current.scrollTo({\n left: 0,\n top: scrollHeight - clientHeight,\n behavior: \"smooth\",\n });\n }\n //load data khi ngÆ°á»i dùng báºt lên\n if (checkTypeChat(true, false) === true) {\n //chuyende\n if (current) {\n dispatch(getGroupChatByDsChatByChuyenDeApi2(JSON.stringify([myUser?.id,...dsMentorDanhGia]), data?.id));\n } else {\n dispatch(getGroupChatByDsChatByChuyenDeApi(JSON.stringify([myUser?.id, ...dsMentorDanhGia]), data?.id));\n }\n } else if (checkTypeChat(true, false) === false) {\n if (current) {\n // console.log(\"chat 2\", room, data.groupForTaskId);\n dispatch(getGroupChatByDsChatApi2(dsUser, Number(data?.id)));\n } else {\n // console.log(\"chat 1\", room, data.groupForTaskId);\n dispatch(getGroupChatByDsChatApi(dsUser, Number(data?.id)));\n }\n }\n };\n\n const checkTypeChat = (a, b) => {\n if (data?.dsMentor) return a;\n else if (data?.danhSachHocVien) return b;\n return null;\n };\n const lastName = (fullname) => {\n const parts = fullname?.split(' ') // Tách chuá»—i thà nh mảng các phần tá», tách theo khoảng trắng\n\n if (parts?.length > 0) {\n return parts[parts?.length - 1]\n } else {\n return null\n }\n }\n const convertHoTen = (id) => {\n const index = arrDSNguoiDung?.findIndex((item) => item.id == id)\n return arrDSNguoiDung[index]\n }\n const showContentChat = (mess) => {\n console.log('mess: ', mess);\n return mess?.map((e, i) => {\n if (e?.UserSendId === myUser?.id)\n return (\n <div key={i + \" user_chat\"} className=\"user_chat\">\n <div className=\"user_avatar avatar\">\n {checkImgUser ? (\n // <img\n // src={getHinhAnhFB(myUser.avatar,myUser)}\n // onError={() => {\n // setcheckImgUser(false)\n // }}\n // alt=''\n // /> https://ui-avatars.com/api/?name\n // <Avatar style={{ backgroundColor: '#87d068' }} icon={<UserOutlined />} />\n <Popover key={i} content={myUser?.hoTen}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=${myUser?.hoTen}`}\n ></Avatar>\n </Popover>\n ) : (\n // <Avatar style={{ backgroundColor: '#87d068' }} >{lastName(myUser?.hoTen)}</Avatar>\n <Popover key={i} content={myUser?.hoTen}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=${myUser?.hoTen}`}\n ></Avatar>\n </Popover>\n )}\n </div>\n <div className=\"user_content\">\n <p className='d-flex flex-column align-items-end items-end'>\n <span className='text-base' dangerouslySetInnerHTML={{ __html: e?.Content }}></span>\n <span className='text-xs'>{convertTime(e?.TimeCreate)}</span>\n </p>\n </div>\n </div>\n );\n else\n return (\n <div key={i + ' guest_chat'} className='guest_chat'>\n <div className='guest_avatar avatar'>\n\n\n <Popover key={i} content={convertHoTen(e?.UserSendId)?.hoTen}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=${convertHoTen(e?.UserSendId)?.hoTen}`}\n ></Avatar>\n </Popover>\n </div>\n <div className='guest_content'>\n {/* <span className=\" text-xs\">{loadTen(e.UserSendId)}</span> */}\n <p className='d-flex flex-column align-items-start'>\n <span className='text-base'> {e?.Content}</span>\n <span className='text-xs'>{convertTime(e?.TimeCreate)}</span>\n </p>\n </div>\n </div>\n );\n });\n };\n const tagsData = ['Fix bug', 'Giải thÃch code', 'Há»i đáp'];\n const [selectedTags, setSelectedTags] = useState('');\n const [openFillCode, setOpenFillCode] = useState(false);\n const handleChange = async (tag) => {\n setSelectedTags(tag)\n if ((tag == 'Fix bug' || tag == 'Giải thÃch code')) {\n setOpenFillCode(true)\n }\n if (chatBots.length == 0) {\n //create chatbot\n const obj = {\n \"id\": 0,\n \"danhSachChat\": JSON.stringify([myUser.id, 'bot']),\n \"noiDungChat\": \"\",\n \"ngayTao\": new Date().toISOString(),\n \"groupForTaskId\": 0,\n \"chuyenDeId\": 0,\n \"issueId\": 0\n }\n await dispatch(postGroupChatApi2(obj));\n await dispatch(getChatBot());\n }\n };\n const getFistWordAndCheck = (str) => {\n //bổ sung thêm những ngôn ngữ khác \n return str.startsWith(\"`javascript\")\n || str.startsWith(\"`python\")\n || str.startsWith(\"`csharp\")\n || str.startsWith('`java')\n || str.startsWith('`typescript')\n || str.startsWith('`cpp')\n || str.startsWith('`ruby')\n || str.startsWith('`css')\n || str.startsWith('`jsx')\n || str.startsWith('`html')\n || str.startsWith('`js')\n\n\n }\n const [openBot, setOpenBot] = useState(false)\n const [contentBot, setContentBot] = useState(false)\n const openContentCode = (text) => {\n setContentBot(text)\n setOpenBot(true)\n }\n const showContentChatBot = (mess) => {\n // if(mess.length>0){\n return mess?.map((e, i) => {\n if (e?.UserSendId === myUser?.id)\n return (\n <div key={i + \" user_chat\"} className=\"user_chat\">\n <div className=\"user_avatar avatar\">\n {checkImgUser ? (\n // <img\n // src={getHinhAnhFB(myUser.avatar,myUser)}\n // onError={() => {\n // setcheckImgUser(false)\n // }}\n // alt=''\n // /> https://ui-avatars.com/api/?name\n // <Avatar style={{ backgroundColor: '#87d068' }} icon={<UserOutlined />} />\n <Popover key={i} content={myUser?.hoTen}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=${myUser?.hoTen}`}\n ></Avatar>\n </Popover>\n ) : (\n // <Avatar style={{ backgroundColor: '#87d068' }} >{lastName(myUser?.hoTen)}</Avatar>\n <Popover key={i} content={myUser?.hoTen}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=${myUser?.hoTen}`}\n ></Avatar>\n </Popover>\n )}\n </div>\n <div className=\"user_content\">\n <p className='d-flex flex-column align-items-end items-end'>\n <span className='text-base' dangerouslySetInnerHTML={{ __html: e?.Content }}></span>\n <span className='text-xs'>{convertTime(e?.TimeCreate)}</span>\n </p>\n </div>\n </div>\n );\n else {\n let arrContent = e?.Content.split('``')\n // let arrContent = e?.Content.match(/[^`]+|`[^`]+`/g)\n return (\n <div key={i + ' guest_chat'} className='guest_chat'>\n <div className='guest_avatar avatar'>\n\n\n <Popover key={i} content={'Trợ lý AI'}>\n <Avatar\n style={{ borderRadius: '100rem', width: '35px', height: '35px' }}\n className=\"shape-avatar me-1\"\n shape=\"square\"\n size={40}\n src={`https://ui-avatars.com/api/?name=AI`}\n ></Avatar>\n </Popover>\n </div>\n <div className='guest_content'>\n {/* <span className=\" text-xs\">{loadTen(e.UserSendId)}</span> */}\n <p className='d-flex flex-column align-items-start'>\n {arrContent.map((item, idx) => {\n const lstW = item.split(\" \");\n if (item.startsWith('`') && getFistWordAndCheck(lstW[0])) {\n // lấy chuá»—i code có dấu ` ở đầu\n //lấy loại ngôn ngữ lấy ra chữ đầu gắn và o vị trà language của SyntaxHightlighter\n\n let text = item.substring(1, item.length);\n return <div className=\"relative w-full blockContentBot\" onClick={() => { openContentCode(text) }}>\n {/* <span className='text-base'>{Html(item)}</span> */}\n <SyntaxHighlighter\n // className=\"p-10\"\n language=\"javascript\"\n style={dracula}\n wrapLines={true}\n showLineNumbers={true}\n >\n {text}\n {/* {HtmlParser(text)} */}\n </SyntaxHighlighter>\n <div className=\"hoverCode\">\n <button>Xem thêm</button>\n </div>\n </div>\n }\n return <span className='text-base'>{item}</span>\n }\n )}\n <span className='text-xs'>{convertTime(e?.TimeCreate)}</span>\n </p>\n </div>\n </div>\n );\n }\n });\n // }\n\n };\n\n const handleClearPopup = () => {\n const index = findObjectIndexInArray(dspopup, data);\n if (index >= 0) {\n if (dspopup.length <= 1) {\n config.removeStore(\"LIST_POPUP\");\n } else {\n dspopup.splice(index, 1);\n config.setStoreJson(\"LIST_POPUP\", dspopup);\n }\n }\n };\n\n //*so sanh ngà y truyá»n và o có format ngay thang nam trung vá»›i ngà y hiện tại hay không\n const isSameDate = (dateA) => {\n const currentDate = new Date();\n const date = new Date(dateA);\n\n // So sánh ngà y, tháng, năm\n return (\n date.getFullYear() === currentDate.getFullYear() &&\n date.getMonth() === currentDate.getMonth() &&\n date.getDate() === currentDate.getDate()\n );\n };\n\n const handleInputChange = (event) => {\n // setInputValue(event.target.value);\n };\n\n const handleSubmit = () => {\n form.submit();\n };\n\n const handleClearInput = () => {\n form.setFieldsValue({\n Content: \"\",\n TimeCreate: \"\",\n IsDelete: false,\n UserChat: \"user\",\n });\n // inputRef.current?.focus()\n };\n\n //GÆ°i tin nhắn Ä‘i\n\n const onFinish = async (values) => {\n const index = issueHocVienTheoTungChuyenDe?.findIndex(\n (issue) => issue?.chuyenDeId == data.id)\n values.Content = replaceWithLinks(values.Content)\n // console.log(replaceWithLinks(values.Content))\n values.TimeCreate = getTodate();\n values.IsDelete = false;\n values.UserSendId = myUser.id;\n values.Id = 1;\n const newGC = current ? { ...lastGroupChat2 } : { ...lastGroupChat };\n\n newGC.ngayTao = new Date().toISOString();\n if (data?.danhSachHocVien)\n newGC.groupForTaskId = Number(data?.id);\n else if (data?.dsMentor) {\n newGC.chuyenDeId = +data.id;\n if (issueChat(newGC.chuyenDeId)) {\n newGC.issueId = issueChat(newGC.chuyenDeId)?.id;\n }\n else {\n newGC.issueId = 0\n let currentDate = new Date().toISOString();\n\n const issueStatus = \"CAN_HO_TRO\"\n const objtesst = {\n id: 0,\n noiDung: values.Content,\n hocVienId: myUser.id,\n title: values.Content,\n trangThai: issueStatus,\n chuyenDeId: newGC.chuyenDeId,\n ngayTao: currentDate,\n path: \"\"\n\n }\n try {\n const response = await issueService.postIssue(objtesst);\n\n if (response.data.statusCode === 201) {\n message.success(\"Issue created successfully\");\n newGC.issueId = response.data.content.id\n dispatch(getIssueHocVienTheoTungChuyenDeApi());\n } else {\n \n }\n } catch (error) {\n \n }\n }\n }\n if (room) newGC.danhSachChat = dsUser;\n\n\n if (current) {\n if (\n groupChatsByChuyenDe2.length !== 0 &&\n isSameDate(lastGroupChat2.ngayTao)\n ) {\n newGC.id = lastGroupChat2.id;\n newGC.noiDungChat = JSON.stringify([...lastChat2, values]);\n //todo\n await dispatch(putGroupChatApi2(newGC.id, newGC,dsUser));\n await dispatch(\n getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id))\n );\n } else if (lastGroupChat) {\n newGC.noiDungChat = JSON.stringify([values]);\n await dispatch(getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id)));\n await dispatch(postGroupChatApi2(newGC,dsUser));\n }\n } else {\n // console.log(values)\n if (\n groupChatsByChuyenDe.length !== 0 &&\n isSameDate(lastGroupChat.ngayTao)\n ) {\n newGC.id = lastGroupChat.id;\n newGC.noiDungChat = JSON.stringify([...lastChat, values]);\n //todo\n await dispatch(putGroupChatApi(newGC.id, newGC,dsUser));\n await dispatch(\n getGroupChatByDsChatByChuyenDeApi(room, Number(data.id))\n );\n } else if (lastGroupChat) {\n newGC.noiDungChat = JSON.stringify([values]);\n await dispatch(postGroupChatApi(newGC,dsUser));\n await dispatch(\n getGroupChatByDsChatByChuyenDeApi(room, Number(data.id))\n );\n }\n }\n sendMessage();\n\n handleClearInput();\n setInputValue(\"\");\n if (data?.id) {\n // Gá»i sá»± kiên\n // sendMessage(myUser.id, newGC.danhSachChat, newGC.groupForTaskId)\n loadApi();\n } else if (data?.groupTaskId) {\n // sendMessage2(myUser.id, newGC.danhSachChat, newGC.groupForTaskId)\n loadApi();\n }\n };\n\n //Gá»i mess Bot\n const canCallAPI = () => {\n const now = Date.now();\n if (now - lastTime <= duration) {\n if (countTime >= limit) {\n return false;\n }\n } else {\n // Nếu đã vượt quá khoảng thá»i gian, reset counttime\n setCountTime(0);\n }\n return true;\n };\n //input fill code\n const [code, setCode] = useState(\"\");\n const [bug, setBug] = useState(\"\");\n\n const handleChangeCode = (e) => {\n setCode(e.target.value);\n };\n const handleChangeBug = (e) => {\n setBug(e.target.value);\n };\n const onFinishBot = async (values) => {\n values.Content = values.Content\n values.TimeCreate = getTodate();\n values.IsDelete = false;\n values.UserSendId = myUser.id;\n values.Id = 1;\n let newGC = { ...data }\n newGC.ngayTao = new Date().toISOString();\n let objbot = {\n \"id\": data.id,\n \"content\": values.Content,\n \"type\": toAliasString(selectedTags)\n }\n if (selectedTags == \"\") {\n message.info(\"Vui lòng chá»n tag để được há»— trợ chÃnh sác nhất 0!\")\n return\n }\n if (selectedTags == \"Fix bug\") {\n let cnt = 'Tôi có Ä‘oạn code sau : ' + code + 'và lá»—i tôi gặp phải' + bug + '. Hãy giúp tôi khắc phục nó.'\n objbot.content = cnt\n }\n if (selectedTags == \"Giải thÃch code\") {\n let cnt = code\n objbot.content = cnt\n }\n newGC.noiDungChat = JSON.stringify([...chatBot, values]);\n //todo\n if (canCallAPI()) {\n var res = await dispatch(putGroupChatApi2(newGC.id, newGC));\n await dispatch(\n getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id))\n );\n setCountTime(countTime + 1);\n setLastTime(Date.now());\n if (!res) {\n dispatch(\n getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id))\n );\n\n dispatch(getChatBot())\n dispatch(sendChatBotApi(objbot))\n }\n sendMessage();\n\n handleClearInput();\n setInputValue(\"\");\n if (data?.id) {\n // Gá»i sá»± kiên\n // sendMessage(myUser.id, newGC.danhSachChat, newGC.groupForTaskId)\n loadApi();\n } else if (data?.groupTaskId) {\n // sendMessage2(myUser.id, newGC.danhSachChat, newGC.groupForTaskId)\n loadApi();\n }\n }\n else {\n message.warning(`Bạn đã hết số lần đặt câu há»i vui lòng quay lại sau `)\n }\n\n };\n const onFinishBotFromModal = async () => {\n let values = {}\n values.Content = \"\"\n values.TimeCreate = getTodate();\n values.IsDelete = false;\n values.UserSendId = myUser.id;\n values.Id = 1;\n let newGC = { ...data }\n newGC.ngayTao = new Date().toISOString();\n let objbot = {\n \"id\": data.id,\n \"content\": values.Content,\n \"type\": toAliasString(selectedTags)\n }\n if (selectedTags == \"\") {\n message.info(\"Vui lòng chá»n tag để được há»— trợ chÃnh sác nhất 1!\")\n return\n }\n if (selectedTags == \"Fix bug\") {\n let cnt = 'Tôi có Ä‘oạn code sau : ' + code + 'và lá»—i tôi gặp phải' + bug + '. Hãy giúp tôi khắc phục nó.'\n objbot.content = cnt\n values.Content = cnt\n }\n if (selectedTags == \"Giải thÃch code\") {\n let cnt = code\n objbot.content = cnt\n values.Content = cnt\n }\n newGC.noiDungChat = JSON.stringify([...chatBot, values]);\n //todo\n if (canCallAPI()) {\n var res = await dispatch(putGroupChatApi2(newGC.id, newGC));\n await dispatch(\n getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id))\n );\n setCountTime(countTime + 1);\n setLastTime(Date.now());\n if (!res) {\n dispatch(\n getGroupChatByDsChatByChuyenDeApi2(room, Number(data.id))\n );\n dispatch(getChatBot())\n dispatch(sendChatBotApi(objbot))\n }\n sendMessage();\n\n handleClearInput();\n setInputValue(\"\");\n setSelectedTags(\"\");\n setBug('')\n setCode('')\n loadApi()\n }\n else {\n message.warning(`Bạn đã hết số lần đặt câu há»i vui lòng quay lại sau `)\n }\n setOpenFillCode(false)\n\n };\n useEffect(() => {\n if (messageRef && messageRef.current) {\n const { scrollHeight, clientHeight } = messageRef.current;\n messageRef.current.scrollTo({\n left: 0,\n top: scrollHeight - clientHeight,\n behavior: \"smooth\",\n });\n }\n }, [chats,chatBot]);\n useEffect(() => {\n CheckIssue();\n // if(data){\n // if(myUser && data?.danhSachHocVien){\n // setDsUser(JSON.stringify(data.danhSachHocVien))\n // setRoom(JSON.stringify(data.danhSachHocVien))\n // } else if (myUser && data?.dsMentor){\n // let danhSachMentorPhuTrach = JSON.parse(dataDangHoc?.find(item=>item.chuyenDeId==data.id).danhSachMentor||'[]')\n // setRoom(JSON.stringify([myUser?.id, ...danhSachMentorPhuTrach]))\n // setDsUser(JSON.stringify([myUser?.id, ...danhSachMentorPhuTrach]))\n // }\n // }\n if(dataDangHoc){\n // dsMentorDanhGia = JSON.parse(dataDangHoc?.find(item=>item.chuyenDeId==data?.id)?.danhSachMentor||'[]')\n }\n }, [data?.id, data, issueHocVienTheoTungChuyenDe?.length,dataDangHoc]);\n\n useEffect(() => {\n loadApi();\n }, [data,room]);\n useEffect(() => {\n if(data){\n dispatch(layDsNguoiDungByStringApi(data?.dsMentor))\n if(myUser && data?.danhSachHocVien){\n setDsUser(JSON.stringify(data.danhSachHocVien))\n setRoom(JSON.stringify(data.danhSachHocVien))\n } else if (myUser && data?.dsMentor){\n let danhSachMentorPhuTrach = JSON.parse(dataDangHoc?.find(item=>item.chuyenDeId==data.id).danhSachMentor||'[]')\n setRoom(JSON.stringify([myUser?.id, ...danhSachMentorPhuTrach]))\n setDsUser(JSON.stringify([myUser?.id, ...danhSachMentorPhuTrach]))\n }\n }\n }, [data?.id]);\n //Tạo realtime\n useEffect(() => {\n //Khi ngÆ°á»i dùng chuyển chat thì sẽ clear connect cu Ä‘i\n if (conection instanceof HubConnection) {\n // closeConnection();\n }\n joinRoom();\n\n return () => {\n // closeConnection();\n // setConnection(null);\n };\n }, []);\n\n const mini = () => {\n if (data == null || data === dataChatBot) {\n dispatch(ChangeActiveChatBot())\n }\n else if (current) dispatch(ChangeActiveChat2());\n else dispatch(ChangeActiveChat1());\n };\n const close = async () => {\n // await closeConnection();\n handleClearPopup();\n if (current) dispatch(ChangeActiveChat2());\n else dispatch(ChangeActiveChat1());\n };\n const [showFull, setShowFull] = useState(false)\n //vote mentor update issue\n const [thisIssue, setThisIssue] = useState()\n const [ndDanhGia, setNDdanhGia] = useState()\n const [mentorDuocDanhGia, setMentorDuocDanhGia] = useState(arrDSNguoiDung[0]?.id)\n const handleChangeTabs = (e) => {\n setMentorDuocDanhGia(e)\n }\n const handelUpdateIssue = async (trangThai) => {\n const issue = issueChat(data?.id)\n if (issue && 'trangThai' in issue) {\n const newIssue = { ...issue }\n setThisIssue(issue)\n newIssue.trangThai = trangThai\n\n // issue.trangThai=typeOfIssue.DA_HO_TRO\n try {\n // await UpdateIssuee(issue?.id, newIssue)\n // dispatch()\n setOpen(true)\n dispatch(putoptionalApi(newIssue.id, newIssue))\n message.success('Update State Succes !')\n } catch (error) {\n message.info('OOP! Kiểm tra lại Ä‘Æ°á»ng truyá»n')\n // console.log(error)\n }\n } else {\n message.info('OOP! Kiểm tra lại Ä‘Æ°á»ng truyá»n')\n }\n }\n const [valueVote, setValueVote] = useState({\n chamBaiDungHan: 5,\n chiaSeKienThuc: 5,\n kienThucCao: 5,\n nangDong: 5,\n hoTroHocVien: 5,\n thanThien: 5,\n })\n const desc = ['terrible', 'bad', 'normal', 'good', 'wonderful'];\n const handleVote = (type, e) => {\n const newobj = { ...valueVote }\n newobj[type] = e\n setValueVote(newobj)\n }\n const changeDanhGia = (e) => {\n setNDdanhGia(e.target.value)\n }\n const [open, setOpen] = useState()\n const handleOk = () => {\n const obj = {\n \"id\": 0,\n \"noiDungDanhGia\": ndDanhGia,\n \"danhGiaRank\": JSON.stringify(valueVote),\n \"nguoiDuocDanhGiaId\": mentorDuocDanhGia,\n \"nguoiDanhGiaId\": myUser.id,\n \"vaiTro\": \"\",\n \"issueId\": thisIssue.id,\n \"meta\": \"\",\n \"ngayTao\": new Date()\n }\n dispatch(postDanhGia(obj))\n\n dispatch(getIssueHocVienTheoTungChuyenDeApi());\n setOpen(false)\n }\n const handleCancel = () => {\n setOpen(false)\n }\n return activeChat ? (\n data?.tenChuyenDe ?\n (\n issue ? (\n <div className={`TabChat ${showFull ? 'showFull' : ''}`}>\n {contextHolder}\n <div className=\"TabChat_container\">\n <div className=\"TabChat_head\">\n <div className=\"title\">\n <img src={getHinhAnh2(data)} alt=\"\" className=\"w-10 h-10 object-cover rounded-full mr-2\" />\n\n <p className=\"TabChat_name\" title={data?.tenChuyenDe}>{data?.tenChuyenDe.substring(0, 20) + \" ...\"}</p>\n </div>\n <div className=\"action\">\n <MoreOutlined />\n <MinusOutlined\n onClick={() => {\n mini();\n }}\n />\n <CloseOutlined\n onClick={() => {\n close();\n }}\n />\n <i onClick={() => {\n setShowFull(!showFull)\n }} className={`${showFull ? \"fa-solid fa-down-left-and-up-right-to-center\" : \"fa-solid fa-up-right-and-down-left-from-center\"}`}></i>\n </div>\n </div>\n <div className=\"TabChat_content\">\n <div ref={messageRef} className=\"content\">\n {showContentChat(current ? chats2 : chats)}\n </div>\n </div>\n <div className=\"relative\">\n <Form form={form} onFinish={onFinish} className=\"TabChat_typing\">\n <Form.Item name=\"Content\" className=\"w-full\">\n <Input\n value={inputValue}\n disabled={!conection && !inputValue}\n onChange={handleInputChange}\n // onPressEnter={handleSubmit}\n className=\"typing\"\n placeholder=\"Nháºp ná»™i dung chat\"\n />\n {/* <InputEmoji\n name=\"Content\"\n disabled={!conection && !inputValue && issueChat(data?.chuyenDeId)}\n value={inputValue}\n onChange={setInputValue}\n onEnter={form.submit}\n className=\"typing w-full\"\n placeholder=\"Nháºp ná»™i dung chat\"\n /> */}\n\n </Form.Item>\n\n <div className=\"action\">\n <Button htmlType=\"submit\" disabled={!conection && !inputValue} className={`send ${inputValue.trim().length > 0 ? 'hover' : ''}`}>\n <SendOutlined />\n </Button>\n\n </div>{issue && (\n <div className=\"action\">\n <Button htmlType=\"button\" className=\"done\" onClick={() => {\n handelUpdateIssue(\"DA_HO_TRO\")\n }}>\n <CheckCircleOutlined />\n </Button>\n </div>\n )}\n </Form>\n </div>\n </div>\n {issue && (\n <div className=\"issue_container\">\n <Tooltip title={issue}>\n <p>{issue.length>20?issue.substring(0,17)+\"...\":issue} </p>\n </Tooltip>\n </div>\n )}\n <Modal\n width={800}\n className='modalDanhGia'\n footer={null}\n visible={open}\n okText='Gá»i'\n onCancel={handleCancel}\n\n >\n <p className=\"tenChuyenDe text-2xl\">Äánh giá mentor</p>\n <Tabs onChange={handleChangeTabs} tabBarGutter={30}\n >\n {dsMentorDanhGia?.map((itm, idx) => {\n let item = arrDSNguoiDung?.find(a=>a.id ==itm)\n return <TabPane style={{ color: '#fff' }} tab={item?.hoTen} key={item?.id}>\n <ul className=\"list-group bg-transparent\">\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chấm bà i đúng hạn</b>\n\n <Rate tooltips={desc} defaultValue={valueVote.chamBaiDungHan} onChange={(e) => {\n handleVote('chamBaiDungHan', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chia sẻ kiến thức</b>\n <Rate tooltips={desc} defaultValue={valueVote.chiaSeKienThuc} onChange={(e) => {\n handleVote('chiaSeKienThuc', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chia sẻ kiến thức nâng cao</b>\n <Rate tooltips={desc} defaultValue={valueVote.kienThucCao} onChange={(e) => {\n handleVote('kienThucCao', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Há»— trợ trên há»c viên</b>\n <Rate tooltips={desc} defaultValue={valueVote.hoTroHocVien} onChange={(e) => {\n handleVote('hoTroHocVien', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Năng Ä‘á»™ng</b>\n <Rate tooltips={desc} defaultValue={valueVote.nangDong} onChange={(e) => {\n handleVote('nangDong', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Thân thiện</b>\n <Rate tooltips={desc} defaultValue={valueVote.thanThien} onChange={(e) => {\n handleVote('thanThien', e)\n }} />\n </li>\n <li>\n <textarea className=\"block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" onChange={changeDanhGia} rows={3} placeholder=\"Vui lòng để lại và i dòng suy nghÄ© của bạn nhé ! \"></textarea>\n </li>\n </ul>\n <button className=\"btn_theme_red\" onClick={handleOk}>Gá»i</button>\n </TabPane>\n })}\n\n </Tabs>\n </Modal>\n </div>\n ) : (\n <div className={`TabChat ${showFull ? 'showFull' : ''}`}>\n <div className=\"TabChat_container\">\n <div className=\"TabChat_head\">\n <div className=\"title\">\n <img src={getHinhAnh2(data)} alt=\"\" className=\"w-10 h-10 object-cover rounded-full mr-2\" />\n\n <p className=\"TabChat_name\">{data?.tenBaiHoc ? `Group ${data?.tenBaiHoc?.substring(0, 20) + ' ...'}` : `${data?.tenChuyenDe?.substring(0, 20) + ' ...'}`}</p>\n </div>\n <div className=\"action\">\n <MoreOutlined />\n <MinusOutlined\n onClick={() => {\n mini();\n }}\n />\n <CloseOutlined\n onClick={() => {\n close();\n }}\n />\n <i onClick={() => {\n setShowFull(!showFull)\n }} className={`${showFull ? \"fa-solid fa-down-left-and-up-right-to-center\" : \"fa-solid fa-up-right-and-down-left-from-center\"}`}></i>\n </div>\n </div>\n <div className=\"TabChat_content\">\n <div className=\"content\">\n {showContentChat(current ? chats2 : chats)}\n </div>\n </div>\n <div className=\"relative\">\n <Form form={form} onFinish={onFinish} className=\"TabChat_typing\">\n <Form.Item name=\"Content\" className=\"w-full\">\n <Input\n value={inputValue}\n disabled={!conection && !inputValue}\n onChange={handleInputChange}\n // onPressEnter={handleSubmit}\n className=\"typing\"\n placeholder=\"Nháºp ná»™i dung chat\"\n />\n {/* <InputEmoji\n name=\"Content\"\n disabled={!conection && !inputValue}\n value={inputValue}\n onChange={setInputValue}\n onEnter={form.submit}\n className=\"typing w-full\"\n placeholder=\"Nháºp ná»™i dung chat\"\n /> */}\n\n </Form.Item>\n\n <div className=\"action\">\n <Button htmlType=\"submit\" disabled={!conection && !inputValue} className={`send ${inputValue.trim().length > 0 ? 'hover' : ''}`}>\n <SendOutlined />\n </Button>\n </div>\n </Form>\n </div>\n </div>\n </div>\n )\n )\n :\n (\n <div className={`TabChat ${showFull ? 'showFull' : ''}`}>\n {contextHolder}\n <div className=\"TabChat_container\">\n <div className=\"TabChat_head\">\n <div className=\"title\">\n <img src='https://play-lh.googleusercontent.com/3dh_AD3dKeum4QVdqjmHILF0JXXuQbe7PxUW9j0VAuOL9R8DXrk06InQhaq0HJ5AeA' alt=\"\" className=\"w-10 h-10 object-cover rounded-full mr-2\" />\n\n <p className=\"TabChat_name\">Trợ lý AI</p>\n </div>\n <div className=\"action\">\n <MoreOutlined />\n <MinusOutlined\n onClick={() => {\n mini();\n }}\n />\n {showFull ? <ShrinkOutlined onClick={() => {\n setShowFull(!showFull)\n }} /> : <ArrowsAltOutlined onClick={() => {\n setShowFull(!showFull)\n }} />}\n\n\n </div>\n </div>\n <div className=\"TabChat_content botChat\">\n <div ref={messageRef} className=\"content\">\n {showContentChatBot(chatBot)}\n </div>\n </div>\n\n <div className=\"relative\">\n <Form form={form} onFinish={onFinishBot} className=\"TabChat_typing\">\n <Form.Item name=\"Content\" className=\"w-full\">\n <Input\n value={inputValue}\n disabled={!conection && !inputValue}\n onChange={handleInputChange}\n // onPressEnter={handleSubmit}\n className=\"typing\"\n placeholder=\"Nháºp ná»™i dung chat\"\n />\n {/* <InputEmoji\n name=\"Content\"\n disabled={!conection && !inputValue && issueChat(data?.chuyenDeId)}\n value={inputValue}\n onChange={setInputValue}\n onEnter={form.submit}\n className=\"typing w-full\"\n placeholder=\"Nháºp ná»™i dung chat\"\n /> */}\n\n </Form.Item>\n\n <div className=\"action\">\n <Button htmlType=\"submit\" disabled={!conection && !inputValue} className={`send ${inputValue.trim().length > 0 ? 'hover' : ''}`}>\n <SendOutlined />\n </Button>\n\n </div>\n\n </Form>\n <div className=\"bot\">\n {tagsData.map((tag) => (\n <CheckableTag\n style={{\n color: '#fff', backgroundColor: '#8762e6b4',\n borderRadius: '10px'\n }}\n key={tag}\n checked={selectedTags.indexOf(tag) > -1}\n onChange={(checked) => handleChange(tag)}\n >\n {tag}\n </CheckableTag>\n ))}\n </div>\n </div>\n </div>\n\n <Modal\n width={800}\n className='modalDanhGia'\n visible={open}\n okText='Gá»i'\n onCancel={handleCancel}\n footer={null}\n >\n <p className=\"tenChuyenDe text-2xl\">Äánh giá mentor</p>\n <Tabs onChange={handleChangeTabs} >\n {dsMentorDanhGia?.map((itm, idx) => {\n let item = arrDSNguoiDung?.find(a=>a.id ==itm)\n // let infor = arrDSNguoiDung.find(nd=>nd.id==item)\n return <TabPane style={{ color: '#fff' }} tab={item?.hoTen} key={item?.id}>\n <ul className=\"list-group bg-transparent\">\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chấm bà i đúng hạn</b>\n\n <Rate tooltips={desc} defaultValue={valueVote.chamBaiDungHan} onChange={(e) => {\n handleVote('chamBaiDungHan', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chia sẻ kiến thức</b>\n <Rate tooltips={desc} defaultValue={valueVote.chiaSeKienThuc} onChange={(e) => {\n handleVote('chiaSeKienThuc', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Chia sẻ kiến thức nâng cao</b>\n <Rate tooltips={desc} defaultValue={valueVote.kienThucCao} onChange={(e) => {\n handleVote('kienThucCao', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Há»— trợ trên há»c viên</b>\n <Rate tooltips={desc} defaultValue={valueVote.hoTroHocVien} onChange={(e) => {\n handleVote('hoTroHocVien', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Năng Ä‘á»™ng</b>\n <Rate tooltips={desc} defaultValue={valueVote.nangDong} onChange={(e) => {\n handleVote('nangDong', e)\n }} />\n </li>\n <li className=\"list-group-item bg-transparent d-flex justify-content-between align-items-center text-sm\">\n <b>Thân thiện</b>\n <Rate tooltips={desc} defaultValue={valueVote.thanThien} onChange={(e) => {\n handleVote('thanThien', e)\n }} />\n </li>\n <li>\n <textarea className=\"block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" onChange={changeDanhGia} rows={3} placeholder=\"Vui lòng để lại và i dòng suy nghÄ© của bạn nhé ! \"></textarea> \n </li>\n </ul>\n <button className=\"btn_theme_red\" onClick={handleOk}>Gá»i</button>\n </TabPane>\n })}\n\n </Tabs>\n </Modal>\n {openBot && <Modal\n className=''\n visible={openBot}\n onCancel={() => {\n setOpenBot(false)\n }}\n footer={null}\n\n >\n <SyntaxHighlighter\n language=\"javascript\"\n style={dracula}\n wrapLines={true}\n showLineNumbers={true}\n >\n {/* {HtmlParser(contentBot)} */}\n {contentBot}\n </SyntaxHighlighter>\n </Modal>}\n {openFillCode && <Modal\n title=\"Äiá»n thông tin để được há»— trợ chÃnh xác\"\n className=''\n visible={openFillCode}\n onCancel={() => {\n setSelectedTags('')\n setOpenFillCode(false)\n }}\n footer={null}\n width={'80%'}\n >\n <div className=\"\">\n <div className=\"\">\n <textarea\n value={code}\n onChange={handleChangeCode}\n style={{\n fontFamily: \"'Fira Code', monospace\",\n fontSize: \"14px\",\n backgroundColor: \"#282a36\",\n color: \"#f8f8f2\",\n border: \"none\",\n width: \"100%\",\n minHeight: \"300px\",\n padding: \"10px\",\n }}\n placeholder=\"Enter your code here...\"\n />\n {selectedTags == 'Fix bug' && <textarea\n value={bug}\n onChange={handleChangeBug}\n style={{\n fontFamily: \"'Fira Code', monospace\",\n fontSize: \"14px\",\n backgroundColor: \"#282a36\",\n color: \"#f8f8f2\",\n border: \"none\",\n width: \"100%\",\n minHeight: \"100px\",\n padding: \"10px\",\n }}\n placeholder=\"Enter your bug here...\"\n />}<div className=\"text-right\">\n <button className=\"btn_theme_red\" onClick={onFinishBotFromModal}>Xác nháºn</button>\n </div>\n </div>\n\n </div>\n </Modal>}\n {openBot && <Modal\n className=''\n visible={openBot}\n onCancel={() => {\n setOpenBot(false)\n }}\n footer={null}\n\n >\n <SyntaxHighlighter\n language=\"javascript\"\n style={dracula}\n wrapLines={true}\n showLineNumbers={true}\n >\n {/* {HtmlParser(contentBot)} */}\n {contentBot}\n </SyntaxHighlighter>\n </Modal>}\n\n </div>\n )\n\n ) : (\n <></>\n );\n};\n\nexport default TabChat;\n","import React, { useEffect, useState } from 'react'\nimport TabChat from './TabChat';\nimport { useSelector } from 'react-redux';\n\n\nconst TabsChat=()=> {\n const { ActiveChat1, ActiveChat2, ActiveCurrent, dataChat1, dataChat2, ActiveChatBot, dataChatBot } =\n useSelector((state) => state.stackChatReducer);\n \n const [numTab,setNumTab]= useState(2);\n const [width,setWidth]=useState(window.innerWidth)\n\n const renderTab = ()=>{\n return numTab===2?\n <>\n {ActiveChat1&& <TabChat activeChat={ActiveChat1} data={dataChat1} current={false} key={'chat'+ 1}/>}\n {ActiveChat2&& <TabChat activeChat={ActiveChat2} data={dataChat2} current={true} key={'chat'+ 2}/>}\n {ActiveChatBot&& <TabChat activeChat={ActiveChatBot} data={dataChatBot} current={false} key={'chat'+ 3}/>}\n </>\n :<>\n <TabChat activeChat={ActiveChat1} key={'chat'+ 1}/>\n </>\n }\n\n \n useEffect(()=>{\n setWidth(window.innerWidth)\n\n const resize = ()=>{\n setWidth(window.innerWidth)\n if(window.innerWidth>992){\n setNumTab(2)\n }\n else {\n setNumTab(1)\n }\n }\n window.onresize = resize\n return () => {\n window.removeEventListener('resize',resize);\n }\n }) \n\n return (\n <div className='TabsChat'>\n {renderTab()}\n </div>\n )\n}\n\nexport default TabsChat","import React, { useEffect, useState } from \"react\";\nimport PopupChat from \"./components/PopupChat\";\nimport \"./style.css\";\nimport TabsChat from \"./components/TabsChat/TabsChat\";\n// import { getDSChuyenDeHocVienDangKyApi } from \"../../redux/reducer/chuyenDeReducer\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Drawer } from \"antd\";\n// import { getIssueHocVienTheoTungChuyenDeApi } from \"../../redux/reducer/issueReducer\";\nimport { AuthProvider } from \"../../hook/chatHub\";\nimport { getDSChuyenDeHocVienDangKyApi } from \"../../redux/reducer/chuyenDeReducer-Chat\";\nimport { getIssueHocVienTheoTungChuyenDeApi } from \"../../redux/reducer/issueReducer-Chat\";\nconst styleStackChat = {};\n\nconst StackChat = ({ showDrawer }) => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(getDSChuyenDeHocVienDangKyApi());\n dispatch(getIssueHocVienTheoTungChuyenDeApi())\n }, []);\n\n return (\n <div className=\"StackChat\">\n <AuthProvider >\n <PopupChat\n showDrawer={showDrawer}\n />\n <TabsChat\n />\n </AuthProvider>\n\n\n </div>\n );\n};\n\nexport default StackChat;\n","import React, { useEffect, useState } from 'react'\nimport './style.css'\nimport { history } from '../../App'\nimport useWindowSize from '../../hook/useWindowSize'\nimport { useLocation } from 'react-router-dom'\nconst FlashSale = () => {\n const [show,setShow] = useState(true)\n const {widthWindow} = useWindowSize()\n const location = useLocation();\n\n useEffect(() => {\n // Äặt lại trạng thái khi URL thay đổi\n setShow(true);\n }, [location]);\n return (\n <div className={`flashSale w-40 h-auto ${show?'':'hidden'} ${widthWindow<639?\"phone\":\"\"}`} >\n <div className=\"relative\">\n <img className='' src=\"https://apimentor11.cybersoft.edu.vn//images/24-05-2024-03-58-37-flashsale.png\" alt=\"\" onClick={() => { \n history.push('/package')\n }}/>\n <i className='fa fa-close absolute top-0 -right-6 bg-gray-700 rounded-full text-white p-2' onClick={() => { \n setShow(false)\n }}></i>\n </div>\n \n </div>\n )\n}\n\nexport default FlashSale","import React, { useEffect, useState } from 'react'\nimport './HeaderBottom.css'\nimport { NavLink } from 'react-router-dom';\nconst HeaderBottom = () => {\n const [showNav, setShowNav] = useState(false);\n const [hideTimeout, setHideTimeout] = useState(null);\n let lastScrollTop = 0;\n\n useEffect(() => {\n const handleScroll = () => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\n if (scrollTop > lastScrollTop) {\n setShowNav(true);\n }\n\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n }\n\n const timeout = setTimeout(() => {\n setShowNav(false);\n }, 1000);\n\n setHideTimeout(timeout);\n\n lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;\n };\n const handleTouchStart = () => {\n setShowNav(true);\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n }\n const timeout = setTimeout(() => {\n setShowNav(false);\n }, 2000);\n setHideTimeout(timeout);\n };\n\n window.addEventListener('scroll', handleScroll);\n\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('touchstart', handleTouchStart);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('touchstart', handleTouchStart);\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n }\n };\n }, [hideTimeout]);\n return (\n <div className={`bottom-nav ${showNav ? 'show h-16' : ''}`}>\n <div className=\"flex justify-between items-center h-full headerBotom\">\n <div className='w-1/3 text-center'>\n <NavLink to='/package' activeClassName=\"active\">\n <i className=\"text-xl fa-solid fa-cart-shopping\"></i>\n </NavLink>\n </div>\n <div className='w-1/3 text-center'>\n <NavLink to='/dash-broad' activeClassName=\"active\">\n <i className='text-xl fa fa-home'></i>\n </NavLink>\n </div>\n <div className='w-1/3 text-center'>\n <div to='' activeClassName=\"active\">\n <i className='text-xl fa-solid fa-bars'></i>\n </div>\n </div>\n\n </div>\n </div>\n )\n}\n\nexport default HeaderBottom","import React, { useEffect } from 'react';\n\nconst ZaloBtn = () => {\n useEffect(() => {\n const script = document.createElement('script');\n\n script.src = 'https://sp.zalo.me/plugins/sdk.js';\n script.async = true;\n\n document.body.appendChild(script);\n }, []);\n\n return (\n <div\n className='zalo-chat-widget'\n data-oaid='1427277038490183753'\n data-welcome-message='Rất vui khi được há»— trợ bạn!'\n data-autopopup='0'\n data-width='150'\n data-height='100'\n ></div>\n );\n};\n\nexport default ZaloBtn;","import React from 'react'\nimport { Comments, CustomChat, FacebookProvider, ShareButton } from 'react-facebook'\n\nconst FBChat = () => {\n return (\n// <FacebookProvider appId='303284849320308' chatSupport>\n// <CustomChat pageId='100046318225685' minimized='false' />\n// </FacebookProvider>\n \n<FacebookProvider appId=\"303284849320308\" chatSupport>\n{/* <ShareButton href=\"http://www.facebook.com\" className=\"my-classname\">\n Share\n</ShareButton> */}\n {/* <CustomChat pageId='100046318225685' minimized='false' >chat</CustomChat> */}\n {/* <Comments href=\"http://www.facebook.com\" /> */}\n {/* <CustomChat pageId=\"100046318225685\" minimized={false}/> */}\n\n</FacebookProvider>\n)\n}\n\nexport default FBChat\n\n","import React, { useEffect, useRef } from 'react';\n\nconst NotificationSound = ({ playSound }) => {\n const audioRef = useRef(null);\n useEffect(() => {\n if (playSound && audioRef.current) {\n const playPromise = audioRef.current.play();\n if (playPromise !== undefined) {\n playPromise.catch(error => {\n \n });\n }\n }\n }, [playSound]);\n\n return (\n <audio ref={audioRef} src=\"/notifica.wav\" preload=\"auto\" />\n );\n};\n\nexport default NotificationSound;\n","import React from \"react\";\nimport \"./sideNavigation.css\";\nimport classNames from \"classnames\";\n\nimport { NavLink, useParams } from \"react-router-dom\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport { checkActiveNavlink } from \"../../routes/utitlity\";\nexport default function ItemSidebar({ item, isCollapsed }) {\n let { chuyenDeId } = useParams();\n const { widthWindow, heightWindow } = useWindowSize();\n let isActive = checkActiveNavlink(item.path);\n const handleClick = (e) => {\n if (item.key == '4') {\n e.preventDefault();\n window.open(item.path, '_blank');\n }\n };\n return (\n <li>\n <NavLink\n to={item.key=='4'?\"#\":`${item.path}/${chuyenDeId}`}\n isActive={true}\n onClick={handleClick}\n className={() => {\n return classNames(\n \"flex flex-col items-center p-2 text-paragraph rounded-lg justify-center uppercase text-center\",\n {\n \" bg-gray-200 text-black\": isActive,\n \" hover:text-black hover:bg-gray-200 text-white\": !isActive,\n },\n {\n \"lg:justify-start\": !isCollapsed,\n }\n );\n }}\n >\n <span className=\"lg:text-xl xl:text-xl text-2xl\">{item?.icon}</span>\n {widthWindow > 1024 && !isCollapsed ? <span className=\"ml-0\">{item.name}</span> : \"\"}\n </NavLink>\n </li>\n );\n}\n","import React from \"react\";\nimport \"./sideNavigation.css\";\n\nimport ItemSidebar from \"./ItemSidebar\";\nimport { subItems } from \"../utils\";\n\nexport default function SideNavigation({ isCollapsed }) {\n return (\n <div id=\"sideNavigation\">\n <aside className=\"w-full h-full\" aria-label=\"Sidenav\">\n <div className=\"overflow-y-auto py-5 px-1 h-full side_navigation_theme\">\n <ul className=\"space-y-2\">\n {subItems.map((item, index) => {\n return <ItemSidebar item={item} isCollapsed={isCollapsed} key={index} />;\n })}\n </ul>\n </div>\n </aside>\n </div>\n );\n}\n","import { useSelector } from \"react-redux\";\nimport { selectListLoTrinh } from \"../../template/HeaderTask/loTrinhSlice\";\nexport const routesBreadcrumb = [\n {\n path: \"/\",\n breadcrumb: function HomeIcon(params) {\n return (\n <span>\n <i class=\"fa fa-home\" aria-hidden=\"true\"></i> <span>Dashboard</span>\n </span>\n );\n },\n },\n { path: \"/task-page\", breadcrumb: TaskBreadcumb },\n { path: \"/task-page/:chuyenDeId\", breadcrumb: ModuleName },\n {\n path: \"/pratice-page\",\n breadcrumb: PracticeBreadcumb,\n },\n { path: \"/pratice-page/:chuyenDeId\", breadcrumb: ModuleName },\n\n {\n path: \"/learn-video\",\n breadcrumb: \"Video\",\n },\n {\n path: \"/task-page/detail-screen-bai-tap/\",\n breadcrumb: \"Bà i táºp\",\n },\n {\n path: \"/task-page/detail-screen-bai-tap/:id\",\n breadcrumb: \"\",\n },\n];\n\nfunction PracticeBreadcumb() {\n return (\n <span>\n <i class=\"fa fa-dumbbell\"></i> <span>Lyện táºp</span>\n </span>\n );\n}\nfunction TaskBreadcumb() {\n return (\n <span>\n <i class=\"fa fa-book-reader\"></i> <span>Nhiệm vụ</span>\n </span>\n );\n}\nfunction ModuleName({ match }) {\n const list = useSelector(selectListLoTrinh);\n let { chuyenDeId } = match.params;\n let loTrinh = list.find((item) => item.chuyenDeId == chuyenDeId);\n\n return <span>{loTrinh?.tenChuyenDe}</span>;\n}\n","import React from \"react\";\nimport TitleTaskNavigate from \"../../TitleTaskNavigate/TitleTaskNavigate\";\n\nexport default function ItemTask({ task }) {\n let iconIsAllow = task.truyCap ? (\n <i class=\"fa fa-unlock-alt text-green-600\"></i>\n ) : (\n <i class=\"fa fa-lock text-red-500\"></i>\n );\n let iconIsFinish = task.hoanThanh ? (\n <i class=\"fa-solid text-white rounded-full bg-green-600 h-5 w-5 text-center leading-6 fa-check\"></i>\n ) : (\n <i class=\"fa-solid fa-triangle-exclamation text-red-500\"></i>\n );\n return (\n <div className=\"flex items-center justify-between\">\n <TitleTaskNavigate task={task} />\n <div className=\" flex space-x-3 items-center justify-between w-72 \">\n <span className=\" text-xs\">\n {task.tongExp} XP + {task.tongCoin} COIN\n </span>\n <div className=\"space-x-5 w-14 flex justify-between\">\n {/* {iconIsAllow} */}\n {iconIsFinish}\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport AnimateHeight from \"react-animate-height\";\n\nimport ItemTask from \"./ItemTask\";\nimport ProgressLine from \"../../ProgressLine/ProgressLine\";\nimport { loaiNhiemVu } from \"../../../utils/taskUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function CollapseTask({ dataContent, index }) {\n const { t } = useTranslation()\n\n const [height, setHeight] = useState(0);\n let soLuongHoanThanh = dataContent?.danhSachNoiDung.filter((item) => {\n return item.hoanThanh;\n }).length;\n\n useEffect(() => {\n if (soLuongHoanThanh !== 0 && soLuongHoanThanh !== dataContent.danhSachNoiDung.length) {\n setHeight(\"auto\");\n }\n return () => {\n setHeight(\"0\");\n };\n }, [soLuongHoanThanh, dataContent.danhSachNoiDung.length]);\n if (!dataContent) {\n return null;\n }\n\n let renderDanhSachNhiemVu = () => {\n return dataContent.danhSachNoiDung\n .filter(\n ({ maLoaiNhiemVu }) =>\n maLoaiNhiemVu != loaiNhiemVu.HOMEWORK && maLoaiNhiemVu != loaiNhiemVu.RECORD\n )\n .map((item, index) => {\n return <ItemTask task={item} />;\n });\n };\n let renderListBaiTap = () => {\n let listBaiTap = dataContent.danhSachNoiDung.filter(\n ({ maLoaiNhiemVu }) =>\n maLoaiNhiemVu == loaiNhiemVu.HOMEWORK && maLoaiNhiemVu != loaiNhiemVu.RECORD\n );\n if (listBaiTap.length == 0) return;\n return (\n <div>\n <div className=\"w-5/5 my-2 mx-auto h-0.5 bg-white\"></div>\n <h1 className=\"text-content text-center tenChuyenDe py-5\" style={{ fontSize: 20 }}>\n Bà i táºp vá» nhà \n </h1>\n {listBaiTap.map((item, index) => {\n return <ItemTask task={item} />;\n })}\n </div>\n );\n };\n let renderListRecord = () => {\n let listBaiTap = dataContent.danhSachNoiDung.filter(\n ({ maLoaiNhiemVu }) => maLoaiNhiemVu == loaiNhiemVu.RECORD\n );\n if (listBaiTap.length == 0) return;\n return (\n <div className=\"space-y-1.5\">\n <h1 className=\"text-content text-center tenChuyenDe py-5\" style={{ fontSize: 20 }}>\n\n {t('loTrinh.xemLaiBuoiHoc')}\n\n </h1>\n {listBaiTap.map((item, index) => {\n return <ItemTask task={item} />;\n })}\n </div>\n );\n };\n return (\n <div className=\" c-col-full card-theme p-1 px-2 relative\">\n <div className=\" text-black overflow-hidden\">\n <button\n aria-expanded={height !== 0}\n aria-controls=\"example-panel\"\n onClick={() => setHeight(height === 0 ? \"auto\" : 0)}\n className=\"w-full space-y-2 w rounded \"\n >\n <p className=\"font-bold text-base text-left\">{dataContent.tenMonHoc}</p>\n <div className=\"flex items-center space-x-10 pt-1\">\n <p className=\"text-content flex-shrink-0\">\n {t('loTrinh.tienDo')}\n\n </p>\n <ProgressLine\n type=\"blue\"\n percent={\n (soLuongHoanThanh / dataContent.danhSachNoiDung.length).toFixed(1) * 100 || 0\n }\n />\n <p className=\"flex-shrink-0 text-content\">\n {t('loTrinh.nhiemVuHoanThanh')}\n : {soLuongHoanThanh}/{dataContent.danhSachNoiDung.length}\n </p>\n <i\n className={`fa fa-angle-up transform text-white ${height === \"auto\" ? \"rotate-180\" : \"rotate-0\"\n }`}\n ></i>\n </div>\n </button>\n <AnimateHeight id=\"example-panel\" duration={500} height={height}>\n <div className=\"\">\n <div className=\"space-y-1.5 c-card-content \">\n {renderDanhSachNhiemVu()}\n {renderListBaiTap()}\n {renderListRecord()}\n </div>\n </div>\n </AnimateHeight>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Modal } from \"antd\";\nimport { NavLink, useParams } from \"react-router-dom\";\nimport CollapseTask from \"./CollapseTask/CollapseTask\";\nimport {\n getDataTaskPageAction,\n getDataTaskPageTrialAction,\n} from \"../../redux/reducer/taskPageSlice\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport {\n useLstLoTrinhDangHoc,\n useLstLoTrinhUser,\n} from \"../../hook/useLstLoTrinhUser\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nexport default function OutlineTaskList() {\n let { dataTaskPage } = useSelector((state) => state.taskPageSlice);\n let { chuyenDeId } = useParams();\n\n const dispatch = useDispatch();\n\n let isDemoUser = useMemo(() => checkDemoUser(), []);\n let userInfo = localStorageServ.userInfo.get();\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n useEffect(() => {\n if (dataDangHoc) {\n isDemoUser || !userInfo.kichHoat || !isLearning\n ? dispatch(getDataTaskPageTrialAction(chuyenDeId))\n : dispatch(getDataTaskPageAction(chuyenDeId));\n }\n }, [dataDangHoc, chuyenDeId]);\n\n const [isModalVisible, setIsModalVisible] = useState(false);\n const showModal = () => {\n setIsModalVisible(true);\n };\n const handleOk = () => {\n setIsModalVisible(false);\n };\n const handleCancel = () => {\n setIsModalVisible(false);\n };\n return (\n <div>\n <button\n className=\" text-xs rounded p-1 block border-1 border-white text-white\"\n onClick={showModal}\n >\n <i class=\"fa fa-bars\"></i>{\" \"}\n <span className=\"text-xs\">Course Outline</span>\n </button>\n <Modal\n visible={isModalVisible}\n onOk={handleOk}\n onCancel={handleCancel}\n footer={null}\n className=\"rounded\"\n >\n <div className=\"c-col-full space-y-3\">\n <div>Danh sách nhiệm vụ</div>\n {dataTaskPage?.danhSachMonHoc?.map((item, index) => {\n return (\n <CollapseTask dataContent={item} key={index} index={index} />\n );\n })}\n </div>\n </Modal>\n </div>\n );\n}\n","import { Breadcrumb } from \"antd\";\nimport React, { useEffect, useMemo } from \"react\";\nimport useBreadcrumbs from \"use-react-router-breadcrumbs\";\nimport { routesBreadcrumb } from \"./configBreadCrumb\";\nimport { useSelector } from \"react-redux\";\nimport { selectListLoTrinh } from \"../../template/HeaderTask/loTrinhSlice\";\nimport { useParams } from \"react-router-dom\";\nimport classNames from \"classnames\";\nimport \"./style.scss\";\nimport OutlineTaskList from \"./OutlineTaskList\";\nimport { useState } from \"react\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { NavLink } from \"react-router-dom\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { useLstLoTrinhDangHoc, useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport { history } from \"../../App\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nlet BreadCrumbNav = ({}) => {\n let { chuyenDeId, taskId, monHocId } = useParams();\n let [tenTask, setTenTask] = useState();\n let isDemoUser = useMemo(() => checkDemoUser(), []);\n let userInfo = localStorageServ.userInfo.get();\n\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n useEffect(() => {\n if (dataDangHoc) {\n isDemoUser || !userInfo.kichHoat || !isLearning\n ? servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setTenTask(res.data.content.tenNhiemVu);\n })\n .catch((err) => {\n \n })\n : servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setTenTask(res.data.content.tenNhiemVu);\n })\n .catch((err) => {\n \n });\n }\n }, [chuyenDeId, taskId, monHocId, dataDangHoc]);\n const list = useSelector(selectListLoTrinh);\n let loTrinh = list.find((item) => item.chuyenDeId == chuyenDeId);\n const breadcrumbs = useBreadcrumbs(routesBreadcrumb);\n let renderBeadcrumbs = () => {\n if (breadcrumbs.length == 3) {\n return (\n <>\n <Breadcrumb.Item>\n <NavLink key={\"1\"} to={\"/\"}>\n <span className=\"text-yellow\">{breadcrumbs[0].breadcrumb}</span>\n </NavLink>\n </Breadcrumb.Item>\n <Breadcrumb.Item>\n <span\n className={classNames({\n \"text-white\": breadcrumbs.length == 3,\n \"text-yellow\": breadcrumbs.length > 3,\n })}\n >\n {breadcrumbs[1].breadcrumb}\n </span>\n </Breadcrumb.Item>\n <Breadcrumb.Item>\n <span className=\"text-white\">{loTrinh?.tenChuyenDe}</span>\n </Breadcrumb.Item>\n </>\n );\n }\n return (\n <>\n <Breadcrumb.Item>\n <NavLink key={\"1\"} to={\"/\"}>\n <span className=\"text-yellow\">{breadcrumbs[0].breadcrumb}</span>\n </NavLink>\n {/* </NavLink> */}\n </Breadcrumb.Item>\n <Breadcrumb.Item>\n <NavLink\n key={breadcrumbs[1].pathname}\n to={\"/task-page/\" + chuyenDeId}\n >\n <span className=\"text-yellow\">{breadcrumbs[1].breadcrumb}</span>\n </NavLink>\n </Breadcrumb.Item>\n <Breadcrumb.Item>\n <span className=\"text-white\">{tenTask}</span>\n </Breadcrumb.Item>\n </>\n );\n };\n return (\n <div className=\"z-50 h-8 top-16 right-0 flex pl-2 bg-black fixed w-full items-center justify-between px-5 \">\n <div>{renderBeadcrumbs()}</div>\n {breadcrumbs.length > 3 && <OutlineTaskList />}\n </div>\n );\n};\nexport default BreadCrumbNav;\n","import React, { useEffect, useState } from \"react\";\nimport { Layout } from \"antd\";\nimport SideNavigation from \"./SideNavigation/SideNavigation\";\nimport { Outlet } from \"react-router-dom\";\nimport HeaderTask from \"./HeaderTask/HeaderTask\";\nimport { useSelector } from \"react-redux\";\nimport useWindowSize from \"../hook/useWindowSize\";\nimport BreadCrumbNav from \"../components/BreadCrumbNav/BreadCrumbNav\";\nimport StackChat from \"../components/StackChat/StackChat\";\nimport FlashSale from \"../components/FlashSale/FlashSale\";\nimport HeaderBottom from \"./HeaderBottom/HeaderBottom\";\nimport ZaloBtn from \"../components/ZaloOA/ZaloOA\";\nimport FBChat from \"../components/FacebookChat/FBChat\";\nimport { connection } from \"../App\";\nimport NotificationSound from \"../components/NotificaSound/NotificationSound\";\nimport { selectThongTinMoRong } from \"../redux/reducer/authReducer\";\nimport localStorageServ from \"../services/locaStorage.service\";\nconst { Header, Content, Sider } = Layout;\nexport const checkChatMess = (content, searchValue) =>\n (Array.isArray(content) && content.includes(searchValue)) ||\n (typeof content === 'string' && content === searchValue);\n\nexport default function HomeSidebar(props) {\n const [playSound, setPlaySound] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const theme = useSelector((state) => state.theme.theme);\n let root = document.documentElement;\n let userInfo = localStorageServ.userInfo.get();\n root.classList.add(theme);\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 768 ? true : false;\n const extractLayoutSideBar = (collapsed) => {\n if (widthWindow > 1024 && !collapsed) {\n return 120;\n } else {\n return 40;\n }\n };\n useEffect(() => {\n \n try{\n connection.on('ReceiveMessage', (userM) => {\n if(checkChatMess(userM,userInfo?.id)){\n setPlaySound(true)\n setTimeout(() => setPlaySound(false), 1000)\n }\n })\n connection.on('ReceiveMessage2', (userM) => {\n if(checkChatMess(userM,userInfo?.id)){\n setPlaySound(true)\n setTimeout(() => setPlaySound(false), 1000)\n }\n })\n }catch (error) {\n // success(\"Bạn vừa kết nối thà nh công chat !\");\n }\n}, [connection]);\n return (\n <Layout style={{ minHeight: \"100vh\" }}>\n <Header\n style={{\n background: \"black\",\n zIndex: 100,\n padding: isPhone ? \"0 10px\" : \"0 15px\",\n }}\n className=\"flex h-16 fixed top-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderTask />\n </Header>\n {isPhone && (\n <div\n style={{\n // background:\"#fff\",\n zIndex: 100,\n // padding: isPhone ? \"0 10px\" : \"\",\n }}\n className=\"flex h-16 fixed bottom-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderBottom />\n </div>\n )}\n <Layout>\n {isPhone ? (\n \"\"\n ) : (\n <Sider\n trigger={null}\n collapsible\n collapsed={collapsed}\n width={extractLayoutSideBar(collapsed)}\n className=\" fixed top-20 left-0 \"\n >\n <SideNavigation isCollapsed={collapsed} />\n </Sider>\n )}\n\n <Layout\n style={{\n margin: `0px 0 0 ${isPhone?0:extractLayoutSideBar(collapsed)}px`,\n paddingTop: \"64px\",\n }}\n className=\"bg-content\"\n >\n <Content className=\" relative\">\n <div className=\"pt-8\">\n <BreadCrumbNav />\n <div className={`${isPhone?\"phone\":\"\"} page_container`}>\n <Outlet />\n <ZaloBtn/>\n <FBChat/>\n {isPhone ? (\n \"\"\n ) : (\n <StackChat showDrawer={props.showDrawer} />\n )}\n </div>\n </div>\n </Content>\n <FlashSale/>\n </Layout>\n <NotificationSound playSound={playSound} />\n </Layout>\n </Layout>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Drawer, Layout } from \"antd\";\nimport { Outlet } from \"react-router-dom\";\nimport HeaderTask from \"./HeaderTask/HeaderTask\";\nimport { useSelector } from \"react-redux\";\nimport { dataHeader } from \"./utils\";\nimport StackChat from \"../components/StackChat/StackChat\";\nimport DanhSachChat from \"../components/DanhSachChat/DanhSachChat\";\nimport localStorageServ from \"../services/locaStorage.service\";\nimport { connection, history } from \"../App\";\nimport PackageBottomFix from \"../pages/ServicePakages/PackageBottomFix\";\nimport { selectThongTinMoRong } from \"../redux/reducer/authReducer\";\nimport { useMediaQuery } from \"react-responsive\";\nimport useWindowSize from \"../hook/useWindowSize\";\nimport FlashSale from \"../components/FlashSale/FlashSale\";\nimport HeaderBottom from \"./HeaderBottom/HeaderBottom\";\nimport ZaloBtn from \"../components/ZaloOA/ZaloOA\";\nimport FBChat from \"../components/FacebookChat/FBChat\";\nimport NotificationSound from \"../components/NotificaSound/NotificationSound\";\nimport { checkChatMess } from \"./HomeSidebar\";\nexport const kiemTraThoiGian = () => {\n const thoiGianDaLuu = localStorageServ.timeDemo.get()\n if (thoiGianDaLuu) {\n const thoiGianHienTai = Date.now();\n const thoiGianHienTaiMilliseconds = parseInt(thoiGianHienTai);\n console.log('thoiGianHienTaiMilliseconds: ', thoiGianHienTaiMilliseconds);\n const thoiGianDaLuuMilliseconds = parseInt(Date.parse(thoiGianDaLuu));\n console.log('thoiGianDaLuuMilliseconds: ', thoiGianDaLuuMilliseconds);\n\n // So sánh thá»i gian hiện tại vá»›i thá»i gian đã lÆ°u, và dụ: sau 1 phút\n if (thoiGianHienTaiMilliseconds >= thoiGianDaLuuMilliseconds) {\n // Hiển thị thông báo\n alert('Äã đến thá»i hạn!');\n localStorageServ.clearLocalStorage()\n history.push('demo')\n // Xóa thá»i gian đã lÆ°u trong localStorage\n localStorageServ.timeDemo.remove()\n }\n }\n};\nconst { Header, Content, Sider } = Layout;\n\n function HomeTemplate(props) {\n \n const [playSound, setPlaySound] = useState(false);\n const theme = useSelector((state) => state.theme.theme);\n \n let userInfo = localStorageServ.userInfo.get();\n let root = document.documentElement;\n root.classList.add(theme);\n const { widthWindow, heightWindow } = useWindowSize();\n \n const isPhone = widthWindow < 768 ? true : false\n useEffect(() => {\n const interval = setInterval(() => {\n kiemTraThoiGian();\n }, 600000); // Kiểm tra má»—i 10p\n\n // Xóa interval khi component unmount\n return () => clearInterval(interval);\n }, []);\n useEffect(() => {\n try{\n connection.on('ReceiveMessage', (userM) => {\n if(checkChatMess(userM,userInfo?.id)){\n setPlaySound(true)\n setTimeout(() => setPlaySound(false), 1000)\n }\n })\n connection.on('ReceiveMessage2', (userM) => {\n if(checkChatMess(userM,userInfo?.id)){\n setPlaySound(true)\n setTimeout(() => setPlaySound(false), 1000)\n }\n })\n }catch (error) {\n // success(\"Bạn vừa kết nối thà nh công chat !\");\n }\n}, [connection]);\n return (\n <Layout style={{ minHeight: \"100vh\" }}>\n <Header\n style={{\n background: \"black\",\n padding:isPhone?'0 10px':'0 15px'\n }}\n className=\"flex h-20 fixed top-0 left-0 w-full z-50 items-center justify-between space-x-2\"\n >\n <HeaderTask/>\n </Header>\n {isPhone && (\n <div\n style={{\n // background:\"#fff\",\n zIndex: 100,\n // padding: isPhone ? \"0 10px\" : \"\",\n }}\n className=\"flex h-16 fixed bottom-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderBottom />\n </div>\n )}\n <Layout>\n <Layout\n style={{\n margin: `80px 0 0 0`,\n padding: \"0\",\n }}\n className=\"bg-content\"\n >\n <Content>\n <Outlet className=\"\" />\n <ZaloBtn/>\n <FBChat/>\n\n {isPhone ? (\n \"\"\n ) : (\n <StackChat showDrawer={props.showDrawer} />\n )}\n {/* {!userInfo.kichHoat && <PackageBottomFix/>} */}\n </Content>\n <FlashSale/>\n </Layout>\n <NotificationSound playSound={playSound} />\n </Layout>\n </Layout>\n );\n}\nexport default HomeTemplate","import { ConvertNameUser } from \"./ConvertNameUser\";\nexport const gerateDataSetChart = (arrData, canvas, userInfo,t) => {\n const ctx = canvas.getContext(\"2d\");\n\n const gradient_bg_1 = ctx.createLinearGradient(0, 0, 0, 250);\n // gradient_bg_1.addColorStop(0, \"rgba(251, 128, 133,1)\");\n // gradient_bg_1.addColorStop(1, \"rgba(251, 128, 133,0)\");\n /**background: linear-gradient(90deg, #00D16D 0%, #00D18A 4.52%, #00D1D2 14.69%, #00D1FA 19.2%, #005DEC 47.45%, #D31BFF 71.17%, #FF4C04 94.89%, #EDD629 112.96%),\nlinear-gradient(0deg, #FFFFFF, #FFFFFF);\n */\n gradient_bg_1.addColorStop(0, \"rgba(231, 18, 143, 1.0)\");\n // A kind of blue for max.\n gradient_bg_1.addColorStop(0.7, \"rgba(0, 173, 238, 1.0)\");\n gradient_bg_1.addColorStop(1, \"#EDD629\");\n const arrColor = [\n gradient_bg_1,\n \"rgb( 117, 95, 211,0.8)\",\n \"rgb( 70, 220, 216)\",\n \"rgb(106, 201, 119,0.9)\",\n \"rgb(253, 206, 0,0.8)\",\n ];\n\n let userIndex = arrData.findIndex((item) => {\n return item?.hoTen === userInfo?.hoTen;\n });\n if (userIndex !== -1) {\n let temp = arrData[0];\n arrData[0] = arrData[userIndex];\n arrData[userIndex] = temp;\n }\n\n return arrData.map((dataUser, index) => {\n let newDataUser = { ...dataUser };\n let dataShow = [...newDataUser.lstSoPhut];\n\n let nameUser =\n dataUser?.hoTen === userInfo?.hoTen ? \"Của bạn\" : ConvertNameUser(dataUser?.hoTen);\n return {\n label: arrData.length === 1 ? t('trangChu.tocDoXemVideo') : nameUser,\n fill: \"start\",\n // backgroundColor: index === 0 ? arrColor[index] : \"transparent\",\n // borderColor: index === 0 ? \"#FF6384\" : arrColor[index],\n // pointBackgroundColor: index === 0 ? \"#FF6384\" : arrColor[index],\n // backgroundColor: index === 0 ? arrColor[index] : \"transparent\",\n backgroundColor: \"transparent\",\n borderColor: arrColor[index],\n pointBackgroundColor: arrColor[index],\n lineTension: 0.4,\n cubicInterpolationMode: \"monotone\",\n pointStyle: \"circle\",\n pointRadius: 0,\n pointHoverRadius: 6,\n borderWidth: 4,\n data: dataShow,\n fontColor: \"#ffffff\",\n };\n });\n};\n\nexport const generateOption = (statisArr) => ({\n // devicePixelRatio: 4,\n // fix chữ trên chart bị méo\n responsive: true,\n maintainAspectRatio: false,\n\n title: {\n display: true,\n text: \"TITLE HERE\",\n fontSize: 20,\n },\n legend: {\n position: \"right\",\n labels: {\n fontSize: 5,\n },\n },\n layout: {\n padding: 0,\n marggin: 0,\n },\n datasetStrokeWidth: 2,\n pointDotStrokeWidth: 4,\n scales: {\n xAxes: {\n display: true,\n\n title: {\n display: false,\n },\n grid: {\n display: false,\n },\n ticks: {\n // color: theme == DARK_MODE ? \"#ffffff\" : \"#000\",\n color: \"white\",\n },\n },\n yAxes: {\n title: {},\n grid: {\n // color: theme == DARK_MODE ? \"#ffffff\" : \"#88888822\",\n color: \"white\",\n },\n ticks: {\n min: 0, // it is for ignoring negative step.\n beginAtZero: true,\n stepSize: 20, // if i use this it always set it '1', which look very awkward if it have high value e.g. '100'.\n padding: 10,\n fontSize: 14,\n // color: theme == DARK_MODE ? \"#ffffff\" : \"#000\",\n color: \"white\",\n },\n suggestedMin: 0,\n suggestedMax: Math.max(statisArr[0]) + 20,\n },\n },\n\n plugins: {\n legend: {\n padding: 0,\n align: \"end\",\n labels: {\n usePointStyle: true,\n fontSize: 8,\n padding: 5,\n boxWidth: 3,\n pointStyle: \"circle\",\n // color: theme == DARK_MODE ? \"#ffffff\" : \"#000\",\n color: \"white\",\n // color toc do xem video\n },\n },\n xAxes: {\n labels: {\n // color: theme == DARK_MODE ? \"#ffffff\" : \"#000\",\n color: \"red\",\n },\n },\n },\n interaction: {\n intersect: false,\n },\n radius: 0,\n tooltips: {\n yAlign: \"bottom\",\n xAlign: \"bottom\",\n },\n});\n","import React, { useEffect, useState } from \"react\";\n\nimport ModalContentIcon from \"../../../components/ModalContentIcon/ModalContentIcon\";\nimport { iconDashBoard } from \"../../../components/ModalContentIcon/utilities\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\nexport default function DetailTaskByTime({ typeFilter = 0 }) {\n const { t } = useTranslation()\n\n const [statis, setStatis] = useState([]);\n useEffect(() => {\n servCodingCamp\n .getThongKeHocDashboard(1, typeFilter)\n .then((res) => {\n setStatis(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n let task = statis[0]?.soLuongHoanThanh;\n let course = statis[4]?.soLuongHoanThanh;\n let project = statis[5]?.soLuongHoanThanh;\n return (\n <div className=\"flex justify-between items-center px-10 py-0 \">\n <div className=\"flex flex-col items-center justify-start text-content h-16 \">\n <ModalContentIcon loai={iconDashBoard.TaskTheoTungHangMuc} />\n <span className=\" \"> {t('trangChu.nhiemVu')}\n </span>\n <span>{task}</span>\n </div>\n <div className=\"flex flex-col items-center justify-start text-content h-16 \">\n <ModalContentIcon loai={iconDashBoard.KhoaHocTheoTungHangMuc} />\n\n <span className=\" \"> {t('trangChu.khoaHoc')}\n</span>\n <span>{course}</span>\n </div>\n <div className=\"flex flex-col items-center justify-start text-content h-16\">\n <ModalContentIcon loai={iconDashBoard.DuAnTheoTungHangMuc} />\n <span className=\" \">{t('trangChu.duAn')}\n</span>\n <span className=\"\">{project}</span>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ContentTab from \"../../../components/ContentTab/ContentTab\";\nimport DetailTaskByTime from \"../DailyXpByTime/DetailTaskByTime\";\nimport { Trans } from \"react-i18next\";\nconst data = [\n {\n label: <Trans i18nKey='trangChu.ngay' />,\n key: \"1\",\n children: <DetailTaskByTime task={20} course={37} project={12} typeFilter={0} />,\n },\n {\n label: <Trans i18nKey='trangChu.thang' />,\n key: \"2\",\n children: <DetailTaskByTime task={24} course={35} project={17} typeFilter={1} />,\n },\n {\n label: <Trans i18nKey='trangChu.nam' />,\n key: \"3\",\n children: <DetailTaskByTime task={55} course={27} project={32} typeFilter={2} />,\n },\n {\n label: <Trans i18nKey='trangChu.tatCa' />,\n key: \"4\",\n children: <DetailTaskByTime task={82} course={31} project={82} typeFilter={3} />,\n },\n];\nexport default function Static() {\n return (\n <div className=\" px-2 \">\n <ContentTab paddingHeaderX={25} paddingHeaderY={3} paddingTabItemX={15} paddingTabItemY={20} data={data} />\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Line } from \"react-chartjs-2\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { setLabelChart, setStatisChartArr } from \"../../../redux/reducer/chartReducer\";\nimport { generateOption, gerateDataSetChart } from \"../../../utils/GenerateDataSetChart\";\nimport { getDayName } from \"../../../utils/GenerateDay\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport Static from \"./Static\";\nimport { useTranslation } from \"react-i18next\";\nconst ChartStatisticTimeLearning = React.memo(() => {\n const [activeIndexFitler, setActiveIndexFiler] = useState(0);\n const [activeChartIndex, setActiveChartIndex] = useState(0);\n\n const dispatch = useDispatch();\n const userInfo = localStorageServ.userInfo.get();\n\n const { labelChart, statisChartArr } = useSelector((state) => state.chart);\n\n const labelChartRedux = labelChart;\n const statisChartRedux = statisChartArr;\n const statisArr = statisChartRedux.map((item) => {\n return { ...item };\n });\n const labeArr = [...labelChartRedux];\n const handleChangeFilter = (activeIndexFitler, activeChartIndex) => {\n let top = activeChartIndex === 1;\n servCodingCamp\n .getDataChartThongKe(activeIndexFitler, top)\n .then((res) => {\n let labels = getDayName(res.data.content[0].lstSoPhut.length, activeIndexFitler);\n\n dispatch(setStatisChartArr(res.data.content));\n dispatch(setLabelChart(labels));\n })\n .catch((err) => {\n console.log(err);\n });\n };\n useEffect(() => {\n handleChangeFilter(activeIndexFitler, activeChartIndex);\n }, [activeIndexFitler, activeChartIndex]);\n\n const data = (canvas) => {\n if (statisArr.length) {\n return {\n labels: labeArr,\n datasets: gerateDataSetChart(statisArr, canvas, userInfo,t),\n };\n } else {\n return { labels: labeArr, datasets: [] };\n }\n };\n const { t } = useTranslation()\n\n return (\n <div className=\" h-full justify-between flex flex-col space-y-2 relative w-full card-theme \">\n <p style={{ color: \"#EEA54C\" }} className=\" text-lg text-title text-left c-card-content\">\n {t('trangChu.thongKeThoiGianHoc')}\n </p>\n\n <div className=\" overflow-hidden w-full mx-auto transform flex-grow \">\n <Line\n data={data}\n options={generateOption(statisArr)}\n className=\"h-full px-3 m-0 w-full \"\n plugins={{}}\n />\n </div>\n <Static />\n </div>\n );\n});\nexport default ChartStatisticTimeLearning;\n","import dayjs from \"dayjs\";\n\nexport const getDayName = (days, idFilter) => {\n let daysDate = [];\n switch (idFilter) {\n case 0: {\n // for (let i = 0; i < days; i++) {\n for (let i = 0; i < 7; i++) {\n let date = new Date();\n date.setDate(date.getDate() - i);\n let tempt1 = date.toISOString().split(\"T\")[0];\n let tempt2 = new Date(tempt1);\n let dayName = tempt2.toLocaleString(\"vi-VN\", { weekday: \"short\" });\n dayName = dayName.replace(\"Th\", \"Thứ\");\n daysDate.push(dayName);\n }\n return daysDate.reverse();\n }\n case 1: {\n for (let i = 0; i < days; i++) {\n let date = new Date();\n date.setDate(date.getDate() - i);\n let tempt1 = date.toISOString().split(\"T\")[0];\n let tempt2 = new Date(tempt1);\n let tempt3 = dayjs(tempt2).format(\"DD/MM\");\n daysDate.push(tempt3);\n }\n return daysDate.reverse();\n }\n case 2: {\n for (let i = 0; i < days; i++) {\n let date = new Date();\n date.setDate(date.getDate() - i);\n let tempt1 = date.toISOString().split(\"T\")[0];\n let tempt2 = new Date(tempt1);\n let tempt3 = dayjs(tempt2).format(\"DD/MM\");\n tempt3 = tempt3.split(\"/\");\n tempt3 = tempt3[0] + \"/\" + tempt3[1];\n\n daysDate.push(tempt3);\n }\n return daysDate.reverse();\n }\n\n default:\n break;\n }\n};\n","export default __webpack_public_path__ + \"static/media/circleBg.dc8d7114.png\";","import React from \"react\";\nimport circleBg from \"./circleBg.png\";\n\nexport default function AvatarUserCicle({ avatar, height, width }) {\n return (\n <div\n style={{\n width,\n height,\n }}\n className=\"relative flex-shrink-0\"\n >\n <img src={circleBg} alt=\"\" className=\"absolute scale-125 transform\" />\n\n <img\n src={avatar}\n alt=\"\"\n className=\"w-full h-full rounded-full object-cover absolute z-10 \"\n />\n <div\n style={{\n transform: `translate(-50%,20%)`,\n }}\n className=\"absolute -bottom-3 left-1/2 z-20 \"\n ></div>\n </div>\n );\n}\n","import moment from \"moment\";\nimport { Trans } from \"react-i18next\";\n\nexport const FORTMAT_DAY = \"DD/MM/YYYY\";\nlet formatTime = \"DD/MM/YYYY\";\n\n\nlet letters = [<Trans i18nKey='trangChu.thu2' />,\n<Trans i18nKey='trangChu.thu3' />,\n<Trans i18nKey='trangChu.thu4' />,\n<Trans i18nKey='trangChu.thu5' />,\n<Trans i18nKey='trangChu.thu6' />,\n<Trans i18nKey='trangChu.thu7' />,\n<Trans i18nKey='trangChu.cn' />\n];\nexport let getCurrentWeekDay = (listDiemDanh) => {\n // Get the current date\n const currentDate = moment();\n\n // Get the start of the week (Sunday)\n const startOfWeek = currentDate.clone().startOf(\"week\");\n\n // Create an array to store the days of the week\n const weekDays = [];\n\n // Loop from Sunday to Saturday and add each day to the array\n for (let i = 0; i < 7; i++) {\n const day = startOfWeek.clone().add(i, \"days\").format(formatTime);\n let isActive = listDiemDanh.includes(day);\n // let isToday = currentDate.isSame(day, \"day\");\n let isToday = currentDate.format(\"DD/MM/YYYY\") == day;\n\n weekDays.push({\n letter: letters[i],\n day: day,\n isActive: isActive,\n isToday: isToday, //\n });\n }\n\n return weekDays;\n};\n\nexport const getImgDanhHieu = (name) => {\n return `https://apimentor11.cybersoft.edu.vn/images/${name}`;\n};\n","import classNames from \"classnames\";\nimport React, { useState } from \"react\";\n\nexport default function LootBox({ day, index, currentWeek, postDiemDanh, isActive }) {\n let activeColor = \"linear-gradient(180deg, #0A0D14 0%, #29292F 100%)\";\n let notActioveColor = \" linear-gradient(180deg, #66676C 31.25%, #353034 100%)\";\n return (\n <>\n <div\n onClick={() => {\n postDiemDanh();\n }}\n style={{ width: \"13%\" }}\n className=\"relative h-10\"\n >\n <span\n\n class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"\n ></span>\n <span\n style={{\n background: day.isActive ? activeColor : notActioveColor,\n border: day.isActive ? \"1px solid #FFC94C\" : \"none\",\n }}\n className={classNames(\n \" cursor-pointer h-8 w-full relative top-0 left-0 text-content font-bold flex items-center justify-center \",\n {\n \"rounded-tl-xl rounded-bl-xl\": index == 0,\n },\n {\n \"rounded-tr-xl rounded-br-xl\": index == currentWeek.length - 1,\n }\n )}\n >\n {day.letter}\n </span>\n </div>\n </>\n );\n}\n","export default __webpack_public_path__ + \"static/media/coin.ebe35a43.png\";","import React, { useState } from \"react\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport ConfettiExplosion from \"react-confetti-explosion\";\nimport { Modal } from \"antd\";\nimport coinBg from \"./image/coin.png\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setPhanThuong } from \"./giftSlice\";\nexport default function ModalConfetti() {\n const { phanThuong } = useSelector((state) => state.phanThuongSlice);\n let dispatch = useDispatch();\n\n const showModal = () => {\n setPhanThuong(true);\n };\n const handleOk = () => {\n dispatch(setPhanThuong(null));\n };\n const handleCancel = () => {\n dispatch(setPhanThuong(null));\n };\n const { width, height } = useWindowSize();\n if (!phanThuong) return <></>;\n let { tichCuc, coin, kinhNghiem, danhSachVatPham } = phanThuong;\n if (!tichCuc && !coin && !kinhNghiem && !danhSachVatPham) {\n return <></>;\n }\n \n return (\n <div>\n <div id=\"tooltip_modal \" className=\"w-full relative\">\n <div\n className=\"cursor-pointer flex flex-col justify-center w-full items-center \"\n onClick={showModal}\n >\n {/* {loai.icon} */}\n </div>\n {phanThuong && (\n <div\n style={{ width: \"90vw\" }}\n className=\" h-screen absolute top-1/2 left-1/2 transform -translate-x-1/2 overflow-hidden z-30 -translate-y-1/2 flex justify-center \"\n >\n {/* <Confetti width={width} height={height} /> */}\n {/* <ConfettiExplosion /> */}\n </div>\n )}\n <Modal\n title=\"\"\n visible={{}}\n onOk={handleOk}\n onCancel={handleCancel}\n footer=\"\"\n bodyStyle={{\n borderRadius: \"20px\",\n overflow: \"hidden\",\n }}\n style={{\n borderRadius: \"20px\",\n maxWidth: \"700px\",\n minWidth: \"200px\",\n }}\n >\n <div className=\"flex space-x-5 items-center \">\n {/* <div className=\"h-full w-48 flex items-center justify-center flex-shrink-0\"> Lorem ipsum dolor sit.</div> */}\n {/* <div className=\"c-card-content text-3xl w-full\">{loai.title}</div> */}\n <div className=\" h-full space-y-10 text-sub-title w-full p-2\">\n <h4 className=\"text-2xl text-center\">Thông tin váºt phẩm:</h4>\n <div className=\"flex items-center justify-around w-full text-xl\">\n {tichCuc ? (\n <p>\n {\" \"}\n TÃch cá»±c:\n {tichCuc}{\" \"}\n <span>\n <i style={{ color: \"rgba(0, 209, 255, 1)\" }} class=\"fa fa-star\"></i>\n </span>\n </p>\n ) : (\n \"\"\n )}\n\n {kinhNghiem ? (\n <p>\n Kinh nghiệm:\n {kinhNghiem}{\" \"}\n <span>\n <i style={{ color: \"#ffc107\" }} class=\"fa fa-bolt\"></i>\n </span>\n </p>\n ) : (\n \"\"\n )}\n\n {coin ? (\n <p className=\"flex items-center \">\n <span> Coin:</span>\n {coin} <img src={coinBg} width={20} alt=\"\" />\n </p>\n ) : (\n \"\"\n )}\n </div>\n <p>{}</p>\n {/* render List vat pham */}\n <div className=\"w-full pt-5 flex justify-center flex-wrap\">\n {danhSachVatPham?.map(({ tenVatPham, hinhAnh }) => {\n return (\n <div className=\"w-1/3 flex flex-col items-center\">\n <img src={hinhAnh} alt=\"\" className=\"w-20\" />\n <p className=\"text-content text-sm\">{tenVatPham}</p>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </Modal>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Chart from \"@uiw/react-heat-map\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { Tooltip } from \"antd\";\nimport moment from \"moment\";\nconst convertedArray = (arr) => {\n return arr.map((item) => {\n const dateParts = item.ngayDiemDanh.split(\" \")[0].split(\"/\");\n const date = `${dateParts[2]}/${dateParts[1]}/${dateParts[0]}`;\n\n const timeParts = item.ngayDiemDanh.split(\" \")[1].split(\":\");\n const count = parseInt(timeParts[0]) * 60 + parseInt(timeParts[1]);\n\n return { date, count };\n });\n};\nconst currentYear = new Date().getFullYear();\nconst monthLabels = [\n \"T 1\",\n \"T 2\",\n \"T 3\",\n \"T 4\",\n \"T 5\",\n \"T 6\",\n \"T 7\",\n \"T 8\",\n \"T 9\",\n \"T 10\",\n \"T 11\",\n \"T 12\",\n];\nconst HeatMapTimeOnline = () => {\n const [listDiemDanh, setListDiemDanh] = useState([]);\n\n function fetchListDiemDanh() {\n servCodingCamp\n .getLayDanhSachDiemDanh()\n .then((res) => {\n let data = convertedArray(res.data.content);\n setListDiemDanh(data);\n })\n .catch((err) => {\n });\n }\n useEffect(() => {\n fetchListDiemDanh();\n }, []);\n return (\n <Chart\n // space={}\n // legendCellSize={0}\n value={listDiemDanh}\n weekLabels={[\"CN\", \"Th2\", \"Th3\", \"Th4\", \"Th5\", \"Th6\", \"Th7\"]}\n // monthLabels={[]}\n monthLabels={monthLabels}\n startDate={new Date(`${currentYear}/01/01`)}\n endDate={new Date(`${currentYear}/12/31`)}\n // rectSize={16}\n width={700}\n className=\"w-full \"\n rectRender={(props, data) => {\n return (\n <Tooltip\n placement=\"top\"\n title={` ${moment(data.date).format(\"DD/MM/YYYY\")} số phút online: ${\n data.count || 0\n } phút`}\n >\n <rect {...props} />\n </Tooltip>\n );\n }}\n legendCellSize={20}\n panelColors={{\n 0: \"#f4decd\",\n 2: \"#e4b293\",\n 4: \"#d48462\",\n 10: \"#c2533a\",\n 20: \"#ad001d\",\n }}\n />\n );\n};\n\nexport default HeatMapTimeOnline;\n","import classNames from \"classnames\";\nimport React from \"react\";\n// import Modal from \"react-bootstrap/Modal\";\nimport { useState } from \"react\";\nimport HeatMapTimeOnline from \"../../../../components/TimeTracker/Heatmap\";\nimport \"./style.scss\";\nimport { Modal } from \"antd\";\nexport default function ModalHeatMap({ day, index, currentWeek }) {\n const [modalVisible, setModalVisible] = useState(false);\n\n let renderItemDay = () => {\n let activeColor = \"rgb(255, 201, 76)\";\n\n return (\n <div\n onClick={() => {\n setModalVisible(true);\n }}\n style={{ width: \"13%\" }}\n className=\"relative h-10 cursor-pointer\"\n >\n <span\n style={{\n background: activeColor,\n border: day.isActive ? \"1px solid #FFC94C\" : \"none\",\n }}\n className={classNames(\n \"h-8 w-full relative top-0 left-0 text-content font-bold flex items-center justify-center text-green-theme \",\n {\n \"rounded-tl-xl rounded-bl-xl\": index == 0,\n },\n {\n \"rounded-tr-xl rounded-br-xl\": index == currentWeek.length - 1,\n }\n )}\n >\n {day.letter}\n </span>\n </div>\n );\n };\n\n return (\n <>\n <Modal\n visible={modalVisible}\n onCancel={() => {\n setModalVisible(false);\n }}\n footer={null}\n className=\"modal-heat-map\"\n width={800}\n >\n {/* <Modal.Body className=\"flex justify-center modal-body-gradient rounded text-white\"> */}\n <HeatMapTimeOnline />\n {/* </Modal.Body> */}\n </Modal>\n {renderItemDay()}\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\n\nimport moment from \"moment\";\nimport { FORTMAT_DAY, getCurrentWeekDay } from \"./utils\";\nimport classNames from \"classnames\";\nimport LootBox from \"./LootBox/LootBox\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { setPhanThuong } from \"../../../components/ModalConfetti/giftSlice\";\nimport { useDispatch } from \"react-redux\";\nimport toast from \"react-hot-toast\";\nimport { updateThongTinMoRongAction } from \"../../../redux/reducer/authReducer\";\nimport ModalConfetti from \"../../../components/ModalConfetti/ModalConfetti\";\nimport ModalHeatMap from \"./ModalHeatMap/ModalHeatMap\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function ChuoiDiemDanh() {\n const { t } = useTranslation()\n\n const [listDiemDanh, setListDiemDanh] = useState([]);\n let dispatch = useDispatch();\n\n useEffect(() => {\n fetchListDiemDanh();\n }, []);\n function fetchListDiemDanh() {\n servCodingCamp\n .getLayDanhSachDiemDanh()\n .then((res) => {\n let result = res.data.content.slice(-7).map((item) => {\n let day = moment(item.ngayDiemDanh, \"DD/MM/YYYY HH:mm:ss\").format(FORTMAT_DAY);\n return day;\n });\n setListDiemDanh(result);\n })\n .catch((err) => {\n console.log(err);\n });\n }\n function postDiemDanh() {\n servCodingCamp\n .postDiemDanh()\n .then((res) => {\n if (res.data.content) {\n fetchListDiemDanh();\n dispatch(setPhanThuong(res.data.content));\n toast.success(\"Äiểm danh thà nh công\");\n dispatch(updateThongTinMoRongAction());\n } else {\n // message.error(\"Äiểm danh không thà nh công\");\n }\n })\n .catch((err) => {\n console.log(err);\n });\n }\n const renderDayOfTheWeek = () => {\n const currentWeek = getCurrentWeekDay(listDiemDanh);\n\n let listDays = [];\n listDays = currentWeek.map((d, index) => {\n let activeColor = \"rgb(255, 201, 76)\";\n let notActioveColor = \" linear-gradient(180deg, #66676C 31.25%, #353034 100%)\";\n if (d.isToday && !d.isActive) {\n // if (d.isToday) {\n return (\n <LootBox\n postDiemDanh={postDiemDanh}\n isActive={d.isActive}\n currentWeek={currentWeek}\n day={d}\n index={index}\n />\n );\n }\n if (d.isToday && d.isActive) {\n return <ModalHeatMap currentWeek={currentWeek} index={index} day={d} />;\n }\n return (\n <div style={{ width: \"13%\" }} className=\"relative h-10\">\n <span\n style={{\n background: d.isActive ? activeColor : notActioveColor,\n border: d.isActive ? \"1px solid #FFC94C\" : \"none\",\n color: d.isActive ? \"black\" : \"gray\",\n }}\n className={classNames(\n \"h-8 w-full relative top-0 left-0 font-bold flex items-center justify-center \",\n {\n \"rounded-tl-xl rounded-bl-xl\": index == 0,\n },\n {\n \"rounded-tr-xl rounded-br-xl\": index == currentWeek.length - 1,\n }\n )}\n >\n {d.letter}\n </span>\n </div>\n );\n });\n return listDays;\n };\n\n return (\n <div className=\" w-full c-card-content\">\n <ModalConfetti />\n <div className=\" items-center text-sub-title font-medium space-x-2 pr-0 \">\n <ul className=\" pl-4\">\n <li>\n <span>{t('trangChu.chuoiDiemDanh')}: </span>\n <span>\n {getCurrentWeekDay(listDiemDanh).filter((day) => day.isActive).length}\n /7\n </span>\n </li>\n </ul>\n </div>\n <div className=\" pr-0 \">\n <div className=\" p-2 space-y-2 \">\n <div className=\" flex items-center text-title font-bold space-x-2\"></div>\n <div className=\"flex justify-between\">{renderDayOfTheWeek()}</div>\n </div>\n </div>\n </div>\n );\n}\n","export default __webpack_public_path__ + \"static/media/columBg.0e4c2d46.png\";","import React from \"react\";\nimport { getImgDanhHieu } from \"../../pages/DashBroad/OverviewInfoUser/utils\";\nimport classNames from \"classnames\";\nimport { Tag, Tooltip } from \"antd\";\nimport bgColumn from \"./columBg.png\";\nimport { getHinhAnh } from \"../../utils/GetHinhanh\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nexport default function ItemRank({ item, isActive, index, owner }) {\n console.log('item: ', item);\n \n const { danhSachThanhTich } = useSelector(selectThongTinMoRong);\n \n let listVatPham = useSelector((state) => state.vatPhamSlice.vatPhamUser) || [];\n\n let height = (5 - index) * 15;\n let heightPercent = 100 - height + \"%\";\n\n return ( \n <div\n style={{ width: `${12 + index}%` }}\n // style={{ width: `${12}%` }}\n className=\" flex items-center flex-col justify-end h-full relative \"\n >\n <div className=\"relative w-full \">\n <Tooltip\n overlayInnerStyle={{ transform: 'translateY(-20px)' }} \n title={\n <div className={classNames(\"tooltipCustom\",\n {\"filter grayscale\": !owner})}>\n <p className=\"font-black text-base\">Giải thÃch:</p>\n <p className=\"\">{item.ghiChu}</p>\n {item?.thanhTichCan.length > 0 && (\n <>\n <p className=\" font-black text-base\">Thà nh tÃch cần: </p>\n {item?.thanhTichCan?.map((tt, idx) => {\n \n const number = parseInt(tt?.moTa.match(/\\s(\\d+)\\s/)[0])\n \n return (\n <div className=\"flex items-center gap-2 pb-1\" >\n <div style={{background:'#ee9200',padding:'2px',borderRadius:'5px'}}>\n <div className=\"bg-dark w-16 h-16 \" style={{borderRadius:'5px'}}>\n <img\n className=\"w-full h-full\"\n src={getHinhAnh(tt?.hinhAnh)}\n /> \n </div>\n {danhSachThanhTich.findIndex(item => item.id == tt?.id)!=-1?\n <></>\n :\n <p className=\"text-center font-black\">+{number?number:0}</p>}\n </div>\n \n <div className=\"\">\n <p className=\"font-medium\">{tt?.tenThanhTich}</p>\n <p>{tt?.moTa}</p>\n {danhSachThanhTich.findIndex(item => item.id == tt?.id)==-1?<Tag color=\"#494949\">Not yet</Tag >:<Tag color=\"#498c4a\">Done</Tag>}\n </div>\n </div>\n );\n })}\n </>\n )}\n {item?.vatPhamCan && (\n <>\n <p className=\" font-black text-base\">Váºt phẩm cần: </p>\n <div className=\"flex items-center gap-2\">\n <div style={{background:'#ee9200',padding:'2px',borderRadius:'5px'}}>\n <div className=\"bg-dark w-16 h-16 \" style={{borderRadius:'5px'}}>\n <img\n className=\"w-full h-full\"\n src={item?.vatPhamCan?.hinhAnh}\n />\n </div>\n </div>\n <div className=\"\">\n <p className=\"font-medium\">\n {item?.vatPhamCan?.tenVatPham.substring(0,item?.vatPhamCan?.tenVatPham.length-5)} <span className=\"font-black\">{item?.vatPhamCan?.tenVatPham.substring(item?.vatPhamCan?.tenVatPham.length - 5)}</span>\n \n </p>\n {listVatPham.findIndex(tt => item.vatPhamCan.id == tt?.id)==-1?<Tag color=\"#494949\">Not yet</Tag >:<Tag color=\"#498c4a\">Done</Tag>}\n </div>\n </div>\n </>\n )}\n </div>\n }\n placement=\"rightTop\"\n >\n <div\n className={classNames(\"item relative z-10 transform -translate-y-4\", {\n \"borderBoxDS \": isActive,\n \"filter grayscale\": !owner,\n })}\n style={{ paddingBottom: index * 50,borderRadius:'15px' }}\n >\n <div className=\"itemBlur\" style={{backgroundColor:`${owner?item?.mauSac:''}`}}></div>\n <div className={classNames(\"itemLine\",{\n \"line1\":item.capDo==1,\n \"line2\":item.capDo==10,\n \"line3\":item.capDo==20,\n \"line4\":item.capDo==30,\n \"line5\":item.capDo==40,\n \"line6\":item.capDo==50\n })}></div>\n <img\n className={classNames(\"w-full rounded\")}\n dff\n src={getImgDanhHieu(item.hinhDanhHieu)}\n alt=\"\"\n />\n <p className=\"text-sm text-center font-medium text-white mx-auto\">\n {item.tenDanhHieu}\n </p>\n \n </div>\n </Tooltip>\n <div\n style={{\n background: `linear-gradient(to bottom, ${item.mauSac} 0%,rgba(255,255,255, 0) 100%)`, opacity:0.9, \n }}\n className={classNames(\"h-full w-3/5 object-cover absolute bottom-0 left-1/2 -translate-x-1/2 translate-y-8 transform\",{\n \"filter grayscale\": !owner\n })}\n ></div>\n </div>\n </div>\n\n\n\n \n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ItemRank from \"./ItemRank\";\nimport \"./style.scss\";\nexport default function RankedSystem({ list, currentRank }) {\n let renderList = () => {\n return list?.map((item, index) => {\n let isActive = item.capDo == currentRank?.capDo;\n let owner = item.capDo<=currentRank.capDo\n return <ItemRank index={index} isActive={isActive} item={item} owner={owner} />;\n });\n };\n return (\n <div12\n style={{ height: 430, padding: \"2% 5% 2% 5%\" }}\n className=\" flex items-center flex-wrap justify-between gap-2 w-full bg-cover overflow-hidden\"\n >\n {renderList()}\n </div12>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { getImgDanhHieu } from \"./utils\";\n// import Modal from \"react-bootstrap/Modal\";\n\nimport RankedSystem from \"../../../components/RankedSystem/RankedSystem\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { useDispatch } from \"react-redux\";\nimport { getVatPhamUserAction } from \"../../../redux/reducer/vatPhamSlice\";\nimport { Modal } from \"antd\";\n\nexport default function ModalDanhHieu({ danhHieu }) {\n const [list, setList] = useState([]);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const dispatch = useDispatch()\n\n useEffect(() => {\n servCodingCamp\n .layMocHuyHieu()\n .then((result) => {\n setList(result.data.content);\n })\n .catch((err) => {});\n \n dispatch(getVatPhamUserAction())\n }, []);\n const showModal = () => {\n setIsModalOpen(true);\n };\n\n \n return (\n <>\n <div className=\"theme_img\">\n <div class=\"rorate css-940ceo w-full\" style={{ maskSize: '100%', transform: 'scale(1.03)', maskImage: `url(${getImgDanhHieu(danhHieu?.hinhDanhHieu)})`, WebkitMaskImage: `url(${getImgDanhHieu(danhHieu?.hinhDanhHieu)})` }}>\n <div class=\"rotateBorder css-rotateBorder\"></div>\n </div>\n <img\n onClick={showModal}\n src={`${getImgDanhHieu(danhHieu?.hinhDanhHieu)}`}\n className=\"w-full cursor-pointer \"\n alt=\"\"\n />\n </div>\n <Modal\n bsPrefix=\"modal-ranking modal\"\n visible={isModalOpen}\n onCancel={() => {\n setIsModalOpen(false);\n }}\n // size=\"lg\"\n width={'60%'}\n style={{ top: 20 }}\n className=\"modalRanking\"\n footer={null}\n >\n {/* <Modal.Body className=\"\"> */}\n <div className=\"hititle py-3 text-center\">\n <span className=\"customH1 shadow\">RANKING</span>\n\n </div>\n <RankedSystem list={list} currentRank={danhHieu} />\n {/* </Modal.Body> */}\n </Modal>\n </>\n );\n}\n","import React, { useEffect } from \"react\";\nimport AvatarUserCicle from \"../../../components/AvatarUserCicle/AvatarUserCicle\";\nimport { useSelector } from \"react-redux\";\nimport ModelContentIcon from \"../../../components/ModalContentIcon/ModalContentIcon\";\nimport { iconDashBoard } from \"../../../components/ModalContentIcon/utilities\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport Badge from \"../../../components/Badge/Badge\";\nimport ChuoiDiemDanh from \"./ChuoiDiemDanh\";\nimport { getHinhAnhFB } from \"../../../utils/GetHinhanh\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport ModalDanhHieu from \"./ModalDanhHieu\";\nexport default function OverviewInfoUser() {\n const { userInfo } = useSelector(selectThongTinMoRong);\n console.log(userInfo)\n useEffect(() => {\n servCodingCamp\n .layMocHuyHieu()\n .then((result) => {})\n .catch((err) => {});\n }, []);\n return (\n <div className=\"card-theme w-full h-full relative \">\n\n <Badge\n title={<span classnName=\"text-xs\">{userInfo.danhHieu?.tenDanhHieuEN}</span>}\n right={13}\n size={50}\n />\n <div className=\"c-card-content\">\n <div className=\"flex flex-col\">\n <div className=\"flex p-5 pb-8\">\n <div className=\" flex items-center justify-center relative\">\n \n <AvatarUserCicle width={80} height={80} avatar={getHinhAnhFB(userInfo.facebookId,userInfo)} />\n <div className=\"pl-10\">\n <p className=\"text-title font-semibold capitalize\">{userInfo.hoTen}</p>\n <div className=\"flex space-x-2 items-center relative\">\n <ModalDanhHieu danhHieu={userInfo.danhHieu} />\n\n <p className=\"text-yellow name capitalize rank\">\n {userInfo.danhHieu?.tenDanhHieuEN}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"flex-grow \">\n <div className=\"space-y-2 px-2\">\n <ModelContentIcon loai={iconDashBoard.NangDong} />\n <ModelContentIcon loai={iconDashBoard.Xp} />\n </div>\n </div>\n </div>\n </div>\n <ChuoiDiemDanh />\n </div>\n );\n}\n","import React from \"react\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport { useSelector } from \"react-redux\";\nimport ModalWrapper from \"../../../components/ModalWrapper/ModalWrapper\";\nimport { getHinhAnh } from \"../../../utils/GetHinhanh\";\nimport { useTranslation } from \"react-i18next\";\nexport default function ThanhTichDashBoard() {\n const { danhSachThanhTich } = useSelector(selectThongTinMoRong);\n\n // const renderThanhTich = () => {\n // if (danhSachThanhTich.length == 0) {\n // return <p className=\"text-content\">Bạn chÆ°a có thà nh tÃch </p>;\n // }\n // return danhSachThanhTich?.map(({ hinhAnh, tenThanhTich, moTa }) => {\n // let icon = (\n // <div className=\"space-y-2 text-sub-title card-theme p-2 rounded-lg flex flex-col items-center\">\n // <img src={getHinhAnh(hinhAnh)} className=\"w-1/3\" alt=\"\" />\n\n // <span className=\"text-center text-xs´\">{tenThanhTich}</span>\n // </div>\n // );\n // return <ModalWrapper icon={icon} content={moTa} />;\n // });\n // };\n const renderThanhTich = () => {\n if (danhSachThanhTich.length === 0) {\n return <p className=\"text-content\">Bạn chÆ°a có thà nh tÃch </p>;\n }\n \n return danhSachThanhTich.map(({ hinhAnh, tenThanhTich, moTa }, index) => {\n let icon = (\n <div className=\"space-y-2 text-sub-title card-theme p-2 rounded-lg flex flex-col items-center\">\n <img src={getHinhAnh(hinhAnh)} className=\"w-1/3\" alt=\"\" />\n <span className=\"text-center text-xs\">{tenThanhTich}</span>\n </div>\n );\n \n // Assuming `moTa` is the content to display in the modal\n let content = (\n <div>\n <p>{moTa}</p>\n </div>\n );\n \n return <ModalWrapper key={index} icon={icon} content={content} />;\n });\n };\n const { t } = useTranslation()\n\n return (\n <div className=\" card-theme w-full\">\n <div className=\"c-card-content flex items-center justify-between xl:flex-col xl:space-y-2\">\n <p className=\"text-title space-x-2 capitalize w-full text-left\">\n <i className=\"fa fa-medal text-white text-2xl\"></i>\n <span className=\"capitalize\">{t('trangChu.thanhTich')}</span>\n </p>\n </div>\n <div className=\"c-card-content grid grid-cols-2 xl:grid-cols-2 gap-4\">\n {renderThanhTich()}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { typeTaskIcon } from \"../../../utils/taskUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function ItemBanner({ thongKeChuyenDe }) {\n const { t } = useTranslation()\n\n return (\n <div className=\"item_banner p-1 py-3 w-full\">\n <h4 className=\"uppercase text-content text-center \">{t('trangChu.noiDungModule')}</h4>\n <div class=\"grid grid-cols-3 xl:grid-cols-2 xl:gap-1 gap-2 \">\n {thongKeChuyenDe\n .filter(({ tongSoLuong }) => tongSoLuong > 0)\n .map(({ tongSoLuong, tieuDe, maLoai }, index) => {\n if (!typeTaskIcon[maLoai]?.icon) {\n console.log(\"missing\", maLoai);\n }\n return (\n <div key={index} class=\"flex justify-between items-center\">\n <div class=\"flex items-center\">\n <div class=\"icon_item_theme mr-2 \">\n <div id=\"tooltip_modal \" class=\"w-full\">\n {typeTaskIcon[maLoai]?.icon}\n </div>\n <span class=\"bg_icon_item_theme\"></span>\n </div>\n <p class=\"text-content text-sm \">\n <div>\n {tongSoLuong} {tieuDe}\n </div>\n </p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport ModalWrapper from \"../../../components/ModalWrapper/ModalWrapper\";\nimport { useLstImgTag } from \"../../../hook/useLstImgTag\";\n\nexport default function ListSkill({ listTag }) {\n let img_warp = \"md:w-8 md:h-8 w-10 h-10 card-theme rounded p-1\";\n const { data:listImgTag , isLoading, error } = useLstImgTag();\n return (\n <div className=\"flex gap-4 flex-wrap w-full \">\n {listTag?.map((tag) => {\n let item = listImgTag?.find((item) => {\n return item?.value == tag;\n });\n let icon = (\n <div className={img_warp}>\n <img className=\"w-full h-full object-cover\" src={item?.image} alt />\n </div>\n );\n let content = (\n <div className=\"flex items-center space-x-5\">\n {icon} <span>{item?.value}</span>\n </div>\n );\n return (\n <div className=\"w-10\">\n <ModalWrapper icon={icon} content={content} />\n </div>\n );\n })}\n </div>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport ItemBanner from \"./ItemBanner\";\nimport ListSkill from \"./ListSkill\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nexport function Item({ data = {} }) {\n let navigate = useNavigate();\n const { t } = useTranslation()\n const { userInfo } = useSelector(selectThongTinMoRong);\n return (\n <div className=\" w-full card-theme\">\n <div className=\"w-full c-card-content flex flex-col space-y-3 justify-between items-start h-full \">\n <div className=\" text-left flex flex-col justify-between h-full space-y-3 w-full\">\n <p className=\"font-bold text-left text-title\">{data.tenChuyenDe}</p>\n <div className=\"flex w-full xl:flex-col justify-between items-start space-y-5 relative\">\n <ListSkill listTag={data.danhSachTag} />\n\n {data.notify && <span\n\n class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10\"\n ></span>}\n\n <button\n onClick={(event) => {\n if(userInfo.kichHoat){\n navigate(`/task-page/${data.chuyenDeId}`);\n }\n else{\n navigate(`/task-page-free/${data.chuyenDeId}`);\n }\n }}\n className=\"btn_theme_red\"\n >\n {t('trangChu.xemChiTiet')}\n </button>\n </div>\n </div>\n <div className=\" flex items-center w-full flex-shrink-0 \">\n <ItemBanner thongKeChuyenDe={data.thongKeChuyenDe} />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { Item } from \"./Item\";\nimport \"./style.scss\";\nimport axios from \"axios\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setListImageTag } from \"../../../redux/reducer/dashboardSlice\";\nimport { useTranslation } from \"react-i18next\";\nimport { checkDemoUser } from \"../../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport SpinnerComponent from \"../../../components/Spinner\";\nimport { useLstLoTrinhUser } from \"../../../hook/useLstLoTrinhUser\";\nexport default function ListModule() {\n\n // const [listLoTrinh, setListLoTrinh] = useState([]);\n\n const dispatch = useDispatch();\n\n // gá»i api lấy danh sách chuyển Ä‘á» (lá»™ trình) đã đăng ký\n\n const { t } = useTranslation()\n\n let isDemoUser = useMemo(() => checkDemoUser(), [])\n\n const { userInfo } = useSelector(selectThongTinMoRong);\n\n const [load, setLoad] = useState(false)\n\n\n useEffect(() => {\n // setLoad(true)\n // isDemoUser || !userInfo.kichHoat ?\n // servCodingCamp\n // .layAllChuyenDeTrial()\n // .then((res) => {\n // setListLoTrinh(res.data.content);\n // })\n // .catch((err) => {\n // console.log(err);\n // }).finally(() => {\n // setLoad(false)\n // })\n // :\n // servCodingCamp\n // .layLotrinhUser()\n // .then((res) => {\n // setListLoTrinh(res.data.content);\n // })\n // .catch((err) => {\n // console.log(err);\n // }).finally(() => {\n // setLoad(false)\n // })\n\n axios\n .get(\"https://apimentor11.cybersoft.edu.vn/api/danh-sach-tag/lay-hinh-tag\")\n .then((res) => {\n dispatch(setListImageTag(res.data.content));\n })\n .catch((err) => {\n console.log(err);\n });\n }, [userInfo]);\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n return (\n <div className=\" c-col-full relative space-y-4\">\n {isLoading && <SpinnerComponent />}\n <p className=\"font-bold text-title text-left\"> {t('trangChu.loTrinhDangHoc')}</p>\n\n <div className=\"grid list_module w-full \">\n {data?.map((item, index) => {\n return <Item data={item} key={index} />;\n })}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ChartStatisticTimeLearning from \"./ChartStatisticTimeLearning/ChartStatisticTimeLearning\";\nimport OverviewInfoUser from \"./OverviewInfoUser/OverviewInfoUser\";\nimport ThanhTichDashBoard from \"./ThanhTichDashBoard/ThanhTichDashBoard\";\nimport ListModule from \"./ListModule/ListModule\";\nimport BangXeHangThanhTich from \"../../components/BangXeHangThanhTich/BangXeHangThanhTich\";\nimport \"./index.css\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport SpinnerComponent from \"../../components/Spinner\";\n\nexport default function DashboardDesktop() {\n const { t, i18n } = useTranslation()\n\n return (\n <div className=\"flex w-full flex-grow flex-wrap \">\n <div className=\"c-col-75 flex flex-col left_dashboard\">\n\n <div id=\"upper_daskboard\" className=\"flex w-full\">\n <div className=\"c-col-40 relative\">\n\n\n <OverviewInfoUser />\n </div>\n <div className=\"c-col-60 relative\">\n\n <ChartStatisticTimeLearning />\n </div>\n </div>\n <div className=\"flex relative\">\n\n <ListModule />\n </div>\n </div>\n\n <div className=\"c-col-25 pl-0 flex xl:flex-row flex-col xl:space-y-0 xl:space-x-5 xl:pl-5 space-y-5 right_dashboard xl:h-full \">\n <div className=\"flex-shrink-0 xl:w-2/3 w-full \">\n <div className=\"card-theme c-card-content relative\">\n <BangXeHangThanhTich\n btnFilter={[\n {\n title: <Trans i18nKey='trangChu.capDo' />,\n key: 0,\n },\n {\n title: <Trans i18nKey='trangChu.tichCuc' />,\n key: 1,\n },\n {\n title: <Trans i18nKey='trangChu.hocGioi' />,\n key: 2,\n },\n ]}\n heightList={150}\n />\n </div>\n </div>\n <ThanhTichDashBoard />\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../../../redux/reducer/authReducer\";\nimport { Badge } from \"antd\";\nimport AvatarUserCicle from \"../../../../components/AvatarUserCicle/AvatarUserCicle\";\nimport ModelContentIcon from \"../../../../components/ModalContentIcon/ModalContentIcon\";\nimport ChuoiDiemDanh from \"../../OverviewInfoUser/ChuoiDiemDanh\";\nimport { iconDashBoard } from \"../../../../components/ModalContentIcon/utilities\";\nimport { getHinhAnhFB } from \"../../../../utils/GetHinhanh\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport ModalDanhHieu from \"../../OverviewInfoUser/ModalDanhHieu\";\nexport default function OverviewInfoUserPhone() {\n const { userInfo } = useSelector(selectThongTinMoRong);\n useEffect(() => {\n servCodingCamp\n .layMocHuyHieu()\n .then((result) => {})\n .catch((err) => {});\n }, []);\n return (\n <div className=\"card-theme w-full h-full relative \">\n\n <Badge\n title={<span classnName=\"text-xs\">{userInfo.danhHieu?.tenDanhHieuEN}</span>}\n right={13}\n size={50}\n />\n <div className=\"c-card-content\">\n <div className=\"flex flex-col\">\n <div className=\"flex p-5 pb-8\">\n <div className=\" flex items-center justify-center relative\">\n \n <AvatarUserCicle width={80} height={80} avatar={getHinhAnhFB(userInfo.facebookId,userInfo)} />\n <div className=\"pl-10\">\n <p className=\"text-title font-semibold capitalize\">{userInfo.hoTen}</p>\n <div className=\"flex space-x-2 items-center relative\">\n <ModalDanhHieu danhHieu={userInfo.danhHieu} />\n\n <p className=\"text-yellow name capitalize rank\">\n {userInfo.danhHieu?.tenDanhHieuEN}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"flex-grow \">\n <div className=\"space-y-2 px-2\">\n <ModelContentIcon loai={iconDashBoard.NangDong} />\n <ModelContentIcon loai={iconDashBoard.Xp} />\n </div>\n </div>\n </div>\n </div>\n <ChuoiDiemDanh />\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { Item } from \"./Item\";\nimport \"./style.scss\";\nimport axios from \"axios\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setListImageTag } from \"../../../redux/reducer/dashboardSlice\";\nimport { useTranslation } from \"react-i18next\";\nimport { checkDemoUser } from \"../../../utils/HocDemoUtils\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport SpinnerComponent from \"../../../components/Spinner\";\nimport { useLstLoTrinhUser } from \"../../../hook/useLstLoTrinhUser\";\nexport default function ListModulePhone() {\n\n // const [listLoTrinh, setListLoTrinh] = useState([]);\n\n const dispatch = useDispatch();\n\n // gá»i api lấy danh sách chuyển Ä‘á» (lá»™ trình) đã đăng ký\n\n const { t } = useTranslation()\n\n let isDemoUser = useMemo(() => checkDemoUser(), [])\n\n const { userInfo } = useSelector(selectThongTinMoRong);\n\n const [load, setLoad] = useState(false)\n\n\n useEffect(() => {\n // setLoad(true)\n // isDemoUser || !userInfo.kichHoat ?\n // servCodingCamp\n // .layAllChuyenDeTrial()\n // .then((res) => {\n // setListLoTrinh(res.data.content);\n // })\n // .catch((err) => {\n // console.log(err);\n // }).finally(() => {\n // setLoad(false)\n // })\n // :\n // servCodingCamp\n // .layLotrinhUser()\n // .then((res) => {\n // setListLoTrinh(res.data.content);\n // })\n // .catch((err) => {\n // console.log(err);\n // }).finally(() => {\n // setLoad(false)\n // })\n\n axios\n .get(\"https://apimentor11.cybersoft.edu.vn/api/danh-sach-tag/lay-hinh-tag\")\n .then((res) => {\n dispatch(setListImageTag(res.data.content));\n })\n .catch((err) => {\n console.log(err);\n });\n }, [userInfo]);\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n return (\n <div className=\" c-col-full relative space-y-4\">\n {isLoading && <SpinnerComponent />}\n <p className=\"font-bold text-title text-left\"> {data && t('trangChu.loTrinhDangHoc')}</p>\n\n <div className=\"w-full flex flex-col gap-2\">\n {data?.map((item, index) => {\n return <Item data={item} key={index}/>;\n })}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ChartStatisticTimeLearning from \"./ChartStatisticTimeLearning/ChartStatisticTimeLearning\";\nimport OverviewInfoUser from \"./OverviewInfoUser/OverviewInfoUser\";\nimport ThanhTichDashBoard from \"./ThanhTichDashBoard/ThanhTichDashBoard\";\nimport BangXeHangThanhTich from \"../../components/BangXeHangThanhTich/BangXeHangThanhTich\";\nimport \"./index.css\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport OverviewInfoUserPhone from \"./Mobile/OverviewInforUserPhone/OverviewInfoUserPhone\";\nimport ListModulePhone from \"./ListModule/ListModulePhone\";\n\nexport default function DashboardMobile() {\n const { t, i18n } = useTranslation()\n\n return (\n <div className=\"flex w-full flex-grow flex-wrap \">\n <div className=\"c-col-75 flex flex-col left_dashboard\">\n\n <div id=\"upper_daskboard\" className=\"w-full\">\n <div className=\"c-col-full relative\">\n\n\n <OverviewInfoUserPhone />\n </div>\n {/* <div className=\"c-col-full relative \">\n\n <ChartStatisticTimeLearning />\n </div> */}\n </div>\n <div className=\"relative\">\n\n <ListModulePhone />\n </div>\n </div>\n\n <div className=\"c-col-25 pl-0 flex xl:flex-row flex-col xl:space-y-0 xl:space-x-5 xl:pl-5 space-y-5 right_dashboard xl:h-full \">\n <div className=\"flex-shrink-0 xl:w-2/3 w-full sm:w-full\">\n <div className=\"card-theme c-card-content relative\">\n <BangXeHangThanhTich\n btnFilter={[\n {\n title: <Trans i18nKey='trangChu.capDo' />,\n key: 0,\n },\n {\n title: <Trans i18nKey='trangChu.tichCuc' />,\n key: 1,\n },\n {\n title: <Trans i18nKey='trangChu.hocGioi' />,\n key: 2,\n },\n ]}\n heightList={150}\n />\n </div>\n </div>\n {/* <ThanhTichDashBoard /> */}\n </div>\n </div>\n );\n}\n","import React from \"react\";\n// import \"./index.css\";\nimport DashboardDesktop from \"./DashboardDesktop\";\nimport DashboardMobile from \"./DasboardPhone\";\nimport { useMediaQuery } from \"react-responsive\";\n\nexport default function Dashboard() {\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 768 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({maxWidth: 767 });\n\n return isTablet ? children : null;\n };\n\n return (\n <>\n <Desktop>\n <DashboardDesktop />\n </Desktop>\n <Tablet>\n <DashboardMobile />\n </Tablet>\n </>\n );\n}\n","import React from \"react\";\n\nexport default function CardDiscussion({ dTopic }) {\n const renderTopics = () => {\n return dTopic.content.map((c) => {\n return (\n <p className=\"space-x-2 mt-3\">\n <span className=\"text-lg text-pink-violet\">{c.name}</span>\n {c.issue ? (\n <button className=\" w-7 h-7 text-icon-violet text-white rounded-full text-lg\">\n {c.issue}\n </button>\n ) : (\n \"\"\n )}\n </p>\n );\n });\n };\n return (\n <div className=\"card-theme p-3 bg-white \" style={{ height: 300 }}>\n <div className=\"flex space-x-2 \">\n <div style={{ width: \"10%\" }}>{dTopic.icon}</div>\n <div className=\"w-full\">\n <div style={{ width: \"100%\" }} className=\"flex justify-between \">\n <span className=\"text-pink-violet text-lg\">{dTopic.title}</span>\n <span className=\"text-xl text-pink-violet\">\n <i style={{ transform: \"rotate(90deg)\" }} class=\"fa fa-play\"></i>\n </span>\n </div>\n {renderTopics()}\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport CardDiscussion from \"./CardDiscussion\";\n\nexport default function DiscussionTopic({ data }) {\n const renderCardTopics = () => {\n return data.map((dTopic) => {\n return <CardDiscussion dTopic={dTopic} />;\n });\n };\n return (\n <div className=\"h-full p-5 space-y-6\" style={{ width: \"27%\" }}>\n {renderCardTopics()}\n </div>\n );\n}\n","import React from \"react\";\n\nexport default function UserComment({ dataComment }) {\n return (\n <div className=\" flex space-x-3\">\n <div className=\"flex flex-col items-end\">\n <div className=\"h-12 w-12\">\n <img\n className=\"h-full w-full object-cover\"\n src={dataComment.avatar}\n alt=\"\"\n />\n </div>\n <div className=\"w-0.5 h-full bg-blue-500 mr-2\"></div>\n </div>\n <div className=\" w-full h-full space-y-3 pb-6\">\n <p className=\"text-pink-violet text-lg\">\n {dataComment.name} ({dataComment.role}) - {dataComment.time} phút\n trÆ°á»›c\n </p>\n <p className=\"text-lg\">{dataComment.content}</p>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport UserComment from \"./UserComment\";\n\nconst data = {\n title: \"# Dá»± án uber\",\n dataComment: [\n {\n avatar: \"./img/ngo_diec_pham.png\",\n name: \"Äá»— Quang SÄ©\",\n role: \"Menter\",\n time: 10,\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. In, voluptas? Earum animi dolor, repudiandae reiciendis est soluta atque dignissimos? Hic totam illo distinctio eius eum beatae mollitia, molestias enim veniam modi minima! Odit repudiandae, cum sunt commodi eius omnis quos sol\",\n },\n {\n avatar: \"./img/ngo_diec_pham.png\",\n name: \"Trần Quang SÄ©\",\n role: \"Menter\",\n time: 8,\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. In, voluptas? Earum animi dolor, repudiandae reiciendis est soluta atque dignissimos? Hic totam illo distinctio eius eum beatae mollitia, molestias enim veniam modi minima! Odit repudiandae, cum sunt comm\",\n },\n {\n avatar: \"./img/ngo_diec_pham.png\",\n name: \"TrÆ°Æ¡ng Tấn Khải\",\n role: \"Menter\",\n time: 7,\n content: \"Lorem ipsum dolor\",\n },\n ],\n};\nexport default function FrameComment() {\n const renderComments = () => {\n return data.dataComment.map((d, i) => {\n return <UserComment key={i} dataComment={d} />;\n });\n };\n return (\n <div className=\"h-full card-theme p-6 space-y-6\" style={{ width: \"73%\" }}>\n <div className=\"rounded-3xl px-10 py-3 bg-white text-pink-violet text-lg\">\n # Dá»± án uber\n </div>\n <div className=\"card-theme bg-white p-8 pr-20 \">\n {renderComments()}\n <div className=\"relative border-2 border-purple-600 rounded-xl mt-10\">\n <button\n style={{ transform: \"translateY(-50%)\" }}\n className=\"bg-gray-400 text-white rounded-lg w-10 h-10 absolute top-1/2 left-3 \"\n >\n <i class=\"fa fa-plus\"></i>\n </button>\n <input\n className=\"w-full h-full py-4 px-16 outline-none rounded-xl\"\n type=\"text\"\n value={\"Oke anh em nha\"}\n />\n <button\n style={{ transform: \"translateY(-50%)\" }}\n className=\" text-white rounded-lg text-3xl absolute top-1/2 right-3 \"\n >\n 🙀\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport DiscussionTopic from \"./DiscussionTopic/DiscussionTopic\";\nimport FrameComment from \"./FrameComment/FrameComment\";\nconst dataFake = {\n dataDiscussion: [\n {\n title: \"Chuyên Ä‘á» HTMLCSS Formum\",\n icon: <i class=\"fa fa-anchor text-2xl text-pink-violet\"></i>,\n content: [\n { name: \"# Câu há»i thÆ°á»ng gặp\", issue: 10 },\n { name: \"# Thảo luáºn chung\", issue: 10 },\n ],\n },\n {\n title: \"Capstone project\",\n icon: <i class=\"fa fa-code-branch text-2xl text-pink-violet\"></i>,\n content: [\n { name: \"# Dá»± án uber\", issue: 10 },\n { name: \"# Dá»± án ABC\", issue: 0 },\n ],\n },\n ],\n};\nexport default function Discussion() {\n return (\n <div className=\"flex w-full h-full\">\n <div className=\"p-6 space-y-6 w-full h-full\">\n <div style={{ height: 740 }} className=\"flex space-x-7\">\n <DiscussionTopic data={dataFake.dataDiscussion} />\n <FrameComment />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Select } from \"antd\";\nimport { useMonaco } from \"@monaco-editor/react\";\nimport \"./selectLanguages.scss\";\nimport language from \"react-syntax-highlighter/dist/esm/languages/hljs/1c\";\nconst { Option } = Select;\n\nexport default function SelectLanguages({ setLanguages, question,language }) {\n const defaultLanguages = [\n { name: \"Python\", value: \"py\" },\n { name: \"JavaScript\", value: \"js\" },\n { name: \"C++\", value: \"cpp\" },\n { name: \"Java\", value: \"java\" },\n ];\n const filteredLanguages = defaultLanguages.filter((language) => {\n return question.init_code.some((code) => code._language == language.value);\n });\n console.log(\"😀 - filteredLanguages - filteredLanguages\", filteredLanguages);\n\n // console.log(monaco);\n return (\n <>\n <Select\n id=\"select-language\"\n style={{ width: 120 }}\n value={language}\n onSelect={(value) => setLanguages(value)}\n >\n {filteredLanguages.map((lang, index) => {\n return (\n <Option key={index} value={lang.value}>\n {lang.name}\n </Option>\n );\n })}\n {/* {languages.map((lang) => (\n <Option value={lang}>{lang}</Option>\n ))} */}\n </Select>\n </>\n );\n}\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport { useMonaco } from \"@monaco-editor/react\";\n\nexport default function SelectThemes({ setThemes, themes }) {\n // console.log(\"a\", monaco?.editor.create());\n return (\n <>\n {themes === \"vs-dark\" ? (\n <button\n className=\"outline-none focus:outline-none rounded \"\n onClick={() => {\n setThemes(\"light\");\n }}\n >\n <i className=\"fa-solid fa-moon text-white text-lg \"></i>\n </button>\n ) : (\n <button\n className=\"outline-none focus:outline-none rounded \"\n onClick={() => {\n setThemes(\"vs-dark\");\n }}\n >\n <i className=\"fa-solid fa-sun text-white text-lg \"></i>\n </button>\n )}\n </>\n );\n}\n","import { Tag } from \"antd\";\nimport React from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport { useSelector } from \"react-redux\";\nexport default function ContentProblemText({ question }) {\n // console.log(dataRuncode);\n const levelClassName = {\n easy: \"bg-green-700 text-green-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n medium:\n \"bg-yellow-700 text-yellow-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n hard: \"bg-red-700 text-red-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n };\n return (\n <div className=\"px-4 py-2 h-full overflow-y-scroll\">\n <div className=\"\">\n <span class=\"mr-2 inline-block text-2xl font-medium text-label-1 dark:text-dark-label-1 \">\n {HtmlParser(question.vi.question_title)}\n </span>\n <div className=\"my-2 border-b border-white pb-4\">\n <Tag className={levelClassName[question._level]}>\n {HtmlParser(question._level)}\n </Tag>\n </div>\n <div className=\"text-base pt-4 space-y-6\">\n <p> Äá» bà i: {HtmlParser(question.vi.problem)} </p>\n <div>\n <p>Äịnh dạng đầu và o:</p>\n <div\n class=\"w-full cursor-text py-2 rounded-lg border px-3 bg-dark-fill-3 border-transparent\"\n spellcheck=\"false\"\n >\n <p className=\"mb-0\"> {HtmlParser(question.input_format)}</p>\n </div>\n </div>\n <div>\n <p>Äịnh dạng đầu ra:</p>\n <div\n class=\"w-full cursor-text py-2 rounded-lg border px-3 bg-dark-fill-3 border-transparent\"\n spellcheck=\"false\"\n >\n <p className=\"mb-0\">{HtmlParser(question.output_format)}</p>\n </div>\n </div>\n <div>\n <p>Giải thÃch:</p>\n <div\n class=\"w-full cursor-text py-2 rounded-lg border px-3 bg-dark-fill-3 border-transparent\"\n spellcheck=\"false\"\n >\n <div\n className=\"whitespace-pre-line\"\n dangerouslySetInnerHTML={{ __html: question.vi.explanation }}\n ></div>\n </div>\n </div>\n <div>\n <p>Các rà ng buá»™c:</p>\n <div\n class=\"w-full cursor-text py-2 rounded-lg border px-3 bg-dark-fill-3 border-transparent space-y-2\"\n spellcheck=\"false\"\n >\n <div>\n <b>Äầu và o:</b> {question.vi.constraint_input}\n </div>\n <br />\n <div>\n <b>Äầu ra:</b> {question.vi.constraint_output}\n </div>\n <br />\n <div>\n <b>Giá»›i hạn thá»i gian:</b> {question.vi.constraint_time}\n </div>\n {/* <p className=\"mb-0\">{question.vi.constraint_input}</p>\n <p className=\"mb-0\">{question.vi.constraint_output}</p>\n <p className=\"mb-0\">{question.vi.constraint_time}</p> */}\n </div>\n </div>\n <p>Äầu và o mẫu:</p>\n <div\n class=\"w-full cursor-text rounded-lg border px-3 py-2 bg-dark-fill-3 border-transparent\"\n spellcheck=\"false\"\n >\n <p className=\"mb-0\">{question.sample_input}</p>\n </div>\n <p>Äầu ra mẫu:</p>\n <div\n class=\"w-full cursor-text rounded-lg border px-3 py-2 bg-dark-fill-3 border-transparent\"\n spellcheck=\"false\"\n >\n <p className=\"mb-0\">{question.sample_output}</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export const dapAnDung = \"Right answer\";\nexport const dapAnSai = \"Wrong answer\";\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { dapAnDung, dapAnSai } from \"../../runcode.constant\";\n\nexport default function ContentTestCase({ dataInput, dataOutput, keyIndex }) {\n const { testCaseRuncode } = useSelector((state) => state.runcodeSlice);\n // console.log(testCaseRuncode);\n return (\n <div className=\"px-4 pb-5\">\n <div class=\"flex flex-wrap\">\n <div className=\"w-1/2 px-2 mt-4\">\n <div class=\"flex h-full w-full flex-col space-y-2\">\n <div class=\"text-xs font-medium text-label-3 text-dark-label-3\">Input:</div>\n <div class=\"w-full cursor-text rounded-lg border px-3 font-menlo py-2 bg-dark-fill-3 border-transparent\">\n <div\n class=\"w-full resize-none whitespace-pre-wrap break-words font-menlo outline-none placeholder:text-label-4 placeholder:text-dark-label-4 sentry-unmask\"\n placeholder=\"Enter Testcase\"\n >\n {dataInput}\n </div>\n </div>\n </div>\n </div>\n <div className=\"w-1/2 px-2 mt-4\">\n <div class=\"flex h-full w-full flex-col space-y-2\">\n <div class=\"text-xs font-medium text-label-3 text-dark-label-3\">Ouput:</div>\n <div class=\"w-full cursor-text rounded-lg border px-3 font-menlo py-2 bg-dark-fill-3 border-transparent\" spellcheck=\"false\">\n <div class=\"w-full resize-none whitespace-pre-wrap break-words font-menlo outline-none placeholder:text-label-4 placeholder:text-dark-label-4 sentry-unmask\">\n {dataOutput}\n </div>\n </div>\n </div>\n </div>\n <div className=\"w-1/2 px-2 mt-4\">\n <div class=\"flex h-full w-full flex-col space-y-2\">\n <div\n class={`text-xs font-medium text-label-3 text-dark-label-3 ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"text-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"text-red-500\"\n : \"text-white\"\n }`}\n >\n Actual Output:\n </div>\n <div\n class={`w-full cursor-text rounded-lg border px-3 font-menlo py-2 bg-dark-fill-3 ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"border-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"border-red-500\"\n : \"border-transparent\"\n } `}\n spellcheck=\"false\"\n >\n <div\n class={`w-full resize-none whitespace-pre-wrap break-words font-menlo outline-none placeholder:text-label-4 placeholder:text-dark-label-4 sentry-unmask ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"text-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"text-red-500\"\n : \"text-white\"\n }`}\n >\n {testCaseRuncode.length > 0 ? testCaseRuncode[keyIndex].actualOutput : \" \"}\n </div>\n </div>\n </div>\n </div>\n <div className=\"w-1/2 px-2 mt-4\">\n <div class=\"flex h-full w-full flex-col space-y-2\">\n <div\n class={`text-xs font-medium text-label-3 text-dark-label-3 ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"text-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"text-red-500\"\n : \"text-white\"\n }`}\n >\n Message:\n </div>\n <div\n class={`w-full cursor-text rounded-lg border px-3 font-menlo py-2 bg-dark-fill-3 ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"border-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"border-red-500\"\n : \"border-transparent\"\n }`}\n spellcheck=\"false\"\n >\n <div\n class={`w-full resize-none whitespace-pre-wrap break-words font-menlo outline-none placeholder:text-label-4 placeholder:text-dark-label-4 sentry-unmask ${\n testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnDung\n ? \"text-green-500\"\n : testCaseRuncode.length > 0 && testCaseRuncode[keyIndex].message == dapAnSai\n ? \"text-red-500\"\n : \"text-white\"\n }`}\n >\n {testCaseRuncode.length > 0 ? testCaseRuncode[keyIndex].message : \" \"}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { Tabs } from \"antd\";\nimport ContentProblemText from \"../ProblemAndSolution/Content/ContentProblemText\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport ContentTestCase from \"./Content/ContentTestCase\";\nimport { dapAnDung, dapAnSai } from \"../runcode.constant\";\nimport { resetResultTestCase } from \"../../runcodeSlice\";\nconst { TabPane } = Tabs;\nexport default function Testcase({ className, question }) {\n let { testCaseRuncode } = useSelector((state) => state.runcodeSlice);\n const renderIconTestCase = (index) => {\n if (testCaseRuncode[index]?.message === dapAnSai) {\n return <i className=\"fa-solid fa-xmark text-red-500\"></i>;\n } else if (testCaseRuncode[index]?.message === dapAnDung) {\n return <i className=\"fa-solid fa-check text-green-500\"></i>;\n }\n };\n \n const dispatch = useDispatch();\n useEffect(()=>{\n dispatch(resetResultTestCase())\n },[question])\n return (\n <div>\n <Tabs\n // defaultActiveKey=\"1\"\n className=\"bg-theme-runcode-problem h-3/4 text-white rounded\"\n tabBarGutter={5}\n >\n {question?.test_case?.map((item, index) => {\n return (\n <TabPane\n tab={\n <span className=\"text-white flex items-center justify-center\">\n Test case {item.testcase_id + 1}\n {testCaseRuncode.length > 0 && <span className=\"ml-2 text-lg\">{renderIconTestCase(index)}</span>}\n </span>\n }\n key={index}\n >\n <ContentTestCase dataInput={item._input} dataOutput={item._output} keyIndex={index} />\n </TabPane>\n );\n })}\n </Tabs>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport Editor from \"@monaco-editor/react\";\nimport SelectLanguages from \"../SelectLanguages/SelectLanguages\";\nimport SelectThemes from \"../SelectThemes/SelectThemes\";\nimport Testcase from \"../Testcase/Testcase\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Spin, Tooltip } from \"antd\";\nimport _debounce from \"lodash/debounce\";\nimport { checkSubmitDataRuncode } from \"../../runcodeSlice\";\nimport { checkAnswers, isJson, languageEditor } from \"../../utils\";\nimport { unwrapResult } from \"@reduxjs/toolkit\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport toast from \"react-hot-toast\";\nimport { useParams } from \"react-router-dom\";\nimport localStorageServ from \"../../../../services/locaStorage.service\";\nimport classNames from \"classnames\";\nimport {\n set_request_spinner_ended,\n set_request_spinner_started,\n} from \"../../../../redux/reducer/spinnerReducer\";\nimport { loaiNhiemVu } from \"../../../../utils/taskUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function RuncodeEditor({\n question,\n idCauHoi,\n disabledButton,\n setDisabledButton,\n increaseQuestionIndex,\n isShowNextQuestion,\n setNextTask,languages,setLanguages,fecthdata\n}) {\n const { t } = useTranslation()\n let { isLoading } = useSelector((state) => state.runcodeSlice);\n\n let { chuyenDeId, monHocId, taskId } = useParams();\n\n const dispatch = useDispatch();\n const editorRef = useRef(null);\n let userInfo = localStorageServ.userInfo.get();\n // const [languages, setLanguages] = useState(question.init_code[0]._language);\n const [themes, setThemes] = useState(\"vs-dark\");\n const [defaultCode, setDefaultCode] = useState(\"\");\n const [code, setCode] = useState(\"\");\n useEffect(() => {\n const renderDefaultCode = () => {\n let defaultCode = question?.init_code.find((item) => item._language == languages);\n if(defaultCode){\n const formattedValue = defaultCode._function;\n\n isJson(formattedValue);\n if (isJson(formattedValue)) {\n setDefaultCode(JSON.parse(formattedValue));\n setCode(JSON.parse(formattedValue));\n }\n setDefaultCode(formattedValue);\n setCode(formattedValue);\n if (idCauHoi?.baiLamTracNghiem) {\n setDefaultCode(JSON.parse(idCauHoi?.baiLamTracNghiem));\n setCode(JSON.parse(idCauHoi?.baiLamTracNghiem));\n }\n }\n };\n renderDefaultCode();\n }, [languages, question, idCauHoi]);\n\n useEffect(() => {\n if (idCauHoi?.diem === 100) {\n setDisabledButton(false);\n }\n }, [idCauHoi?.diem]);\n\n\n const setLanguage = (language) => {\n setLanguages(language);\n };\n function handleEditorDidMount(editor, monaco) {\n editorRef.current = editor;\n }\n\n //nà y để submit\n\n const submitAssignmentData = (assignmentData) => {\n return servCodingCamp.postNopBaiTap(assignmentData).then((res)=>{\n if(!isShowNextQuestion){\n setNextTask(res.data.content)\n }\n })\n };\n\n const markTaskAsCompleted = () => {\n const taskCompletionData = {\n nguoiDungId: userInfo.id,\n chuyenDeId,\n monHocId,\n taskId,\n maLoai: \"RUNCODE\",\n baiHocId: idCauHoi,\n soPhutThucHien: 10,\n };\n return servCodingCamp.postHoanThanhHoc(taskCompletionData);\n };\n const onSubmitCorrect = async () => {\n const assignmentData = {\n id: 0,\n taskId: taskId * 1,\n requireId: idCauHoi,\n baiLam: editorRef.current.getValue(),\n maLoai: loaiNhiemVu.RUNCODE,\n chuyenDeId: chuyenDeId * 1,\n monHocId: monHocId * 1,\n };\n\n try {\n await submitAssignmentData(assignmentData);\n await markTaskAsCompleted();\n toast.success(\"Bạn đã trả lá»i chÃnh xác\");\n fecthdata()\n } catch (error) {\n console.error(error);\n toast.error(\"LÆ°u Ä‘iểm không thà nh công\");\n }\n };\n const submitAnswer = async () => {\n // chặn click khi chÆ°a trả lá»i\n if (code == defaultCode) return;\n const data = {\n code: editorRef.current.getValue(),\n\n language: languages === \"javascript\" ? \"js\" : languages,\n question: idCauHoi,\n };\n // ! gá»i api gá»i đáp án\n dispatch(set_request_spinner_started());\n dispatch(checkSubmitDataRuncode(data))\n .then(unwrapResult)\n .then((res) => {\n console.log(res);\n checkAnswers(res) ? onSubmitCorrect() : toast.error(\"Äã có lá»—i xảy ra\");\n dispatch(set_request_spinner_ended());\n })\n .catch((err) => {\n toast.error(\"Äã có lá»—i xảy ra\");\n console.log(err);\n dispatch(set_request_spinner_ended());\n });\n };\n\n return (\n <div className=\"relative\">\n <Spin spinning={isLoading} tip=\"Loading...\"> \n <div className=\"py-1 bg-theme-runcode-problem rounded px-2 flex justify-between items-center\">\n <div className=\"space-x-4\">\n <SelectLanguages question={question} setLanguages={setLanguage} language={languages} />\n <SelectThemes setThemes={setThemes} themes={themes} />\n </div>\n <button\n onClick={() => {\n setCode(defaultCode);\n }}\n className={classNames(\n \"text-white focus:outline-none btn_theme_red p-0 px-2 h-8 leading-5\",\n {\n \"opacity-50 cursor-not-allowed\": code == defaultCode,\n },\n {\n \"\": code != defaultCode,\n }\n )}\n >\n Reset Code\n </button>\n </div>\n <div className=\"space-y-1\">\n <Editor\n height=\"50vh\"\n language={languageEditor[languages]}\n theme={themes}\n defaultValue={defaultCode}\n value={code}\n onChange={(value) => {\n setCode(value);\n }}\n className=\"rounded bg-theme-runcode-problem shadow\"\n onMount={handleEditorDidMount}\n options={{\n fontSize: 14,\n tabSize: 4,\n minimap: {\n enabled: false,\n },\n }}\n />\n <div className=\"py-2 bg-theme-runcode-problem rounded px-2 flex justify-between items-center\">\n <button\n onClick={submitAnswer}\n className={classNames(\n \" px-2 py-1 rounded focus:outline-none\",\n {\n \"text-white focus:outline-none btn_theme_red p-0 px-2 h-8 leading-5 opacity-50 cursor-not-allowed\": code == defaultCode,\n },\n {\n \"text-white focus:outline-none btn_theme_red p-0 px-2 h-8 leading-5\":\n code != defaultCode,\n }\n )}\n >\n\n {t('chiTietNhiemVu.nopBai')}\n\n </button>\n {isShowNextQuestion && false && (\n <div>\n {disabledButton ? (\n <Tooltip placement=\"topLeft\" title={t('chiTietNhiemVu.hoanThanhDeMoKhoa')}>\n <button\n onClick={increaseQuestionIndex}\n className={`text-white px-4 py-1 rounded border border-white focus:outline-none ${disabledButton ? \"cursor-not-allowed\" : \"\"\n }`}\n >\n\n {t('chiTietNhiemVu.cauTiepTheo')}\n\n </button>\n </Tooltip>\n ) : (\n <button\n disabled={disabledButton}\n onClick={increaseQuestionIndex}\n className={`text-white px-4 py-1 rounded border border-white focus:outline-none ${disabledButton ? \"cursor-not-allowed\" : \"\"\n }`}\n >\n {t('chiTietNhiemVu.cauTiepTheo')}\n\n </button>\n )}\n </div>\n )}\n </div>\n {question && <Testcase question={question} />}\n </div>\n </Spin>\n </div>\n );\n}\n ","import { Popconfirm, Tag } from \"antd\";\nimport _ from \"lodash\";\nimport { useState } from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport servCodingCamp from \"../../../../../services/codingCam.service\";\nimport VideoPlayer from \"../../../../../components/video/VideoPlayer\";\n\n\nexport const HINT = \"HINT\";\nexport const SOLUTION = \"SOLUTION\";\nexport const SOLUTION_VIDEO = \"SOLUTION_VIDEO\";\nexport const RESULT = \"RESULT\";\n\nlet styleBtn = {\n left: \"1137px\",\n top: \"658px\",\n background:\n \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"11px\",\n border: \"2px solid #F5BC7A\",\n};\n\nexport default function ContentHintRunCode({\n type,\n valueGuide,\n listStatus,\n handleBuyGuide,\n coin,\n label = \"\",\n}) {\n\n console.log('valueGuide: ', valueGuide);\n const [source, setSource] = useState(\"\");\n\n // let guide =''\n let guide = _.find(listStatus, { maTieuDe: type });\n\n\n let renderContentGuide = () => {\n if (guide?.trangThai) {\n //solution\n switch (type) {\n case \"SOLUTION_VIDEO\":\n let lstVideo = JSON.parse(valueGuide)\n\n if (source == \"\") {\n if (lstVideo[0]?.solutionCyberlearn) {\n servCodingCamp.getFileFtpCyberLearn(lstVideo[0].noiDung).then(res => {\n setSource(res.data)\n })\n return;\n\n }\n\n servCodingCamp.getUrlVideoSolution_FPT(lstVideo[0].noiDung).then(res => {\n setSource(res.data)\n })\n }\n\n\n // return <div>\n // {/* <ReactPlayer\n\n // playbackRate={1}\n // playing={true}\n // url={source}\n // width=\"100%\"\n // height=\"100%\"\n // // style={{ borderRadius: \"100px\" }}\n // controls={true}\n // config={{\n // file: {\n // forceHLS: true,\n // },\n // }}\n // /> */}\n // <VideoPlayer source={source} />\n // {Array.from({ length: lstVideo.length }, (_, index) => {\n\n // return <button onClick={() => {\n\n\n // if (lstVideo[index]?.solutionCyberlearn) {\n // servCodingCamp.getFileFtpCyberLearn(lstVideo[index].noiDung).then(res => {\n // setSource(res.data)\n // })\n // return;\n\n // }\n\n // servCodingCamp.getUrlVideoSolution_FPT(lstVideo[index].noiDung).then(res => {\n // setSource(res.data)\n // })\n\n // }} style={styleBtn} className=\"m-2 px-3 py-1\">\n // {index + 1}\n // </button>\n // }\n // )\n // }\n\n // </div >;\n return <Tag color=\"green\" style={{cursor:'pointer'}} onClick={() => { \n window.open(valueGuide)\n }}>Click to open</Tag>\n }\n\n //hint\n return <div className=\"\">\n {HtmlParser(valueGuide.content)}\n </div>;\n }\n return (\n <div className=\" h-full flex justify-center\">\n <Popconfirm\n title=\"Bạn chắc có muốn tiếp tục ?\"\n\n onConfirm={handleBuyGuide}\n >\n <button\n className=\"card-theme rounded px-5 py-1 capitalize space-x-2 border-2 font-medium\"\n >\n <i class=\"fa fa-lightbulb\"></i>{\" \"}\n <span className=\"capitalize\"> Xem {label}</span>{\" \"}\n <span>(<i className=\"fa fa-coins\"></i> {coin} coin)</span>\n </button>\n </Popconfirm>\n </div>\n );\n };\n\n return <div>{renderContentGuide()}</div>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Tabs, Tag } from \"antd\";\nimport \"./problemAndSolution.scss\";\nimport ContentProblemText from \"./Content/ContentProblemText\";\nimport { isJson } from \"../../utils\";\nimport { updateThongTinMoRongAction } from \"../../../../redux/reducer/authReducer\";\nimport { useDispatch } from \"react-redux\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport { parentPage } from \"../../../../routes/utitlity\";\nimport ContentHintRunCode, {\n HINT,\n RESULT,\n SOLUTION,\n SOLUTION_VIDEO,\n} from \"./Content/ContentHintRunCode\";\nimport { useParams } from \"react-router-dom\";\nimport toast from \"react-hot-toast\";\nconst { TabPane } = Tabs;\n\nfunction callback(key) {\n // console.log(key);\n}\n\nexport default function ProblemAndSolution({\n question,\n setLanguages,\n languages,\n idCauHoi,\n detailTask,\n}) {\n console.log(\"idCauHoi: \", idCauHoi);\n console.log(\"question: \", question);\n\n const [defaultHint, setDefaultHint] = useState(\"\");\n const [defaultSolution, setDefaultSolution] = useState(\"\");\n let { chuyenDeId, taskId, monHocId } = useParams();\n\n const [listStatus, setListStatus] = useState([]);\n let dispatch = useDispatch();\n //hint\n const currentUrl = window.location.href;\n const isPracticePage = currentUrl.includes(parentPage.pratice);\n const isTaskPage = currentUrl.includes(parentPage.task);\n const listGuide = [\n // loaiHint: 0: mở hint, 1: mở solution, 2: mở solution video\n { label: \"Gợi ý\", value: defaultHint, type: HINT, typeId: 0, coin: 2 },\n {\n label: \"HÆ°á»›ng dẫn\",\n value: \"solution\",\n type: SOLUTION_VIDEO,\n typeId: 1,\n coin: 4,\n },\n ];\n let servCheckHint;\n let servMoHint;\n if (isPracticePage) {\n servCheckHint = servCodingCamp.checkTrangThaiHintPractice;\n servMoHint = servCodingCamp.moHintPratice;\n }\n if (isTaskPage) {\n servCheckHint = servCodingCamp.checkTrangThaiHint;\n servMoHint = servCodingCamp.moHint;\n }\n let fetchListStatus = () => {\n let payload = {\n requireId: idCauHoi,\n loaiHint: 0,\n maLoai: \"RUNCODE\",\n monHocId,\n taskId,\n chuyenDeId,\n };\n servCheckHint(payload)\n .then((res) => {\n setListStatus(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const handleBuyGuide = (payload) => {\n servMoHint(payload)\n .then((res) => {\n if (res.data.content) {\n // mua thà nh công\n fetchListStatus();\n dispatch(updateThongTinMoRongAction());\n toast.success(res.data.message);\n } else {\n toast.error(res.data.message);\n }\n })\n .catch((err) => {\n console.log(err);\n });\n // loaiHint: 0: mở hint, 1: mở solution, 2: mở solution video\n };\n useEffect(() => {\n const renderDefaultCode = () => {\n let defaultCode = question?.init_code.find(\n (item) => item._language == languages\n );\n if (defaultCode) {\n const formattedValue = defaultCode.hint;\n const formattedSolution = defaultCode.video_solution;\n\n isJson(formattedValue);\n isJson(formattedSolution);\n if (isJson(formattedValue)) {\n setDefaultHint(JSON.parse(formattedValue));\n // setCode(JSON.parse(formattedValue));\n }\n setDefaultHint(formattedValue);\n if (isJson(formattedSolution)) {\n setDefaultSolution(JSON.parse(formattedSolution));\n // setCode(JSON.parse(formattedValue));\n }\n setDefaultSolution(formattedSolution);\n // setCode(formattedValue);\n if (idCauHoi.baiLamTracNghiem) {\n setDefaultHint(JSON.parse(idCauHoi.baiLamTracNghiem));\n // setCode(JSON.parse(idCauHoi.baiLamTracNghiem));\n }\n }\n };\n renderDefaultCode();\n }, [languages, question]);\n useEffect(() => {\n fetchListStatus();\n }, [question]);\n console.log(\"defaultCode\", defaultHint);\n return (\n <>\n <Tabs\n defaultActiveKey=\"1\"\n className=\"bg-theme-runcode-problem text-white rounded\"\n onChange={callback}\n tabBarGutter={5}\n >\n <TabPane tab={<span className=\"text-white \">Bà i toán</span>} key=\"1\">\n <ContentProblemText question={question} />\n </TabPane>\n {/* {defaultHint?.content !=\"\" && <TabPane\n tab={<span className=\"text-white \">Hint</span>}\n key=\"2\"\n >\n <div className=\"p-2\">\n <Tag color=\"green\" style={{cursor:'pointer'}} onClick={() => { \n window.open(defaultHint?.content)\n }}>Click to open</Tag>\n </div>\n \n </TabPane>} */}\n {listGuide.map(({ label, value, type, typeId, coin }, index) => {\n let dataBuyHint = {\n chuyenDeId,\n monHocId,\n taskId,\n requireId: idCauHoi,\n maLoai: \"RUNCODE\",\n loaiHint: typeId,\n };\n if (type == HINT && defaultHint?.content != \"\") {\n return (\n <TabPane\n tab={<span className=\"text-white \">{label}</span>}\n key={2}\n >\n <div className=\"px-4 py-2 h-full overflow-y-scroll\">\n <ContentHintRunCode\n handleBuyGuide={() => {\n handleBuyGuide(dataBuyHint);\n }}\n dataBuyHint={dataBuyHint}\n listStatus={listStatus}\n type={type}\n valueGuide={value}\n coin={coin}\n label={label}\n />\n </div>\n </TabPane>\n );\n }\n if (type == SOLUTION_VIDEO && defaultSolution != \"\") {\n return (\n <TabPane\n tab={<span className=\"text-white \">{label}</span>}\n key={2}\n >\n <div className=\"px-4 py-2 h-full overflow-y-scroll\">\n <ContentHintRunCode\n handleBuyGuide={() => {\n handleBuyGuide(dataBuyHint);\n }}\n dataBuyHint={dataBuyHint}\n listStatus={listStatus}\n type={type}\n valueGuide={value}\n coin={coin}\n label={label}\n />\n </div>\n </TabPane>\n );\n }\n })}\n {/*<TabPane\n disabled\n tab={\n <span className=\"text-white \">\n Hint <i className=\"text-red-500 fa-solid fa-lock ml-2\"></i>\n </span>\n }\n key=\"3\"\n >\n <div className=\"p-2\">TÃnh năng chÆ°a update</div>\n </TabPane>\n <TabPane\n disabled\n tab={\n <span className=\"text-white \">\n Solution <i className=\"text-red-500 fa-solid fa-lock ml-2\"></i>\n </span>\n }\n key=\"4\"\n >\n <div className=\"p-2\">TÃnh năng chÆ°a update</div>\n </TabPane> */}\n </Tabs>\n ,\n </>\n );\n}\n","import { Modal } from \"antd\";\nimport React, { useState } from \"react\";\n\nexport default function UserGuilde() {\n const [isModalVisible, setIsModalVisible] = useState(false);\n const showModal = () => {\n setIsModalVisible(true);\n };\n\n const handleOk = () => {\n setIsModalVisible(false);\n };\n\n const handleCancel = () => {\n setIsModalVisible(false);\n stopVideo();\n };\n const youtubeLinkToEmbed = (link) => {\n var videoId = link.split(\"v=\")[1];\n var ampersandPosition = videoId.indexOf(\"&\");\n if (ampersandPosition != -1) {\n videoId = videoId.substring(0, ampersandPosition);\n }\n return videoId;\n };\n const stopVideo = () => {\n var iframe = document.getElementById(\"huongdan\");\n var src = iframe.src;\n iframe.src = src;\n };\n return (\n <>\n <Modal\n title=\"Video hÆ°á»›ng dẫn há»c táºp\"\n width=\"80%\"\n height=\"90vh\"\n style={{ top: 10 }}\n visible={isModalVisible}\n onOk={handleOk}\n onCancel={handleCancel}\n footer={null}\n className=\"modal-huong-dan-runcode\"\n >\n <div className=\"w-full h-full\">\n <iframe\n id=\"huongdan\"\n width=\"100%\"\n height=\"100%\"\n src=\"https://www.youtube.com/embed/v9fnWZH2934\"\n // title=\"HÆ°á»›ng dẫn hệ thống Live Coding\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowfullscreen\n ></iframe>\n </div>\n </Modal>\n <div className=\" cursor-pointer hover:text-yellow-300\">\n <button\n onClick={showModal}\n className=\" text-white focus:outline-none btn_theme_red p-0 px-2 h-8 leading-8\"\n >\n {\" \"}\n <i className=\"fa fa-question mr-\"></i> Cách dùng\n </button>\n </div>\n </>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Modal } from \"antd\";\nimport './cssModalEunCode.css'\n// import Modal from \"react-bootstrap/Modal\";\nexport default function ModelZoomImgRunCode() {\n const [modalVisible, setModalVisible] = useState(false);\n const [clickedImageUrl, setClickedImageUrl] = useState(\"\");\n useEffect(() => {\n const handleClick = (event) => {\n if (event.target.tagName === \"IMG\") {\n // User clicked on an image\n\n // You can do further processing here\n const imageUrl = event.target.src;\n setClickedImageUrl(imageUrl);\n setModalVisible(true);\n }\n };\n\n // Attach the click event listener to a common ancestor element\n const container = document.getElementById(\"layoutRuncode\");\n\n if (container) {\n container.addEventListener(\"click\", handleClick);\n }\n\n // Cleanup the event listener when the component unmounts\n return () => {\n if (container) {\n container.removeEventListener(\"click\", handleClick);\n }\n };\n }, []);\n return (\n <>\n <Modal\n style={{\n top: 20,\n }}\n className=\"modalRuncode\"\n visible={modalVisible}\n onCancel={() => {\n setModalVisible(false);\n }}\n footer={null}\n width={'60%'}\n\n >\n \n {/* <Modal.Body className=\"flex justify-center\"> */}\n <img alt=\"Clicked Image\" style={{ width: \"100vw\" }} src={clickedImageUrl} />\n {/* </Modal.Body> */}\n </Modal>\n </>\n );\n}","import React, { useEffect, useRef, useState } from \"react\";\nimport RuncodeEditor from \"./components/RuncodeEditor/RuncodeEditor\";\nimport ProblemAndSolution from \"./components/ProblemAndSolution/ProblemAndSolution\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport axios from \"axios\";\nimport \"./runcode.css\";\nimport SplitPane from \"react-split-pane\";\nimport { Tag, message } from \"antd\";\nimport UserGuilde from \"./components/UserGuilde/UserGuilde\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { isJsonString, levelClassName } from \"./utils\";\nimport { navigatePageByTaskNext, parentPage } from \"../../routes/utitlity\";\nimport { useLstLoTrinhDangHoc } from \"../../hook/useLstLoTrinhUser\";\nimport { checkLearning } from \"../../utils/HocDemoUtils\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport ModalClickZoomImg from \"../../components/ModalClickZoomImg/ModalClickZoomImg\";\nimport ModelZoomImgRunCode from \"./components/ModelZoomImgRunCode\";\n\nexport default function Runcode({}) {\n let { chuyenDeId, taskId, monHocId } = useParams();\n const [detailTask, setDetailTask] = useState();\n const [arrIdRuncode, setArrIdRuncode] = useState([]);\n const [arrIdFinished, setArrIdFinished] = useState([]);\n const [nextTask, setNextTask] = useState();\n\n let user = localStorageServ.userInfo.get();\n const [questionIndex, setQuestionIndex] = useState(0);\n const [question, setQuestion] = useState(null);\n const [disabledButton, setDisabledButton] = useState(false);\n const thoiGianBatDau = useRef(null);\n const navigate = useNavigate();\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(user?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n\n const [languages, setLanguages] = useState(question?.init_code[0]._language);\n\n\n const increaseQuestionIndex = () => {\n if (questionIndex === arrIdRuncode.length) return;\n setQuestionIndex(questionIndex + 1);\n };\n const decreaseQuestionIndex = () => {\n if (questionIndex === 0) return;\n setQuestionIndex(questionIndex - 1);\n };\n // ! get list id runcode\n const fectdata = (callback) => { \n console.log('fect');\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n setArrIdRuncode(JSON.parse(res.data.content.noiDungNhiemVu));\n setArrIdFinished(JSON.parse(res.data.content.hoanThanhLabel));\n setDetailTask(res.data.content)\n if (callback) callback(); // Call the callback function after data is fetched\n })\n .catch((err) => {\n console.log(err);\n });\n }\n useEffect(() => {\n fectdata()\n }, [taskId]);\n // ! get run code by id\n useEffect(() => {\n if (arrIdRuncode.length > 0) {\n const getQuestion = async () => {\n try {\n const question = await axios({\n method: \"GET\",\n url: `https://runcode.cyberlearn.vn/getQuestionID/${arrIdRuncode[questionIndex]}`,\n // url: `https://runcode.cyberlearn.vn/getQuestionID/413`,\n });\n let newInitCode = question.data.init_code.map((code) => {\n const { _function, base_code, _answer } = code;\n return {\n ...code,\n base_code: isJsonString(base_code)\n ? JSON.parse(base_code)\n : base_code,\n _function: isJsonString(_function)\n ? JSON.parse(_function)\n : _function,\n _answer: isJsonString(_answer) ? JSON.parse(_answer) : _answer,\n };\n });\n setQuestion({ ...question.data, init_code: newInitCode });\n } catch (error) {\n message.error(\"Äã có lá»—i xảy ra\");\n // dispatch(set_request_spinner_ended());\n }\n };\n getQuestion();\n // setDisabledButton(true);\n // dispatch(set_request_spinner_ended());\n }\n }, [questionIndex, arrIdRuncode.length,taskId]);\n useEffect(() => {\n if(question){\n setLanguages(question.init_code[0]._language)\n }\n }, [question]);\n return (\n <>\n {/* <SpinnerComponent /> */}\n <ModelZoomImgRunCode />\n <div\n className=\"bg-theme-runcode h-screen min-h-screen space-y-1 px-4 \"\n id=\"layoutRuncode\"\n >\n <div className=\"shadow h-10 flex items-center justify-between \">\n <div className=\"space-x-4 flex justify-center items-center\">\n <button\n onClick={decreaseQuestionIndex}\n disabled={questionIndex === 0}\n className=\"bg-dark-fill-3 rounded px-2 py-1 text-white h-7 w-7\"\n >\n <i className=\"fa-solid fa-chevron-left\"></i>\n </button>\n {/*\n //! render tình trạng đã là m hay chÆ°a\n */}\n <h2 className=\"text-center text-white text-base mb-0 w-max\">\n {question?.vi?.question_title}\n </h2>\n {arrIdFinished?.includes(question?.question_id) ? (\n <Tag className={levelClassName[\"easy\"]}>Äã hoà n thà nh</Tag>\n ) : (\n <Tag className={levelClassName[\"hard\"]}>ChÆ°a hoà n thà nh</Tag>\n )}\n {arrIdRuncode.length !== questionIndex + 1 && (\n <button\n disabled={disabledButton}\n onClick={increaseQuestionIndex}\n className={`bg-dark-fill-3 rounded px-2 py-1 text-white h-7 w-7 ${\n disabledButton ? \"cursor-not-allowed\" : \"cursor-pointer\"\n }`}\n >\n <i className=\"fa-solid fa-chevron-right\"></i>\n </button>\n \n )}\n <p className=\"text-white mb-0 text-base\">\n Câu số {questionIndex + 1}/{arrIdRuncode.length}\n </p>\n </div>\n <div className=\"flex justify-center items-center space-x-4\">\n \n <UserGuilde />\n <button\n onClick={() => { \n console.log(nextTask)\n if(nextTask &&isLearning){\n navigatePageByTaskNext(nextTask, navigate, parentPage.task, monHocId, chuyenDeId);\n }\n\n }}\n className={` text-white focus:outline-none p-0 px-2 h-8 leading-8 btn_theme_red${nextTask?\"\":\" cursor-not-allowed opacity-50\"}`}\n >\n Next\n </button>\n </div>\n </div>\n <div className=\"content\">\n <SplitPane\n split=\"vertical\"\n defaultSize=\"50%\"\n minSize={500}\n maxSize={1000}\n >\n <div className=\"h-full overflow-y-scroll\">\n {question && (\n <RuncodeEditor\n increaseQuestionIndex={increaseQuestionIndex}\n disabledButton={disabledButton}\n setDisabledButton={setDisabledButton}\n setNextTask={setNextTask}\n idCauHoi={arrIdRuncode[questionIndex]}\n question={question}\n thoiGianBatDau={thoiGianBatDau.current}\n isShowNextQuestion={arrIdRuncode.length !== questionIndex + 1}\n languages={languages}\n setLanguages={setLanguages}\n fecthdata={fectdata}\n />\n )}\n </div>\n <div className=\"h-full\">\n {question && <ProblemAndSolution detailTask={detailTask} question={question} languages={languages} setLanguages={setLanguages} idCauHoi={arrIdRuncode[questionIndex]}/>}\n </div>\n </SplitPane>\n </div>\n </div>\n </>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport InformationProject from \"../../components/ListRequireNopBai/InformationProject\";\nimport ListRequireNopBai from \"../../components/ListRequireNopBai/ListRequireNopBai\";\nimport ContentTabCol from \"../../components/ContentTabCol/ContentTabCol\";\nimport { createPayloadLayThongTinBaiTap, loaiNhiemVu } from \"../../utils/taskUtils\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport ModalClickZoomImg from \"../../components/ModalClickZoomImg/ModalClickZoomImg\";\nimport { useTranslation } from \"react-i18next\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport { typeTrangThaiNop } from \"../../components/StepProjectInstruction/util\";\n\nimport * as signalR from \"@microsoft/signalr\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport { useSelector } from \"react-redux\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport { useLstLoTrinhDangHoc, useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport { baiHocService } from \"../../services/baiHocService\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nexport default function DetailExercise() {\n const { t } = useTranslation()\n let isDemoUser = useMemo(() => checkDemoUser(), [])\n let userInfo = localStorageServ.userInfo.get();\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const [lstBaiHoc,setLstBaiHoc] = useState([])\n let { chuyenDeId, taskId, monHocId } = useParams();\n const [detailPage, setDetailPage] = useState({});\n const [trangThaiTongBaiTap, setTrangThaiTongBaiTap] = useState({\n noiDung: [],\n });\n\n const isLearning =checkLearning(chuyenDeId,dataDangHoc)\n const maLoaiNhiemVu = detailPage.maLoaiNhiemVu;\n const [listTabPane, setListTabPane] = useState([]);\n let listRequire = [];\n if (detailPage.noiDungNhiemVu?.noiDungBaiTap?.noiDung) {\n listRequire = JSON.parse(detailPage.noiDungNhiemVu.noiDungBaiTap.noiDung);\n }\n\n let getListPanel = (trangThaiTongBaiTap) => {\n let listTabPane = listRequire.map((required, index) => {\n // kiểm tra bà i đã ná»™p hay chÆ°a\n\n // -1 => false => chÆ°a ná»™p\n\n return {\n label: required.requireId,\n key: required.requireId,\n children: (\n <ListRequireNopBai\n countRequire = {listRequire.length}\n monHocId={monHocId}\n taskId={taskId}\n chuyenDeId={chuyenDeId}\n trangThaiTongBaiTap={trangThaiTongBaiTap}\n required={required}\n orderNumber={index}\n getThongTinBaiTapNop={getThongTinBaiTapNop}\n maLoaiNhiemVu={maLoaiNhiemVu}\n tongCoin={detailPage.tongCoin}\n tongExp={detailPage.tongExp}\n\n noiDungNhiemVu={detailPage.noiDungNhiemVu}\n />\n ),\n };\n });\n setListTabPane(listTabPane);\n };\n let getThongTinBaiTapNop = () => {\n let payload = createPayloadLayThongTinBaiTap(taskId, chuyenDeId, monHocId);\n servCodingCamp\n .getLayThongTinBaiTapNop(payload)\n .then((res) => {\n setTrangThaiTongBaiTap(res.data.content);\n getListPanel(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const getDataTask=() => { \n if(dataDangHoc){\n isDemoUser || !userInfo.kichHoat || !isLearning?\n servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n console.log(res);\n\n setDetailPage(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n })\n :\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n\n \n setDetailPage(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }\n }\n useEffect(() => {\n const connection = new signalR.HubConnectionBuilder()\n .withUrl(`${BASE_URL_CODINGCAMP}/chat`)\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n connection\n .start()\n .then(() => console.log(\"SignalR Connected\"))\n .catch((err) => console.error(\"SignalR Connection Error: \", err));\n\n connection.on(\"updateBH\", message => {\n // getDataTask();\n });\n // Cleanup function\n return () => {\n connection.off(\"updateBH\"); \n connection.stop();\n };\n }, []);\n useEffect(() => {\n getDataTask()\n }, [chuyenDeId, taskId, monHocId,dataDangHoc]);\n useEffect(() => {\n getThongTinBaiTapNop();\n }, [detailPage]);\n return (\n <div id=\"containerNoiDungBaiTap\" className=\"flex w-full flex-wrap c-col-full\">\n <ModalClickZoomImg />\n <div className=\"c-col-full\">\n <p className=\"text-title font-medium my-2\">\n <i className=\"fas fa-graduation-cap mr-2\"></i>\n <span>\n {t('chiTietNhiemVu.thongTinDuAn')}\n\n </span>\n {/* {detailPage.tenBaiHoc} */}\n </p>\n <InformationProject\n trangThaiTongBaiTap={trangThaiTongBaiTap}\n maNhiemVu={maLoaiNhiemVu}\n detail={detailPage}\n />\n </div>\n\n {\n trangThaiTongBaiTap.trangThai != typeTrangThaiNop.CHUA_LAM &&\n <div className=\"tabCol w-full\">\n <ContentTabCol data={listTabPane} />\n </div>\n }\n \n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport ReactPlayer from \"react-player\";\nimport httpServ from \"../../services/http.service\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { loaiNhiemVu } from \"../../utils/taskUtils\";\nimport classNames from \"classnames\";\nimport { Mark_Video } from \"../../helper/watermark\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { Tooltip } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport axios from 'axios'\nimport VideoPlayer from \"../../components/video/VideoPlayer\";\nimport { useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport useWindowSize from \"../../hook/useWindowSize\";\n\nexport default function ScreenVideo({\n baiHoc,\n handleHoanThanhBaiHoc,\n handleChangeNext,\n handleChangePrevious,\n listBaiHoc\n}) {\n const { widthWindow, heightWindow } = useWindowSize();\n\n const { t } = useTranslation()\n\n const [urlVideo, setUrlVideo] = useState(\"\");\n const [isDisableHoanThanh, seIsDisableHoanThanh] = useState(true);\n const user = localStorageServ.userInfo.get();\n\n const { userInfo } = useSelector(selectThongTinMoRong);\n useEffect(() => {\n console.log(baiHoc.content?.metaData)\n\n if (baiHoc.content?.noiDung) {\n\n let layCyberLearn = false;\n\n if (baiHoc && baiHoc.content?.metaData) {\n let metaData = JSON.parse(baiHoc.content?.metaData)\n if (metaData.videoCyberLearn && metaData.videoCyberLearn)\n layCyberLearn = true\n }\n\n\n let { noiDung, type } = baiHoc.content;\n let api =\n baiHoc.type == loaiNhiemVu.RECORD\n ? servCodingCamp.getUrlVideoRecord_FPT(noiDung)\n :\n layCyberLearn ?\n userInfo.nuocNgoai ? axios.get(`https://apicrm.cybersoft.edu.vn/api/file/ftp-video-digital/${noiDung}`) : axios.get(`https://backend.cyberlearn.vn/api/file/ftp-video/${noiDung}`)\n\n :\n servCodingCamp.getUrlVideo_FPT(noiDung)\n\n\n api.then((res) => {\n setUrlVideo(res.data);\n });\n\n }\n }, [baiHoc.content?.id]);\n useEffect(() => {\n let infor = user.hoTen + \" - \" + user.dienThoai;\n let myInterval = Mark_Video(infor);\n seIsDisableHoanThanh(true);\n setTimeout(() => {\n seIsDisableHoanThanh(false);\n }, 0 * 1000);\n\n return () => {\n clearInterval(myInterval);\n };\n }, [baiHoc?.content?.id]);\n\n let renderVideo = () => {\n\n return <VideoPlayer source={urlVideo} />;\n };\n\n let isHoanThanh = baiHoc.content?.hoanThanh;\n return (\n <section className=\"h-full w-full\">\n <div className=\"border water-mark-wrapper\">\n {renderVideo()}\n </div>\n <div className={` ${widthWindow<768?'flex-col-reverse ':'justify-between items-center'} flex c-card-content `}>\n <div className=\"text-title font-medium w-3/5\">\n {baiHoc.content?.tenBaiHoc}\n </div>\n <div className={`${widthWindow<768?'text-left': 'text-right'} space-x-2 text-black w-100 h-16`}>\n <button\n onClick={() => {\n handleChangePrevious();\n }}\n className={classNames(\"text-content card-theme font-bold px-1 text-center rounded-lg py-1 flex-1\",\n {\n \"bg-gray-500 cursor-not-allowed\": listBaiHoc?.length==1 || baiHoc.viTri==1\n }\n )}\n >\n <i class=\"icon-main fa fa-angle-double-left\"></i>\n {t('chiTietNhiemVu.baiTruocDo')}\n </button>\n <button\n onClick={() => {\n isHoanThanh && handleChangeNext();\n }}\n className={classNames(\n \"text-content card-theme font-bold px-1 text-center rounded-lg py-1 flex-1\",\n {\n \"bg-gray-500 cursor-not-allowed\": !isHoanThanh,\n }\n )}\n >\n <i className=\"icon-main fa fa-angle-double-right\"></i>\n {t('chiTietNhiemVu.baiTiepTheo')}\n\n </button>\n <button\n onClick={() => {\n !isHoanThanh && !isDisableHoanThanh && handleHoanThanhBaiHoc();\n }}\n className={`text-content card-theme px-1 text-center rounded-lg py-1 flex-1 ${isHoanThanh ? \"bg-gray-400 cursor-not-allowed\" : \"text-yellow\"\n }`}\n >\n <i className=\" fa fa-check text-white\"></i>\n\n {isHoanThanh ? (\n \"Äã hoà n thà nh\"\n ) : isDisableHoanThanh ? (\n <Tooltip\n placement=\"topLeft\"\n title=\"Bạn cần xem tiếp để hoà n thà nh\"\n arrowPointAtCenter\n defaultVisible={false}\n >\n <span className=\" text-gray-600\">\n {t('chiTietNhiemVu.hoanThanh')}\n\n\n </span>\n </Tooltip>\n ) : t('chiTietNhiemVu.hoanThanh')\n }\n </button>\n </div>\n </div>\n </section>\n );\n}","export const Mark_Video = (stringName) => {\n return setInterval(() => {\n let video = document.getElementsByClassName(\"water-mark-wrapper\")[0];\n var ran = Math.floor(Math.random() * 9);\n video.style.position = \"relative\";\n let style = \"\";\n\n if (video) {\n var listWaterMark = document.getElementsByClassName(\"water-mark\");\n var warterMark = null;\n if (listWaterMark.length === 0) {\n warterMark = document.createElement(\"h3\");\n warterMark.className = \"water-mark display-1\";\n warterMark.innerHTML = stringName;\n video.insertAdjacentElement(\"beforeend\", warterMark);\n warterMark.style.display = \"block\";\n warterMark.style.background = \"none\";\n warterMark.style.zIndex = \"99999999999\";\n warterMark.style.position = \"absolute\";\n warterMark.style.fontSize = \"1rem\";\n warterMark.style.backgroundColor = \"rgba(47, 53, 64,.8)\";\n\n warterMark.style.padding = \"15px\";\n warterMark.style.margin = \"0\";\n warterMark.style.transform = \"none\";\n warterMark.style.lineHeight = \"0\";\n warterMark.style.color = \"#fff\";\n warterMark.style.width = \"auto\";\n warterMark.style.height = \"auto\";\n warterMark.style.bottom = \"unset\";\n warterMark.style.left = \"unset\";\n warterMark.style.top = \"0\";\n warterMark.style.right = \"0\";\n } else {\n warterMark = document.getElementsByClassName(\"water-mark\")[0];\n warterMark.className = \"water-mark display-1\";\n warterMark.innerHTML = stringName;\n\n style =\n \"display:block !important ; visibility:visible !important ; opacity:0.8 !important ;background: none !important; z-index:99999999999 !important; position:absolute !important; font-size: 1rem !important; background-color: rgba(47, 53, 64,.8) !important; padding:15px !important; margin:0 !important; transform:none !important; line-height:0 !important; color: #fff !important; width:auto !important; height:auto !important; clip-path:none !important;\";\n\n switch (ran) {\n case 1:\n {\n //goc trai tren\n style +=\n \" bottom:unset !important; left:0 !important; top:0 !important; right:unset !important;\";\n }\n break;\n case 2:\n {\n //goc phai tren\n style +=\n \" bottom:unset !important; left:unset !important; top:0 !important; right:0 !important;\";\n }\n break;\n case 3:\n {\n //goc trai duoi\n style +=\n \" bottom:30px !important; left:0 !important; top:unset !important; right:unset !important;\";\n }\n break;\n case 4:\n {\n //goc phai duoi\n style +=\n \" bottom:30px !important; left:unset !important; top:unset !important; right:0 !important;\";\n }\n break;\n case 5:\n {\n //tren giua\n style +=\n \" bottom:unset !important; left:40% !important; top:unset !important; right:unset !important;\";\n }\n break;\n case 6:\n {\n //phai giua\n style +=\n \" bottom:unset !important; left:unset !important; top:50% !important; right:0 !important;\";\n }\n break;\n case 7:\n {\n //trai giua\n style +=\n \" bottom:unset !important; left:0 !important; top:50% !important; right:unset !important;\";\n }\n break;\n case 8:\n {\n //duoi giua\n style +=\n \" bottom:30px !important; left:50% !important; top:unset !important; right:unset !important;\";\n }\n break;\n case 9:\n {\n // giua\n style +=\n \" bottom:unset !important; left:40% !important; top:40% !important; right:unset !important;\";\n }\n break;\n default: {\n //goc trai tren\n style +=\n \" bottom:unset !important; left:0 !important; top:0 !important; right:unset !important;\";\n }\n }\n warterMark.setAttribute(\"style\", style);\n }\n }\n }, 30000);\n};\n","import classNames from \"classnames\";\nimport React, { useState } from \"react\";\nimport toast from \"react-hot-toast\";\nimport { useTranslation } from \"react-i18next\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nlet activeVideo = {\n titleVideo: {\n background: \"linear-gradient(360deg, #DBB845 0%, #FCE9BF 109.6%)\",\n borderRadius: \"11px\",\n },\n buttonHoanThanh: {\n background: \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"50%\",\n },\n text: {\n color: \"black\",\n },\n};\n\nexport default function SidebarLearnVideo({ handleChangeBaiHoc, listBaiHoc, activeID }) {\n const { t } = useTranslation()\n const { widthWindow, heightWindow } = useWindowSize();\n\n const [collapsed, setCollapsed] = useState(false);\n const toggle = () => {\n setCollapsed(!collapsed);\n };\n const renderSidebar = () => {\n return listBaiHoc.map((item, index) => {\n let isDaHoanThanh = item.content.hoanThanh;\n if (!item.isVideo) {\n return (\n <div className=\" c-card-content rounded bg-sp flex items-center text-content font-bold\">\n\n <div className=\"icon_theme mr-2 icon-main\">\n <i class=\"fa fa-book\"></i>\n <span className=\"bg_icon_theme\"></span>\n </div>\n <p className=\"m-0 icon-main\">{item.content}</p>\n </div>\n );\n }\n // button video\n let isAllow = item.content.truyCap;\n let isActive = activeID == item.content.id;\n let styleButtonVideo = isActive ? activeVideo.titleVideo : {};\n let styteButtonHoanThanh = isDaHoanThanh ? activeVideo.buttonHoanThanh : { borderRadius: 11 };\n\n let styleText = isActive ? activeVideo.text : {};\n return (\n <div className=\" card-theme rounded mb-2\">\n\n <div\n style={styleButtonVideo}\n onClick={() => {\n isAllow\n ? handleChangeBaiHoc(item)\n : toast.error(\"Bạn cần hoà n thà nh video trÆ°á»›c đó để xem được video nà y\");\n }}\n className={classNames(\n `p-3 space-y-2 rounded text-content hover:card-theme duration-75 cursor-pointer\n\n `,\n { \"bg-gray-600 cursor-not-allowed\": !isAllow }\n )}\n >\n <div className=\" flex space-x-2\">\n <label>{index} - </label>\n <button\n style={styteButtonHoanThanh}\n className=\"w-5 h-5 icon-main bg-main flex-shrink-0\"\n >\n {isDaHoanThanh ? <i className=\"fa fa-check\" /> : \"\"}\n </button>\n\n <div className=\" space-y-1\">\n <p style={styleText} className=\" font-medium flex-1\">\n {item.content.tenBaiHoc}\n </p>\n <p\n className={`flex items-center justify-start text-sub-content font-bold space-x-2 ${activeID == item.content.id ? \"icon-main icon-time\" : \"text-white\"\n } `}\n >\n <i\n className={`fa fa-play ${activeID == item.content.id ? \"icon-main \" : \"text-white\"\n }`}\n ></i>\n <span style={styleText}>{item.content.thoiLuong} phút</span>\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n });\n };\n if (collapsed) {\n return (\n <div\n onClick={toggle}\n className=\"cursor-pointer absolute w-40 right-0 top-0 h-10 flex items-center space-x-3 justify-center card_theme bort transform translate-x-32 hover:translate-x-2 duration-200 z-10 bg-white border-black pl-4\"\n >\n <i id=\"teeee\" className=\" fa fa-arrow-left \"></i>{\" \"}\n <span className=\"text-black \">\n {t('chiTietNhiemVu.noiDungKhoaHoc')}\n\n </span>\n </div>\n );\n }\n return (\n <div className={`${widthWindow<768?'c-col-full':'c-col-30'} c-col-30 transition py-0`} >\n <section className=\"card-theme space-y-1 flex flex-col h-full\">\n <div className=\"c-card-content space-y-2\">\n <h3 className=\"text-title flex justify-between items-center px-3\">\n {\" \"}\n <span>\n {t('chiTietNhiemVu.noiDungVideo')}\n\n </span>{\" \"}\n <i onClick={toggle} className=\"fa fa-times text-white text-xl cursor-pointer\"></i>\n </h3>\n <div className=\"overflow-y-scroll custom-scroll\" style={{ maxHeight: \"60vh\" }}>\n {renderSidebar(listBaiHoc)}\n </div>\n </div>\n </section>\n </div>\n );\n}","import React from \"react\";\nimport ContentTab from \"../../components/ContentTab/ContentTab\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport \"./style.css\";\nexport default function TabLearnVideo({ baiHoc }) {\n const data = [\n {\n label: `Ná»™i dung`,\n key: \"1\",\n children: ReactHtmlParser(baiHoc?.content?.moTa),\n },\n {\n label: `Ghi chú`,\n key: \"2\",\n children: ReactHtmlParser(baiHoc?.content?.ghiChu),\n },\n // {\n // label: `Q&A`,\n // key: \"3\",\n // children: ReactHtmlParser(\n // baiHoc?.content?.ghiChu || \"\"\n // ),\n // },\n ];\n\n if (!baiHoc?.content?.moTa && !baiHoc?.content?.ghiChu) {\n return <></>;\n }\n return (\n <div id=\"tabLearnVideo\" className=\" w-full\">\n <div className=\"card-theme h-full\">\n <div style={{ minHeight: 200 }} className=\"c-card-content\">\n <ContentTab\n className=\"text-content\"\n paddingHeaderX={20}\n paddingHeaderY={10}\n paddingTabItemX={20}\n paddingTabItemY={5}\n data={data.filter((item) => item.children.length)}\n />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useMemo } from \"react\";\nimport ScreenVideo from \"./ScreenVideo\";\nimport SidebarLearnVideo from \"./SidebarLearnVideo\";\nimport TabLearnVideo from \"./TabLearnVideo\";\n\nimport { useState } from \"react\";\nimport * as signalR from \"@microsoft/signalr\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { loaiNhiemVu } from \"../../utils/taskUtils\";\nimport ModalConfetti from \"../../components/ModalConfetti/ModalConfetti\";\nimport {\n selectThongTinMoRong,\n updateThongTinMoRongAction,\n} from \"../../redux/reducer/authReducer\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport toast from \"react-hot-toast\";\nimport { navigatePageByTaskNext, parentPage } from \"../../routes/utitlity\";\nimport { useLstLoTrinhDangHoc, useLstLoTrinhUser } from \"../../hook/useLstLoTrinhUser\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nexport default function LearnVideoPage() {\n const dispatch = useDispatch();\n let userInfo = localStorageServ.userInfo.get();\n let { chuyenDeId, taskId, monHocId } = useParams();\n const [listBaiHoc, setListBaiHoc] = useState([]);\n const [baiHoc, setBaiHoc] = useState({});\n \n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n useEffect(() => {\n getListBaiHoc();\n }, [taskId]);\n // ! check trạng thái bà i há»c\n useEffect(() => {\n // getListHoanThanhHoc();\n }, [baiHoc?.content?.id]);\n // ! lấy danh sách bà i há»c\n \n let isDemoUser = useMemo(() => checkDemoUser(), [])\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n let getListBaiHoc = (isFristFetch = true) => {\n isDemoUser || !userInfo.kichHoat || !isLearning?\n servCodingCamp\n .getDetailTaskTrial(chuyenDeId, monHocId, taskId)\n .then((res) => {\n let { noiDungNhiemVu: listData, maLoaiNhiemVu, tenNhiemVu } = res.data.content;\n let listBaiHoc = [];\n let index = 0;\n // if (maLoaiNhiemVu == loaiNhiemVu.RECORD) {\n // listData.forEach((baiHoc, index) => {\n // listBaiHoc.push({\n // content: {\n // tenBaiHoc: tenNhiemVu,\n // id: baiHoc.baiHocId,\n // noiDung: baiHoc.noiDung,\n // },\n // type: loaiNhiemVu.RECORD,\n // isVideo: true,\n // viTri: index++,\n // });\n // });\n // } else {\n listData.forEach((chuongHoc) => {\n listBaiHoc.push({\n content: chuongHoc.tenChuong,\n isVideo: false,\n viTri: index++,\n });\n\n chuongHoc.noiDungBaiHoc.forEach((baiHoc) => {\n listBaiHoc.push({\n chuongHocId: chuongHoc.chuongHoc,\n content: baiHoc,\n isVideo: true,\n viTri: index++,\n type: baiHoc.maLoai,\n });\n });\n });\n // }\n let firstVideoIndex = listBaiHoc.findIndex((item) => {\n return item.isVideo;\n });\n isFristFetch && setBaiHoc(listBaiHoc[firstVideoIndex]);\n\n setListBaiHoc(listBaiHoc);\n })\n .catch((err) => {\n console.log(err);\n })\n :\n servCodingCamp\n .getDetailTask(chuyenDeId, monHocId, taskId)\n .then((res) => {\n let { noiDungNhiemVu: listData, maLoaiNhiemVu, tenNhiemVu } = res.data.content;\n let listBaiHoc = [];\n let index = 0;\n // if (maLoaiNhiemVu == loaiNhiemVu.RECORD) {\n // listData.forEach((baiHoc, index) => {\n // listBaiHoc.push({\n // content: {\n // tenBaiHoc: tenNhiemVu,\n // id: baiHoc.baiHocId,\n // noiDung: baiHoc.noiDung,\n // },\n // type: loaiNhiemVu.RECORD,\n // isVideo: true,\n // viTri: index++,\n // });\n // });\n // } else {\n listData.forEach((chuongHoc) => {\n listBaiHoc.push({\n content: chuongHoc.tenChuong,\n isVideo: false,\n viTri: index++,\n });\n\n chuongHoc.noiDungBaiHoc.forEach((baiHoc) => {\n listBaiHoc.push({\n chuongHocId: chuongHoc.chuongHoc,\n content: baiHoc,\n isVideo: true,\n viTri: index++,\n type: baiHoc.maLoai,\n });\n });\n });\n // }\n let firstVideoIndex = listBaiHoc.findIndex((item) => {\n return item.isVideo;\n });\n isFristFetch && setBaiHoc(listBaiHoc[firstVideoIndex]);\n\n setListBaiHoc(listBaiHoc);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n \n const navigate = useNavigate();\n let handleChangeBaiHoc = (baiHoc) => setBaiHoc(baiHoc);\n const handleHoanThanhBaiHoc = () => {\n // khi nà o ấn sẽ lấy được monHocId má»›i nhất\n\n const payloadHoanThanhTask = {\n nguoiDungId: userInfo.id,\n chuyenDeId: chuyenDeId * 1,\n monHocId: monHocId * 1,\n taskId: taskId * 1,\n maLoai: baiHoc.type,\n baiHocId: baiHoc.content.id * 1,\n soPhutThucHien: 0,\n };\n\n servCodingCamp\n .postHoanThanhHoc(payloadHoanThanhTask)\n .then((res) => {\n // dispatch(setPhanThuong(res.data.content));\n // getListHoanThanhHoc();\n getListBaiHoc(false);\n handleChangeNext();\n dispatch(updateThongTinMoRongAction());\n toast.success(\"Äã hoà n thà nh video!\")\n if(baiHoc.viTri ==(listBaiHoc.length-1) && isLearning){\n navigatePageByTaskNext(res.data.content, navigate, parentPage.task, monHocId, chuyenDeId);\n toast.success(\" Hãy đến vá»›i nhiệm vụ tiếp theo!\")\n }\n\n })\n .catch((err) => {\n console.log(err);\n });\n };\n let handleChangeNext = () => {\n for (let index = baiHoc.viTri + 1; index < listBaiHoc.length; index++) {\n if (index == listBaiHoc.length) {\n // navigatePageByTaskNext(res.data.content, navigate, parentPage.task, monHocId, chuyenDeId);\n toast.success(\" Hãy đến vá»›i nhiệm vụ tiếp theo!\")\n \n return;\n }\n const baiHoc = listBaiHoc[index];\n if (baiHoc.isVideo) {\n handleChangeBaiHoc(baiHoc);\n return;\n }\n }\n };\n let handleChangePrevious = () => {\n for (let index = baiHoc.viTri - 1; index >= 0; index--) {\n const baiHoc = listBaiHoc[index];\n if (baiHoc.isVideo) {\n handleChangeBaiHoc(baiHoc);\n return;\n }\n }\n };\n const { widthWindow, heightWindow } = useWindowSize();\n // let widthVideo = collapsed ? \"c-col-full\" : \"c-col-70\";\n let widthVideo = \"\";\n return (\n <div className=\"c-card-content overflow-hidden relative w-full \">\n <ModalConfetti />\n <div className=\"flex flex-col relative pt-10 \">\n <div className={`flex transition duration-700 ${widthVideo} ${widthWindow<768?\"flex-col\":\"\"} flex-grow`}>\n <ScreenVideo\n baiHoc={baiHoc}\n handleChangeBaiHoc={handleChangeBaiHoc}\n listBaiHoc={listBaiHoc}\n handleHoanThanhBaiHoc={handleHoanThanhBaiHoc}\n handleChangeNext={handleChangeNext}\n handleChangePrevious={handleChangePrevious}\n />\n\n <SidebarLearnVideo\n listBaiHoc={listBaiHoc}\n handleChangeBaiHoc={handleChangeBaiHoc}\n activeID={baiHoc?.content?.id}\n />\n </div>\n\n\n\n <TabLearnVideo baiHoc={baiHoc} />\n </div>\n </div>\n );\n}\n","export let convertData = (danhSachNoiDung) => {\n return danhSachNoiDung?.map((item) => {\n return {\n complete: false,\n poin: \"\",\n icon: <i class=\"fa fa-play\"></i>,\n ...item,\n };\n });\n};\n","import React from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { navigatePageByTask, parentPage } from \"../../../routes/utitlity\";\nimport TooltipContentNhiemVu from \"../../../components/TooltipContentNhiemVu/TooltipContentNhiemVu\";\nlet btnCss = {\n background:\n \"radial-gradient(226.46% 280.26% at 41.98% 268.42%, #FF0C0C 8.4%, #301D09 89.92%) \",\n borderRadius: \"11px\",\n};\nexport default function TitleItemPratice({ item }) {\n const navigate = useNavigate();\n\n const btnTiepTucHoc = (\n <button\n style={btnCss}\n onClick={() => {\n navigatePageByTask(item, navigate, parentPage.pratice);\n }}\n className=\" w-max px-2 text-sub-title font-medium bg-main rounded cursor-pointer btn_theme_red \"\n >\n Bắt đầu là m hoặc tiếp tục\n </button>\n );\n return (\n <div className=\" flex items-center justify-between h-22 border-b-1\">\n <div className=\"flex items-center space-x-3\">\n <TooltipContentNhiemVu maLoaiNhiemVu={item.maLoaiNhiemVu} />\n <p className=\"text-title font-medium m-0 p-0\">{item.tenNhiemVu}</p>\n </div>\n {item.complete ? null : btnTiepTucHoc}\n </div>\n );\n}\n","import React from \"react\";\nimport { convertData } from \"./util\";\nimport TitleItemPratice from \"./TitleItemPratice\";\n\nexport default function DailiActive({ dataPratice }) {\n let { danhSachNoiDung, phanThuong } = dataPratice;\n\n const renderDailyActives = () => {\n return danhSachNoiDung?.map((item, index) => {\n return <TitleItemPratice item={item} key={index} />;\n });\n };\n return (\n <div className=\"c-col-full \">\n <div className=\"card-theme c-card-content space-y-5\">\n <p className=\" text-white text-title\">\n <i className=\"fa fa-circle text-2xl mr-2\"></i> Hoạt Ä‘á»™ng hằng ngà y\n </p>\n <div className=\" \">\n <div className=\"px-10\">{renderDailyActives()}</div>\n </div>\n </div>\n </div>\n );\n}\n","export default __webpack_public_path__ + \"static/media/close.8e8eb755.png\";","export default __webpack_public_path__ + \"static/media/open.812e028b.png\";","import classNames from \"classnames\";\nimport React, { useState } from \"react\";\nimport closeBg from \"./close.png\";\nimport openBg from \"./open.png\";\nimport ModalConfetti from \"../../../components/ModalConfetti/ModalConfetti\";\nimport \"./loot.scss\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { message } from \"antd\";\nexport default function LootBox({ isUsed, isDisabled, item }) {\n const [isOpen, setIsOpen] = useState(false);\n\n let handleMoHopQua = () => {\n servCodingCamp\n .postMoHopQuaPratice(1, item.point)\n .then((res) => {\n setIsOpen(true);\n })\n .catch((err) => {\n // message.error(\"Äiểm hoạt Ä‘á»™ng không đủ !\");\n setIsOpen(true);\n message.error(err.err.response.data.message);\n console.log(err);\n });\n };\n return (\n <div className=\"w-14 h-14 relative cursor-pointer lootContainer\">\n {isOpen && (\n <div\n onClick={() => {\n setIsOpen(false);\n }}\n className=\"w-screen h-screen fixed left-0 top-0\"\n >\n {\" \"}\n <ModalConfetti />\n </div>\n )}\n\n <img\n style={{\n filter: isDisabled ? \"grayscale(100%)\" : \"none\",\n }}\n onClick={() => {\n console.log(!isUsed && !isDisabled);\n !isUsed && !isDisabled && handleMoHopQua();\n }}\n src={isUsed ? openBg : closeBg}\n alt=\"\"\n className=\"w-full absolute h-full top-0 left-0 z-20\"\n />\n {!isUsed && !isDisabled && (\n <div className=\"circle_box absolute w-full h-full \"></div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport ProgressLine from \"../../components/ProgressLine/ProgressLine\";\nimport LootBox from \"./LootBox/LootBox\";\n\nexport default function Bonous({ dataPratice }) {\n let { phanThuong } = dataPratice;\n let pointDaNhan = [30];\n let pointUser = 30;\n const renderActivityBonus = () => {\n return phanThuong.map((item, index) => {\n let isDisabled = item.point > pointUser;\n let isUsed = pointDaNhan.includes(item.point);\n return (\n <div className=\" items-center flex flex-col space-y-2 \">\n <LootBox isDisabled={isDisabled} isUsed={isUsed} item={item} />\n <div className=\"text-white\">{item.point}</div>\n </div>\n );\n });\n };\n let currentPercent = (pointUser / phanThuong[phanThuong.length - 1]?.point) * 100;\n return (\n <div className=\" c-col-full \">\n <div className=\"card-theme c-card-content space-y-5\">\n <p className=\" text-white text-title\">\n <i className=\"fa fa-circle text-2xl mr-2\"></i> Bảng Xếp Hạng\n </p>\n <ProgressLine type=\"yellow\" percent={Math.floor(currentPercent)} />\n <div className=\"flex relative items-center justify-between p-3 px-20\">{renderActivityBonus()}</div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport DailiActive from \"./DailyActive/DailiActive\";\nimport HourlyAcive from \"./HourlyAcive/HourlyAcive\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport Bonous from \"./Bonous\";\nimport { useParams } from \"react-router-dom\";\n\nexport default function PracticPage() {\n const [dataPratice, setDataPratice] = useState({\n danhSachNoiDung: [],\n phanThuong: [],\n });\n let { chuyenDeId } = useParams();\n\n useEffect(() => {\n servCodingCamp\n .getListPratice(chuyenDeId)\n .then((res) => {\n // console.log(\"🚀 - .then - res\", res);\n setDataPratice(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n\n return (\n <div className=\" h-full \">\n <Bonous dataPratice={dataPratice} />\n <div className=\"flex\">\n <DailiActive dataPratice={dataPratice} />\n {/* <HourlyAcive /> */}\n </div>\n </div>\n );\n}\n","const skillLanguage = {\n HTML: \"html\",\n CSS: \"css\",\n PYTHON: \"python\",\n DOTNET: \"dotnet\",\n JS: \"javascript\",\n};\nexport const extractSkillLanguage = (language) => {\n let skill = \"\";\n switch (language) {\n case skillLanguage.HTML:\n skill = \"./img/skill/html.png\";\n break;\n case skillLanguage.CSS:\n skill = \"./img/skill/css.png\";\n break;\n }\n\n return <img className=\"w-full h-full object-cover\" src={skill} />;\n};\n","import React from \"react\";\nimport { extractSkillLanguage } from \"./extractIcon\";\nimport { NavLink } from \"react-router-dom\";\n/***\n * \"id\": 1,\n \"tieuDe\": \"bai viet 1\",\n \"noiDung\": \"Course Description\\r\\n\\r\\nIn this introduction to R course, you'll master the basics of this widely used open source language—including vectors, factors, lists, and data frames. With the coding skills you'll gain in this course, you'll be ready to undertake your own data analysis in R. There are millions of R users worldwide, cementing it as a leading programming language in statistics and data science. Begin your coding journey in one of DataCamp's most popular courses today!\",\n \"tagSkill\": \"[\\\"HTML\\\"]\",\n \"trangThai\": 1,\n \"loaiBaiViet\": \"[]\",\n \"nguoiTao\": \"Bùi Tiến DÅ©ng\",\n \"nguoiDuyet\": \"36dc81cf-71d0-4a6c-864b-5b802d42a976\",\n \"chuyenDeId\": 1,\n \"baiVietCha\": 0,\n \"luotXem\": 0,\n \"luotLike\": 0,\n \"luotTraLoi\": 0,\n \"luotVote\": 0,\n \"bookMark\": true\n */\nlet styleButton = {\n // width: \"96px\",\n height: \"41px\",\n background: \"linear-gradient(360deg, #FFC94C 14.14%, #F4A408 100%)\",\n borderRadius: \"9px\",\n color: \"white\",\n fontWeight: 700,\n};\nexport default function ItemPosted({ dataDocment, isLayoutGrid }) {\n const renderSkill = () => {\n return;\n return dataDocment.skill.map((s) => {\n return (\n <div className=\"w-8 h-8 shadow rounded border bg-main p-1\">\n {extractSkillLanguage(s)}\n </div>\n );\n });\n };\n const renderInteractiveBar = (\n <div className=\"flex text-content flex-1 space-x-3\">\n <p className=\"flex-1 space-x-1 flex items-center\">\n <i class=\"fa fa-eye text-sub-title font-bold\"></i>\n <span className=\"font-normal\">{dataDocment.luotXem}</span>\n </p>\n <p className=\"flex-1 space-x-1 flex items-center\">\n <i class=\"fa fa-heart text-sub-title font-bold\"></i>\n <span className=\"font-normal\">{dataDocment.luotLike}</span>\n </p>\n <p className=\"flex-1 space-x-1 flex items-center\">\n <i class=\"fa fa-comment-dots text-sub-title font-bold\"></i>\n <span className=\"font-normal\">{dataDocment.luotTraLoi}</span>\n </p>\n </div>\n );\n return (\n <section className={`${isLayoutGrid ? \"c-col-25\" : \"c-col-full\"} relative`}>\n <i class=\"fa fa-thumbtack absolute right-7 top-7 icon-main text-title cursor-pointer\"></i>\n <main className=\"card-theme\">\n <div className=\"c-card-content\">\n {/* */}\n <div className=\"grid grid-rows-10 grid-cols-10 gap-3\">\n <div\n className={`${\n isLayoutGrid ? \"row-span-2 col-span-4\" : \"row-span-7 col-span-2\"\n } `}\n >\n <img\n src={dataDocment.img}\n className=\"w-full h-full object-cover\"\n alt=\"\"\n />\n </div>\n {/* */}\n <div\n className={`${\n isLayoutGrid\n ? \"row-span-2 col-span-6 \"\n : \"row-span-2 col-span-8\"\n } space-y-3`}\n >\n <p\n className={`${\n isLayoutGrid ? \"text-sub-title\" : \"text-title\"\n } font-medium w-5/6 mr-auto`}\n >\n {dataDocment.tieuDe}\n </p>\n {isLayoutGrid && renderInteractiveBar}\n </div>\n {/* */}\n <div\n className={`${\n isLayoutGrid\n ? \"row-span-6 col-span-10\"\n : \"row-span-5 col-span-8\"\n } text-content`}\n >\n {dataDocment.noiDung}\n </div>\n {/* */}\n <div\n className={`${\n isLayoutGrid\n ? \"row-span-2 col-span-10\"\n : \"col-start-3 row-span-3 col-span-8\"\n } space-y-2`}\n >\n <div className=\"flex\">\n <div className=\"flex-1\">\n <div className=\"flex space-x-3\">{renderSkill()}</div>\n </div>\n <div className=\"flex items-center space-x-2\">\n {/* Comment */}\n {!isLayoutGrid && renderInteractiveBar}\n {/* */}\n\n <button style={styleButton}>\n <NavLink\n to={`/detail-page-document/${dataDocment.id}`}\n className=\"px-2 py-1 bg-main text-white rounded\"\n >\n Xem Chi Tiết\n </NavLink>\n </button>\n </div>\n </div>\n <button className=\"bg-sp text-white px-2 py-1 rounded font-bold\">\n # {dataDocment.userName}\n </button>\n </div>\n </div>\n </div>\n </main>\n </section>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ItemPosted from \"./ItemPosted\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nexport default function DocumentPage() {\n const [isLayoutGrid, setIsLayoutGrid] = useState(true);\n const [listDocument, setListDocument] = useState([]);\n useEffect(() => {\n servCodingCamp\n .getDocumentByOption(0)\n .then((res) => {\n setListDocument(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n\n const handleOnGridLayout = () => {\n setIsLayoutGrid(true);\n };\n const handleOnListLayout = () => {\n setIsLayoutGrid(false);\n };\n const renderListPosted = () => {\n return listDocument.map((d) => {\n return <ItemPosted dataDocment={d} isLayoutGrid={isLayoutGrid} />;\n });\n };\n return (\n <div className=\"mt-36\">\n <div className=\"c-card-content\">\n <button className=\"bg-sp px-4 py-2 text-white text-sub-title rounded-lg\">\n Bà i viết của tôi\n </button>\n </div>\n <div className=\"c-card-content \">\n <div className=\"flex h-full\">\n <div style={{ width: \"90%\" }} className=\" h-full relative\">\n <input\n type=\"text\"\n placeholder=\"Nháºp và o tên bà i viết hoặc chủ Ä‘á» tác giả\"\n className=\"h-full w-full border border-black py-2 px-3 outline-none\"\n />\n <i class=\"fa fa-search absolute text-title font-bold right-4 top-1/2 transform -translate-y-1/2\"></i>\n </div>\n <div\n style={{ width: \"10%\" }}\n className=\"flex h-full font-bold text-title\"\n >\n <button\n onClick={handleOnListLayout}\n className=\"flex-1 flex justify-center items-center\"\n >\n <i class=\"fa fa-list\"></i>\n </button>\n <button\n onClick={handleOnGridLayout}\n className=\"flex-1 flex justify-center items-center\"\n >\n <i class=\"fa fa-th-large\"></i>\n </button>\n </div>\n </div>\n </div>\n <div className=\"c-card-content\">\n <div className=\"flex flex-wrap\">{renderListPosted()}</div>\n </div>\n </div>\n );\n}\n","export default __webpack_public_path__ + \"static/media/saved.f0475a5b.svg\";","export default __webpack_public_path__ + \"static/media/notSaved.3eddec51.svg\";","import React from \"react\";\nimport ModelContentIcon from \"../../../components/ModalContentIcon/ModalContentIcon\";\nimport { iconBestPractice } from \"../../../components/ModalContentIcon/utilities\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport savedIcon from \"./icon/saved.svg\";\nimport notSavedIcon from \"./icon/notSaved.svg\";\nimport bgCard from \"./background.png\";\nimport { NavLink } from \"react-router-dom\";\nlet styleButton = {\n width: \"96px\",\n height: \"41px\",\n background: \"linear-gradient(360deg, #FFC94C 14.14%, #F4A408 100%)\",\n borderRadius: \"9px\",\n color: \"white\",\n fontWeight: 700,\n};\nlet styleText = {\n background: \"linear-gradient(360deg, #FFC94C 14.14%, #F4A408 100%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n backgroundClip: \"text\",\n textFillColor: \"transparent\",\n};\n\nexport default function CardBestPractice({ data, isSave }) {\n let { id: userId } = localStorageServ.userInfo.get();\n let handleToggleSave = () => {\n let payload = {\n // id mặc định là 0, be quy định\n id: 0,\n nguoiDungId: localStorageServ.userInfo.get().id,\n baiHocId: data.id,\n // chuyenDeId sau nà y BE trả sau\n chuyenDeId: 1,\n };\n // remove: 0: lÆ°u bà i , 1 = xóa bà i lÆ°u\n let option = isSave ? 1 : 0;\n servCodingCamp\n .postToggleSaveBestPratice(option, payload)\n .then((res) => {\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n let handleViewsPratice = () => {\n // tang luot xem\n let payload = {\n nguoiDungId: userId,\n chuyenDeId: 1,\n maLoai: \"TAILIEU\",\n baiHocId: data.id,\n };\n servCodingCamp\n .postViewsBestPratice(payload)\n .then((res) => {\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n return (\n <div className=\"c-col-25\">\n <div\n style={{\n backgroundImage: `url(${bgCard})`,\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n backgroundSize: \"100% 100%\",\n }}\n className=\" relative c-card-content h-96 flex flex-col justify-between\"\n >\n {/* <img src={bgCard} alt=\"\" className=\"absolute w-full top-0 left-0\" /> */}\n <button className=\"absolute top-4 right-4\" onClick={handleToggleSave}>\n <img className=\"w-6 \" src={!isSave ? savedIcon : notSavedIcon}></img>\n </button>\n <div className=\"h-40 w-40 mx-auto pt-10\">\n <img src={data.img} alt=\"\" className=\"w-full h-full object-cover\" />\n </div>\n <div className=\" font-medium text-sub-title relative pl-5 py-4 \">\n <div\n style={{\n background:\n \"linear-gradient(360deg, #FFC94C 14.14%, #F4A408 100%)\",\n }}\n className=\"absolute top-0 left-0 w-2 bg-red-50 h-full\"\n ></div>\n <p style={styleText}>{data.tenBaiHoc}</p>\n </div>\n <div className=\"c-card-content flex space-x-2\">\n <div className=\"w-5 h-5 mx-1 inline-blËšock bg- rounded-xl\">\n {/* <ModelContentIcon loai={iconBestPractice.SkillHtml} /> */}\n </div>\n <div className=\"w-5 h-5 mx-1 inline-block bg-white rounded-xl\">\n {/* <ModelContentIcon loai={iconBestPractice.SkillCss} /> */}\n </div>\n <p className=\"flex items-center space-x-1 font-bold text-content\">\n <i class=\"fa fa-eye\"></i>\n <span>{data.luotXem}</span>\n </p>\n </div>\n <div className=\"c-card-content flex justify-center\">\n <button onClick={handleViewsPratice} style={styleButton}>\n <NavLink to={`/detail-best-pratice/${data.id}`}>Chi tiết</NavLink>\n </button>\n {/* <button\n onClick={handleToggleSave}\n className=\"bg-main px-3 py-2 rounded-lg\"\n >\n {!isSave ? \"LÆ°u\" : \"Bá» lÆ°u\"}\n </button> */}\n </div>\n </div>\n </div>\n );\n}\n/**1 */\n","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport CardBestPractice from \"./CardBestPractice\";\n\nexport default function ListCardBestPracTice({ data, isSave = false }) {\n const renderCardPractice = () => {\n if (data.length == 0) {\n return (\n <p className=\"c-card-content text-title text-center w-full\">\n Không có bà i viết trong mục đã lÆ°u\n </p>\n );\n }\n return data.map((d) => {\n return <CardBestPractice isSave={isSave} data={d} />;\n });\n };\n return <div className=\"flex flex-wrap\">{renderCardPractice()}</div>;\n}\n","import React from \"react\";\nimport ContentTab from \"../../../components/ContentTab/ContentTab\";\nimport ListCardBestPracTice from \"./ListCardBestPracTice\";\n\nexport default function ContentBestPractice({ dataBestPractice }) {\n let { danhSachDaLuu, danhSachBestPractice } = dataBestPractice;\n\n const dataTab = [\n {\n label: `Tất Cả`,\n key: \"1\",\n children: (\n <div>\n <ListCardBestPracTice data={danhSachBestPractice} />\n </div>\n ),\n },\n {\n label: `Của Tôi`,\n key: \"2\",\n children: (\n <ListCardBestPracTice\n isSave={true}\n data={danhSachBestPractice.filter((item) => {\n return danhSachDaLuu.includes(item.id);\n })}\n />\n ),\n },\n ];\n return (\n <div className=\"c-col-full\">\n <ContentTab\n paddingHeaderX={10}\n paddingHeaderY={5}\n paddingTabItemX={8}\n paddingTabItemY={5}\n data={dataTab}\n />\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ModelContentIcon from \"../../components/ModalContentIcon/ModalContentIcon\";\nimport { iconBestPractice } from \"../../components/ModalContentIcon/utilities\";\nimport ContentBestPractice from \"./ContentBestPractice/ContentBestPractice\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nconst dataFake = {\n bgPractice: \"./img/background-practice.png\",\n chuDe: [\n {\n type: \"html\",\n name: \"HTML\",\n },\n {\n type: \"css\",\n name: \"CSS\",\n },\n {\n type: \"react\",\n name: \"React Js\",\n },\n {\n type: \"dotnet\",\n name: \"Dot Net\",\n },\n {\n type: \"python\",\n name: \"Python\",\n },\n ],\n};\n\nexport default function BestPracticePage() {\n const [dataBestPractice, setDataBestPractice] = useState({\n danhSachBestPractice: [],\n danhSachDaLuu: [],\n });\n useEffect(() => {\n servCodingCamp\n .getBestPractice(1)\n .then((res) => {\n setDataBestPractice(res.data.content);\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n\n const extractModalSkill = (name) => {\n if (name === \"python\") {\n return <ModelContentIcon loai={iconBestPractice.SkillPyThon} />;\n } else if (name === \"dotnet\") {\n return <ModelContentIcon loai={iconBestPractice.SkillDotNet} />;\n } else if (name === \"react\") {\n return <ModelContentIcon loai={iconBestPractice.SkillReactJs} />;\n } else if (name === \"html\") {\n return <ModelContentIcon loai={iconBestPractice.SkillHtml} />;\n } else if (name === \"css\") {\n return <ModelContentIcon loai={iconBestPractice.SkillCss} />;\n }\n };\n const renderAllBestPratice = () => {\n return dataBestPractice.map((c) => {\n return (\n <div className=\"flex font-medium items-center px-4 py-2 border rounded-lg\">\n <span>{c.tenBaiHoc}</span>\n <div className=\"w-5 h-5 mx-1 inline-block bg-white rounded-xl\">\n {/* {extractModalSkill(c.type)} */}\n </div>\n </div>\n );\n });\n };\n return (\n <main>\n <div className=\"c-col-full h-96 \">\n <img src={dataFake.bgPractice} alt=\"\" className=\"w-full h-full object-cover rounded\" />\n </div>\n <div className=\"c-col-full\">\n <div className=\"card-content flex items-center space-x-3\">\n <span className=\"text-title font-bold text-white\">Chủ Äá» : </span>\n <p className=\"text-sub-title flex space-x-4\">{/* {renderAllBestPratice()} */}</p>\n </div>\n </div>\n <ContentBestPractice dataBestPractice={dataBestPractice} />\n </main>\n );\n}\n","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\n\nexport default function CardCompetitions({ data }) {\n return (\n <div className=\"c-col-25\">\n <div className=\"card-theme overflow-hidden text-content\">\n <div className=\"h-40\">\n <img src={data.img} alt=\"\" className=\"w-full h-full object-cover\" />\n </div>\n <div className=\"c-card-content font-medium text-sub-title\">{data.title}</div>\n <div className=\"c-card-content flex space-x-7\">\n <span className=\"flex items-center space-x-1\">\n <i class=\"fa fa-gem\"></i>\n <span>{data.diamon}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <i class=\"fab fa-bitcoin\"></i>\n <span>{data.coin}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <i class=\"fa fa-gifts\"></i>\n <span>{data.gift}</span>\n </span>\n </div>\n <div className=\"c-card-content flex justify-between\">\n <NavLink to=\"/all-competitions\" className=\"bg-main px-3 py-2 rounded-lg\">\n KNOWLEDGE\n </NavLink>\n <p className=\"flex items-center space-x-1 font-bold\">\n <span>{data.participants}</span>\n <span> participants</span>\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport CardCompetitions from \"./CardCompetitions\";\n\nexport default function ListCompetitions({ data }) {\n const renderListCard = () => {\n return data.map((d) => {\n return <CardCompetitions data={d} />;\n });\n };\n return (\n <div>\n <div className=\"c-card-content flex items-center text-title font-bold space-x-4\">\n <i class=\"fa fa-user-friends\"></i>\n <span>Activies</span>\n </div>\n <div className=\"c-card-content\">\n <div className=\"flex flex-wrap\">{renderListCard()}</div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ContentTab from \"../../components/ContentTab/ContentTab\";\nimport ListCompetitions from \"./ListCompetitions/ListCompetitions\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nconst dataAll = [\n {\n img: \"./img/card-best-pratice.png\",\n title: \"10 Challange JS fudamemeta\",\n diamon: \"30,000\",\n view: \"1.000\",\n coin: \"30\",\n gift: \"3\",\n participants: 256,\n },\n {\n img: \"./img/card-best-pratice.png\",\n title: \"10 Challange JS fudamemeta\",\n diamon: \"30,000\",\n view: \"1.000\",\n coin: \"30\",\n gift: \"3\",\n participants: 256,\n },\n {\n img: \"./img/card-best-pratice.png\",\n title: \"10 Challange JS fudamemeta\",\n diamon: \"30,000\",\n view: \"1.000\",\n coin: \"30\",\n gift: \"3\",\n participants: 256,\n },\n {\n img: \"./img/card-best-pratice.png\",\n title: \"10 Challange JS fudamemeta\",\n diamon: \"30,000\",\n view: \"1.000\",\n coin: \"30\",\n gift: \"3\",\n participants: 256,\n },\n];\nconst data = [\n {\n label: `All Competitions`,\n key: \"1\",\n children: <ListCompetitions data={dataAll} />,\n },\n {\n label: `Thirty min challenge`,\n key: \"2\",\n children: <ListCompetitions data={dataAll} />,\n },\n {\n label: `One hour challenge`,\n key: \"3\",\n children: <ListCompetitions data={dataAll} />,\n },\n {\n label: `Project team`,\n key: \"4\",\n children: <ListCompetitions data={dataAll} />,\n },\n];\nexport default function CompetitionsPage() {\n const [competion, setCompetion] = useState({});\n useEffect(() => {\n servCodingCamp\n .getListCompetition()\n .then((res) => {\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n return (\n <main className=\"flex mt-36\">\n <div className=\"c-col-full\">\n <div className=\"card-theme\">\n <p className=\"text-title font-extrabold space-x-3 c-card-content border-b-2 border-gray-200\">\n <i class=\"fab fa-earlybirds\"></i>\n <span>Competitions</span>\n </p>\n <div className=\"c-card-content mt-12\">\n <ContentTab\n paddingHeaderX={10}\n paddingHeaderY={5}\n paddingTabItemX={8}\n paddingTabItemY={5}\n data={data}\n />\n </div>\n </div>\n </div>\n </main>\n );\n}\n","import React from \"react\";\n\nexport default function LiveEventPage() {\n return (\n <div className=\" mt-36\">\n <div className=\"flex\">\n <div className=\"c-col-38\">\n <div className=\"card-theme h-full text-content\">\n <p className=\"font-bold text-title c-card-content border-b border-gray-200 flex items-center space-x-3\">\n <i class=\"fa fa-chalkboard-teacher\"></i>\n\n <span>WORK SOFT</span>\n </p>\n <p className=\"c-card-content text-content font-bold\">Chia sẻ kinh nghiệm láºp trình cùng chuyên gia Ths. Lê Quang Song</p>\n <div className=\"c-card-content space-y-2\">\n <p className=\"space-x-2\">\n <i class=\"fa fa-directions icon-main\"></i>\n <span>Äịnh hÆ°á»›ng nghá» nghiệp</span>\n </p>\n <p className=\"space-x-2\">\n <i class=\"fa fa-directions icon-main\"></i>\n <span>Äịnh hÆ°á»›ng lá»™ trình</span>\n </p>\n <p className=\"space-x-2\">\n <i class=\"fa fa-directions icon-main\"></i>\n <span> Chia sẻ kiến thức kinh nghiệm khi há»c code</span>\n </p>\n <p className=\"space-x-2\">\n <i class=\"fa fa-directions icon-main\"></i>\n <span> Chia sẻ cách là m cv Äịnh hÆ°á»›ng tÆ°Æ¡ng lai dà i hạn</span>\n </p>\n </div>\n <div className=\"c-card-content flex justify-between\">\n <button className=\"bg-main text-white py-2 px-4 rounded-lg text-sub-title\">Tham Gia</button>\n <div className=\"text-content font-bold px-4\">\n <p className=\"flex items-center space-x-2 \">\n <i class=\"fa fa-clock icon-main\"></i>\n <span>19:00 PM 10-10-2025</span>\n </p>\n <p className=\"flex items-center space-x-2 \">\n <i class=\"fa fa-map-marker-alt icon-main\"></i>\n <span>Online</span>\n </p>\n </div>\n </div>\n <div className=\"c-card-content text-title\">\n <p>\n <span>Số ngÆ°á»i đã đăng ký : </span>\n <span className=\"icon-main\">25/50</span>\n </p>\n </div>\n </div>\n </div>\n <div className=\"c-col-62\">\n <div className=\"card-theme h-96\">\n <img src=\"./img/card-best-pratice.png\" alt=\"\" className=\"h-full w-full object-cover\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { extractSkillLanguage } from \"../../DocumentPage/extractIcon\";\n\nexport default function DetailPosted({ mainPost }) {\n let {\n id,\n tieuDe,\n noiDung,\n tagSkill,\n trangThai,\n loaiBaiViet,\n nguoiTao,\n nguoiDuyet,\n chuyenDeId,\n baiVietCha,\n luotXem,\n luotLike,\n luotTraLoi,\n luotVote,\n bookMark,\n } = mainPost;\n const renderSkill = () => {\n return [\"html\", \"css\"].map((s) => {\n return (\n <div className=\"w-8 h-8 shadow rounded border bg-main p-1\">\n {extractSkillLanguage(s)}\n </div>\n );\n });\n };\n return (\n <div style={{ width: \"95%\" }}>\n <div className=\"c-card-content flex justify-between\">\n <p className=\"text-title font-bold\">{tieuDe}</p>\n <button className=\"text-sub-title bg-sp text-white rounded px-2 py-1\">\n BookMark\n </button>\n </div>\n <div className=\"c-card-content flex space-x-4\">{renderSkill()}</div>\n <div className=\"c-card-content\">\n <button className=\"bg-sp text-white px-2 py-1 rounded font-bold\">\n # {nguoiTao}\n </button>\n </div>\n <div className=\"c-card-content\">\n <p className=\"text-content\">{noiDung}</p>\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport default function CommentOfPosted() {\n return (\n <div className=\"flex\">\n <div style={{ width: \"5%\" }} className=\"\"></div>\n <div style={{ width: \"95%\" }}>\n <div className=\"c-card-content text-title font-bold\">Bình luáºn (5)</div>\n <div className=\"c-card-content flex items-start space-x-2\">\n <div style={{ width: \"10%\" }}>\n <div className=\"w-full h-20\">\n <img src=\"\" className=\"w-full h-full object-cover\" alt=\"\" />\n </div>\n </div>\n\n <div style={{ width: \"30%\" }} className=\"space-y-2\">\n <p className=\"text-sub-title icon-main font-bold\">\n Trần Thanh DÅ©ng\n </p>\n <button className=\"bg-main text-white font-bold text-sub-title px-2 py-1 rounded\">\n Theo Dõi\n </button>\n <p className=\"flex justify-between\">\n <span className=\" text-content space-x-1 flex items-center\">\n <i class=\"fa fa-users font-bold text-sub-title\"></i>\n <span>35</span>\n </span>\n <span className=\" text-content space-x-1 flex items-center\">\n <i class=\"fa fa-heart font-bold text-sub-title\"></i>\n <span>30</span>\n </span>\n <span className=\" text-content space-x-1 flex items-center\">\n <i class=\"fa fa-newspaper font-bold text-sub-title\"></i>\n <span>25</span>\n </span>\n </p>\n <p className=\"text-content icon-main\">\n Äã trả lá»i khoảng 3 giá» trÆ°á»›c\n </p>\n </div>\n <div\n style={{ width: \"60%\" }}\n className=\"flex h-full items-center mt-4\"\n >\n <div className=\"h-0.5 bg-black w-full\"></div>\n </div>\n </div>\n <div className=\"c-card-content text-content border-b border-black\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit\n corrupti, exercitationem vel, ea dolore voluptas molestiae placeat\n voluptatem blanditiis dignissimos doloremque nihil tempora facere,\n quae explicabo! Illum ipsum quasi dolores iure. Placeat sequi nihil\n illo facere ea, dolores beatae natus voluptatibus minus iusto, veniam\n vitae velit, voluptas dolore ipsum earum ratione ducimus culpa\n excepturi fugit inventore. Ducimus assumenda minima ullam dignissimos,\n nesciunt ab mollitia eaque iste dolores accusantium distinctio\n consequuntur rem sunt nisi unde laborum! Mollitia, a voluptatibus\n culpa, eveniet voluptatum quae excepturi dicta facere eaque, iusto\n sit. Mollitia assumenda temporibus fugiat tempore odio at explicabo\n tenetur, earum voluptas labore!\n </div>\n <div className=\"pt-5\">\n <button className=\"c-card-content bg-sp text-white rounded px-2 py-1\">\n Xem Thêm Bình Luáºn\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { Tabs } from \"antd\";\n\nexport default function WriteComment() {\n return (\n <div className=\"flex\">\n <div style={{ width: \"5%\" }}></div>\n <div style={{ width: \"95%\" }} className=\"c-card-content\">\n <Tabs>\n <Tabs.TabPane\n tab={<span className=\"text-sub-title icon-main\">Viết Bà i</span>}\n key=\"item-1\"\n >\n <div className=\"h-44 border border-black\">\n <div className=\"c-card-content border-b border-black\">\n Thêm Tiêu Äá»\n </div>\n <div></div>\n </div>\n <div className=\"text-right mt-3\">\n <button className=\"bg-main text-white rounded px-2 py-1\">\n Äăng bà i\n </button>\n </div>\n </Tabs.TabPane>\n <Tabs.TabPane\n tab={<span className=\"text-sub-title icon-main\">Xem TrÆ°á»›c</span>}\n key=\"item-2\"\n >\n Content 2\n </Tabs.TabPane>\n </Tabs>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport DetailPosted from \"./DetailPosted/DetailPosted\";\nimport CommentOfPosted from \"./CommentOfPosted/CommentOfPosted\";\nimport WriteComment from \"./WriteComment/WriteComment\";\nimport InforUserOfPosted from \"./InforUserOfPosted/InforUserOfPosted\";\nimport ListPosted from \"./ListPosted/ListPosted\";\nimport RelevantPosted from \"./RelevantPosted/RelevantPosted\";\nimport TopListPosted from \"./TopListPosted/TopListPosted\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nlet mainPost = {\n id: 3,\n tieuDe: \"comment 1\",\n noiDung:\n \"lists, and data frames. With the coding skills you'll gain in this course, you'll be ready to undertake your own data analysis in R. There are millions of R users worldwide, cementing it as a leading programming language in statistics and data science. Begin your coding journey in one of DataCamp's most popular courses today!\",\n tagSkill: \"[]\",\n trangThai: 0,\n loaiBaiViet: \"[]\",\n nguoiTao: \"Bùi Tiến DÅ©ng\",\n nguoiDuyet: \"\",\n chuyenDeId: 1,\n baiVietCha: 2,\n luotXem: 0,\n luotLike: 0,\n luotTraLoi: 0,\n luotVote: 3,\n bookMark: false,\n};\nexport default function DetailDocumentPage() {\n let { id: idDocument } = useParams();\n const [detailDocument, setDetailDocument] = useState({});\n let {\n id,\n tieuDe,\n noiDung,\n tagSkill,\n trangThai,\n loaiBaiViet,\n nguoiTao,\n nguoiDuyet,\n chuyenDeId,\n baiVietCha,\n luotXem,\n luotLike,\n luotTraLoi,\n luotVote,\n bookMark,\n } = mainPost;\n useEffect(() => {\n servCodingCamp\n .getDocumentByOption(idDocument)\n .then((res) => {\n // console.log(\"🚀 - file: DocumentPage.js:69 - .then - res\", res);\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n return (\n <div className=\" bg-red-5000\">\n <div className=\"c-card-content\">\n <button className=\"bg-sp px-4 py-2 text-white text-sub-title rounded-lg\">\n Bà i viết của tôi\n </button>\n </div>\n <div className=\"c-card-content \">\n <div className=\"flex h-full\">\n <div style={{ width: \"90%\" }} className=\" h-full relative\">\n <input\n type=\"text\"\n placeholder=\"Nháºp và o tên bà i viết hoặc chủ Ä‘á» tác giả\"\n className=\"h-full w-full border border-black py-2 px-3 outline-none\"\n />\n <i class=\"fa fa-search absolute text-title font-bold right-4 top-1/2 transform -translate-y-1/2\"></i>\n </div>\n </div>\n </div>\n <div className=\"c-card-content flex\">\n <div className=\"c-col-100 pl-0\">\n <div className=\"card-theme\">\n <div className=\"flex\">\n <div style={{ width: \"5%\" }}></div>\n <DetailPosted mainPost={mainPost} />\n </div>\n <CommentOfPosted />\n <WriteComment />\n </div>\n </div>\n {/* <div className=\"c-col-25 pr-0 \">\n <InforUserOfPosted />\n <ListPosted />\n <RelevantPosted />\n <TopListPosted />\n </div> */}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nconst arrContentChallenge = [\n {\n title: \"Tham gia trắc nghiệm hằng ngà y 1/1\",\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Optio nulla sit illo mollitia voluptatibus tenetur repudiandae officiis quam\",\n complete: true,\n poin: \"\",\n icon: <i class=\"fa fa-play\"></i>,\n },\n {\n title: \"Tham gia bà i táºp thảo luáºn nhóm 0/1\",\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Optio nulla sit illo mollitia voluptatibus tenetur repudiandae officiis quam\",\n complete: true,\n poin: \"10 coin - 30 xp\",\n icon: <i class=\"fa fa-check\"></i>,\n },\n {\n title: \"Hoà n thà nh các yêu cầu project sau 0/1\",\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Optio nulla sit illo mollitia voluptatibus tenetur repudiandae officiis quam\",\n complete: false,\n poin: \"10 coin - 30 xp\",\n icon: \"3\",\n },\n {\n title: \"Hoà n thà nh bà i táºp ná»™p 0/1\",\n content:\n \"Lorem ipsum dolor sit amet consectetur adipisicing elit. Optio nulla sit illo mollitia voluptatibus tenetur repudiandae officiis quam\",\n complete: false,\n poin: \"10 coin - 30 xp\",\n icon: \"4\",\n },\n {\n title: \"\",\n content: \"\",\n complete: false,\n poin: \"10 coin - 30 xp\",\n icon: <i class=\"fa fa-graduation-cap\"></i>,\n },\n];\nexport default function ContentChallenge() {\n const renderDailyActives = () => {\n return arrContentChallenge.map((item, index) => {\n const isEnd = index === arrContentChallenge.length - 1;\n const title = isEnd ? item.poin : item.title;\n // kế thằng item cuối cùng\n const heightProcess =\n index === arrContentChallenge.length - 2 ? \"h-16\" : \"h-32\";\n const btnTiepTucHoc = (\n <button className=\"absolute top-10 right-0 px-2 py-1 text-sub-title font-medium bg-main rounded \">\n Bắt đầu là m hoặc tiếp tục\n </button>\n );\n return (\n <div className=\"border-b-1 c-card-content space-y-6 relative\">\n {item.complete ? null : btnTiepTucHoc}\n {!isEnd && <div className=\"text-title font-medium\">{item.poin}</div>}\n <div className=\"text-title font-medium relative\">\n <p>{title}</p>\n <div className=\"absolute top-0 -left-3 transform -translate-x-full space-y-2\">\n <div\n className={`${\n item.complete ? \"bg-main\" : \"bg-gray-200\"\n } text-black text-sub-title rounded-full flex items-center justify-center h-10 w-10`}\n >\n {item.icon}\n </div>\n {!isEnd && (\n <div\n className={`${heightProcess} w-1.5 ${\n item.complete ? \"bg-main\" : \"bg-gray-200\"\n } transform translate-x-4`}\n ></div>\n )}\n </div>\n </div>\n <div className=\"text-content\">{item.content}</div>\n </div>\n );\n });\n };\n return (\n <div className=\"c-col-62\">\n <div className=\"h-full bg-white relative\">\n <div className=\"absolute top-0 left-0 transform -translate-y-full c-card-content text-title font-medium inline-block border-b-0 border-2 py-2 bg-sp\">\n Hoạt Ä‘á»™ng hằng ngà y\n </div>\n <div className=\"card-theme rounded-none c-card-padding\">\n <div className=\"px-20\">{renderDailyActives()}</div>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport AvatarUserCicle from \"../../components/AvatarUserCicle/AvatarUserCicle\";\n\nexport default function TableTopUserChallenge() {\n return (\n <div className=\"c-col-38\">\n <div className=\"h-full bg-white relative\">\n <div className=\"absolute top-0 left-0 transform -translate-y-full c-card-content text-title font-medium inline-block border-b-0 border-2 py-2 bg-sp w-full text-center\">\n Top há»c viên 10 Challange JS fudamemeta\n </div>\n <div className=\"card-theme rounded-none\">\n <table className=\"w-full text-left c-card-content\">\n <tr className=\"text-sub-title font-bold border-yellow-500 border-b-2\">\n <th className=\" py-7 \"></th>\n <th>Há» Tên</th>\n <th>Tiến Äá»™</th>\n <th>Thá»i Gian</th>\n <th>Äiểm</th>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n <tfoot>\n <tr className=\" py-7 font-bold mt-2 border-t-2 border-yellow-500 text-sub-title \">\n <p>Thông tin của tôi</p>\n </tr>\n <tr className=\"font-semibold text-content\">\n <td className=\" py-5 \">\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n </tfoot>\n </table>\n {/* <table>\n <thead>\n <th>aa</th>\n <th>Há» Tên</th>\n <th>Tiến Äá»™</th>\n <th>Thá»i Gian</th>\n <th>Äiểm</th>\n </thead>\n <tbody></tbody>\n <tfoot>\n <tr>Thông tin của tôi</tr>\n <tr className=\"font-semibold text-content \">\n <td>\n <div className=\"flex flex-col items-center justify-center\">\n <AvatarUserCicle\n width={\"30px\"}\n height={\"30px\"}\n avatar={\"./img/ngo_diec_pham.png\"}\n />\n <span>358</span>\n </div>\n </td>\n <td>\n <p>TrÆ°Æ¡ng Tấn Khải</p>\n <p className=\"icon-main\">[PRICIPAL ENGINER]</p>\n </td>\n <td>10%</td>\n <td>30Days</td>\n <td>9.8</td>\n </tr>\n </tfoot>\n </table> */}\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport ContentChallenge from \"./ContentChallenge\";\nimport TableTopUserChallenge from \"./TableTopUserChallenge\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nconst dataFake = {\n tenChuDe: \"10 Challange JS fudamemeta\",\n imgChuDe: \"./img/card-best-pratice.png\",\n diamon: \"30,000\",\n coin: \"30\",\n};\nexport default function DetailCompetitionsPage() {\n useEffect(() => {\n servCodingCamp\n .getListCompetition()\n .then((res) => {\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n return (\n <div className=\" mt-32\">\n <div className=\"flex\">\n <div className=\"c-col-35 \">\n <div className=\"card-theme c-card-padding h-full\">\n <p className=\"c-card-content border-b border-gray-200 text-title font-extrabold flex items-center space-x-3\">\n <i class=\"fab fa-earlybirds\"></i>\n {/* <span>{dataFake.tenChuDe}</span> */}\n </p>\n <div className=\" h-72\">\n <img\n src={dataFake.imgChuDe}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"c-card-content text-title font-bold flex items-center space-x-2 bg-sp\">\n <i class=\"fa fa-gifts\"></i>\n <span>Tổng giá trị phần thưởng</span>\n </div>\n <div className=\"c-card-content flex space-x-7 text-sub-title\">\n <span className=\"flex items-center space-x-1\">\n <i class=\"fa fa-gem\"></i>\n <span>{dataFake.diamon}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <i class=\"fab fa-bitcoin\"></i>\n <span>{dataFake.coin}</span>\n </span>\n </div>\n </div>\n </div>\n <div className=\"c-col-65 \">\n <div className=\"card-theme c-card-padding h-full\">\n <p className=\"c-card-content border-b border-gray-200 text-title font-extrabold flex items-center space-x-3 \">\n <i class=\"fab fa-earlybirds\"></i>\n <span>specific description</span>\n </p>\n\n <div className=\"c-card-content text-sub-title \">\n Lorem ipsum dolor sit amet, consectetur adipisicing elit.\n Voluptatem, ab. Velit sed architecto laboriosam cumque at ipsa\n dolores similique quasi aliquam omnis? Aut at cum quos autem sit.\n Voluptate placeat aspernatur dolor, quia ut eaque recusandae\n minima error exercitationem tenetur iure tempora quisquam\n voluptatum quod consequuntur cupiditate animi vel voluptates,\n corporis perspiciatis vero ea omnis! Odio excepturi labore tempore\n minus eum modi aut possimus? Inventore assumenda nostrum sunt\n iusto eos, exercitationem quas cumque at rerum, necessitatibus\n distinctio perspiciatis. Vel vitae et omnis hic natus soluta\n facere architecto quo totam molestiae, rerum inventore\n reprehenderit, necessitatibus ad dignissimos deleniti ipsam,\n voluptates recusandae.\n </div>\n </div>\n </div>\n </div>\n <div className=\"flex mt-20\">\n <ContentChallenge />\n <TableTopUserChallenge />\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nlet imgSrc =\n \"https://drive.google.com/file/d/19VapfW9zD8mGK9OBtQbPJ39F4Jl5rfAj/view?usp=sharing\";\nexport default function Banner({ data }) {\n return (\n <div className=\"card-theme\">\n {/* <Banner /> */}\n <div className=\"c-card-content \">\n <div className=\"w-full bg-gray-500 rounded-xl h-96\"></div>\n\n <h2 className=\"text-title text-center\">{data.tenBaiHoc}</h2>\n <div className=\"c-card-content space-y-5\">\n <p className=\"flex items-center space-x-1 font-bold text-content\">\n <i class=\"fa fa-eye\"></i>\n <span>{data.luotXem}</span>\n </p>\n <p className=\"space-x-5 text-title \">\n <i class=\"fab fa-html5\"></i>\n <i class=\"fab fa-html5\"></i>\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ReactHtmlParser from \"react-html-parser\";\n\nexport default function Content({ data }) {\n return (\n <div className=\"card-theme card-them h-full\">\n <div className=\"c-card-content leading-8\">\n {ReactHtmlParser(data.noiDung)}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Banner from \"./Banner\";\nimport Content from \"./Content\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nlet dataDetail = {\n id: 1859,\n tenBaiHoc: \"Cac bai viet tong hop ve css\",\n noiDung:\n \"<p>ChÆ°Æ¡ng redux toolkit:</p>\\r\\n<p>https://github.com/khaitruong1301/react_cyberlearn_khoahoc_06</p>\\r\\n<p>ChÆ°Æ¡ng react router dom:</p>\\r\\n<p>https://github.com/khaitruong1301/react_cyberlearn_khoahoc_06_Chuong2</p>\\r\\n<p>ChÆ°Æ¡ng Typescript cÆ¡ bản:</p>\\r\\n<p>https://github.com/khaitruong1301/react_cyberlearn_khoahoc_06_Chuong3</p>\\r\\n<p>ChÆ°Æ¡ng Ãp dụng dá»± án typescript react The Shoes Shop</p>\\r\\n<p>https://github.com/khaitruong1301/react_cyberlearn_khoahoc_06_Chuong4</p>\\r\\n<p>Api: https://shop.cyberlearn.vn/swagger/index.html</p>\\r\\n<p>Layout figma: https://www.figma.com/file/HPyvaEJpBCxXB3p2r59nk6/Capstone-project-full-page?t=imGevZ30jtGYGyr4-0</p>\\r\\n<p>Link mô tả api và ui : https://drive.google.com/file/d/1kmrKwdGpEdfld6M_eDJjXPIOth7sVr4r/view?usp=share_link</p>\\r\\n\",\n moTa: \"\",\n ghiChu: \"\",\n thoiLuong: 0,\n xemDemo: false,\n tagSkill: \"[]\",\n tag: \"[]\",\n capDo: 1,\n maLoai: \"TAILIEU\",\n coin: 0,\n kinhNghiem: 0,\n tichCuc: 0,\n loaiBaiTap: \"[]\",\n metaData: \"\",\n ngayTao: \"2023-05-26T14:46:27.22\",\n luotXem: 1,\n};\nexport default function BestPracticeDetail() {\n const [dataDetail, setDataDetail] = useState({});\n let { id: idBestPractice } = useParams();\n\n useEffect(() => {\n servCodingCamp\n .getBestPractice(1)\n .then((res) => {\n let detail = res.data.content.danhSachBestPractice.filter((item) => {\n return item.id == idBestPractice;\n });\n setDataDetail(detail[0]);\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n return (\n <div className=\"flex text-content h-full\">\n <div className=\"c-col-30\">\n <Banner data={dataDetail} />\n </div>\n <div className=\"c-col-70 h-full\">\n <Content data={dataDetail} />\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Checkbox } from \"antd\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\nconst onChange = (e) => {\n // console.log(`checked = ${e.target.checked}`);\n};\n\nexport default function ShopFilter({ activeFilter, setActiveFilter }) {\n const { t } = useTranslation()\n\n const [options, setOptions] = useState([]);\n useEffect(() => {\n servCodingCamp\n .loaiVatPham()\n .then((res) => {\n setOptions(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n\n return (\n <div className=\" w-80 2xl:w-64 space-y-5\">\n <h4\n style={{\n borderBottom: \" 1px solid rgba(249, 211, 128, 1)\",\n }}\n className=\"text-content font-bold uppercase\"\n >\n {t('vatPham.chonLoc')}\n\n </h4>\n\n <div className=\"space-y-5 \">\n <div className=\"item_filter\">\n <Checkbox\n onClick={() => { }}\n className=\"transform \"\n onChange={() => {\n setActiveFilter(0);\n }}\n checked={activeFilter == 0}\n >\n <span className=\"pl-2 text-content uppercase\">tất cả</span>\n </Checkbox>\n </div>\n {options.map(({ label, value }) => {\n return (\n <div className=\"flex items-center space-x-5 item_filter\">\n <Checkbox\n checked={activeFilter == value}\n onClick={() => { }}\n className=\"transform \"\n onChange={() => {\n setActiveFilter(value);\n }}\n >\n <span className=\"pl-2 text-content uppercase\">{label}</span>\n </Checkbox>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","export default __webpack_public_path__ + \"static/media/dollar.84cf06a8.png\";","export default __webpack_public_path__ + \"static/media/effect.cb98ed0e.png\";","import React, { useState } from \"react\";\nimport ModalWrapper from \"../../components/ModalWrapper/ModalWrapper\";\nimport bgCoin from \"./dollar.png\";\nimport squareBG from \"./effect.png\";\nimport { ContentVatPham } from \"../../components/VatPham/ContentVatPham\";\nimport { useTranslation } from \"react-i18next\";\nlet ShopItem = ({ item }) => {\n let { hinhAnh, tenVatPham, chiPhi } = item;\n const { t } = useTranslation()\n\n return (\n <>\n <div className=\" rounded-xl w-full card-theme flex p-2 items-center\">\n <div className=\"w-28 h-28 relative p-2 flex-shrink-0\">\n <img src={hinhAnh} className=\" rounded object-cover h-full w-full block\" alt=\"\" />\n <img className=\"absolute w-full h-full top-0 left-0 \" src={squareBG} alt=\"\" />\n </div>\n {/* <button className=\"w-full py-3 text-white uppercase font-bold text-xl btn_vat_pham\">\n Äổi váºt phẩm\n </button> */}\n <div className=\"p-1 text-content pl-2 space-y-2 w-full\">\n <p className=\" mt-3\">{tenVatPham}</p>\n <p className=\"flex items-center\">\n {/* Giá váºt phẩm: */}\n <span className=\"mr-2\"> {chiPhi} </span>\n <img src={bgCoin} className=\"w-4\" alt=\"\" />\n </p>\n <div className=\"text-right w-full\">\n <button\n // onClick={handleBuy}\n className=\" py-1 text-white uppercase font-bold text-sm btn_vat_pham px-3 rounded text-left\"\n >\n {t('vatPham.muaVatPham')}\n\n </button>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default function ModalShopItem({ item }) {\n let icon = <ShopItem item={item} />;\n return (\n <div className=\"w-full\">\n <ModalWrapper icon={icon} content={<ContentVatPham item={item} />} />\n </div>\n );\n}\n/**\n * {\n \"id\": 5,\n \"tenVatPham\": \"Vé là m lại trắc nghiệm\",\n \"\": 500,\n \"hanSuDung\": 0,\n \"hinhAnh\": \"https://cdn3d.iconscout.com/3d/premium/thumb/ticket-discount-6849609-5607199.png\",\n \"moTa\": \"Tăng thanh tÃch cá»±c (HP) lên 3000 và khi bị trừ tÃch cá»±c giảm 50% số Ä‘iểm bị trừ\",\n \"dieuKienGhep\": \"[]\",\n \"maNhom\": 3\n}\n */\n","import React, { useEffect, useState } from \"react\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport ModalShopItem from \"./ModalShopItem\";\n\nexport default function ShopList({ activeFilter }) {\n const [listVatPham, setListVatPham] = useState([]);\n useEffect(() => {\n servCodingCamp\n .getDanhSachVatPham()\n .then((res) => {\n setListVatPham(res.data.content);\n // console.log(res);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n\n let filteredVatPham = listVatPham.filter(({ maNhom }) =>\n activeFilter == 0 ? true : maNhom == activeFilter\n );\n return (\n <div\n className=\" c-card-content w-full rounded\"\n style={{\n background:\n \"linear-gradient(180deg, rgba(255, 255, 255, 0.08) -12.05%, rgba(0, 0, 0, 0.08) 111.83%)\",\n }}\n >\n {/* <div className=\"grid grid-cols-3 gap-10 w-full\"> */}\n <div className=\"grid gap-8 grid-cols-3 md:grid-cols-2 sm:grid-cols-1 lg:grid-cols-2\">\n {filteredVatPham.map((item, index) => {\n return <ModalShopItem item={item} key={index} />;\n })}\n {!filteredVatPham.length && <h2 className=\"text-title\">Không có váºt phẩm</h2>}\n </div>\n </div>\n );\n}\n// {background: linear-gradient(180deg, rgba(255, 255, 255, 0.08) -12.05%, rgba(0, 0, 0, 0.08) 111.83%);\n\n// \"id\": 1,\n// \"tenVatPham\": \"Voucher 3%\",\n// \"chiPhi\": 30,\n// \"hanSuDung\": 0,\n// \"hinhAnh\": \"https://kimconcept.com/wp-content/uploads/2022/07/anh-1-Gift-voucher-la-gi.jpeg\",\n// \"moTa\": \"Khi ghi danh lá»™ trình má»›i bạn được giảm giá 3% khi sở hữu voucher nà y\",\n// \"dieuKienGhep\": [],\n// \"maNhom\": 1,\n// \"danhSachVatPhamGhep\": []\n// }\n","import React from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport toast from \"react-hot-toast\";\nimport { useTranslation } from \"react-i18next\";\nimport { getVatPhamUserAction } from \"../../../redux/reducer/vatPhamSlice\";\nimport { useDispatch } from \"react-redux\";\n\nexport default function VatPhamGhep({ item }) {\n const { t } = useTranslation()\n let dispatch = useDispatch();\n\n let handleGhepVatPham = (vatPhamId) => {\n servCodingCamp\n .ghepVatPham(vatPhamId)\n .then((res) => {\n if (res.data.content) {\n toast.success(\"Ghép thà nh công\");\n dispatch(getVatPhamUserAction());\n } else {\n toast.error(res.data.message);\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n return (\n <>\n {/* <button classNcfame=\"btn_swap\">Ghép váºt phẩm</button> */}\n <button\n onClick={() => {\n handleGhepVatPham(item.id);\n }}\n className=\"btn_theme_red\"\n >\n {t('vatPham.ghepVatPham')}\n\n </button>\n {/* ghép váºt phẩm */}\n <p className=\"text-title\">\n\n {t('vatPham.ketQuaSauKhiGhep')}\n\n </p>\n <div className=\"card-theme \">\n {item?.danhSachVatPhamGhep.map((item, key) => {\n return (\n <div className=\"text-title flex items-center rounded p-5 space-x-5\">\n <img src={item?.hinhAnh} className=\" rounded object-cover h-28 block\" alt=\"\" />\n <div className=\"space-y-2\">\n <p>\n <span> {t('vatPham.tenVatPham')}:</span> <span>{item?.tenVatPham}</span>\n </p>\n <p>\n <span> {t('vatPham.moTa')}:</span>\n <span>{HtmlParser(item?.moTa)}</span>\n </p>\n {/* <p>\n <span>Số lượng:</span> <span>{item?.soLuong}</span>\n </p> */}\n </div>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport servVatPham from \"../../../services/vatPham.service\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch } from \"react-redux\";\nimport { getVatPhamUserAction } from \"../../../redux/reducer/vatPhamSlice\";\n\nexport default function VatPhamMo() {\n const { t } = useTranslation()\n let dispatch = useDispatch();\n\n let handleMoHopQua = () => {\n servVatPham\n .moHopQua()\n .then((res) => {\n \n dispatch(getVatPhamUserAction());\n })\n .catch((err) => {\n console.log(err);\n });\n };\n return (\n <div>\n <button onClick={handleMoHopQua} className=\"btn_theme_red\">\n {t('vatPham.moVatPham')}\n\n </button>\n </div>\n );\n}\n/**\n * {\n \"id\": 14,\n \"tenVatPham\": \"Nón Cybersoft\",\n \"chiPhi\": 0,\n \"hanSuDung\": 0,\n \"hinhAnh\": \"https://apimentor11.cybersoft.edu.vn/images/non_bao_hiem.png\",\n \"moTa\": \" HÆ°á»›ng dẫn đổi: Sau khi mua, kiểm tra váºt phẩm đã có trong hòm đồ và đến gặp tÆ° vấn để đổi quà .\",\n \"dieuKienGhep\": \"[]\",\n \"maNhom\": 2,\n \"maLoai\": \"XEM\",\n \"metaData\": \"\"\n}\n */\n","import React from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport VatPhamGhep from \"./VatPhamGhep\";\nimport VatPhamMo from \"./VatPhamMo\";\nimport { useTranslation } from \"react-i18next\";\n\nlet typeVatPham = {\n XEM: \"XEM\",\n MO: \"MO\",\n GHEP: \"GHEP\",\n};\nexport default function SwapItem({ item }) {\n const { t } = useTranslation()\n\n return item?.tenVatPham ? (\n <div className=\"h-full w-full space-y-5 bg-transparent rounded p-5\">\n {item?.maLoai == typeVatPham.GHEP && (\n <p className=\"text-title\">\n {t('vatPham.banCan')} {item?.danhSachVatPhamGhep[0]?.soLuong} {t('vatPham.vatPhamHienTai')}\n </p>\n )}\n <div className=\"card-theme p-5\">\n <div className=\" text-title flex items-center rounded space-x-5\">\n <img src={item?.hinhAnh} className=\" rounded object-cover h-28 block\" alt=\"\" />\n <div className=\"space-y-2\">\n <p>\n <span> {t('vatPham.tenVatPham')}:</span> <span>{item?.tenVatPham}</span>\n </p>\n <p>\n <span>{t('vatPham.moTa')}: </span>\n <span>{HtmlParser(item?.moTa)}</span>\n </p>\n <p>\n {\" \"}\n <span>{t('vatPham.soLuong')}:</span> <span>{item?.soLuong}</span>\n </p>\n </div>\n </div>\n </div>\n {item?.maLoai == typeVatPham.GHEP && <VatPhamGhep item={item} />}\n {item?.maLoai == typeVatPham.MO && <VatPhamMo item={item} />}\n </div>\n ) : (\n <></>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport squareBG from \"./effect.png\";\nimport classNames from \"classnames\";\nimport SwapItem from \"./SwapItem/SwapItem\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getVatPhamUser, getVatPhamUserAction } from \"../../redux/reducer/vatPhamSlice\";\n\nexport default function YourList({ activeFilter }) {\n let listVatPham = useSelector((state) => state.vatPhamSlice.vatPhamUser) || [];\n const [selectedIndex, setSelectedIndex] = useState(0);\n let dispatch = useDispatch();\n useEffect(() => {\n dispatch(getVatPhamUserAction());\n }, []);\n useEffect(() => {\n setSelectedIndex(0);\n }, [activeFilter]);\n\n const renderGridLayout = () => {\n let newList = listVatPham?.filter(({ maNhom }) => {\n if (activeFilter == 0) return true;\n return maNhom == activeFilter;\n });\n let gridContainer = [];\n for (let i = 0; i < 16; i++) {\n let item = (\n <div className=\"card-theme h-32 w-32 rounded\">\n {newList[i] && (\n <div\n onClick={() => {\n setSelectedIndex(i);\n }}\n className={classNames(\"w-full h-full relative p-2 flex-shrink-0 your_item\", {\n \"bg-yellow-400\": selectedIndex == i,\n })}\n >\n <img\n src={newList[i].hinhAnh}\n className=\" rounded object-cover h-full w-full block\"\n alt=\"\"\n />\n <img className=\"absolute w-full h-full top-0 left-0 \" src={squareBG} alt=\"\" />\n <p className=\" absolute -bo ttom-1 -right-1 w-5 h-5 rounded-full bg-yellow-theme text-black font-bold text-center\">\n {newList[i].soLuong}\n </p>\n </div>\n )}\n </div>\n );\n gridContainer.push(item);\n }\n return gridContainer;\n };\n\n return (\n <div\n className=\" c-card-content w-full rounded flex md:flex-col-reverse sm:flex-col-reverse\"\n style={{\n background:\n \"linear-gradient(180deg, rgba(255, 255, 255, 0.08) -12.05%, rgba(0, 0, 0, 0.08) 111.83%)\",\n }}\n >\n <div className=\"grid grid-cols-4 2xl:grid-cols-3 md:grid-cols-5 sm:grid-cols-3 gap-4 flex-shrink-0 h-max-content\">\n {renderGridLayout()}\n </div>\n <SwapItem item={listVatPham[selectedIndex]} />\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport ShopFilter from \"./ShopFilter\";\nimport ShopList from \"./ShopList\";\nimport ContentTab from \"../../components/ContentTab/ContentTab\";\nimport YourList from \"./YourList\";\nimport \"./style.scss\";\nimport { useTranslation } from \"react-i18next\";\nimport useWindowSize from \"../../hook/useWindowSize\";\n\nexport default function ShopPage() {\n const { t } = useTranslation()\n \n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 768 ? true : false;\n\n const [activeFilter, setActiveFilter] = useState(0);\n const renderTabs = () => {\n return [\n {\n label: (\n <span className=\"text-content px-5 font-bold\">\n <i class=\"fa fa-store mr-2\"></i>\n {t('vatPham.cuaHang')}\n\n </span>\n ),\n key: \"1\",\n children: <ShopList activeFilter={activeFilter} />,\n },\n {\n label: (\n <span className=\"text-content px-5 font-bold\">\n <i class=\"fa fa-box-open mr-2\"></i>\n {t('vatPham.vatPhamSoHuu')}\n\n </span>\n ),\n key: \"3\",\n children: <YourList activeFilter={activeFilter} />,\n },\n ];\n };\n return (\n <div id=\"shop_page\" className=\"flex c-card-content space-x-3\">\n {!isPhone && <ShopFilter activeFilter={activeFilter} setActiveFilter={setActiveFilter} />}\n <ContentTab\n backgroundHeader=\"transparent\"\n // paddingHeaderX={10}\n paddingHeaderX={0}\n paddingHeaderY={0}\n // paddingHeaderY={widthWindow > 1024 ? 12 : 7}\n paddingTabItemX={10}\n paddingTabItemY={15}\n data={renderTabs()}\n />\n </div>\n );\n}\n","import { Button, Modal, Progress } from \"antd\";\nimport React, { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function Navigate_Footer_Pratices_DaoVao({\n current,\n handleClickNextQuestion,\n isDisableBtn,\n total,\n listQuestion,\n}) {\n const { t } = useTranslation()\n\n let { maBaiTest, gmail } = useSelector((state) => state.testDauVaoSlice.info);\n\n const [open, setOpen] = useState(false);\n const [loading, setloading] = useState(false);\n const hideModal = () => {\n setOpen(false);\n };\n\n const handle_PostKetQua = () => {\n let countCorrected = 0;\n for (let index = 0; index < listQuestion.length; index++) {\n const question = listQuestion[index];\n question.isCorrect && countCorrected++;\n }\n let diemQuizz = (countCorrected / total) * 10;\n let inforQuizz = {\n soCauDung: countCorrected,\n diem: diemQuizz,\n noiDungBaiLam: listQuestion.map((item) => {\n return {\n id: item.id,\n luaChon: item.isCorrect,\n noiDungbaiLam: item.userAnsers,\n tieuDe: item.noiDung,\n };\n }),\n };\n\n let dataNopBai = {\n email: gmail,\n maBaiTest: maBaiTest,\n linkNopBai: JSON.stringify(inforQuizz),\n };\n // dataNopBai = JSON.stringify(dataNopBai);\n // return\n servCodingCamp\n .putNopBaiTestDauVao(dataNopBai)\n .then((res) => {\n // if (diemQuizz > 7) {\n Modal.info({\n title: `\n Chúc mừng bạn đã hoà n thà nh xong bà i kiểm tra.\n\n `,\n onOk() {\n window.location.href = \"https://cyberlearn.vn/\";\n },\n });\n // }\n })\n .catch((err) => {\n \n });\n };\n\n const handleClickNext = () => {\n return !isDisableBtn ? handleClickNextQuestion() : null;\n };\n const percent = Math.floor((current / total) * 100);\n const nextBtnCss = isDisableBtn\n ? \" text-gray-600 bg-gray-300 cursor-not-allowed\"\n : \" bg-blue-theme text-white \";\n return (\n <div\n style={{\n background:\n \"radial-gradient(91.01% 91.01% at 16.52% 42.45%, #ffc94c 0%, #eebe47 23%, #edb720 52%\",\n }}\n className=\" bg-white flex items-center h-16 w-full justify-center space-x-10 px-16 border-none rounded-2xl\"\n >\n <div className=\"flex items-cente space-x-5 justify-center max-w-screen-md w-full\">\n <Progress\n step={total}\n percent={percent}\n className=\"w-full\"\n showInfo={false}\n strokeWidth={15}\n strokeColor={{\n \"0%\": \"#301D09\",\n \"100%\": \"#FF0C0C\",\n }}\n trailColor={\"rgba(68, 66, 178, 0.1)\"}\n />\n <span className=\"font-bold flex-shrink-0 text-content \">\n {current}/{total} câu\n </span>\n </div>\n\n <Button\n onClick={() => {\n return current === total ? handle_PostKetQua() : handleClickNext();\n }}\n className={\n \" text-white duration-150 font-bold px-8 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n loading={loading}\n >\n {current == total ? t('chiTietNhiemVu.hoanThanh') : t('chiTietNhiemVu.cauTiepTheo')}\n </Button>\n </div>\n );\n}\n","import React from \"react\";\nimport Practices_SingleChoice from \"./Pratices/Practices_SingleChoice\";\nimport Practices_SingleChoiceToFill from \"./Pratices/Praticees_ChooseAnserToFill\";\nimport Practices_HTML_CSS from \"./Pratices/Practices_HTML_CSS\";\nimport Practices_FillCodeToInput from \"./Pratices/Practices_FillCodeToInput\";\nimport Practices_MultipleChoice from \"./Pratices/Practices_MultipleChoice\";\nimport _ from \"lodash\";\nexport default function List4TypeQuizDauVao({ currentQuestionIndex, allQuestions, setListQuestion }) {\n let handle_CheckSingleChoice = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n\n if (newCurrentQuestion.noiDung.dapAn[0] == userAnsers[0]?.cauTraLoi) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n\n newCurrentQuestion.userAnsers = userAnsers;\n let newAllQuestion = [...allQuestions];\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckMultipleChoice = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n let arrDapAn = [...newCurrentQuestion.noiDung.dapAn];\n if (arrDapAn.sort().toString() == userAnsers.sort().toString()) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n let newAllQuestion = [...allQuestions];\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFinll_IN_Blank = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n if (\n newCurrentQuestion.noiDung.dapAn.length === userAnsers.length &&\n newCurrentQuestion.noiDung.dapAn.every(function (value, index) {\n return value == userAnsers[index];\n })\n ) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n let newAllQuestion = [...allQuestions];\n\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFillInput = (id, userAnsers = []) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n\n let arrDapAn = [...newCurrentQuestion.noiDung.dapAn];\n if (arrDapAn.sort().toString() == userAnsers.sort().toString()) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n\n let newAllQuestion = [...allQuestions];\n\n newCurrentQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let handle_CheckFinll_IN_Blank_CSS = (id, userAnsers) => {\n let currentQuestionIndex = allQuestions.findIndex((item) => {\n return item.id === id;\n });\n let newCurrentQuestion = { ...allQuestions[currentQuestionIndex] };\n if (\n newCurrentQuestion.noiDung.dapAn.length === userAnsers.length &&\n newCurrentQuestion.noiDung.dapAn.every(function (value, index) {\n return value == userAnsers[index];\n })\n ) {\n newCurrentQuestion.isCorrect = true;\n } else {\n newCurrentQuestion.isCorrect = false;\n }\n newCurrentQuestion.userAnsers = userAnsers;\n let newAllQuestion = [...allQuestions];\n newAllQuestion.userAnsers = userAnsers;\n\n newAllQuestion[currentQuestionIndex] = newCurrentQuestion;\n\n setListQuestion(newAllQuestion);\n };\n let arrRenderQuestion = allQuestions.map((question, index) => {\n let keyIndex = index;\n switch (question?.noiDung.maLoaiBaiTap) {\n case \"single\":\n return (\n <Practices_SingleChoice\n key={keyIndex}\n question={question}\n handle_CheckSingleChoice={handle_CheckSingleChoice}\n />\n );\n case \"multiple_choice\":\n return (\n <Practices_MultipleChoice\n key={keyIndex}\n handle_CheckMultipleChoice={handle_CheckMultipleChoice}\n question={question}\n />\n );\n case \"fill_inblank_css\":\n return (\n <Practices_HTML_CSS\n key={keyIndex}\n handle_CheckFinll_IN_Blank_CSS={handle_CheckFinll_IN_Blank_CSS}\n question={question}\n />\n );\n case \"fill_inblank\":\n return (\n <Practices_SingleChoiceToFill\n key={keyIndex}\n handle_CheckFinll_IN_Blank={handle_CheckFinll_IN_Blank}\n question={question}\n />\n );\n case \"fill_input\":\n return (\n <Practices_FillCodeToInput\n key={keyIndex}\n question={allQuestions[currentQuestionIndex]}\n handle_CheckFillInput={handle_CheckFillInput}\n />\n );\n\n default:\n break;\n }\n });\n\n return arrRenderQuestion.length > 0 ? arrRenderQuestion[currentQuestionIndex] : <></>;\n}","import React, { useState, useEffect } from \"react\";\n\nimport _ from \"lodash\";\n\nimport Navigate_Footer_Pratices_DaoVao from \"./Navigate_Footer_Pratices_DaoVao\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport RuncodeContainer from \"../../pages/Runcode/Runcode\";\nimport { useSelector } from \"react-redux\";\nimport { convertDataQuizz, canClickNextQuestion } from \"../List4TypeQuiz/utils\";\nimport List4TypeQuiz from \"../List4TypeQuiz/List4TypeQuiz\";\nimport List4TypeQuizDauVao from \"../List4TypeQuiz/List4TypeQuizDauVao\";\nexport default function Content_Quizz_TestDauVao() {\n let [currentQuestionIndex, setCurrentQuestsionIndex] = useState(0);\n let [scoreQuiz, setScoreQuiz] = useState(null);\n const [allQuestions, setListQuestion] = useState([]);\n let { maBaiTest } = useSelector((state) => state.testDauVaoSlice.info);\n\n useEffect(() => {\n servCodingCamp\n .getDataBaiTest(maBaiTest)\n .then((res) => {\n setListQuestion(convertDataQuizz(res.data.content));\n })\n .catch((err) => {\n \n });\n }, []);\n\n let handleClickNextQuestion = () => {\n setCurrentQuestsionIndex(currentQuestionIndex + 1);\n };\n\n // nếu có Ä‘iểm thì show Ä‘iểm\n let isDisableNextBtn = canClickNextQuestion(\n allQuestions,\n currentQuestionIndex\n );\n return (\n <div className=\" c-card-content min-h-screen bg c-card-content flex flex-col space-y-4 px-10 \">\n <div className=\"w-full mb-5 \">\n {/* {arrRenderQuestion.length > 0 &&\n arrRenderQuestion[currentQuestionIndex]} */}\n <List4TypeQuizDauVao\n setListQuestion={setListQuestion}\n currentQuestionIndex={currentQuestionIndex}\n allQuestions={allQuestions}\n />\n </div>\n <Navigate_Footer_Pratices_DaoVao\n current={currentQuestionIndex + 1}\n total={allQuestions.length}\n handleClickNextQuestion={handleClickNextQuestion}\n isDisableBtn={isDisableNextBtn}\n listQuestion={allQuestions}\n setScoreQuiz={setScoreQuiz}\n />\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, Select, Radio, Modal } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { message } from \"antd\";\nimport httpServ from \"../../services/http.service\";\nimport { setUserInfor } from \"../../redux/reducer/signUpReducer\";\nimport { setDataTestDauVao } from \"./testDauVaoSlice\";\nimport axios from \"axios\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nvar qs = require(\"qs\");\nvar jwt = require(\"jsonwebtoken\");\nexport default function FormDieuKhoan({ handleSuccess }) {\n const [listNgonNgu, setListNgonNgu] = useState([]);\n useEffect(() => {\n let { id } = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n });\n axios\n .get(`${BASE_URL_CODINGCAMP}/api/bai-test/lay-ngonngu`)\n .then((res) => {\n setListNgonNgu(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n // check còn hạn hay không\n }, []);\n let dispatch = useDispatch();\n const onFinish = (values) => {\n // console.log(\"😀 - onFinish - values\", values);\n // handleSuccess();\n dispatch(\n setDataTestDauVao({\n maBaiTest: values.maBaiTest,\n gmail: values.email,\n })\n );\n handleSuccess();\n return;\n httpServ\n .getKiemTraEmailTestDauVao(values.email)\n .then((res) => {\n if (res.data.content != 0) {\n message.error(\"Bạn đã là m bà i test rồi\");\n } else {\n try {\n let { token } = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n });\n let { data: type } = jwt.verify(token, \"JAVA_TEST_QUIZ\");\n console.log(\"yes log\");\n dispatch(\n setDataTestDauVao({\n maBaiTest: values.maBaiTest,\n gmail: values.email,\n })\n );\n handleSuccess();\n } catch (error) { }\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n const onFinishFailed = (errorInfo) => {\n // console.log(\"Failed:\", errorInfo);\n };\n\n return (\n <div className=\"w-full flex justify-center flex-col items-center mt-5\">\n <Form\n name=\"basic\"\n className=\" w-full sm:p-3 md:p-5 lg:w-5/6 \"\n // labelCol={{ sm: { span: 6 }, xl: { span: 4 } }}\n // wrapperCol={{ sm: { span: 20 }, lg: { span: 16 } }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n layout=\"vertical\"\n >\n <Form.Item\n label={<span className=\"text-content\">Email</span>}\n name=\"email\"\n rules={[\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n {/* chá»n ngôn ngữ */}\n <Form.Item\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n label={<p className=\"text-content\">Chá»n ngôn ngữ bạn muốn là m bà i test</p>}\n name=\"maBaiTest\"\n >\n <Radio.Group>\n {listNgonNgu.find(item => item.key == \"PYTHON_CAP2\") && <Radio key=\"PYTHON_CAP2\" value=\"PYTHON_CAP2\">\n <span className=\"text-content\">Không biết láºp trình</span>\n </Radio>}\n\n\n <p className=\"text-content mt-2\">Äã biết láºp trình</p>\n {listNgonNgu.map((item) => (\n <Radio key={item.key} value={item.key}>\n <span className=\"text-content\">{item.value}</span>\n </Radio>\n ))}\n </Radio.Group>\n </Form.Item>\n\n <Form.Item wrapperCol={{ sm: { offset: 0 }, md: { offset: 4 }, span: 16 }}>\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button className=\"w-32\" type=\"primary\" htmlType=\"submit\">\n Tiếp theo\n </Button>\n </div>\n </Form.Item>\n </Form>\n\n <div></div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport FormDieuKhoan from \"./FormDieuKhoan\";\nimport ModalDieuKhoan from \"./ModalDieuKhoan\";\n\nexport default function FormEmail({ handleSuccess = () => {} }) {\n return (\n <div className=\"w-full h-screen p-3 space-y-5 flex justify-center items-center text-title\">\n <div className=\" flex flex-col items-center card-theme w-11/12 rounded p-10\">\n <p className=\"uppercase text-lg lg:text-xl text-title\">Kiểm tra đầu và o</p>\n <div className=\"text-content text-base md:text-lg\"></div>\n <FormDieuKhoan handleSuccess={handleSuccess} />\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { useEffect } from \"react\";\nimport Content_Quizz_TestDauVao from \"../../components/Content_Quizz_DauVao/Content_Quizz_TestDauVao\";\nimport FormEmail from \"./FormEmail\";\n\nexport default function TestQuizPage() {\n const [isShowQuiz, setIsShowQuiz] = useState(false);\n // return <Content_Quizz_TestDauVao />;\n return (\n <div className=\"min-h-screen\">\n {!isShowQuiz ? (\n <FormEmail\n handleSuccess={() => {\n setIsShowQuiz(true);\n }}\n />\n ) : (\n <Content_Quizz_TestDauVao />\n )}\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { SingleChoice_Answer } from \"../../model/QuizzModel\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Answer_Practices_SingleChoice({ question }) {\n // console.log(\"question\", question);\n\n const noiDung = entities.decodeHTML(question.noiDung.inPut);\n\n const answers = question.noiDung.cauTraLoi.map((item, index) => {\n return new SingleChoice_Answer(item.ma, item.noiDung, item.luaChon);\n });\n\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-3 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium \">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n language=\"javascript\"\n style={dracula}\n >\n {noiDung}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content capitalize\t\">{question.noiDung.outPut}</p>\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {answers.map((item, index) => {\n let activeCss = \"\";\n if (question.noiDung?.dapAn.includes(item.id)) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n return (\n <div\n className={\n \"text-content -full cursor-pointer flex shadow-lg items-center space-x-5 rounded-lg transition card-theme p-5 py-2 hover:shadow-xl duration-200\"\n }\n >\n <span\n className={\n \"h-9 rounded-full border-2 flex-shrink-0 border-white w-9 text-center font-bold leading-8 \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm \">{item.cauTraLoi}</p>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nexport default function HightLightLanguage({ noiDung }) {\n return (\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n >\n {noiDung}\n </SyntaxHighlighter>\n );\n}\n","import React, { useEffect } from \"react\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport HightLightLanguage from \"./HightLightLanguage\";\n\nconst entities = require(\"entities\");\n\nexport default function Answer_Practices_SingleChoiceToFill({ question, key }) {\n let cauHoi = question.noiDung;\n\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor\");\n\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replaceAll(\"♥\", `<span class='practice_choose_ansewer'...</span>`);\n }\n const answerDivs = document.querySelectorAll(\".practice_choose_ansewer\");\n\n let listCauTraLoi = cauHoi.cauTraLoi.map((item) => {\n let newItem = { ...item };\n newItem.ma = newItem.ma * 1;\n return newItem;\n });\n let listDapAn = cauHoi.dapAn.map((item) => {\n return item * 1;\n });\n // let arrQuestion = listCauTraLoi.filter((item) => { return listDapAn.includes(item.ma) })\n let arrQuestion = [];\n for (let i = 0; i < listDapAn.length; i++) {\n let index = listCauTraLoi.findIndex((item) => {\n return item.ma === listDapAn[i];\n });\n // console.log(\"🚀 ~ file: Answer_Praticees_ChooseAnserToFill.js ~ line 42 ~ renderDataConvert ~ index\", index)\n if (index !== -1) {\n arrQuestion.push(listCauTraLoi[index]);\n }\n }\n if (answerDivs) {\n for (let index = 0; index < answerDivs.length; index++) {\n const element = answerDivs[index];\n element.innerHTML = arrQuestion[index].noiDung;\n }\n }\n };\n useEffect(() => {\n renderDataConvert();\n }, [question.id]);\n return (\n <div key={key} className=\"w-full h-full flex flex-col flex-grow p-3\">\n <div className=\"w-full mx-auto flex flex-col space-y-5 relative\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">{cauHoi.tieuDe}</p>\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden text-blue-800\">\n <HightLightLanguage noiDung={noiDung} />\n </div>\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Kết quả:</p>\n <div className=\"px-8 py-4 mx-auto card-theme rounded-lg shadow-md w-full \">\n <div className=\"practice_output space-y-5\">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Câu trả lá»i</p>\n </div>\n <div className=\"px-8 py-4 mx-auto card-theme rounded-lg shadow-md w-full \">\n <div className=\"practice_output space-x-5\">\n {cauHoi.cauTraLoi.map((item) => {\n return (\n <button className=\" px-4 py-2 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700\">\n {item.noiDung}\n </button>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\n\nimport ReactHtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nexport default function Answer_Practices_HTML_CSS({ question }) {\n let cauHoi = question.noiDung;\n const noiDung = entities.decodeHTML(cauHoi.inPut);\n const noiDungCss = entities.decodeHTML(cauHoi.inputCss);\n\n const renderDataConvert = () => {\n const editor = document.querySelector(\"#editor \");\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replaceAll(\n \"♥\",\n `<span class='practice_choose_ansewer'>a</span>`\n );\n }\n const answerDivs = document.querySelectorAll(\".practice_choose_ansewer\");\n cauHoi = question.noiDung;\n let listCauTraLoi = cauHoi.cauTraLoi.map((item) => {\n let newItem = { ...item };\n newItem.ma = newItem.ma * 1;\n return newItem;\n });\n let listDapAn = cauHoi.dapAn.map((item) => {\n return item * 1;\n });\n let arrQuestion = listCauTraLoi.filter((item) => {\n return listDapAn.includes(item.ma);\n });\n if (answerDivs) {\n for (let index = 0; index < answerDivs.length; index++) {\n const element = answerDivs[index];\n element.innerHTML = arrQuestion[index].noiDung;\n }\n }\n };\n\n useEffect(() => {\n renderDataConvert();\n }, []);\n\n return (\n <div className=\"w-full flex flex-grow flex-col box-border p-3 space-y-5 \">\n <p className=\"practice_tieuDe flex-shrink-0 text-lg text-content font-medium \">\n {cauHoi.tieuDe}\n </p>\n <div className=\"w-full flex-grow items-start h-full flex \">\n <div className=\"w-1/2 justify-between flex-shrink-0 \">\n <div id=\"editor\" className=\"w-full rounded-xl overflow-hidden space-y-5 text-blue-800\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">\n {/* {data.tieuDe} */}\n HTML\n </p>\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-5\"\n language=\"html\"\n style={dracula}\n >\n {noiDung}\n </SyntaxHighlighter>\n <p className=\"practice_tieuDe text-lg text-content font-medium \">CSS</p>\n <SyntaxHighlighter language=\"javascript\" className=\"p-5\" language=\"css\" style={dracula}>\n {noiDungCss}\n </SyntaxHighlighter>\n </div>\n </div>\n <div className=\" h-full w-1/2 space-y-5 pl-5\">\n <div className=\"h-max-content w-full space-y-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Kết quả:</p>\n <div className=\"p-5 card-theme rounded-lg shadow-md w-full h-max-content\">\n <div className=\"practice_output \">{ReactHtmlParser(cauHoi.outPut)}</div>\n </div>\n </div>\n <div className=\"flex w-full\">\n <div className=\"h-1/2 space-y-5 w-full\">\n <div className=\"w-full flex items-center justify-between space-x-5\">\n <p className=\"practice_tieuDe text-lg text-content font-medium \">Câu trả lá»i</p>\n </div>\n <div\n className=\"\n p-3 card-theme rounded-lg shadow-md w-full flex flex-wrap justify-between\n \"\n >\n {cauHoi.cauTraLoi.map((item) => {\n return (\n <button className=\"px-4 my-2 mx-1 flex-shrink-0 text-base h-10 font-medium tracking-wide text-white transition-colors duration-200 transform bg-blue-600 rounded-md dark:bg-gray-800 hover:bg-blue-500 dark:hover:bg-gray-700 focus:outline-none focus:bg-blue-500 dark:focus:bg-gray-700 \">\n {item.noiDung}\n </button>\n );\n })}\n <button className=\"flex-grow\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef } from \"react\";\nimport HtmlParser from \"react-html-parser\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\n\nexport default function Answer_Practices_FillCodeToInput({ question }) {\n const containerRef = useRef();\n\n useEffect(() => {\n const editor = document.querySelector(\"#editor pre code\");\n if (editor.innerText.includes(\"♥\")) {\n editor.innerHTML = editor.innerHTML.replace(\n \"♥\",\n `<input class='practice_fill_input' id='input_box' /> `\n );\n const answerDivs = document.querySelectorAll(\".practice_fill_input\");\n if (answerDivs) {\n for (let index = 0; index < answerDivs.length; index++) {\n const element = answerDivs[index];\n element.value = question.noiDung.dapAn[index];\n }\n }\n }\n }, []);\n\n return (\n <div className=\"w-full h-max-content p-3 flex-grow flex flex-col \">\n <div className=\"w-full mx-auto flex flex-col space-y-5 relative\">\n <p className=\"practice_tieuDe text-content text____title font-medium \">\n {question.noiDung.tieuDe}\n </p>\n <div ref={containerRef} id=\"editor\" className=\"w-full rounded-xl overflow-hidden \">\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n wrapLines={true}\n >\n {HtmlParser(question.noiDung.inPut)}\n </SyntaxHighlighter>\n </div>\n <p className=\"practice_tieuDe text-content text____title font-medium \">Output:</p>\n <div className=\"px-8 py-4 mx-auto bg-white rounded-lg shadow-md w-full \">\n <div className=\"practice_output space-y-5\">\n {ReactHtmlParser(question.noiDung.outPut)}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport ReactHtmlParser from \"react-html-parser\";\n\nimport { dracula } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nconst entities = require(\"entities\");\n\nconst alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n\nexport default function Practices_MultipleChoice({\n question,\n handle_CheckMultipleChoice = () => {},\n}) {\n let cauhoi = question.noiDung;\n\n useEffect(() => {\n setActiveBtnArr([]);\n }, [question?.id]);\n // noiDung = JSON.parse(noiDung);\n const [activeBtnArr, setActiveBtnArr] = useState([]);\n // console.log(\"activeBtnArr\", activeBtnArr);\n\n return (\n <div\n onCopy={(e) => {\n e.preventDefault();\n return false;\n }}\n className=\"w-full flex-grow flex flex-col \"\n >\n <div className=\"relative w-full h-full p-3 flex-grow justify-center flex-col space-y-5 \">\n <div className=\"w-full mx-auto flex flex-col space-y-5 \">\n <div className=\"text-content text____title font-medium\">{question.noiDung.tieuDe}</div>\n <div className=\"w-full rounded-xl overflow-hidden\">\n <SyntaxHighlighter\n language=\"javascript\"\n className=\"p-10\"\n // language=\"javascript\"\n style={dracula}\n >\n {entities.decodeHTML(question.noiDung.inPut)}\n </SyntaxHighlighter>\n </div>\n <p className=\"text-lg text-content \t\">\n <pre>{ReactHtmlParser(cauhoi.outPut)}</pre>\n {/* {cauhoi.outPut} */}\n </p>\n <div className=\"w-full h-max-content grid auto-rows-auto grid-auto-rows gap-5 grid-cols-2\">\n {cauhoi.cauTraLoi.map((item, index) => {\n let indexBtn = cauhoi.dapAn.findIndex((id) => {\n return id === item.ma;\n });\n let activeCss = \"\";\n if (indexBtn !== -1) {\n activeCss = \"bg-blue-600 border-blue-600 border-white text-white\";\n } else {\n activeCss = \" \";\n }\n\n // console.log(item.ma, activeCss);\n return (\n <div\n className={\n \" text-content w-full cursor-pointer flex shadow-lg items-center space-x-5 rounded-lg transition duration-200 card-theme p-5 py-2 hover:shadow-xl\"\n }\n >\n <span\n className={\n \"h-9 rounded-lg border-2 flex-shrink-0 border-black w-9 text-center font-bold leading-8 \" +\n activeCss\n }\n >\n {alphabet[index]}\n </span>\n <p className=\"text-sm \">{item.noiDung}</p>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Button, Progress } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector, useDispatch } from \"react-redux\";\n\nexport default function Navigate_Footer_ViewAnsers({\n current,\n total,\n handleChangeCurrentQuestion,\n}) {\n const { t } = useTranslation()\n\n const dispatch = useDispatch();\n const percent = Math.floor((current / total) * 100);\n return (\n <div\n style={{\n background:\n \"radial-gradient(91.01% 91.01% at 16.52% 42.45%, #ffc94c 0%, #eebe47 23%, #edb720 52%\",\n }}\n className=\" bg-white flex items-center h-16 w-full justify-center space-x-10 px-16 border-none rounded-2xl\"\n >\n <div className=\"flex items-cente space-x-5 justify-center max-w-screen-md w-full\">\n <Progress\n step={total}\n percent={percent}\n className=\"w-full\"\n showInfo={false}\n strokeWidth={15}\n strokeColor={{\n // \"0%\": \"#4A00E0\",\n \"0%\": \"#301D09\",\n \"100%\": \"#FF0C0C\",\n // \"100%\": \"#8E2DE2\",\n }}\n // trailColor=\"rgba(34, 34, 96,0,1)\"\n trailColor={\"rgba(68, 66, 178, 0.1)\"}\n />\n <span className=\"font-bold flex-shrink-0 text-content \">\n {current}/{total} câu\n </span>\n </div>\n <Button\n onClick={() => {\n current > 1 && handleChangeCurrentQuestion(-1);\n }}\n className={\n \" font-bold px-8 rounded flex items-center h-10 flex-shrink-0 focus:border-blue-theme bg-white text-blue-theme shadow-lg border-blue-theme border-2 border-opacity-50 hover:shadow-xl hover:border-opacity-100 transition duration-200\"\n }\n >\n {t('chiTietNhiemVu.quayLai')}\n\n </Button>\n <Button\n onClick={() => {\n current < total && handleChangeCurrentQuestion(+1);\n }}\n className={\n \" duration-150 font-bold px-8 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-xl btn-theme bg-white text-black\"\n }\n >\n {t('chiTietNhiemVu.cauTiepTheo')}\n\n </Button>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Answer_Practices_SingleChoice from \"../PraticesAnswer/Answer_Practices_ChooseAnser\";\nimport Answer_Practices_SingleChoiceToFill from \"../PraticesAnswer/Answer_Praticees_ChooseAnserToFill\";\nimport Answer_Practices_HTML_CSS from \"../PraticesAnswer/Answer_Practices_HTML_CSS\";\nimport Answer_Practices_FillCodeToInput from \"../PraticesAnswer/Answer_Practices_FillCodeToInput\";\nimport Answer_Practices_MultipleChoice from \"../PraticesAnswer/Answer_Practices_MultipleChoice\";\nimport { Portal } from \"react-portal\";\nimport Navigate_Footer_ViewAnsers from \"../Navigate_Footer_ViewAnsers/Navigate_Footer_ViewAnsers\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nexport default function ContentQuizz_ViewAnsers({ maBaiTest = \"\" }) {\n let [currentQuestionIndex, setCurrentQuestsionIndex] = useState(0);\n // let { currentLesson, isRedoQuizz } = useSelector((state) => state.baiHoc);\n const [allQuestions, setListQuestion] = useState([]);\n\n useEffect(() => {\n servCodingCamp\n .getDataBaiTestAdmin(maBaiTest)\n .then((res) => {\n // đây bóc \"josn\" ra parse\n // let listQuestionRaw = JSON.parse(data.noiDung).map((item, index) => {\n let listQuestionRaw = res.data.content\n .filter((question) => {\n return question?.maLoaiBaiTap != \"runcode\";\n })\n .map((item, index) => {\n // console.log(\"item off\", item);\n return {\n // id: item.id,\n id: index,\n noiDung: item,\n isCorrect: false,\n userAnsers: [],\n maLoaiBaiTap: item.maLoaiBaiTap,\n };\n });\n listQuestionRaw = listQuestionRaw || [];\n\n setListQuestion(listQuestionRaw);\n })\n .catch((err) => {\n \n });\n }, [maBaiTest]);\n let dispatch = useDispatch();\n\n let arrRenderQuestion = [];\n arrRenderQuestion = allQuestions.map((question, index) => {\n let keyIndex = question?.id;\n // console.log(\"🚀 - arrRenderQuestion=allQuestions.map - currentLesson\", currentLesson);\n switch (question?.noiDung.maLoaiBaiTap) {\n case \"single\":\n return (\n <Answer_Practices_SingleChoice key={keyIndex} question={question} />\n );\n case \"multiple_choice\":\n return (\n <Answer_Practices_MultipleChoice key={keyIndex} question={question} />\n );\n case \"fill_inblank_css\":\n return <Answer_Practices_HTML_CSS key={keyIndex} question={question} />;\n case \"fill_inblank\":\n return (\n <Answer_Practices_SingleChoiceToFill\n key={keyIndex}\n question={question}\n />\n );\n case \"fill_input\":\n return (\n <Answer_Practices_FillCodeToInput\n key={keyIndex}\n question={allQuestions[currentQuestionIndex]}\n />\n );\n\n default:\n break;\n }\n });\n\n let containerTracNhiem = document.getElementById(\"containerTracNhiem\");\n setTimeout(() => {\n if (containerTracNhiem) {\n let widthContainer = containerTracNhiem.clientWidth;\n let navigateFooter = document.getElementById(\"footerTracNghiem\");\n if (navigateFooter) {\n navigateFooter.style.width = `${widthContainer}px`;\n var rect = containerTracNhiem.getBoundingClientRect();\n navigateFooter.style.marginLeft = `${rect.left}px`;\n }\n }\n }, 300);\n\n let handleChangeCurrentQuestion = (value) => {\n setCurrentQuestsionIndex(currentQuestionIndex + value);\n };\n\n return (\n <div\n id=\"containerTracNhiem\"\n className=\"w-full flex-grow h-full flex flex-col \"\n >\n <div className=\"w-full h-full flex-grow flex flex-col relative p-2\">\n <div className=\"w-full \">\n {arrRenderQuestion[currentQuestionIndex]}\n </div>\n\n <div className=\"h-22 w-full\"></div>\n </div>\n <Portal>\n <div\n id=\"footerTracNghiem\"\n className=\"h-max-content flex-shrink-0 bg-transparent fixed bottom-3 card-theme border-none shadow-lg hover:shadow-xl transition duration-200 cursor-pointer left-0 border-0\"\n >\n <Navigate_Footer_ViewAnsers\n current={currentQuestionIndex + 1}\n total={allQuestions.length}\n handleChangeCurrentQuestion={handleChangeCurrentQuestion}\n />\n </div>\n </Portal>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport httpServ from \"../../services/http.service\";\nimport ContentQuizz_ViewAnsers from \"../../components/Content_Quizz/Content_Quizz_ViewAnswer\";\nimport { Radio } from \"antd\";\nimport axios from \"axios\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\n// import Content_Quizz_DauVao_ShowDapAn from \"./Content_Quizz_DauVao_ShowDapAn/Content_Quizz_TestDauVao\";\n\nexport default function TestQuizPage_ShowDapAn() {\n const [optionList, setOptionList] = useState([]);\n const [selectedOption, setSelectedOption] = useState(optionList[0]);\n useEffect(() => {\n axios\n .get(`${BASE_URL_CODINGCAMP}/api/bai-test/quiz-ma-test`)\n .then((res) => {\n console.log(res);\n setOptionList(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n const handleRadioChange = (e) => {\n setSelectedOption(e.target.value);\n };\n\n return (\n <div className=\" c-card-content min-h-screen bg c-card-content flex flex-col space-y-4 px-10 \">\n <div className=\"flex justify-center\">\n <Radio.Group onChange={handleRadioChange} value={selectedOption}>\n {optionList.map((option) => (\n <Radio.Button size={\"large\"} key={option} value={option}>\n {option}\n </Radio.Button>\n ))}\n </Radio.Group>\n </div>\n <ContentQuizz_ViewAnsers maBaiTest={selectedOption} />\n </div>\n );\n}\n","import { faker } from \"@faker-js/faker\";\nimport { Tag } from \"antd\";\nimport React from \"react\";\nimport ReactPlayer from \"react-player\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport VideoPlayer from \"../../../components/video/VideoPlayer\";\n\nexport default function List({ videoList }) {\n let { userId } = useParams();\n let navigate = useNavigate();\n\n let renderList = () => {\n return videoList?.map((video) => {\n const match = video.youtube.match(/v=([^&]+)/);\n const videoId = match ? match[1] : \"Video ID not found\";\n return (\n <div\n onClick={() => {\n servCodingCamp.postTangViewVideo(video.nopBaiId);\n navigate(`/wall/${video.nopBaiId}/${userId}`);\n }}\n className=\"card cursor-pointer\"\n >\n <div className=\" cursor-pointer rounded-lg relative overflow-hidden\">\n {/* <img className=\"w-full h-96 object-cover\" src={`http://img.youtube.com/vi/${videoId}/maxresdefault.jpg`} alt=\"\" /> */}\n {/* <ReactPlayer\n playbackRate={1}\n playing={false}\n url={video.youtube}\n // url={\n // \"https://www.youtube.com/watch?v=DfDPJqD3FjI&list=PLkC56g8fboI0HghByzVuD2Vz8ROUXfF_j&ab_channel=AsmrProg\"\n // }\n width=\"100%\"\n height=\"400px\"\n controls={false}\n config={{\n file: {\n forceHLS: true,\n },\n }}\n /> */}\n\n <VideoPlayer source={video.youtube} />\n\n <div className=\"footer space-y-3 \">\n <p className=\"\">\n {faker.datatype.array(3).map(() => {\n return (\n <Tag border=\"none\" className=\"px-2\" color={faker.color.rgb()}>\n ES6\n </Tag>\n );\n })}\n </p>\n <p className=\"flex items-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-6 h-6 text-white font-medium\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z\"\n />\n </svg>\n <span className=\"text-lg text-content\">{video.luotXem}</span>\n </p>\n </div>\n </div>\n {/* <div className=\"title text-white mt-2\">\n {faker.name.jobTitle()}\n {faker.name.jobTitle()}\n {faker.name.jobTitle()}\n </div> */}\n </div>\n );\n });\n };\n if (!videoList?.length) {\n return <p className=\"text center text-title\">Không có ná»™i dung</p>;\n }\n return (\n <div>\n <div className=\"grid grid-cols-5 gap-5\">{renderList()}</div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport List from \"../VideoList/List\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { selectPersonalState, setPersonalState } from \"../tuongNhaSlice\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport toast from \"react-hot-toast\";\n\nexport default function BagdesTab() {\n // let { id } = localStorageServ.userInfo.get();\n let { userId } = useParams();\n let { profile, danhSachVideo } = useSelector(selectPersonalState);\n let { personal } = useSelector((state) => state.tuongNhaSlice);\n\n let navigate = useNavigate();\n const dispatch = useDispatch();\n useEffect(() => {\n // .getThongTinTuongNha(userId, 1)\n servCodingCamp.getThongTinTuongNha(userId, 4)\n .then((res) => {\n let newListVideo = {...personal}\n newListVideo.danhSachVideo = res.data.content.danhSachVideo\n newListVideo.danhSachVideoDaLuu = res.data.content.danhSachVideoDaLuu\n dispatch(setPersonalState(newListVideo));\n })\n .catch((err) => {\n \n navigate(\"/\");\n });\n }, []);\n\n// console.log(danhSachVideo)\n return (\n <div id=\"bagdes_tab\">\n <List videoList={danhSachVideo} />\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { selectThongTinMoRong } from \"../../../redux/reducer/authReducer\";\nimport { getHinhAnh } from \"../../../utils/GetHinhanh\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport {\n selectListThanhTich,\n setListThanhTich,\n setPersonalState,\n} from \"../tuongNhaSlice\";\nimport { useParams } from \"react-router-dom\";\nimport classNames from \"classnames\";\nimport { Popover, Tooltip } from \"antd\";\nimport { getImgDanhHieu } from \"../../DashBroad/OverviewInfoUser/utils\";\nimport './style.scss'\nexport default function ListThanhTich() {\n let { userId } = useParams();\n let { profile } = useSelector((state) => state.tuongNhaSlice.personal);\n const listThanhTich = useSelector(selectListThanhTich);\n let dispatch = useDispatch();\n const [lst, setlst] = useState([]);\n // useEffect(() => {\n // servCodingCamp\n // .getThongTinTuongNha(userId, 1)\n // .then((res) => {\n // dispatch(setListThanhTich(res.data.content.danhSachThanhTich));\n // dispatch(setPersonalState(res.data.content));\n // })\n // .catch((err) => {\n // console.log(err);\n // });\n // }, [userId]);\n const conv = () => {\n const dsnhom = [];\n listThanhTich.forEach((thanhTich) => {\n if (!dsnhom[thanhTich.maNhom]) {\n dsnhom[thanhTich.maNhom] = []; // Nếu chÆ°a tồn tại mảng con, tạo má»›i\n }\n dsnhom[thanhTich.maNhom].push(thanhTich); // Thêm thà nh tÃch và o mảng con tÆ°Æ¡ng ứng\n });\n setlst(dsnhom);\n console.log(dsnhom);\n };\n\n const { danhSachThanhTich } = useSelector(selectThongTinMoRong);\n const renderThanhTichNhom = () => {\n return lst.map((item, idx) => {\n let itemcuoi = null;\n for (let i = item.length - 1; i >= 0; i--) {\n const thanhTich = item[i];\n if (thanhTich?.soHuu === true) {\n itemcuoi = { ...thanhTich };\n break; // Thoát khá»i vòng lặp khi tìm thấy phần tá» có soHuu = true\n }\n }\n // console.log(itemcuoi);\n return (\n <Popover className=\"popThanhTich\"\n content={\n <div className=\"bg-black text-dark p-2 rounded grid grid-cols-3 gap-5\">\n {item.map((tt, i) => {\n return (\n <div\n className={classNames(\n \"space-y-2 text-sub-title card-theme rounded-lg flex items-center p-2 space-x-3\",\n { \"filter grayscale opacity-50\": !tt?.soHuu }\n )}\n >\n <img\n src={getHinhAnh(tt?.hinhAnh)}\n className=\"w-16 flex-shrink-0\"\n alt=\"\"\n />\n <div className=\"text-center flex-grow\">\n <span className=\"text-center textm-title\">\n {tt?.tenThanhTich}\n </span>\n <p className=\"text-content\">{tt?.moTa}</p>\n </div>\n </div>\n );\n })}\n </div>\n }\n >\n <div\n className={classNames(\n \"space-y-2 text-sub-title card-theme rounded-lg flex items-center p-2 space-x-3\",\n { \"filter grayscale opacity-50\": !itemcuoi?.soHuu }\n )}\n >\n <img\n src={getHinhAnh(itemcuoi ? itemcuoi?.hinhAnh : item[0]?.hinhAnh)}\n className=\"w-16 flex-shrink-0\"\n alt=\"\"\n />\n <div className=\"text-center flex-grow\">\n <span className=\"text-center textm-title\">\n {itemcuoi ? itemcuoi?.tenThanhTich : item[0]?.tenThanhTich}\n </span>\n <p className=\"text-content\">\n {itemcuoi ? itemcuoi?.moTa : item[0]?.moTa}\n </p>\n </div>\n </div>\n </Popover>\n );\n });\n };\n const renderThanhTich = () => {\n if (danhSachThanhTich.length == 0) {\n return <p className=\"text-content\">Bạn chÆ°a có thà nh tÃch </p>;\n }\n return listThanhTich?.map(({ hinhAnh, tenThanhTich, moTa, soHuu }) => {\n return (\n <div\n className={classNames(\n \"space-y-2 text-sub-title card-theme rounded-lg flex items-center p-2 space-x-3\",\n { \"filter grayscale opacity-50\": !soHuu }\n )}\n >\n <img\n src={getHinhAnh(hinhAnh)}\n className=\"w-16 flex-shrink-0\"\n alt=\"\"\n />\n <div className=\"text-center flex-grow\">\n <span className=\"text-center textm-title\">{tenThanhTich}</span>\n <p className=\"text-content\">{moTa}</p>\n </div>\n </div>\n );\n });\n };\n useEffect(() => {\n conv();\n }, [listThanhTich]);\n return <div>\n {/* <div className=\"achievement_top\">\n <div class=\"grid grid-cols-2 md:grid-cols-1 gap-4\">\n \n <div class=\"md:col-span-1 lg:col-span-3 flex justify-center items-center\">\n <img src={`${getImgDanhHieu(profile.danhHieu?.hinhDanhHieu)}`} className=\"imgRank h-1/2\"alt=\"\"/>\n </div>\n <div class=\"md:col-span-3 lg:col-span-5\">\n \n </div>\n </div>\n </div> */}\n <div className=\"grid grid-cols-3 gap-5\">\n \n\n {renderThanhTichNhom()}\n \n </div>\n </div>;\n}\n","import { AxiosServCodingCamp } from \"./axios.service\";\n\nexport let typeTrangThaiFllow = {\n DANG_FOLLOW: 1,\n DUOC_FOLLOW: 0,\n};\nclass UserWallRequest {\n constructor() {}\n danhSachFllow = (userId, trangThai) => {\n return AxiosServCodingCamp.getMethod(\n `nguoidung/list-follow/${userId}/${trangThai}`,\n false\n );\n };\n}\n\nconst servUserWall = new UserWallRequest();\n\nexport default servUserWall;\n","import React, { useEffect, useState } from \"react\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { useSelector } from \"react-redux\";\nimport { selectVideoWall } from \"../tuongNhaSlice\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport { useParams } from \"react-router-dom\";\n\nexport default function BtnFollow() {\n const [isFllow, setIsFllow] = useState(true);\n // let { thongTinUser: owner } = useSelector(selectVideoWall);\n\n let { userId } = useParams();\n let id = localStorageServ.userInfo.get()?.id;\n let fetchCheckFollow = () => {\n servCodingCamp\n .checkFollow(userId)\n .then((res) => {\n setIsFllow(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n useEffect(() => {\n userId && fetchCheckFollow();\n }, [userId]);\n\n const handleFollowUser = (status) => {\n servCodingCamp\n .toggleFlollow(userId, status)\n .then((res) => {\n console.log(res);\n fetchCheckFollow();\n })\n .catch((err) => {\n console.log(err);\n });\n // status: true: thêm follow, false: xóa follow\n };\n // alert(id + userId);\n if (id == userId) {\n // ần follow\n return <></>;\n }\n if (!id) {\n return <></>;\n }\n return isFllow ? (\n <button\n className=\"btnFollow \"\n onClick={() => {\n handleFollowUser(false);\n }}\n >\n Äã theo dõi\n </button>\n ) : (\n <button\n className=\"btnFollow not-follow\"\n onClick={() => {\n handleFollowUser(true);\n }}\n >\n Theo dõi\n </button>\n );\n}\n","export const maskEmail=(email) =>{\n // Tách phần trÆ°á»›c và sau dấu @\n if(email){\n const [localPart, domain] = email?.split('@');\n \n // Kiểm tra Ä‘á»™ dà i của localPart\n const localPartLength = localPart.length;\n \n // Nếu localPart có Ãt hÆ¡n hoặc bằng 5 ký tá»±, giấu toà n bá»™\n if (localPartLength <= 5) {\n return '*'.repeat(localPartLength) + '@' + domain;\n }\n \n // Nếu localPart có nhiá»u hÆ¡n 5 ký tá»±, giấu 5 ký tá»± cuối\n const visiblePart = localPart.slice(0, localPartLength - 5);\n const maskedPart = '*'.repeat(5);\n \n // Kết hợp lại và trả vá» kết quả\n return visiblePart + maskedPart + '@' + domain;\n }\n return email\n}","import React from \"react\";\nimport BtnFollow from \"../BtnFollow/BtnFollow\";\nimport { getHinhAnhFB } from \"../../../utils/GetHinhanh\";\nimport { useNavigate } from \"react-router-dom\";\nimport \"./style.scss\";\nimport { maskEmail } from \"../../../utils/markEmail\";\nexport default function Item({ user }) {\n let navigate = useNavigate();\n\n return (\n <div\n onClick={() => {\n navigate(`/profile/${user.id}`);\n }}\n className=\"flex items-center space-x-3 text-content py-1 cursor-pointer item_follow px-5 rounded\"\n >\n <img\n src={getHinhAnhFB(user?.facebookId,user)}\n alt=\"\"\n className=\"w-16 h-16 object-cover rounded-full\"\n />\n <div className=\" space-y-1\">\n <p className=\"name capitalize text-2xl text-title \">{user?.hoTen}</p>\n <p className=\"name capitalize rank\">{user?.danhHieu?.tenDanhHieu}</p>\n <p>\n <span className=\"font-medium\">{maskEmail(user?.email)}</span>\n </p>\n </div>\n {/* <BtnFollow /> */}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport servUserWall from \"../../../services/userWall.service\";\nimport { useParams } from \"react-router-dom\";\nimport Item from \"./Item\";\n\nexport default function ListFollow({ trangThai }) {\n const [listFllow, setListFllow] = useState([]);\n let { userId } = useParams();\n useEffect(() => {\n servUserWall\n .danhSachFllow(userId, trangThai)\n .then((res) => {\n console.log(res);\n setListFllow(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, [trangThai, userId]);\n return (\n <div className=\"space-y-2\">\n {listFllow.length == 0 && <p className=\"text-title\">ChÆ°a có ná»™i dung</p>}\n { listFllow.map((item) => {\n return <Item user={item} key={item?.id} />;\n })}\n </div>\n );\n}\n","import { Table } from \"antd\";\nimport React from \"react\";\nimport { tenNhiemVu } from \"../../../utils/taskUtils\";\n\nlet columns = [\n {\n key: \"tagSkill\",\n dataIndex: \"tagSkill\",\n title: \"Skill\",\n },\n {\n key: \"maLoai\",\n dataIndex: \"maLoai\",\n title: \"Loại nhiệm vụ\",\n render: (text) => tenNhiemVu[text],\n },\n {\n key: \"tienDo\",\n dataIndex: \"tienDo\",\n title: \"Tiến Ä‘á»™\",\n },\n {\n key: \"thoiGianLam\",\n dataIndex: \"thoiGianLam\",\n title: \"Thá»i gian là m\",\n render: (text) => `${text} phút`,\n },\n {\n key: \"diem\",\n dataIndex: \"diem\",\n title: \"Äiểm\",\n },\n];\n\nexport default function TableScore({ chuyenDe }) {\n let { diemTrungBinh, thoiGianHoc, phanTramHoanThanh } = chuyenDe;\n return (\n <div className=\"text-title space-y-5\">\n <p className=\"title\">{chuyenDe.tenChuyenDe}</p>\n <div className=\"flex items-center justify-between text-xl px-10 py-3 bg-gray-200 text-dark\">\n <span>Äiểm trung bình: {diemTrungBinh} Ä‘iểm </span>\n <span>Thá»i gian há»c: {thoiGianHoc} phút</span>\n <span>Phần trăm hoà n thà nh: {phanTramHoanThanh} %</span>\n </div>\n <Table pagination={{ pageSize: 10 }} columns={columns} dataSource={chuyenDe.danhSachSkill} />\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { selectPersonalState, setPersonalState } from \"../tuongNhaSlice\";\nimport toast from \"react-hot-toast\";\nimport TableScore from \"./TableScore\";\nimport \"./style.scss\";\nexport default function ScoreStatic() {\n let { userId } = useParams();\n let { project, danhSachVideo } = useSelector(selectPersonalState);\n\n let navigate = useNavigate();\n const dispatch = useDispatch();\n useEffect(() => {\n servCodingCamp\n .getThongTinTuongNha(userId, 1)\n .then((res) => {\n console.log(\"😀 - .then - res\", res);\n dispatch(setPersonalState(res.data.content));\n })\n .catch((err) => {\n toast.error(\"Äã có lá»—i xảy ra\");\n navigate(\"/\");\n });\n }, [userId]);\n // console.log(project?.chiTietChuyenDe);\n\n let renderListChuyenDe = () => {\n return project?.chiTietChuyenDe?.map((chuyenDe, index) => {\n return <TableScore key={index} chuyenDe={chuyenDe} />;\n });\n };\n return <div id=\"scoreStatic\">{renderListChuyenDe()}</div>;\n}\n","import { Tabs } from \"antd\";\nimport React from \"react\";\nimport BagdesTab from \"./BagdesTab/BagdesTab\";\nimport Favorites from \"./Favorites/Favorites\";\nimport ListThanhTich from \"./ListThanhTich/ListThanhTich\";\nimport ListFollow from \"./ListFollow/ListFollow\";\nimport { typeTrangThaiFllow } from \"../../services/userWall.service\";\nimport ScoreStatic from \"./ScoreStatic/ScoreStatic\";\nimport { useParams, useSearchParams } from \"react-router-dom\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { useTranslation } from \"react-i18next\";\nimport SpinnerComponent from \"../../components/Spinner\";\n\nexport default function TabTuongNha() {\n const { t } = useTranslation()\n\n let { userId } = useParams();\n\n let [searchParams, setSearchParams] = useSearchParams({key:\"8\"});\n let value = searchParams.get('key');\n\n let idUserLocal = localStorageServ.userInfo.get()?.id;\n return (\n <div className=\"w-full\">\n <Tabs defaultActiveKey=\"8\" activeKey={value} onChange={(value) => {\n\n setSearchParams({ key: value })\n }}>\n\n <Tabs.TabPane tab={t('tuongCuaToi.thongKeDiem')} key=\"8\">\n {userId == idUserLocal ? <ScoreStatic /> : <div className=\"text-center\"><p className=\"text-title\">Bạn không thể xem Ä‘iểm của ngÆ°á»i khác!</p></div>}\n </Tabs.TabPane>\n\n <Tabs.TabPane tab=\"Dá»± án\" key=\"1\">\n <BagdesTab />\n </Tabs.TabPane>\n {/* <Tabs.TabPane tab={t('tuongCuaToi.yeuThich')} key=\"2\">\n <Favorites />\n\n </Tabs.TabPane> */}\n <Tabs.TabPane tab={t('tuongCuaToi.thanhTich')} key=\"5\" className=\"relative\">\n \n <ListThanhTich />\n </Tabs.TabPane>\n <Tabs.TabPane tab={t('tuongCuaToi.nguoiTheoDoi')} key=\"6\">\n <ListFollow trangThai={typeTrangThaiFllow.DUOC_FOLLOW} />\n </Tabs.TabPane>\n <Tabs.TabPane tab={t('tuongCuaToi.dangTheoDoi')} key=\"7\">\n <ListFollow trangThai={typeTrangThaiFllow.DANG_FOLLOW} />\n </Tabs.TabPane>\n </Tabs>\n </div>\n );\n}\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport BtnFollow from \"../BtnFollow/BtnFollow\";\nimport { selectPersonalState } from \"../tuongNhaSlice\";\nimport { useTranslation } from \"react-i18next\";\nimport { getHinhAnhFB } from \"../../../utils/GetHinhanh\";\nimport { getImgDanhHieu } from \"../../DashBroad/OverviewInfoUser/utils\";\nimport SpinnerComponent from \"../../../components/Spinner\";\nimport { maskEmail } from \"../../../utils/markEmail\";\n\nlet Static = () => {\n let { profile, danhSachVideo } = useSelector(selectPersonalState);\n const { t } = useTranslation()\n\n let { luotLike, dangFollow, follow } = profile;\n return (\n <div className=\"avartar-static flex text-content space-x-5 h-full items-center flex-shrink-0 lg:flex-col lg:items-start lg:space-x-0\">\n <div className=\"number\">\n <strong>{dangFollow}</strong>\n <span>{t('tuongCuaToi.dangTheoDoi')}</span>\n </div>\n <div className=\"number\">\n <strong>{follow}</strong>\n <span>{t('tuongCuaToi.nguoiTheoDoi')}</span>\n </div>\n\n <div className=\"number\">\n <strong>{luotLike}</strong>\n <span>{t('tuongCuaToi.luotThich')}</span>\n </div>\n {/* <div className=\"number\">\n <strong>{danhSachVideo?.length | 0}</strong>\n <span>Dá»± án</span>\n </div> */}\n </div>\n );\n};\nexport default function AvatarWall() {\n let { profile, danhSachVideo } = useSelector((state) => state.tuongNhaSlice.personal);\n\n return (\n <div className=\"relative\">\n\n <div\n id=\"avatar_wall\"\n className=\" relative flex-shrink-0 space-y-5 mb-5 flex justify-between items-start \"\n >\n <div className=\"flex justify-between items-center space-x-10 w-full\">\n <div className=\"flex-shrink-0 flex items-center space-x-5\">\n <img src={getHinhAnhFB(profile.facebookId,profile)} alt=\"\" className=\"w-32 h-32 object-cover rounded-full\" />\n <div className=\" space-y-3\">\n {\" \"}\n <div className=\"flex space-x-3\">\n <p className=\"name capitalize text-2xl text-title \">{profile.hoTen}</p>\n <img src={`${getImgDanhHieu(profile.danhHieu?.hinhDanhHieu)}`} className=\"w-10 cursor-pointer\" alt=\"\"/>\n <p className=\"name capitalize rank\">{profile.danhHieu?.tenDanhHieuEN}</p>\n </div>\n <div className=\"space-x-2 text-content\">\n <span>Email</span>\n <span className=\"fo16nt-medium\">{maskEmail(profile?.email)}</span>\n </div>\n <Static />\n </div>\n </div>\n <div className=\"flex-grow space-y-5 h-full flex flex-col justify-between items-end \">\n <BtnFollow />\n \n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Header } from \"antd/lib/layout/layout\";\nimport React from \"react\";\nimport { useNavigate } from \"react-router-dom\";\n\nexport default function GuestHeader() {\n let navigate = useNavigate();\n return (\n <Header\n style={{\n background: \"black\",\n }}\n className=\"flex h-20 fixed top-0 left-0 w-full z-50 items-center justify-between\"\n >\n <div\n onClick={() => {\n navigate(\"/dash-broad\");\n }}\n className=\"logo w-1/12 h-ful flex items-center cursor-pointer\"\n >\n <img src=\"https://techx.edu.vn/img/logo/logo-cyber.svg\" alt=\"\" />\n </div>\n <button\n className=\"bg-gray-800 border-none px-10 rounded text-red-500 text-xl p-4 font-medium cursor-pointer \"\n onClick={() => {\n window.location.href = \"/login\";\n }}\n >\n Äăng nháºp\n </button>\n </Header>\n );\n}\n","import { Header } from \"antd/lib/layout/layout\";\nimport React from \"react\";\nimport HeaderTask from \"../../template/HeaderTask/HeaderTask\";\nimport { dataHeader } from \"../../template/utils\";\nimport localStorageServ from \"../../services/locaStorage.service\";\n\nexport default function HeaderPersonalPage() {\n return (\n <Header\n style={{\n background: \"black\",\n zIndex: 100,\n }}\n className=\"flex h-20 fixed top-0 left-0 w-full items-center justify-between\"\n >\n <HeaderTask />\n </Header>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { Spin, Tabs } from \"antd\";\nimport TabTuongNha from \"./TabTuongNha\";\nimport \"./index.scss\";\nimport Avatar from \"./AvatarWall/AvatarWall\";\nimport GuestHeader from \"./GuestHeader\";\nimport Header from \"./Header\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { setListThanhTich, setPersonalState } from \"./tuongNhaSlice\";\nimport { useDispatch } from \"react-redux\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nexport default function TuongNhaPage() {\n const [loading, setLoading] = useState(false);\n let isLogin = localStorageServ.userInfo.get();\n let { userId } = useParams();\n const dispatch = useDispatch();\n let navigate = useNavigate();\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow<768?true:false\n useEffect(() => {\n setLoading(true);\n servCodingCamp\n .getThongTinTuongNha(userId, 1)\n .then((res) => {\n console.log(\"😀 - .then - res\", res);\n dispatch(setPersonalState(res.data.content));\n dispatch(setListThanhTich(res.data.content.danhSachThanhTich));\n setLoading(false);\n })\n .catch((err) => {\n // toast.error(\"Äã có lá»—i xảy ra\");\n setLoading(false);\n navigate(\"/\");\n });\n }, [userId]);\n return (\n <div id=\"profilePage\" className={`c-card-content min-h-screen pt-24 ${isPhone?'px-3':'px-20'}`}>\n {isLogin ? <Header /> : <GuestHeader />}\n <Spin spinning={loading} tip=\"Loading...\">\n <Avatar />\n </Spin>\n <TabTuongNha />\n </div>\n );\n}\n","import React, { Fragment, useEffect, useState } from \"react\";\n\nimport CollapseTask from \"./CollapseTask/CollapseTask\";\n\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport BannerTask from \"./Banner/BannerTask\";\nimport { useParams } from \"react-router-dom\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport RankedSystem from \"../../components/RankedSystem/RankedSystem\";\nimport { Input, Modal } from \"antd\";\nimport { history } from \"../../App\";\nexport default function TaskPageTest() {\n const userInfo = localStorageServ.userInfo.get();\n const [dataTaskPage, setDataTaskPage] = useState({});\n const [dataHoanThanh, setDataHoanThanh] = useState([]);\n const [isModalOpen, setIsModalOpen] = useState(true);\n const [password, setPassword] = useState('');\n let { chuyenDeId } = useParams();\n useEffect(() => {\n const getData = async () => {\n try {\n // const res = await servCodingCamp.getDataTaskPage(38);\n const res = await servCodingCamp.getDataTaskPage(chuyenDeId);\n let result = res.data.content;\n setDataTaskPage(result);\n } catch (error) {\n window.location.href = \"/\";\n }\n };\n getData();\n }, [chuyenDeId]);\n useEffect(() => {\n let payload = {\n nguoiDungId: userInfo.id,\n chuyenDeId: chuyenDeId,\n monHocId: 0,\n };\n servCodingCamp\n .postlayDanhSachHoangThanh(payload)\n .then((res) => {\n console.log(\"😀 - .then - res\", res);\n // console.log(\"hoanthanh\", res);\n setDataHoanThanh(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n }, []);\n const handlePasswordSubmit = (e) => {\n e.preventDefault();\n if (password === 'Cybersoft@123') {\n setIsModalOpen(false);\n } else {\n history.push('/');\n }\n };\n return (\n // <div contenteditable=\"true\" className=\"w-full h-full\">\n <div className=\"w-full h-full mx-auto\">\n <Modal\n visible={isModalOpen}\n footer={null}\n closable={true}\n width={\"max-content\"}\n style={{\n top: 10,\n }}\n >\n <form onSubmit={handlePasswordSubmit} className=\"text-center\">\n <Input\n style={{color:'#000'}}\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter password\"\n />\n <button className=\"btn_theme_red mt-3\" type=\"submit\">Submit</button>\n </form>\n </Modal>\n {!isModalOpen && (\n <Fragment>\n <div className=\"c-col-full\">\n <BannerTask dataTask={dataTaskPage} />\n </div>\n <div className=\"space-y-5 c-col-full\">\n {dataTaskPage?.danhSachMonHoc?.map((item, index) => {\n return (\n <CollapseTask dataContent={item} key={index} index={index} />\n );\n })}\n </div>\n </Fragment>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport Lottie from \"lottie-react\";\nimport login_bg from \"../../assets/lottie_json/login-bg.json\";\nimport \"../../css/loginPage.css\";\nimport FormLogin from \"./FormLogin\";\n\nexport default function LoginPageDeskTop() {\n return (\n <div className=\"w-screen h-screen overflow-hidden bg-cover flex-col bg-fixed p-10 flex \">\n <div className=\"card-theme w-full flex-grow flex flex-col relative overflow-hidden\">\n <div className=\"w-full flex flex-grow relative\">\n <div className=\"absolute bottom-3 space-x-3 left-1/2 transform -translate-x-1/2 z-20\">\n <a\n href=\"https://cybersoft.edu.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CyberSoft\n </a>\n <a\n href=\"https://cyberlearn.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CodeZuni\n </a>\n </div>\n <div className=\"h-full w-3/5 flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 ml-10 pb-24 relative z-10\">\n <p className=\"title_login \">Hệ thống há»c táºp CodeZuni</p>\n <FormLogin />\n </div>\n </div>\n <div className=\"w-2/5 h-full flex items-center justify-center relative ‹ \">\n <img\n src=\"https://hubspot.iqonic.design/hubfs/raw_assets/public/xamin-theme/images/banner/circle-white.png\"\n className=\"absolute border-t-0 -right-1/3 object-contain scale-150 transform\"\n alt=\"\"\n />\n <div className=\"w-full h-full transform translate-y-32 -translate-x-32 scale-150\">\n <Lottie loop={false} animationData={login_bg} style={{ width: 600, height: 600 }} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport Lottie from \"lottie-react\";\nimport login_bg from \"../../assets/lottie_json/login-bg.json\";\nimport \"../../css/loginPage.css\";\nimport BtnLoginFacebook from \"../../components/BtnLoginFacebook/BtnLoginFacebook\";\nimport FormLogin from \"./FormLogin\";\n\nexport default function LoginPageTablet() {\n return (\n <div className=\"w-screen h-screen overflow-hidden bg-cover flex flex-col bg-fixed p-10 \">\n <div className=\" w-full flex-grow flex flex-col relative\">\n <div className=\"w-full flex flex-grow flex-col relative overflow-hidden\">\n <div className=\"absolute bottom-3 space-x-3 left-1/2 transform -translate-x-1/2\">\n <a\n href=\"https://cybersoft.edu.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CyberSoft\n </a>\n <a\n href=\"https://cyberlearn.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CodeZuni\n </a>\n </div>\n <div className=\" w-full flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 ml-10 pb-24 relative z-10\">\n <p className=\"title_login text-white\">Hệ thống há»c táºp CodeZuni</p>\n\n {/* <BtnLoginFacebook /> */}\n <FormLogin />\n </div>\n </div>\n <div className=\"w-full flex items-center justify-center relative \">\n <img\n src=\"https://hubspot.iqonic.design/hubfs/raw_assets/public/xamin-theme/images/banner/circle-white.png\"\n className=\"absolute border-t-0 -right-1/3 object-contain transform\"\n alt=\"\"\n />\n <div className=\"h-96 w-96 flex items-center justify-center \">\n <div className=\" transform scale-150\">\n <Lottie animationData={login_bg} style={{ width: 500, height: 500 }} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useMediaQuery } from \"react-responsive\";\nimport React from \"react\";\nimport LoginPageDeskTop from \"./LoginPageDesktop\";\nimport LoginPageTablet from \"./LoginPageTablet\";\n\nconst Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 992 });\n return isDesktop ? children : null;\n};\nconst Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n\n return isTablet ? children : null;\n};\n\nexport default function LoginPageEmail({}) {\n return (\n <>\n <Desktop>\n <LoginPageDeskTop />\n </Desktop>\n <Tablet>\n <LoginPageTablet />\n </Tablet>\n </>\n );\n}\n","import React from \"react\";\nimport ReactPlayer from \"react-player\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { selectVideoWall } from \"../tuongNhaSlice\";\nimport VideoPlayer from \"../../../components/video/VideoPlayer\";\n\nexport default function MainContent() {\n let { id, userId } = useParams();\n let detail = useSelector(selectVideoWall);\n console.log(detail)\n let navigate = useNavigate();\n return (\n <div className=\"w-full h-full relative px-20 \">\n <button\n onClick={() => {\n navigate(`/profile/${userId}`);\n }}\n className=\"close_button \"\n >\n <svg\n width=\"18\"\n data-e2e=\"\"\n height=\"18\"\n viewBox=\"0 0 9 10\"\n fill=\"#fff\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M1.35299 0.792837L4.49961 3.93944L7.64545 0.792566C7.8407 0.597249 8.15733 0.597223 8.35262 0.792508L8.70669 1.14658C8.90195 1.34184 8.90195 1.65842 8.70669 1.85368L5.56027 5.0001L8.70672 8.14655C8.90198 8.34181 8.90198 8.65839 8.70672 8.85366L8.35316 9.20721C8.1579 9.40247 7.84132 9.40247 7.64606 9.20721L4.49961 6.06076L1.35319 9.20719C1.15793 9.40245 0.841345 9.40245 0.646083 9.20719L0.292629 8.85373C0.0973708 8.65847 0.0973653 8.3419 0.292617 8.14664L3.43895 5.0001L0.292432 1.85357C0.0972034 1.65834 0.0971656 1.34182 0.292347 1.14655L0.645801 0.792924C0.841049 0.597582 1.1577 0.597543 1.35299 0.792837Z\"></path>\n </svg>\n </button>\n <div className=\"w-full h-full flex justify-center\">\n {/* <ReactPlayer\n playbackRate={1}\n playing={false}\n url={detail.youtube}\n width=\"100%\"\n height=\"100%\"\n controls={false}\n config={{\n file: {\n forceHLS: true,\n },\n }}\n /> */}\n <VideoPlayer source={detail.youtube} />\n </div>\n <div className=\" absolute text-white text-5xl bottom-1/2 transform left-0 translate-y-1/2 w-full justify-between flex items-center px-1\"></div>\n </div>\n );\n}\n","import moment from \"moment\";\nimport React from \"react\";\nimport BtnFollow from \"../BtnFollow/BtnFollow\";\nimport { selectVideoWall } from \"../tuongNhaSlice\";\nimport { useSelector } from \"react-redux\";\n\nexport default function Desc() {\n //\n let detail = useSelector(selectVideoWall);\n\n const currentDate = moment();\n const targetDate = moment(detail.ngayUp);\n const daysDifference = currentDate.diff(targetDate, \"days\");\n let user = detail?.thongTinUser;\n return (\n <div className=\"space-y-5 p-5 card-theme\">\n <div className=\" w-full flex items-start space-x-5\">\n <img src={user.avatar} alt=\"\" className=\"w-24 h-24 object-cover rounded-full\" />\n <div className=\" h-full flex flex-col justify-center flex-grow\">\n {\" \"}\n <p className=\"name capitalize text-2xl text-title\">{user.hoTen}</p>\n <div className=\"space-x-2 text-content\">\n <span>Email</span>\n <span className=\"font-medium\">{user.email}</span>\n </div>\n <p className=\"text-base text-gray-400\">\n {daysDifference == 0 ? \"Hôm nay\" : daysDifference + \" ngà y trÆ°á»›c\"}\n </p>\n </div>\n <BtnFollow />\n </div>\n\n <p className=\"text-content\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. At voluptatum ea quis doloribus\n distinctio, blanditiis excepturi perspiciatis aut officiis voluptatibus pariatur consectetur\n ullam dolorem ipsam quasi minima asperiores eius odit?\n </p>\n </div>\n );\n}\n","export let GuestLogin = () => {\n // rangThai: 0: binh luan, 1: chinh sua binh luan, 2: reply, 3: like binh luan, 4: bo like\n\n return (\n <div className=\"flex items-center space-x-5 w-full\">\n <div className=\"w-20 h-20 object-cover rounded-full bg-gray-300 flex-shrink-0\"></div>\n <div\n onClick={() => {\n window.location.href = \"/login\";\n }}\n className=\"bg-gray-800 border-none w-full rounded text-red-500 text-xl p-4 font-medium cursor-pointer\"\n >\n {\" \"}\n Äăng nháºp để bình luáºn\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport moment from \"moment\";\nimport { useDispatch } from \"react-redux\";\nimport { getListBinhLuanServ, setDataComment } from \"../../tuongNhaSlice\";\nimport classNames from \"classnames\";\n\nexport let ItemReplied = ({ data = {}, size = 1 }) => {\n let { id } = useParams();\n let { avatar, binhLuanId, tenNguoiBinhLuan, noiDung, ngayBinhLuan } = data;\n const dispatch = useDispatch();\n const currentDate = moment();\n const targetDate = moment(ngayBinhLuan);\n const daysDifference = currentDate.diff(targetDate, \"days\");\n const handleToggleLike = () => {\n // rangThai: 0: binh luan, 1: chinh sua binh luan, 2: reply, 3: like binh luan, 4: bo like\n const LIKE = 3;\n const UN_LIKE = 4;\n let option = data.daLike ? UN_LIKE : LIKE;\n let payload = {\n nopBaiId: id,\n noiDung: \"\",\n binhLuanId: binhLuanId,\n binhLuanChaId: 0,\n };\n servCodingCamp\n .postCommentVideo(option, payload)\n .then((res) => {\n dispatch(\n getListBinhLuanServ({\n nopBaiId: id,\n binhLuanId: 0,\n // 0 => binh luan cha\n })\n );\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n return (\n <div className=\"w-full space-x-5 text-content flex space-x-5 items-start\">\n <img\n style={{\n width: size * 60,\n height: size * 60,\n }}\n src={avatar}\n className=\"rounded-full object-cover\"\n alt=\"\"\n />\n <div className=\"flex-grow space-y-2\">\n <p>{tenNguoiBinhLuan}</p>\n <p>{noiDung}</p>\n <div className=\" flex items-center space-x-10 text-gray-400\">\n <span className=\"w-28\">\n {daysDifference == 0 ? \"Hôm nay\" : daysDifference + \" ngà y trÆ°á»›c\"}\n </span>\n <span className=\"flex space-x-2\">\n <span onClick={handleToggleLike}>\n {!data.daLike ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={classNames(\"w-6 h-6 cursor-pointer\", {})}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z\"\n />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"w-6 h-6 text-yellow-300 \"\n >\n <path d=\"M11.645 20.91l-.007-.003-.022-.012a15.247 15.247 0 01-.383-.218 25.18 25.18 0 01-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0112 5.052 5.5 5.5 0 0116.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 01-4.244 3.17 15.247 15.247 0 01-.383.219l-.022.012-.007.004-.003.001a.752.752 0 01-.704 0l-.003-.001z\" />\n </svg>\n )}\n </span>\n\n <span className=\"text-gray-300\">{data.luotLike}</span>\n </span>\n <span\n onClick={() => {\n let payloadComment = {\n replyTo: tenNguoiBinhLuan,\n commentStatus: 2,\n payload: {\n nopBaiId: 0,\n noiDung: \"\",\n binhLuanId: 0,\n binhLuanChaId: data.binhLuanId,\n },\n };\n\n dispatch(setDataComment(payloadComment));\n }}\n className=\"cursor-pointer text-gray-300\"\n >\n Trả lá»i\n </span>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport { ItemReplied } from \"./ItemReplied\";\nexport let UserReplied = ({ data }) => {\n let { id } = useParams();\n let { binhLuanId } = data;\n const [listBinhLuan, setlistBinhLuan] = useState([]);\n const [isShow, setIsShow] = useState(false);\n\n let handleViewMore = () => {\n servCodingCamp\n .getBinhLuanVideo(id, binhLuanId)\n .then((res) => {\n console.log(\"con\", res);\n setlistBinhLuan(res.data.content);\n setIsShow(true);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n useEffect(() => {\n isShow && handleViewMore();\n }, [data.binhLuanCon]);\n return (\n <div className=\"space-y-3\">\n <ItemReplied data={data} key={data.binhLuanId} />\n\n <div className=\"pl-20 space-y-5 transform \">\n {!isShow && data.binhLuanCon > 0 && (\n <p\n className=\"cursor-pointer\"\n onClick={() => {\n // setIsShow(true);\n handleViewMore();\n }}\n >\n Xem {data.binhLuanCon} bình luáºn{\" \"}\n <i class=\"fa fa-angle-down pt-1\" aria-hidden=\"true\"></i>{\" \"}\n </p>\n )}\n {isShow && (\n <>\n {listBinhLuan.map((item, index) => {\n return (\n <ItemReplied data={item} size={0.7} key={item.binhLuanId} />\n );\n })}\n </>\n )}\n </div>\n </div>\n );\n};\n","import TextArea from \"antd/lib/input/TextArea\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getListBinhLuanServ,\n selectDataComment,\n selectVideoWall,\n setDataComment,\n} from \"../../tuongNhaSlice\";\nimport localStorageServ from \"../../../../services/locaStorage.service\";\nexport let InputComment = () => {\n let { replyTo, payload, commentStatus } = useSelector(selectDataComment);\n let { id } = useParams();\n let formRef = useRef();\n const dispatch = useDispatch();\n // let { userInfo } = useSelector(selectThongTinMoRong);\n let userInfo = localStorageServ.userInfo.get();\n\n const inputRef = useRef(null);\n\n useEffect(() => {\n // inputRef.current.focus();\n return () => {\n dispatch(\n setDataComment({\n replyTo: \"\",\n commentStatus: 0,\n payload: {\n nopBaiId: 0,\n noiDung: \"\",\n binhLuanId: 0,\n binhLuanChaId: 0,\n },\n })\n );\n };\n }, []);\n useEffect(() => {\n inputRef.current.focus();\n }, [replyTo]);\n\n const [comment, setComment] = useState(\"\");\n // rangThai: 0: binh luan, 1: chinh sua binh luan, 2: reply, 3: like binh luan, 4: bo like\n const handleSubmitComment = (e) => {\n e.preventDefault();\n\n let payloadComent = {\n nopBaiId: id,\n noiDung: comment,\n binhLuanId: 0,\n binhLuanChaId: payload.binhLuanChaId,\n };\n // binhLuanId: like bá» like\n // binhLuanChaId: reploy\n // binhLuanChaId = binhLuanId reply vs user khác\n\n servCodingCamp\n .postCommentVideo(commentStatus, payloadComent)\n .then((res) => {\n setComment(\"\");\n dispatch(\n getListBinhLuanServ({\n nopBaiId: id,\n binhLuanId: 0,\n // binhLuanId=0 => constant\n })\n );\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const handleSubmitByEnter = (e) => {\n if (e.keyCode == 13 && e.shiftKey == false) {\n console.log(\"yes enter\");\n e.preventDefault();\n formRef.submit();\n }\n };\n let preFixReply = replyTo.length > 0 ? `Trả lá»i @${replyTo}:` : \"\";\n\n return (\n <form\n ref={formRef}\n onSubmit={handleSubmitComment}\n className=\"flex items-center space-x-5 w-full\"\n >\n <img src={userInfo?.avatar} className=\"w-20 h-20 object-cover rounded-full flex-shrink-0 \" />\n <TextArea\n ref={inputRef}\n onKeyDown={(e) => {\n // handleSubmitByEnter(e);\n if (e.key === \"Backspace\" && comment === \"\" && preFixReply !== \"\") {\n setComment(\"\");\n dispatch(\n setDataComment({\n replyTo: \"\",\n payload: {\n nopBaiId: 0,\n noiDung: comment,\n binhLuanId: 0,\n binhLuanChaId: 0,\n },\n })\n );\n }\n }}\n onChange={(e) => {\n setComment(e.target.value.substring(preFixReply.length));\n }}\n value={preFixReply + comment}\n autoSize={{\n minRows: 2,\n maxRows: 6,\n }}\n className=\"bg-gray-800 border-none rounded text-white caret-yellow-400 p-3 care\"\n placeholder=\"Thêm bình luáºn...\"\n />\n <button type=\"submit\" className=\"text-xl text-gray-500 cursor-pointer hover:text-white\">\n Gá»i\n </button>\n </form>\n );\n};\n","import React, { useEffect } from \"react\";\nimport servCodingCamp from \"../../../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getDetailVideoWallServ,\n getListBinhLuanServ,\n selectListBinhLuan,\n selectVideoWall,\n} from \"../../tuongNhaSlice\";\nimport localStorageServ from \"../../../../services/locaStorage.service\";\nimport classNames from \"classnames\";\nimport { GuestLogin } from \"./GuestLogin\";\nimport { UserReplied } from \"./UserReplied\";\nimport { InputComment } from \"./InputComment\";\n\nlet ItemTodal = ({ icon, number, handleClick = () => {} }) => {\n return (\n <div onClick={handleClick} id=\"total\" className=\"space-x-2 text-2xl card-theme\">\n <span>{icon}</span>\n <span className=\"text-lg \">{number}</span>\n </div>\n );\n};\n\nexport default function Discuss() {\n let { id: idVideo } = useParams();\n // const [listBinhLuan, setlistBinhLuan] = useState([]);\n const listBinhLuan = useSelector(selectListBinhLuan);\n const videoWall = useSelector(selectVideoWall);\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(\n getListBinhLuanServ({\n nopBaiId: idVideo,\n binhLuanId: 0,\n })\n );\n }, []);\n\n let isLogin = localStorageServ.userInfo.get();\n let handleToggleLike = () => {\n servCodingCamp\n .toogleLikeVideo(idVideo, !videoWall.daLike)\n .then((res) => {\n console.log(res);\n dispatch(getDetailVideoWallServ(idVideo));\n })\n .catch((err) => {\n console.log(err);\n });\n };\n let handleToggleSaveVideo = () => {\n console.log(\"yeys\");\n servCodingCamp\n .toogleSaveVideo(idVideo, !videoWall.daLuu)\n .then((res) => {\n dispatch(getDetailVideoWallServ(idVideo));\n })\n .catch((err) => {\n console.log(err);\n });\n };\n return (\n <div id=\"discuss\" className=\"text-content space-y-5 items-center p-5 \">\n <div className=\"flex space-x-5 \">\n <ItemTodal icon={<i className=\"fa fa-eye\"></i>} number={videoWall.luotXem} />\n <ItemTodal\n icon={\n <i\n className={classNames(\"fa fa-heart\", {\n \"text-yellow-300\": videoWall.daLike,\n })}\n ></i>\n }\n handleClick={handleToggleLike}\n number={videoWall.luotLike}\n />\n <ItemTodal\n icon={\n <i\n className={classNames(\"fa fa-bookmark\", {\n \"text-yellow-300\": videoWall.daLuu,\n })}\n ></i>\n }\n handleClick={handleToggleSaveVideo}\n number={videoWall.luotLuu}\n />\n </div>\n\n <h2 className=\"text-title\">{listBinhLuan.length} bình luáºn</h2>\n\n {isLogin ? <InputComment /> : <GuestLogin />}\n <div className=\"w-4/5 h-px bg-gray-400 mx-auto \"></div>\n <div className=\"space-y-5 w-full bg-black rounded-lg p-5\">\n {listBinhLuan.map((item, index) => {\n return <UserReplied data={item} key={item.binhLuanId} />;\n })}\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport MainContent from \"./MainContent\";\nimport Desc from \"./Desc\";\nimport Discuss from \"./Discuss/Discuss\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch } from \"react-redux\";\nimport { getDetailVideoWallServ, setVideoWall } from \"../tuongNhaSlice\";\n\nexport default function DetailWall() {\n let { id, userId } = useParams();\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(getDetailVideoWallServ(id));\n }, []);\n return (\n <div id=\"detailWall\" className=\" w-full\">\n <div className=\"flex w-full \">\n <div className=\" min-h-screen w-3/5 flex-shrink-0\">\n <MainContent />\n </div>\n <div className=\"flex-grow p-3 pl-0 h-screen overflow-y-scroll\">\n <Desc></Desc>\n <Discuss></Discuss>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport axios from \"axios\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport Heatmap from \"./Heatmap\";\n\nconst OnlineTimeTracker = () => {\n const [onlineTime, setOnlineTime] = useState(0);\n useEffect(() => {\n const updateOnlineTimeInterval = setInterval(() => {\n setOnlineTime((prevTime) => prevTime + 1);\n }, 1000);\n\n const handleBeforeUnload = async () => {\n clearInterval(updateOnlineTimeInterval);\n\n let data = {\n soPhutHoatDong: formatTime(onlineTime),\n };\n // console.log(\"😀 - handleBeforeUnload - data\", data);\n try {\n await servCodingCamp.postTimeHoatDong(data);\n } catch (error) {\n console.error(\"Error updating online time:\", error);\n }\n };\n\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n\n return () => {\n clearInterval(updateOnlineTimeInterval);\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n };\n }, [onlineTime]);\n\n const formatTime = (timeInSeconds) => {\n const hours = Math.floor(timeInSeconds / 3600);\n const minutes = Math.floor((timeInSeconds % 3600) / 60);\n const seconds = timeInSeconds % 60;\n\n return `${padTime(hours)}:${padTime(minutes)}:${padTime(seconds)}`;\n };\n\n const padTime = (value) => {\n return value.toString().padStart(2, \"0\");\n };\n\n return <div>{/* <p>Online Time: {formatTime(onlineTime)}</p> */}</div>;\n};\n\nexport default OnlineTimeTracker;\n","import React, { useEffect, useState } from \"react\";\nimport Axios from \"axios\";\nimport HtmlParser from \"react-html-parser\";\nimport \"./list_blog.css\";\nimport { Pagination } from \"antd\";\nimport { useNavigate, useParams } from \"react-router-dom\";\n\nexport const BlogPage = () => {\n let [noiDung, setNoiDung] = useState(\"\");\n let param = useParams();\n let navigate = useNavigate();\n\n useEffect(() => {\n Axios({\n method: \"GET\",\n url: \"https://cybersoft.edu.vn/category/bai-viet-nen-doc/page/\" + param.page,\n }).then((res) => {\n let start = res.data.indexOf(\"api-start\");\n let end = res.data.indexOf(\"api-end\");\n let content = res.data.substring(start, end);\n content = content.replace(\"api-start\", \"\").replaceAll(\"href=\", \" target='_blank' href=\");\n\n // console.log(content);\n setNoiDung(JSON.parse(content));\n });\n }, [param.page]);\n\n /**q\n * lay số trang thông qua đếm chuá»—i từ API tra ve\n * tinh toan load pagination = nhan 10 de có so trang\n */\n let count = 0;\n\n if (noiDung != \"\") {\n count = noiDung.page.split(\"\").filter((value, index, arr) => {\n return arr.slice(index, index + 9).join(\"\") === \"cybersoft\";\n }).length;\n\n if (param.page != 1 && param.page != count) {\n count -= 1;\n }\n count = count * 10;\n }\n\n return (\n <div className=\"h-max-content min-h-screen w-full flex\">\n <div className=\"w-60\"></div>\n <div style={{ flexGrow: \"1\" }} className=\"h-max-cotent flex flex-col min-h-screen \">\n {\" \"}\n <div className=\"blog_api grid grid-cols-4 xl:grid-cols-3 gap-5 container p-5\">\n {noiDung != \"\" &&\n noiDung.data.map((item) => {\n return (\n <div className=\" rounded-lg bg-white\">\n {HtmlParser(item.image)}\n\n {HtmlParser(item.title)}\n\n {HtmlParser(item.content)}\n </div>\n );\n })}\n </div>\n <Pagination\n className=\"p-5 text-center\"\n total={count}\n onChange={(page, pageSize) => {\n navigate(\"/blog/\" + page);\n }}\n />\n </div>\n </div>\n );\n};\n","import { Button, Modal } from \"antd\";\nimport axios from \"axios\";\nimport React, { useEffect, useState } from \"react\";\nimport AnimateHeight from \"react-animate-height\";\nimport ReactPlayer from \"react-player\";\nimport { ControlBar, PlaybackRateMenuButton, Player } from \"video-react\";\nimport VideoPlayer from \"../../components/video/VideoPlayer\";\n\nexport default function Collapse({ data }) {\n const [height, setHeight] = useState(0);\n const [source, setSource] = useState(\"\");\n const [visible, setVisible] = useState(false);\n\n const [listVideo, setListVideo] = useState([]);\n useEffect(() => {\n axios\n .get(`https://apicrm.cybersoft.edu.vn/api/khoahoc/free/${data.id}`)\n .then((res) => {\n console.log(res.data.content.thongTinChuongHoc[0]?.thongTinBaiHoc);\n setListVideo(res.data.content.thongTinChuongHoc[0]?.thongTinBaiHoc);\n })\n .catch((err) => {\n console.log(err);\n });\n }, [data.id]);\n function handleGetVideoTrongNuoc(item) {\n axios\n .get(`https://apicrm.cybersoft.edu.vn/api/file/ftp-video/${item.noiDung}`)\n .then((res) => {\n setSource(res.data);\n setVisible(true);\n })\n .catch((err) => {\n console.log(err);\n });\n }\n\n function handleGetVideoNuocNgoai(item) {\n axios\n .get(`https://apicrm.cybersoft.edu.vn/api/file/ftp-video-digital/${item.noiDung}`)\n .then((res) => {\n setSource(res.data);\n setVisible(true);\n })\n .catch((err) => {\n console.log(err);\n });\n }\n\n return (\n <div className=\"\">\n <Modal\n width=\"80%\"\n style={{ top: 10 }}\n // title={titleVideo}\n visible={visible}\n onCancel={() => {\n setVisible(false);\n setSource(\"\");\n }}\n footer={null}\n centered\n >\n {source !== \"\" ? (\n <div style={{ height: \"100%\", width: \"100%\" }}>\n\n {/* <ReactPlayer\n playbackRate={1}\n playing={true}\n url={source}\n width=\"100%\"\n height=\"100%\"\n // style={{ borderRadius: \"100px\" }}\n controls={true}\n config={{\n file: {\n forceHLS: true,\n },\n }}\n /> */}\n\n <VideoPlayer source={source} />\n\n\n </div>\n ) : null}\n </Modal>\n <div className=\" c-col-full card-theme p-0 relative\">\n <button\n aria-expanded={height !== 0}\n aria-controls=\"example-panel\"\n onClick={() => setHeight(height === 0 ? \"auto\" : 0)}\n className=\"w-full space-x-2 c-card-content flex items-center justify-between px6 \"\n >\n <p className=\"font-bold text-title text-left\">\n {data.tenKhoaHoc} <span className=\"text-yellow-theme\">{data.soLuotXem} lượt xem</span>\n </p>\n <div className=\"flex items-center space-x-10 \">\n <i\n className={`fa fa-angle-up transform text-white ${height === \"auto\" ? \"rotate-180\" : \"rotate-0\"\n }`}\n ></i>\n </div>\n </button>\n <AnimateHeight id=\"example-panel\" duration={500} height={height}>\n <div className=\"\">\n <div className=\"space-y-5 c-card-content\">\n {listVideo.map((item, index) => {\n return (\n <div className=\"flex items-center justify-between px-10\">\n <p className=\"text-white\">\n {item.tenBaiHoc}{\" \"}\n <span className=\"text-yellow-theme\">{item.soLuotXem} lượt xem</span>\n </p>\n <div className=\"space-x-5\">\n <button\n onClick={() => handleGetVideoTrongNuoc(item)}\n className=\"bg-blue-600 border-none text-white text-xl px-5 py-2\"\n >\n Server 1\n </button>\n <button\n onClick={() => handleGetVideoNuocNgoai(item)}\n className=\"bg-red-600 border-none text-white text-xl px-5 py-2\"\n >\n Server 2\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </AnimateHeight>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport axios from \"axios\";\nimport Collapse from \"./Collapse\";\n\nexport default function WorkShop() {\n const [listWorkShop, setListWorkShop] = useState([]);\n useEffect(() => {\n axios\n .get(`https://apicrm.cybersoft.edu.vn/api/khoahoc/danh-sach-khoa-hoc-free`)\n .then((res) => {\n\n setListWorkShop(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n // /`´\n }, []);\n return (\n <div className=\"container space-y-5 mt-5\">\n {listWorkShop.map((item, index) => {\n return <Collapse data={item} key={index} />;\n })}\n\n <a href=\"https://www.youtube.com/watch?v=lMUaLfzOb5I&list=PLwO_PVO47V1ZlPs3CLfSEkII8JdIbU8fn&index=1\" target=\"_blank\" >\n <div className=\"mt-5 c-col-full card-theme p-0 relative\">\n <button\n\n aria-controls=\"example-panel\"\n\n className=\"w-full space-x-2 c-card-content flex items-center justify-between px6 \"\n >\n <p className=\"font-bold text-title text-left\">\n Agile/Scrum Skill dà nh cho dev pass phá»ng vấn\n </p>\n\n </button>\n </div>\n </a>\n </div>\n );\n}\n","import React from \"react\";\nimport { Navigate } from \"react-router-dom\";\nimport localStorageServ from \"../services/locaStorage.service\";\n\nexport const withAuth = (Component) => {\n let userInfo = localStorageServ.userInfo.get();\n if (!userInfo) {\n return <Navigate to=\"/login\" replace />;\n }\n return (\n <>\n <Component />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router\";\nimport { setInforLoginDemo } from \"../../redux/reducer/authReducer\";\nimport httpServ from \"../../services/http.service\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { removeRealUser } from \"../../utils/HocDemoUtils\";\nimport BtnGoogleCapcha from \"../BtnGoogleCapcha/BtnGoogleCapcha\";\nimport \"./form_login_demo.css\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nexport default function Form_Login_Demo() {\n const dispatch = useDispatch();\n const [valuesForm, setValuesForm] = useState({\n email: \"\",\n code: \"\",\n });\n const [message, setMessage] = useState(\"\");\n\n // console.log(valuesForm);\n const handleGetValueForm = (event) => {\n const { name, value } = event.target;\n setValuesForm({ ...valuesForm, [name]: value });\n };\n const handleRemoveUser = () => {\n var regex = /\\S+@\\S+\\.\\S+/;\n if (\n !valuesForm.code ||\n !valuesForm.email ||\n !regex.test(valuesForm.email.trim())\n ) {\n setMessage(\"Mã há»c thá» hoặc email không hợp lệ\");\n return;\n }\n httpServ\n .postCheckUserDemoLogin(\n valuesForm.code.trim(),\n valuesForm.email.trim(),\n valuesForm.sodt.trim()\n )\n .then(async(res) => {\n const obj = {\n email: \"pnga62782@gmail.com\",\n matKhau: \"0944057056\",\n }\n try {\n const result = await servCodingCamp.loginTrialService(obj,res.data.content.hanSuDung);\n // const result = await servCodingCamp.loginTrialService(obj,\"2024-04-05T13:25:00\");\n if (result.data.content) {\n localStorageServ.userDemo.set(result.data.content);\n localStorageServ.userInfo.set(result.data.content);\n dispatch(setInforLoginDemo(result.data.content));\n \n }\n } catch (error) {\n \n }\n \n // dispatch(loginTrial(obj,res.data.content.hanSuDung));\n localStorageServ.timeDemo.set(res.data.content.hanSuDung);\n localStorageServ.nuocngoaiDemo.set(res.data.content.nuocNgoai);\n localStorageServ.codeDemo.set(valuesForm.code);\n // removeRealUser();\n \n window.location.href = \"dash-broad\";\n })\n .catch((err) => {\n \n setMessage(\"Mã há»c thá» không hợp lệ hoặc đã được sá» dụng\");\n });\n };\n return (\n <div className=\"bg-white shadow-md rounded px-8 pt-8 pb-8 mb-4 w-96\">\n <form action className=\"form\">\n <div className=\"form__div\">\n <input\n onChange={handleGetValueForm}\n type=\"text\"\n className=\"form__input\"\n placeholder=\" \"\n name=\"email\"\n />\n <label htmlFor className=\"form__label\">\n Tà i khoản gmail của bạn\n </label>\n </div>\n <div className=\"form__div\">\n <input\n onChange={handleGetValueForm}\n type=\"text\"\n className=\"form__input\"\n placeholder=\" \"\n name=\"sodt\"\n />\n <label htmlFor className=\"form__label\">\n Số Ä‘iện thoại của bạn\n </label>\n </div>\n <div className=\"form__div\">\n {/* <input type=\"password\" className=\"form__input\" placeholder=\" \" /> */}\n <input\n onChange={handleGetValueForm}\n type=\"\"\n name=\"code\"\n className=\"form__input\"\n placeholder=\" \"\n />\n <label htmlFor className=\"form__label \">\n Mã há»c thá»\n </label>\n </div>\n {message ? <p className=\"text-red-400 -mt-4 my-1\">{message}</p> : \"\"}\n <div className=\"flex items-center justify-between\">\n <button\n onClick={handleRemoveUser}\n className=\"btn-hocthu text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline\"\n type=\"button\"\n >\n Há»c thá»\n </button>\n </div>{\" \"}\n </form>\n <BtnGoogleCapcha />\n </div>\n \n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Lottie from \"lottie-react\";\nimport login_bg from \"../../assets/lottie_json/login-bg.json\";\nimport \"../../css/loginPage.css\";\nimport Form_Login_Demo from \"../../components/Form_Login_Demo/Form_Login_Demo\";\n\nexport default function LoginPageDemo() {\n useEffect(()=>{\n localStorage.clear();\n },[])\n return (\n \n <div className=\"w-screen h-screen overflow-hidden bg-cover flex-col bg-fixed p-10 flex \">\n <div className=\"card-theme w-full flex-grow flex flex-col relative overflow-hidden\">\n <div className=\"w-full flex flex-grow relative\">\n <div className=\"absolute bottom-3 space-x-3 left-1/2 transform -translate-x-1/2 z-20\">\n <a\n href=\"https://cybersoft.edu.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CyberSoft\n </a>\n <a\n href=\"https://cyberlearn.vn/\"\n target=\"_blank\"\n className=\"text-content border-b-1 border-gray-700\"\n >\n CodeZuni\n </a>\n </div>\n <div className=\"h-full w-3/5 flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 ml-10 pb-24 relative z-10\">\n <p className=\"title_login \">Hệ thống há»c táºp CodeZuni</p>\n <Form_Login_Demo />\n </div>\n </div>\n <div className=\"w-2/5 h-full flex items-center justify-center relative ‹ \">\n <img\n src=\"https://hubspot.iqonic.design/hubfs/raw_assets/public/xamin-theme/images/banner/circle-white.png\"\n className=\"absolute border-t-0 -right-1/3 object-contain scale-150 transform\"\n alt=\"\"\n />\n <div className=\"w-full h-full transform translate-y-32 -translate-x-32 scale-150\">\n <Lottie loop={false} animationData={login_bg} style={{ width: 600, height: 600 }} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react'\n\nconst PackageDesktop = () => {\n return (\n <div>PackageDesktop</div>\n )\n}\n\nexport default PackageDesktop","import { useMediaQuery } from \"react-responsive\";\nimport React from 'react'\nimport PackageDesktop from \"./PackageDesktop\";\nimport PackageTable from \"./PackageTable\";\n\nconst Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 992 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n \n return isTablet ? children : null;\n };\nconst ListService = () => {\n return (\n <>\n <Desktop>\n <PackageDesktop />\n </Desktop>\n <Tablet>\n <PackageTable />\n </Tablet>\n </>\n )\n}\n\nexport default ListService","import React from \"react\";\nimport { Modal } from \"antd\";\nimport \"./dieuKhoanThanhToan.scss\";\n\nexport default function DieuKhoanThanhToan({ isShowDieuKhoan, handleCloseModal }) {\n return (\n <div className=\"\" id=\"modal-dieu-khoan\">\n <Modal\n style={{ top: 20 }}\n title=\"Quy Äịnh Há»c Táºp\"\n className=\"rounded-xl w-4/5 felx flex-col items-center h-5/6 \"\n // onOk={handleOk}\n visible={isShowDieuKhoan}\n onCancel={() => {\n handleCloseModal();\n }}\n footer={\n <button\n onClick={() => {\n handleCloseModal();\n }}\n className=\" cursor-pointe bg-yellow-theme px-5 py-2 rounded text-black font-medium\"\n >\n Äồng ý\n </button>\n }\n >\n <div\n id=\"form-dieu-khoan\"\n m\n className=\"space-y-2 text-content text-black bg-white p-10\"\n >\n <p className=\"text-xl font-medium text-center text-gray-900\">\n ÄIỀU KHOẢN QUY ÄỊNH HỌC TẬP\n </p>\n <p className=\"\">\n {/* DÆ°á»›i đây là những Ä‘iá»u khoản được áp dụng cho há»c viên của CodeZuni. Xin hãy Ä‘á»c kỹ toà n bá»™ thá»a thuáºn trÆ°á»›c khi tham gia. Má»™t khi bạn đã đăng ký tham\n gia trên CodeZuni chúng tôi sẽ hiểu rằng bạn đã Ä‘á»c và đồng ý toà n bá»™ Ä‘iá»u khoản được Ä‘Æ°a ra trong bản thá»a thuáºn nà y. */}\n *Có hiệu lá»±c từ ngà y 01.08.2023, và áp dụng cho tất cả há»c viên Ä‘ang\n há»c tại CodeZuni. Phụ Huynh, há»c viên vui lòng Ä‘á»c kỹ và ký xác nháºn\n tuân thủ những quy định đã được trình bà y trong bảng nà y khi đăng ký\n nháºp há»c. CodeZuni áp dụng bảng ná»™i quy nà y nhằm tạo Ä‘iá»u kiện há»c táºp\n tốt nhất cho Há»c viên và đảm bảo chất lượng giảng dạy. Trong trÆ°á»ng\n hợp Ná»™i Quy Há»c Táºp có ná»™i dung cáºp nháºt má»›i được gá»i qua\n SMS/Zalo/Email mà Phụ Huynh và Há»c Viên không láºp tức có bất kỳ phản\n đối nà o, CodeZuni sẽ hiểu rằng Phụ Huynh và Há»c Viên đã đồng ý vá»›i ná»™i\n dung cáºp nháºt của Ná»™i Quy Há»c Táºp\n </p>\n <ol className=\"list-decimal text-lg\">\n {/* big 1 */}\n <li>\n <h3 className=\"underline\">Äiá»u kiện nháºp há»c: </h3>\n <ol id=\"sub-1\" className=\"list-decimal\">\n <li>\n Há»c viên phải hoà n thà nh bà i thi xếp lá»›p trÆ°á»›c khi nháºp há»c.\n </li>\n <li>\n Tham gia khóa há»c theo lá»™ trình đã được trao đổi và thống nhất\n vá»›i Bá»™ Pháºn TÆ° Vấn.\n </li>\n <li>\n Hoà n thà nh 100% há»c phà trÆ°á»›c khi nháºp há»c. Quy định vá» há»c\n phÃ:\n </li>\n <li>\n Há»c phÃ:\n <p>\n Há»c phà là khoản tiá»n mà ngÆ°á»i há»c thanh toán để chi trả cho\n dịch vụ giáo dục, Ä‘Ã o tạo theo lá»™ trình há»c đã đồng thuáºn\n cùng CodeZuni. Há»c viên xác nháºn đã tìm hiểu chÆ°Æ¡ng trình há»c,\n Ä‘iá»u kiện cÆ¡ sở váºt chất, trang thiết bị phục vụ há»c táºp và \n các dịch vụ trÆ°á»›c khi đăng ký há»c.\n </p>\n </li>\n <li>\n Hoà n lại há»c phÃ\n <ol className=\"list-decimal\" id=\"sub-1-5\">\n <li>\n Há»c phà sẽ KHÔNG được hoà n lại trừ các trÆ°á»ng hợp sau:\n <ol style={{ listStyleType: \"lower-alpha\" }} className=\"\">\n <li>\n Sau ba (03) buổi há»c đầu tiên há»c viên cảm thấy không\n hứng thú vá»›i việc há»c nà y{\" \"}\n </li>\n <li>Hoặc lá»—i xuất phát từ CodeZuni</li>\n </ol>\n </li>\n <li>\n Quy định hoà n há»c phà cho các trÆ°á»ng hợp được hoà n phÃ:\n <ol style={{ listStyleType: \"lower-alpha\" }} className=\"\">\n <li>\n Sau ba (03) buổi há»c đầu tiên há»c viên cảm thấy không\n hứng thú vá»›i việc há»c nà y: CodeZuni sẽ hoà n 100% há»c phÃ\n các buổi chÆ°a há»c.{\" \"}\n </li>\n <li>\n Lá»—i xuất phát từ CodeZuni: CodeZuni sẽ hoà n 100% há»c phà các\n buổi chÆ°a há»c nếu phát sinh các tình huống sau:\n <ul className=\"list-disc\">\n <li>\n CodeZuni đã trì hoãn lá»›p há»c quá ba (03) tháng kể từ\n ngà y dá»± kiến khai giảng\n </li>\n <li>\n CodeZuni dịch chuyển Trung tâm CodeZuni ra khá»i phạm vị\n Quáºn/Huyện so vá»›i địa Ä‘iểm đăng ký ban đầu của Há»c\n Viên.\n </li>\n </ul>\n </li>\n </ol>\n </li>\n <li>\n Thá»i gian hoà n há»c phà và các khoản loại trừ:\n <ul className=\"list-disc\">\n <li>\n Việc hoà n tiá»n sẽ được thá»±c hiện trong vòng 10 ngà y\n là m việc sau khi CodeZuni nháºn Ä‘Æ¡n yêu cầu hoà n tiá»n được\n ký xác nháºn bởi Phụ Huynh.\n </li>\n <li>\n CodeZuni chỉ hoà n phần há»c phà còn lại sau khi trừ Ä‘i các\n chi phà cần thiết gồm phà chuyển đổi trả góp và chÆ°Æ¡ng\n trình khuyến mãi (nếu có)\n </li>\n <li>\n Hồ sÆ¡ hoà n phà gồm: ÄÆ¡n yêu cầu hoà n phÃ; Căn cÆ°á»›c\n công dân/Chứng minh nhân dân/Giấy phép lái xe; Hồ sÆ¡\n khác theo yêu cầu từ CodeZuni (nếu có).\n </li>\n </ul>\n </li>\n </ol>\n </li>\n <li>\n Bảo lÆ°u há»c phÃ:\n <ol className=\"list-decimal\" id=\"sub-1-6\">\n <li>\n Há»c viên đăng ký 1 khóa há»c\n <p>\n Há»c viên chỉ được bảo lÆ°u há»c phà khi đáp ứng đủ các\n Ä‘iá»u kiện sau:\n </p>\n <ul className=\"list-disc\">\n <li>\n Chỉ được bảo lÆ°u khi lá»›p khai giảng tối Ä‘a 2 tuần và \n phà bảo lÆ°u là 30% há»c phà khóa má»›i sẽ chuyển qua.\n </li>\n <li>\n Nếu há»c viên bảo lÆ°u trÆ°á»›c ngà y khai giảng của khóa\n tối thiểu 20 ngà y thì được bảo lÆ°u miá»…n phÃ\n </li>\n <li>\n CodeZuni chỉ bảo lÆ°u há»c phà của những buổi há»c còn lại\n chÆ°a diá»…n ra và KHÔNG bảo lÆ°u chÆ°Æ¡ng trình ƯU ÄÃI.\n </li>\n <li>\n Há»c viên thông báo việc bảo lÆ°u trÆ°á»›c Ãt nhất 48h cho\n CodeZuni. Há»c phà được bảo lÆ°u sẽ tÃnh từ ngà y Há»c viên\n hoà n thà nh thủ tục bảo lÆ°u vá»›i CodeZuni.\n </li>\n <li>\n Há»c phà bảo lÆ°u chỉ được bảo lÆ°u trong vòng ba (03)\n tháng kể từ ngà y hoà n tất thủ tục bảo lÆ°u. Sau ba (03)\n tháng, số tiá»n bảo lÆ°u sẽ hết hạn sá» dụng và khách\n hà ng sẽ thanh toán 100% há»c phà nếu muốn đăng ký há»c\n lại.\n </li>\n <li>\n Há»c phà bảo lÆ°u sẽ KHÔNG được hoà n lại vá»›i bất kỳ lý\n do gì.\n </li>\n <li>\n Há»c viên chỉ được bảo lÆ°u má»™t (01) lần duy nhất cho\n khóa há»c đã đăng ký.\n </li>\n <li>\n Äể đảm bảo chất lượng há»c táºp, Há»c viên khi quay lại\n nên tham gia khóa há»c từ đầu khóa và đóng há»c phà bổ\n sung nếu có.\n </li>\n </ul>\n </li>\n <li>\n Há»c viên đăng ký lá»™ trình 2-3-4-5 khóa trở lên (combo)\n <p>\n Há»c viên được khuyến khÃch chá»n lá»›p tiếp theo sá»›m để\n kiến thức được liên tục. Trong trÆ°á»ng hợp có việc báºn\n chÆ°a thể tiếp tục ngay sau khi xong khóa há»c, há»c viên\n được bảo lÆ°u tối Ä‘a 2 tháng để ghi danh và o khóa há»c\n tiếp theo. TrÆ°á»›c 1 tháng khi lá»›p má»›i bắt đầu, há»c viên\n cần thông báo để CodeZuni sắp xếp lá»›p phù hợp.\n </p>\n </li>\n </ol>\n </li>\n <li>\n Chuyển đổi há»c phà sang hình thức tÃn dụng cho Há»c viên khác:\n <p>\n TrÆ°á»ng hợp Há»c viên không tiếp tục tham gia khóa há»c mà \n không thuá»™c các trÆ°á»ng hợp nêu tại mục 2.2, Há»c viên chỉ\n được chuyển há»c phà cho Há»c viên khác nếu Há»c viên đó là \n ngÆ°á»i có mối quan hệ trong gia đình vá»›i Há»c viên gồm: vợ,\n chồng, cha đẻ, mẹ đẻ, con đẻ của Há»c viên; anh, chị, em ruá»™t\n của Há»c viên. Há»c viên bắt buá»™c cung cấp chứng từ để chứng\n minh nếu nhÆ° có yêu cầu từ phÃa CodeZuni.\n </p>\n </li>\n <li>\n Äóng há»c phà chênh lệch khi Há»c viên chuyển sang cấp Ä‘á»™ khác,\n chÆ°Æ¡ng trình khác, mô hình há»c táºp khác:\n <ol className=\"list-decimal\" id=\"sub-1-8\">\n <li>\n Trong trÆ°á»ng hợp Há»c viên chuyển từ lá»›p có há»c phà cao hÆ¡n\n sang lá»›p có há»c phà thấp hÆ¡n, há»c phà còn dÆ° sẽ được bảo\n lÆ°u cho khóa há»c tiếp theo và không được hoà n trả dÆ°á»›i bất\n kỳ hình thức nà o.\n </li>\n <li>\n TrÆ°á»ng hợp Há»c viên chuyển từ lá»›p có há»c phà thấp hÆ¡n sang\n lá»›p có há»c phà cao hÆ¡n, Há»c viên phải đóng thêm khoản há»c\n phà chênh lệch giữa hai lá»›p há»c.\n </li>\n </ol>\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\">\n {\" \"}\n Quy định chuyển lá»›p và chuyển đổi mô hình há»c táºp:\n </h3>\n <ol id=\"sub-2\" className=\"list-decimal\">\n <li>\n Há»c viên không được chuyển lá»›p quá hai (02) lần trong má»™t (01)\n lá»™ trình há»c ( Lá»™ trình há»c bao gồm nhiá»u khóa há»c )\n </li>\n <li>\n TrÆ°á»ng hợp Há»c viên chuyển từ khóa há»c có chÆ°Æ¡ng trình Æ°u đãi\n sang khóa há»c không Æ°u đãi hoặc từ khóa há»c có Æ°u đãi cao sang\n khóa há»c có Æ°u đãi thấp hÆ¡n, thì Há»c viên sẽ phải bắt buá»™c\n đóng bổ sung há»c phà chênh lệch. TrÆ°á»ng hợp Há»c viên chuyển từ\n khóa há»c có Æ°u đãi thấp hÆ¡n sang khóa há»c có Æ°u đãi cao thì\n há»c phà chênh lệch sẽ không được hoà n lại dÆ°á»›i bất kỳ hình\n thức nà o.\n </li>\n <li>\n Khi nháºn được chỉ đạo từ Sở Giáo Dục của địa phÆ°Æ¡ng hoặc các\n cÆ¡ quan nhà nÆ°á»›c có thẩm quyá»n vá» việc chuyển đổi mô hình há»c\n táºp từ trá»±c tiếp tại trung tâm (offline) sang mô hình há»c trá»±c\n tuyến qua mạng (online), CodeZuni sẽ thông báo cho Há»c viên vá»\n việc chuyển đổi nà y và sẽ sắp xếp các lá»›p há»c hiện tại được\n diá»…n ra tiếp tục dÆ°á»›i hình thức online. Trong trÆ°á»ng hợp Há»c\n viên vắng mặt ở các buổi há»c online, thì há»c phà trong giai\n Ä‘oạn há»c online nà y vẫn được ghi nháºn và sẽ không được hoà n\n lại dù bất kỳ lý do gì.\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Quy định vượt lá»›p:</h3>\n <ol id=\"sub-3\">\n <li>\n Có được nháºn xét tốt và được Ä‘á» nghị từ giảng viên đứng lá»›p\n </li>\n <li>\n Há»c viên phải hoà n thà nh bà i thi vượt lá»›p đạt tiêu chuẩn Ä‘á» ra\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Thái Ä‘á»™ há»c táºp của Há»c viên: </h3>\n <ol id=\"sub-4\">\n <li>Äi há»c chuyên cần, đúng giá» quy định.</li>\n <li>\n Không sá» dụng Ä‘iện thoại trong giá» há»c trừ khi được giảng viên\n đứng lá»›p cho phép.\n </li>\n <li>\n Phải hoà n thà nh bà i táºp vá» nhà do giảng viên đứng lá»›p giao\n trÆ°á»›c khi đến lá»›p.\n </li>\n <li>\n Nghiêm cấm hà nh vi thiếu tôn trá»ng, gây thÆ°Æ¡ng tÃch đối vá»›i\n giáo viên, nhân viên CodeZuni và các Há»c viên khác. Há»c viên sẽ\n không được tiếp tục theo há»c và KHÔNG được hoà n lại phà nếu vi\n phạm Ä‘iá»u nà y.\n </li>\n <li>\n Phải chịu trách nhiệm đối vá»›i những hà nh vi phá hoại tà i sản\n chung của tòa nhà hoặc là m ảnh hưởng đến cÆ¡ sở váºt chất, môi\n trÆ°á»ng giảng dạy và há»c táºp của CodeZuni.\n </li>\n <li>\n CodeZuni không chịu trách nhiệm quản lý Há»c viên ngoà i giá» há»c\n chÃnh thức và các Há»c viên tá»± ý Ä‘i ra ngoà i khuôn viên CodeZuni\n mà không có sá»± cho phép của CodeZuni.\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\">Tham dá»± lá»›p:</h3>\n <p>\n Nếu Há»c viên xin phép nghỉ phải có sá»± đồng ý của phụ huynh. Phụ\n huynh phải gá»i Ä‘iện đến xin phép trÆ°á»›c khi buổi há»c bắt đầu. Nếu\n Há»c viên nghỉ há»c mà không thông báo cho CodeZuni thì Há»c viên được\n xem là nghỉ không phép.\n </p>\n </li>\n <li>\n <h3 className=\"underline\"> Bà i kiểm tra và bà i thi :</h3>\n <ol id=\"sub-6\">\n <li>\n Há»c viên bắt buá»™c phải hoà n thà nh các bà i thi, bà i táºp, dá»± án\n (đã được thông báo trong ngà y đầu tiên của khóa há»c) để đánh\n giá chất lượng há»c táºp của Há»c viên.\n </li>\n <li>\n Nếu Há»c viên không thể tham dá»± ngà y thi giữa khóa hoặc cuối\n khóa, Há»c viên phải thông báo trÆ°á»›c 1 tuần vá»›i Bá»™ Pháºn Há»c Vụ\n để sắp xếp ngà y thi lại thÃch hợp nhất và phải có lý do chÃnh\n đáng (tham dá»± các kỳ thi há»c kỳ/thi chứng chỉ, tham gia lá»›p\n há»c khác tại CodeZuni, Há»c viên Ä‘i du há»c hoặc bị bệnh/tai nạn/sá»±\n cố trong ngà y thi).\n </li>\n <li>\n Nếu Há»c viên vắng thi mà không báo trÆ°á»›c vá»›i Bá»™ Pháºn Há»c Vụ\n hoặc vắng thi ngoà i những lý do nêu trên thì Há»c viên phải\n đóng lệ phà thi bổ sung (200.000 VNÄ/bà i thi).\n </li>\n <li>\n Há»c viên phải trung thá»±c trong các kỳ thi. Nếu phát hiện gian\n láºn, kết quả Há»c viên sẽ bị hủy và Há»c viên phải là m lại bà i\n thi khác\n </li>\n </ol>\n </li>\n <li>\n <h3 className=\"underline\"> Sá» dụng hình ảnh truyá»n thông :</h3>\n <p>\n Trong quá trình há»c táºp và tham gia các hoạt Ä‘á»™ng ngoại khóa, sá»±\n kiện tại CodeZuni, hình ảnh của phụ huynh và há»c viên có thể được\n sá» dụng vá»›i mục Ä‘Ãch truyá»n thông cho CodeZuni, cụ thể vá» ná»™i dung\n hình ảnh sẽ được đăng tải trên các kênh truyá»n thông, mạng xã\n há»™i nhÆ°: há»c viên Ä‘ang há»c táºp, tham gia các sá»± kiện do CodeZuni tổ\n chức, tÆ°Æ¡ng tác, vui chÆ¡i vá»›i giáo viên, bạn bè và phụ huynh.\n Trong trÆ°á»ng hợp phụ huynh và há»c viên không đồng ý vá»›i Ä‘iá»u\n khoản trên, Phụ huynh và há»c viên báo vá»›i quản lý trung tâm để\n gạch bá» và ký tên xác nháºn vô hiệu hóa Ä‘iá»u khoản nà y.\n </p>\n </li>\n {/* upate thêm li */}\n <li>\n <h3 className=\"underline\"> Việc bảo máºt thông tin :</h3>\n <ol id=\"sub-8\">\n <li>\n Bạn có trách nhiệm tá»± mình bảo quản Tà i Khoản, nếu Tà i Khoản\n bị lá»™ ra ngoà i dÆ°á»›i bất kỳ hình thức nà o, CodeZuni sẽ không chịu\n trách nhiệm vá» má»i tổn thất phát sinh. Bạn không được download\n video, không được chia sẻ video, tà i liệu, mã nguồn, tà i\n nguyên mà CodeZuni cung cấp cho bạn lên Internet vá»›i bất kỳ hình\n thức nà o. Nếu vi phạm, tà i khoản của bạn sẽ bị dừng hoạt Ä‘á»™ng\n và phải chịu trách nhiệm trÆ°á»›c pháp luáºt vá» hà nh vi xâm phạm\n sở hữu trà tuệ.{\" \"}\n </li>\n <li>\n CodeZuni có thể gá»i thông báo tình hình há»c táºp, chÆ°Æ¡ng trình\n khuyến mãi (nếu có), thông báo khóa há»c má»›i sắp ra mắt để há»c\n viên quan tâm có thể đăng ký ngay để được Æ°u đãi.\n </li>\n <li>\n Há»c viên có trách nhiệm bảo máºt tà i khoản, toà n bá»™ video, tà i\n liệu mà trung tâm đã cung cấp. Há»c viên không được cung cấp\n cho bất kì bên thứ 3 nà o mà chÆ°a được sá»± đồng ý của CodeZuni. Nếu\n cố tình vi phạm bạn sẽ bị xá» phạt 200,000,000 VND (hai trăm\n triệu Việt Nam Äồng) và CodeZuni sẽ toà n quyá»n xá» lý các vi phạm.\n Tà i khoản đăng nháºp hệ thống là tà i khoản facebook chÃnh chủ,\n chỉ xét duyệt và chấp nháºn 1 lần duy nhất lúc đăng kÃ. Bất kì\n lý do nà o liên quan đến việc thay đổi tà i khoản đăng nháºp sau\n nà y Ä‘á»u KHÔNG được há»— trợ.\n </li>\n\n <li>\n Há»c viên không được dùng các thiết bị ghi âm, ghi hình lại\n buổi há»c trên lá»›p. Nếu cần tà i liệu, chú thÃch, há»— trợ thì có\n thể tá»± viết lại hoặc nhá» giảng viên hoặc mentor tổng hợp lại\n và cung cấp sau má»—i buổi há»c. Nếu CodeZuni phát hiện trÆ°á»ng hợp\n há»c viên cố tình ghi âm, ghi hình lại buổi há»c thì CodeZuni sẽ\n toà n quyá»n xá» lý.\n </li>\n </ol>\n </li>\n </ol>\n </div>\n </Modal>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react'\nimport { Form, Input, Button, Checkbox, Select, Radio } from \"antd\";\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectThongTinMoRong } from '../../redux/reducer/authReducer';\nimport localStorageServ from '../../services/locaStorage.service';\nimport { getChuyenDeApi } from '../../redux/reducer/chuyenDeReducer-Chat';\nimport { history } from '../../App';\nimport { packageService } from '../../services/packageService';\nimport toast from 'react-hot-toast';\nimport axios from 'axios';\nimport moment from 'moment';\nimport DieuKhoanThanhToan from './ViewPackage/DieuKhoanThanhToan';\nimport useWindowSize from '../../hook/useWindowSize';\nconst { Option } = Select;\n\nconst ConfirmPayment = () => {\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow<768?true:false\n const [isShowDieuKhoan, setIsShowDieuKhoan] = useState(false);\n const handleCloseModal = () => {\n setIsShowDieuKhoan(false);\n };\n const handleOpenModal = () => {\n setIsShowDieuKhoan(true);\n };\n let { arrChuyenDe } = useSelector((state) => state.chuyenDe);\n\n let dispatch = useDispatch();\n const regisPackage = localStorageServ.regisPackage.get();\n const inforSignUp = localStorageServ.inforSignUp.get();\n const userInfo = localStorageServ.userInfo.get();\n const [ipAddress, setIpAddress] = useState(null);\n const currentDate = new Date();\n const futureDate = new Date(currentDate);\n futureDate.setMonth(futureDate.getMonth() + 2);\n const thisDate = currentDate.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' });\n const nextDate = futureDate.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' });\n useEffect(() => {\n // Gá»i yêu cầu HTTP GET đến https://jsonip.com để lấy địa chỉ IP\n axios.get('https://jsonip.com')\n .then(response => {\n // Lấy địa chỉ IP từ dữ liệu phản hồi\n const ip_address = response.data.ip;\n setIpAddress(ip_address);\n })\n .catch(error => {\n console.error('Äã xảy ra lá»—i:', error);\n });\n }, []);\n const handleRedirect = () => {\n\n const currentURL = window.location.origin;\n const obj = {\n \"hocPhi\": regisPackage.hocPhi * 100,\n \"urlAgain\": currentURL,\n \"email\": inforSignUp ? inforSignUp.email : userInfo.email,\n \"phone\": inforSignUp ? inforSignUp.soDt : userInfo.dienThoai,\n \"id\": inforSignUp ? inforSignUp.id : userInfo.id,\n \"orderInfor\": `${inforSignUp ? inforSignUp.soDt : userInfo.dienThoai}_${regisPackage.id}`,\n \"ticketNo\": ipAddress\n }\n console.log(obj)\n if (check) {\n packageService.sendRedirectONEPAY(obj)\n .then((res) => {\n window.location.href = res.data.content\n })\n .catch((err) => {\n toast.error(\"Có lá»—i xảy ra vui lòng thá» lại\")\n history.push(\"/\")\n })\n } else {\n toast.error(\"Vui lòng chá»n 'Tôi đã Ä‘á»c và Äồng ý vá»›i Äiá»u khoản thanh toán'\")\n }\n }\n const [check, setCheck] = useState(false)\n const changeCheck = (e) => {\n setCheck(e.target.checked)\n }\n useEffect(() => {\n\n dispatch(getChuyenDeApi())\n }, []);\n return (\n <div className='w-full min-h-screen overflow-y-auto bg-cover flex-col bg-fixed p-3 sm:p-1 md:p-7 lg:p-10 flex '>\n <div className=\" h-full w-full flex-grow flex flex-col relative overflow-y-auto overflow-x-hidden 2xl:container mx-auto\">\n <div className=\"w-full flex-grow flex flex-col card-theme\">\n <div className=\"lg:w-full w-2/3 mx-auto\">\n <div className=\"w-full p-3 flex flex-col items-center space-y-5 text-white\" >\n <p className=\"uppercase text-lg lg:text-xl \">XÃC NHẬN THÔNG TIN THANH TOÃN</p>\n <div className=\"text-content text-base md:text-lg\">\n <p>* LÆ°u ý:</p>\n <p>\n - Vui lòng Ä‘á»c{\" \"}\n kiểm tra lại thông tin thanh toán, bao gồm há»c phÃ, thá»i hạn há»c táºp và các thông tin bên dÆ°á»›i\n </p>\n\n </div>\n\n <div className=\"w-full flex justify-center flex-col items-center h-full\">\n <div className=\"p-2 w-full\">\n {/* <h2 className=\"uppercase text-center tenChuyenDe\">{regisPackage.tenGoi}</h2>\n <p className='font-bold text-light text-2xl pt-2'>Danh sách khóa há»c:</p>\n {JSON.parse(regisPackage.danhSachKhoaHoc).map((item, idx) => {\n const cdName = arrChuyenDe?.find(a => a.id === item)?.tenChuyenDe || ''\n return <p key={idx} className='text-xl uppercase'><span className=\"fa fa-dot mr-2 py-1\" />- {cdName}</p>\n })}\n\n\n <p className=\"font-bold text-2xl pt-2\">Há»c phÃ: <i>{regisPackage.hocPhi.toLocaleString()} VNÄ</i></p> */}\n <table width=\"100%\" border={0} cellSpacing={0} cellPadding={0}>\n <tbody>\n <tr>\n <td align=\"center\" style={{ minWidth: '100%', backgroundColor: 'transparent' }}>\n <table width={isPhone?'100%':'60%'} border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr>\n <td align=\"center\" style={{ paddingBottom: 0 }}>\n <table align=\"center\" width={'100%'} border={0} cellSpacing={0} cellPadding={0}>\n <tbody>\n <tr>\n <td align=\"center\" style={{ paddingTop: 10, paddingBottom: 15 }}>\n <table width=\"95%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr />\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ backgroundColor: 'white' }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr>\n <td style={{ borderTop: '3px solid rgb(255, 210, 32)', borderRadius: '4px 4px 0 0' }} />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ paddingTop: 25, paddingBottom: 25, backgroundColor: 'white' }}>\n <a href=\"https://login.codezuni.com/\" target=\"_blank\"><img src=\"https://apimentor11.cybersoft.edu.vn//images/15-05-2024-03-01-32-codezuni.png\" width=\"100%\" alt=\"Logo Codezuni\" style={{ display: 'block', border: 0, fontSize: 20, fontWeight: 'bold', color: '#222222' }} className=\"CToWUd\" data-bit=\"iit\" /></a>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ backgroundColor: 'white' }}>\n <table width=\"90%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr>\n <td align=\"left\" style={{ paddingTop: 25, paddingBottom: 25, backgroundColor: 'white' }}>\n <p style={{ margin: 0, color: '#303233', fontSize: 12 }}>\n Xin chà o\n <span style={{ color: '#303233', fontSize: 12, fontWeight: 'bold' }}> {inforSignUp ? inforSignUp.hoTen : userInfo.hoTen}</span>\n </p>\n <p style={{ margin: '0 0 0 0', color: '#303233', fontSize: 12 }}>\n <br />\n <br />Vui lòng Ä‘á»c kỹ và xác nháºn các thông tin dÆ°á»›i đây:\n </p>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ backgroundColor: 'white' }}>\n <table width=\"90%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0} style={{ marginBottom: 12 }}>\n <tbody>\n <tr>\n <td align=\"left\" style={{ paddingTop: 16, paddingBottom: 0, backgroundColor: 'white', border: '1px solid #e8e8e8', borderRadius: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"left\">\n <td style={{ color: '#303233', fontSize: 16, paddingLeft: 12, paddingBottom: 16 }}>\n <strong>Thông tin sản phẩm</strong>\n </td>\n </tr>\n <tr>\n <td style={{ paddingBottom: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td style={{ padding: '0px 0px 1px 0px' }} bgcolor=\"#e8e8e8\" width=\"100%\" />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingBottom: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td align=\"left\" style={{ color: '#727272', fontSize: 14, paddingLeft: 12 }}>\n Gói bạn đã chá»n\n </td>\n <td align=\"right\" style={{ color: '#303233', fontSize: 14, fontWeight: 'bold', textAlign: 'right', paddingRight: 12 }}>\n {regisPackage?.tenGoi}\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingRight: 12, paddingLeft: 12, paddingBottom: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td style={{ padding: '0px 0px 1px 0px' }} bgcolor=\"#e8e8e8\" width=\"100%\" />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingBottom: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td align=\"left\" style={{ color: '#727272', fontSize: 14, paddingLeft: 12 }}>\n Khóa há»c đã chá»n\n </td>\n <td align=\"right\" style={{ color: '#303233', fontSize: 14, fontWeight: 'bold', textAlign: 'right', paddingRight: 12 }}>\n {JSON.parse(regisPackage?.danhSachKhoaHoc).map((item, idx) => {\n const cdName = arrChuyenDe?.find(a => a.id === item)?.tenChuyenDe || ''\n return <p key={idx} classname=\"text-xl uppercase\"><span classname=\"fa fa-dot mr-2 py-1\">{cdName}</span></p>\n })}\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingRight: 12, paddingLeft: 12, paddingBottom: 12 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td style={{ padding: '0px 0px 1px 0px' }} bgcolor=\"#e8e8e8\" width=\"100%\" />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingBottom: 24 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td align=\"left\" style={{ color: '#727272', fontSize: 14, paddingLeft: 12 }}>\n Số tiá»n thanh toán\n </td>\n <td align=\"right\" style={{ color: '#303233', fontSize: 14, fontWeight: 'bold', textAlign: 'right', paddingRight: 12 }}>\n {regisPackage.hocPhi.toLocaleString()} VNÄ\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td style={{ paddingRight: 12, paddingLeft: 12, paddingBottom: 16 }}>\n <table width=\"100%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr align=\"center\">\n <td style={{ padding: '0px 0px 1px 0px' }} bgcolor=\"#e8e8e8\" width=\"100%\" />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ backgroundColor: 'white' }}>\n <table width=\"90%\" border={0} align=\"center\" cellPadding={0} cellSpacing={0}>\n <tbody>\n <tr>\n <td align=\"left\" style={{ paddingTop: 25, paddingBottom: 25, backgroundColor: 'white' }}>\n <p style={{ margin: 0, color: '#303233', fontSize: 12 }}>\n Sau khi bạn tiến hà nh thanh toán thà nh công, trung tâm sẽ nháºn được há»c phà và tá»± Ä‘á»™ng kÃch hoạt tà i khoản há»c táºp của bạn.\n </p>\n <p style={{ margin: '0 0 0 0', color: '#303233', fontSize: 12 }}>\n <br />\n Bạn sẽ há»c theo lá»™ trình và thá»i gian đã đăng ký từ ngà y\n <span style={{ fontWeight: 'bold', fontSize: 12 }}>\n {\" \"}{thisDate}{\" \"}\n </span>\n đến ngà y \n <span style={{ fontWeight: 'bold', fontSize: 12 }}>\n {\" \"}{nextDate}{\" \"}\n </span>. Trung tâm KHÔNG há»— trợ bảo lÆ°u, hủy hoặc chuyển khóa há»c khác.\n </p>\n </td>\n </tr>\n <tr>\n <td align=\"left\" style={{ paddingTop: 10, paddingBottom: 10, backgroundColor: 'white' }}>\n <p style={{ margin: 0, color: '#303233', fontSize: 12 }}>\n Trung tâm sẽ gá»i email xác nháºn khi bạn thanh toán thà nh công.\n <br />\n <br />\n Xin cảm Æ¡n bạn!\n <br />\n <br />\n Trân trá»ng,<br />\n [Chữ ký của bạn] <br />\n Codezuni\n </p>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td align=\"center\" style={{ backgroundColor: 'white' }}>\n <table width=\"100%\" border={0} align=\"left\" cellPadding={0} cellSpacing={0} style={{ marginBottom: 12 }}>\n <tbody>\n <tr align=\"center\">\n <td style={{ padding: '0px 0px 8px 0px' }} bgcolor=\"#f9f9f9\" width=\"100%\" />\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n\n <Checkbox className=\"text-white pt-3\" onChange={changeCheck}>\n Tôi đồng ý vá»›i các{\" \"}\n <span\n onClick={() => {\n handleOpenModal();\n }}\n className=\"text-yellow-400 underline cursor-pointer\"\n >\n ÄIỀU KHOẢN\n </span>{\" \"}\n thanh toán của CodeZuni\n </Checkbox>\n <p className='cursor-pointer underline mr-4 pt-1' onClick={() => {\n history.back()\n }}><i className=\"fa-duotone fa-backward\"></i> {`Quay vá» trang trÆ°á»›c`}</p>\n </div>\n <div >\n <button\n onClick={handleRedirect}\n className=\"px-5 mt-4 ml-2 btn_theme_red\"\n title='Tiếp tục đến vá»›i trang thanh toán online'\n >\n Thanh toán online\n </button>\n <button\n onClick={() => {\n const arrKH = JSON.parse(regisPackage?.danhSachKhoaHoc).map((item, idx) => {\n const cdName = arrChuyenDe?.find(a => a.id === item)?.tenChuyenDe || ''\n return { cdName }\n })\n const obj = {\n hoTen: inforSignUp ? inforSignUp.hoTen : userInfo.hoTen,\n tenCombo: regisPackage.tenGoi,\n khoaHoc: arrKH.map((a, i) => a.cdName).join(\", \"),\n soTien: regisPackage.hocPhi,\n ngayBd: currentDate,\n ngayKt: futureDate,\n email: inforSignUp ? inforSignUp.email : userInfo.email\n }\n const obj2 = {\n \"id\": 0,\n \"hoTen\": inforSignUp ? inforSignUp.hoTen : userInfo.hoTen,\n \"email\": inforSignUp ? inforSignUp.email : userInfo.email,\n \"soDT\": inforSignUp ? inforSignUp.soDt : userInfo.dienThoai,\n \"diaDiem\": regisPackage.tenGoi,\n \"loaiForm\": \"codezuni\"\n }\n\n if (check) {\n toast.success(\"Vui lòng chá»n kiểm tra email để xác nháºn lại thông tin!\")\n packageService.sendMail(obj)\n axios.post('https://apicrm.cybersoft.edu.vn/api/leadform', obj2, {\n headers: {\n 'Authorization': 'Bearer eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyZWQiOiI0LzE1LzIwNDcgNDowMjowOCBQTSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiIxZDcxYmZlMi1jOWQ0LTQxMTEtYjZmMy1mOTJlZGVmZDgxYjIiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJwaHVvbmdhMHBuQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6WyJRTF9CTSIsIkNIRUNLX01FTlRPUl9MT1AiLCJSX0xPUCIsIlFMX0dDIiwiUUxfQ0hUTCIsIlFMX1JNIiwiUUxfVEtEIiwiUUxfTENOIiwiRF9CVCIsIkZfR0MiLCJSX1ZMIiwiUl9CSCIsIkZfTE9QIiwiQU5ZIiwiRF9ORCIsIlVfTkQiLCJDX05EIiwiUl9ORCIsIkRfS0giLCJVX0tIIiwiQ19LSCIsIlJfS0giLCJHRF9MSCIsIlhfS0hfTCIsIkRfREFOSCIsIlFMX0NMIiwiUUxfQkwiLCJRTF9MVCIsIlFMX0tIIiwiQ19MT1AiLCJVX0xPUCIsIktfQ0hFQ0tfTCIsIlFMX0NDTiIsIlFMX0tLSFYiLCJVX05HQVlfQkgiLCJVX0hBTl9CVCIsIlFMX0hNVCIsIkRLX01UIiwiWF9MRk9STSJdLCJuYmYiOjE3MTMxNzE3MjgsImV4cCI6MTcxMzE3NTMyOH0.84tVM6RM1yIamp-ma1BpiTAysbj1YY99l4TEkyHcMSw',\n }\n })\n setTimeout(function () {\n history.push('/');\n }, 3000);\n } else {\n toast.error(\"Vui lòng chá»n 'Tôi đã Ä‘á»c và Äồng ý vá»›i Äiá»u khoản thanh toán'\")\n }\n }}\n className=\"px-5 mt-4 btn_theme_red ml-1\"\n >\n Thanh toán tại văn phòng\n </button>\n </div>\n <div></div>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n <DieuKhoanThanhToan isShowDieuKhoan={isShowDieuKhoan} handleCloseModal={handleCloseModal} />\n </div>\n )\n}\n\nexport default ConfirmPayment","import React, { useEffect, useState } from \"react\";\nimport ItemRanking from \"./ItemRanking\";\nimport ItemTop from \"./ItemTop\";\nimport ContentTab from \"../ContentTab/ContentTab\";\nimport { useParams } from \"react-router-dom\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport { useTranslation } from \"react-i18next\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nexport default function BangXeHangThanhTichFree({ heightList = 350, btnFilter, isGetAll = true }) {\n let params = useParams();\n const [listUser, setListUser] = useState([]);\n const [activeIndex, setActiveIndex] = useState(1);\n let userId = localStorageServ.userInfo.get()?.id;\n let handleGetXepHang = (option = 1) => {\n let api = isGetAll ? servCodingCamp.getXepHangTong : servCodingCamp.getXepHangTheoChuyenDeFree;\n api(userId,params.chuyenDeId, option)\n .then((res) => {\n setListUser(res.data.content);\n })\n .catch((err) => {\n console.log(err);\n });\n };\n\n let renderOptionButton = () => {\n return btnFilter.map(({ title, key }, index) => {\n return {\n label: (\n <button\n onClick={() => {\n handleGetXepHang(key);\n }}\n className=\" rounded-full text-content font-medium\"\n >\n {title}\n </button>\n ),\n key: index,\n children: \"\",\n };\n });\n };\n\n let renderTopThree = () => {\n return [\n <ItemTop size={0.8} user={listUser[1]} rank={1} />,\n <ItemTop size={1} user={listUser[0]} rank={0} />,\n <ItemTop size={0.8} user={listUser[2]} rank={2} />,\n ];\n };\n useEffect(() => {\n handleGetXepHang();\n }, [params.chuyenDeId]);\n const { t } = useTranslation()\n\n return (\n <div className=\" h-full flex flex-col\">\n <div className=\"c-card-content pt-0 text-title flex items-center \">\n <p className=\"text-title\">\n <i className=\"fa fa-chart-bar text-white text-2xl mr-2 capitalize\"></i>\n <span> {t('trangChu.bangXepHangThanhTich')}</span>\n </p>\n </div>\n\n <div style={{ maxWidth: 300 }} className=\"flex mb-2 mx-auto flex-shrink0 space-x-3\">\n {renderTopThree()}\n </div>\n <div className=\" \">\n <ContentTab\n paddingHeaderX={15}\n paddingHeaderY={3}\n paddingTabItemX={15}\n paddingTabItemY={5}\n data={renderOptionButton()}\n />\n <div\n style={{ height: heightList }}\n className=\" list_ranking space-y-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-rounded-xl scrollbar-track-rounded-xl scrollbar-thumb-gray-400 scrollbar-track-gray-300 \"\n >\n {listUser.map((item, index) => {\n return (\n <ItemRanking\n activeIndex={activeIndex}\n setActiveIndex={setActiveIndex}\n data={item}\n index={index}\n key={index}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport ItemBanner from \"./ItemBanner\";\nimport { getThongKetChiTietChuyenDe } from \"./utils\";\nimport ItemNoiDungChuyenDe from \"./ItemNoiDungChuyenDe\";\nimport ThongKeTienDo from \"./ThongKeTienDo\";\nimport BangXeHangThanhTich from \"../../../components/BangXeHangThanhTich/BangXeHangThanhTich\";\nimport ModalWrapper from \"../../../components/ModalWrapper/ModalWrapper\";\nimport { CHUYEN_DE_INTERN } from \"../utils/utils\";\nimport \"./style.scss\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport SpinnerComponent from \"../../../components/Spinner\";\nimport BangXeHangThanhTichFree from \"../../../components/BangXeHangThanhTich/BangXeHangThanhTichFree\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\n\nexport default function BannerTaskFree({ dataTask }) {\n let { arrayItemNoiDungChuyenDe, phanThuong } =\n getThongKetChiTietChuyenDe(dataTask);\n let contentNoiDung = (\n <div className=\" grid grid-cols-2 gap-y-1\">\n {arrayItemNoiDungChuyenDe\n ?.filter(({ total: tongNoiDung }) => tongNoiDung > 0)\n .map((item, index) => {\n return <ItemNoiDungChuyenDe key={index} item={item} />;\n })}\n </div>\n );\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 769? true : false\n let contentPhanThuong = (\n <div className={`space-y-${isPhone?'3':'5'} w-full h-full`} >\n <p className={`${isPhone?'text-2xl':''} tenChuyenDe text-center`}>{phanThuong?.tongCoin} COIN</p>\n <p className={`${isPhone?'text-2xl':''} tenChuyenDe text-center`}>{phanThuong?.tongExp} XP</p>\n </div>\n );\n const { t } = useTranslation();\n\n return (\n <div style={{ height: 'auto' }} className=\"flex justify-between \">\n <div className={`${isPhone?'c-col-full':'c-col-60'} card-theme space-y-2 relative`}>\n <h2 className=\"tenChuyenDe \">{dataTask?.tenChuyenDe}</h2>\n <p className=\"text-center text-title\">\n <Trans i18nKey=\"loTrinh.tienDo\" />{\" \"}\n {dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN ? (\n <Trans i18nKey=\"loTrinh.congVien\" />\n ) : (\n <Trans i18nKey=\"loTrinh.khoaHoc\" />\n )}\n </p>\n {/* <ProgressLine percent={40} type=\"blue\" /> */}\n <div className={`flex ${isPhone?'space-x-1':'space-x-10'} text-center `}>\n <ItemBanner\n width={isPhone?'70%':'70%'}\n title={t(\"trangChu.noiDungModule\")}\n content={contentNoiDung}\n />\n\n <ItemBanner\n width={isPhone?'30%':'30%'}\n title={t(\"loTrinh.phanThuong\")}\n content={\n <ModalWrapper\n content={<div>{t(\"loTrinh.moTaPhanThuong\")}</div>}\n icon={<div className=\"space-y-1\">{contentPhanThuong}</div>}\n />\n }\n />\n </div>\n {/* <ThongKeTienDo isChuyenDeIntern={dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN} /> */}\n {/* <div className=\"text-white c-card-content gioiThieuTask\"></div> */}\n </div>\n\n {isPhone? (\n \"\"\n ) : (\n <div className=\"c-col-38 card-theme h-full relative\">\n <BangXeHangThanhTichFree\n btnFilter={[\n {\n title: t(\"trangChu.tichCuc\"),\n key: 1,\n },\n {\n title:\n dataTask?.loaiChuyenDe == CHUYEN_DE_INTERN\n ? t(\"loTrinh.thanhTichCao\")\n : t(\"trangChu.hocGioi\"),\n key: 2,\n },\n ]}\n heightList={150}\n isGetAll={false}\n />\n </div>\n )}\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport CollapseTask from \"./CollapseTask/CollapseTask\";\nimport BannerTask from \"./Banner/BannerTask\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getDataTaskPageAction,\n getDataTaskPageFreeAction,\n getDataTaskPageTrialAction,\n} from \"../../redux/reducer/taskPageSlice\";\nimport SpinnerComponent from \"../../components/Spinner\";\nimport { checkDemoUser, checkLearning } from \"../../utils/HocDemoUtils\";\nimport * as signalR from \"@microsoft/signalr\";\nimport { BASE_URL_CODINGCAMP } from \"../../services/axios.service\";\nimport { selectThongTinMoRong } from \"../../redux/reducer/authReducer\";\nimport axios from \"axios\";\nimport BannerTaskFree from \"./Banner/BannerTaskFree\";\nimport {\n getChuyenDeApi,\n getLstByTag,\n getLstByTagApi,\n} from \"../../redux/reducer/chuyenDeReducer-Chat\";\nimport {\n useLstLoTrinhDangHoc,\n useLstLoTrinhUser,\n} from \"../../hook/useLstLoTrinhUser\";\nimport { history } from \"../../App\";\nimport { t } from \"i18next\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport useWindowSize from \"../../hook/useWindowSize\";\nimport { useLstImgTag } from \"../../hook/useLstImgTag\";\nimport { API_URL_DOMAIN } from \"../../utils/urlDomain\";\nexport default function TaskPageFree() {\n const [arrChuyenDe, setArrChuyenDe] = useState();\n const [arrCyber, setArrCyber] = useState([]);\n const [showAll, setShowAll] = useState(false);\n const [isCollapse, setIsCollapse] = useState(true);\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 798 ? true : false;\n const userInfo = localStorageServ.userInfo.get();\n let { dataTaskPage, loading } = useSelector((state) => state.taskPageSlice);\n let { lstCDByTag } = useSelector((state) => state.chuyenDe);\n let { chuyenDeId } = useParams();\n const { data, isLoading, error } = useLstLoTrinhUser(userInfo);\n const { data: dataDangHoc } = useLstLoTrinhDangHoc(userInfo?.id);\n const { data: listImgTag } = useLstImgTag();\n let dispatch = useDispatch();\n const isLearning = checkLearning(chuyenDeId, dataDangHoc);\n\n const handleShowMore = () => {\n setShowAll(!showAll);\n};\n const displayedItems = showAll ? arrCyber : arrCyber.slice(0, 3);\n const fetchData = () => {\n if (dataDangHoc) {\n if (!isLearning || !userInfo?.kichHoat) {\n dispatch(getDataTaskPageFreeAction(chuyenDeId));\n } else if (userInfo?.email != \"freeacc@gmail.com\") {\n dispatch(getDataTaskPageAction(chuyenDeId));\n }\n }\n };\n useEffect(() => {\n fetchData();\n return () => {\n dispatch(getDataTaskPageFreeAction.fulfilled({}));\n dispatch(getLstByTag([]));\n };\n }, [chuyenDeId, dataDangHoc]);\n useEffect(() => {\n axios\n .get(`${API_URL_DOMAIN}/chuyende`)\n .then((res) => {\n setArrChuyenDe(res.data.content);\n })\n .catch((err) => {});\n }, [chuyenDeId]);\n useEffect(() => {\n if (dataTaskPage?.id == chuyenDeId) {\n dispatch(getLstByTagApi(JSON.stringify(dataTaskPage?.danhSachTag)));\n }\n if (dataTaskPage) {\n localStorageServ.khoahoc.set(dataTaskPage.tenChuyenDe);\n }\n }, [dataTaskPage]);\n useEffect(() => {\n axios.get(`https://apicrm.cybersoft.edu.vn/api/gioithieu`).then((res) => {\n setArrCyber(res.data.content);\n });\n dispatch(getChuyenDeApi());\n const connection = new signalR.HubConnectionBuilder()\n .withUrl(`${BASE_URL_CODINGCAMP}/chat`)\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n connection\n .start()\n .then(() => {})\n .catch((err) => {});\n\n connection.on(\"updateDemoBH\", (message) => {\n fetchData();\n });\n\n // Cleanup function\n return () => {\n connection.off(\"updateDemoBH\");\n connection.stop();\n };\n }, []);\n return (\n <div className=\"w-full h-full \">\n <div className=\"c-col-full\">\n <p\n className=\"cursor-pointer underline mb-2 pt-5\"\n onClick={() => {\n history.back();\n }}\n >\n <i className=\"fa-duotone fa-backward\"></i>\n {` `} {t(\"chiTietNhiemVu.quayLai\")}\n </p>\n {dataTaskPage != {} && <BannerTaskFree dataTask={dataTaskPage} />}\n </div>\n <div className=\"flex relative\">\n <div\n className={`${\n isPhone ? \"c-col-full\" : isCollapse ? \"c-col-66\" : \"c-col-95\"\n } space-y-5`}\n >\n {loading && (\n <div className=\"flex justify-center\">\n {\" \"}\n <div className=\" loading_progress\"></div>\n </div>\n )}\n {dataTaskPage?.danhSachMonHoc?.map((item, index) => {\n return (\n <CollapseTask\n dataContent={item}\n key={index}\n index={index}\n arrChuyenDe={arrChuyenDe}\n />\n );\n })}\n </div>\n {isPhone ? (\n \"\"\n ) : isCollapse ? (\n <div className=\"c-col-34\">\n <div className=\"c-col-full card-theme\">\n <p className=\"font-bold text-title text-left\">\n <i className=\"fa-regular fa-sidebar-flip pr-2 cursor-pointer\" onClick={() => {\n setIsCollapse(false);\n }}></i>\n Khoá há»c kiến táºp sá»± nghiệp tại CyberSoft\n </p>\n <div className=\"py-5\">\n {displayedItems?.map((item, idx) => {\n if (item.metaData == \"Cybersoft\") {\n return (\n <div\n key={idx}\n className=\"flex items-center py-3 cursor-pointer\"\n onClick={() => {\n // history.push(`/task-page-free/${item.id}`)\n window.open(item.linkMoTa, \"_blank\");\n }}\n >\n <img\n className=\"object-cover rounded-lg w-48 md:rounded-none md:rounded-s-lg\"\n src={`${item.hinhAnh}`}\n alt={item.tenSanPham}\n />\n <div className=\"flex flex-col justify-between p-2 leading-normal\">\n <p className=\"mb-2 text-base font-bold tracking-tight text-white\">\n {item.tenSanPham}\n </p>\n {/* <p className=\"mb-3 font-normal text-gray-700 dark:text-gray-400\">Here are the biggest enterprise technology acquisitions of 2021 so far, in reverse chronological order.</p> */}\n </div>\n </div>\n );\n }\n })}\n {arrCyber.length > 3 && (\n <div className=\"text-center\">\n <button className=\"text-white hover:underline\" onClick={handleShowMore}>\n {showAll ? 'Thu gá»n' : 'Xem thêm'}\n </button>\n </div>\n )}\n </div>\n <p className=\"font-bold text-title text-left pt-4\">\n <i\n className=\"fa-regular fa-sidebar-flip pr-2 cursor-pointer\"\n onClick={() => {\n setIsCollapse(false);\n }}\n ></i>\n Khoá há»c cao cấp liên quan\n </p>\n <div className=\"py-5\">\n {lstCDByTag\n ?.filter((item) => {\n let checkLearn = checkLearning(item.id, dataDangHoc);\n return !checkLearn && item.id != chuyenDeId;\n })\n .slice(0, 3)\n .map((item, idx) => {\n let arrTag = JSON.parse(item.danhSachTag);\n\n return (\n <div\n key={idx}\n className=\"flex items-center py-3 cursor-pointer\"\n onClick={() => {\n history.push(`/task-page-free/${item.id}`);\n }}\n >\n <img\n className=\"object-cover rounded-lg w-48 md:rounded-none md:rounded-s-lg\"\n src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`}\n alt={item.tenChuyenDe}\n />\n <div className=\"flex flex-col justify-between p-2 leading-normal\">\n <p className=\"mb-2 text-base font-bold tracking-tight text-white\">\n {item.tenChuyenDe}\n </p>\n {/* <p className=\"mb-3 font-normal text-gray-700 dark:text-gray-400\">Here are the biggest enterprise technology acquisitions of 2021 so far, in reverse chronological order.</p> */}\n <div className=\"flex flex-wrap mb-2\">\n {arrTag.map((tag) => {\n let item1 = listImgTag?.find((item1) => {\n return item1?.value == tag;\n });\n return (\n <div key={tag.value} className={\"w-6 h-6 p-1\"}>\n <img\n className=\"w-full h-full object-cover rounded\"\n src={item1?.image}\n alt={item1?.value}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n })}\n <div className=\"text-center\">\n <button className=\"text-white hover:underline\" onClick={() => { \n history.push('/package')\n }}>Xem thêm\n </button>\n </div>\n </div>\n \n </div>\n </div>\n ) : (\n <div className=\"c-col-5\">\n <div className=\"c-col-full\">\n <i\n className=\"fa-regular fa-sidebar-flip pr-2 cursor-pointer\"\n onClick={() => {\n setIsCollapse(true);\n }}\n ></i>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React, { Fragment, useEffect } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { NavLink, useNavigate } from \"react-router-dom\";\nimport {\n updateThongTinMoRongAction,\n selectThongTinMoRong,\n setInforLoginDemo,\n} from \"../../redux/reducer/authReducer\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport ItemCoin from \"../../components/ItemCoin/ItemCoin\";\nimport { dataHeader } from \"../utils\";\nimport { getHinhAnhFB } from \"../../utils/GetHinhanh\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport useWindowSize from \"../../hook/useWindowSize\";\n\nexport default function HeaderTaskFree({}) {\n const navigate = useNavigate();\n const dispatch = useDispatch();\n let userId = localStorageServ.userInfo.get()?.id;\n let { userInfo } = useSelector(selectThongTinMoRong);\n\n const { widthWindow, heightWindow } = useWindowSize();\n\n const { t, i18n } = useTranslation();\n\n return (\n <>\n <div\n onClick={() => {\n navigate(\"/dash-broad\");\n }}\n className=\"logo w-23 flex-shrink-0 h-ful flex items-center cursor-pointer\"\n >\n <img\n src=\"https://apimentor11.cybersoft.edu.vn//images/24-04-2024-10-46-20-logo-codezuni.png\"\n alt=\"\"\n />\n </div>\n {widthWindow < 768 ? (\n \"\"\n ) : (\n <Fragment>\n <div className=\"flex rounded-xl relative items-center h-10 \">\n {dataHeader.map((item, index) => {\n // if (index == 1) return <DropdownLoTrinh />;\n return (\n <NavLink key={index} to={item.path}>\n <button\n className={`p-1 px-3 flex h-full justify-center text-content text-sm items-center rounded-xl z-10 relative duration-500 text-button uppercase w-max`}\n >\n <i className={`pe-2 ${item.icon}`}> </i>\n {item.name}\n </button>\n </NavLink>\n );\n })}\n </div>\n <ItemCoin />\n <div className=\"w-14 h-14\">\n <NavLink to={`/profile/${userId}`}>\n <img\n src={getHinhAnhFB(userInfo.facebookId, userInfo)}\n className=\"w-full h-full block rounded-full m-0 object-cover \"\n alt=\"\"\n />\n </NavLink>\n </div>\n </Fragment>\n )}\n <div className=\"flex items-center\">\n <div className=\"lang\">\n <Select\n style={{ width: 100, fontSize: 18, color: \"white\" }}\n value={localStorage.getItem(\"lang\")}\n onChange={(value) => {\n localStorage.setItem(\"lang\", value);\n window.location.reload();\n }}\n options={[\n { value: \"vi\", label: \"🇻🇳 VI\" },\n { value: \"en\", label: \"🇺🇸 EN\" },\n ]}\n />\n </div>\n <div\n onClick={() => {\n localStorageServ.userInfo?.remove();\n window.location.href = \"/login\";\n }}\n style={{ color: \" rgb(255, 210, 32)\" }}\n className=\" cursor-pointer flex items-center justify-start space-x-2 flex-shrink-0\"\n >\n <p className=\"\">\n {\" \"}\n {userInfo?.hoTen == \"Free Account\"\n ? t(\"header.dangNhap\")\n : t(\"header.dangXuat\")}\n </p>{\" \"}\n <i className=\"fa fa-sign-out-alt \"></i>\n </div>\n </div>\n </>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Layout } from \"antd\";\nimport SideNavigation from \"./SideNavigation/SideNavigation\";\nimport { Outlet } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport useWindowSize from \"../hook/useWindowSize\";\nimport BreadCrumbNav from \"../components/BreadCrumbNav/BreadCrumbNav\";\nimport StackChat from \"../components/StackChat/StackChat\";\nimport HeaderTaskFree from \"./HeaderTaskFree/HeaderTaskFree\";\nimport axios from \"axios\";\nimport { BASE_URL_CODINGCAMP } from \"../services/axios.service\";\nimport localStorageServ from \"../services/locaStorage.service\";\nimport { updateThongTinMoRongAction } from \"../redux/reducer/authReducer\";\nimport HeaderBottom from \"./HeaderBottom/HeaderBottom\";\nimport FlashSale from \"../components/FlashSale/FlashSale\";\nimport ZaloBtn from \"../components/ZaloOA/ZaloOA\";\nimport FBChat from \"../components/FacebookChat/FBChat\";\nconst { Header, Content, Sider } = Layout;\n\nexport default function HomeSidebarFree(props) {\n let userInfo = localStorageServ.userInfo.get();\n const [collapsed, setCollapsed] = useState(false);\n const theme = useSelector((state) => state.theme.theme);\n let root = document.documentElement;\n root.classList.add(theme);\n const { widthWindow, heightWindow } = useWindowSize();\n\n const isPhone = widthWindow < 768 ? true : false;\n const extractLayoutSideBar = (collapsed) => {\n if (widthWindow > 1024 && !collapsed) {\n return 120;\n } else {\n return 40;\n }\n };\n\n const dispatch = useDispatch();\n useEffect(() => {\n async function fectdata() {\n const values = {\n email: \"freeacc@gmail.com\",\n matKhau: \"111111\",\n };\n await axios\n .post(`${BASE_URL_CODINGCAMP}/api/nguoidung/loginv2`, values)\n .then((res) => {\n localStorageServ.userInfo.set(res.data.content);\n dispatch(updateThongTinMoRongAction());\n // window.location.href = \"/\";\n })\n .catch((err) => {});\n }\n if (!userInfo) {\n fectdata();\n } else {\n dispatch(updateThongTinMoRongAction());\n }\n }, []);\n return (\n <Layout style={{ minHeight: \"100vh\" }}>\n <Header\n style={{\n background: \"black\",\n zIndex: 100,\n padding: isPhone ? \"0 10px\" : \"\",\n }}\n className=\"flex h-16 fixed top-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderTaskFree />\n </Header>\n {isPhone && (\n <div\n style={{\n // background:\"#fff\",\n zIndex: 100,\n // padding: isPhone ? \"0 10px\" : \"\",\n }}\n className=\"flex h-16 fixed bottom-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderBottom />\n </div>\n )}\n <Layout>\n <Sider\n trigger={null}\n collapsible\n collapsed={collapsed}\n width={extractLayoutSideBar(collapsed)}\n className=\" fixed top-20 left-0 \"\n >\n {/* <SideNavigation isCollapsed={collapsed} /> */}\n </Sider>\n <Layout\n style={{\n margin: `0px 0 0 0px`,\n paddingTop: isPhone?'10px':\"64px\",\n // paddingBottom: \"64px\",\n }}\n className=\"bg-content\"\n >\n <Content className=\" relative\">\n <div className=\"pt-8\">\n {/* <BreadCrumbNav /> */}\n <div className={`${isPhone ? \"phone\" : \"\"} page_container`}>\n <Outlet />\n \n <ZaloBtn/>\n <FBChat/>\n\n </div>\n </div>\n </Content>\n <FlashSale/>\n </Layout>\n </Layout>\n </Layout>\n );\n}\n","\n\nimport React, { useEffect, useState } from 'react'\nimport { Form, Input, Button, Checkbox, Select, Radio } from \"antd\";\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectThongTinMoRong } from '../../redux/reducer/authReducer';\nimport localStorageServ from '../../services/locaStorage.service';\nimport { getChuyenDeApi } from '../../redux/reducer/chuyenDeReducer-Chat';\nimport { history } from '../../App';\nimport { packageService } from '../../services/packageService';\nimport toast from 'react-hot-toast';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport BtnLoginFacebook from '../../components/BtnLoginFacebook/BtnLoginFacebook';\nimport './style.css'\nconst { Option } = Select;\n\nconst PaymentSuccess = () => {\n\n let { arrChuyenDe } = useSelector((state) => state.chuyenDe);\n const [searchParams] = useSearchParams();\n\n const userInfo = localStorageServ.userInfo.get();\n let email = localStorageServ.userInfo.get()?.email;\n\n // Lấy các giá trị từ searchParams\n const vpc_AuthorizeId = searchParams.get(\"vpc_AuthorizeId\")\n const vpc_Card = searchParams.get(\"vpc_Card\")\n const vpc_CardExp = searchParams.get(\"vpc_CardExp\")\n const vpc_CardNum = searchParams.get(\"vpc_CardNum\")\n const vpc_CardUid = searchParams.get(\"vpc_CardUid\")\n const vpc_Command = searchParams.get(\"vpc_Command\")\n const vpc_MerchTxnRef = searchParams.get(\"vpc_MerchTxnRef\")\n const vpc_Merchant = searchParams.get(\"vpc_Merchant\")\n const vpc_Message = searchParams.get(\"vpc_Message\")\n const vpc_OrderInfo = searchParams.get(\"vpc_OrderInfo\")\n const vpc_PayChannel = searchParams.get(\"vpc_PayChannel\")\n const vpc_TransactionNo = searchParams.get(\"vpc_TransactionNo\")\n const vpc_TxnResponseCode = searchParams.get(\"vpc_TxnResponseCode\")\n const vpc_Version = searchParams.get(\"vpc_Version\")\n const vpc_BinCountry = searchParams.get(\"vpc_BinCountry\")\n const vpc_SecureHash = searchParams.get(\"vpc_SecureHash\")\n const vpc_Amount = searchParams.get(\"vpc_Amount\")\n console.log('vpc_TxnResponseCode: ', vpc_TxnResponseCode);\n console.log('vpc_Message: ', vpc_Message);\n let dispatch = useDispatch();\n const regisPackage = localStorageServ.regisPackage.get();\n const inforSignUp = localStorageServ.inforSignUp.get();\n const [form] = Form.useForm();\n const [infor, setInfor] = useState()\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n\n setIsLoading(true)\n const paymentInfor = {\n vpcAuthorizeId: vpc_AuthorizeId ? vpc_AuthorizeId : \"\",\n vpcCard: vpc_Card ? vpc_Card : \"\",\n vpcCardExp: vpc_CardExp ? vpc_CardExp : \"\",\n vpcCardNum: vpc_CardNum ? vpc_CardNum : \"\",\n vpcCardUid: vpc_CardUid ? vpc_CardUid : \"\",\n vpcCommand: vpc_Command ? vpc_Command : \"\",\n vpcMerchTxnRef: vpc_MerchTxnRef ? vpc_MerchTxnRef : \"\",\n vpcMerchant: vpc_Merchant ? vpc_Merchant : \"\",\n vpcMessage: vpc_Message ? vpc_Message : \"\",\n vpcOrderInfo: vpc_OrderInfo ? vpc_OrderInfo : \"\",\n vpcPayChannel: vpc_PayChannel ? vpc_PayChannel : \"\",\n vpcTransactionNo: vpc_TransactionNo ? vpc_TransactionNo : \"\",\n vpcTxnResponseCode: vpc_TxnResponseCode ? vpc_TxnResponseCode : \"\",\n vpcVersion: vpc_Version ? vpc_Version : \"\",\n vpcBinCountry: vpc_BinCountry ? vpc_BinCountry : \"\",\n vpcSecureHash: vpc_SecureHash ? vpc_SecureHash : \"\",\n vpcAmount: vpc_Amount ? vpc_Amount : \"\",\n };\n\n //thá»±c hiện ghi danh theo danh sách khóa há»c\n\n packageService.insertTrackingPayment(paymentInfor)\n\n .then((res) => {\n setInfor(res.data.content)\n setIsLoading(false)\n })\n .catch((err) => {\n\n setIsLoading(false)\n });\n return () => {\n if (email == 'freeacc@gmail.com') {\n localStorageServ.clearLocalStorage()\n }\n }\n }, []);\n useEffect(() => {\n if (infor) {\n const obj = {\n \"dsChuyenDe\": regisPackage.danhSachKhoaHoc,\n \"thoiHan\": regisPackage.thang,\n \"nguoiDungId\": inforSignUp ? inforSignUp.id : userInfo.id\n }\n if (vpc_TxnResponseCode == 0) {\n packageService.ghiDanhPackage(obj)\n .then((res) => {\n localStorageServ.regisPackage.remove()\n })\n .catch((err) => {\n console.log(err);\n });\n }\n }\n\n }, [infor])\n const renderTrangThai=(vpcMessage) => { \n switch (vpcMessage) {\n case 0:\n return \"Giao dịch thà nh công\";\n case 1:\n return \"Ngân hà ng từ chối cấp phép giao dịch.\";\n case 2:\n return \"Ngân hà ng phát hà nh thẻ từ chối cấp phép giao dịch\";\n case 3:\n case 6:\n case 7:\n return \"Không nháºn được kết quả phản hồi từ Tổ chức phát hà nh thẻ\";\n case 4:\n return \"Tháng/Năm hết hạn của thẻ không đúng hoặc thẻ đã hết hạn sá» dụng\";\n case 5:\n return \"Số dÆ°/Hạn mức của thẻ không đủ để thanh toán\";\n case 8:\n return \"Ngân hà ng phát hà nh thẻ không há»— trợ thanh toán trá»±c tuyến\";\n case 9:\n return \"Tên chủ thẻ/tà i khoản không hợp lệ.\";\n case 10:\n return \"Thẻ hết hạn/Thẻ bị khóa.\";\n case 11:\n return \"Thẻ/Tà i khoản chÆ°a đăng ký dịch vụ há»— trợ thanh toán trá»±c tuyến.\";\n case 12:\n return \"Tháng/Năm phát hà nh hoặc hết hạn của thẻ không hợp lệ.\";\n case 13:\n return \"Giao dịch vượt quá hạn mức thanh toán trá»±c tuyến theo quy định của Ngân hà ng.\";\n case 14:\n return \"Số thẻ không hợp lệ.\";\n case 21:\n return \"Số dÆ° tại tà i khoản không đủ để thanh toán.\";\n case 22:\n return \"Thông tin tà i khoản không hợp lệ.\";\n case 23:\n return \"Thẻ/Tà i khoản bị khóa hoặc chÆ°a được kÃch hoạt.\";\n case 24:\n return \"Thông tin thẻ/tà i khoản không hợp lệ.\";\n case 25:\n return \"Mã xác thá»±c OTP không hợp lệ.\";\n case 26:\n return \"Mã xác thá»±c OTP đã hết hiệu lá»±c.\";\n case 98:\n return \"Xác thá»±c giao dịch bị hủy.\";\n case 99:\n return \"NgÆ°á»i dùng hủy giao dịch.\";\n case 'B':\n case 'D':\n return \"Lá»—i trong quá trình xác thá»±c giao dịch của Ngân hà ng phát hà nh thẻ.\";\n case 'F':\n return \"Xác thá»±c giao dịch không thà nh công.\";\n case 'U':\n return \"Xác thá»±c mã CSC không thà nh công.\";\n case 'Z':\n return \"Giao dịch bị từ chối.\";\n case 253:\n return \"Hết thá»i hạn nháºp thông tin thanh toán.\";\n case 'Other':\n return \"Lá»—i không xác định\";\n default:\n return \"Lá»—i không xác định\";\n }\n \n }\n return (\n <div className='w-full min-h-screen overflow-y-auto bg-cover flex-col bg-fixed p-3 md:p-7 lg:p-10 flex sm:p-3 '>\n <div className=\" h-full w-full flex-grow flex flex-col relative overflow-y-auto overflow-x-hidden 2xl:container mx-auto\">\n <div className=\"w-full flex-grow flex flex-col card-theme\">\n <div className=\"lg:w-full w-2/3 mx-auto\">\n {!isLoading ? <div className=\"w-full p-3 flex flex-col items-center space-y-5 text-white\" style={{ height: '100%' }}>\n <div>\n {infor?.vpcTxnResponseCode != 0 ?\n <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"100\" height=\"100\" viewBox=\"0 0 48 48\">\n <linearGradient id=\"wRKXFJsqHCxLE9yyOYHkza_fYgQxDaH069W_gr1\" x1=\"9.858\" x2=\"38.142\" y1=\"9.858\" y2=\"38.142\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#f44f5a\"></stop><stop offset=\".443\" stop-color=\"#ee3d4a\"></stop><stop offset=\"1\" stop-color=\"#e52030\"></stop></linearGradient><path fill=\"url(#wRKXFJsqHCxLE9yyOYHkza_fYgQxDaH069W_gr1)\" d=\"M44,24c0,11.045-8.955,20-20,20S4,35.045,4,24S12.955,4,24,4S44,12.955,44,24z\"></path><path d=\"M33.192,28.95L28.243,24l4.95-4.95c0.781-0.781,0.781-2.047,0-2.828l-1.414-1.414\tc-0.781-0.781-2.047-0.781-2.828,0L24,19.757l-4.95-4.95c-0.781-0.781-2.047-0.781-2.828,0l-1.414,1.414\tc-0.781,0.781-0.781,2.047,0,2.828l4.95,4.95l-4.95,4.95c-0.781,0.781-0.781,2.047,0,2.828l1.414,1.414\tc0.781,0.781,2.047,0.781,2.828,0l4.95-4.95l4.95,4.95c0.781,0.781,2.047,0.781,2.828,0l1.414-1.414\tC33.973,30.997,33.973,29.731,33.192,28.95z\" opacity=\".05\"></path><path d=\"M32.839,29.303L27.536,24l5.303-5.303c0.586-0.586,0.586-1.536,0-2.121l-1.414-1.414\tc-0.586-0.586-1.536-0.586-2.121,0L24,20.464l-5.303-5.303c-0.586-0.586-1.536-0.586-2.121,0l-1.414,1.414\tc-0.586,0.586-0.586,1.536,0,2.121L20.464,24l-5.303,5.303c-0.586,0.586-0.586,1.536,0,2.121l1.414,1.414\tc0.586,0.586,1.536,0.586,2.121,0L24,27.536l5.303,5.303c0.586,0.586,1.536,0.586,2.121,0l1.414-1.414\tC33.425,30.839,33.425,29.889,32.839,29.303z\" opacity=\".07\"></path><path fill=\"#fff\" d=\"M31.071,15.515l1.414,1.414c0.391,0.391,0.391,1.024,0,1.414L18.343,32.485\tc-0.391,0.391-1.024,0.391-1.414,0l-1.414-1.414c-0.391-0.391-0.391-1.024,0-1.414l14.142-14.142\tC30.047,15.124,30.681,15.124,31.071,15.515z\"></path><path fill=\"#fff\" d=\"M32.485,31.071l-1.414,1.414c-0.391,0.391-1.024,0.391-1.414,0L15.515,18.343\tc-0.391-0.391-0.391-1.024,0-1.414l1.414-1.414c0.391-0.391,1.024-0.391,1.414,0l14.142,14.142\tC32.876,30.047,32.876,30.681,32.485,31.071z\"></path>\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"100\" height=\"100\" viewBox=\"0 0 48 48\">\n <linearGradient id=\"5zzMGVQnN_QyRYWGmJUsQa_A8xKzsTKHhzn_gr1\" x1=\"9.858\" x2=\"38.142\" y1=\"9.858\" y2=\"38.142\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#21ad64\"></stop><stop offset=\"1\" stop-color=\"#088242\"></stop></linearGradient><path fill=\"url(#5zzMGVQnN_QyRYWGmJUsQa_A8xKzsTKHhzn_gr1)\" d=\"M44,24c0,11.045-8.955,20-20,20S4,35.045,4,24S12.955,4,24,4S44,12.955,44,24z\"></path><path d=\"M32.172,16.172L22,26.344l-5.172-5.172c-0.781-0.781-2.047-0.781-2.828,0l-1.414,1.414\tc-0.781,0.781-0.781,2.047,0,2.828l8,8c0.781,0.781,2.047,0.781,2.828,0l13-13c0.781-0.781,0.781-2.047,0-2.828L35,16.172\tC34.219,15.391,32.953,15.391,32.172,16.172z\" opacity=\".05\"></path><path d=\"M20.939,33.061l-8-8c-0.586-0.586-0.586-1.536,0-2.121l1.414-1.414c0.586-0.586,1.536-0.586,2.121,0\tL22,27.051l10.525-10.525c0.586-0.586,1.536-0.586,2.121,0l1.414,1.414c0.586,0.586,0.586,1.536,0,2.121l-13,13\tC22.475,33.646,21.525,33.646,20.939,33.061z\" opacity=\".07\"></path><path fill=\"#fff\" d=\"M21.293,32.707l-8-8c-0.391-0.391-0.391-1.024,0-1.414l1.414-1.414c0.391-0.391,1.024-0.391,1.414,0\tL22,27.758l10.879-10.879c0.391-0.391,1.024-0.391,1.414,0l1.414,1.414c0.391,0.391,0.391,1.024,0,1.414l-13,13\tC22.317,33.098,21.683,33.098,21.293,32.707z\"></path>\n </svg>\n }\n\n </div>\n\n\n <p className=\"uppercase text-lg lg:text-xl \">{infor?.vpcTxnResponseCode != 0 ? 'THANH TOÃN THẤT BẠI' : 'THANH TOÃN THÀNH CÔNG'}</p>\n {/* lấy param hiển thị lại thông tin thanh toán */}\n <div className=' w-1/2'>\n <div className='flex justify-between py-1'>\n <p>Mã Ä‘Æ¡n hà ng</p>\n <p>{infor?.vpcMerchTxnRef}</p>\n </div>\n <div className='flex justify-between py-1'>\n <p>Số tiá»n</p>\n <p>{(infor?.vpcAmount / 100).toLocaleString()}</p>\n </div>\n <div className='flex justify-between py-1'>\n <p>Trạng thái</p>\n <p>{renderTrangThai(infor?.vpcTxnResponseCode)}</p>\n </div>\n <div className='flex justify-between py-1'>\n <p>Số thẻ</p>\n <p>{infor?.vpcCardNum}</p>\n </div>\n </div>\n {email == 'freeacc@gmail.com' ?\n <BtnLoginFacebook />\n :\n <Button\n onClick={() => {\n history.push(\"/\")\n }}\n className=\"px-5 mt-4 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Trang chủ\n </Button>}\n </div>\n :\n <div className='flex justify-center mt-10'> <div className=' loading_progress'></div></div>\n }\n\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PaymentSuccess","import React from \"react\";\nimport { useLstLoTrinh } from \"../../../hook/useLstLoTrinhUser\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport { history } from \"../../../App\";\n// import Registed_Users_Bar from \"../Registed_Users_Bar/Registed_Users_Bar\";\n\nfunction Static_Public_Desktop({ loTrinhPublic, isBlackFridayDay = false }) {\n let loTrinh = loTrinhPublic;\n \n let userInfo = localStorageServ.userInfo.get()\n let isDemoMode = isBlackFridayDay;\n let widthItem = isDemoMode ? \"w-1/4\" : \"w-1/5\";\n const { data, isLoading, error } = useLstLoTrinh();\n \n let ds = JSON.parse(loTrinh.danhSachKhoaHoc)\n let arr1 = ds.map((cd,idx)=>{\n return data?.find(a => a.chuyenDeId === cd)\n })\n const totalTask = (type) => { \n let total = 0\n arr1?.map((item,idx)=>{\n item?.thongKeChuyenDe.map(({ tongSoLuong, tieuDe, maLoai }, index)=>{\n if(type==maLoai){\n total+=tongSoLuong\n }\n })\n })\n return total\n }\n\n console.log(totalTask(arr1,\"TASK\"))\n let textTitle = \"font-medium text-base lg:text-lg text-color-title\";\n let textNumber = \"font-bold text-lg lg:text-2xl text-color-title\";\n console.log(loTrinh)\n return (\n <div className=\"w-full h-full flex flex-col card_theme md:p-2 lg:p-3 relative\">\n <div className=\"flex absolute w-max space-x-4 lef -top-5 right-3\">\n {/* {!isDemoMode ? <GetGameItem types={[VC]} size=\"12\" /> : \"\"} */}\n </div>\n <div className=\"w-full p-1 lg:p-3 h-5/6 lg:h-full flex items-center justify-between space-x-3 lg:space-x-5 \">\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-purple-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-purple-theme rounded-2xl bg-opacity-50 border-purple-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-purple-theme rounded-2xl \">\n <i className=\"fa fa-book text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}>Khoá há»c</p>\n <span className={textNumber}>{ds.length}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n style={{background:'rgba(68, 66, 178, 0.1);'}}\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fab fa-leanpub text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Task</p>\n <span className={textNumber}>{totalTask(\"TASK\")}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n style={{background:'rgba(68, 66, 178, 0.1);'}}\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fa fa-question-circle text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> QUIZZ</p>\n <span className={textNumber}>{totalTask(\"QUIZ\")}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n style={{background:'rgba(68, 66, 178, 0.1);'}}\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fa fa-code text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Runcode</p>\n <span className={textNumber}>{totalTask(\"RUNCODE\")}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n style={{background:'rgba(68, 66, 178, 0.1);'}}\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fa fa-file-alt text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Tà i liệu</p>\n <span className={textNumber}>{totalTask(\"TAILIEU\")}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n style={{background:'rgba(68, 66, 178, 0.1);'}}\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fa fa-video text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Video</p>\n <span className={textNumber}>{totalTask(\"VIDEO\")}</span>\n </div>\n </div>\n\n \n </div>\n\n <div className=\"flex space-x-5 items-center justify-end mb-8\">\n {/* <p className=\" text-base lg:text-lg text-color-title w-max flex-shrink-0\">\n Há»c viên đã đăng kÃ\n </p>\n <Registed_Users_Bar\n dsAvatar={loTrinh.dsAvatar}\n totalUser={loTrinh.tongHocVien}\n /> */}\n {!userInfo || userInfo?.email=='freeacc@gmail.com'?\n <button className=\"btn_theme_package m-1\" onClick={() => { \n history.push('/signup-user')\n }}>\n Há»c thá» miá»…n phÃ\n </button>\n :\n loTrinh?.info?.map((cd,idx)=>{\n return <button className=\"btn_theme_package m-1\" onClick={() => {\n localStorageServ.regisPackage.set(cd)\n if (userInfo?.email == 'freeacc@gmail.com' || !userInfo) {\n history.push('/signup-user')\n } else {\n history.push('/confirm-payment')\n }\n }}>{cd.hocPhi / 1000000} triệu/<sub>{cd.thang} tháng</sub></button>\n })}\n <button className=\" btn-theme text-white text-base lg:text-lg font-medium lg:font-bold md:px-3 lg:px-7 p-2 rounded leading-10 flex-shrink-0 shadow_designCode \">\n <a \n href=\"https://www.facebook.com/codezuni\"\n target=\"_blank\"\n className=\"btnTuVan text-white hover:text-white\"\n >\n TÆ° vấn & Äăng kÃ\n </a>\n </button>\n </div>\n </div>\n );\n}\n\nexport default Static_Public_Desktop = React.memo(Static_Public_Desktop);\n","import React from \"react\";\n// import Registed_Users_Bar from \"../Registed_Users_Bar/Registed_Users_Bar\";\n\nfunction Static_Demo_Tablet({ loTrinhPublic, isBlackFridayDay = false }) {\n let loTrinh = loTrinhPublic;\n let isDemoMode = isBlackFridayDay;\n let widthItem = isDemoMode ? \"w-1/4\" : \"w-1/5\";\n let textTitle = \"font-medium text-base lg:text-lg text-color-title\";\n let textNumber = \"font-bold text-lg lg:text-2xl text-color-title\";\n return (\n <div className=\"w-full h-full flex flex-col card_theme md:p-2 lg:p-3 relative\">\n <div className=\"flex absolute w-max space-x-4 lef -top-5 right-3\">\n </div>\n <div className=\"w-full p-1 lg:p-3 h-5/6 lg:h-full flex items-center justify-between space-x-3 lg:space-x-5 \">\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-purple-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-purple-theme rounded-2xl bg-opacity-50 border-purple-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-purple-theme rounded-2xl \">\n <i className=\"fa fa-book text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}>Khoá há»c</p>\n <span className={textNumber}>{loTrinh.tongKhoa}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fab fa-leanpub text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Bà i há»c</p>\n <span className={textNumber}>{loTrinh.tongBaiHoc}</span>\n </div>\n </div>\n\n <div\n className={\n \"flex px-3 items-center flex-col justify-between md:h-40 lg:h-44 p-5 bg-pink-theme rounded-xl bg-opacity-25 \" +\n widthItem\n }\n >\n <div className=\"w-12 h-12 flex justify-center items-center bg-pink-theme rounded-2xl bg-opacity-50 border-green-minbg-pink-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-pink-theme rounded-2xl \">\n <i className=\"fa fa-clock text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex flex-col items-center\">\n <p className={textTitle}> Phút video</p>\n <span className={textNumber}>{loTrinh.tongPhut}</span>\n </div>\n </div>\n\n \n </div>\n\n <div className=\"flex space-x-5 items-center justify-end mb-8\">\n {/* <p className=\" text-base lg:text-lg text-color-title w-max flex-shrink-0\">\n Há»c viên đã đăng kÃ\n </p>\n <Registed_Users_Bar\n dsAvatar={loTrinh.dsAvatar}\n totalUser={loTrinh.tongHocVien}\n /> */}\n <button className=\" btn-theme text-white text-base lg:text-lg font-medium lg:font-bold md:px-3 lg:px-7 p-2 rounded leading-10 flex-shrink-0 shadow_designCode \">\n <a\n href=\"https://www.facebook.com/codezuni\"\n target=\"_blank\"\n className=\"text-white hover:text-white\"\n >\n TÆ° vấn & Äăng kÃ\n </a>\n </button>\n </div>\n </div>\n );\n}\n\nexport default Static_Demo_Tablet = React.memo(Static_Demo_Tablet);\n","import React from \"react\";\n// import Registed_Users_Bar from \"../Registed_Users_Bar/Registed_Users_Bar\";\n\nfunction StaticUser_Tablet({ loTrinhPublic }) {\n let loTrinh = loTrinhPublic;\n let textTitle = \"font-medium text-base lg:text-lg text-color-title\";\n let textNumber = \"font-bold text-lg lg:text-2xl text-color-title\";\n return (\n <div className=\"w-full h-full flex flex-col card_theme md:p-2 relative\">\n <div className=\"flex absolute w-max space-x-4 lef -top-5 right-3\">\n </div>\n <div className=\"w-full p-1 lg:p-3 h-5/6 grid grid-cols-2 gap-x-3 justify-items-center \">\n <div\n className={\n \"flex px-3 w-full max-w-56 items-center justify-between h-12 p-5 bg-purple-theme rounded-xl bg-opacity-25 \"\n }\n >\n <div className=\"w-10 h-10 flex justify-center items-center bg-purple-theme rounded-2xl bg-opacity-50 border-purple-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-purple-theme rounded-2xl \">\n <i className=\"fa fa-book text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex space-x-1.5 items-center\">\n <p className={textTitle}>Khoá há»c</p>\n <span className={textNumber}>{loTrinh.tongKhoa}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 w-full max-w-56 items-center justify-between h-12 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \"\n }\n >\n <div className=\"w-10 h-10 flex justify-center items-center bg-green-mint-theme rounded-2xl bg-opacity-50 border-green-minbg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fab fa-leanpub text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex space-x-1.5 items-center\">\n <p className={textTitle}> Bà i há»c</p>\n <span className={textNumber}>{loTrinh.tongBaiHoc}</span>\n </div>\n </div>\n\n <div\n className={\n \"flex px-3 w-full max-w-56 items-center justify-between h-12 p-5 bg-pink-theme rounded-xl bg-opacity-25 \"\n }\n >\n <div className=\"w-10 h-10 flex justify-center items-center bg-pink-theme rounded-2xl bg-opacity-50 border-green-minbg-pink-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-pink-theme rounded-2xl \">\n <i className=\"fa fa-clock text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex space-x-1.5 items-center\">\n <p className={textTitle}> Phút video</p>\n <span className={textNumber}>{loTrinh.tongPhut}</span>\n </div>\n </div>\n\n <div\n className={\n \"flex px-3 w-full max-w-56 items-center justify-between h-12 p-5 bg-yellow-theme rounded-xl bg-opacity-25 \"\n }\n >\n <div className=\"w-10 h-10 flex justify-center items-center bg-yellow-theme rounded-2xl bg-opacity-50 border-yellow-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-yellow-theme rounded-2xl \">\n <i className=\"fa fa-dumbbell text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex space-x-1.5 items-center\">\n <p className={textTitle}>Bà i táºp</p>\n <span className={textNumber}>{loTrinh.tongBaiTapNop}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 w-full max-w-56 items-center justify-between h-12 p-5 bg-green-mint-theme rounded-xl bg-opacity-25 \"\n }\n >\n <div className=\"w-10 h-10 flex justify-center items-center rounded-2xl bg-opacity-50 border-green-min bg-green-mint-theme\">\n <div className=\"w-11/12 h-11/12 flex-shrink-0 flex justify-center items-center bg-green-mint-theme rounded-2xl \">\n <i className=\"fa fa-question text-xl text-white \"></i>\n </div>\n </div>\n <div className=\"flex space-x-1.5 items-center\">\n <p className={textTitle}>Trắc nghiệm</p>\n <span className={textNumber}>{loTrinh.tongTracNghiem}</span>\n </div>\n </div>\n <div\n className={\n \"flex px-3 items-center justify-between h-12 p-5 rounded-xl bg-opacity-25 \"\n }\n >\n <button className=\" btn-theme text-white text-base font-medium p-2 rounded h-12 px-5 flex-shrink-0 shadow_designCode \">\n <a\n href=\"https://www.facebook.com/codezuni\"\n target=\"_blank\"\n className=\"text-white hover:text-white\"\n >\n TÆ° vấn & Äăng kÃ\n </a>\n </button>\n </div>\n </div>\n\n <div className=\"flex space-x-2 items-center mb-8 justify-end\">\n {/* <p className=\" text-base lg:text-lg text-color-title w-max flex-shrink-0\">\n Há»c viên đã đăng kÃ\n </p>\n <Registed_Users_Bar\n dsAvatar={loTrinh.dsAvatar}\n totalUser={loTrinh.tongHocVien} */}\n {/* /> */}\n </div>\n </div>\n );\n}\n\nexport default StaticUser_Tablet = React.memo(StaticUser_Tablet);\n","import React from \"react\";\nimport StaticDemo_Tablet from \"./StaticDemo_Tablet\";\nimport StaticUser_Tablet from \"./StaticUser_Tablet\";\n\n\nfunction Static_PublicTablet({ loTrinhPublic, isBlackFridayDay = false }) {\n\n if (isBlackFridayDay) {\n return <StaticDemo_Tablet isBlackFridayDay={isBlackFridayDay} loTrinhPublic={loTrinhPublic} />\n }\n\n return <StaticUser_Tablet loTrinhPublic={loTrinhPublic} />;\n}\n\nexport default Static_PublicTablet = React.memo(Static_PublicTablet);\n","import React from 'react'\nimport Static_Public_Desktop from './Static_Public_Desktop'\nimport Static_Public_Tablet from './Static_Public_Tablet'\nimport { useMediaQuery } from 'react-responsive';\n\nexport default function Static_Public({ loTrinhPublic, isBlackFridayDay = false }) {\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 640 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({maxWidth: 639 });\n \n return isTablet ? children : null;\n };\n return (\n <>\n <Desktop>\n <Static_Public_Desktop loTrinhPublic={loTrinhPublic} isBlackFridayDay={isBlackFridayDay} />\n </Desktop>\n <Tablet>\n \n </Tablet>\n </>\n )\n}\n","import React, { memo } from 'react'\nvar dayjs = require(\"dayjs\");\n\nexport default memo(function StartEndDay({ loTrinh }) {\n return (\n <div className=\"text-base flex flex-col items-center\">\n <div className=\"flex items-start justify-center flex-col flex-shrink-0 h-max-content\">\n <div className=\"flex space-x-1 \">\n <p className=\" w-max text-color-content text-center text-sm font-medium lg:hidden xl:block \">\n Ngà y bắt đầu:\n </p>\n <p className=\"font-medium text-sm lg:text-base\">\n {dayjs(loTrinh.ngayBatDau).format(\"DD/MM/YYYY\")}\n </p>\n </div>\n <div className=\"flex space-x-1 \">\n <p className=\" w-max text-color-content text-center text-sm font-medium lg:hidden xl:block\">\n Ngà y kết thúc:\n </p>\n <p className=\"font-medium text-sm lg:text-base\">\n {dayjs(loTrinh.ngayKetThuc).format(\"DD/MM/YYYY\")}\n </p>\n </div>\n </div>\n </div>\n )\n})\n","import { Progress } from \"antd\";\nimport moment from \"moment\";\nimport React from \"react\";\n// import Registed_Users_Bar from \"../Registed_Users_Bar/Registed_Users_Bar\";\nimport StartEndDay from \"./StartEndDay\";\nvar dayjs = require(\"dayjs\");\n\nfunction CardDetailLoTrinh({ loTrinhDetail }) {\n const percentPhut = Math.floor(\n (loTrinhDetail.soPhutHoanThanh / loTrinhDetail.tongPhut) * 100\n );\n const percentBaiTapNop = Math.floor(\n (loTrinhDetail.baiTapNopHoanThanh / loTrinhDetail.tongBaiTapNop) * 100\n );\n const percentTracNghiem = Math.floor(\n (loTrinhDetail.tracNghiemHoanThanh / loTrinhDetail.tongTracNghiem) * 100\n );\n var start = moment(moment(loTrinhDetail.ngayBatDau).format(\"YYYY-MM-DD\"));\n var end = moment(moment(loTrinhDetail.ngayKetThuc).format(\"YYYY-MM-DD\"));\n var now = moment(moment().format(\"YYYY-MM-DD\"));\n\n const totalDays = moment.duration(end.diff(start)).asDays();\n const remainDay = moment.duration(end.diff(now)).asDays() + 1;\n\n const dayDaHoc = totalDays - remainDay;\n const percentDay = Math.floor((dayDaHoc / totalDays) * 100);\n return (\n <div className=\"w-full h-full card_theme flex md:p-2 lg:p-5 flex-col\">\n <div className=\"flex-shrink-0 flex-grow flex justify-between items-center \">\n <div className=\"flex w-full flex-shrink-0 h-full justify-between items-center \">\n <div className=\"flex flex-col items-center h-full justify-center space-y-3 w-1/4 lg:w-1/5\">\n <Progress\n format={(percent) => (\n <span style={{ color: \"rgb(117, 95, 211)\" }}>{percent}% </span>\n )}\n strokeColor={\"rgb( 117, 95, 211)\"}\n trailColor={\"rgba( 117, 95, 211,0.3)\"}\n type=\"circle\"\n className=\"md:w-24 lg:w-28 xl:w-32\"\n strokeWidth={10}\n percent={percentPhut}\n />\n <div className=\"text-base flex flex-col items-center\">\n <span className=\"font-medium\">\n {loTrinhDetail.soPhutHoanThanh}/{loTrinhDetail.tongPhut}\n </span>\n <span className=\"text-sm\">Phút video </span>\n </div>\n </div>\n <div className=\"flex flex-col items-center h-full justify-center space-y-3 w-1/4 lg:w-1/5 \">\n <Progress\n format={(percent) => (\n <span style={{ color: \"rgb( 70, 220, 216)\" }}>{percent}% </span>\n )}\n strokeColor={\"rgb( 70, 220, 216)\"}\n trailColor={\"rgba( 70, 220, 216,0.3)\"}\n type=\"circle\"\n className=\"md:w-24 lg:w-28 xl:w-32\"\n strokeWidth={10}\n percent={percentTracNghiem}\n />\n <div className=\"text-base flex flex-col items-center\">\n <span className=\"font-medium\">\n {loTrinhDetail.tracNghiemHoanThanh}/\n {loTrinhDetail.tongTracNghiem}{\" \"}\n </span>\n <span className=\"text-sm\">Trắc nghiệm </span>\n </div>\n </div>\n <div className=\"flex flex-col items-center h-full justify-center space-y-3 w-1/4 lg:w-1/5\">\n <Progress\n format={(percent) => (\n <span style={{ color: \"rgb(234, 83, 172)\" }}>{percent}% </span>\n )}\n strokeColor={\"rgb(234, 83, 172)\"}\n trailColor={\"rgba(234, 83, 172,0.3)\"}\n type=\"circle\"\n className=\"md:w-24 lg:w-28 xl:w-32\"\n strokeWidth={10}\n percent={percentBaiTapNop}\n />\n\n <div className=\"text-base flex flex-col items-center\">\n <span className=\"font-medium\">\n {loTrinhDetail.baiTapNopHoanThanh}/{loTrinhDetail.tongBaiTapNop}{\" \"}\n </span>\n <span className=\"text-sm\"> Bà i táºp ná»™p</span>\n </div>\n </div>\n <div className=\"flex flex-col items-center h-full justify-center space-y-3 w-1/4 lg:w-1/5 md:hidden lg:flex \">\n <Progress\n format={(percent) => (\n <span className=\"\" style={{ color: \"rgba(253, 206, 0, 1)\" }}>\n {percent}%{\" \"}\n </span>\n )}\n strokeColor={\"rgb(253, 206, 0)\"}\n trailColor={\"rgba(253, 206, 0, 0.3)\"}\n type=\"circle\"\n className=\"md:w-24 lg:w-28 xl:w-32\"\n strokeWidth={10}\n percent={percentDay}\n format={() => (\n <span\n style={{ color: \"rgb(253, 206, 0)\" }}\n className=\"text-sm font-medium\"\n >\n {\" \"}\n <span className=\"text-base\">\n {remainDay < 0 ? \"Hết hạn\" : remainDay}\n </span>{\" \"}\n ngà y\n </span>\n )}\n />\n <StartEndDay loTrinh={loTrinhDetail} />\n </div>\n </div>\n </div>\n\n {/* <div className=\"flex space-x-5 items-center mb-8\">\n <p className=\"text-base font-normal text-color-title w-max flex-shrink-0\">\n Há»c viên đã đăng kÃ\n </p>{\" \"}\n <Registed_Users_Bar\n dsAvatar={loTrinhDetail.dsAvatar}\n totalUser={loTrinhDetail.tongHocVien}\n />\n </div> */}\n </div>\n );\n}\n\nexport default CardDetailLoTrinh = React.memo(CardDetailLoTrinh);\n","import React from \"react\";\nimport \"./CardLoTrinh_design_code.css\";\nimport StartEndDay from \"./StartEndDay\";\nimport LazyLoad from \"react-lazyload\";\nimport { getHinhAnh } from \"../../../utils/GetHinhanh\";\nimport { BASE_URL_CODINGCAMP } from \"../../../services/axios.service\";\n\nexport default function IntroLoTrinh({\n loTrinh,\n isHoverActive,\n btn_tuVan,\n isBlackFridayDay = false,\n}) {\n return (\n <div\n className={\n isHoverActive\n ? `HandbookCard__Wrapper-sc-7b5434-1 hoyCxl cursor-pointer card_design_code activeHover h-full`\n : `HandbookCard__Wrapper-sc-7b5434-1 hoyCxl cursor-pointer card_design_code h-full `\n }\n >\n\n <div className=\" iusqHF flex items-center justify-between \">\n <div className=\"HandbookCard__TextWrapper-sc-7b5434-5 kqcNFY\">\n\n <h3 className=\"TextStyles__H3H5-h7d1e3-6 HandbookCard__Title-sc-7b5434-7 hpcBLU md:text-lg lg:text-xl\">\n {loTrinh.tenGoi.toUpperCase()}\n </h3>\n <p className=\"TextStyles__SmallText-h7d1e3-12 HandbookCard__Description-sc-7b5434-8 jslvrh\"></p>\n\n {/* <div className=\"flex space-y-2 items-start flex-col flex-shrink-0 font-medium\">\n Thá»i hạn truy xuất : {loTrinh.thoiHan} tháng\n </div> */}\n\n </div>\n </div>\n <div\n color=\"linear-gradient(180deg, #408DD5 0%, #630B8C 100%)\"\n className=\"HandbookCard__SecondBackground-sc-7b5434-3 lcvTnr cursor-pointer card_design_code_bg\"\n />\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\n\nimport { Tabs } from \"antd\";\n\nimport Static_Public from \"./Static_Public\";\nimport CardDetailLoTrinh from \"./CardDetailLoTrinh\";\nimport IntroLoTrinh from \"./IntroLoTrinh\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useLstLoTrinh } from \"../../../hook/useLstLoTrinhUser\";\nimport { useLstImgTag } from \"../../../hook/useLstImgTag\";\n\nconst { TabPane } = Tabs;\nexport default function CardLoTrinh({ btn_tuVan, loTrinh, arrChuyenDe, isBlackFridayDay = false }) {\n const { data, isLoading, error } = useLstLoTrinh();\n const renderTask = (soLuong, maLoai) => {\n let icon = \"\"\n let title = \"\"\n switch (maLoai) {\n case 'RUNCODE':\n icon = \"fa-code\"\n title = \"Runcode\"\n break\n case 'VIDEO':\n icon = \"fa-video\"\n title = \"Video\"\n break\n case 'TASK':\n icon = \"fa-tasks\"\n title = \"Task\"\n break\n case 'QUIZ':\n icon = \"fa-question-circle\"\n title = \"Quizz\"\n break\n case 'HOMEWORK':\n icon = \"fa-question-circle\"\n title = \"BTVN\"\n break\n case 'TAILIEU':\n icon = \"fa-book\"\n title = \"Tà i liệu\"\n break\n case 'BAITAP':\n icon = \"fa-file-alt\"\n title = \"Bà i táºp\"\n break\n case 'DUAN':\n icon = \"fa-gavel\"\n title = \"Dá»± án\"\n break\n case 'CAPS':\n icon = \"fa-users\"\n title = \"Capstone\"\n break\n }\n return <div className='flex flex-col items-center justify-between'><i className={`p-0 m-0 text-lg fas ${icon}`}></i><p className='text-center p-0 m-0'>{soLuong} {title}</p></div>\n }\n\n const navigate = useNavigate();\n const { data:listImgTag , isLoading:isLoadingTag, error:errorTag } = useLstImgTag();\n const [collapsed, setCollapsed] = useState(true);\n let isDemoUser = useMemo(() => isBlackFridayDay, [])\n let ds = JSON.parse(loTrinh.danhSachKhoaHoc)\n console.log(loTrinh)\n return (\n <div\n className=\"w-full mb-16 animation_loTrinh \"\n // ref={ref_Props}\n id={loTrinh.id}\n >\n <div\n className=\" \"\n // data-tour=\"loTrinh-step2\"\n data-tour=\"loTrinhCuaBan-step1\"\n >\n <div\n className=\" flex w-full md:h-72 lg:h-72 h-64\"\n data-tour=\"loTrinh-step2\"\n // data-tour=\"loTrinhCuaBan-step1\"\n >\n <div\n onClick={() => {\n setCollapsed(!collapsed);\n }}\n className=\"flex-shrink-0 h-full relative mr-5\"\n >\n <IntroLoTrinh\n isBlackFridayDay={isBlackFridayDay}\n isShowDate={false}\n loTrinh={loTrinh}\n isHoverActive={!collapsed}\n btn_tuVan={btn_tuVan}\n />\n </div>\n <div\n onClick={() => {\n setCollapsed(!collapsed);\n }}\n className=\"w-full h-full flex justify-between relative cursor-pointer\"\n >\n <Static_Public isBlackFridayDay={isBlackFridayDay} loTrinhPublic={loTrinh}></Static_Public>\n\n <div className=\" z-40 absolute bottom-0 translate-y-1/2 left-1/2 transform -translate-x-1/2 \">\n {/* <Curved_Button collapsed={collapsed} /> */}\n </div>\n </div>\n </div>\n </div>\n\n <div\n style={{\n height: collapsed ? 0 : \"max-content\",\n marginTop: collapsed ? \"0\" : \"40px\",\n opacity: collapsed ? \"0\" : \"1\",\n }}\n className={\n collapsed\n ? \"w-full duration-150 overflow-hidden\"\n : \"w-full duration-200 border-fade card_theme\"\n }\n data-tour=\"loTrinh-step3\"\n >\n <div data-tour=\"loTrinhCuaBan-step2\" className=\"loTrinhCuaBan-step2\">\n <Tabs defaultActiveKey=\"1\" className=\"p-3\">\n <TabPane tab=\"Khoá há»c trong lá»™ trình\" key=\"1\">\n {isLoading && <div className='flex justify-center'> <div className=' loading_progress'></div></div>}\n <div className=\"grid gap-8 grid-cols-3 md:grid-cols-1 sm:grid-cols-1 lg:grid-cols-2 place-content-center w-full place-items-center py-10\">\n {data&& ds.map((cd, idx1) => {\n const item = data?.find(a => a.chuyenDeId === cd)\n return <div className=\"course-card cursor-pointer\" >\n <div className=\"course-header\" onClick={() => {\n navigate(`/task-page-free/${item.chuyenDeId}`);\n }}>\n <img className='w-full overflow-hidden' src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt=\"Khóa há»c Fullstack: Dá»± án Monday từ A đến Z\" />\n \n </div>\n <div className=\"content__group flex flex-col justify-between \">\n <div className=\"course-content\" onClick={() => {\n navigate(`/task-page-free/${item.chuyenDeId}`);\n }}>\n <h4 className=\"text-xl font-bold text-gray-800 mt-0 mb-2\">{item.tenChuyenDe}</h4>\n <div className=\"course-info\">\n {item?.thongKeChuyenDe?.filter(({ tongSoLuong }) => tongSoLuong > 0)\n .map(({ tongSoLuong, tieuDe, maLoai }, index) => {\n return (\n renderTask(tongSoLuong, maLoai)\n );\n })}\n\n\n </div>\n <div className=\"flex flex-wrap mb-2\">\n {item?.danhSachTag?.map((tag) => {\n let item1 = listImgTag?.find((item1) => {\n return item1?.value == tag;\n });\n return (\n <div className='md:w-8 md:h-8 w-10 h-10 p-1'>\n <img className=\"w-full h-full object-cover\" src={item1?.image} alt />\n\n </div>\n );\n })}\n </div>\n\n </div>\n </div>\n </div>\n })}\n </div>\n </TabPane>\n\n </Tabs>\n </div>\n </div>\n </div>\n );\n}","\nimport { Dropdown, Layout, Menu, Modal, Select } from 'antd';\nimport { Content, Header } from 'antd/lib/layout/layout';\nimport React, { Fragment, useEffect, useRef, useState } from 'react';\n\nimport axios from 'axios';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { Element, Link } from 'react-scroll';\nimport { useLstLoTrinh, useLstLoTrinhUser } from '../../../hook/useLstLoTrinhUser';\nimport { setListImageTag } from '../../../redux/reducer/dashboardSlice';\nimport { checkActiveNavlink, parentPage } from '../../../routes/utitlity';\nimport localStorageServ from '../../../services/locaStorage.service';\nimport { dataHeaderPackage } from '../../../template/utils';\nimport { API_URL_DOMAIN, emailFree } from '../../../utils/urlDomain';\nimport CardLoTrinh from '../CardLoTrinh/CardLoTrinh';\nimport PackageTableV2 from '../PackageTableV2';\nimport './style.css';\nimport useWindowSize from '../../../hook/useWindowSize';\nimport { history } from '../../../App';\nimport HeaderBottom from '../../../template/HeaderBottom/HeaderBottom';\nimport { useLstImgTag } from '../../../hook/useLstImgTag';\nimport DropdownLoTrinh from '../../../template/HeaderTask/DropdownLoTrinh';\nimport { checkLearning } from '../../../utils/HocDemoUtils';\nimport ZaloBtn from '../../../components/ZaloOA/ZaloOA';\nimport FBChat from '../../../components/FacebookChat/FBChat';\nconst ViewPackage = () => {\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 639 ? true : false\n const refs = useRef([]);\n let userInfo = localStorageServ.userInfo.get();\n const dispatch = useDispatch()\n const { t, i18n } = useTranslation()\n const navigate = useNavigate();\n let userId = localStorageServ.userInfo.get()?.id;\n\n const [arrPackage, setArrPackage] = useState()\n const [arrChuyenDe, setArrChuyenDe] = useState()\n const [cdDangHoc, setCdDangHoc] = useState()\n const { data, isLoading, error } = useLstLoTrinh();\n\n const { data:listImgTag , isLoading:isloadTag, error:errorTag } = useLstImgTag();\n let img_warp = \"md:w-8 md:h-8 w-10 h-10 p-1\";\n //onclick chuyende\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [chuyenDeId, setChuyenDeId] = useState(false);\n const [isComBo, setIsCombo] = useState(false);\n console.log(isComBo)\n const showModal = (id, bool) => {\n setChuyenDeId(id)\n setIsCombo(bool)\n setIsModalOpen(true);\n };\n const handleOk = () => {\n setIsModalOpen(false);\n };\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n const renderTask = (soLuong, maLoai) => {\n let icon = \"\"\n let title = \"\"\n switch (maLoai) {\n case 'RUNCODE':\n icon = \"fa-code\"\n title = \"Runcode\"\n break\n case 'VIDEO':\n icon = \"fa-video\"\n title = \"Video\"\n break\n case 'TASK':\n icon = \"fa-tasks\"\n title = \"Task\"\n break\n case 'QUIZ':\n icon = \"fa-question-circle\"\n title = \"Quizz\"\n break\n case 'HOMEWORK':\n icon = \"fa-question-circle\"\n title = \"BTVN\"\n break\n case 'TAILIEU':\n icon = \"fa-book\"\n title = \"Tà i liệu\"\n break\n case 'BAITAP':\n icon = \"fa-file-alt\"\n title = \"Bà i táºp\"\n break\n case 'DUAN':\n icon = \"fa-gavel\"\n title = \"Dá»± án\"\n break\n case 'CAPS':\n icon = \"fa-users\"\n title = \"Capstone\"\n break\n }\n return <div className='flex flex-col items-center justify-between'><i className={`p-0 m-0 text-lg fas ${icon}`}></i><p className='text-center p-0 m-0'>{soLuong} {title}</p></div>\n }\n\n const [arrRes, setArrRes] = useState()\n useEffect(() => {\n let res = []\n arrPackage?.forEach(item => {\n const existingItem = res.find(r => r.danhSachKhoaHoc === item.danhSachKhoaHoc);\n\n if (existingItem) {\n existingItem.info.push(item);\n } else {\n res.push({\n ...item,\n info: [item]\n\n });\n }\n });\n setArrRes(res)\n }, [arrPackage])\n useEffect(() => {\n axios\n .get(`${API_URL_DOMAIN}/package`)\n .then((res) => {\n setArrPackage(res.data.content)\n })\n .catch((err) => {\n console.log(err);\n });\n axios\n .get(`${API_URL_DOMAIN}/chuyende`)\n .then((res) => {\n setArrChuyenDe(res.data.content)\n })\n .catch((err) => {\n console.log(err);\n });\n axios\n .get(`${API_URL_DOMAIN}/dangkyhoc/get-theo-user/${userId}`)\n .then((res) => {\n setCdDangHoc(res.data.content)\n })\n .catch((err) => {\n console.log(err);\n });\n }, [])\n const menu = (\n <Menu className=\"p-4 space-y-5 rounded dropdown-lo-trinh\">\n {data?.map(({ tenChuyenDe, chuyenDeId, notify, isActive }) => {\n if (isActive) {\n return (\n <div key={chuyenDeId} className=\"shadow cursor-pointer relative\">\n\n {notify && <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"></span>}\n <NavLink\n to={`/${parentPage.taskFree}/${chuyenDeId}`}\n\n >\n\n\n {tenChuyenDe.toUpperCase()}\n </NavLink>\n </div>\n )\n }\n })}\n </Menu>\n );\n const menuGoi = (\n <Menu className=\"p-4 space-y-5 rounded dropdown-lo-trinh\">\n {arrRes?.map((item, idx) => {\n let ds = JSON.parse(item.danhSachKhoaHoc)\n if (ds.length > 1) {\n return (\n <div key={idx} className=\"shadow cursor-pointer relative\">\n <Link to={item.danhSachKhoaHoc} smooth={true} duration={500}>{item.tenGoi.toUpperCase()}</Link>\n </div>\n )\n }\n })}\n </Menu>\n )\n return (\n <Layout style={{ minHeight: \"100vh\" }}>\n <Header\n style={{\n background: \"black\",\n padding:isPhone?'0 10px':''\n }}\n className=\"flex h-20 fixed top-0 left-0 w-full z-50 items-center justify-between space-x-5\"\n >\n <div\n onClick={() => {\n navigate(\"/dash-broad\");\n }}\n className=\"logo w-23 flex-shrink-0 h-ful flex items-center cursor-pointer\"\n >\n <img src=\"https://apimentor11.cybersoft.edu.vn//images/24-04-2024-10-46-20-logo-codezuni.png\" alt=\"\" />\n </div>\n {isPhone ? \"\" :\n\n <div className=\"flex rounded-xl relative items-center h-10 \">\n {(!userInfo || userInfo?.email==emailFree) ? dataHeaderPackage.map((item, index) => {\n if (item.key == 1) {\n return (\n <div className=\"relative\">\n {data?.map((({ notify }) => notify &&\n\n <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"></span>\n ))}\n <Dropdown arrow overlay={menu}>\n <p className=\"p-1 px-3 flex justify-center text-content text-sm items-center rounded-xl z-10 relative duration-500 text-button uppercase whitespace-nowrap cursor-pointer space-x-2\">\n <span className={checkActiveNavlink(parentPage.taskFree) ? \"active-link\" : \"\"}>\n {\" \"}\n <i className=\"pe-2 fa-solid fa-road\"> </i>\n\n {t('header.loTrinh')}\n <i className=\"pl-2 fa fa-caret-down \"></i>\n </span>\n </p>\n </Dropdown>\n </div>\n )\n }\n else if (item.key == 2) {\n return (\n <div className=\"relative\">\n {data?.map((({ notify }) => notify &&\n\n <span class=\"dot-notify absolute inline-flex h-4 w-4 -top-1 -right-1 rounded-full z-10 \"></span>\n ))}\n <Dropdown arrow overlay={menuGoi}>\n <p className=\"p-1 px-3 flex justify-center text-content text-sm items-center rounded-xl z-10 relative duration-500 text-button uppercase whitespace-nowrap cursor-pointer space-x-2\">\n <span>\n <i className=\"pe-2 fa-solid fa-road\"> </i>\n\n {t('header.combo')}\n <i className=\"pl-2 fa fa-caret-down \"></i>\n </span>\n </p>\n </Dropdown>\n </div>\n )\n }\n })\n :\n <DropdownLoTrinh/>\n }\n </div>\n\n }\n <div className='flex'><div className=\"lang\">\n <Select\n style={{ width: 100, fontSize: 18, color: \"white\" }}\n value={localStorage.getItem(\"lang\")}\n onChange={(value) => {\n localStorage.setItem(\"lang\", value)\n window.location.reload()\n }}\n options={[{ value: 'vi', label: '🇻🇳 VI' }, { value: 'en', label: '🇺🇸 EN' }]}\n\n\n />\n </div>\n <div\n onClick={() => {\n localStorageServ.userInfo?.remove();\n window.location.href = \"/login\";\n }}\n style={{ color: \" rgb(255, 210, 32)\" }}\n className=\" cursor-pointer flex items-center justify-start space-x-2 flex-shrink-0\"\n >\n <p className=\"\">\n {\" \"}\n {userInfo?.email == emailFree || !userInfo\n ? t(\"header.dangNhap\")\n : t(\"header.dangXuat\")}\n </p>{\" \"}\n <i className=\"fa fa-sign-out-alt \"></i>\n </div>\n </div>\n\n </Header>\n {isPhone && (\n <div\n style={{\n // background:\"#fff\",\n zIndex: 100,\n // padding: isPhone ? \"0 10px\" : \"\",\n }}\n className=\"flex h-16 fixed bottom-0 left-0 w-full items-center justify-between space-x-5\"\n >\n <HeaderBottom />\n </div>\n )}\n <Layout>\n <Layout\n style={{\n margin: `80px 0 0 0`,\n padding: \"0\",\n }}\n className=\"bg-content\"\n >\n <Content>\n\n <div className='container'>\n <h2 className=\"tenChuyenDe text-center\">Danh sách khóa há»c</h2>\n {isLoading && <div className='flex justify-center'> <div className=' loading_progress'></div></div>}\n <div className=\"grid gap-8 grid-cols-3 md:grid-cols-2 sm:grid-cols-1 lg:grid-cols-2\">\n\n {data && data.map((item, index) => {\n const cd = arrChuyenDe?.find(a => a.id === item.chuyenDeId)\n let isLearning = checkLearning(item.chuyenDeId,cdDangHoc )\n console.log('isLearning: ', isLearning);\n\n if (item.isActive) {\n return <div className=\"course-card cursor-pointer\" >\n <div className=\"course-header\" onClick={() => {\n if(isLearning){\n history.push(`/task-page/${item.chuyenDeId}`)\n }\n else{\n history.push(`/task-page-free/${item.chuyenDeId}`)\n }\n }}>\n <img className='w-full overflow-hidden' src={`https://apimentor11.cybersoft.edu.vn/${item.hinhAnh}`} alt={item?.tenChuyenDe} />\n <div className=\"discount-badge\">{-(100 - ((cd?.hocPhiGiam / cd?.hocPhi) * 100)).toFixed(0)}%</div>\n </div>\n <div className=\"content__group flex flex-col justify-between \">\n <div className=\"course-content\" onClick={() => {\n if(isLearning){\n history.push(`/task-page/${item.chuyenDeId}`)\n }\n else{\n history.push(`/task-page-free/${item.chuyenDeId}`)\n }\n }}>\n <h4 className=\"text-xl font-bold text-gray-800 mt-0 mb-2\">{item.tenChuyenDe}</h4>\n <div className=\"course-info\">\n {item.thongKeChuyenDe\n .filter(({ tongSoLuong }) => tongSoLuong > 0)\n .map(({ tongSoLuong, tieuDe, maLoai }, index) => {\n return (\n renderTask(tongSoLuong, maLoai)\n );\n })}\n\n\n </div>\n <div className=\"flex flex-wrap mb-2\">\n {item?.danhSachTag.map((tag) => {\n let item1 = listImgTag?.find((item1) => {\n return item1?.value == tag;\n });\n return (\n <div className={img_warp}>\n <img className=\"w-full h-full object-cover rounded\" src={item1?.image} alt />\n\n </div>\n );\n })}\n {/* <img src={`https://skillicons.dev/icons?i=${item?.danhSachTag.join(',').toLowerCase()}`} alt=\"\" /> */}\n </div>\n\n </div>\n <div className=\"text-center pb-4\">\n <div className='mb-2 text-left px-4'>\n <p className='mentor-support text-lg font-bold '>\n <i className=\"fa-regular fa-user-group-simple \"></i> Mentor support 1 - 1\n </p>\n <p className='ai-support text-lg font-bold'>\n <i className=\"fa-regular fa-user-robot-xmarks\"></i> AI support 24/7\n </p>\n </div>\n <div className='flex justify-around'>\n {/* <button className=\"btn_theme_red\" onClick={() => {\n showModal(item.chuyenDeId,false)\n }}>Mua lẻ</button>\n <button className=\"btn_theme_red\" onClick={() => {\n showModal(item.chuyenDeId,true)\n }}>Combo</button> */}\n <button className=\"btn_theme_package\" onClick={() => {\n // showModal(item.chuyenDeId, true)\n if(isLearning){\n history.push(`/task-page/${item.chuyenDeId}`)\n }\n else{\n history.push(`/task-page-free/${item.chuyenDeId}`)\n }\n }}>{isLearning?'Tiếp tục há»c':'Há»c thá» miá»…n phÃ'}</button>\n </div>\n </div>\n {/* <div className=\"course-footer\">\n <div className=\"price-container\">\n <span className=\"price-discount\">{cd?.hocPhi.toLocaleString()}Ä‘</span>\n <span className=\"price\">{cd?.hocPhiGiam.toLocaleString()}Ä‘</span>\n </div>\n <button className=\"course-button\" onClick={() => { \n showModal(item.chuyenDeId)\n }}>Há»c thá» miá»…n phÃ</button>\n </div> */}\n </div>\n </div>\n\n\n }\n })}\n </div>\n </div>\n <div className=\"py-8\">\n <h2 className=\"tenChuyenDe text-center\">Danh sách combo</h2>\n <div className=\"container group \">\n\n\n <div className=\"w-full mt-14 \">\n <div className=\"lg:w-full xl:container xl:px-10 mx-auto text-color-title mt-10 \">\n <div className=\"flex justify-center flex-wrap w-full \">\n {arrRes && arrRes.map((item, idx) => {\n let ds = JSON.parse(item.danhSachKhoaHoc)\n if (ds.length > 1) {\n return <Element name={item.danhSachKhoaHoc}>\n <CardLoTrinh\n\n arrChuyenDe={arrChuyenDe}\n ref_Props={(element) => {\n refs.current[idx] = element;\n }}\n btn_tuVan={!false}\n\n title={item.tenGoi.toUpperCase()}\n key={idx}\n loTrinh={item}\n ></CardLoTrinh>\n </Element>\n\n }\n\n })}\n </div>\n </div>\n\n </div>\n </div>\n\n\n </div>\n <Modal visible={isModalOpen} onOk={handleOk} onCancel={handleCancel}\n className='modelPackage'\n footer={null}\n // bodyStyle={{\n // overflow: \"hidden\",\n // }}\n width='90%'\n style={{\n // maxWidth: \"900px\",\n // minWidth: \"400px\",\n top: 10,\n // width: \"90%\",\n }}>\n <PackageTableV2 id={chuyenDeId} arrChuyenDe={arrChuyenDe} isCombo={isComBo} />\n </Modal>\n </Content>\n \n <ZaloBtn/>\n <FBChat/>\n\n </Layout>\n </Layout>\n </Layout>\n )\n}\n\nexport default ViewPackage\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, Select, Radio, Modal } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { message } from \"antd\";\nimport {\n setCurrentStep,\n setUserInfor,\n} from \"../../../redux/reducer/signUpReducer\";\nimport httpServ from \"../../../services/http.service\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport axios from \"axios\";\nimport { history } from \"../../../App\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nimport CustomInput from \"../../../components/CustomInput/CustomInput\";\nexport default function FormDieuKhoanPhone({ handleOpenModal }) {\n // start\n \n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow< 768?true:false\n const regisPackage = localStorageServ.regisPackage.get();\n const khoa_hoc = localStorageServ.khoahoc.get();\n const [congViecHienTai, setCongViecHienTai] = useState(\"SV\");\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue({\n congViecHienTai1: \"SV\",\n luongMongMuon: 0,\n // hoTenPH: \"\",\n // emailPH: \"\",\n // emailPH: \"\",\n });\n }, []);\n // end\n const { Option } = Select;\n let { currentStep } = useSelector((state) => state.signUp);\n const { userInfo } = useSelector((state) => state.signUp);\n const onFinish = (values) => {\n let newUserInfor = JSON.parse(JSON.stringify(userInfo));\n\n let sdt = values.soDT;\n if (sdt.length > 0 && sdt[0] === \"+\") {\n sdt = sdt.split(\"\"); // or newStr = [...str];\n sdt.splice(0, 1);\n\n sdt = sdt.join(\"\");\n }\n newUserInfor.maGioiThieu = localStorage.getItem(\"maGioiThieu\")?localStorage.getItem(\"maGioiThieu\"):\"\"\n newUserInfor.email = values.email;\n newUserInfor.hoTen = values.hoTen;\n newUserInfor.soDT = sdt;\n newUserInfor.thongTinMoRong.noiCongTacHienTai = values.noiCongTac;\n newUserInfor.thongTinMoRong.congViecHienTai = JSON.stringify([\n values.congViecHienTai1,\n values.congViecHienTai2,\n values.congViecHienTai3,\n ]);\n // thong tin phụ huynh\n if (values.hoTenPH) {\n newUserInfor.thongTinMoRong.hoTenPH = values.hoTenPH;\n newUserInfor.thongTinMoRong.emailPH = values.emailPH;\n newUserInfor.thongTinMoRong.soDTPH = values.soDTPH;\n }\n\n httpServ\n .getCheckGmail(values.email)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Email đã tồn tại\");\n } else {\n httpServ\n .getCheckSDT(sdt)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Số Ä‘iện thoại đã tồn tại\");\n } else {\n // dispatch(setUserInfor(newUserInfor));\n const obj2 = {\n \"id\": 0,\n \"hoTen\": newUserInfor.hoTen,\n \"email\": newUserInfor.email,\n \"soDT\": newUserInfor.soDT,\n \"diaDiem\": khoa_hoc?khoa_hoc:\"Há»c free\",\n \"loaiForm\": \"codezuni\"\n }\n axios.post(\"https://apicrm.cybersoft.edu.vn/api/leadform\", obj2, {\n headers: {\n Authorization:\n \"Bearer eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyZWQiOiI0LzE1LzIwNDcgNDowMjowOCBQTSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiIxZDcxYmZlMi1jOWQ0LTQxMTEtYjZmMy1mOTJlZGVmZDgxYjIiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJwaHVvbmdhMHBuQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6WyJRTF9CTSIsIkNIRUNLX01FTlRPUl9MT1AiLCJSX0xPUCIsIlFMX0dDIiwiUUxfQ0hUTCIsIlFMX1JNIiwiUUxfVEtEIiwiUUxfTENOIiwiRF9CVCIsIkZfR0MiLCJSX1ZMIiwiUl9CSCIsIkZfTE9QIiwiQU5ZIiwiRF9ORCIsIlVfTkQiLCJDX05EIiwiUl9ORCIsIkRfS0giLCJVX0tIIiwiQ19LSCIsIlJfS0giLCJHRF9MSCIsIlhfS0hfTCIsIkRfREFOSCIsIlFMX0NMIiwiUUxfQkwiLCJRTF9MVCIsIlFMX0tIIiwiQ19MT1AiLCJVX0xPUCIsIktfQ0hFQ0tfTCIsIlFMX0NDTiIsIlFMX0tLSFYiLCJVX05HQVlfQkgiLCJVX0hBTl9CVCIsIlFMX0hNVCIsIkRLX01UIiwiWF9MRk9STSJdLCJuYmYiOjE3MTMxNzE3MjgsImV4cCI6MTcxMzE3NTMyOH0.84tVM6RM1yIamp-ma1BpiTAysbj1YY99l4TEkyHcMSw\",\n },\n });\n servCodingCamp.postDangKyUserV2(newUserInfor).then((res) => {\n localStorageServ.inforSignUp.set(res.data.content);\n dispatch(setCurrentStep(1));\n \n if (regisPackage && regisPackage != 0) {\n history.push(\"/confirm-payment\");\n }\n })\n .catch((err) => {\n console.log(err);\n });\n }\n })\n .catch((err) => {\n // console.log(\"yes\");\n });\n }\n })\n .catch((err) => {});\n };\n const dispatch = useDispatch();\n\n const onFinishFailed = (errorInfo) => {\n // console.log(\"Failed:\", errorInfo);\n };\n const [thanks, setThanks] = useState(true);\n const [isVietNam, setIsVietNam] = useState(true);\n const handleNoiHocTap = (value) => {\n value === \"vn\" ? setIsVietNam(true) : setIsVietNam(false);\n };\n const handleClick = () => {\n setThanks(false)\n const currentUrl = new URL(window.location.href);\n const linkMoTa = currentUrl.searchParams.get('linkMoTa');\n if (linkMoTa) {\n if (window.innerWidth > 768) {\n window.open(linkMoTa, '_blank');\n }\n }\n }\n const handleValidateEmail = (_, value, callback) => {\n httpServ\n .getCheckGmail(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Email đã tồn tại\");\n }\n })\n .catch((err) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n // console.log(\"yes\");\n });\n });\n };\n const handleValidateSDT = (_, value, callback) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n callback(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n callback();\n });\n };\n let subFormHocVien = (\n <>\n <Form.Item\n // label=\"Há» và tên\"\n name=\"hoTen\"\n rules={[{ required: true, message: \"TrÆ°á»ng nà y không được để trống\" }]}\n >\n <CustomInput placeholder=\"Há» và tên\"/>\n </Form.Item>\n <Form.Item\n // label=\"Email\"\n name=\"email\"\n rules={[\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n {/* <Input /> */}\n <CustomInput placeholder=\"Email\" />\n </Form.Item>\n <Form.Item\n // label=\"Số ÄT\"\n name=\"soDT\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder=\"Số DT\"/>\n </Form.Item>\n </>\n );\n let renderFormPhuHuynh = () => {\n if (congViecHienTai == \"C2\" || congViecHienTai == \"C3\") {\n return (\n <>\n <p className=\"text-white py-2\">\n {\" \"}\n Bạn vui lòng cung cấp thông tin phụ huynh của bạn để CodeZuni thông báo\n thông tin há»c táºp của bạn đến Phụ huynh khi cần nhé ( Sau đây gá»i\n tắt là Phụ Huynh ) :\n </p>\n\n <Form.Item\n name=\"hoTenPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n >\n <CustomInput placeholder=\"Há» và tên\"/>\n </Form.Item>\n <Form.Item\n name=\"emailPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <CustomInput placeholder=\"Email\"/>\n </Form.Item>\n <Form.Item\n name=\"soDTPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder=\"Số DT\"/>\n </Form.Item>\n </>\n );\n }\n };\n return (\n <div className=\"w-full flex justify-center flex-col items-center h-full\">\n <Form\n layout=\"vertical\"\n name=\"basic\"\n className={`${isPhone?'':'container'}`}\n labelCol={{ sm: { span: 6 }, xl: { span: 4 } }}\n wrapperCol={{ span: 24 }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n {/* <Form.Item className=\"mb-2\" label=\"Bạn Ä‘ang là :\" name=\"congViecHienTai1\" rules={[]}>\n <Radio.Group\n onChange={(e) => {\n setCongViecHienTai(e.target.value);\n // console.log(e.target.value);\n }}\n defaultValue=\"SV\"\n >\n <Radio className=\"text-white\" value=\"SV\">\n Sinh viên CNTT\n </Radio>\n <Radio className=\"text-white\" value=\"DL\">\n CNTT đã Ä‘i là m{\" \"}\n </Radio>\n <Radio className=\"text-white\" value=\"TN\">\n Trái ngà nh\n </Radio>\n <Radio className=\"text-white\" value=\"C2\">\n Há»c sinh cấp 2\n </Radio>\n <Radio className=\"text-white\" value=\"C3\">\n Há»c sinh cấp 3\n </Radio>\n </Radio.Group>\n </Form.Item> */}\n\n {/* <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai2\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn há»c trÆ°á»ng nà o...?\"\n : congViecHienTai === \"DL\"\n ? \"Bạn là m công ty nà o...?\"\n : congViecHienTai == \"TN\"\n ? \"Bạn là m ngà nh gì...?\"\n : \"Bạn há»c trÆ°á»ng nà o?\"\n }\n />\n </Form.Item>\n <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai3\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn là sinh viên năm mấy...?\"\n : congViecHienTai === \"DL\"\n ? \"Bao nhiêu năm kinh nghiệm...?\"\n : congViecHienTai == \"TN\"\n ? \"Äã là m bao lâu...?\"\n : \"Bạn há»c lá»›p mấy?\"\n }\n />\n </Form.Item> */}\n {renderFormPhuHuynh()}\n\n {/* from phụ huynh */}\n <h4 className=\"text-white my-1\">\n Thông tin há»c viên ( Sau đây gá»i tắt là Há»c Viên ):\n </h4>\n {subFormHocVien}\n <Form.Item className=\"mb-0\" label=\"NÆ¡i há»c táºp/ là m việc\">\n <Input.Group compact>\n <Select\n onChange={handleNoiHocTap}\n defaultValue=\"Việt Nam\"\n style={{ width: 'auto' }}\n >\n <Option value=\"vn\">Việt Nam</Option>\n <Option value=\"tg\">Quốc gia khác</Option>\n </Select>\n {isVietNam ? (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Select placeholder=\"NÆ¡i ở/ là m việc\">\n <Option value=\"Hồ Chà Minh\">Hồ Chà Minh</Option>\n <Option value=\"Hà Ná»™i\">Hà Ná»™i</Option>\n <Option value=\"Cần ThÆ¡\">Cần ThÆ¡</Option>\n <Option value=\"Nha Trang\">Nha Trang</Option>\n <Option value=\"Huế\">Huế </Option>\n <Option value=\"Vinh\">Vinh</Option>\n <Option value=\"Khác\">Khác</Option>\n </Select>\n </Form.Item>\n ) : (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n )}\n </Input.Group>\n </Form.Item>\n\n {/* <Form.Item label=\"Mã giá»›i thiệu/Ưu đãi\" name=\"maGioiThieu\">\n <Input defaultValue=\"\" />\n </Form.Item> */}\n <Form.Item\n name=\"agreement\"\n label=\"\"\n valuePropName=\"checked\"\n rules={[\n {\n required: true,\n message: \"Hãy Ä‘á»c và đồng ý các Ä‘iá»u khoản của CodeZuni\",\n },\n ]}\n >\n <Checkbox className=\"text-white\">\n Tôi đồng ý vá»›i các{\" \"}\n <span\n onClick={() => {\n handleOpenModal();\n }}\n className=\"text-yellow-400 underline cursor-pointer\"\n >\n ÄIỀU KHOẢN\n </span>{\" \"}\n của CodeZuni\n </Checkbox>\n </Form.Item>\n <Form.Item\n wrapperCol={{ sm: { offset: 0 }, md: { offset: 4 }, span: 16 }}\n >\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button\n className=\"px-5 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Tiếp theo\n </Button>\n </div>\n </Form.Item>\n </Form>\n <p className=\"cursor-pointer\" onClick={() => { \n history.push('/login')\n }}>Äã có tà i khoản. <span className=\"underline\">Äăng nháºp</span></p>\n <div></div>\n <Modal\n visible={thanks}\n style={{\n top: 20,\n }}\n closable={false}\n\n footer={null}\n >\n <div className='text-center'>\n <p >Cảm Æ¡n bạn đã chá»n <b>CodeZuni</b>! Bạn vui lòng để lại thông tin để được tÆ° vấn <b>há»— trợ</b> và <b>nháºn Æ°u đãi</b> nhé</p>\n <button className='mt-2 btn_theme_red' onClick={handleClick}>Tiếp tục</button>\n </div>\n </Modal>\n </div>\n );\n}","import React, { useState } from \"react\";\nimport FormDieuKhoan from \"../SignUpDesktop/FormDieuKhoan\";\nimport ModalDieuKhoan from \"../SignUpDesktop/ModalDieuKhoan\";\nimport { useMediaQuery } from \"react-responsive\";\nimport FormDieuKhoanPhone from \"../SignUpDesktop/FormDieuKhoanPhone\";\nimport FormDieuKhoanUser from \"../SignUpDesktop/FormDieuKhoanUser\";\n\nexport default function ThongTinChinhFree() {\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 640 });\n return isDesktop ? children : null;\n };\n const Phone = ({ children }) => {\n const isTablet = useMediaQuery({maxWidth: 639 });\n \n return isTablet ? children : null;\n };\n const [isShowDieuKhoan, setIsShowDieuKhoan] = useState(false);\n const handleCloseModal = () => {\n setIsShowDieuKhoan(false);\n };\n const handleOpenModal = () => {\n setIsShowDieuKhoan(true);\n };\n\n return (\n <div className=\"w-full h-full p-3 flex flex-col items-center space-y-5 text-white\">\n <p className=\"uppercase text-lg lg:text-xl \">ÄÄ‚NG Kà THÔNG TIN CHÃNH</p>\n {/* <Desktop>\n <FormDieuKhoanUser handleOpenModal={handleOpenModal} />\n </Desktop>\n <Phone> */}\n <FormDieuKhoanPhone handleOpenModal={handleOpenModal} />\n {/* </Phone> */}\n \n <ModalDieuKhoan isShowDieuKhoan={isShowDieuKhoan} handleCloseModal={handleCloseModal} />\n </div>\n );\n}","import { Button } from \"antd\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport BtnLoginFacebook from \"../../../components/BtnLoginFacebook/BtnLoginFacebook\";\nimport FormLoginEmailPhone from \"../../LoginPageEmail/FormLoginEmailPhone\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\n\nexport default function HoanThanhFree() {\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow<768?true:false\n return (\n <div className=\"w-full flex flex-col space-y-10 justify-center items-center p-5 text-white\">\n <>\n <p className=\"text-lg lg:text-2xl\">ÄÄ‚NG Kà THÀNH CÔNG</p>\n\n {/* <Button className=\"px-5 bg-yellow-400 border-none text-black\" type=\"primary\" htmlType=\"submit\">\n <a href=\"/login\"> Vá» trang chủ</a>\n </Button> */}\n {/* <BtnLoginFacebook /> */}\n <div className=\" w-full flex-shrink-0 border-none p-5 flex flex-col items-start \">\n <div className=\" flex-grow w-full flex flex-col justify-center space-y-7 pb-24 relative z-10 items-center\">\n <BtnLoginFacebook />\n {isPhone && <>\n <span className=\"pt-3\">HOẶC</span>\n <div style={{width:'90%'}}>\n <FormLoginEmailPhone/>\n </div>\n </>}\n </div>\n </div>\n </>\n </div>\n );\n}","import React from \"react\";\nimport { Steps } from \"antd\";\nimport { useMediaQuery } from \"react-responsive\";\n\nimport { useSelector } from \"react-redux\";\nexport default function StepSignupFree() {\n const { currentStep } = useSelector((state) => state.signUp);\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 992 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n return isTablet ? children : null;\n };\n const Mobile = ({ children }) => {\n const isMobile = useMediaQuery({ maxWidth: 767 });\n return isMobile ? children : null;\n };\n const { Step } = Steps;\n\n return (\n <div className=\"text-white\">\n <Desktop>\n <Steps className=\"px-5 text-white\" current={currentStep}>\n <Step title=\"Thông tin chÃnh\" />\n {/* <Step title=\"Thông tin chi tiết\" /> */}\n <Step title=\"Hoà n thà nh\" />\n </Steps>\n </Desktop>\n <Tablet>\n <Steps current={currentStep}>\n <Step />\n {/* <Step /> */}\n <Step />\n </Steps>\n </Tablet>\n <Mobile>\n <Steps current={currentStep}>\n <Step />\n {/* <Step /> */}\n <Step />\n </Steps>\n </Mobile>\n </div>\n );\n}","import React, { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport ThongTinChinhFree from \"./ThongTinChinhFree\";\nimport ThongTinChiTietFree from \"./ThongTinChiTietFree\";\nimport HoanThanhFree from \"./HoanThanhFree\";\nimport StepSignupFree from \"./StepSignupFree\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nexport default function ContainerSigupDesktopFree() {\n \n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 639 ? true : false\n const { currentStep } = useSelector((state) => state.signUp);\n\n const renderConTentStep = () => {\n switch (currentStep) {\n case 0:\n return <ThongTinChinhFree />;\n\n case 1:\n return <HoanThanhFree />;\n default:\n break;\n }\n };\n return (\n <div className={`w-full h-full p-3 lg:p-5 ${isPhone?'space-y-1':'space-y-5'} flex-grow card-theme border-none `}>\n <StepSignupFree />\n <div className=\"lg:w-full w-2/3 mx-auto \">{renderConTentStep()}</div>\n </div>\n );\n}","import React, { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport BtnGoogleCapcha from \"../../../components/BtnGoogleCapcha/BtnGoogleCapcha\";\nimport { DARK_MODE, LIGHT_MODE } from \"../../../constants/theme\";\nimport { setModeTheme } from \"../../../redux/reducer/themeReducer\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport ContainerSigupDesktopFree from \"./ContainerSigupDesktopFree\";\n\nexport default function SignUpDesktopFree() {\n const dispatch = useDispatch();\n\n useEffect(() => {\n const root = window.document.documentElement;\n\n if (root.classList.remove(DARK_MODE)) {\n root.classList.remove(DARK_MODE);\n root.classList.remove(LIGHT_MODE);\n }\n localStorageServ.modeTheme.set(LIGHT_MODE);\n dispatch(setModeTheme(LIGHT_MODE));\n }, []);\n return (\n <div\n // style={{\n // backgroundImage: `url(${backGrountTemplate})`,\n // }}\n className=\"w-full min-h-screen overflow-y-auto bg-cover flex-col bg-fixed p-3 md:p-7 lg:p-10 flex sm:p-3 \"\n >\n <BtnGoogleCapcha />\n\n <div className=\" h-full w-full flex-grow flex flex-col relative overflow-y-auto overflow-x-hidden 2xl:container mx-auto\">\n <div className=\"w-full flex-grow flex flex-col card-theme\">\n <ContainerSigupDesktopFree />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport \"./Sigup.css\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport SignUpDesktopFree from \"./SignUpFree/SignUpDesktopFree\";\nvar qs = require(\"qs\");\n\nexport default function SignUpPageFree() {\n // useEffect(() => {\n // let { reffer } = qs.parse(window.location.search, {\n // ignoreQueryPrefix: true,\n // });\n\n // reffer && localStorageServ.referLink.set(reffer);\n // }, []);\n\n\n return <SignUpDesktopFree />;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, DatePicker, Radio } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport httpServ from \"../../../services/http.service\";\nimport moment from \"moment\";\nimport \"moment/locale/vi\";\nimport { setCurrentStep, setUserInfor } from \"../../../redux/reducer/signUpReducer\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { history } from \"../../../App\";\nimport UploadImg from \"../SignUpDesktop/UploadImg\";\nimport Modal_MinhHoa from \"../SignUpDesktop/Modal_MinhHoa\";\n\nexport default function FormThongTinChiTietTV() {\n const dispatch = useDispatch();\n const [form] = Form.useForm();\n const regisPackage = localStorageServ.regisPackage.get();\n useEffect(() => {\n form.setFieldsValue({\n congViecHienTai1: \"SV\",\n luongMongMuon: 0,\n });\n }, []);\n let { currentStep } = useSelector((state) => state.signUp);\n const [listLoTrinh, setListLoTrinh] = useState([]);\n const [listCMND_IMG, setListCMND_IMG] = useState([]);\n const { userInfo } = useSelector((state) => state.signUp);\n useEffect(() => {\n httpServ\n .getMaVaTenLoTrinh()\n .then((res) => {\n setListLoTrinh(res.data.content);\n })\n .catch((err) => {\n // console.log(err);\n });\n }, []);\n const hadleGetImgAfterConver = (value) => {\n setListCMND_IMG(value);\n };\n const onFinish = (values) => {\n // console.log(\"Success form:\", values);\n let newUserInfor = JSON.parse(JSON.stringify(userInfo));\n newUserInfor.thongTinMoRong.namSinh = moment(values.namSinh).format(\"MM/DD/YYYY\");\n // newUserInfor.thongTinMoRong.hinhCmnd = JSON.stringify(listCMND_IMG);\n newUserInfor.thongTinMoRong.hinhCmnd = listCMND_IMG;\n newUserInfor.thongTinMoRong.luongMongMuon = values.luongMongMuon ? values.luongMongMuon * 1 : 0;\n // newUserInfor.maLoTrinh = values.maLoTrinh;\n newUserInfor.thongTinMoRong.facebookUrl = values.facebookUrl;\n newUserInfor.thongTinMoRong.soCmnd = values.soCmnd;\n newUserInfor.thongTinMoRong.predictiveIndexRequire = [];\n newUserInfor.thongTinMoRong.predictiveIndex = [];\n // newUserInfor.thongTinMoRong = JSON.stringify(newUserInfor.thongTinMoRong);\n newUserInfor.maGioiThieu = localStorageServ.referLink.get() || \"\";\n \n servCodingCamp\n .postDPutNguoiDung(newUserInfor)\n .then((res) => {\n localStorageServ.inforSignUp.set(res.data.content)\n dispatch(setCurrentStep(currentStep + 1));\n if(regisPackage!=0){\n history.push('/confirm-payment')\n }\n })\n .catch((err) => {\n console.log(err);\n });\n };\n const onFinishFailed = (errorInfo) => {\n console.log(\"😀 - onFinishFailed - errorInfo\", errorInfo);\n };\n return (\n <div className=\"flex w-full \">\n <div className=\"w-full flex-grow \">\n <Form\n form={form}\n layout=\"vertical\"\n name=\"basic\"\n className=\"container \"\n wrapperCol={{ span: 24 }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n >\n <div className=\"wfull flex flex-col \">\n <div className=\" w-full pr-5\">\n <Form.Item\n label=\"Ngà y Sinh\"\n name=\"namSinh\"\n rules={[\n {\n type: \"object\",\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <DatePicker placeholder=\"Nháºp ngà y sinh\" className=\"w-full\" />\n </Form.Item>\n\n <Form.Item\n label=\"LÆ°Æ¡ng mong muốn khi xin việc\"\n name=\"luongMongMuon\"\n rules={[\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"LÆ°Æ¡ng mong muốn phải là chữ số, và dụ: 1000000\");\n }\n\n return Promise.resolve();\n },\n }),\n ]}\n >\n <Input />\n </Form.Item>\n </div>\n <div className=\" w-full pr-5\">\n <Form.Item\n label=\"Link facebook\"\n name=\"facebookUrl\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n () => ({\n validator(_, value) {\n let data =\n value != undefined ? value.toLowerCase().indexOf(\"facebook.com\") : \"\";\n if (value != undefined && value != \"\" && data == -1) {\n return Promise.reject(\"Facebook không hợp lệ\");\n }\n\n return Promise.resolve();\n },\n }),\n ]}\n >\n <Input />\n </Form.Item>\n <Form.Item\n label=\"Số CMND (Căn cÆ°á»›c, Há»™ chiếu)\"\n name=\"soCmnd\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n {\n max: 12,\n message: \"Số giấy tá» tuỳ thân có Ä‘á»™ dà i 8 - 12 chữ số\",\n },\n {\n min: 8,\n message: \"Số giấy tá» tuỳ thân có Ä‘á»™ dà i 8 - 12 chữ số\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n {/*\n\n file\n */}\n <UploadImg hadleGetImgAfterConver={hadleGetImgAfterConver} />\n <div className=\"text-white\">\n <p>- Chỉ chấp nháºn CMND, CCCD hoặc giấy phép lái xe</p>\n <p>\n - Hình chụp phải rõ, thấy khuôn mặt nằm thẳng đứng <Modal_MinhHoa />.\n </p>\n <p>\n * Nếu bạn có vấn Ä‘á» khi upload hãy liên hệ{\" \"}\n <a\n className=\"underline ml-1 text-blue-600 font-medium\"\n target=\"_blank\"\n href=\"https://www.facebook.com/codezuni\"\n >\n Link\n </a>{\" \"}\n nà y\n </p>\n LÆ°u ý: Việc cung cấp các hình ảnh trên để xác minh há»c viên và phục vụ việc cấp\n chứng nháºn cÅ©ng nhÆ° để đảm bảo việc bảo máºt tà i nguyên của CodeZuni. CodeZuni cam Ä‘oan sẽ{\" \"}\n <b> KHÔNG </b>\n cung cấp hình ảnh nà y cho bất kỳ bên nà o khác.\n </div>\n </div>\n </div>\n <Form.Item>\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button\n onClick={() => {\n let prev = currentStep - 1;\n dispatch(setCurrentStep(prev));\n }}\n // type=\"primary\"\n htmlType=\"submit\"\n className=\"w-24 rounded-sm\"\n >\n Quay lại\n </Button>\n <Button\n className=\"px-5 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Hoà n thà nh\n </Button>\n </div>\n </Form.Item>\n </Form>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport FormThongTinChiTietTV from \"./FormThongTinChiTietTV\";\n\nexport default function ThongTinChiTietTV() {\n return (\n <div className=\"w-full p-3 flex flex-col items-center space-y-5\">\n <p className=\"uppercase text-xl text-white\">ÄÄ‚NG Kà THÔNG TIN CHÃNH</p>\n <FormThongTinChiTietTV />\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Button, Checkbox, Select, Radio } from \"antd\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { message } from \"antd\";\nimport {\n setCurrentStep,\n setUserInfor,\n} from \"../../../redux/reducer/signUpReducer\";\nimport httpServ from \"../../../services/http.service\";\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport axios from \"axios\";\nimport { history } from \"../../../App\";\nimport useWindowSize from \"../../../hook/useWindowSize\";\nimport CustomInput from \"../../../components/CustomInput/CustomInput\";\nexport default function FormDieuKhoanTV({}) {\n // start\n\n const { widthWindow, heightWindow } = useWindowSize();\n const isPhone = widthWindow < 768 ? true : false;\n const regisPackage = localStorageServ.regisPackage.get();\n const [congViecHienTai, setCongViecHienTai] = useState(\"SV\");\n const [form] = Form.useForm();\n\n useEffect(() => {\n form.setFieldsValue({\n congViecHienTai1: \"DL\",\n luongMongMuon:10,\n // hoTenPH: \"\",\n // emailPH: \"\",\n // emailPH: \"\",\n });\n }, []);\n // end\n const { Option } = Select;\n let { currentStep } = useSelector((state) => state.signUp);\n const { userInfo } = useSelector((state) => state.signUp);\n const onFinish = (values) => {\n let newUserInfor = JSON.parse(JSON.stringify(userInfo));\n\n let sdt = values.soDT;\n if (sdt.length > 0 && sdt[0] === \"+\") {\n sdt = sdt.split(\"\"); // or newStr = [...str];\n sdt.splice(0, 1);\n\n sdt = sdt.join(\"\");\n }\n newUserInfor.email = values.email;\n newUserInfor.hoTen = values.hoTen;\n newUserInfor.soDT = sdt;\n newUserInfor.thongTinMoRong.noiCongTacHienTai = values.noiCongTac;\n newUserInfor.thongTinMoRong.congViecHienTai = JSON.stringify([\n values.congViecHienTai1,\n values.congViecHienTai2,\n values.congViecHienTai3,\n ]);\n // thong tin phụ huynh\n if (values.hoTenPH) {\n newUserInfor.thongTinMoRong.hoTenPH = values.hoTenPH;\n newUserInfor.thongTinMoRong.emailPH = values.emailPH;\n newUserInfor.thongTinMoRong.soDTPH = values.soDTPH;\n }\n\n httpServ\n .getCheckAccount(values.email, sdt)\n .then((res) => {\n if (res.data.content == 1) {\n message.info(\"Cáºp nháºt\");\n dispatch(setUserInfor(newUserInfor));\n dispatch(setCurrentStep(1));\n } else if (res.data.content == 0) {\n message.info(\"Tạo má»›i\");\n dispatch(setUserInfor(newUserInfor));\n dispatch(setCurrentStep(1));\n } else {\n message.error(\"Email và số Ä‘iện thoại không khá»›p vá»›i tà i khoản đã tạo\")\n }\n })\n .catch((err) => {});\n };\n const dispatch = useDispatch();\n\n const onFinishFailed = (errorInfo) => {\n // console.log(\"Failed:\", errorInfo);\n };\n const [isVietNam, setIsVietNam] = useState(true);\n const handleNoiHocTap = (value) => {\n value === \"vn\" ? setIsVietNam(true) : setIsVietNam(false);\n };\n const handleValidateEmail = (_, value, callback) => {\n httpServ\n .getCheckGmail(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Email đã tồn tại\");\n }\n })\n .catch((err) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n message.error(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n // console.log(\"yes\");\n });\n });\n };\n const handleValidateSDT = (_, value, callback) => {\n httpServ\n .getCheckSDT(value)\n .then((res) => {\n if (res.data.content) {\n callback(\"Số Ä‘iện thoại đã tồn tại\");\n }\n })\n .catch((err) => {\n callback();\n });\n };\n let subFormHocVien = (\n <>\n <Form.Item\n // label=\"Há» và tên\"\n name=\"hoTen\"\n rules={[{ required: true, message: \"TrÆ°á»ng nà y không được để trống\" }]}\n >\n <CustomInput placeholder=\"Há» và tên\" value={form.getFieldValue(\"hoTen\")} isRead={true}/>\n </Form.Item>\n <Form.Item\n // label=\"Email\"\n name=\"email\"\n rules={[\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n {/* <Input /> */}\n <CustomInput placeholder=\"Email\" value={form.getFieldValue(\"email\")} isRead={true}/>\n </Form.Item>\n <Form.Item\n // label=\"Số ÄT\"\n name=\"soDT\"\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder=\"Số DT\" value={form.getFieldValue(\"soDT\")} isRead={true}/>\n </Form.Item>\n </>\n );\n let renderFormPhuHuynh = () => {\n if (congViecHienTai == \"C2\" || congViecHienTai == \"C3\") {\n return (\n <>\n <p className=\"text-white py-2\">\n {\" \"}\n Bạn vui lòng cung cấp thông tin phụ huynh của bạn để CodeZuni thông\n báo thông tin há»c táºp của bạn đến Phụ huynh khi cần nhé ( Sau đây\n gá»i tắt là Phụ Huynh ) :\n </p>\n\n <Form.Item\n name=\"hoTenPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n >\n <CustomInput placeholder={\"Há» và tên\"} />\n </Form.Item>\n <Form.Item\n name=\"emailPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n {\n type: \"email\",\n message: \"Email không đúng định dạng\",\n },\n {\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <CustomInput placeholder={\"Email\"} />\n </Form.Item>\n <Form.Item\n name=\"soDTPH\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n { message: \"TrÆ°á»ng nà y không được để trống\" },\n // { type: \"number\", message: \"Số Ä‘iện thoại phải là chữ số\" },\n () => ({\n validator(_, value) {\n if (isNaN(value)) {\n return Promise.reject(\"Số Ä‘iện thoại phải là chữ số\");\n }\n\n return Promise.resolve();\n },\n }),\n {\n max: 15,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n {\n min: 9,\n message: \"Số Ä‘iện thoại phải có Ä‘á»™ dà i từ 9 - 15\",\n },\n ]}\n >\n <CustomInput placeholder={\"Số DT\"} />\n </Form.Item>\n </>\n );\n }\n };\n useEffect(()=>{\n if(userInfo){\n form.setFieldsValue({\n hoTen: userInfo.hoTen,\n email: userInfo.email,\n soDT: userInfo.soDt\n });\n }\n },[userInfo])\n return (\n <div className=\"w-full flex justify-center flex-col items-center h-full\">\n <Form\n layout=\"vertical\"\n name=\"basic\"\n className={`${isPhone ? \"\" : \"container\"}`}\n labelCol={{ sm: { span: 6 }, xl: { span: 4 } }}\n wrapperCol={{ span: 24 }}\n initialValues={{ remember: true }}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n autoComplete=\"off\"\n form={form}\n >\n <Form.Item label=\"Bạn Ä‘ang là :\" name=\"congViecHienTai1\" rules={[]}>\n <Radio.Group\n onChange={(e) => {\n setCongViecHienTai(e.target.value);\n // console.log(e.target.value);\n }}\n defaultValue=\"SV\"\n >\n <Radio className=\"text-white\" value=\"SV\">\n Sinh viên CNTT\n </Radio>\n <Radio className=\"text-white\" value=\"DL\">\n CNTT đã Ä‘i là m{\" \"}\n </Radio>\n <Radio className=\"text-white\" value=\"TN\">\n Trái ngà nh\n </Radio>\n <Radio className=\"text-white\" value=\"C2\">\n Há»c sinh cấp 2\n </Radio>\n <Radio className=\"text-white\" value=\"C3\">\n Há»c sinh cấp 3\n </Radio>\n </Radio.Group>\n </Form.Item>\n\n <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai2\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn há»c trÆ°á»ng nà o...?\"\n : congViecHienTai === \"DL\"\n ? \"Bạn là m công ty nà o...?\"\n : congViecHienTai == \"TN\"\n ? \"Bạn là m ngà nh gì...?\"\n : \"Bạn há»c trÆ°á»ng nà o?\"\n }\n />\n </Form.Item>\n <Form.Item\n rules={[\n { required: true, message: \"TrÆ°á»ng nà y không được để trống\" },\n ]}\n name=\"congViecHienTai3\"\n >\n <Input\n placeholder={\n congViecHienTai === \"SV\"\n ? \"Bạn là sinh viên năm mấy...?\"\n : congViecHienTai === \"DL\"\n ? \"Bao nhiêu năm kinh nghiệm...?\"\n : congViecHienTai == \"TN\"\n ? \"Äã là m bao lâu...?\"\n : \"Bạn há»c lá»›p mấy?\"\n }\n />\n </Form.Item>\n {renderFormPhuHuynh()}\n\n {/* from phụ huynh */}\n <h4 className=\"text-white\">\n Thông tin há»c viên ( Sau đây gá»i tắt là Há»c Viên ):\n </h4>\n {subFormHocVien}\n <Form.Item label=\"NÆ¡i há»c táºp/ là m việc\">\n <Input.Group compact>\n <Select\n onChange={handleNoiHocTap}\n defaultValue=\"Việt Nam\"\n style={{ width: \"auto\" }}\n >\n <Option value=\"vn\">Việt Nam</Option>\n <Option value=\"tg\">Quốc gia khác</Option>\n </Select>\n {isVietNam ? (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Select placeholder=\"NÆ¡i ở/ là m việc\">\n <Option value=\"Hồ Chà Minh\">Hồ Chà Minh</Option>\n <Option value=\"Hà Ná»™i\">Hà Ná»™i</Option>\n <Option value=\"Cần ThÆ¡\">Cần ThÆ¡</Option>\n <Option value=\"Nha Trang\">Nha Trang</Option>\n <Option value=\"Huế\">Huế </Option>\n <Option value=\"Vinh\">Vinh</Option>\n <Option value=\"Khác\">Khác</Option>\n </Select>\n </Form.Item>\n ) : (\n <Form.Item\n name=\"noiCongTac\"\n rules={[\n {\n required: true,\n message: \"TrÆ°á»ng nà y không được để trống\",\n },\n ]}\n >\n <Input />\n </Form.Item>\n )}\n </Input.Group>\n </Form.Item>\n <Form.Item\n wrapperCol={{ sm: { offset: 0 }, md: { offset: 4 }, span: 16 }}\n >\n <div className=\"w-full flex justify-center space-x-3 \">\n <Button\n className=\"px-5 bg-yellow-400 border-none text-black\"\n type=\"primary\"\n htmlType=\"submit\"\n >\n Tiếp theo\n </Button>\n </div>\n </Form.Item>\n </Form>\n\n <div></div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport FormDieuKhoanTV from \"./FormDieuKhoanTV\";\n\nexport default function ThongTinChinhTV() {\n const [isShowDieuKhoan, setIsShowDieuKhoan] = useState(false);\n const handleCloseModal = () => {\n setIsShowDieuKhoan(false);\n };\n const handleOpenModal = () => {\n setIsShowDieuKhoan(true);\n };\n\n return (\n <div className=\"w-full h-full p-3 flex flex-col items-center space-y-5 text-white\">\n <p className=\"uppercase text-lg lg:text-xl \">ÄÄ‚NG Kà THÔNG TIN CHÃNH</p>\n \n\n <FormDieuKhoanTV handleOpenModal={handleOpenModal} />\n </div>\n );\n}\n","import { Button } from \"antd\";\nimport React from \"react\";\n\nexport default function HoanThanhTV() {\n return (\n <div className=\"w-full flex flex-col space-y-10 justify-center items-center p-5 text-white\">\n <>\n <p className=\"text-lg lg:text-2xl\">ÄÄ‚NG Kà THÀNH CÔNG</p>\n <Button className=\"px-5 bg-yellow-400 border-none text-black\" type=\"primary\" htmlType=\"submit\">\n <a href=\"/login\"> Vá» trang chủ</a>\n </Button>\n </>\n </div>\n );\n}\n","import React from \"react\";\nimport { Steps } from \"antd\";\nimport { useMediaQuery } from \"react-responsive\";\n\nimport { useSelector } from \"react-redux\";\nexport default function StepTuVan() {\n const { currentStep } = useSelector((state) => state.signUp);\n const Desktop = ({ children }) => {\n const isDesktop = useMediaQuery({ minWidth: 992 });\n return isDesktop ? children : null;\n };\n const Tablet = ({ children }) => {\n const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 });\n return isTablet ? children : null;\n };\n const Mobile = ({ children }) => {\n const isMobile = useMediaQuery({ maxWidth: 767 });\n return isMobile ? children : null;\n };\n const { Step } = Steps;\n\n return (\n <div className=\"text-white\">\n <Desktop>\n <Steps className=\"px-5 text-white\" current={currentStep}>\n <Step title=\"Thông tin chÃnh\" />\n <Step title=\"Thông tin chi tiết\" />\n <Step title=\"Hoà n thà nh\" />\n </Steps>\n </Desktop>\n <isTablet></isTablet>\n <Mobile>\n <Steps current={currentStep}>\n <Step />\n <Step />\n <Step />\n </Steps>\n </Mobile>\n </div>\n );\n}\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport ThongTinChiTietTV from \"./ThongTinChiTietTV\";\nimport ThongTinChinhTV from \"./ThongTinChinhTV\";\nimport HoanThanhTV from \"./HoanThanhTV\";\nimport StepTuVan from \"./StepTuVan\";\nexport default function ContainerTuVanDesktop() {\n const { currentStep } = useSelector((state) => state.signUp);\n\n const renderConTentStep = () => {\n switch (currentStep) {\n case 0:\n return <ThongTinChinhTV />;\n case 1:\n return <ThongTinChiTietTV />;\n case 2:\n return <HoanThanhTV />;\n default:\n break;\n }\n };\n return (\n <div className=\"w-full h-full p-3 lg:p-5 space-y-10 flex-grow card-theme border-none \">\n <StepTuVan />\n <div className=\"lg:w-full w-2/3 mx-auto\">{renderConTentStep()}</div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport BtnGoogleCapcha from \"../../../components/BtnGoogleCapcha/BtnGoogleCapcha\";\nimport { DARK_MODE, LIGHT_MODE } from \"../../../constants/theme\";\nimport { setModeTheme } from \"../../../redux/reducer/themeReducer\";\nimport localStorageServ from \"../../../services/locaStorage.service\";\nimport ContainerTuVanDesktop from \"./ContainerTuVanDesktop\";\nimport { useSearchParams } from 'react-router-dom';\nimport servCodingCamp from \"../../../services/codingCam.service\";\nimport { setUserInfor } from \"../../../redux/reducer/signUpReducer\";\n\nexport default function FormTVDesktop() {\n \n const dispatch = useDispatch();\n const [searchParams] = useSearchParams();\n let idUser = searchParams.get(\"id\")\n useEffect(() => {\n const root = window.document.documentElement;\n\n if (root.classList.remove(DARK_MODE)) {\n root.classList.remove(DARK_MODE);\n root.classList.remove(LIGHT_MODE);\n }\n localStorageServ.modeTheme.set(LIGHT_MODE);\n dispatch(setModeTheme(LIGHT_MODE));\n }, []);\n useEffect(()=>{\n if(idUser){\n servCodingCamp.getNguoiDungById(idUser)\n .then((res) => {\n let newInfor =res.data.content\n newInfor.thongTinMoRong = JSON.parse(newInfor.thongTinMoRong)\n console.log(newInfor)\n dispatch(setUserInfor(newInfor));\n })\n .catch((err) => {\n console.log(err);\n });\n }\n },[idUser])\n return (\n <div\n // style={{\n // backgroundImage: `url(${backGrountTemplate})`,\n // }}\n className=\"w-full min-h-screen overflow-y-auto bg-cover flex-col bg-fixed p-3 md:p-7 lg:p-10 flex \"\n >\n <BtnGoogleCapcha />\n\n <div className=\" h-full w-full flex-grow flex flex-col relative overflow-y-auto overflow-x-hidden 2xl:container mx-auto sm:p-3\">\n <div className=\"w-full flex-grow flex flex-col card-theme\">\n <ContainerTuVanDesktop />\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect } from \"react\";\nimport { useMediaQuery } from \"react-responsive\";\nimport SignUpDesktop from \"./SignUpDesktop/SignUpDesktop\";\nimport \"./Sigup.css\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport FormTVDesktop from \"./FormTuVan/FormTVDesktop\";\nvar qs = require(\"qs\");\n\nexport default function FormTuVan() {\n return <FormTVDesktop />;\n}\n","import { useSelector } from \"react-redux\";\nimport { Navigate, Route, Routes } from \"react-router-dom\";\nimport LoginPage from \"./pages/LoginPage/LoginPage\";\nimport SignUpPage from \"./pages/SignUp/SignUpPage\";\nimport TaskPage from \"./pages/TaskPage/TaskPage\";\nimport DetailScreenCapstone from \"./pages/DetailScreenCapstone/DetailScreenCapstone\";\nimport DetailScreenQuizz from \"./pages/DetailScreenQuizz/DetailScreenQuizz\";\nimport HomeTemplate from \"./template/HomeTemplate\";\nimport DaskBroad from \"./pages/DashBroad/Dashboard\";\nimport Discussion from \"./pages/Discussion/Discussion\";\nimport Runcode from \"./pages/Runcode/Runcode\";\nimport Upgrade_Notify_Page from \"./pages/Upgrade_Notify_Page\";\nimport DetailExercise from \"./pages/DetailExercise/DetailExercise\";\nimport LearnVideoPage from \"./pages/LearnVideoPage/LearnVideoPage\";\nimport PracticePage from \"./pages/PracticePage/PracticePage\";\nimport DocumentPage from \"./pages/DocumentPage/DocumentPage\";\nimport BestPracticePage from \"./pages/BestPracticePage/BestPracticePage\";\nimport CompetitionsPage from \"./pages/CompetitionsPage/CompetitionsPage\";\nimport LiveEventPage from \"./pages/LiveEventPage/LiveEventPage\";\nimport DetailDocumentPage from \"./pages/DetailDocumentPage/DetailDocumentPage\";\nimport DetailCompetitionsPage from \"./pages/DetailCompetitionsPage/DetailCompetitionsPage\";\nimport SpinnerComponent from \"./components/Spinner/index\";\nimport BestPracticeDetail from \"./pages/BestPraticeDetail/BestPracticeDetail\";\nimport ShopPage from \"./pages/ShopPage/ShopPage\";\nimport TestQuizPage from \"./pages/TestQuizPage/TestQuizPage\";\nimport { parentPage } from \"./routes/utitlity\";\nimport TestQuizPage_ShowDapAn from \"./pages/TestQuizPage_ShowDapAn/TestQuizPage_ShowDapAn\";\nimport TuongNhaPage from \"./pages/TuongNhaPage/TuongNhaPage\";\nimport { createBrowserHistory } from \"history\";\nimport { unstable_HistoryRouter as HistoryRouter } from \"react-router-dom\";\nimport HomeSidebar from \"./template/HomeSidebar\";\n\nimport { Toaster } from \"react-hot-toast\";\nimport TaskPageTest from \"./pages/TaskPage/TaskPageTest\";\nimport { useEffect, useState } from \"react\";\nimport DanhSachChat from \"./components/DanhSachChat/DanhSachChat\";\nimport LoginPageEmail from \"./pages/LoginPageEmail/LoginPageEmail\";\nimport DetailWall from \"./pages/TuongNhaPage/DetailWall/DetailWall\";\nimport OnlineTimeTracker from \"./components/TimeTracker/TimeTracker\";\nimport { BlogPage } from \"./pages/BlogPage/BlogPage\";\nimport WorkShop from \"./pages/WorkShop/WorkShop\";\nimport \"antd/dist/antd.css\";\nimport \"./index.css\";\nimport { withAuth } from \"./hook/auth\";\nimport LoginPageDemo from \"./pages/LoginPage/LoginHocDemo\";\nimport ListService from \"./pages/ServicePakages/ListService\";\nimport ConfirmPayment from \"./pages/ServicePakages/ConfirmPayment\";\nimport TaskPageFree from \"./pages/TaskPage/TaskPageFree\";\nimport HomeSidebarFree from \"./template/HomeSideBarFree\";\nimport { selectThongTinMoRong } from \"./redux/reducer/authReducer\";\nimport PaymentSuccess from \"./pages/ServicePakages/PaymentSuccess\";\nimport ViewPackage from \"./pages/ServicePakages/ViewPackage/ViewPackage\";\n\nimport 'video-react/dist/video-react.css'\nimport SignUpPageFree from \"./pages/SignUp/SignUpPageFree\";\nimport FormTuVan from \"./pages/SignUp/FormTuVan\";\n\nimport MessengerCustomerChat from 'react-messenger-customer-chat';\n\nimport * as signalR from '@microsoft/signalr';\nimport { API_URL_DOMAIN } from \"./utils/urlDomain\";\nimport { BASE_URL_CODINGCAMP } from \"./services/axios.service\";\nexport const history = createBrowserHistory();\nexport const connection = new signalR.HubConnectionBuilder().withUrl(`${BASE_URL_CODINGCAMP}/chat`).withAutomaticReconnect().build();\nconnection.start().then(() => { }).catch(err=>{\n // console.log(err)\n })\nfunction App() {\n const theme = useSelector((state) => state.theme.theme);\n const [open, setOpen] = useState(false);\n\n\n const { userInfo } = useSelector(selectThongTinMoRong);\n const closeDrawer = () => {\n setOpen(false);\n };\n const showDrawer = () => {\n setOpen(true)\n }\n\n return (\n <div className=\"backgoundTemplate bg-cover \">\n \n \n <MessengerCustomerChat\n pageId=\"231169113737422\"\n appId=\"303284849320308\"\n />\n\n <OnlineTimeTracker />\n {/* <SpinnerComponent /> */}\n\n <Toaster position=\"top-right\" />\n\n {userInfo && <DanhSachChat open={open} closeDrawer={closeDrawer} />}\n {/* Tắt để là m responsive */}\n {/* <Upgrade_Notify_Page /> */}\n\n <HistoryRouter history={history}>\n\n <Routes>\n\n\n <Route path=\"\" element={<HomeTemplate showDrawer={showDrawer} />}>\n <Route path=\"/\" element={<Navigate to=\"/dash-broad\" replace />} />\n <Route path=\"/dash-broad\" element={withAuth(DaskBroad)} />\n \n <Route path=\"/dash-broad/:id\" element={withAuth(DaskBroad)} />\n\n <Route path=\"/discussion\" element={withAuth(Discussion)} />\n <Route path=\"/run-code\" element={withAuth(Runcode)} />\n <Route path=\"/learn-video\" element={withAuth(LearnVideoPage)} />\n <Route path=\"/shop-page\" element={withAuth(ShopPage)} />\n\n {/* new page */}\n </Route>\n <Route path=\"/\" element={<HomeSidebar showDrawer={showDrawer} />}>\n <Route path=\"/blog/:page/:chuyenDeId\" element={<BlogPage />} />\n <Route path=\"/workshop/:chuyenDeId\" element={<WorkShop />} />\n <Route path=\"/task-page-test/:chuyenDeId\" element={withAuth(TaskPageTest)} />\n <Route path=\"/task-page/:chuyenDeId\" element={withAuth(TaskPage)} />\n <Route\n path={`/${parentPage.task}/learn-video/:chuyenDeId/:monHocId/:taskId`}\n element={withAuth(LearnVideoPage)}\n />\n <Route\n path={`/${parentPage.task}/detai-screen-quiz/:chuyenDeId/:monHocId/:taskId`}\n element={withAuth(DetailScreenQuizz)}\n />\n <Route path={`/all-practice`} element={withAuth(PracticePage)} />\n <Route\n path={`/${parentPage.task}/detail-screen-capstone/:chuyenDeId/:monHocId/:taskId`}\n element={withAuth(DetailScreenCapstone)}\n />\n <Route path={`/${parentPage.task}/all-document`} element={withAuth(DocumentPage)} />\n <Route\n path={`/${parentPage.task}/detail-page-document/:id`}\n element={withAuth(DetailDocumentPage)}\n />\n <Route\n path={`${parentPage.task}/detail-screen-bai-tap/:chuyenDeId/:monHocId/:taskId`}\n element={withAuth(DetailExercise)}\n />\n <Route\n path={`${parentPage.task}/run-code/:chuyenDeId/:monHocId/:taskId`}\n element={withAuth(Runcode)}\n />\n {/* pratice page */}\n <Route path={`${parentPage.pratice}/:chuyenDeId`} element={withAuth(PracticePage)} />\n <Route path={`${parentPage.pratice}/task-page`} element={withAuth(TaskPage)} />\n <Route path={`${parentPage.pratice}/learn-video`} element={withAuth(LearnVideoPage)} />\n <Route\n path={`${parentPage.pratice}/detai-screen-quiz/:chuyenDeId`}\n element={withAuth(DetailScreenQuizz)}\n />\n <Route\n path={`${parentPage.pratice}/detail-screen-capstone/:chuyenDeId`}\n element={withAuth(DetailScreenCapstone)}\n />\n <Route path={`${parentPage.pratice}/all-document`} element={withAuth(DocumentPage)} />\n <Route\n path={`${parentPage.pratice}/detail-page-document/:id`}\n element={withAuth(DetailDocumentPage)}\n />\n <Route\n path={`${parentPage.pratice}/detail-screen-bai-tap/:chuyenDeId`}\n element={withAuth(DetailExercise)}\n />\n <Route\n path={`${parentPage.pratice}/run-code/:chuyenDeId`}\n element={withAuth(Runcode)}\n />\n {/* best practices */}\n <Route path={\"/detail-best-pratice/:id\"} element={withAuth(BestPracticeDetail)} />\n <Route path={`/all-best-practice/:chuyenDeId`} element={withAuth(BestPracticePage)} />\n <Route path={\"/detail-screen-competitions\"} element={withAuth(CompetitionsPage)} />\n <Route path=\"/all-competitions\" element={withAuth(DetailCompetitionsPage)} />\n <Route path=\"/detail-screen-live-event\" element={withAuth(LiveEventPage)} />\n </Route>\n <Route element={<HomeSidebarFree showDrawer={showDrawer} />}>\n <Route path=\"/task-page-free/:chuyenDeId\" element={<TaskPageFree />} />\n </Route>\n <Route path=\"demo\" element={<LoginPageDemo />} />\n\n <Route path=\"/quiz-test\" element={<TestQuizPage />} />\n <Route path=\"signup\" element={<SignUpPage />} />\n <Route path=\"signup-user\" element={<SignUpPageFree />} />\n <Route path=\"form-tuvan\" element={<FormTuVan />} />\n <Route path=\"/login\" element={<LoginPage />} />\n <Route path=\"/login-email\" element={<LoginPageEmail />} />\n <Route path=\"/quiz_dap_an\" element={<TestQuizPage_ShowDapAn />} />\n {/* tÆ°á»ng nhà */}\n <Route path=\"/profile/:userId\" element={<TuongNhaPage />} />\n <Route path=\"/wall/:id/:userId\" element={<DetailWall />} />\n {/* gói dịch vụ */}\n <Route path=\"/service\" element={<ListService />} />\n <Route path=\"/confirm-payment\" element={<ConfirmPayment />} />\n <Route path=\"/success\" element={<PaymentSuccess />} />\n <Route path=\"*\" element={<Navigate to=\"/\" replace />} />\n {/* package */}\n <Route path=\"/package\" element={<ViewPackage />} />\n </Routes>\n\n\n </HistoryRouter>\n </div>\n );\n}\n\nexport default App;","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport axios from \"axios\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { API_URL_DOMAIN } from \"../../utils/urlDomain\";\n// import servCodingCamp from \"../../services/codingCam.service\";\n\nconst initialState = {\n token: \"\",\n userInfo: {},\n thongTinMoRong: {\n userInfo: {},\n danhSachThanhTich: [],\n phanTramTichCucKinhNghiem: {},\n },\n};\n\nexport const updateThongTinMoRongAction = createAsyncThunk(\n \"authUser/updateThongTinMoRongAction\",\n async (thunkAPI) => {\n let config = {\n token: localStorageServ.userInfo.get()?.token,\n apiKey: \"UPD124yRTWF124QJFweUaCYSECETBERS\",\n \"Content-Type\": \"application/json\",\n };\n const response = await axios.get(\n `${API_URL_DOMAIN}/lichsutuongtac/lay-thongtin-user`,\n {\n headers: config,\n }\n );\n\n return response.data.content;\n }\n);\n\nexport const authSlice = createSlice({\n name: \"authUser\",\n initialState,\n reducers: {\n setUserInfor: (state, action) => {\n state.thongTinMoRong = action.payload;\n },\n setInforLoginDemo: (state, action) => {\n state.userInfo = action.payload;\n },\n setTimeUserDemo: (state, action) => {\n state.userInfo = action.payload;\n },\n setThongTinMoRong: (state, action) => {\n state.thongTinMoRong = action.payload;\n },\n },\n extraReducers: {\n [updateThongTinMoRongAction.fulfilled]: (state, action) => {\n state.thongTinMoRong = action.payload;\n },\n },\n});\nexport const { setUserInfor, setInforLoginDemo, setTimeUserDemo, setThongTinMoRong } =\n authSlice.actions;\n\nexport default authSlice.reducer;\n\n// useSelector\n\nexport const selectThongTinMoRong = (state) => state.authUser.thongTinMoRong;\nexport const selectUserInfor = (state) => state.authUser.userInfo;\n\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { packageService } from \"../../services/packageService\";\n\nconst initialState = {\n arrPackageByCourse: [],\n arrPackage: [],\n};\n\nconst packageReducer = createSlice({\n name: \"packageReducer\",\n initialState,\n reducers: {\n getArrPackageCourse: (state, action) => {\n state.arrPackageByCourse = action.payload;\n },\n getArrPackage: (state, action) => {\n state.arrPackage = action.payload;\n },\n },\n});\n\nexport const { getArrPackageCourse,getArrPackage } = packageReducer.actions;\n\nexport default packageReducer.reducer;\n\nexport const getArrPackageCourseApi = (id) => {\n return async (dispatch) => {\n try{\n const res = await packageService.getPackageByIdCourse(id);\n const action = getArrPackageCourse(res.data.content);\n dispatch(action);\n }catch(er){\n console.log(er)\n }\n };\n};\nexport const getArrPackageApi = () => {\n return async (dispatch) => {\n try{\n const res = await packageService.getPackageService();\n const action = getArrPackage(res.data.content);\n dispatch(action);\n }catch(er){\n console.log(er)\n }\n };\n};\n","import { http } from \"../utils/config\";\n\nconst GET_PATH = '/danhgia';\n\nconst layDSdanhgiaSer = () => {\n return http.get(GET_PATH);\n}\n\nconst themDanhgia = (data) => {\n return http.post(GET_PATH, data);\n}\n\n\nexport const danhGiaService = {\n layDSdanhgiaSer,\n themDanhgia\n}\n","import { createSlice } from '@reduxjs/toolkit'\nimport { danhGiaService } from '../../services/danhGiaIssue';\nimport { message } from 'antd';\n\nconst initialState = {\n dsDanhGia:[]\n\n}\n\nconst danhGiaReducer = createSlice({\n name: 'danhGiaReducer',\n initialState,\n reducers: {\n setDSdanhGia:(state,action)=>{\n state.dsDanhGia = action.payload\n }\n }\n});\n\nexport const {setDSdanhGia} = danhGiaReducer.actions\n\nexport default danhGiaReducer.reducer\n\n\nexport const postDanhGia = (obj) => {\n return async (dispatch) => {\n try{\n await danhGiaService.themDanhgia(obj);\n message.success(\"Äã gá»i đánh giá!\")\n }catch(err){\n\n }\n };\n};","import localStorageServ from \"../services/locaStorage.service\";\nimport { loaiNhiemVu } from \"../utils/taskUtils\";\n\nexport const typeTask = {\n VIDEO: \"VIDEO\",\n BAITAP: \"BAITAP\",\n QUIZ: \"QUIZ\",\n CAPS: \"CAPS\",\n RUNCODE: \"RUNCODE\",\n TAILIEU: \"TAILIEU\",\n};\nexport const parentPage = {\n task: \"task-page\",\n taskFree: \"task-page-free\",\n pratice: \"pratice-page\",\n};\nexport let checkActiveNavlink = (urlString) => {\n const currentPathname = window.location.pathname;\n return currentPathname.includes(urlString);\n};\n// dùng chung cho các trang task, competetion, pratice\n\nexport let navigatePageByTask = (nhiemVu, navigate, parentPath) => {\n let { maLoaiNhiemVu, chuyenDeId, id: taskId, monHocId } = nhiemVu;\n switch (maLoaiNhiemVu) {\n case loaiNhiemVu.CAPS:\n navigate(`/${parentPath}/detail-screen-capstone/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case \"DUAN\":\n navigate(`/${parentPath}/detail-screen-capstone/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.BAITAP:\n navigate(`/${parentPath}/detail-screen-bai-tap/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.HOMEWORK:\n navigate(`/${parentPath}/detail-screen-bai-tap/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.VIDEO:\n navigate(`/${parentPath}/learn-video/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.RECORD:\n navigate(`/${parentPath}/learn-video/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.QUIZ: {\n navigate(`/${parentPath}/detai-screen-quiz/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n }\n case loaiNhiemVu.RUNCODE: {\n navigate(`/${parentPath}/run-code/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n }\n }\n};\nexport let navigatePageByTaskNext = (nhiemVu, navigate, parentPath, monHocId, chuyenDeId) => {\n let { maLoaiNhiemVu, id: taskId } = nhiemVu;\n switch (maLoaiNhiemVu) {\n case loaiNhiemVu.CAPS:\n navigate(`/${parentPath}/detail-screen-capstone/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case \"DUAN\":\n navigate(`/${parentPath}/detail-screen-capstone/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.BAITAP:\n navigate(`/${parentPath}/detail-screen-bai-tap/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.HOMEWORK:\n navigate(`/${parentPath}/detail-screen-bai-tap/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.VIDEO:\n navigate(`/${parentPath}/learn-video/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.RECORD:\n navigate(`/${parentPath}/learn-video/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n case loaiNhiemVu.QUIZ: {\n navigate(`/${parentPath}/detai-screen-quiz/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n }\n case loaiNhiemVu.RUNCODE: {\n navigate(`/${parentPath}/run-code/${chuyenDeId}/${monHocId}/${taskId}`);\n break;\n }\n }\n};\n\nexport let getDataLocalByTask = (loai) => {\n switch (loai) {\n case typeTask.CAPS:\n return localStorageServ.dataDetailPageCaps.get();\n\n case typeTask.BAITAP:\n return localStorageServ.dataLearnBaiTaiTapPage.get();\n\n case typeTask.VIDEO:\n return localStorageServ.dataLearnVideoPage.get();\n\n case typeTask.QUIZ: {\n return localStorageServ.dataLearnQuizPage.get();\n }\n case typeTask.RUNCODE: {\n return localStorageServ.dataLearnRunCode.get();\n }\n // case typeTask.QUIZ: {\n // return localStorageServ.dataLearnQuizPage.get();\n // }\n // default:\n // alert(\"ko có dữ liệu của \", loai);\n // window.location.href = \"/\";\n }\n};\n","// import { http } from \"../util/config\";\n\nimport { http } from \"../utils/config\";\n\nconst GET_PATH = \"/api/baihoc\";\n\nconst layDanhSachBaiHoc = () => {\n return http.get(GET_PATH);\n};\n\nconst themBaiHoc = (data) => {\n return http.post(GET_PATH, data);\n};\nconst suaBaiHoc = (data) => {\n return http.put(`${GET_PATH}/${data.id}`, data);\n};\nconst xoaBaiHoc = (id) => {\n return http.delete(`${GET_PATH}/${id}`);\n};\n\nconst postDanhSachBaiHocByListId = (ds) => {\n return http.post(`${GET_PATH}/dsbaihocbylistid`, ds);\n};\n\nexport const baiHocService = {\n layDanhSachBaiHoc,\n themBaiHoc,\n suaBaiHoc,\n xoaBaiHoc,\n postDanhSachBaiHocByListId,\n};\n","import servCodingCamp from \"../services/codingCam.service\";\nimport localStorageServ from \"../services/locaStorage.service\";\n\nexport let createPayloadNopBai = (\n taskId = 0,\n maLoai = \"\",\n baiLam = \"\",\n requireId = 0,\n chuyenDeId,\n monHocId\n) => {\n return {\n id: 0,\n taskId: taskId,\n requireId: requireId,\n baiLam: baiLam,\n maLoai: maLoai,\n chuyenDeId,\n monHocId,\n };\n};\nexport let createPayloadLayThongTinBaiTap = (taskId = 0, chuyenDeId, monHocId) => {\n return {\n nguoiDungId: localStorageServ.userInfo.get().id,\n taskId: taskId,\n chuyenDeId,\n monHocId,\n };\n};\nexport const loaiNhiemVu = {\n VIDEO: \"VIDEO\",\n BAITAP: \"BAITAP\",\n QUIZ: \"QUIZ\",\n CAPS: \"CAPS\",\n RUNCODE: \"RUNCODE\",\n TAILIEU: \"TAILIEU\",\n RECORD: \"RECORD\",\n HOMEWORK: \"HOMEWORK\",\n};\nexport const tenNhiemVu = {\n VIDEO: \"Video\",\n BAITAP: \"Bà i táºp\",\n QUIZ: \"Trắc nghiệm\",\n CAPS: \"Capstone\",\n RUNCODE: \"Live coding\",\n TAILIEU: \"Tà i liệu\",\n RECORD: \"Video xem lại\",\n HOMEWORK: \"Bà i táºp vá» nhà \",\n};\n\nexport const trangThaiBaiTap = {\n \n CHO_CHAM: \"CHO_CHAM\",\n DA_CHAM: \"DA_CHAM\",\n NOP_LAI: \"NOP_LAI\",\n};\nexport const nhiemVuColor = {\n VIDEO: \"#ff595e\",\n BAITAP: \"#ffca3a\",\n QUIZ: \"#1982c4\",\n CAPS: \"#eddea4\",\n RUNCODE: \"#fbb02d\",\n TAILIEU: \"#2ec4b6\",\n RECORD: \"#ffc6ff\",\n HOMEWORK: \"#ffffff\",\n};\n\nlet createTaskIcon = (icon = \"\", desc = \"\") => {\n return {\n icon: (\n <div className=\"icon_item_theme w-10 h-10 icon-main flex items-center justify-center\">\n {icon}\n <span className=\"bg_icon_item_theme \"></span>\n </div>\n ),\n content: (\n <div className=\"card_tool_tip\">\n <div className=\"c-card-content\">{icon}</div>\n <div className=\"c-card-content\">\n <p className=\"text-sub-title color-sub-main-task-page flex flex-col text-center\">\n {desc}\n </p>\n </div>\n </div>\n ),\n };\n};\nexport let typeTaskIcon = {\n VIDEO: createTaskIcon(\n <i className=\"fa text-xl fa-video\"></i>,\n `Bà i giảng dÆ°á»›i dạng video thu sẵn giúp bạn có thể xem Ä‘i xem lại\n nhiá»u lần`\n ),\n RECORD: createTaskIcon(\n <i class=\"fa fa-file-video text-base\"></i>,\n `Bà i giảng dÆ°á»›i dạng video thu sẵn giúp bạn có thể xem Ä‘i xem lại\n nhiá»u lần!`\n ),\n HOMEWORK: createTaskIcon(<i className=\"fa fa-edit text-base\"></i>, \"\"),\n BAITAP: createTaskIcon(\n <i className=\"fa-solid fa-file-pen\"></i>,\n // <i className=\"fa text-xl fa-desktop\"></i>,\n `Bà i táºp áp dụng Hãy váºn dụng kiến thức các bạn đã há»c để hoà n thà nh\n các bà i táºp sau !`\n ),\n QUIZ: createTaskIcon(\n <i className=\"fa text-xl fa-pencil-ruler\"></i>,\n `Trắc nghiệm review kiến thức chắc chắn rằng bạn đã nắm toà n bá»™ kiến\n thức từ các bại giảng trên ?`\n ),\n RUNCODE: createTaskIcon(\n <i className=\"fa text-xl fa-code\"></i>,\n ` Trắc nghiệm review kiến thức chắc chắn rằng bạn đã nắm toà n bá»™ kiến\nthức từ các bại giảng trên ?`\n ),\n TAILIEU: createTaskIcon(\n <i className=\"fa text-xl fa-file-alt\"></i>,\n `\n Tà i liệu của buổi há»c\n`\n ),\n CAPS: createTaskIcon(\n <i className=\"fa fa-users\"></i>,\n ` Là m việc nhóm vá»›i 1 partner ! Hiện tại nhóm bạn má»›i chỉ có 1 thà nh\n viên ! Bạn cần tìm thêm 1 thà nh viên ná»a để cùng là m project !`\n ),\n HELPFRIEND: createTaskIcon(),\n CHAT: createTaskIcon(),\n TASK: createTaskIcon(<i className=\"fa fa-book-reader\"></i>),\n DUAN: createTaskIcon(<i className=\"fa fa-gavel\"></i>),\n DISCUSS: createTaskIcon(<i className=\"fa fa-sms\"></i>),\n};\n\nexport const markTaskAsCompleted = (chuyenDeId, monHocId, taskId, maLoai, baiHocId) => {\n let userInfo = localStorageServ.userInfo.get();\n\n const taskCompletionData = {\n nguoiDungId: userInfo.id,\n chuyenDeId,\n monHocId,\n taskId,\n maLoai,\n baiHocId,\n soPhutThucHien: 10,\n };\n return servCodingCamp.postHoanThanhHoc(taskCompletionData);\n};\n","import localStorageServ from \"../services/locaStorage.service\";\nexport let dataUserDemo = {\n \"id\": \"de4e647b-2273-4947-b980-4b52e09f0191\",\n \"email\": \"pnga62782@gmail.com\",\n \"hoTen\": \"Phuong Ngatst\",\n \"dienThoai\": \"0944057056\",\n \"avatar\": \"https://graph.facebook.com//picture?type=large\",\n \"thongTinMoRong\": \"{\\\"NamSinh\\\":\\\"2002\\\",\\\"SoCmnd\\\":\\\"123123123\\\",\\\"HinhCmnd\\\":[],\\\"CongViecHienTai\\\":\\\"hoc sinh\\\",\\\"NoiCongTacHienTai\\\":\\\"ho chi minh\\\",\\\"NguonGioiThieu\\\":\\\"\\\",\\\"FacebookUrl\\\":\\\"\\\",\\\"LuongMongMuon\\\":0,\\\"DongYHoTroTimViec\\\":true,\\\"GioiThieu\\\":\\\"string\\\",\\\"TruongHoc\\\":[],\\\"KinhNghiem\\\":[],\\\"ThanhTich\\\":[],\\\"capDanhHieu\\\":1,\\\"tagSkill\\\":[],\\\"HoTenPH\\\":\\\"string\\\",\\\"EmailPH\\\":\\\"string\\\",\\\"SoDTPH\\\":\\\"string\\\"}\",\n \"kinhNghiem\": 0,\n \"capDo\": 1,\n \"tichCuc\": 0,\n \"coin\": 0,\n \"danhHieu\": {\n \"capDo\": 1,\n \"tenDanhHieu\": \"Há»c viên láºp trình\",\n \"tenDanhHieuEN\": \"Newbie\",\n \"dieuKien\": {\n \"vatPhamId\": 0,\n \"thanhTichId\": [\n 0\n ],\n \"thamGiaEvent\": false\n },\n \"hinhDanhHieu\": \"hh_1.png\",\n \"mauSac\": \"#C2C2C2\",\n \"ghiChu\": \"Äây là cấp Ä‘á»™ đầu tiên, thÆ°á»ng dà nh cho những ngÆ°á»i má»›i bắt đầu há»c láºp trình. Há» có kiến thức cÆ¡ bản và Ãt hoặc không có kinh nghiệm thá»±c tế.\"\n },\n \"kinhNghiemToiDa\": 400,\n \"tichCucToiDa\": 1000,\n \"diaChiIp\": \"\",\n \"nuocNgoai\": false,\n \"capTangDanhHieu\": 0,\n \"ngayDangNhap\": \"2024-04-03T13:29:39.5342948+07:00\"\n \n}\nexport const checkDemoUser = () => {\n // console.log('yess');\n if (localStorageServ.userDemo.get()) {\n return true;\n }\n return false;\n};\nexport const checkLearning = (id, arr) => arr?.find(item => item.chuyenDeId == id)\n\n\nexport const removeRealUser = () => {\n let userInfo = localStorageServ.userInfo;\n if (userInfo) {\n userInfo.remove();\n }\n\n localStorageServ.userDemo.set(dataUserDemo);\n localStorageServ.userInfo.set(dataUserDemo);\n};\nexport const removeDemoUser = () => {\n let dataUserDemo = localStorageServ.userDemo;\n let codeDemo = localStorageServ.codeDemo;\n let nuocngoaiDemo = localStorageServ.nuocngoaiDemo;\n let timeDemo = localStorageServ.timeDemo;\n // let timeDemo = localStorageServ.timeDemo;\n if (dataUserDemo) {\n dataUserDemo.remove();\n }\n codeDemo && codeDemo.remove();\n timeDemo && timeDemo.remove();\n nuocngoaiDemo && nuocngoaiDemo.remove();\n};\n\nexport const initialDemoTaskDeadline = () => {\n return [\n {\n tenKhoaHoc: \"Khóa 1: TÆ° duy láºp trình & ná»n tảng\",\n tenBaiTap: \"Bà i táºp chÆ°Æ¡ng 2\",\n ngayHetHan: `10/16/2021 1:13:47 AM`,\n hetHan: true,\n },\n {\n tenKhoaHoc: \"Khóa 2: Láºp trình xá» lý Mảng căn bản chuyên sâu\",\n tenBaiTap: \"Bà i táºp chÆ°Æ¡ng 1 (mảng)\",\n ngayHetHan: \"10/20/2021 6:27:10 PM\",\n hetHan: true,\n },\n ];\n};\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { groupChatService } from \"../../services/groupChatService\"\nimport jsonB from \"json-bigint\";\nimport { nguoiDungService } from \"../../services/nguoiDungService\";\n\nconst initialState = {\n ActiveChat1: false,\n ActiveChat2: false,\n ActiveChatBot: false,\n //ActiveCurrent:false là active1 và ngược lại là active2\n ActiveCurrent:false,\n\n dataChat1: null,\n dataChat2: null,\n dataChatBot: null,\n\n //tab1\n groupChats: [],\n groupChatsByChuyenDe: [],\n chats: [],\n lastGroupChat: {\n id: 1,\n danhSachChat: \"\",\n noiDungChat: \"\",\n ngayTao: \"\",\n groupForTaskId: 0,\n chuyenDeId: 0,\n issueId: 0\n },\n lastChat: [],\n userId: 0,\n joinRoom: { room: \"\", taskid: 0 },\n joinRoomCd: { room: \"\", chuyenDeId: 0 },\n\n\n //tab2\n groupChats2: [],\n groupChatsByChuyenDe2: [],\n chats2: [],\n lastGroupChat2: {\n id: 1,\n danhSachChat: \"\",\n noiDungChat: \"\",\n ngayTao: \"\",\n groupForTaskId: 0,\n chuyenDeId: 0,\n issueId: 0\n },\n lastChat2: [],\n userId2: 0,\n joinRoom2: { room: \"\", taskid: 0 },\n joinRoomCd2: { room: \"\", chuyenDeId: 0 },\n listUser :[],\n //chatBbot\n chatBot:[]\n};\nconst stackChatReducer = createSlice({\n name: \"stackchat\",\n initialState,\n reducers: {\n ChangeActiveChat1: (state, action) => {\n state.ActiveChat1 = !state.ActiveChat1;\n },\n ChangeActiveChat2: (state, action) => {\n state.ActiveChat2 = !state.ActiveChat2;\n },\n ChangeActiveChatBot: (state, action) => {\n state.ActiveChatBot = !state.ActiveChatBot;\n },\n updateDataChat1: (state, action) => {\n state.dataChat1 = { ...action.payload };\n },\n updateDataChat2: (state, action) => {\n state.dataChat2 = { ...action.payload };\n },\n updateDataChatBot: (state, action) => {\n state.dataChatBot = {...action.payload };\n },\n changeCurrentActive:(state,action)=>{\n state.ActiveCurrent=!state.ActiveCurrent\n },\n\n //tab1\n getGroupChatByDsChat: (state, action) => {\n state.groupChats = action.payload\n console.log(state.groupChats && state.groupChats.length != 0, \"task\")\n if (state.groupChats && state.groupChats.length != 0) {\n state.chats = action.payload\n .map(gc => jsonB.parse(gc.noiDungChat))\n .flat()\n state.lastGroupChat = state.groupChats[state.groupChats.length - 1]\n const lastChat = [...jsonB.parse(state.lastGroupChat.noiDungChat)]\n state.lastChat = lastChat\n }\n // else\n // state.chats=[];\n },\n getGroupChatByDsChatByChuyenDeId: (state, action) => {\n state.groupChatsByChuyenDe = action.payload\n // console.log(\n // state.groupChatsByChuyenDe && state.groupChatsByChuyenDe.length != 0,\n // \"chuyende\"\n // )\n if (\n state.groupChatsByChuyenDe &&\n state.groupChatsByChuyenDe.length != 0\n ) {\n state.chats = action.payload\n .map(gc => jsonB.parse(gc.noiDungChat))\n .flat()\n state.lastGroupChat =\n state.groupChatsByChuyenDe[state.groupChatsByChuyenDe.length - 1]\n const lastChat = [...jsonB.parse(state.lastGroupChat.noiDungChat)]\n state.lastChat = lastChat\n }\n // else\n // state.chats=[];\n },\n setChats: (state, action) => {\n state.chats = action.payload\n },\n addGroupChat: (state, action) => {\n console.log(action.payload)\n },\n editGroupChat: (state, action) => {\n console.log(action.payload)\n },\n addUserId: (state, action) => {\n state.userId = action.payload\n localStorage.setItem(\"userId\", jsonB.stringify(action.payload))\n },\n setJoinRoom: (state, action) => {\n state.joinRoom = { ...action.payload }\n localStorage.setItem(\"currentRoom\", JSON.stringify(action.payload))\n },\n setJoinRoomCd: (state, action) => {\n state.joinRoomCd = { ...action.payload }\n localStorage.setItem(\"currentRoom\", JSON.stringify(action.payload))\n },\n\n //Tab2\n getGroupChatByDsChat2: (state, action) => {\n state.groupChats2 = action.payload\n console.log(state.groupChats2 && state.groupChats2.length != 0, \"task\")\n if (state.groupChats2 && state.groupChats2.length != 0) {\n state.chats2 = action.payload\n .map(gc => jsonB.parse(gc.noiDungChat))\n .flat()\n state.lastGroupChat2 = state.groupChats2[state.groupChats2.length - 1]\n const lastChat = [...jsonB.parse(state.lastGroupChat2.noiDungChat)]\n state.lastChat2 = lastChat\n }\n // else\n // state.chats=[];\n },\n getGroupChatByDsChatByChuyenDeId2: (state, action) => {\n state.groupChatsByChuyenDe2 = action.payload\n console.log(\n state.groupChatsByChuyenDe2 && state.groupChatsByChuyenDe2.length != 0,\n \"chuyende\"\n )\n if (\n state.groupChatsByChuyenDe2 &&\n state.groupChatsByChuyenDe2.length != 0\n ) {\n state.chats2 = action.payload\n .map(gc => jsonB.parse(gc.noiDungChat))\n .flat()\n state.lastGroupChat2 =\n state.groupChatsByChuyenDe2[state.groupChatsByChuyenDe2.length - 1]\n const lastChat = [...jsonB.parse(state.lastGroupChat2.noiDungChat)]\n state.lastChat2 = lastChat\n }\n // else\n // state.chats=[];\n },\n getGroupChatBot: (state, action) => {\n state.chatBot = action.payload\n .map(gc => jsonB.parse(gc.noiDungChat))\n .flat()\n },\n setChats2: (state, action) => {\n state.chats2 = action.payload\n },\n addGroupChat2: (state, action) => {\n console.log(action.payload)\n },\n editGroupChat2: (state, action) => {\n console.log(action.payload)\n },\n addUserId2: (state, action) => {\n state.userId = action.payload\n localStorage.setItem(\"userId2\", jsonB.stringify(action.payload))\n },\n setJoinRoom2: (state, action) => {\n state.joinRoom = { ...action.payload }\n localStorage.setItem(\"currentRoom2\", JSON.stringify(action.payload))\n },\n setJoinRoomCd2: (state, action) => {\n state.joinRoomCd2 = { ...action.payload }\n localStorage.setItem(\"currentRoom2\", JSON.stringify(action.payload))\n },\n setListUser:(state, action)=>{\n state.listUser = action.payload\n }\n\n \n },\n});\nexport const {\n ChangeActiveChat1,\n ChangeActiveChat2,\n ChangeActiveChatBot,\n updateDataChat1,\n updateDataChat2,\n updateDataChatBot,\n changeCurrentActive,\n // tab1\n getGroupChatByDsChat,\n getGroupChatByDsChatByChuyenDeId,\n addGroupChat,\n editGroupChat,\n addUserId,\n setJoinRoom,\n setJoinRoomCd,\n setChats,\n\n //tab2\n\n getGroupChatByDsChat2,\n getGroupChatByDsChatByChuyenDeId2,\n addGroupChat2,\n editGroupChat2,\n addUserId2,\n setJoinRoom2,\n setJoinRoomCd2,\n setChats2,\n //list user thuá»™c chuyên Ä‘á»\n setListUser,\n getGroupChatBot\n} = stackChatReducer.actions;\n\nexport default stackChatReducer.reducer;\n\n\n//!--------- action async ------------\nexport const getGroupChatByDsChatApi = (room, taskid) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByDSChat(room, taskid)\n\n const action = getGroupChatByDsChat(result.data.content)\n dispatch(action)\n } catch (error) {\n console.log(\"getGroupChatByDsChatApi\", error)\n }\n }\n}\n//*Láy ds groupchat by chuyende\nexport const getGroupChatByDsChatByChuyenDeApi = (room, chuyenDeId) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByChuyenDeId(\n room,\n chuyenDeId\n )\n\n const action = getGroupChatByDsChatByChuyenDeId(result.data.content)\n dispatch(action)\n } catch (error) {\n console.log(\"getGroupChatByDsChatByChuyenDeApi\", error)\n }\n }\n}\nexport const postGroupChatApi = (groupChat,dsUser) => {\n return async dispatch => {\n try {\n const res = await groupChatService.addGroupChat(groupChat,dsUser)\n const action = addGroupChat(res.status)\n dispatch(action)\n } catch (err) {\n console.error(\"postGroupChatApi\", err)\n }\n }\n}\nexport const putGroupChatApi = (groupChatId, groupChat,dsUser) => {\n return async dispatch => {\n try {\n const res = await groupChatService.editGroupChat(groupChatId, groupChat,dsUser)\n const action = editGroupChat(res.status)\n dispatch(action)\n } catch (err) {\n console.error(\"putGroupChatApi\", err)\n }\n }\n}\n\nexport const getGroupChatByDsChatApi2 = (room, taskid) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByDSChat(room, taskid)\n\n const action = getGroupChatByDsChat2(result.data.content)\n dispatch(action)\n } catch (error) {\n console.log(\"getGroupChatByDsChatApi\", error)\n }\n }\n}\n//*Láy ds groupchat by chuyende\nexport const getGroupChatByDsChatByChuyenDeApi2 = (room, chuyenDeId) => {\n return async dispatch => {\n try {\n const result = await groupChatService.getGroupChatByChuyenDeId(\n room,\n chuyenDeId\n )\n\n const action = getGroupChatByDsChatByChuyenDeId2(result.data.content)\n dispatch(action)\n } catch (error) {\n console.log(\"getGroupChatByDsChatByChuyenDeApi\", error)\n }\n }\n}\nexport const postGroupChatApi2 = (groupChat,dsUser) => {\n return async dispatch => {\n try {\n const res = await groupChatService.addGroupChat(groupChat,dsUser)\n const action = addGroupChat2(res.status)\n dispatch(action)\n } catch (err) {\n console.error(\"postGroupChatApi\", err)\n }\n }\n}\nexport const putGroupChatApi2 = (groupChatId, groupChat,dsUser) => {\n return async dispatch => {\n try {\n const res = await groupChatService.editGroupChat(groupChatId, groupChat,dsUser)\n const action = editGroupChat2(res.status)\n dispatch(action)\n } catch (err) {\n console.error(\"putGroupChatApi\", err)\n }\n }\n}\nexport const getAllUserInChuyenDeApi = () => {\n return async dispatch => {\n try {\n const res = await nguoiDungService.layDsNguoiDungChuyenDe()\n const action = setListUser(res.data.content)\n dispatch(action)\n } catch (err) {\n console.error(\"get all user chuyende\", err)\n }\n }\n}\n","import { AxiosServ } from \"./axios.service\";\n\nclass HttpRequestService {\n constructor() {}\n\n login = (data, setLoading = true) => {\n const uri = \"nguoidung/facebook\";\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n\n getLoTrinhDaDangKI = (idUser, setLoading = true) => {\n const uri = `/lotrinh/lay-ds-tt-lotrinh/${idUser}/1`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getTatCaLoTrinh = (idUser, setLoading = true) => {\n const uri = `/lotrinh/lay-ds-tt-lotrinh/${idUser}/0`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n getDetailKhoaHoc = (id, setLoading = true) => {\n const uri = `khoahoc/info/${id}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n getUrlVideo_FPT = (noiDung, setLoading = true) => {\n const uri = `file/ftp-video/${noiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getUrlVideoRecord_FPT = (noiDung, setLoading = true) => {\n const uri = `file/ftp-video-record/${noiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n postHoanThanhHoc = (data, setLoading = true) => {\n const uri = `lich-su-hoc-tap/hoan-thanh-task`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n getCheckUserDetailBaiHoc = (idUser, idLoTrinh, setLoading = true) => {\n const uri = `tientrinhhoc/kiemtrahethan/${idUser}/${idLoTrinh}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n getDanhSachBaiDaHoc = (idKhoacHoc, idNguoiDung, setLoading = true) => {\n const uri = `lichsuhoctap/danhsachdahocnew/${idKhoacHoc}/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getQandA_KhoacHoc = (idLoTrinh, setLoading = true) => {\n const uri = `cauhoithaoluan/lay-theo-lo-trinh/${idLoTrinh}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getQandA_KhoacHoc = (idLoTrinh, setLoading = true) => {\n const uri = `cauhoithaoluan/lay-theo-lo-trinh/${idLoTrinh}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getInforUser = (idUser, setLoading = true) => {\n const uri = `nguoidung/laythongtinuser/${idUser}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n postCompletedBaiHoc = (data, setLoading = true) => {\n const uri = `lichsuhoctap/hoanthanhbaihocnew`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n getDiemAndBaiTap = (idLoTrinh, idNguoiDung, setLoading = true) => {\n const uri = `nopbai/laydanhsachbaitap/${idLoTrinh}/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getThongTinBaiTapNop = (idNguoiDung, idBaiTap, setLoading = true) => {\n const uri = `nopbai/kiemtrabaitap/${idNguoiDung}/${idBaiTap}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getGiaHanBaiTapNop = (idNguoiDung, idBaiTap, setLoading = true) => {\n const uri = `nopbai/tangthoigiannopbai/${idNguoiDung}/${idBaiTap}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getGiaHanBaiTapTracNghiem = (idNguoiDung, idBaiTap, setLoading = true) => {\n const uri = `nopbai/giamthoigiantracnghiem/${idNguoiDung}/${idBaiTap}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getGiamThoiGianTracNghiem = (idNguoiDung, idBaiTap, setLoading = true) => {\n const uri = `nopbai/giamthoigiantracnghiem/${idNguoiDung}/${idBaiTap}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getTrangThaiQuizz = (idNguoiDung, idBaiHoc, setLoading = true) => {\n const uri = `nopbai/kiemtratracnghiem/${idNguoiDung}/${idBaiHoc}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getLamLaiTracNghiem = (idNguoiDung, idBaiHoc, setLoading = true) => {\n const uri = `nopbai/lamlaitracnghiem/${idNguoiDung}/${idBaiHoc}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n postStartBaiTapNop = (data, setLoading = true) => {\n const uri = `nopbai/nopbaitap`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n postNopBaiTapNop = (data, setLoading = true) => {\n const uri = `nopbai/nopbaitap`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n\n postKetQuaQuizz = (data, setLoading = true) => {\n const uri = `nopbai/noptracnghiem`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n getStatisChartDashboard = (\n idNguoiDung,\n thoiGian,\n top = false,\n setLoading = true\n ) => {\n const uri = `lichsutuongtac/thongkethoigianvideo/${idNguoiDung}/${thoiGian}/${top}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getStatisTopUser = (loai, setLoading = true) => {\n const uri = `lichsutuongtac/thongkenguoidung/${loai}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getDanhSachDeadline = (idNguoiDung, setLoading = true) => {\n const uri = `lichsutuongtac/thongkedeadlinebaitap/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getKhoaDangHoc = (idNguoiDung, setLoading = true) => {\n const uri = `lichsutuongtac/baidanghoc/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getAllItems = (setLoading = true) => {\n const uri = `vatpham`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getYoursItems = (idNguoiDung, setLoading = true) => {\n const uri = `/vatpham/layvatpham/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getBuyItem = (idNguoiDung, idVatPham, setLoading = true) => {\n const uri = `/vatpham/layvatpham/${idNguoiDung}/${idVatPham}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getAllThongBao = (idNguoiDung, setLoading = true) => {\n const uri = `/thongbao/laythongbao`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getChangeStatusThongBao = (idNguoiDung, setLoading = true) => {\n const uri = `/thongbao/daxem/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getAllDiemBaiTapUser = (idNguoiDung, setLoading = true) => {\n const uri = `/nopbai/danhsachdiemtatca/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getLichSuHoatDong = (idNguoiDung, setLoading = true) => {\n const uri = `/lichsutuongtac/laylichsu/${idNguoiDung}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getAllTypeLoTrinh = (setLoading = true) => {\n const uri = `/loaikhoahoc`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getTatCaBaiTapDaLam = (idNguoiDung, setLoading = true) => {\n const uri = `/lichsutuongtac/baitaphoanthanh/${idNguoiDung}`;\n\n return AxiosServ.getMethod(uri, setLoading);\n };\n getMuaItem = (idNguoiDung, idVatPham, setLoading = true) => {\n const uri = `vatpham/muavatpham/${idNguoiDung}/${idVatPham}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n postCheckUserDemoLogin = (code, email, sodt, setLoading = true) => {\n const uri = `nguoidung/checkcode/${code}/${email}/${sodt}`;\n return AxiosServ.postMethod(uri, setLoading);\n };\n getCheckThoiGianHocDemo = (code, setLoading = true) => {\n const uri = `nguoidung/laythoigiandemonewmoi/${code}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getMaVaTenLoTrinh = (setLoading = true) => {\n const uri = `lotrinh`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getCheckSDT = (soDienThoai, setLoading = true) => {\n const uri = `nguoidung/so-dien-thoai/${soDienThoai}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getCheckGmail = (gmail, setLoading = true) => {\n const uri = `nguoidung/email/${gmail}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n postDangKyUser = (data, setLoading = true) => {\n const uri = `nguoidung/dang-ky-nguoi-dung`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n postUpCMND = (data, setLoading = true) => {\n const uri = `file/cmnd`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n postKetQuaLuckyWhell = (data, setLoading = true) => {\n const uri = `cauhinh/vongquay`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n postNhaUuDai = (data, setLoading = true) => {\n const uri = `cauhinh/nhanuudai`;\n return AxiosServ.postMethod(uri, data, setLoading);\n };\n // maGioiThieu\n getReportLoTrinh = (NguoiDungId, LoTrinhId, setLoading = true) => {\n const uri = `nopbai/quatrinhhoctap/${NguoiDungId}/${LoTrinhId}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n getLayDuongDanVideoDigitalService = (fileName, setLoading = true) => {\n const uri = `/file/ftp-video-digital/${fileName}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n\n getDetailRoadMap = (id, setLoading = true) => {\n const uri = `api/buoihoc/lay-danh-sach-buoi-hoc-theo-lop/${id}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getDanhSachCauHoiTestDauVao = (setLoading = true) => {\n const uri = `cauhinh/quiz-test-java`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n getKiemTraEmailTestDauVao = (email, setLoading = true) => {\n const uri = `nguoidung/check-bai-test/${email}`;\n return AxiosServ.getMethod(uri, setLoading);\n };\n putNopBaiTestDauVao = (data, setLoading = true) => {\n const uri = \"nguoiDung/nopbaiTest\";\n return AxiosServ.putMethod(uri, data, setLoading);\n };\n getCheckAccount = (email,sdt) => {\n const uri = `nguoidung/checkAccount/${email}/${sdt}`;\n return AxiosServ.postMethod(uri);\n };\n}\n\nconst httpServ = new HttpRequestService();\n\nexport default httpServ;","import { createAsyncThunk, createSlice } from \"@reduxjs/toolkit\";\nimport servCodingCamp from \"../../services/codingCam.service\";\n\nconst initialState = {\n personal: {\n profile: {},\n danhSachVideo: [],\n },\n videoWall: {\n thongTinUser: {},\n },\n listBinhLuan: [],\n dataComment: {\n payload: {\n nopBaiId: 0,\n noiDung: \"\",\n binhLuanId: 0,\n binhLuanChaId: 0,\n },\n replyTo: \"\",\n commentStatus: 0,\n },\n listThanhTich: [],\n};\nexport const getListBinhLuanServ = createAsyncThunk(\n \"tuongNhaSlice/getListBinhLuan\",\n async (payload) => {\n let { nopBaiId, binhLuanId } = payload;\n const response = await servCodingCamp.getBinhLuanVideo(nopBaiId, binhLuanId);\n return response.data.content.reverse();\n }\n);\nexport const getDetailVideoWallServ = createAsyncThunk(\n \"tuongNhaSlice/getDetailVideoWallServ\",\n async (payload) => {\n const response = await servCodingCamp.getDetailVideoWall(payload);\n return response.data.content;\n }\n);\nconst tuongNhaSlice = createSlice({\n name: \"tuongNhaSlice\",\n initialState,\n reducers: {\n setPersonalState: (state, action) => {\n state.personal = action.payload;\n },\n setVideoWall: (state, action) => {\n state.videoWall = action.payload;\n },\n setDataComment: (state, action) => {\n state.dataComment = action.payload;\n },\n setListThanhTich: (state, action) => {\n state.listThanhTich = action.payload;\n },\n },\n extraReducers: {\n [getListBinhLuanServ.fulfilled]: (state, action) => {\n state.listBinhLuan = action.payload;\n },\n [getDetailVideoWallServ.fulfilled]: (state, action) => {\n state.videoWall = action.payload;\n },\n },\n});\n\nexport const { setPersonalState, setVideoWall, setDataComment, setListThanhTich } =\n tuongNhaSlice.actions;\n\nexport default tuongNhaSlice.reducer;\n\nexport const selectPersionalProfile = (state) => state.profile;\nexport const selectPersonalState = (state) => state.tuongNhaSlice.personal;\nexport const selectVideoWall = (state) => state.tuongNhaSlice.videoWall;\nexport const selectListBinhLuan = (state) => state.tuongNhaSlice.listBinhLuan;\nexport const selectDataComment = (state) => state.tuongNhaSlice.dataComment;\nexport const selectListThanhTich = (state) => state.tuongNhaSlice.listThanhTich;\n","// export const API_URL_DOMAIN = \"https://api.codingcamp.edu.vn\";\nexport const API_URL_DOMAIN = \"https://apimentor11.cybersoft.edu.vn/api\";\n// export const API_URL_DOMAIN = \"https://localhost:44366/api\";\n// export const API_URL_DOMAIN = \"https://localhost:5001/api\";\nexport const emailFree = \"freeacc@gmail.com\";","import { Button, message, Progress } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { createPayloadNopBai } from \"../../utils/taskUtils\";\nimport { typeTask } from \"../../routes/utitlity\";\nimport servCodingCamp from \"../../services/codingCam.service\";\nimport toast from \"react-hot-toast\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nimport { typeTrangThaiNop } from \"../StepProjectInstruction/util\";\nimport { useDispatch } from \"react-redux\";\nimport { updateThongTinMoRongAction } from \"../../redux/reducer/authReducer\";\nimport { useTranslation } from \"react-i18next\";\nexport default function Navigate_Footer_Pratices({\n current,\n total,\n handleClickNextQuestion,\n isDisableBtn,\n listQuestion,\n onSuccess,\n setNextTask\n}) {\n const { t } = useTranslation()\n\n let dispatch = useDispatch();\n let totalTime;\n let timmer = setInterval(() => {\n totalTime++;\n }, 1000);\n // const nguoiDung = LocalStorageUtil.getLoginLocalStorage();\n let userInfo = localStorageServ.userInfo.get();\n let { chuyenDeId, taskId, monHocId } = useParams();\n const markTaskAsCompleted = () => {\n const taskCompletionData = {\n nguoiDungId: userInfo.id,\n chuyenDeId,\n monHocId,\n taskId,\n maLoai: typeTask.QUIZ,\n baiHocId: 0,\n soPhutThucHien: Math.floor(timmer / 60),\n };\n return servCodingCamp.postHoanThanhHoc(taskCompletionData).then((res)=>{\n setNextTask(res.data.content)\n })\n };\n const submitAssignmentData = (assignmentData) => {\n return servCodingCamp.postNopBaiTap(assignmentData);\n };\n const handle_PostKetQua = async () => {\n let countCorrected = 0;\n for (let index = 0; index < listQuestion.length; index++) {\n const question = listQuestion[index];\n question.isCorrect && countCorrected++;\n }\n let diemQuizz = countCorrected;\n if (diemQuizz == 0) {\n diemQuizz++;\n }\n let baiLam = { soCauDung: countCorrected, noiDungBaiNop: listQuestion };\n let assignmentData = createPayloadNopBai(\n taskId,\n typeTask.QUIZ,\n JSON.stringify(baiLam),\n 0,\n chuyenDeId,\n monHocId\n );\n\n try {\n let result = await submitAssignmentData(assignmentData);\n if (result.data?.content.trangThai == typeTrangThaiNop.DA_CHAM) {\n await markTaskAsCompleted();\n }\n onSuccess();\n toast.success(\"Bạn đã ná»™p bà i táºp thà nh công\");\n clearImmediate(timmer);\n dispatch(updateThongTinMoRongAction());\n } catch (error) {\n console.error(error);\n toast.error(\"LÆ°u Ä‘iểm không thà nh công\");\n }\n // gá»i api hoà n thà nh\n };\n\n const handleClickNext = () => {\n return !isDisableBtn ? handleClickNextQuestion() : null;\n };\n const percent = Math.floor((current / total) * 100);\n const nextBtnCss = isDisableBtn\n ? \" text-gray-600 bg-gray-300 cursor-not-allowed\"\n : \" bg-blue-theme text-white \";\n return (\n <div\n style={{\n background:\n \"radial-gradient(91.01% 91.01% at 16.52% 42.45%, #ffc94c 0%, #eebe47 23%, #edb720 52%\",\n }}\n className=\" bg-white flex items-center h-16 w-full justify-center space-x-10 px-16 border-none rounded-2xl\"\n >\n <div className=\"flex items-cente space-x-5 justify-center max-w-screen-md w-full\">\n <Progress\n step={total}\n percent={percent}\n // size=\"small\"\n className=\"w-full\"\n showInfo={false}\n strokeWidth={15}\n // rgb(139, 29, 234) 1.36%, rgb(74, 0, 224) 100%)\n strokeColor={{\n // \"0%\": \"#4A00E0\",\n \"0%\": \"#301D09\",\n \"100%\": \"#FF0C0C\",\n // \"100%\": \"#8E2DE2\",\n }}\n trailColor={\"rgba(68, 66, 178, 0.1)\"}\n />\n <span className=\"font-bold flex-shrink-0 text-content text-black\">\n {current}/{total} câu\n </span>\n </div>\n\n <Button\n onClick={() => {\n return current === total ? handle_PostKetQua() : handleClickNext();\n }}\n className={\n \" text-white duration-150 font-bold px-8 rounded flex items-center h-10 flex-shrink-0 border-none focus:border-blue-theme hover:border-transparent hover:shadow-lg\" +\n nextBtnCss\n }\n // loading={loading}\n >\n {current == total ? t('chiTietNhiemVu.hoanThanh') : t('chiTietNhiemVu.cauTiepTheo')}\n </Button>\n </div>\n );\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport localStorageServ from \"../../services/locaStorage.service\";\nvar fakeData = {\n signUp: {\n userInfo: {\n email: \"testjava@gmail.com\",\n hoTen: \"test\",\n soDT: \"4234234234243\",\n maLoTrinh: [],\n avatar: \" string\",\n urls: \" string\",\n thongTinMoRong: {\n namSinh: \" string\",\n soCmnd: \" string\",\n hinhCmnd: [],\n congViecHienTai: \" string\",\n noiCongTacHienTai: \"Hà Ná»™i\",\n nguonGioiThieu: \" string\",\n facebookUrl: \" string\",\n luongMongMuon: 0,\n dongYHoTroTimViec: false,\n predictiveIndexRequire: [],\n predictiveIndex: [],\n truongHoc: [\n {\n tenTruong: \"\",\n thoiGian: [],\n moTa: \"\",\n },\n ],\n kinhNghiem: [\n {\n tenCongTy: \"\",\n thoiGian: [],\n chucVu: \"\",\n moTa: \"\",\n },\n ],\n thanhTich: [],\n capDanhHieu: 1,\n tagSkill: [],\n hoTenPH: \"\",\n emailPH: \"\",\n soDTPH: \"\",\n gioiThieu: \"string\"\n },\n maGioiThieu: \"\",\n linkNopBai: \"\",\n },\n currentStep: 0,\n isShowModal: false,\n listCMND: [],\n loading: false,\n listCauHoi: [],\n },\n};\nconst initialState = {\n userInfo: {\n email: \"\",\n hoTen: \"\",\n soDT: \"\",\n maLoTrinh: [],\n avatar: \" string\",\n urls: \" string\",\n thongTinMoRong: {\n namSinh: \" string\",\n soCmnd: \" string\",\n hinhCmnd: [],\n congViecHienTai: \" string\",\n noiCongTacHienTai: \" string\",\n nguonGioiThieu: \" string\",\n facebookUrl: \" string\",\n luongMongMuon: 0,\n dongYHoTroTimViec: false,\n predictiveIndexRequire: [\"string\", \"string\"],\n predictiveIndex: [\"string\", \"string\"],\n truongHoc: [\n {\n tenTruong: \"\",\n thoiGian: [],\n moTa: \"\",\n },\n ],\n kinhNghiem: [\n {\n tenCongTy: \"\",\n thoiGian: [],\n chucVu: \"\",\n moTa: \"\",\n },\n ],\n thanhTich: [],\n capDanhHieu: 1,\n tagSkill: [],\n hoTenPH: \"\",\n emailPH: \"\",\n soDTPH: \"\",\n gioiThieu: \"string\",\n },\n maGioiThieu: \"\",\n linkNopBai: \"\",\n },\n currentStep: 0,\n isShowModal: false,\n listCMND: [],\n loading: false,\n listCauHoi: [],\n isJavaCourse: false,\n // listCauHoi: fakedata,\n};\n\nexport const SignUpSlice = createSlice({\n name: \"signUpReducer\",\n initialState,\n reducers: {\n setUserInfor: (state, action) => {\n state.userInfo = action.payload;\n },\n setCurrentStep: (state, action) => {\n state.currentStep = action.payload;\n localStorage.setItem('currentStep', action.payload);\n },\n setImgCMND: (state, action) => {\n state.listCMND = action.payload;\n },\n setLoadingSigup: (state, action) => {\n state.loading = action.payload;\n },\n setListCauHoiDauVao: (state, action) => {\n state.listCauHoi = action.payload;\n },\n setIsJavaCourse: (state, action) => {\n state.isJavaCourse = action.payload;\n },\n },\n});\nexport const {\n setIsJavaCourse,\n setSignUp,\n setCurrentStep,\n setUserInfor,\n setLoadingSigup,\n setListCauHoiDauVao,\n} = SignUpSlice.actions;\nexport default SignUpSlice.reducer;\n","export let typeTrangThaiNop = {\n DA_CHAM: \"DA_CHAM\",\n NOP_LAI: \"NOP_LAI\",\n CHO_CHAM: \"CHO_CHAM\",\n DANG_LAM: \"DANG_LAM\",\n CHUA_LAM: \"CHUA_LAM\",\n HET_HAN: \"HET_HAN\",\n LAM_LAI: \"LAM_LAI\",\n};\n","export const DARK_MODE = \"dark\";\nexport const LIGHT_MODE = \"light\";\n\n//\n// export const DARK_MODE_CODINGCAMP = \"darkTask\";\n// export const LIGHT_MODE_CODINGCAMP = \"lightTask\";\n","export let languageEditor = {\n js: \"javascript\",\n py: \"python\",\n cpp: \"cpp\",\n java: \"java\",\n};\nexport function isJsonString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\nexport function isJson(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\nexport const levelClassName = {\n easy: \"bg-green-700 text-green-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n medium:\n \"bg-yellow-700 text-yellokgw-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n hard: \"bg-red-700 text-red-200 border-none px-3 py-1 text-xs rounded-2xl capitalize\",\n};\nexport function checkAnswers(arr) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].message !== \"Right answer\") {\n return false;\n }\n }\n return true;\n}\n"],"sourceRoot":""}