{"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,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\"","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(\"&hearts;\")) {\n      // list input cần convert\n      var currentIndex = 0;\n\n      var noiDung = noiDung.replace(/&hearts;/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(\"&spades;️\");\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":""}