{"version":3,"sources":["assets/img/SidebarIcon/ManageSchool/icon-other-settings-active.svg","assets/img/video.png","assets/img/logo.svg","components/Login/LoginSection/LoginForm/LoginForm.styles.js","store/login/loginSlice.js","services/login.js","components/Login/LoginSection/LoginForm/LoginForm.js","components/Login/LoginSection/LoginSection.styles.js","components/Login/LoginSection/LoginSection.js","components/Login/PartnerNetworkSection/PartnerNetwork.styles.js","components/Login/PartnerNetworkSection/PartnerNetwork.js","pages/Login/Login.styles.js","pages/Login/Login.js","components/Header/Navigations/NavItem.styles.js","components/Header/Navigations/NavItem.js","components/Header/Navigations/NavbarCollapse.styles.js","components/Header/Navigations/NavbarCollapse.js","components/Header/Navigations/NavProfile.styles.js","helpers/csvUpload.js","constants/index.js","services/accountCreation.js","services/refreshToken.js","store/account-creation/accountCreationSlice.js","services/dashboard.js","store/dashboard/dashboardSlice.js","services/affiliateDashboard.js","store/affiliate-dashboard/affiliateDashboardSlice.js","store/index.js","helpers/logout.js","components/Header/Navigations/NavProfile.js","components/Header/Header.styles.js","components/Header/Header.js","assets/styles/buttons.styles.js","components/Dashboard/TableData.styles.js","helpers/formatNumber.js","components/Dashboard/TableData.js","pages/Dashboard/DisplayDashboard.style.js","components/Shared/Spinner.styles.js","components/Shared/Spinner.js","pages/Dashboard/DisplayDashboard.js","pages/Dashboard/Dashboard.styles.js","pages/Dashboard/Dashboard.js","components/Sidebar/Sidebar.styles.js","components/Sidebar/Sidebar.js","components/Sidebar/SidebarNavLink.styles.js","components/Sidebar/SidebarNavLink.js","components/Sidebar/SidebarManageSchool.js","pages/ManageSchool/MySchool.styles.js","components/Shared/DropdownMenu.styles.js","components/Shared/DropdownMenu.js","pages/ManageSchool/MySchool.js","pages/ManageSchool/CreateAccount.styles.js","components/ManageSchool/RaisePO.styles.js","components/ManageSchool/RaisePO.js","helpers/parseAccountTableData.js","components/ManageSchool/CreateAccount/CreateAccountTable.styles.js","components/ManageSchool/CreateAccount/CreateAccountTable.js","pages/ManageSchool/CreateAccount.js","components/ManageSchool/CreateAccount/NumberIndicator.styles.js","components/ManageSchool/CreateAccount/NumberIndicator.js","pages/ManageSchool/UploadCSV.styles.js","pages/ManageSchool/UploadCSV.js","pages/ManageSchool/PreviewCSV.styles.js","components/Shared/PopupModal.styles.js","components/Shared/PopupModal.js","components/ManageSchool/CreateAccount/ConfirmationModalBody.styles.js","components/ManageSchool/CreateAccount/ConfirmationModalBody.js","components/Shared/Pagination.styles.js","components/Shared/Pagination.js","components/ManageSchool/CreateAccount/ValidationComments.js","pages/ManageSchool/PreviewCSV.js","pages/ManageSchool/ViewAccounts.styles.js","pages/ManageSchool/ViewAccounts.js","pages/ManageSchool/RenewAccount.styles.js","components/ManageSchool/RenewAccount/RenewAccountTable.styles.js","components/ManageSchool/RenewAccount/RenewAccountTable.js","pages/ManageSchool/RenewAccount.js","pages/ManageSchool/ManageSchool.styles.js","pages/ManageSchool/ManageSchool.js","components/AffiliateDashboard/PromoCodeCard.styles.js","components/AffiliateDashboard/PromoCodeCard.js","pages/AffiliateDashboard/AffiliateDashboard.styles.js","components/AffiliateDashboard/ReferralTable.styles.js","components/AffiliateDashboard/ReferralTable.js","pages/AffiliateDashboard/AffiliateDashboard.js","Routes.js","assets/styles/globalStyle.style.js","App.js","serviceWorker.js","index.js","assets/img/login-koobits-logo.svg","assets/img/login-partner-icon.svg","assets/img/login-background.svg","assets/img/login-decoration.svg","assets/img/icon-header-partners.svg","assets/img/avatar.png","assets/img/SidebarIcon/ManageSchool/icon-my-schools.svg","assets/img/SidebarIcon/ManageSchool/icon-my-schools-active.svg","assets/img/SidebarIcon/ManageSchool/icon-create-account.svg","assets/img/SidebarIcon/ManageSchool/icon-create-account-active.svg","assets/img/SidebarIcon/ManageSchool/icon-renew-account.svg","assets/img/SidebarIcon/ManageSchool/icon-renew-account-active.svg","assets/img/SidebarIcon/ManageSchool/icon-align-syllabus.svg","assets/img/SidebarIcon/ManageSchool/icon-align-syllabus-active.svg","assets/img/SidebarIcon/ManageSchool/icon-school-report.svg","assets/img/SidebarIcon/ManageSchool/icon-school-report-active.svg","assets/img/SidebarIcon/ManageSchool/icon-other-settings.svg"],"names":["module","exports","_g","InputContainer","styled","div","LoginFormContainer","initialState","user","isLoading","isAffiliate","error","getToken","createAsyncThunk","params","username","password","urlencoded","URLSearchParams","append","process","fetch","method","headers","body","then","response","json","result","isNil","Error","error_description","catch","err","message","loginRequest","loginSlice","createSlice","name","reducers","resetLogin","state","extraReducers","pending","fulfilled","action","localStorage","setItem","payload","access_token","refresh_token","JSON","parse","role","findIndex","roles","ID","rejected","actions","reducer","Password","handleChange","useState","type","setType","id","placeholder","onChange","value","required","className","onClick","e","LoginErrors","errorTypes","url","link","text","style","color","paddingLeft","marginBottom","textAlign","hasOwnProperty","href","LoginForm","dispatch","useDispatch","useSelector","login","setUsername","setPassword","target","onSubmit","preventDefault","res","history","push","LoginSectionContainer","LoginSection","src","KoobitsLogo","alt","PartnerIcon","PartnerNetworkContainer","PartnerNetwork","Background","Decoration","LoginContainer","Login","_excluded","_extends","Object","assign","i","arguments","length","source","key","prototype","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","title","props","createElement","width","height","viewBox","ref","transform","d","fill","stroke","strokeWidth","ForwardRef","forwardRef","NavItemContainer","NavItem","isActive","to","children","classname","join","withRouter","location","match","pathname","slice","NavbarCollapseContainer","NavbarCollapse","affiliateNav","map","nav","index","String","navs","ProfileContainer","NavProfileContainer","checkAccountQuota","remainingQuota","numOfCsvRows","checkCSVHeaders","accountType","csvData","isCreation","firstRow","passValidation","validationResult","missingHeaders","invalidHeaders","unshift","csvHeaders","header","includes","checkMissingInvalidValues","missingValues","invalidValues","row","missingCols","col","invalidCols","new_existing_user","toLowerCase","level","parsedInt","parseInt","login_id","toString","pass","checkDuplicateValues","duplicateRows","duplicateHashmap","seenHashmap","isDuplicate","splitCSVRowsIntoBatches","output","j","tempArray","parseVerifyCSVBody","IsExistingUser","Name","LoginId","GradeLevel","Class","class_name","combineAccountLists","apiResult","filter","Accountlist","flat","checkAPICsvValidation","account","Comments","AccountType","1","2","3","4","5","6","7","PaymentStatus","ContractStatus","CSVHeaders","seriesValidate","csvRows","contractId","promises","batch","validateCSVFunction","pSeries","rawBody","Contract_Id","FileType","AccountsList","authorization","getItem","stringify","IsSuccessful","Result","Message","createAccountsFunction","contractFileId","renewAccountsFunction","contractFileID","isResetPassword","fetchAccountsByContract","contractID","fetchAccountQuotaByContractIDAccountType","fetchCustomersByYear","year","fetchNewCustomersByYear","fetchRenewAccountsSummary","validateCSV","bulkCancelValidations","contractFileIds","cancelValidation","Promise","allSettled","some","createAccounts","refreshToken","logOut","refreshFetchWrapper","request","a","refreshTokenResult","customers","contracts","accountQuotas","academicYears","newAccounts","renewAccounts","studentCSVValidations","studentCSV","studentCSVFilename","teacherCSVValidations","teacherCSV","teacherCSVFilename","selectedSchool","selectedContractId","accountCreationResult","accountRenewalResult","exportResult","isCreationLoading","isRenewalLoading","isExportCSVLoading","isValidationLoading","getAcademicYears","data","getCustomersByYear","getNewCustomersByYear","getRenewAccountsSummary","getAccountQuotaByContractID","bulkValidateStudentCSV","queryParams","bulkValidateTeacherCSV","postValidateStudentCSV","postValidateTeacherCSV","bulkCreateAccounts","contractFileIDs","seriesCreateAccounts","bulkRenewAccounts","seriesRenewAccounts","postCreateAccounts","exportCreatedAccountsCSV","exportCreatedAccountstoCSV","exportCreatedAccountsJSON","pageIndex","pageSize","exportCreatedAccountstoJSON","accountCreationSlice","resetAccountCreation","setStudentCSV","setTeacherCSV","setStudentCSVFilename","setTeacherCSVFilename","setSelectedContract","setSelectedSchool","resetCSVValidations","resetStudentCSVFileAndValidations","resetTeacherCSVFileAndValidations","fetchCustomers","authorizedSchools","getCustomers","dashboardSlice","resetDashboard","Customers","AuthorizedCustomers","fetchPromoCode","getPromoCode","getReferrals","affiliateDashboardSlice","promoCode","referrals","selectedMonth","setSelectedMonth","months","dateKey","moment","format","Array","from","Set","getUniqueMonths","SubscribedUsersList","middleware","getDefaultMiddleware","store","configureStore","loginReducer","accountCreation","accountCreationReducer","dashboard","dashboardReducer","affiliateDashboard","affiliateDashboardReducer","removeItem","ProfileAvatar","avatar","NavProfile","Dropdown","Toggle","as","Menu","Item","eventKey","HeaderNav","Header","PartnersLogo","primaryButton","secondaryButton","TableDataContainer","formatNumber","locale","number","Intl","NumberFormat","TableData","useHistory","selectedCustomer","setSelectedCustomer","setCheckboxes","check","checkboxes","document","getElementsByClassName","checked","customerArray","cust","School_Id","event","scope","item","customer","CountryName","SchoolName","ContractModels","status","StudentPopulation","DisplayContainer","SpinnerContainer","position","gridColumn","top","Spinner","DisplayDashboard","useEffect","DashboardContainer","Dashboard","SidebarContainer","Sidebar","expanded","toggleNavigation","NavLinkContainer","SidebarNavLink","path","useLocation","SidebarManageSchool","isActivePath","MySchoolsActive","MySchools","CreateAccountActive","CreateAccount","RenewAccountActive","RenewAccount","AlignSyllabusActive","AlignSyllabus","SchoolReportActive","SchoolReport","OtherSettingsActive","OtherSettings","MySchoolContainer","StyledDropdown","DropdownMenu","selectedValue","valueKey","values","setValue","valueTemplate","variant","undefined","MySchool","setYear","tableData","contract","ContractId","ContractDetails","lineItem","ItemType","reduce","accumulator","currentValue","AccountsPurchased","CreateAccountContainer","RaisePOContainer","RaisePO","parseTableData","school","schoolName","country","paidContracts","contractResult","date","StartDate","studentPurchased","teacherPurchased","studentAccCreated","teacherAccCreated","studentAccRemaining","teacherAccRemaining","academicYear","AcademicYear","studentLineItemIndex","teacherLineItemIndex","AccountsConsumed","AccountsRemaining","CreateAccountTableContainer","CreateAccountTable","selectedContract","parsedTableData","console","log","NumberIndicatorContainer","getAccountQuota","accountTypeId","contractDetails","lineItemIndex","accPurchased","accCreated","accRemaining","NumberIndicator","setCSVErrors","setShowToast","isRenewal","renewAccount","accountQuota","CSVData","setCSVData","isUploadDisabled","setIsUploadDisabled","showSelectCSV","setShowSelectCSV","handleStudentFileLoaded","fileInfo","errors","headersValidation","apiValidation","apiAccountQuota","quotaValidation","handleTeacherFileLoaded","handleError","papaparseOptions","dynamicTyping","skipEmptyLines","transformHeader","replace","trim","UpdatedDate","cssClass","label","onFileLoaded","onError","parserOptions","inputId","disabled","UploadCSVContainer","ToastContainer","UploadCSV","selectedContractDetails","find","uniqueAcademicYears","sort","b","studentCSVErrors","setStudentCSVErrors","teacherCSVErrors","setTeacherCSVErrors","showStudentToast","setShowStudentToast","showTeacherToast","setShowTeacherToast","getContract","Toast","onClose","show","Body","background","rel","Video","PreviewCSVContainer","ResetPassword","isRenewAccount","StyledModal","Modal","PopupModal","hide","keyboard","onHide","ConfirmationModalBodyContainer","ConfirmationModalBody","file","Contract_File_Id","animation","size","marginLeft","PaginationContainer","PaginationShared","maxPage","numVisiblePages","onPageChange","onSearchPageChange","page","searchPage","pages","pageNumbers","range","firstIndex","numPagesOnLeft","Math","floor","numPagesOnRight","lastIndex","getPaginationNumbers","aria-label","pageNumber","max","evt","defaultProps","ValidationComments","comments","hasLoginIDString","Badge","PreviewCSV","duplicateValidation","missingValidation","frontendValidation","showConfirmation","setShowConfirmation","hideConfirmation","setIsResetPassword","maxStudentPages","ceil","maxTeacherPages","offset","setOffset","currentPage","setCurrentPage","studentSlice","teacherSlice","newOffset","isSubmitButtonVisible","flattenedAccountLists","isValidateButtonDisabled","setIsValidateButtonDisabled","val","charAt","toUpperCase","missingValue","invalidValue","rowNumber","Pagination","ViewAccountsContainer","TableContainer","ViewAccounts","sortedCsvData","accountTypeID","parsedCsvString","setParsedCsvString","row1","row2","padding","display","flexDirection","alignItems","RenewAccountContainer","RenewAccountTableContainer","RenewAccountTable","filteredByAcademicYear","ManageSchoolContainer","ManageSchool","exact","component","Card","hasCopied","ContentBankBtn","button","PromoCodeCard","code","setHasCopied","button-href","data-clipboard-text","onSuccess","OverlayTrigger","placement","overlay","Tooltip","window","open","Page","Referrals","ReferralTableContainer","ReferralTable","toFixed","AffiliateDashboard","reverse","PurchaseDate","createBrowserHistory","basename","AuthenticatedRoute","Component","rest","render","Routes","GlobalStyle","createGlobalStyle","App","Boolean","hostname","ReactDOM","StrictMode","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.7bd796e4.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/icon-other-settings-active.caef8ef7.svg\";","module.exports = __webpack_public_path__ + \"static/media/video.ecf8adca.png\";","var _g;\n\nvar _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgLogo = function SvgLogo(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 110.1,\n height: 40.987,\n viewBox: \"0 0 110.1 40.987\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"logo\",\n transform: \"translate(-12.975 -10.4)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_455\",\n \"data-name\": \"Path 455\",\n d: \"M196.614,95.086a5.825,5.825,0,0,0-2.14-2.369,6.165,6.165,0,0,0-3.235-.917,5.977,5.977,0,0,0-3.159.841,5.814,5.814,0,0,0-2.191,2.318,7.286,7.286,0,0,0-.051,6.5A5.712,5.712,0,0,0,188,103.823a6.076,6.076,0,0,0,3.261.892,6.293,6.293,0,0,0,3.261-.866,5.825,5.825,0,0,0,2.14-2.369,7.161,7.161,0,0,0,.739-3.21A7.829,7.829,0,0,0,196.614,95.086Zm-2.649,5.2a2.975,2.975,0,0,1-1.044,1.376,2.906,2.906,0,0,1-1.732.509,2.558,2.558,0,0,1-2.318-1.146,4.953,4.953,0,0,1-.79-2.751,5.319,5.319,0,0,1,.382-2.063,3.062,3.062,0,0,1,1.07-1.376,3.094,3.094,0,0,1,3.362.025,3.283,3.283,0,0,1,1.07,1.4,5.151,5.151,0,0,1,.382,2.012A6.417,6.417,0,0,1,193.965,100.283Z\",\n transform: \"translate(-128.279 -60.665)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_456\",\n \"data-name\": \"Path 456\",\n d: \"M252.514,95.086a5.825,5.825,0,0,0-2.14-2.369,6.165,6.165,0,0,0-3.235-.917,5.977,5.977,0,0,0-3.159.841,5.814,5.814,0,0,0-2.191,2.318,7.286,7.286,0,0,0-.051,6.5,5.712,5.712,0,0,0,2.165,2.369,6.076,6.076,0,0,0,3.261.892,6.293,6.293,0,0,0,3.261-.866,5.825,5.825,0,0,0,2.14-2.369,7.162,7.162,0,0,0,.739-3.21A7.828,7.828,0,0,0,252.514,95.086Zm-2.267,3.159a6.439,6.439,0,0,1-.382,2.038,2.975,2.975,0,0,1-1.044,1.376,2.906,2.906,0,0,1-1.732.509,2.558,2.558,0,0,1-2.318-1.146,4.952,4.952,0,0,1-.79-2.751,5.319,5.319,0,0,1,.382-2.063,3.062,3.062,0,0,1,1.07-1.376,3.094,3.094,0,0,1,3.362.025,3.283,3.283,0,0,1,1.07,1.4A5.024,5.024,0,0,1,250.247,98.245Z\",\n transform: \"translate(-169.94 -60.665)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_457\",\n \"data-name\": \"Path 457\",\n d: \"M310.663,86.544a4.241,4.241,0,0,0-1.248-1.758,4.412,4.412,0,0,0-1.452-.815,3.5,3.5,0,0,0,.56-.509,4.178,4.178,0,0,0,.866-1.477,4.92,4.92,0,0,0,.255-1.6,4.138,4.138,0,0,0-.713-2.165,4.5,4.5,0,0,0-1.809-1.554,5.444,5.444,0,0,0-2.5-.56h-3.9a1.529,1.529,0,0,0-1.07.382,1.478,1.478,0,0,0-.459,1.146V91.944a1.429,1.429,0,0,0,1.6,1.528h4.28a6.472,6.472,0,0,0,3.133-.739,5.233,5.233,0,0,0,2.063-1.936,4.97,4.97,0,0,0,.713-2.522A6.114,6.114,0,0,0,310.663,86.544Zm-4.331-4.636a1.882,1.882,0,0,1-.815.79,2.68,2.68,0,0,1-1.325.306h-2.038v-4.33h2.293a2.035,2.035,0,0,1,1.579.611,2.248,2.248,0,0,1,.586,1.528A2.009,2.009,0,0,1,306.333,81.908Zm1.63,6.292a2.961,2.961,0,0,1-.382,1.325,2.338,2.338,0,0,1-1.1.917,4.649,4.649,0,0,1-1.91.357h-2.445V85.551h2.649a3.768,3.768,0,0,1,1.783.382,2.57,2.57,0,0,1,1.044.968A2.383,2.383,0,0,1,307.963,88.2Z\",\n transform: \"translate(-213.314 -48.964)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_458\",\n \"data-name\": \"Path 458\",\n d: \"M355.858,78.813a1.715,1.715,0,0,0,1.223-.509,1.588,1.588,0,0,0,.535-1.2,1.658,1.658,0,0,0-.509-1.2,1.753,1.753,0,0,0-2.471,0,1.607,1.607,0,0,0,0,2.394A1.716,1.716,0,0,0,355.858,78.813Z\",\n transform: \"translate(-254.229 -48.442)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_459\",\n \"data-name\": \"Path 459\",\n d: \"M357.647,93.882A1.509,1.509,0,0,0,356.6,93.5a1.555,1.555,0,0,0-1.044.382,1.4,1.4,0,0,0-.458,1.1V105.09a1.387,1.387,0,0,0,.458,1.07,1.49,1.49,0,0,0,1.019.382,1.555,1.555,0,0,0,1.044-.382,1.351,1.351,0,0,0,.459-1.07V94.952A1.257,1.257,0,0,0,357.647,93.882Z\",\n transform: \"translate(-254.974 -61.932)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_460\",\n \"data-name\": \"Path 460\",\n d: \"M380.747,81.8a1.425,1.425,0,0,0-1.044-.382h-.51V79.152a1.312,1.312,0,0,0-.484-1.1,1.62,1.62,0,0,0-1.044-.357,1.6,1.6,0,0,0-1.019.357,1.3,1.3,0,0,0-.458,1.044v2.318h-.509a1.35,1.35,0,0,0-1.477,1.3v.1a1.38,1.38,0,0,0,.459.866,1.5,1.5,0,0,0,1.019.357h.509V93.29a1.4,1.4,0,0,0,1.426,1.477,1.691,1.691,0,0,0,1.07-.357,1.317,1.317,0,0,0,.509-1.07v-9.3h.611a1.325,1.325,0,0,0,.968-.382,1.236,1.236,0,0,0,.382-.892A1.36,1.36,0,0,0,380.747,81.8Z\",\n transform: \"translate(-269.209 -50.156)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_461\",\n \"data-name\": \"Path 461\",\n d: \"M413.456,99.211a5.491,5.491,0,0,0-2.242-1.426c-.229-.1-.637-.255-1.2-.433s-1.019-.357-1.4-.509a3.92,3.92,0,0,1-.943-.586,1.16,1.16,0,0,1-.408-.662,1.075,1.075,0,0,1,.459-.739,2.485,2.485,0,0,1,1.452-.357,1.7,1.7,0,0,1,.764.153c.229.1.611.306,1.121.586a5.929,5.929,0,0,0,1.3.56l.076.025h.076a1.588,1.588,0,0,0,.943-.408,1.222,1.222,0,0,0,.408-.917,1.842,1.842,0,0,0-.662-1.274,5.04,5.04,0,0,0-1.783-.917,7.289,7.289,0,0,0-2.471-.408h0a5.792,5.792,0,0,0-2.369.56,4.049,4.049,0,0,0-1.656,1.376,3.3,3.3,0,0,0-.611,1.936A2.859,2.859,0,0,0,405,97.708a4.131,4.131,0,0,0,1.452,1.121c.509.255,1.223.535,2.114.892a9.948,9.948,0,0,1,1.809.815c.764.408.764.866.764.993a.913.913,0,0,1-.56.892,3.739,3.739,0,0,1-1.63.357,4.135,4.135,0,0,1-1.63-.408l-.051-.025a5.356,5.356,0,0,1-.586-.357,6.665,6.665,0,0,0-.815-.509,1.514,1.514,0,0,0-1.783.178,1.308,1.308,0,0,0-.382.942v.051a1.722,1.722,0,0,0,.739,1.274,6.989,6.989,0,0,0,4.509,1.452h0a6.6,6.6,0,0,0,2.8-.586,4.322,4.322,0,0,0,1.783-1.477,3.747,3.747,0,0,0,.637-1.987A3.126,3.126,0,0,0,413.456,99.211Z\",\n transform: \"translate(-291.194 -60.739)\",\n fill: \"#ffffff\",\n stroke: \"#ffffff\",\n strokeWidth: 0.2\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Subtraction_5_4_\",\n d: \"M33.233,51.387c-3.745,0-7.413-.025-10.928-.051a9.4,9.4,0,0,1-9.272-9.17c-.076-7.285-.076-14.9,0-22.595a9.316,9.316,0,0,1,9.043-9.119c3.439-.051,6.954-.051,10.775-.051,3.668,0,7.591.025,11.947.051a9.092,9.092,0,0,1,5.579,2.038,9.679,9.679,0,0,1,3.261,5.018,2.009,2.009,0,0,1-.56,2.216c-1.554,1.554-3.082,3.159-4.585,4.713-1.019,1.07-2.063,2.165-3.108,3.235a5.753,5.753,0,0,0-1.427,2.114,37.146,37.146,0,0,0-1.019,4.662l-4.229-5.731L43.8,23.009a2.648,2.648,0,0,0-.2-3.719l-.459-.408a2.648,2.648,0,0,0-3.719.2L29.284,30.473V20.844a2.642,2.642,0,0,0-2.624-2.649H24.674a2.62,2.62,0,0,0-2.624,2.624V41.681A2.62,2.62,0,0,0,24.674,44.3h1.987a2.62,2.62,0,0,0,2.624-2.624v-2.6a2.191,2.191,0,0,0,.662-.535L34.736,33.2l6.47,8.737a2.666,2.666,0,0,0,2.114,1.07,2.582,2.582,0,0,0,1.554-.509l.509-.357a2.644,2.644,0,0,0,.56-3.694l-.688-.917a.433.433,0,0,0,.178.025.905.905,0,0,0,.255-.051c.509-.153,1.044-.306,1.554-.433a32.751,32.751,0,0,0,3.49-1.121,7.615,7.615,0,0,0,2.649-2.114c.153-.153.28-.306.459-.484,0,1.146.051,2.293.1,3.388a31.5,31.5,0,0,1-.2,6.929A9.308,9.308,0,0,1,44.67,51.31C40.722,51.387,36.875,51.387,33.233,51.387Z\",\n transform: \"translate(0 0)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1586_4_\",\n d: \"M192.28,23.8a5.632,5.632,0,0,1,4.993,4.229,2.45,2.45,0,0,1-.611,1.63c-.535.815-1.554,1.223-1.783,2.318-.076.382-.408.178-.611-.051a47.885,47.885,0,0,0-5.273-5.146c-.229-.2-.433-.535-.1-.662,1.172-.433,1.783-1.554,2.828-2.089A2.162,2.162,0,0,1,192.28,23.8Z\",\n transform: \"translate(-130.975 -9.984)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1587_4_\",\n d: \"M76.876,54.332c-.178,3.057-.025,6.088-.076,9.145,0,1.172-.025,2.344,0,3.515.025.866-.306,1.274-1.2,1.121a12.549,12.549,0,0,0,.127-1.376V46.18A4.79,4.79,0,0,0,75.5,44.5c1.172-.229,1.274-.153,1.274,1.044C76.85,48.473,76.7,51.4,76.876,54.332Z\",\n transform: \"translate(-46.598 -25.336)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1588_4_\",\n d: \"M90.487,57.779c-2.165,2.165-4.05,4.56-6.114,6.8-.764.866-1.554,1.732-2.318,2.624-.56.662-1.07.739-1.656.051.331-.306.688-.611.993-.942C85.928,61.167,90.462,56.047,95,50.9a5.209,5.209,0,0,0,.943-1.4c1.044.611,1.044.713.28,1.63C94.334,53.372,92.271,55.461,90.487,57.779Z\",\n transform: \"translate(-50.25 -29.14)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1590_4_\",\n d: \"M128.425,108.3a4.679,4.679,0,0,1,2.5,2.344s-2.038,1.07-2.445.79A2.757,2.757,0,0,1,128.425,108.3Z\",\n transform: \"translate(-85.69 -72.962)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1591_4_\",\n d: \"M125.762,82.958,125,90.269s-.127,3.006,2.8,2.293,6.19-1.86,6.19-1.86,1.223-1.707.56-1.452-7.183,2.191-7.183,2.191l-1.07-1.783,1.3-7.489A2.048,2.048,0,0,0,125.762,82.958Z\",\n transform: \"translate(-83.486 -53.478)\",\n fill: \"#ffffff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_462\",\n \"data-name\": \"Path 462\",\n d: \"M147.981,55.07l-4.738-4.509a.516.516,0,0,1-.025-.713l10.52-11a.516.516,0,0,1,.713-.025l4.738,4.509a.516.516,0,0,1,.025.713l-10.52,11.03A.492.492,0,0,1,147.981,55.07Z\",\n transform: \"translate(-96.968 -21.081)\",\n fill: \"#ffffff\"\n }))));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgLogo, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/logo.9e756b7e.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\n\nexport const InputContainer = styled.div`\n display: flex;\n #login-id {\n background: #fff;\n padding: 8px 5px;\n border: none;\n border-bottom: 1px solid #828282;\n font-size: 18px;\n color: #393939;\n width: 100%;\n margin-bottom: 15px;\n outline: none;\n }\n #password {\n background: #fff;\n padding: 8px 5px;\n border: none;\n border-bottom: 1px solid #828282;\n font-size: 18px;\n color: #393939;\n width: calc(100% - 4rem);\n margin-bottom: 15px;\n outline: none;\n }\n .show-password {\n margin-top: 6px;\n input[type='checkbox'] {\n width: 12px;\n height: 12px;\n position: absolute;\n z-index: 1;\n margin-left: 15px;\n margin-top: 8px;\n cursor: pointer;\n /* Increase size of checkbox */\n -ms-transform: scale(2); /* IE */\n -moz-transform: scale(2); /* FF */\n -webkit-transform: scale(2); /* Safari and Chrome */\n -o-transform: scale(2); /* Opera */\n transform: scale(2);\n }\n span {\n margin-left: 40px;\n font-size: 15px;\n opacity: 1;\n }\n }\n`;\nexport const LoginFormContainer = styled.div`\n display: flex;\n flex-direction: column;\n background: #ffff;\n align-items: center;\n width: 90%;\n margin-top: 20px;\n .login-form {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 15px 20px;\n }\n .login-button {\n margin: auto;\n width: 100%;\n background-color: #ff5b00;\n border: none;\n outline: none;\n font-size: 24px;\n color: #ffff;\n padding: 5px;\n border-radius: 5px;\n &:hover {\n background-color: #f25008;\n }\n }\n`;\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport loginRequest from 'services/login';\n\nconst initialState = {\n user: null,\n isLoading: false,\n isAffiliate: false,\n error: null,\n};\n\nconst affiliateRoleIDChecker = (roles) => {\n const affiliateRoleIndex = roles.findIndex((roles) => roles.ID === 100);\n if (affiliateRoleIndex !== -1) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const getToken = createAsyncThunk('login/getToken', (params) => {\n const { username, password } = params;\n return loginRequest(username, password);\n});\n\nconst loginSlice = createSlice({\n name: 'login',\n initialState: initialState,\n reducers: {\n resetLogin: (state) => initialState,\n },\n extraReducers: {\n [getToken.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getToken.fulfilled]: (state, action) => {\n localStorage.setItem('access_token', action.payload.access_token);\n localStorage.setItem('refresh_token', action.payload.refresh_token);\n state.user = action.payload;\n state.isLoading = false;\n state.isAffiliate = affiliateRoleIDChecker(\n JSON.parse(action.payload.role)\n );\n },\n [getToken.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n },\n});\n\nconst { actions, reducer } = loginSlice;\nexport const { resetLogin } = actions;\nexport default reducer;\n","import { isNil } from 'ramda';\n\nexport default (username, password) => {\n const urlencoded = new URLSearchParams();\n urlencoded.append('grant_type', 'password');\n urlencoded.append('username', username);\n urlencoded.append('password', password);\n urlencoded.append('client_id', process.env.REACT_APP_CLIENT_ID);\n urlencoded.append('client_secret', process.env.REACT_APP_CLIENT_SECRET);\n return fetch(`${process.env.REACT_APP_API_DOMAIN}/token`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: urlencoded,\n })\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!isNil(result.error)) {\n throw new Error(result.error_description);\n } else {\n return result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Login failed'); // eslint-disable-line\n });\n};\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { LoginFormContainer, InputContainer } from './LoginForm.styles';\nimport { getToken } from 'store/login/loginSlice';\nimport { history } from '../../../../Routes';\n\nconst Password = ({ password, handleChange }) => {\n const [type, setType] = useState('password');\n const togglePasswordHandler = (e) => {\n if (type === 'password') {\n setType('text');\n } else {\n setType('password');\n }\n };\n\n return (\n \n \n
\n \n Show\n
\n
\n );\n};\n\nconst LoginErrors = ({ error, username }) => {\n const errorTypes = {\n 'Invalid Password.': {\n message:\n 'Your Password is wrong. Forgot password? Please contact Koobits Admin',\n },\n 'Invalid Username.': {\n message: 'Your Username is invalid.',\n url: {\n link:\n 'https://support.koobits.com/hc/en-gb/articles/212117966-Forgot-Login-ID-',\n text: 'Check Login ID Format',\n },\n },\n 'connection-issue': {\n message: \"Sorry, we can't connect to internet or our server.\",\n },\n \"You don't have permission to access\": {\n message: 'Sorry, your account does not have permission to access.',\n },\n };\n return (\n \n {errorTypes.hasOwnProperty(error)\n ? `${errorTypes[error].message} `\n : error}\n {errorTypes.hasOwnProperty(error) &&\n errorTypes[error].hasOwnProperty('url') && (\n \n {errorTypes[error].url.text}\n \n )}\n \n );\n};\n\nconst LoginForm = () => {\n const dispatch = useDispatch();\n const { isLoading, error } = useSelector((state) => state.login);\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n\n const handleChange = (e) => {\n const { value, name } = e.target;\n if (name === 'login-id') {\n setUsername(value);\n } else {\n setPassword(value);\n }\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n dispatch(\n getToken({\n username: username,\n password: password,\n })\n ).then((res) => {\n if (res.type === 'login/getToken/fulfilled') {\n history.push('/');\n }\n });\n };\n return (\n \n
\n \n \n \n \n {error !== null && }\n \n \n
\n );\n};\n\nexport default LoginForm;\n","import styled from 'styled-components';\n\nexport const LoginSectionContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 100px;\n background: #ffff;\n width: 70%;\n font-family: Linotte Regular;\n .logo {\n display: flex;\n align-items: center;\n color: #f25008;\n font-size: 18px;\n font-family: Muli;\n font-weight: bold;\n p {\n margin: 9px 7px 0px 12px;\n }\n }\n .signup-container {\n display: flex;\n margin-top: 10px;\n p {\n width: 320px;\n font-size: 16px;\n font-family: Linotte Light;\n margin: 0px;\n }\n a {\n margin-top: 5px;\n text-align: center;\n border: 1px solid #ff5b00;\n border-radius: 5px;\n color: #ff5b00;\n height: 30px;\n width: 80px;\n }\n }\n footer {\n color: #9a9a9f;\n font-size: 16px;\n font-family: Linotte Light;\n position: fixed;\n bottom: 50px;\n }\n`;\n","import React from 'react';\nimport LoginForm from './LoginForm/LoginForm';\nimport KoobitsLogo from 'assets/img/login-koobits-logo.svg';\nimport PartnerIcon from 'assets/img/login-partner-icon.svg';\nimport { LoginSectionContainer } from './LoginSection.styles';\n\nconst LoginSection = () => {\n return (\n \n
\n \"logo\"\n

Partners

\n \"partner-icon\"\n
\n \n
\n

If you are new, you can apply to be a Koobits partner

\n \n Sign up\n \n
\n
KooBits Learning Pte Ltd
\n
\n );\n};\n\nexport default LoginSection;\n","import styled from 'styled-components';\n\nexport const PartnerNetworkContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 110vw;\n .background {\n position: absolute;\n height: 100%;\n left: 0px;\n z-index: -1;\n }\n .decoration {\n position: absolute;\n left: 0px;\n bottom: 0px;\n z-index: -1;\n }\n .title {\n padding: 50px 50px 0px;\n font-family: Linotte Regular;\n h5 {\n font-size: 32px;\n color: white;\n }\n p {\n font-size: 23px;\n color: #ffc551;\n }\n }\n .learn-more {\n background-color: #ffc551;\n color: white;\n max-width: 130px;\n margin-left: 50px;\n &:hover {\n background-color: #feb117;\n }\n }\n`;\n","import React from 'react';\nimport Background from 'assets/img/login-background.svg';\nimport Decoration from 'assets/img/login-decoration.svg';\nimport { PartnerNetworkContainer } from './PartnerNetwork.styles';\n\nconst PartnerNetwork = () => {\n return (\n \n \"background\"\n \"background\"\n
\n
KooBits Learning Partnership Network
\n

Bring the best of education to your region

\n
\n \n Learn More\n \n
\n );\n};\n\nexport default PartnerNetwork;\n","import styled from 'styled-components';\n\nexport const LoginContainer = styled.div`\n display: flex;\n justify-content: center;\n height: 100vh;\n`;\n","import React from 'react';\nimport LoginSection from 'components/Login/LoginSection/LoginSection';\nimport PartnerNetwork from 'components/Login/PartnerNetworkSection/PartnerNetwork';\nimport { LoginContainer } from './Login.styles';\n\nconst Login = () => {\n return (\n \n \n \n \n );\n};\n\nexport default Login;\n","import styled from 'styled-components';\n\nexport const NavItemContainer = styled.div`\n .nav-item {\n padding: 10px;\n margin-right: 10px;\n @media (max-width: 1024px) {\n margin-right: 30px;\n }\n @media (max-width: 650px) {\n margin-right: 10px;\n }\n .nav-link {\n font-size: 16px;\n color: white;\n position: relative;\n margin: 0px 25px;\n line-height: 1;\n text-align: center;\n @media (max-width: 1280px) {\n margin: 0px 0px;\n }\n @media (max-width: 1024px) {\n span {\n font-size: 13px;\n }\n }\n @media (max-width: 1000px) {\n span {\n font-size: 10px;\n }\n }\n img {\n margin-right: 10px;\n }\n .icon {\n background-repeat: no-repeat;\n background-size: contain;\n display: inline-block;\n vertical-align: middle;\n line-height: 1;\n width: 20px;\n height: 20px;\n }\n }\n &:hover {\n span {\n color: #ff6e00;\n }\n background-color: #343434;\n }\n }\n .active {\n span {\n color: #ff6e00;\n }\n background-color: #343434;\n }\n .dashboard {\n span {\n color: #e2b04c;\n }\n }\n`;\n","import React from 'react';\nimport { Link, withRouter } from 'react-router-dom';\nimport { NavItemContainer } from './NavItem.styles';\n\nconst NavItem = ({ isActive, to, children }) => {\n const classname = ['nav-item', 'text-icon'];\n if (isActive) classname.push('active');\n if (isActive && to === '/dashboard') classname.push('dashboard');\n return (\n \n
  • \n \n {children}\n \n
  • \n
    \n );\n};\n\nexport default withRouter(({ location, match, ...props }) => {\n let isActive = location.pathname.slice(0, props.to.length) === props.to;\n return ;\n});\n","import styled from 'styled-components';\n\nexport const NavbarCollapseContainer = styled.div`\n display: flex;\n .navbar-nav {\n flex-direction: row;\n padding: 0px 60px;\n @media (max-width: 747px) {\n padding: 0px 10px;\n }\n }\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n// import { Link } from 'react-router-dom';\nimport NavItem from './NavItem';\nimport navs from './navs.json';\nimport affiliateNav from './affiliate-navs.json';\nimport { NavbarCollapseContainer } from './NavbarCollapse.styles';\n\nconst NavbarCollapse = () => {\n const { isAffiliate } = useSelector((state) => state.login);\n // const handleLogout = () => {};\n return (\n \n
      \n {isAffiliate\n ? affiliateNav.map((nav, index) => {\n return (\n \n {nav.name}\n \n );\n })\n : navs.map((nav, index) => {\n return (\n \n {nav.name}\n \n );\n })}\n
    \n
    \n );\n};\n\nexport default NavbarCollapse;\n","import styled from 'styled-components';\n\nexport const ProfileContainer = styled.div`\n img {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n }\n`;\n\nexport const NavProfileContainer = styled.div`\n .drop-down {\n padding: 5px;\n }\n .dropdown-menu {\n background-color: #4a4947;\n top: 17px !important;\n }\n .dropdown-item {\n background-color: #4a4947;\n color: white;\n &:hover {\n color: #ffaf0e;\n }\n }\n`;\n","// Returns true/false depending on whether csv file meets remaining quota left\nexport const checkAccountQuota = (remainingQuota, numOfCsvRows) => {\n return numOfCsvRows <= remainingQuota;\n};\n\nexport const checkCSVHeaders = (accountType, csvData, isCreation) => {\n const firstRow = csvData[0];\n let passValidation = true;\n let headers;\n const validationResult = {\n missingHeaders: [],\n invalidHeaders: [],\n };\n if (accountType === 'student') {\n headers = ['name', 'level', 'class_name', 'login_id', 'password'];\n } else if (accountType === 'teacher') {\n headers = ['name', 'login_id', 'password', 'level'];\n }\n // Check if csv file is for account creation or renewal\n if (!isCreation) {\n headers.unshift('new_existing_user');\n }\n // Check if required headers exist in csv file\n const csvHeaders = Object.keys(firstRow);\n for (const header of headers) {\n if (csvHeaders.includes(header) === false) {\n passValidation = false;\n validationResult.missingHeaders.push(header);\n }\n }\n // Check for invalid headers in csv file\n for (const header of csvHeaders) {\n if (headers.includes(header) === false) {\n passValidation = false;\n validationResult.invalidHeaders.push(header);\n }\n }\n validationResult['pass'] = passValidation;\n return validationResult;\n};\n\nexport const checkMissingInvalidValues = (accountType, csvData, isCreation) => {\n let passValidation = true;\n let headers;\n const validationResult = {\n missingValues: [],\n invalidValues: [],\n };\n // Required columns\n if (accountType === 'student') {\n headers = ['name', 'level', 'class_name', 'login_id', 'password'];\n } else if (accountType === 'teacher') {\n headers = ['name', 'login_id', 'password', 'level'];\n }\n // Check if csv file is for account creation or renewal\n if (!isCreation) {\n headers.unshift('new_existing_user');\n }\n\n for (const row of csvData) {\n // Check for missing values\n const missingCols = [];\n for (const col of headers) {\n if (row[col] === null) {\n missingCols.push(col);\n passValidation = false;\n }\n }\n validationResult.missingValues.push(missingCols);\n // Check for invalid values\n const invalidCols = [];\n // Check new/existing user col\n if (!isCreation) {\n if (typeof row.new_existing_user !== 'string') {\n invalidCols.push('New/Existing User');\n passValidation = false;\n } else if (\n row.new_existing_user.toLowerCase() !== 'new' &&\n row.new_existing_user.toLowerCase() !== 'existing'\n ) {\n invalidCols.push('New/Existing User');\n passValidation = false;\n }\n }\n // Check Grade Level\n // TODO: Check value for grade level for teacher csv\n if (typeof row.level === 'string') {\n // Check if string contains only numbers\n const numberConstraint = /^[0-9]+$/;\n if (row.level.match(numberConstraint) === null) {\n invalidCols.push('Level');\n passValidation = false;\n } else {\n const parsedInt = parseInt(row.level, 10);\n if (parsedInt < 1 || parsedInt > 6) {\n invalidCols.push('Level');\n passValidation = false;\n }\n }\n } else if (typeof row.level !== 'number') {\n invalidCols.push('Level');\n passValidation = false;\n } else {\n // Check if number value is between range 1-6\n if (row.level < 1 || row.level > 6) {\n invalidCols.push('Level');\n passValidation = false;\n }\n }\n // Check Login ID\n const constraint = /^[0-9a-zA-Z-_@.]+$/;\n const validateLoginID =\n row.login_id !== null ? row.login_id.toString().match(constraint) : null;\n if (validateLoginID === null) {\n passValidation = false;\n invalidCols.push('Login ID');\n }\n validationResult.invalidValues.push(invalidCols);\n }\n validationResult.pass = passValidation;\n return validationResult;\n};\n\n// Check for duplicate rows with same login ID\nexport const checkDuplicateValues = (csvData) => {\n let passValidation = true;\n const validationResult = {\n duplicateRows: [],\n duplicateHashmap: {},\n };\n const seenHashmap = {};\n const duplicateRows = csvData.map((row, index) => {\n if (seenHashmap.hasOwnProperty(row.login_id)) {\n passValidation = false;\n seenHashmap[row.login_id].push(index);\n return {\n value: row.login_id,\n isDuplicate: true,\n };\n } else {\n seenHashmap[row.login_id] = [index];\n return {\n value: row.login_id,\n isDuplicate: false,\n };\n }\n });\n const duplicateValues = Object.keys(seenHashmap);\n for (const value of duplicateValues) {\n if (seenHashmap[value].length > 1) {\n const firstEncounterIndex = seenHashmap[value][0];\n duplicateRows[firstEncounterIndex].isDuplicate = true;\n }\n }\n validationResult.duplicateRows = duplicateRows;\n validationResult.duplicateHashmap = seenHashmap;\n validationResult.pass = passValidation;\n return validationResult;\n};\n\nexport const splitCSVRowsIntoBatches = (csvData) => {\n const output = [];\n const batchSize = 100;\n for (let i = 0, j = csvData.length; i < j; i += batchSize) {\n let tempArray = csvData.slice(i, i + batchSize);\n output.push(tempArray);\n }\n return output;\n};\n\nexport const parseVerifyCSVBody = (csvData, accountType, isCreation) => {\n if (accountType === 'Student') {\n return csvData.map((row) => {\n return {\n IsExistingUser: isCreation\n ? false\n : row.new_existing_user.toLowerCase() === 'new'\n ? false\n : true,\n Name: row.name.toString(),\n LoginId: row.login_id.toString(),\n Password: row.password.toString(),\n GradeLevel: parseInt(row.level, 10),\n Class: row.class_name.toString(),\n };\n });\n } else if (accountType === 'Teacher') {\n return csvData.map((row) => {\n return {\n IsExistingUser: isCreation\n ? false\n : row.new_existing_user.toLowerCase() === 'new'\n ? false\n : true,\n Name: row.name.toString(),\n LoginId: row.login_id.toString(),\n Password: row.password.toString(),\n // TODO: Add grade level\n GradeLevel: parseInt(row.level, 10),\n };\n });\n }\n};\n\n// Combine and flatten api response from bulk validation into 1D array\nexport const combineAccountLists = (apiResult) => {\n const filtered = apiResult\n .filter((result) => result.hasOwnProperty('Accountlist'))\n .map((result) => result.Accountlist);\n const flattened = filtered.flat();\n return flattened;\n};\n\nexport const checkAPICsvValidation = (apiResult) => {\n const resultWithCommentsIndex = apiResult.findIndex(\n (account) => account.Comments !== null\n );\n if (resultWithCommentsIndex !== -1) {\n return false;\n }\n return true;\n};\n","export const AccountType = {\n 1: 'Student',\n 2: 'Student Trial',\n 3: 'Teacher',\n 4: 'Teacher Trial',\n 5: 'Parent',\n 6: 'School Admin',\n 7: 'Teacher Admin',\n};\n\nexport const PaymentStatus = {\n 1: 'Paid',\n 2: 'Not Paid',\n};\n\nexport const ContractStatus = {\n 1: 'New',\n 2: 'In Transition',\n 3: 'Renewed',\n 4: 'Expired',\n};\n\n// Maps parsed headers to original CSV template headers\nexport const CSVHeaders = {\n name: 'Name',\n level: 'Grade Level',\n class_name: 'Class Name',\n login_id: 'Login ID',\n password: 'Password',\n new_existing_user: 'New/Existing User',\n};\n","import { parseVerifyCSVBody, splitCSVRowsIntoBatches } from 'helpers/csvUpload';\nimport { AccountType } from 'constants/index';\nimport pSeries from 'p-series';\n\n// Sequential promises //\nexport const seriesValidate = ({\n csvRows,\n contractId,\n accountType,\n isCreation,\n}) => {\n const batchedCSVData = splitCSVRowsIntoBatches(csvRows);\n const promises = batchedCSVData.map((batch) => () =>\n validateCSVFunction({\n csvRows: batch,\n contractId: contractId,\n accountType: accountType,\n isCreation: isCreation,\n })\n );\n return pSeries(promises).then((res) => res);\n};\n\nexport const validateCSVFunction = ({\n csvRows,\n contractId,\n accountType,\n isCreation,\n}) => {\n const rawBody = {\n Contract_Id: contractId,\n FileType: isCreation ? 1 : 2,\n AccountType: accountType,\n AccountsList: parseVerifyCSVBody(\n csvRows,\n AccountType[accountType],\n isCreation\n ),\n };\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/VerifyCSVBeforeUpload`,\n {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n body: JSON.stringify(rawBody),\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Validate CSV failed'); // eslint-disable-line\n });\n};\n\nexport const seriesCreateAccounts = (contractFileIds) => {\n const promises = contractFileIds.map((contractFileID) => () =>\n createAccountsFunction(contractFileID)\n );\n return pSeries(promises).then((res) => {\n // Check for errors in array of json responses\n if (res.includes(true)) {\n return true;\n } else {\n return false;\n }\n });\n};\n\nexport const createAccountsFunction = (contractFileId) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/ConfirmAndCreateUser/${contractFileId}`,\n {\n method: 'POST',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n return false;\n } else {\n return true;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Create accounts failed'); // eslint-disable-line\n });\n};\n\nexport const seriesRenewAccounts = ({ contractFileIds, isResetPassword }) => {\n const promises = contractFileIds.map((contractFileID) => () =>\n renewAccountsFunction(contractFileID, isResetPassword)\n );\n return pSeries(promises).then((res) => {\n // Check for errors in array of json responses\n if (res.includes(true)) {\n return true;\n } else {\n return false;\n }\n });\n};\n\nexport const renewAccountsFunction = (contractFileID, isResetPassword) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/ConfirmAndRenewUser/${contractFileID}?resetpassword=${isResetPassword}`,\n {\n method: 'POST',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n return false;\n } else {\n return true;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Renew accounts failed'); // eslint-disable-line\n });\n};\n/// END ///\n\nexport const fetchAccountsByContract = (contractID) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/GetTotalStudentsAndTeachersByContractId/${contractID}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(\n err?.message ?? 'Fetch account quota by contract ID failed'\n ); // eslint-disable-line\n });\n};\n\nexport const fetchAccountQuotaByContractIDAccountType = ({\n contractID,\n accountType,\n}) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/GetAccountQuota?Contract_Id=${contractID}&AccountType=${accountType}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(\n err?.message ??\n 'Fetch account quota by contract ID and account type failed'\n ); // eslint-disable-line\n });\n};\n\nexport const fetchAcademicYears = () => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/customer/GetAcademicYears`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((result) => {\n return result;\n })\n .then((res) => {\n const jsonResponse = res.json();\n return jsonResponse;\n })\n .catch((err) => {\n throw new Error(\n err?.response?.data?.error_description ?? 'Fetch academic years failed'\n ); // eslint-disable-line\n });\n};\n\nexport const fetchCustomersByYear = (year) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/customer/GetMyCustomers?Year=${year}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch customers by year failed'); // eslint-disable-line\n });\n};\n\nexport const fetchNewCustomersByYear = (year) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/customer/GetMyNewCustomers?Year=${year}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch new customers by year failed'); // eslint-disable-line\n });\n};\n\nexport const fetchRenewAccountsSummary = (year) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/customer/GetRenewAccountsSummary?Year=${year}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch renew accounts summary failed'); // eslint-disable-line\n });\n};\n\nexport const validateCSV = ({\n csvRows,\n contractId,\n accountType,\n isCreation,\n}) => {\n const rawBody = {\n Contract_Id: contractId,\n FileType: isCreation ? 1 : 2,\n AccountType: accountType,\n AccountsList: parseVerifyCSVBody(\n csvRows,\n AccountType[accountType],\n isCreation\n ),\n };\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/VerifyCSVBeforeUpload`,\n {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n body: JSON.stringify(rawBody),\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Validate CSV failed'); // eslint-disable-line\n });\n};\n\nexport const bulkValidateCSV = ({\n csvRows,\n contractId,\n accountType,\n isCreation,\n}) => {\n const batchedCSVData = splitCSVRowsIntoBatches(csvRows);\n const promises = batchedCSVData.map((batch) =>\n validateCSV({\n csvRows: batch,\n contractId: contractId,\n accountType: accountType,\n isCreation: isCreation,\n })\n );\n return Promise.allSettled(promises)\n .then((res) => {\n let responses = res.map((response) => {\n return response.value;\n });\n return responses;\n })\n .then((json) => {\n return json;\n });\n};\n\nexport const cancelValidation = (contractFileID) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/CancelPreviewList?Contract_File_Id=${contractFileID}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Cancel csv preview failed'); // eslint-disable-line\n });\n};\n\nexport const bulkCancelValidations = (contractFileIds) => {\n const promises = contractFileIds.map((contractFileID) =>\n cancelValidation(contractFileID)\n );\n return Promise.allSettled(promises)\n .then((res) => {\n let responses = res.map((response) => {\n return response.value;\n });\n return responses;\n })\n .then((json) => {\n // Check for errors in array of json responses\n if (json.some((res) => res.IsSuccessful === true)) {\n return json;\n } else {\n throw new Error(`Cancel validation failed for some contract file ids.`);\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Bulk cancel validations failed'); // eslint-disable-line\n });\n};\n\nexport const bulkCreateAccountsRequest = (contractFileIds) => {\n const promises = contractFileIds.map((contractFileID) =>\n createAccounts(contractFileID)\n );\n return Promise.allSettled(promises)\n .then((res) => {\n let responses = res.map((response) => {\n return response.value;\n });\n return responses;\n })\n .then((json) => {\n // Check for errors in array of json responses\n if (json.includes(true)) {\n return true;\n } else {\n return false;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Bulk create accounts failed'); // eslint-disable-line\n });\n};\n\nexport const createAccounts = (contractFileId) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/ConfirmAndCreateUser/${contractFileId}`,\n {\n method: 'POST',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return true;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Create accounts failed'); // eslint-disable-line\n });\n};\n\nexport const renewAccountsRequest = (contractFileID) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/CreateRenewAccounts/ConfirmAndRenewUser/${contractFileID}`,\n {\n method: 'POST',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return true;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Renew accounts failed'); // eslint-disable-line\n });\n};\n\nexport const bulkRenewAccountsRequest = (contractFileIds) => {\n const promises = contractFileIds.map((contractFileID) =>\n renewAccountsRequest(contractFileID)\n );\n return Promise.allSettled(promises)\n .then((res) => {\n let responses = res.map((response) => {\n return response.value;\n });\n return responses;\n })\n .then((json) => {\n // Check for errors in array of json responses\n if (json.includes(true)) {\n return true;\n } else {\n return false;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Bulk renew accounts failed'); // eslint-disable-line\n });\n};\n\nexport const exportCreatedAccountstoCSV = ({ contractID, accountType }) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/Customer/GetAccountsListCSV?Contract_id=${contractID}&AccountType=${accountType}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.text();\n })\n .then((result) => {\n return result;\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Export created accounts to csv failed'); // eslint-disable-line\n });\n};\n\nexport const exportCreatedAccountstoJSON = ({\n contractID,\n accountType,\n pageIndex,\n pageSize,\n}) => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/Customer/GetAccountsListJSON?Contract_id=${contractID}&AccountType=${accountType}&pageIndex=${pageIndex}&pageSize=${pageSize}`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Export created accounts to csv failed'); // eslint-disable-line\n });\n};\n","import logOut from 'helpers/logout';\nimport { isNil } from 'ramda';\n\nconst refreshToken = () => {\n const refreshToken = localStorage.getItem('refresh_token');\n // console.log('old refresh token', refreshToken);\n if (isNil(refreshToken)) {\n logOut();\n throw new Error('No refresh token found');\n }\n const urlencoded = new URLSearchParams();\n urlencoded.append('grant_type', 'refresh_token');\n urlencoded.append('client_id', process.env.REACT_APP_CLIENT_ID);\n urlencoded.append('client_secret', process.env.REACT_APP_CLIENT_SECRET);\n urlencoded.append('refresh_token', refreshToken);\n return fetch(`${process.env.REACT_APP_API_DOMAIN}/token`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: urlencoded,\n })\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!isNil(result.error)) {\n logOut();\n throw new Error(result.error);\n } else {\n return result;\n }\n })\n .catch((err) => {\n logOut();\n throw new Error(err?.message ?? 'Refresh token failed'); // eslint-disable-line\n });\n};\n\nconst refreshFetchWrapper = async (request, params) => {\n try {\n const refreshTokenResult = await refreshToken();\n localStorage.setItem('access_token', refreshTokenResult.access_token);\n localStorage.setItem('refresh_token', refreshTokenResult.refresh_token);\n // console.log('new refresh token', refreshTokenResult);\n return request(params);\n } catch (err) {\n throw new Error(err?.message ?? 'Refresh token failed'); // eslint-disable-line\n }\n};\n\nexport default refreshFetchWrapper;\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport {\n fetchCustomersByYear,\n fetchAcademicYears,\n fetchNewCustomersByYear,\n fetchRenewAccountsSummary,\n validateCSV,\n bulkValidateCSV,\n fetchAccountsByContract,\n createAccounts,\n seriesCreateAccounts,\n seriesRenewAccounts,\n exportCreatedAccountstoCSV,\n exportCreatedAccountstoJSON,\n seriesValidate,\n} from 'services/accountCreation';\nimport refreshFetchWrapper from 'services/refreshToken';\n\nconst initialState = {\n customers: null,\n contracts: null,\n accountQuotas: null,\n academicYears: null,\n newAccounts: null,\n renewAccounts: null,\n studentCSVValidations: null,\n studentCSV: null,\n studentCSVFilename: 'Select CSV',\n teacherCSVValidations: null,\n teacherCSV: null,\n teacherCSVFilename: 'Select CSV',\n selectedSchool: null,\n selectedContractId: null,\n accountCreationResult: null,\n accountRenewalResult: null,\n exportResult: null,\n isCreationLoading: false,\n isRenewalLoading: false,\n isExportCSVLoading: false,\n isValidationLoading: false,\n isLoading: false,\n error: null,\n};\n\nexport const getAcademicYears = createAsyncThunk(\n 'account-creation/getAcademicYears',\n () => {\n return fetchAcademicYears();\n }\n);\n\nexport const getCustomersByYear = createAsyncThunk(\n 'account-creation/getCustomersByYear',\n (year) => {\n return refreshFetchWrapper(fetchCustomersByYear, year);\n }\n);\n\nexport const getNewCustomersByYear = createAsyncThunk(\n 'account-creation/getNewCustomersByYear',\n (year) => {\n return refreshFetchWrapper(fetchNewCustomersByYear, year);\n }\n);\n\nexport const getRenewAccountsSummary = createAsyncThunk(\n 'account-creation/getRenewAccountsSummary',\n (year) => {\n return refreshFetchWrapper(fetchRenewAccountsSummary, year);\n }\n);\n\nexport const getAccountQuotaByContractID = createAsyncThunk(\n 'account-creation/getAccountQuotaByContractID',\n (contractID) => {\n return refreshFetchWrapper(fetchAccountsByContract, contractID);\n }\n);\n\nexport const bulkValidateStudentCSV = createAsyncThunk(\n 'account-creation/bulkValidateStudentCSV',\n (params) => {\n const queryParams = {\n ...params,\n accountType: 1,\n };\n return seriesValidate(queryParams);\n }\n);\n\nexport const bulkValidateTeacherCSV = createAsyncThunk(\n 'account-creation/bulkValidateTeacherCSV',\n (params) => {\n const queryParams = {\n ...params,\n accountType: 3,\n };\n return seriesValidate(queryParams);\n }\n);\n\nexport const postValidateStudentCSV = createAsyncThunk(\n 'account-creation/validateStudentCSV',\n (params) => {\n const queryParams = {\n ...params,\n accountType: 1,\n };\n return validateCSV(queryParams);\n }\n);\n\nexport const postValidateTeacherCSV = createAsyncThunk(\n 'account-creation/validateTeacherCSV',\n (params) => {\n const queryParams = {\n ...params,\n accountType: 3,\n };\n return validateCSV(queryParams);\n }\n);\n\n// Create accounts from an array of multiple contract file IDs\nexport const bulkCreateAccounts = createAsyncThunk(\n 'account-creation/bulkCreateAccounts',\n (contractFileIDs) => {\n return seriesCreateAccounts(contractFileIDs);\n }\n);\n\n// Renew accounts from an array of multiple contract file IDs\nexport const bulkRenewAccounts = createAsyncThunk(\n 'account-creation/bulkRenewAccounts',\n (params) => {\n return seriesRenewAccounts(params);\n }\n);\n\nexport const postCreateAccounts = createAsyncThunk(\n 'account-creation/createAccounts',\n (contractFileID) => {\n return createAccounts(contractFileID);\n }\n);\n\nexport const exportCreatedAccountsCSV = createAsyncThunk(\n 'account-creation/exportCreatedAccountsToCSV',\n (params) => {\n return exportCreatedAccountstoCSV(params);\n }\n);\n\nexport const exportCreatedAccountsJSON = createAsyncThunk(\n 'account-creation/exportCreatedAccountsToJSON',\n (params) => {\n return exportCreatedAccountstoJSON(params);\n }\n);\n\nconst accountCreationSlice = createSlice({\n name: 'account-creation',\n initialState: initialState,\n reducers: {\n resetAccountCreation: (state) => initialState,\n setStudentCSV: (state, action) => {\n state.studentCSV = action.payload;\n },\n setTeacherCSV: (state, action) => {\n state.teacherCSV = action.payload;\n },\n setStudentCSVFilename: (state, action) => {\n state.studentCSVFilename = action.payload;\n },\n setTeacherCSVFilename: (state, action) => {\n state.teacherCSVFilename = action.payload;\n },\n setSelectedContract: (state, action) => {\n state.selectedContractId = action.payload;\n },\n setSelectedSchool: (state, action) => {\n state.selectedSchool = action.payload;\n },\n resetCSVValidations: (state) => {\n state.studentCSVValidations = null;\n state.teacherCSVValidations = null;\n },\n resetStudentCSVFileAndValidations: (state) => {\n state.studentCSV = null;\n state.studentCSVFilename = 'Select CSV';\n state.studentCSVValidations = null;\n state.accountCreationResult = null;\n state.accountRenewalResult = null;\n },\n resetTeacherCSVFileAndValidations: (state) => {\n state.teacherCSV = null;\n state.teacherCSVFilename = 'Select CSV';\n state.teacherCSVValidations = null;\n state.accountCreationResult = null;\n state.accountRenewalResult = null;\n },\n },\n extraReducers: {\n [getCustomersByYear.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getCustomersByYear.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.customers = action.payload.Result;\n },\n [getCustomersByYear.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n [getAcademicYears.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getAcademicYears.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.academicYears = action.payload.Result;\n },\n [getAcademicYears.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n [getNewCustomersByYear.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getNewCustomersByYear.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.newAccounts = action.payload;\n },\n [getNewCustomersByYear.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n\n [getRenewAccountsSummary.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getRenewAccountsSummary.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.renewAccounts = action.payload;\n },\n [getRenewAccountsSummary.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n [getAccountQuotaByContractID.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n state.accountQuotas = null;\n },\n [getAccountQuotaByContractID.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.accountQuotas = action.payload;\n },\n [getAccountQuotaByContractID.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n [postValidateStudentCSV.pending]: (state) => {\n state.isValidationLoading = true;\n state.error = null;\n },\n [postValidateStudentCSV.fulfilled]: (state, action) => {\n state.isValidationLoading = false;\n state.studentCSVValidations = action.payload;\n },\n [postValidateStudentCSV.rejected]: (state, action) => {\n state.isValidationLoading = false;\n state.error = action.error.message;\n },\n [bulkValidateStudentCSV.pending]: (state) => {\n state.isValidationLoading = true;\n state.error = null;\n },\n [bulkValidateStudentCSV.fulfilled]: (state, action) => {\n state.isValidationLoading = false;\n state.studentCSVValidations = action.payload;\n },\n [bulkValidateStudentCSV.rejected]: (state, action) => {\n state.isValidationLoading = false;\n state.error = action.error.message;\n },\n [postValidateTeacherCSV.pending]: (state) => {\n state.isValidationLoading = true;\n state.error = null;\n },\n [postValidateTeacherCSV.fulfilled]: (state, action) => {\n state.isValidationLoading = false;\n state.teacherCSVValidations = action.payload;\n },\n [postValidateTeacherCSV.rejected]: (state, action) => {\n state.isValidationLoading = false;\n state.error = action.error.message;\n },\n [bulkValidateTeacherCSV.pending]: (state) => {\n state.isValidationLoading = true;\n state.error = null;\n },\n [bulkValidateTeacherCSV.fulfilled]: (state, action) => {\n state.isValidationLoading = false;\n state.teacherCSVValidations = action.payload;\n },\n [bulkValidateTeacherCSV.rejected]: (state, action) => {\n state.isValidationLoading = false;\n state.error = action.error.message;\n },\n [postCreateAccounts.pending]: (state) => {\n state.isCreationLoading = true;\n state.error = null;\n },\n [postCreateAccounts.fulfilled]: (state, action) => {\n state.isCreationLoading = false;\n state.accountCreationResult = action.payload;\n },\n [postCreateAccounts.rejected]: (state, action) => {\n state.isCreationLoading = false;\n state.error = action.error.message;\n },\n [bulkCreateAccounts.pending]: (state) => {\n state.isCreationLoading = true;\n state.error = null;\n },\n [bulkCreateAccounts.fulfilled]: (state, action) => {\n state.isCreationLoading = false;\n state.accountCreationResult = action.payload;\n },\n [bulkCreateAccounts.rejected]: (state, action) => {\n state.isCreationLoading = false;\n state.error = action.error.message;\n },\n [bulkRenewAccounts.pending]: (state) => {\n state.isRenewalLoading = true;\n state.error = null;\n },\n [bulkRenewAccounts.fulfilled]: (state, action) => {\n state.isRenewalLoading = false;\n state.accountRenewalResult = action.payload;\n },\n [bulkRenewAccounts.rejected]: (state, action) => {\n state.isRenewalLoading = false;\n state.error = action.error.message;\n },\n [exportCreatedAccountsCSV.pending]: (state) => {\n state.isExportCSVLoading = true;\n state.exportResult = null;\n state.error = null;\n },\n [exportCreatedAccountsCSV.fulfilled]: (state, action) => {\n state.isExportCSVLoading = false;\n state.exportResult = action.payload;\n },\n [exportCreatedAccountsCSV.rejected]: (state, action) => {\n state.isExportCSVLoading = false;\n state.error = action.error.message;\n },\n [exportCreatedAccountsJSON.pending]: (state) => {\n state.isExportCSVLoading = true;\n state.exportResult = null;\n state.error = null;\n },\n [exportCreatedAccountsJSON.fulfilled]: (state, action) => {\n state.isExportCSVLoading = false;\n state.exportResult = action.payload;\n },\n [exportCreatedAccountsJSON.rejected]: (state, action) => {\n state.isExportCSVLoading = false;\n state.error = action.error.message;\n },\n },\n});\n\nconst { actions, reducer } = accountCreationSlice;\nexport const {\n resetAccountCreation,\n setStudentCSV,\n setTeacherCSV,\n setStudentCSVFilename,\n setTeacherCSVFilename,\n setSelectedContract,\n setSelectedSchool,\n resetCSVValidations,\n resetStudentCSVFileAndValidations,\n resetTeacherCSVFileAndValidations,\n} = actions;\nexport default reducer;\n","export const fetchCustomers = () => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/customer/GetMyCustomersAndAuthorizedCustomers`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch customers failed'); // eslint-disable-line\n });\n};\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchCustomers } from 'services/dashboard';\nimport refreshFetchWrapper from 'services/refreshToken';\n\nconst initialState = {\n customers: null,\n authorizedSchools: null,\n isLoading: false,\n error: null,\n};\n\nexport const getCustomers = createAsyncThunk('dashboard/getCustomers', () => {\n return refreshFetchWrapper(fetchCustomers);\n});\n\nconst dashboardSlice = createSlice({\n name: 'dashboard',\n initialState: initialState,\n reducers: {\n resetDashboard: (state) => initialState,\n },\n extraReducers: {\n [getCustomers.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getCustomers.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.customers = action.payload.Result.Customers;\n state.authorizedSchools = action.payload.Result.AuthorizedCustomers;\n },\n [getCustomers.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n },\n});\n\nconst { actions, reducer } = dashboardSlice;\nexport const { resetDashboard } = actions;\nexport default reducer;\n","export const fetchPromoCode = () => {\n return fetch(`${process.env.REACT_APP_API_DOMAIN}/Account/GetMyPromocode`, {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n })\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch promo code failed'); // eslint-disable-line\n });\n};\n\nexport const fetchReferrals = () => {\n return fetch(\n `${process.env.REACT_APP_API_DOMAIN}/AffilliateDashboard/GetMyDetails`,\n {\n method: 'GET',\n headers: {\n authorization: `Bearer ${localStorage.getItem('access_token')}`,\n },\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((result) => {\n if (!result.IsSuccessful) {\n throw new Error(result.Message.Message);\n } else {\n return result.Result;\n }\n })\n .catch((err) => {\n throw new Error(err?.message ?? 'Fetch referrals failed'); // eslint-disable-line\n });\n};\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchPromoCode, fetchReferrals } from 'services/affiliateDashboard';\nimport refreshFetchWrapper from 'services/refreshToken';\nimport moment from 'moment';\n\n// Helper\nconst getUniqueMonths = (data, dateKey) => {\n const months = data.map((row) => moment(row[dateKey]).format('MMM - YYYY'));\n const uniqueMonths = Array.from(new Set(months));\n return uniqueMonths;\n};\n\nconst initialState = {\n isLoading: false,\n promoCode: null,\n referrals: [],\n selectedMonth: null,\n error: null,\n};\n\nexport const getPromoCode = createAsyncThunk(\n 'affiliateDashboard/getPromoCode',\n () => {\n return refreshFetchWrapper(fetchPromoCode);\n }\n);\n\nexport const getReferrals = createAsyncThunk(\n 'affiliateDashboard/getReferrals',\n () => {\n return fetchReferrals();\n }\n);\n\nexport const affiliateDashboardSlice = createSlice({\n name: 'affiliateDashboard',\n initialState: initialState,\n reducers: {\n setSelectedMonth: (state, action) => {\n state.selectedMonth = action.payload;\n },\n },\n extraReducers: {\n [getPromoCode.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getPromoCode.fulfilled]: (state, action) => {\n state.isLoading = false;\n state.promoCode = action.payload;\n },\n [getPromoCode.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n [getReferrals.pending]: (state) => {\n state.isLoading = true;\n state.error = null;\n },\n [getReferrals.fulfilled]: (state, action) => {\n const months = getUniqueMonths(\n action.payload.length > 0 ? action.payload[0].SubscribedUsersList : [],\n 'PurchaseDate'\n );\n state.isLoading = false;\n state.referrals =\n action.payload.length > 0 ? action.payload[0].SubscribedUsersList : [];\n state.selectedMonth =\n months.length > 0 ? months[months.length - 1] : null;\n },\n [getReferrals.rejected]: (state, action) => {\n state.isLoading = false;\n state.error = action.error.message;\n },\n },\n});\n\nconst { actions, reducer } = affiliateDashboardSlice;\nexport const { setSelectedMonth } = actions;\nexport default reducer;\n","import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';\nimport loginReducer from 'store/login/loginSlice';\nimport accountCreationReducer from 'store/account-creation/accountCreationSlice';\nimport dashboardReducer from 'store/dashboard/dashboardSlice';\nimport affiliateDashboardReducer from 'store/affiliate-dashboard/affiliateDashboardSlice';\nimport logger from 'redux-logger';\n\nconst middleware = [\n /*YOUR CUSTOM MIDDLEWARES HERE*/\n ...getDefaultMiddleware(),\n];\n\nif (process.env.NODE_ENV !== 'production') {\n // add logger middleware\n middleware.push(logger);\n}\n\nconst store = configureStore({\n reducer: {\n login: loginReducer,\n accountCreation: accountCreationReducer,\n dashboard: dashboardReducer,\n affiliateDashboard: affiliateDashboardReducer,\n },\n middleware,\n});\n\nexport default store;\n","import { history } from '../Routes';\nimport store from 'store/index';\nimport { resetDashboard } from 'store/dashboard/dashboardSlice';\nimport { resetAccountCreation } from 'store/account-creation/accountCreationSlice';\nimport { resetLogin } from 'store/login/loginSlice';\n\nexport default () => {\n // clear tokens from localStorage\n localStorage.removeItem('access_token');\n localStorage.removeItem('refresh_token');\n store.dispatch(resetLogin());\n store.dispatch(resetDashboard());\n store.dispatch(resetAccountCreation());\n // logout by navigate to login screen\n history.push('/login');\n};\n","import React, { forwardRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Dropdown } from 'react-bootstrap';\nimport avatar from 'assets/img/avatar.png';\nimport { ProfileContainer, NavProfileContainer } from './NavProfile.styles';\nimport logOut from 'helpers/logout';\n\nconst ProfileAvatar = ({ onClick }, ref) => (\n \n {\n e.preventDefault();\n onClick(e);\n }}\n >\n \"profile\"\n \n \n);\n\nconst NavProfile = () => {\n const handleLogout = () => {\n logOut();\n };\n\n return (\n \n \n \n \n \n \n Log out\n \n \n \n \n );\n};\n\nexport default NavProfile;\n","import styled from 'styled-components';\n\nexport const HeaderNav = styled.nav`\n position: fixed;\n top: 0;\n width: 100vw;\n display: flex;\n padding: 0px 30px;\n justify-content: space-between;\n background-color: #4a4947;\n box-shadow: 0px 1px 4px rgba(#000, 0.16);\n z-index: 100;\n align-items: center;\n .navbar-brand {\n display: flex;\n align-items: flex-end;\n\n img {\n height: 38px;\n }\n .partners-logo {\n color: #ffc400;\n font-size: 16px;\n margin-left: 5px;\n img {\n height: 20px;\n margin-left: 5px;\n margin-bottom: 5px;\n }\n }\n }\n`;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { ReactComponent as Logo } from 'assets/img/logo.svg';\nimport PartnersLogo from 'assets/img/icon-header-partners.svg';\nimport NavbarCollapse from 'components/Header/Navigations/NavbarCollapse';\nimport NavProfile from 'components/Header/Navigations/NavProfile';\nimport { HeaderNav } from './Header.styles';\n\nconst Header = () => {\n return (\n \n \n \n \n Partners\n \"partner-icon\"\n \n \n \n \n \n );\n};\n\nexport default Header;\n","export const primaryButton = `\nborder: none;\nbackground-color: #ff5b00;\ncolor: white;\noutline: none;\ncursor: pointer;\n&:hover {\n background-color: #f25008\n}\n`;\n\nexport const secondaryButton = `\ncolor: #f25008;\nborder: 1px solid #f25008;\nbackground-color: white;\noutline: none;\ncursor: pointer;\n&:hover {\n background-color: #fff7f3;\n}\n`;\n\nexport const lightButton = `\ncolor: #727272;\nborder: 1px solid #c7c7c7;\nbackground-color: white;\noutline: none;\ncursor: pointer;\n&:hover {\n color: #ff5b00;\n}\n`;\n","import styled from 'styled-components';\nimport { secondaryButton } from 'assets/styles/buttons.styles';\n\nexport const TableDataContainer = styled.div`\n display: flex;\n flex-direction: column;\n .action-btn {\n border: none;\n color: #f25008;\n outline: none;\n font-size: 16px;\n padding: 0px;\n background: none;\n }\n .action-btn:hover {\n text-decoration: underline;\n }\n .authorized-btn {\n ${secondaryButton}\n margin-left: 10px;\n font-size: 14px;\n font-weight: 600;\n padding: 3px 10px;\n border-color: #ffc7a8;\n }\n .table td,\n .table th {\n vertical-align: middle;\n padding: 2px 10px 2px 30px;\n color: #393939;\n }\n .table th {\n .check {\n padding: 2px;\n }\n }\n\n .table {\n thead {\n th {\n background-color: #ffcc68;\n border-color: #f3b33a;\n }\n tr {\n .check {\n padding: 2px;\n }\n }\n }\n tbody {\n td {\n border-color: #ffdc95;\n }\n tr:nth-child(odd) {\n background-color: #fffcf6;\n }\n tr:nth-child(even) {\n background-color: #ffffff;\n }\n tr {\n .check {\n padding: 2px 5px 2px 2px;\n }\n .country {\n width: 240px;\n }\n }\n }\n }\n .table-label {\n margin-bottom: 15px;\n margin-top: 15px;\n font-weight: bold;\n }\n\n .container-checkbox {\n display: flex;\n padding: 2px;\n justify-content: center;\n margin-bottom: 4px;\n @media (max-width: 1024px) {\n margin-top: 10px;\n margin-right: 12px;\n }\n }\n\n .selected {\n background: #fff0c5;\n border: 2px solid #ffc551;\n }\n //hide the browser's default check-box\n .container-checkbox input {\n opacity: 0;\n cursor: pointer;\n z-index: 1;\n margin-top: 4px;\n }\n\n //create a custom checkbox\n .container-checkbox .checkmark {\n position: absolute;\n height: 20px;\n width: 20px;\n border-radius: 4px;\n border: 1px solid #9e9e9e;\n background-color: white;\n }\n\n //on mouse hover\n .container-checkbox:hover input ~ .checkmark {\n background-color: #ffc400;\n border: none;\n }\n\n //when checkbox is checked\n .container-checkbox input:checked ~ .checkmark {\n background-color: #ef7836;\n border: none;\n }\n\n //create the checkmark/indicator (hidden when not checked)\n .container-checkbox .checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n\n //show the checkmark when checked\n .container-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n //style the checkmark/indicator\n .container-checkbox .checkmark:after {\n left: 7px;\n top: 1px;\n width: 7px;\n height: 14px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n .check-box {\n position: inherit;\n }\n`;\n","export const formatNumber = (locale, number) => {\n return new Intl.NumberFormat(locale).format(number);\n};\n","import React, { useState } from 'react';\nimport moment from 'moment';\nimport { useHistory } from 'react-router-dom';\nimport { TableDataContainer } from './TableData.styles';\nimport { formatNumber } from 'helpers/formatNumber';\nimport { ContractStatus } from 'constants/index';\n\nconst TableData = ({ type, data }) => {\n const history = useHistory();\n\n //check boxes\n const [selectedCustomer, setSelectedCustomer] = useState([]);\n const setCheckboxes = (check) => {\n const checkboxes = document.getElementsByClassName(\n type === 'customer-list' ? 'customer' : 'authorized'\n );\n for (let i = 0; i < checkboxes.length; i++) {\n checkboxes[i].checked = check;\n }\n };\n const customerArray = data && data.map((cust) => cust.School_Id);\n\n return (\n \n
    \n {type === 'customer-list'\n ? `My customer(s) (${moment().year()}-${moment().year() + 1})`\n : 'My authorized school selling list'}\n {type === 'authorized-list' && (\n \n )}\n
    \n \n \n \n \n \n \n \n {type === 'customer-list' && }\n \n \n \n {data &&\n data.map((item) => (\n \n \n
    \n {\n if (event.target.checked) {\n setSelectedCustomer([\n ...selectedCustomer,\n item.School_Id,\n ]);\n } else {\n setSelectedCustomer(\n selectedCustomer.filter(\n (customer) => customer !== item.School_Id\n )\n );\n }\n }}\n >\n \n
    \n \n \n {item.CountryName !== null ? item.CountryName : '-'}\n \n \n {item.SchoolName}\n \n \n {type === 'customer-list'\n ? item.ContractModels.filter(\n (status) =>\n ContractStatus[status.ContractStatus] === 'Renewed'\n ).length > 0\n ? 'Renewed'\n : 'New School'\n : formatNumber('en', item.StudentPopulation)}\n \n {type === 'customer-list' && (\n \n {\n history.push('/manage-school');\n }}\n >\n Manage\n \n \n )}\n
    \n ))}\n \n
    \n
    \n {\n if (event.target.checked) {\n setCheckboxes(true);\n setSelectedCustomer(customerArray);\n } else {\n setCheckboxes(false);\n setSelectedCustomer([]);\n }\n }}\n >\n \n
    \n
    \n Country\n \n School Name\n \n {type === 'customer-list' ? 'Status' : 'School Population'}\n Action
    \n
    \n );\n};\n\nexport default TableData;\n","import styled from 'styled-components';\n\nexport const DisplayContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding-top: 50px;\n min-height: 100vh;\n .welcome-text {\n text-align: left;\n font-size: 18px;\n color: #a4a4a4;\n border-bottom: 1px solid rgba(112, 112, 112, 0.32);\n font-weight: bold;\n padding: 10px 50px;\n background-color: white;\n span {\n font-size: 25px;\n color: #545454;\n }\n }\n .tables {\n padding-left: 50px;\n padding-right: 50px;\n }\n`;\n","import styled from 'styled-components';\n\nexport const SpinnerContainer = styled.div`\n &,\n &:before,\n &:after {\n border-radius: 50%;\n width: 2.5em;\n height: 2.5em;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation: load7 1.8s infinite ease-in-out;\n animation: load7 1.8s infinite ease-in-out;\n }\n\n color: #ff5b00;\n font-size: 10px;\n margin: 80px auto;\n position: ${(props) => (props.position ? props.position : 'relative')};\n grid-column: ${(props) => (props.gridColumn ? props.gridColumn : null)};\n top: ${(props) => (props.top ? props.top : '0')};\n text-indent: -9999em;\n -webkit-transform: translateZ(0);\n -ms-transform: translateZ(0);\n transform: translateZ(0);\n -webkit-animation-delay: -0.16s;\n animation-delay: -0.16s;\n\n &:before,\n &:after {\n content: '';\n position: absolute;\n top: 0;\n }\n\n &:before {\n left: -3.5em;\n -webkit-animation-delay: -0.32s;\n animation-delay: -0.32s;\n }\n &:after {\n left: 3.5em;\n }\n @-webkit-keyframes load7 {\n 0%,\n 80%,\n 100% {\n box-shadow: 0 2.5em 0 -1.3em;\n }\n 40% {\n box-shadow: 0 2.5em 0 0;\n }\n }\n @keyframes load7 {\n 0%,\n 80%,\n 100% {\n box-shadow: 0 2.5em 0 -1.3em;\n }\n 40% {\n box-shadow: 0 2.5em 0 0;\n }\n }\n`;\n","import React from 'react';\nimport { SpinnerContainer } from './Spinner.styles';\n\nconst Spinner = ({ top, position, gridColumn }) => (\n \n Loading...\n \n);\n\nexport default Spinner;\n","import React, { useEffect } from 'react';\nimport TableData from 'components/Dashboard/TableData';\nimport { DisplayContainer } from './DisplayDashboard.style';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { getCustomers } from 'store/dashboard/dashboardSlice';\nimport Spinner from 'components/Shared/Spinner';\n\nconst DisplayDashboard = () => {\n const dispatch = useDispatch();\n const { isLoading, customers, authorizedSchools } = useSelector(\n (state) => state.dashboard\n );\n\n useEffect(() => {\n dispatch(getCustomers());\n }, [dispatch]);\n return (\n \n
    \n Welcome! Reseller\n
    \n {isLoading && }\n {!isLoading && (\n
    \n \n \n
    \n )}\n
    \n );\n};\n\nexport default DisplayDashboard;\n","import styled from 'styled-components';\n\nexport const DashboardContainer = styled.div``;\n","import React from 'react';\nimport Header from 'components/Header/Header';\nimport DisplayDashboard from './DisplayDashboard';\nimport { DashboardContainer } from './Dashboard.styles';\n\nconst Dashboard = () => {\n return (\n \n
    \n \n
    \n );\n};\n\nexport default Dashboard;\n","import styled from 'styled-components';\n\nexport const SidebarContainer = styled.div`\n .sidebar {\n position: fixed;\n top: 51px;\n left: 0;\n bottom: 0;\n width: 195px;\n z-index: 40;\n background: #595b5d;\n @media (max-width: 971px) {\n width: 60px;\n }\n @media (max-width: 931px) {\n top: 58px;\n }\n }\n .sidebar-toggler {\n display: none;\n }\n`;\n","import React from 'react';\nimport { SidebarContainer } from './Sidebar.styles';\n\nconst Sidebar = (props) => {\n const { children, className, expanded, toggleNavigation } = props;\n return (\n \n \n \n \n \n {children}\n \n \n );\n};\n\nexport default Sidebar;\n","import styled from 'styled-components';\n\nexport const NavLinkContainer = styled.div`\n .nav-link {\n color: white;\n padding: 10px 20px;\n }\n .nav-link-active {\n background-color: #FF6E00;\n }\n .nav-link:hover {\n background-color: #FF6E00;\n }\n img {\n margin-right: 8px;\n }\n span {\n @media (max-width: 971px) {\n display: none;\n }\n }\n`;\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { NavLinkContainer } from './SidebarNavLink.styles';\n\nconst SidebarNavLink = (props) => {\n const { children, path: url } = props;\n const { pathname } = useLocation();\n const isActivePath = (path) => pathname.match(path);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default SidebarNavLink;\n","import React from 'react';\nimport { useLocation, Link } from 'react-router-dom';\nimport MySchools from 'assets/img/SidebarIcon/ManageSchool/icon-my-schools.svg';\nimport MySchoolsActive from 'assets/img/SidebarIcon/ManageSchool/icon-my-schools-active.svg';\nimport CreateAccount from 'assets/img/SidebarIcon/ManageSchool/icon-create-account.svg';\nimport CreateAccountActive from 'assets/img/SidebarIcon/ManageSchool/icon-create-account-active.svg';\nimport RenewAccount from 'assets/img/SidebarIcon/ManageSchool/icon-renew-account.svg';\nimport RenewAccountActive from 'assets/img/SidebarIcon/ManageSchool/icon-renew-account-active.svg';\nimport AlignSyllabus from 'assets/img/SidebarIcon/ManageSchool/icon-align-syllabus.svg';\nimport AlignSyllabusActive from 'assets/img/SidebarIcon/ManageSchool/icon-align-syllabus-active.svg';\nimport SchoolReport from 'assets/img/SidebarIcon/ManageSchool/icon-school-report.svg';\nimport SchoolReportActive from 'assets/img/SidebarIcon/ManageSchool/icon-school-report-active.svg';\nimport OtherSettings from 'assets/img/SidebarIcon/ManageSchool/icon-other-settings.svg';\nimport OtherSettingsActive from 'assets/img/SidebarIcon/ManageSchool/icon-other-settings-active.svg';\nimport SidebarNavLink from './SidebarNavLink';\nimport { NavLinkContainer } from './SidebarNavLink.styles';\n\nconst SidebarManageSchool = () => {\n const { pathname } = useLocation();\n const isActivePath = (path) => pathname.match(path);\n\n return (\n <>\n \n \n {isActivePath('/my-schools') || pathname === '/manage-school' ? (\n <>\n \"icon\"\n \n ) : (\n \"icon\"\n )}\n My Schools\n \n \n \n {isActivePath('/create-account') ? (\n \"icon\"\n ) : (\n \"icon\"\n )}\n Create Account\n \n \n {isActivePath('/renew-account') ? (\n \"icon\"\n ) : (\n \"icon\"\n )}\n Renew Account\n \n \n {isActivePath('/manage-school/align-syllabus') ? (\n \"icon\"\n ) : (\n \"icon\"\n )}\n Align Syllabus\n \n \n {isActivePath('/manage-school/school-report') ? (\n \"icon\"\n ) : (\n \"icon\"\n )}\n School Report\n \n \n {isActivePath('/manage-school/other-settings') ? (\n \"icon\"\n ) : (\n \"icon\"\n )}\n Other Settings\n \n \n );\n};\n\nexport default SidebarManageSchool;\n","import styled from 'styled-components';\n\nexport const MySchoolContainer = styled.div`\n margin-left: 50px;\n margin-top: 50px;\n margin-right: 50px;\n .my-school {\n display: flex;\n p {\n margin: 5px 10px;\n }\n }\n .table-data {\n margin-top: 20px;\n thead {\n tr {\n background: #ffcc68;\n text-align: center;\n }\n }\n tbody {\n tr {\n text-align: center;\n }\n .outstanding-payment {\n color: #ec672c;\n }\n .paid {\n color: #60bb40;\n }\n }\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ffdb98;\n padding: 5px;\n vertical-align: middle;\n }\n\n .table-bordered {\n tbody {\n tr:nth-child(odd) {\n background-color: #fffcf6;\n }\n tr:nth-child(even) {\n background-color: #ffffff;\n }\n }\n }\n .selected {\n background: #fff0c5;\n border: 2px solid #ffc551;\n }\n .container-checkbox {\n display: flex;\n padding: 2px;\n justify-content: center;\n margin-bottom: 4px;\n }\n\n //hide the browser's default check-box\n .container-checkbox input {\n opacity: 0;\n cursor: pointer;\n z-index: 1;\n margin-top: 4px;\n }\n\n //create a custom checkbox\n .container-checkbox .checkmark {\n position: absolute;\n height: 20px;\n width: 20px;\n border-radius: 4px;\n border: 1px solid #9e9e9e;\n background-color: white;\n }\n\n //on mouse hover\n .container-checkbox:hover input ~ .checkmark {\n background-color: #ffc400;\n border: none;\n }\n\n //when checkbox is checked\n .container-checkbox input:checked ~ .checkmark {\n background-color: #ef7836;\n border: none;\n }\n\n //create the checkmark/indicator (hidden when not checked)\n .container-checkbox .checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n\n //show the checkmark when checked\n .container-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n //style the checkmark/indicator\n .container-checkbox .checkmark:after {\n left: 7px;\n top: 1px;\n width: 7px;\n height: 14px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n .check-box {\n position: inherit;\n }\n`;\n","import styled from 'styled-components';\nimport { Dropdown } from 'react-bootstrap';\n\nexport const StyledDropdown = styled(Dropdown)`\n #dropdown-custom {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n border: 1px solid #aaaaaa;\n border-radius: 0px;\n background-color: #ffffff;\n outline: none;\n &:focus {\n box-shadow: none;\n }\n }\n .dropdown-toggle::after {\n margin-left: 30px;\n }\n .dropdown-item-custom {\n width: ${(props) => (props.width ? props.width : '230px')};\n }\n`;\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\nimport { StyledDropdown } from './DropdownMenu.styles';\n\nconst DropdownMenu = ({\n selectedValue,\n valueKey,\n values,\n setValue,\n width,\n valueTemplate,\n children,\n}) => {\n return (\n \n \n {selectedValue}\n \n \n {children}\n {values &&\n values.map((value) => (\n {\n event.preventDefault();\n setValue(value);\n }}\n className=\"dropdown-item-custom\"\n >\n {valueTemplate !== undefined\n ? valueKey !== null\n ? valueTemplate(value[valueKey])\n : valueTemplate(value)\n : valueKey !== null\n ? value[valueKey]\n : value}\n \n ))}\n \n \n );\n};\n\nexport default DropdownMenu;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { MySchoolContainer } from './MySchool.styles';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport {\n getCustomersByYear,\n getAcademicYears,\n} from 'store/account-creation/accountCreationSlice';\nimport { formatNumber } from 'helpers/formatNumber';\nimport Spinner from 'components/Shared/Spinner';\nimport { ContractStatus, PaymentStatus, AccountType } from 'constants/index';\n\nconst setCheckboxes = (check) => {\n const checkboxes = document.getElementsByClassName('individual');\n for (let i = 0; i < checkboxes.length; i++) {\n checkboxes[i].checked = check;\n }\n};\n\nconst MySchool = () => {\n const dispatch = useDispatch();\n const { isLoading, customers, academicYears } = useSelector(\n (state) => state.accountCreation\n );\n const [year, setYear] = useState(2020);\n const [selectedCustomer, setSelectedCustomer] = useState([]);\n const customerArray = customers && customers.map((cust) => cust.School_Id);\n\n useEffect(() => {\n dispatch(getAcademicYears());\n }, [dispatch]);\n\n useEffect(() => {\n dispatch(getCustomersByYear(year));\n }, [dispatch, year]);\n\n const tableData =\n customers &&\n customers.map((data) => (\n \n \n
    \n {\n if (e.target.checked) {\n setSelectedCustomer([...selectedCustomer, data.School_Id]);\n } else {\n setSelectedCustomer(\n selectedCustomer.filter((item) => item !== data.School_Id)\n );\n }\n }}\n >\n \n
    \n \n \n {data.CountryName === null ? '-' : data.CountryName}\n \n \n {data.SchoolName}\n \n {data.ContractModels.length > 0 ? (\n data.ContractModels.map((contract) => (\n \n {PaymentStatus[contract.PaymentStatus] === 'Not Paid' &&\n contract.ContractDetails.length > 0\n ? formatNumber(\n 'en',\n contract.ContractDetails.filter(\n (lineItem) =>\n AccountType[lineItem.AccountType] === 'Student' &&\n lineItem.ItemType === 'Account'\n ).reduce((accumulator, currentValue) => {\n return accumulator + currentValue.AccountsPurchased;\n }, 0)\n )\n : '-'}\n \n ))\n ) : (\n <>\n \n -\n \n \n )}\n {data.ContractModels.filter(\n (item) => ContractStatus[item.ContractStatus] === 'Renewed'\n ).length > 0 ? (\n \n Renewed\n \n ) : (\n \n New School\n \n )}\n {data.ContractModels.filter(\n (item) => PaymentStatus[item.PaymentStatus] === 'Not Paid'\n ).length > 0 ? (\n \n Oustanding Payment to Koobits\n \n ) : (\n \n Paid\n \n )}\n \n ));\n\n return (\n \n
    \n

    My Customer

    \n \n
    \n {isLoading ? (\n \n ) : (\n <>\n
    \n \n \n \n \n \n \n \n \n \n \n \n {tableData}\n
    \n
    \n {\n if (e.target.checked) {\n setCheckboxes(true);\n setSelectedCustomer(customerArray);\n } else {\n setCheckboxes(false);\n setSelectedCustomer([]);\n }\n }}\n >\n \n
    \n
    CountrySchool NameStudent AccountsCustomer StatusPayment Status
    \n
    \n \n )}\n
    \n );\n};\n\nexport default MySchool;\n","import styled from 'styled-components';\n\nexport const CreateAccountContainer = styled.div`\n .table-label {\n display: flex;\n padding: 20px 50px;\n p {\n margin: 5px 10px 5px 0px;\n font-size: 18px;\n font-weight: bold;\n }\n }\n`;\n","import styled from 'styled-components';\nimport { primaryButton } from 'assets/styles/buttons.styles';\n\nconst RaisePOContainer = styled.div`\n display: flex;\n background: white;\n padding: 20px;\n justify-content: center;\n font-size: 18px;\n font-weight: bold;\n align-items: center;\n button {\n ${primaryButton}\n font-size: 16px;\n border-radius: 2px;\n padding: 5px 10px;\n margin-left: 10px;\n }\n`;\n\nexport default RaisePOContainer;\n","import React from 'react';\nimport RaisePOContainer from './RaisePO.styles';\n\nconst RaisePO = () => {\n return (\n \n
    Your newly signed up school is not in the list?
    \n \n
    \n );\n};\n\nexport default RaisePO;\n","import { AccountType, PaymentStatus } from 'constants/index';\n\nexport const parseTableData = (data) => {\n const result = [];\n for (const school of data) {\n const schoolName = school.SchoolName;\n const country = school.CountryName;\n // TODO: Can reseller create accounts for renewed contract types?\n const paidContracts = school.ContractModels.filter(\n (contract) => PaymentStatus[contract.PaymentStatus] === 'Paid'\n );\n // const paidContracts = school.ContractModels;\n if (paidContracts.length > 0) {\n for (const contract of paidContracts) {\n const contractResult = {\n date: contract.StartDate,\n country: country,\n schoolName: schoolName,\n studentPurchased: 0,\n teacherPurchased: 0,\n studentAccCreated: 0,\n teacherAccCreated: 0,\n studentAccRemaining: 0,\n teacherAccRemaining: 0,\n contractId: contract.ContractId,\n academicYear: contract.AcademicYear,\n paidContracts: paidContracts,\n };\n if (contract.ContractDetails.length === 0) {\n result.push(contractResult);\n } else {\n const studentLineItemIndex = contract.ContractDetails.findIndex(\n (lineItem) =>\n AccountType[lineItem.AccountType] === 'Student' &&\n lineItem.ItemType === 'Account'\n );\n const teacherLineItemIndex = contract.ContractDetails.findIndex(\n (lineItem) =>\n AccountType[lineItem.AccountType] === 'Teacher' &&\n lineItem.ItemType === 'Account'\n );\n if (studentLineItemIndex !== -1) {\n contractResult.studentPurchased =\n contract.ContractDetails[studentLineItemIndex].AccountsPurchased;\n contractResult.studentAccCreated =\n contract.ContractDetails[studentLineItemIndex].AccountsConsumed;\n contractResult.studentAccRemaining =\n contract.ContractDetails[studentLineItemIndex].AccountsRemaining;\n }\n if (teacherLineItemIndex !== -1) {\n contractResult.teacherPurchased =\n contract.ContractDetails[teacherLineItemIndex].AccountsPurchased;\n contractResult.teacherAccCreated =\n contract.ContractDetails[teacherLineItemIndex].AccountsConsumed;\n contractResult.teacherAccRemaining =\n contract.ContractDetails[teacherLineItemIndex].AccountsRemaining;\n }\n result.push(contractResult);\n }\n }\n } else {\n continue;\n }\n }\n return result;\n};\n","import styled from 'styled-components';\n\nconst CreateAccountTableContainer = styled.div`\n .table-data {\n padding-left: 50px;\n padding-right: 50px;\n .table td,\n .table th {\n padding: 5px;\n vertical-align: middle;\n }\n thead {\n tr {\n background: #fff7e8;\n text-align: center;\n }\n }\n tbody {\n tr {\n text-align: center;\n }\n tr:nth-child(odd) {\n background-color: #ffffff;\n }\n }\n .add-more th,\n .add-more td {\n border: 1px solid #ffd98d;\n }\n .student-table {\n margin-bottom: 0px;\n border-bottom: none;\n }\n .teacher-table {\n margin-bottom: 30px;\n .date,\n .country,\n .school-name {\n visibility: hidden;\n }\n }\n .date,\n .country {\n width: 100px;\n }\n .school-name {\n width: 400px;\n }\n .purchased {\n width: 250px;\n border-top: none;\n }\n .accounts {\n width: 150px;\n border-top: none;\n }\n .action {\n width: 150px;\n border-top: none;\n }\n button {\n border: none;\n background-color: white;\n font-size: 16px;\n color: #f25008;\n padding: 5px 10px;\n outline: none;\n }\n .completed-btn {\n color: #2faa58;\n }\n button:hover {\n text-decoration: underline;\n }\n }\n .completed {\n thead {\n tr {\n background: #defedf;\n }\n }\n th,\n td {\n border: 1px solid #b5e6b6;\n }\n }\n`;\n\nexport default CreateAccountTableContainer;\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport moment from 'moment';\nimport { formatNumber } from 'helpers/formatNumber';\nimport CreateAccountTableContainer from './CreateAccountTable.styles';\n\nconst CreateAccountTable = ({\n data,\n selectedContract,\n selectedSchool,\n type,\n}) => {\n const history = useHistory();\n const dispatch = useDispatch();\n\n return (\n \n
    \n
    \n \n \n \n \n Date\n \n \n Country\n \n \n School Name\n \n \n Purchased {type === 'student' ? 'Stu' : 'Tr'} Accounts\n \n \n {type === 'student' ? 'Stu' : 'Teacher'} Accounts\n \n \n Action\n \n \n \n \n \n {moment(data.date).format('DD MMM')}\n {data.country}\n {data.schoolName}\n \n {formatNumber(\n 'en',\n type === 'student'\n ? data.studentPurchased\n : data.teacherPurchased\n )}\n \n \n {formatNumber(\n 'en',\n type === 'student'\n ? data.studentAccCreated\n : data.teacherAccCreated\n )}\n \n \n {\n history.push('/manage-school/create-account/upload-csv');\n dispatch(selectedContract(data.contractId));\n dispatch(selectedSchool(data));\n }}\n className={\n type === 'student'\n ? data.studentAccRemaining === 0\n ? 'completed-btn'\n : undefined\n : data.teacherAccRemaining === 0\n ? 'completed-btn'\n : undefined\n }\n >\n {type === 'student'\n ? data.studentAccRemaining > 0\n ? 'Create Students'\n : 'Completed'\n : data.teacherAccRemaining > 0\n ? 'Create Teachers'\n : 'Completed'}\n \n \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default CreateAccountTable;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { CreateAccountContainer } from './CreateAccount.styles';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport RaisePO from 'components/ManageSchool/RaisePO';\nimport {\n getNewCustomersByYear,\n getAcademicYears,\n setSelectedContract,\n setSelectedSchool,\n} from 'store/account-creation/accountCreationSlice';\nimport Spinner from 'components/Shared/Spinner';\nimport { parseTableData } from 'helpers/parseAccountTableData';\nimport CreateAccountTable from 'components/ManageSchool/CreateAccount/CreateAccountTable';\n\nconst CreateAccount = () => {\n const dispatch = useDispatch();\n const { isLoading, newAccounts, academicYears } = useSelector(\n (state) => state.accountCreation\n );\n const [year, setYear] = useState('Select Year');\n if (academicYears !== null && year === 'Select Year') {\n setYear(academicYears[0]);\n }\n const parsedTableData =\n newAccounts !== null ? parseTableData(newAccounts) : [];\n console.log('parsedTableData:', parsedTableData);\n useEffect(() => {\n dispatch(getAcademicYears());\n }, [dispatch]);\n\n useEffect(() => {\n if (year !== 'Select Year') {\n dispatch(getNewCustomersByYear(year));\n }\n }, [dispatch, year]);\n return (\n \n \n
    \n

    My customer(s)

    \n \n
    \n {isLoading && }\n {!isLoading && (\n <>\n {parsedTableData.map((data) => (\n
    \n \n \n
    \n ))}\n \n )}\n
    \n );\n};\n\nexport default CreateAccount;\n","import styled from 'styled-components';\nimport { primaryButton, secondaryButton } from 'assets/styles/buttons.styles';\n\nexport const NumberIndicatorContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 20px 50px 20px 265px;\n background-color: white;\n #student-csv,\n #teacher-csv {\n display: none;\n }\n @media only screen and (max-width: 1366px) {\n padding-left: 190px;\n }\n @media only screen and (max-width: 1024px) {\n padding-left: 110px;\n }\n\n label {\n ${secondaryButton}\n border-radius: 2px;\n padding: 5px 20px;\n margin: 0px 20px;\n font-size: 14px;\n width: 15rem;\n height: 33px;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n button {\n ${primaryButton}\n font-size: 14px;\n border-radius: 2px;\n padding: 5px 20px;\n margin: 0px 20px;\n height: 33px;\n }\n .view-btn {\n ${secondaryButton}\n }\n .indicator-label {\n margin-right: 40px;\n font-size: 16px;\n font-weight: bold;\n width: 220px;\n @media only screen and (max-width: 1141px) {\n font-size: 14px;\n }\n @media only screen and (max-width: 1024px) {\n margin-right: 0px;\n }\n\n .purchased-number {\n font-size: 14px;\n font-weight: normal;\n @media only screen and (max-width: 1141px) {\n font-size: 12px;\n }\n }\n }\n .status-container {\n display: flex;\n align-items: center;\n .total-number {\n width: 200px;\n height: 30px;\n text-align: left;\n margin: 0px 0px;\n font-size: 16px;\n font-weight: bold;\n border: 1px solid #aaaaaa;\n padding: 2px 10px;\n @media only screen and (max-width: 1141px) {\n width: 100px;\n }\n }\n .button-group {\n display: flex;\n }\n .status {\n display: flex;\n flex-direction: column;\n color: #1f975f;\n font-size: 0.875rem;\n p {\n margin-bottom: 0px;\n }\n }\n }\n .remove-btn {\n cursor: pointer;\n margin-top: 5px;\n }\n`;\n","import React, { useState } from 'react';\nimport CSVReader from 'react-csv-reader';\nimport { useSelector, useDispatch } from 'react-redux';\nimport moment from 'moment';\nimport {\n setStudentCSV,\n setTeacherCSV,\n setStudentCSVFilename,\n setTeacherCSVFilename,\n exportCreatedAccountsJSON,\n} from 'store/account-creation/accountCreationSlice';\nimport { NumberIndicatorContainer } from './NumberIndicator.styles';\nimport { useHistory } from 'react-router-dom';\nimport { checkAccountQuota, checkCSVHeaders } from 'helpers/csvUpload';\nimport { fetchAccountQuotaByContractIDAccountType } from 'services/accountCreation';\n\n// Helper\nconst getAccountQuota = (data, type) => {\n const accountTypeId = type === 'student' ? 1 : 3;\n const contractDetails = data.ContractDetails;\n const lineItemIndex = contractDetails.findIndex(\n (lineItem) =>\n lineItem.AccountType === accountTypeId && lineItem.ItemType === 'Account'\n );\n const result = {\n accPurchased: 0,\n accCreated: 0,\n accRemaining: 0,\n };\n if (lineItemIndex !== -1) {\n result.accPurchased = contractDetails[lineItemIndex].AccountsPurchased;\n result.accCreated = contractDetails[lineItemIndex].AccountsConsumed;\n result.accRemaining = contractDetails[lineItemIndex].AccountsRemaining;\n return result;\n } else {\n return result;\n }\n};\n\nconst NumberIndicator = ({\n type,\n setCSVErrors,\n setShowToast,\n data,\n selectedContractId,\n isRenewal,\n}) => {\n const history = useHistory();\n const dispatch = useDispatch();\n const { studentCSVFilename, teacherCSVFilename } = useSelector(\n (state) => state.accountCreation\n );\n const renewAccount =\n history.location.pathname === '/manage-school/renew-account/upload-csv';\n\n const accountQuota = data !== null ? getAccountQuota(data, type) : null;\n // Component States\n const [CSVData, setCSVData] = useState([]);\n const [isUploadDisabled, setIsUploadDisabled] = useState(\n studentCSVFilename !== 'Select CSV' ? false : true\n );\n const [showSelectCSV, setShowSelectCSV] = useState(\n accountQuota !== null\n ? accountQuota.accCreated !== 0\n ? false\n : true\n : false\n );\n\n // Event Handlers\n const handleStudentFileLoaded = async (data, fileInfo) => {\n const errors = [];\n const headersValidation = checkCSVHeaders('student', data, !isRenewal);\n const apiValidation = await fetchAccountQuotaByContractIDAccountType({\n contractID: selectedContractId,\n accountType: 1,\n });\n let quotaValidation;\n if (apiValidation.hasOwnProperty('ContractDetails')) {\n const apiAccountQuota = getAccountQuota(apiValidation, 'student');\n quotaValidation = checkAccountQuota(\n apiAccountQuota.accRemaining,\n data.length\n );\n } else {\n quotaValidation = checkAccountQuota(\n accountQuota.accRemaining,\n data.length\n );\n }\n if (headersValidation.pass === false) {\n errors.push(headersValidation);\n } else {\n errors.push({\n pass: true,\n });\n }\n if (quotaValidation === false) {\n errors.push({\n pass: false,\n });\n } else {\n errors.push({\n pass: true,\n });\n }\n dispatch(setStudentCSVFilename(fileInfo.name));\n setCSVData(data);\n if (headersValidation.pass && quotaValidation) {\n setIsUploadDisabled(false);\n } else {\n setCSVErrors(errors);\n setIsUploadDisabled(true);\n setShowToast(true);\n }\n };\n const handleTeacherFileLoaded = async (data, fileInfo) => {\n const errors = [];\n const headersValidation = checkCSVHeaders('teacher', data, !isRenewal);\n const apiValidation = await fetchAccountQuotaByContractIDAccountType({\n contractID: selectedContractId,\n accountType: 3,\n });\n let quotaValidation;\n if (apiValidation.hasOwnProperty('ContractDetails')) {\n const apiAccountQuota = getAccountQuota(apiValidation, 'teacher');\n quotaValidation = checkAccountQuota(\n apiAccountQuota.accRemaining,\n data.length\n );\n } else {\n quotaValidation = checkAccountQuota(\n accountQuota.accRemaining,\n data.length\n );\n }\n if (headersValidation.pass === false) {\n errors.push(headersValidation);\n } else {\n errors.push({\n pass: true,\n });\n }\n if (quotaValidation === false) {\n errors.push({\n pass: false,\n });\n } else {\n errors.push({\n pass: true,\n });\n }\n dispatch(setTeacherCSVFilename(fileInfo.name));\n setCSVData(data);\n if (headersValidation.pass && quotaValidation) {\n setIsUploadDisabled(false);\n } else {\n setCSVErrors(errors);\n setIsUploadDisabled(true);\n setShowToast(true);\n }\n };\n const handleError = (err) => console.log(err);\n\n const removeStudentCSV = () => {\n setCSVData([]);\n dispatch(setStudentCSVFilename('Select CSV'));\n setIsUploadDisabled(true);\n };\n\n const removeTeacherCSV = () => {\n setCSVData([]);\n dispatch(setTeacherCSVFilename('Select CSV'));\n setIsUploadDisabled(true);\n };\n\n const papaparseOptions = {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: true,\n transformHeader: (header) => header.toLowerCase().replace(/\\W/g, '_'),\n transform: (value) => value.trim(),\n };\n return (\n \n {accountQuota && (\n <>\n
    \n Total number of {type === 'student' ? 'students ' : 'teachers '}\n
    \n {`(Purchased total: ${accountQuota.accPurchased} ${\n type === 'student' ? 'students' : 'teachers'\n })`}\n
    \n
    \n {type === 'student' && (\n <>\n
    \n

    {accountQuota.accCreated}

    \n {!showSelectCSV && accountQuota.accCreated > 0 && (\n <>\n {\n dispatch(\n exportCreatedAccountsJSON({\n contractID: selectedContractId,\n accountType: 1,\n pageIndex: 0,\n pageSize: accountQuota.accCreated,\n })\n );\n history.push(\n renewAccount\n ? '/manage-school/renew-account/view-accounts/1'\n : '/manage-school/create-account/view-accounts/1'\n );\n }}\n >\n View\n \n
    \n

    \n {accountQuota.accRemaining === 0\n ? 'Completed'\n : 'Uploaded'}\n

    \n \n Created on{' '}\n {moment(accountQuota.UpdatedDate).format('DD MMM YYYY')}\n \n
    \n {accountQuota.accRemaining > 0 && (\n {\n setShowSelectCSV(true);\n }}\n >\n Add more\n \n )}\n \n )}\n {showSelectCSV && accountQuota.accRemaining > 0 && (\n
    \n \n {studentCSVFilename !== 'Select CSV' ? (\n \n X\n \n ) : (\n ''\n )}\n {\n if (CSVData.length > 0) {\n dispatch(setStudentCSV(CSVData));\n }\n history.push(\n renewAccount\n ? '/manage-school/renew-account/upload-csv/student-preview'\n : '/manage-school/create-account/upload-csv/student-preview'\n );\n }}\n disabled={isUploadDisabled}\n >\n Upload\n \n
    \n )}\n
    \n \n )}\n {type === 'teacher' && (\n <>\n
    \n

    {accountQuota.accCreated}

    \n {!showSelectCSV && accountQuota.accCreated !== 0 && (\n <>\n {\n dispatch(\n exportCreatedAccountsJSON({\n contractID: selectedContractId,\n accountType: 3,\n pageIndex: 0,\n pageSize: accountQuota.accCreated,\n })\n );\n history.push(\n renewAccount\n ? '/manage-school/renew-account/view-accounts/3'\n : '/manage-school/create-account/view-accounts/3'\n );\n }}\n >\n View\n \n
    \n

    \n {accountQuota.accRemaining === 0\n ? 'Completed'\n : 'Uploaded'}\n

    \n \n Created on{' '}\n {moment(accountQuota.UpdatedDate).format('DD MMM YYYY')}\n \n
    \n {accountQuota.accRemaining > 0 && (\n {\n setShowSelectCSV(true);\n }}\n >\n Add more\n \n )}\n \n )}\n {showSelectCSV && accountQuota.accRemaining > 0 && (\n
    \n \n {teacherCSVFilename !== 'Select CSV' ? (\n \n X\n \n ) : (\n ''\n )}\n {\n if (CSVData.length > 0) {\n dispatch(setTeacherCSV(CSVData));\n }\n history.push(\n renewAccount\n ? '/manage-school/renew-account/upload-csv/teacher-preview'\n : '/manage-school/create-account/upload-csv/teacher-preview'\n );\n }}\n disabled={isUploadDisabled}\n >\n Upload\n \n
    \n )}\n
    \n \n )}\n \n )}\n
    \n );\n};\n\nexport default NumberIndicator;\n","import styled from 'styled-components';\n\nexport const UploadCSVContainer = styled.div`\n display: flex;\n flex-direction: column;\n .top-section {\n display: flex;\n background: white;\n padding: 20px 50px;\n justify-content: left;\n align-items: center;\n .back-btn {\n border: none;\n background: none;\n font-size: 20px;\n margin-right: 180px;\n outline: none;\n @media only screen and (max-width: 1366px) {\n margin-right: 105px;\n }\n @media only screen and (max-width: 1024px) {\n margin-right: 24px;\n }\n }\n p {\n font-size: 18px;\n font-weight: bold;\n margin: 5px 10px;\n }\n }\n .renewal-csv {\n color: #f25008;\n width: 20%;\n margin: 0;\n font-size: 14px;\n position: relative;\n left: 50rem;\n @media only screen and (max-width: 1366px) {\n left: 46.3rem;\n }\n @media only screen and (max-width: 1024px) {\n left: 27rem;\n }\n }\n .instruction-container {\n border-top: 1px solid #cfcfcf;\n display: flex;\n flex-direction: column;\n align-items: center;\n h4 {\n margin-top: 20px;\n font-size: 18px;\n font-weight: bold;\n }\n p {\n width: 60%;\n text-align: left;\n font-size: 13px;\n }\n .video {\n width: 606px;\n height: 300px;\n }\n }\n`;\n\nexport const ToastContainer = styled.div`\n position: absolute;\n top: 4rem;\n right: 1rem;\n z-index: 10;\n\n .toast-title {\n color: #f25008;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { Toast } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport NumberIndicator from 'components/ManageSchool/CreateAccount/NumberIndicator';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport { UploadCSVContainer, ToastContainer } from './UploadCSV.styles';\nimport { useHistory } from 'react-router-dom';\nimport Video from 'assets/img/video.png';\nimport { setSelectedContract } from 'store/account-creation/accountCreationSlice';\nimport { getAccountQuotaByContractID } from 'store/account-creation/accountCreationSlice';\n\nconst UploadCSV = () => {\n const dispatch = useDispatch();\n const { selectedContractId, selectedSchool, accountQuotas } = useSelector(\n (state) => state.accountCreation\n );\n const selectedContractDetails = selectedSchool.paidContracts.find(\n (contract) => contract.ContractId === selectedContractId\n );\n const uniqueAcademicYears = selectedSchool.paidContracts\n .map((contract) => contract.AcademicYear)\n .filter((year, i, a) => a.indexOf(year) === i)\n .sort((a, b) => b - a);\n\n // Component States\n const [year, setYear] = useState(selectedContractDetails.AcademicYear);\n const [studentCSVErrors, setStudentCSVErrors] = useState(null);\n const [teacherCSVErrors, setTeacherCSVErrors] = useState(null);\n const [showStudentToast, setShowStudentToast] = useState(false);\n const [showTeacherToast, setShowTeacherToast] = useState(false);\n\n const handleSelectYearOption = (year) => {\n setYear(year);\n const getContract = selectedSchool.paidContracts.find(\n (contract) => contract.AcademicYear === year\n );\n dispatch(setSelectedContract(getContract.ContractId));\n };\n\n const history = useHistory();\n\n const renewAccount =\n history.location.pathname === '/manage-school/renew-account/upload-csv';\n\n useEffect(() => {\n if (selectedContractId !== null) {\n dispatch(getAccountQuotaByContractID(selectedContractId));\n }\n }, [dispatch, selectedContractId]);\n return (\n \n
    \n \n history.push(\n renewAccount\n ? '/manage-school/renew-account'\n : '/manage-school/create-account'\n )\n }\n >\n {'<'}\n \n

    {selectedSchool.schoolName}

    \n {renewAccount && (\n \n )}\n
    \n \n setShowStudentToast(false)}\n show={showStudentToast}\n >\n \n \n CSV File Format Error\n \n \n \n {studentCSVErrors && studentCSVErrors[1].pass === false && (\n

    \n The number of rows in your csv file has exceeded your remaining\n account quota.\n

    \n )}\n {studentCSVErrors &&\n studentCSVErrors[0].pass === false &&\n 'Please check the format of your students csv file.'}\n {studentCSVErrors &&\n studentCSVErrors[0].pass === false &&\n studentCSVErrors[0].missingHeaders.length > 0 && (\n

    \n Missing Headers:{' '}\n {studentCSVErrors[0].missingHeaders.join(', ')}\n

    \n )}\n {studentCSVErrors &&\n studentCSVErrors[0].pass === false &&\n studentCSVErrors[0].invalidHeaders.length > 0 && (\n

    \n Invalid Headers:{' '}\n {studentCSVErrors[0].invalidHeaders.join(', ')}\n

    \n )}\n
    \n \n setShowTeacherToast(false)}\n show={showTeacherToast}\n >\n \n \n CSV File Format Error\n \n \n \n {teacherCSVErrors && teacherCSVErrors[1].pass === false && (\n

    \n The number of rows in your csv file has exceeded your remaining\n account quota.\n

    \n )}\n {teacherCSVErrors &&\n teacherCSVErrors[0].pass === false &&\n 'Please check the format of your teachers csv file.'}\n\n {teacherCSVErrors &&\n teacherCSVErrors[0].pass === false &&\n teacherCSVErrors[0].missingHeaders.length > 0 && (\n

    \n Missing Headers:{' '}\n {teacherCSVErrors[0].missingHeaders.join(', ')}\n

    \n )}\n {teacherCSVErrors &&\n teacherCSVErrors[0].pass === false &&\n teacherCSVErrors[0].invalidHeaders.length > 0 && (\n

    \n Invalid Headers:{' '}\n {teacherCSVErrors[0].invalidHeaders.join(', ')}\n

    \n )}\n
    \n \n
    \n {accountQuotas !== null && (\n <>\n {renewAccount ? (\n
    \n

    Renewal school CSV

    \n
    \n ) : null}\n \n \n \n )}\n
    \n {renewAccount ? (\n

    Instruction for uploading renewal CSV

    \n ) : (\n

    Instructions for uploading CSV file

    \n )}\n

    \n To bulk create accounts, you can upload CSV file (which can be opened\n by Microsoft Excel). You can download our CSV templates (\n \n Students\n \n {` / `}\n \n Teachers\n \n ). Fill it up with your account info and upload using the button\n above.\n

    \n
    \n \"video\"\n
    \n
    \n
    \n );\n};\n\nexport default UploadCSV;\n","import styled from 'styled-components';\nimport { primaryButton, secondaryButton } from 'assets/styles/buttons.styles';\n\nexport const PreviewCSVContainer = styled.div`\n .top-bar {\n display: flex;\n justify-content: space-between;\n padding: 20px 40px;\n background-color: #ffffff;\n border-bottom: solid 1px #cfcfcf;\n position: fixed;\n width: calc(100vw - 195px);\n p {\n font-size: 18px;\n font-weight: bold;\n }\n .validate-btn {\n min-width: 85px;\n }\n .validate-btn,\n .submit-btn {\n ${primaryButton}\n border-radius: 2px;\n padding: 0px 20px;\n margin: 0px 20px;\n }\n }\n .cancel-btn {\n ${secondaryButton}\n border-radius: 3px;\n padding: 0px 20px;\n margin: 0px 20px;\n }\n .preview {\n padding: 0px 50px 0px;\n display: flex;\n flex-direction: column;\n align-items: center;\n p {\n font-size: 18px;\n font-weight: bold;\n }\n }\n .table {\n thead {\n th {\n background-color: #fedd9c;\n border-color: #fec759;\n }\n }\n tbody {\n .error-cell {\n font-size: 1rem;\n color: #f25008;\n max-width: 10rem;\n p {\n font-size: 1rem;\n font-weight: 100;\n .badge {\n margin-right: 0.25rem;\n }\n }\n }\n td {\n border-color: #fec759;\n }\n tr:nth-child(odd) {\n background-color: #fffcf6;\n }\n tr:nth-child(even) {\n background-color: #ffffff;\n }\n }\n }\n`;\n\nexport const ResetPassword = styled.div`\n padding-top: 110px;\n padding-right: 2rem;\n display: flex;\n visibility: ${(props) => (props.isRenewAccount === true ? 'auto' : 'hidden')};\n justify-content: flex-end;\n\n .container-checkbox {\n display: flex;\n padding: 2px;\n justify-content: center;\n margin-right: 1rem;\n }\n\n //hide the browser's default check-box\n .container-checkbox input {\n opacity: 0;\n cursor: pointer;\n z-index: 1;\n margin-top: 4px;\n }\n\n //create a custom checkbox\n .container-checkbox .checkmark {\n position: absolute;\n height: 20px;\n width: 20px;\n border-radius: 4px;\n border: 1px solid #9e9e9e;\n background-color: white;\n }\n\n //on mouse hover\n .container-checkbox:hover input ~ .checkmark {\n background-color: #ffc400;\n border: none;\n }\n\n //when checkbox is checked\n .container-checkbox input:checked ~ .checkmark {\n background-color: #ef7836;\n border: none;\n }\n\n //create the checkmark/indicator (hidden when not checked)\n .container-checkbox .checkmark:after {\n content: '';\n position: absolute;\n display: none;\n }\n\n //show the checkmark when checked\n .container-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n //style the checkmark/indicator\n .container-checkbox .checkmark:after {\n left: 7px;\n top: 1px;\n width: 7px;\n height: 14px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n .check-box {\n position: inherit;\n }\n`;\n","import styled from 'styled-components';\nimport { Modal } from 'react-bootstrap';\n\nexport const StyledModal = styled(Modal)`\n .modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: none;\n }\n .modal-custom {\n min-width: 30%;\n }\n .modal-dialog {\n min-height: calc(100vh - 60px);\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n .modal-custom-large {\n min-width: 60%;\n }\n`;\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { StyledModal } from './PopupModal.styles';\n\nexport default function PopupModal({ children, show, hide }) {\n return (\n {\n hide();\n }}\n >\n {children}\n \n );\n}\n","import styled from 'styled-components';\nimport { primaryButton, lightButton } from 'assets/styles/buttons.styles';\n\nexport const ConfirmationModalBodyContainer = styled.div`\n background-color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n .title {\n margin: 20px 0px;\n font-weight: 700;\n color: #ff5b00;\n font-size: 18px;\n }\n .subtitle {\n margin: 0px 10px;\n text-align: left;\n }\n .buttons {\n display: flex;\n justify-content: space-around;\n width: 100%;\n margin: 20px 0px;\n .confirm {\n ${primaryButton}\n border-radius: 2px;\n padding: 5px 20px;\n width: 209px;\n }\n\n .cancel {\n ${lightButton}\n border-radius: 2px;\n padding: 5px 20px;\n width: 209px;\n }\n }\n`;\n","import React, { useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Spinner } from 'react-bootstrap';\nimport { ConfirmationModalBodyContainer } from './ConfirmationModalBody.styles';\nimport {\n bulkCreateAccounts,\n bulkRenewAccounts,\n resetStudentCSVFileAndValidations,\n resetTeacherCSVFileAndValidations,\n} from 'store/account-creation/accountCreationSlice';\n\nconst ConfirmationModalBody = ({ hide, accountType, isResetPassword }) => {\n const history = useHistory();\n const dispatch = useDispatch();\n const {\n studentCSVValidations,\n teacherCSVValidations,\n accountCreationResult,\n accountRenewalResult,\n isCreationLoading,\n isRenewalLoading,\n error,\n } = useSelector((state) => state.accountCreation);\n\n const renewAccount =\n history.location.pathname ===\n '/manage-school/renew-account/upload-csv/student-preview' ||\n history.location.pathname ===\n '/manage-school/renew-account/upload-csv/teacher-preview';\n\n useEffect(() => {\n if (accountCreationResult === true || accountRenewalResult === true) {\n if (accountType === 'student') {\n dispatch(resetStudentCSVFileAndValidations());\n } else if (accountType === 'teacher') {\n dispatch(resetTeacherCSVFileAndValidations());\n }\n hide();\n history.push(\n renewAccount\n ? '/manage-school/renew-account/upload-csv'\n : '/manage-school/create-account/upload-csv'\n );\n }\n }, [\n history,\n renewAccount,\n accountCreationResult,\n accountRenewalResult,\n accountType,\n dispatch,\n hide,\n ]);\n return (\n \n
    \n
    \n Account {renewAccount ? 'Renewal' : 'Creation'} Request Submission\n
    \n
    \n
    \n You are about to upload the {accountType} list account{' '}\n {renewAccount ? 'renewal' : 'creation'}. Please ensure the list\n information are accurate.\n
    \n {error &&

    {error}

    }\n
    \n {\n hide();\n }}\n disabled={isCreationLoading || isRenewalLoading}\n >\n Cancel\n \n {\n if (accountType === 'student') {\n const contractFileIDs = studentCSVValidations.map(\n (file) => file.Contract_File_Id\n );\n if (renewAccount === true) {\n dispatch(\n bulkRenewAccounts({\n contractFileIds: contractFileIDs,\n isResetPassword: isResetPassword,\n })\n );\n } else {\n dispatch(bulkCreateAccounts(contractFileIDs));\n }\n } else if (accountType === 'teacher') {\n const contractFileIDs = teacherCSVValidations.map(\n (file) => file.Contract_File_Id\n );\n if (renewAccount === true) {\n dispatch(\n bulkRenewAccounts({\n contractFileIds: contractFileIDs,\n isResetPassword: isResetPassword,\n })\n );\n } else {\n dispatch(bulkCreateAccounts(contractFileIDs));\n }\n }\n }}\n disabled={isCreationLoading}\n >\n {(isCreationLoading || isRenewalLoading) && (\n \n )}\n Confirm & Create\n \n
    \n
    \n );\n};\n\nexport default ConfirmationModalBody;\n","import styled from 'styled-components';\n\nexport const PaginationContainer = styled.div`\n .page-nav {\n width: calc(100% - 50px);\n .pagination {\n justify-content: flex-end;\n }\n\n .page-item {\n margin: 0 0.5em;\n\n &.active .page-link,\n &.active .page-link:focus,\n &.active .page-link:hover {\n background-color: #ff6243;\n color: #fff;\n }\n\n .page-link {\n color: #343434;\n border-color: #d5d5d5;\n\n &:focus,\n &:hover {\n box-shadow: none;\n background-color: #fff7f3;\n }\n\n &:disabled {\n background-color: #fff;\n color: #d8d8d8;\n }\n }\n }\n\n &__search {\n align-self: center;\n margin-left: 1.5em;\n color: #343434;\n\n input {\n width: 2em;\n margin: 0 0.25em;\n text-align: center;\n }\n }\n }\n`;\n","import React from 'react';\nimport { range } from 'ramda';\nimport { PaginationContainer } from './Pagination.styles';\n\nfunction getPaginationNumbers(maxPage, numVisiblePages, page) {\n // Generate page numbers, e.g. if maxPage === 3, show pages number 1 to 3\n const pageNumbers = range(1, maxPage + 1);\n\n // If we have less total pages than number of visible pages, show all page numbers generated\n if (maxPage <= numVisiblePages) {\n return pageNumbers;\n }\n\n // If current page is at beginning portion of possible page numbers, show the beginning portion\n if (page < numVisiblePages) {\n return pageNumbers.slice(0, numVisiblePages);\n }\n\n // If current page is at the end portion of possible page numbers, show the end portion\n // Note: not limiting current page to max page number\n if (page > maxPage - (numVisiblePages - 1)) {\n const firstIndex = pageNumbers.indexOf(maxPage - numVisiblePages) + 1;\n return pageNumbers.slice(firstIndex);\n }\n\n // If below code runs, current page must be in the middle portion of possible page numbers\n // show the page numbers adjacent to the current page\n const numPagesOnLeft = Math.floor(numVisiblePages / 2);\n const numPagesOnRight = numVisiblePages - numPagesOnLeft;\n const firstIndex = pageNumbers.indexOf(page) - numPagesOnLeft;\n const lastIndex = pageNumbers.indexOf(page) + numPagesOnRight;\n return pageNumbers.slice(firstIndex, lastIndex);\n}\n\nfunction PaginationShared(props) {\n const {\n maxPage,\n numVisiblePages,\n onPageChange,\n onSearchPageChange,\n page,\n searchPage,\n } = props;\n\n const pages = getPaginationNumbers(maxPage, numVisiblePages, page);\n\n return (\n \n \n \n );\n}\n\nPaginationShared.defaultProps = {\n numVisiblePages: 3,\n};\n\nexport default PaginationShared;\n","import React from 'react';\nimport { Badge } from 'react-bootstrap';\n\nconst ValidationComments = ({ comments }) => {\n const hasLoginIDString = comments.includes('LoginId');\n return (\n

    \n {hasLoginIDString === true && Login ID}\n {hasLoginIDString === true ? comments.replace('LoginId', '') : comments}\n

    \n );\n};\n\nexport default ValidationComments;\n","import React, { useState, useEffect } from 'react';\nimport { Spinner, Badge } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { PreviewCSVContainer, ResetPassword } from './PreviewCSV.styles';\nimport { useHistory } from 'react-router-dom';\nimport PopupModal from 'components/Shared/PopupModal';\nimport ConfirmationModalBody from 'components/ManageSchool/CreateAccount/ConfirmationModalBody';\nimport PaginationShared from 'components/Shared/Pagination';\nimport ValidationComments from 'components/ManageSchool/CreateAccount/ValidationComments';\nimport {\n bulkValidateStudentCSV,\n bulkValidateTeacherCSV,\n resetCSVValidations,\n} from 'store/account-creation/accountCreationSlice';\nimport { bulkCancelValidations } from 'services/accountCreation';\nimport {\n checkDuplicateValues,\n checkMissingInvalidValues,\n combineAccountLists,\n checkAPICsvValidation,\n} from 'helpers/csvUpload';\nimport { CSVHeaders } from 'constants/index';\n\nconst PreviewCSV = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const renewAccount =\n history.location.pathname ===\n '/manage-school/renew-account/upload-csv/teacher-preview' ||\n history.location.pathname ===\n '/manage-school/renew-account/upload-csv/student-preview';\n\n const accountType =\n history.location.pathname ===\n '/manage-school/create-account/upload-csv/teacher-preview' ||\n history.location.pathname ===\n '/manage-school/renew-account/upload-csv/teacher-preview'\n ? 'teacher'\n : 'student';\n const {\n studentCSV,\n teacherCSV,\n isCreationLoading,\n isRenewalLoading,\n selectedContractId,\n selectedSchool,\n studentCSVValidations,\n teacherCSVValidations,\n isValidationLoading,\n } = useSelector((state) => state.accountCreation);\n\n //modal state & handlers\n const [showConfirmation, setShowConfirmation] = useState(false);\n const openConfirmation = () => {\n setShowConfirmation(true);\n };\n const hideConfirmation = () => {\n if (isCreationLoading === false && isRenewalLoading === false) {\n setShowConfirmation(false);\n }\n };\n // Checkbox state\n const [isResetPassword, setIsResetPassword] = useState(false);\n\n //max number of page\n const maxStudentPages = Math.ceil(studentCSV && studentCSV.length / 10);\n const maxTeacherPages = Math.ceil(teacherCSV && teacherCSV.length / 10);\n\n //dispaly max number of data\n const perPage = 10;\n const [offset, setOffset] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const studentSlice = studentCSV && studentCSV.slice(offset, offset + perPage);\n const teacherSlice = teacherCSV && teacherCSV.slice(offset, offset + perPage);\n\n // Callback for page change\n const onPageChange = (number) => {\n const newOffset = (number - 1) * perPage;\n setCurrentPage(number);\n setOffset(newOffset);\n };\n // CSV Validation\n let duplicateValidation, missingValidation, frontendValidation;\n if (accountType === 'student' && studentCSV !== null) {\n duplicateValidation = checkDuplicateValues(studentCSV);\n missingValidation = checkMissingInvalidValues(\n 'student',\n studentCSV,\n !renewAccount\n );\n if (\n duplicateValidation.pass === false ||\n missingValidation.pass === false\n ) {\n frontendValidation = false;\n } else {\n frontendValidation = true;\n }\n // TODO: Check if all validations pass & set state\n } else if (accountType === 'teacher' && teacherCSV !== null) {\n duplicateValidation = checkDuplicateValues(teacherCSV);\n missingValidation = checkMissingInvalidValues(\n 'teacher',\n teacherCSV,\n !renewAccount\n );\n if (\n duplicateValidation.pass === false ||\n missingValidation.pass === false\n ) {\n frontendValidation = false;\n } else {\n frontendValidation = true;\n }\n }\n\n useEffect(() => {\n return () => {\n dispatch(resetCSVValidations());\n };\n }, [dispatch]);\n\n const [isValidateButtonDisabled, setIsValidateButtonDisabled] = useState(\n accountType === 'student'\n ? studentCSVValidations !== null || frontendValidation === false\n ? true\n : false\n : teacherCSVValidations !== null || frontendValidation === false\n ? true\n : false\n );\n let isSubmitButtonVisible, flattenedAccountLists;\n if (accountType === 'student') {\n flattenedAccountLists =\n studentCSVValidations !== null\n ? combineAccountLists(studentCSVValidations)\n : null;\n isSubmitButtonVisible =\n studentCSVValidations !== null\n ? checkAPICsvValidation(flattenedAccountLists) === true\n ? true\n : false\n : false;\n } else if (accountType === 'teacher') {\n flattenedAccountLists =\n teacherCSVValidations !== null\n ? combineAccountLists(teacherCSVValidations)\n : null;\n isSubmitButtonVisible =\n teacherCSVValidations !== null\n ? checkAPICsvValidation(flattenedAccountLists) === true\n ? true\n : false\n : false;\n }\n return (\n \n \n \n \n
    \n {\n if (studentCSVValidations !== null) {\n await bulkCancelValidations(\n studentCSVValidations.map((val) => val.Contract_File_Id)\n );\n }\n if (teacherCSVValidations !== null) {\n await bulkCancelValidations(\n teacherCSVValidations.map((val) => val.Contract_File_Id)\n );\n }\n history.push(\n renewAccount\n ? '/manage-school/renew-account/upload-csv'\n : '/manage-school/create-account/upload-csv'\n );\n }}\n >\n Cancel\n \n

    \n {accountType.charAt(0).toUpperCase() + accountType.slice(1)} Accounts\n Preview\n

    \n {!isSubmitButtonVisible && (\n {\n setIsValidateButtonDisabled(true);\n if (accountType === 'student') {\n dispatch(\n bulkValidateStudentCSV({\n csvRows: studentCSV,\n contractId: selectedContractId,\n isCreation: !renewAccount,\n })\n );\n } else if (accountType === 'teacher') {\n dispatch(\n bulkValidateTeacherCSV({\n csvRows: teacherCSV,\n contractId: selectedContractId,\n isCreation: !renewAccount,\n })\n );\n }\n }}\n >\n {isValidationLoading && }\n Validate\n \n )}\n {isSubmitButtonVisible && (\n \n )}\n
    \n \n
    \n {\n if (e.target.checked) {\n setIsResetPassword(true);\n } else {\n setIsResetPassword(false);\n }\n }}\n >\n \n
    \n Reset existing accounts' password\n
    \n
    \n {renewAccount ? (\n

    {`${selectedSchool.schoolName} (Renewal)`}

    \n ) : (\n

    {selectedSchool.schoolName}

    \n )}\n \n \n {accountType === 'student' && (\n \n \n {renewAccount && }\n \n \n \n \n \n \n \n )}\n {accountType === 'teacher' && (\n \n \n {renewAccount && }\n \n \n \n \n \n )}\n \n \n {accountType === 'student' &&\n studentSlice &&\n studentSlice.map((row, index) => (\n \n \n {renewAccount && }\n \n \n \n \n \n \n \n ))}\n {accountType === 'teacher' &&\n teacherSlice &&\n teacherSlice.map((row, index) => (\n \n \n {renewAccount && }\n \n \n \n \n \n ))}\n \n
    IndexNew/Existing UserNameGrade LevelClass NameLogin IDPasswordError
    IndexNew/Existing UserNameLogin IDPasswordError
    {index + offset + 1}{String(row.new_existing_user)}{String(row.name)}{String(row.level)}{String(row.class_name)}{String(row.login_id)}{String(row.password)}\n {missingValidation &&\n missingValidation.missingValues[index + offset].length >\n 0 && (\n

    \n {missingValidation.missingValues[index + offset].map(\n (missingValue) => (\n \n {CSVHeaders[missingValue]}\n \n )\n )}{' '}\n should not be blank.\n

    \n )}\n {missingValidation &&\n missingValidation.invalidValues[index + offset].length >\n 0 && (\n

    \n {missingValidation.invalidValues[index + offset].map(\n (invalidValue) => (\n \n {invalidValue}\n \n )\n )}{' '}\n should be a valid value.\n

    \n )}\n {duplicateValidation &&\n duplicateValidation.duplicateRows[index + offset]\n .isDuplicate && (\n

    \n Login ID\n {` should not have duplicate value with row ${duplicateValidation.duplicateHashmap[\n duplicateValidation.duplicateRows[index + offset]\n .value\n ]\n .filter((rowNumber) => rowNumber !== index + offset)\n .map((index) => index + 1)\n .join(', ')}`}\n

    \n )}\n {studentCSVValidations &&\n flattenedAccountLists[index + offset].Comments !==\n null && (\n \n )}\n
    {index + offset + 1}{String(row.new_existing_user)}{String(row.name)}{String(row.login_id)}{String(row.password)}\n {missingValidation &&\n missingValidation.missingValues[index + offset].length >\n 0 && (\n

    \n {missingValidation.missingValues[index + offset].map(\n (missingValue) => (\n \n {CSVHeaders[missingValue]}\n \n )\n )}{' '}\n should not be blank.\n

    \n )}\n {missingValidation &&\n missingValidation.invalidValues[index + offset].length >\n 0 && (\n

    \n {missingValidation.invalidValues[index + offset].map(\n (invalidValue) => (\n \n {invalidValue}\n \n )\n )}{' '}\n should be a valid value.\n

    \n )}\n {duplicateValidation &&\n duplicateValidation.duplicateRows[index + offset]\n .isDuplicate && (\n

    \n Login ID\n {` should not have duplicate value with row ${duplicateValidation.duplicateHashmap[\n duplicateValidation.duplicateRows[index + offset]\n .value\n ]\n .filter((rowNumber) => rowNumber !== index + offset)\n .map((index) => index + 1)\n .join(', ')}`}\n

    \n )}\n {teacherCSVValidations &&\n flattenedAccountLists[index + offset].Comments !==\n null && (\n \n )}\n
    \n
    \n \n
    \n );\n};\n\nexport default PreviewCSV;\n","import styled from 'styled-components';\n\nexport const ViewAccountsContainer = styled.div`\n .top-bar {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 20px 40px;\n background-color: #ffffff;\n border-bottom: solid 1px #cfcfcf;\n position: fixed;\n width: calc(100vw - 195px);\n .back-btn {\n position: absolute;\n left: 40px;\n border: none;\n background: none;\n }\n p {\n font-size: 18px;\n font-weight: bold;\n }\n }\n`;\n\nexport const TableContainer = styled.div`\n padding: 110px 50px 0px;\n display: flex;\n flex-direction: column;\n align-items: center;\n .table {\n thead {\n th {\n background-color: #fedd9c;\n border-color: #fec759;\n }\n }\n tbody {\n td {\n border-color: #fec759;\n }\n tr:nth-child(odd) {\n background-color: #fffcf6;\n }\n tr:nth-child(even) {\n background-color: #ffffff;\n }\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { ViewAccountsContainer, TableContainer } from './ViewAccounts.styles';\nimport { AccountType } from 'constants/index';\nimport Spinner from 'components/Shared/Spinner';\n\nconst ViewAccounts = ({ match }) => {\n const history = useHistory();\n const accountType = AccountType[parseInt(match.params.accountTypeID, 10)];\n const { selectedSchool, isExportCSVLoading, exportResult } = useSelector(\n (state) => state.accountCreation\n );\n const [parsedCsvString, setParsedCsvString] = useState(null);\n let sortedCsvData;\n if (parsedCsvString !== null) {\n if (parsedCsvString.length > 1) {\n sortedCsvData = parsedCsvString.slice().sort(function (row1, row2) {\n // Sort by level\n if (row1.GradeLevel < row2.GradeLevel) return -1;\n else if (row1.GradeLevel > row2.GradeLevel) return 1;\n\n // Sort by class name\n if (row1.Class.toLowerCase() < row2.Class.toLowerCase()) return -1;\n else if (row1.Class.toLowerCase() > row2.Class.toLowerCase()) return 1;\n\n // Sort by student/teacher name\n if (row1.Name.toLowerCase() < row2.Name.toLowerCase()) return -1;\n else if (row1.Name.toLowerCase() > row2.Name.toLowerCase()) return 1;\n\n return 0;\n });\n } else {\n sortedCsvData = [];\n }\n }\n const renewAccount =\n history.location.pathname ===\n '/manage-school/renew-account/view-accounts/1' ||\n history.location.pathname ===\n '/manage-school/renew-account/view-accounts/3';\n\n useEffect(() => {\n if (exportResult !== null) {\n setParsedCsvString(exportResult);\n }\n }, [exportResult]);\n return (\n \n
    \n {\n history.push(\n renewAccount\n ? '/manage-school/renew-account/upload-csv'\n : '/manage-school/create-account/upload-csv'\n );\n }}\n >\n {'<'}\n \n

    {`Created ${accountType} Accounts`}

    \n
    \n {isExportCSVLoading && (\n \n \n \n )}\n {!isExportCSVLoading && (\n \n

    \n {selectedSchool.schoolName}\n

    \n \n {accountType === 'Student' && parsedCsvString !== null && (\n <>\n \n \n \n {renewAccount && }\n \n \n \n \n \n \n \n \n {sortedCsvData.length > 0 &&\n sortedCsvData.map((row, index) => (\n \n \n {renewAccount && (\n \n )}\n \n \n \n \n \n \n ))}\n \n \n )}\n {accountType === 'Teacher' && parsedCsvString !== null && (\n <>\n \n \n {renewAccount && }\n \n \n \n \n \n \n \n {sortedCsvData.length > 0 &&\n sortedCsvData.map((row, index) => (\n \n {renewAccount && (\n \n )}\n \n \n \n \n \n ))}\n \n \n )}\n
    IndexNew/Existing UserNameGrade LevelClass NameLogin IDPassword
    {index + 1}\n {row.IsExistingUser === true ? 'Existing' : 'New'}\n {row.Name}{row.GradeLevel}{row.Class}{row.LoginId}{row.Password}
    New/Existing UserNameLogin IDPasswordGrade Level
    \n {row.IsExistingUser === true ? 'Existing' : 'New'}\n {row.Name}{row.LoginId}{row.Password}{row.GradeLevel}
    \n
    \n )}\n
    \n );\n};\n\nexport default ViewAccounts;\n","import styled from 'styled-components';\n\nconst RenewAccountContainer = styled.div`\n .table-label {\n display: flex;\n padding: 20px 50px;\n p {\n margin: 5px 10px 5px 0px;\n font-size: 18px;\n font-weight: bold;\n }\n }\n`;\n\nexport default RenewAccountContainer;\n","import styled from 'styled-components';\n\nconst RenewAccountTableContainer = styled.div`\n .table-data {\n padding-left: 50px;\n padding-right: 50px;\n .table td,\n .table th {\n padding: 5px;\n vertical-align: middle;\n }\n thead {\n tr {\n background: #fff7e8;\n text-align: center;\n }\n }\n tbody {\n tr {\n text-align: center;\n }\n tr:nth-child(odd) {\n background-color: #ffffff;\n }\n }\n .create th,\n .create td {\n border: 1px solid #ffd98d;\n }\n .student-table {\n margin-bottom: 0px;\n border-bottom: none;\n }\n .teacher-table {\n margin-bottom: 30px;\n .date,\n .country,\n .school-name {\n visibility: hidden;\n }\n }\n .date,\n .country {\n width: 100px;\n }\n .school-name {\n width: 400px;\n }\n .renewed-account {\n width: 250px;\n border-top: none;\n }\n .old-account {\n width: 150px;\n border-top: none;\n }\n .action {\n width: 150px;\n border-top: none;\n }\n button {\n border: none;\n background-color: white;\n font-size: 16px;\n color: #f25008;\n padding: 5px 10px;\n outline: none;\n }\n .completed-btn {\n color: #2faa58;\n }\n button:hover {\n text-decoration: underline;\n }\n }\n .completed {\n thead {\n tr {\n background: #defedf;\n }\n }\n th,\n td {\n border: 1px solid #b5e6b6;\n }\n }\n`;\n\nexport default RenewAccountTableContainer;\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport moment from 'moment';\nimport { formatNumber } from 'helpers/formatNumber';\nimport RenewAccountTableContainer from './RenewAccountTable.styles';\n\nconst RenewAccountTable = ({\n data,\n selectedContract,\n selectedSchool,\n type,\n}) => {\n const history = useHistory();\n const dispatch = useDispatch();\n\n return (\n \n
    \n
    \n \n \n \n \n Date\n \n \n Country\n \n \n School Name\n \n \n Purchased {type === 'student' ? 'Stu' : 'Tr'} Accounts\n \n \n {type === 'student' ? 'Stu' : 'Teacher'} Accounts\n \n \n Action\n \n \n \n \n \n {moment(data.date).format('DD MMM')}\n {data.country}\n {data.schoolName}\n \n {formatNumber(\n 'en',\n type === 'student'\n ? data.studentPurchased\n : data.teacherPurchased\n )}\n \n \n {formatNumber(\n 'en',\n type === 'student'\n ? data.studentAccCreated\n : data.teacherAccCreated\n )}\n \n \n {\n history.push('/manage-school/renew-account/upload-csv');\n dispatch(selectedContract(data.contractId));\n dispatch(selectedSchool(data));\n }}\n className={\n type === 'student'\n ? data.studentAccRemaining === 0\n ? 'completed-btn'\n : undefined\n : data.teacherAccRemaining === 0\n ? 'completed-btn'\n : undefined\n }\n >\n {type === 'student'\n ? data.studentAccRemaining === 0\n ? 'Completed'\n : data.studentPurchased === 0\n ? 'Renew Students'\n : 'Create Students'\n : data.teacherAccRemaining === 0\n ? 'Completed'\n : data.teacherPurchased === 0\n ? 'Renew Teachers'\n : 'Create Teachers'}\n \n \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default RenewAccountTable;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport RaisePO from 'components/ManageSchool/RaisePO';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport Spinner from 'components/Shared/Spinner';\nimport RenewAccountContainer from './RenewAccount.styles';\nimport RenewAccountTable from 'components/ManageSchool/RenewAccount/RenewAccountTable';\nimport {\n getAcademicYears,\n getRenewAccountsSummary,\n setSelectedContract,\n setSelectedSchool,\n} from 'store/account-creation/accountCreationSlice';\nimport { parseTableData } from 'helpers/parseAccountTableData';\n\nconst RenewAccount = () => {\n const dispatch = useDispatch();\n\n const { isLoading, renewAccounts, academicYears } = useSelector(\n (state) => state.accountCreation\n );\n const parsedTableData =\n renewAccounts !== null ? parseTableData(renewAccounts) : [];\n\n const uniqueAcademicYears = parsedTableData\n .map((contract) => contract.academicYear)\n .filter((year, i, a) => a.indexOf(year) === i)\n .sort((a, b) => b - a);\n const [year, setYear] = useState('Select Year');\n if (academicYears !== null && year === 'Select Year') {\n setYear(academicYears[0]);\n }\n // if (uniqueAcademicYears.length > 0 && year === null) {\n // setYear(uniqueAcademicYears[0]);\n // }\n\n const filteredByAcademicYear = parsedTableData.filter(\n (item) => item.academicYear === year\n );\n\n const handleSelectYearOption = (year) => {\n setYear(year);\n };\n\n // Useeffects\n useEffect(() => {\n dispatch(getAcademicYears());\n }, [dispatch]);\n useEffect(() => {\n dispatch(getRenewAccountsSummary(year));\n }, [dispatch, year]);\n return (\n \n \n
    \n

    My customer(s)

    \n \n
    \n {isLoading ? (\n \n ) : (\n <>\n {filteredByAcademicYear.map((data) => (\n
    \n \n \n
    \n ))}\n \n )}\n
    \n );\n};\n\nexport default RenewAccount;\n","import styled from 'styled-components';\n\nexport const ManageSchoolContainer = styled.div`\n padding-left: 195px;\n padding-top: 50px;\n @media (max-width: 971px) {\n padding-left: 65px;\n }\n`;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { useLocation } from 'react-router-dom';\nimport Header from 'components/Header/Header';\nimport Sidebar from 'components/Sidebar/Sidebar';\nimport SidebarManageSchool from 'components/Sidebar/SidebarManageSchool';\nimport MySchool from './MySchool';\nimport CreateAccount from './CreateAccount';\nimport UploadCSV from './UploadCSV';\nimport PreviewCSV from './PreviewCSV';\nimport ViewAccounts from './ViewAccounts';\nimport RenewAccount from './RenewAccount';\nimport { ManageSchoolContainer } from './ManageSchool.styles';\n\nconst ManageSchool = () => {\n const { pathname } = useLocation();\n return (\n <>\n
    \n
    \n \n \n \n \n {pathname === '/manage-school' && }\n \n \n \n }\n />\n \n \n \n \n }\n />\n \n \n \n \n \n
    \n \n );\n};\n\nexport default ManageSchool;\n","import styled from 'styled-components';\n\nexport const Card = styled.div`\n background: white;\n margin: 0 1rem 2rem 1rem;\n padding: 1rem;\n display: flex;\n .title {\n margin-right: 1rem;\n }\n\n .promocode {\n display: flex;\n color: #fe5c00;\n button {\n border: none;\n background: ${(props) => (props.hasCopied ? 'silver' : '#fe5c00')};\n font-weight: bold;\n color: white;\n margin-left: 1rem;\n :hover {\n background: ${(props) => (props.hasCopied ? '#9a9a9a' : '#cb4a00')};\n }\n }\n }\n`;\n\nexport const ContentBankBtn = styled.button`\n position: absolute;\n right: 2rem;\n border: none;\n background: #fe5c00;\n color: white;\n font-weight: bold;\n padding: 0.25rem 0.5rem;\n border-radius: 0.5rem;\n :hover {\n background: #cb4a00;\n }\n`;\n","import React, { useState } from 'react';\nimport { Card, ContentBankBtn } from './PromoCodeCard.styles';\nimport Clipboard from 'react-clipboard.js';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nconst PromoCodeCard = ({ code }) => {\n const [hasCopied, setHasCopied] = useState(false);\n return (\n \n My Promo Code\n
    \n {code}\n {\n console.log('Copied');\n setHasCopied(true);\n }}\n >\n {hasCopied ? 'Copied' : 'Copy'}\n \n
    \n \n All the marketing assets you need to help you promote KooBits.\n \n }\n >\n {\n window.open(\n 'https://sites.google.com/view/koobitscontentbank',\n '_blank'\n );\n }}\n >\n Content Bank\n \n \n
    \n );\n};\n\nexport default PromoCodeCard;\n","import styled from 'styled-components';\n\nexport const Page = styled.div`\n padding-top: 50px;\n .welcome-text {\n text-align: left;\n font-size: 18px;\n color: #a4a4a4;\n border-bottom: 1px solid rgba(112, 112, 112, 0.32);\n font-weight: bold;\n padding: 10px 50px;\n background-color: white;\n margin-bottom: 1rem;\n span {\n font-size: 25px;\n color: #545454;\n }\n }\n`;\n\nexport const Referrals = styled.div`\n margin: 0 1rem;\n`;\n\nexport const Header = styled.div`\n display: flex;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n h4 {\n margin-right: 1rem;\n }\n`;\n","import styled from 'styled-components';\n\nexport const ReferralTableContainer = styled.div`\n .table {\n thead {\n th {\n background-color: #ffcc68;\n border-color: #f3b33a;\n }\n }\n tbody {\n td {\n border-color: #ffdc95;\n }\n tr:nth-child(odd) {\n background-color: #fffcf6;\n }\n tr:nth-child(even) {\n background-color: #ffffff;\n }\n tr {\n .check {\n padding: 2px 5px 2px 2px;\n }\n .country {\n width: 240px;\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport moment from 'moment';\nimport { ReferralTableContainer } from './ReferralTable.styles';\n\n// Helper\nconst formatValue = (value, type) => {\n if (type === 'date') {\n return moment(value).format('DD-MM-YYYY hh:mm a');\n } else if (type === 'currency') {\n return value.toFixed(2);\n } else {\n if (value) {\n return value;\n } else {\n return '-';\n }\n }\n};\n\nconst ReferralTable = ({ headers, data }) => {\n return (\n \n \n \n \n \n {headers.map((header) => (\n \n ))}\n \n \n \n {data.map((row, index) => (\n \n \n {headers.map((header) => (\n \n ))}\n \n ))}\n \n
    \n {header.name}\n
    {index + 1}{formatValue(row[header.key], header.type)}
    \n
    \n );\n};\n\nexport default ReferralTable;\n","import React, { useEffect } from 'react';\nimport Header from 'components/Header/Header';\nimport PromoCodeCard from 'components/AffiliateDashboard/PromoCodeCard';\nimport {\n Page,\n Referrals,\n Header as ReferralsHeader,\n} from './AffiliateDashboard.styles';\nimport {\n getPromoCode,\n getReferrals,\n setSelectedMonth,\n} from 'store/affiliate-dashboard/affiliateDashboardSlice';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Spinner from 'components/Shared/Spinner';\nimport DropdownMenu from 'components/Shared/DropdownMenu';\nimport ReferralTable from 'components/AffiliateDashboard/ReferralTable';\nimport moment from 'moment';\n\nconst getUniqueMonths = (data, dateKey) => {\n const months = data.map((row) => moment(row[dateKey]).format('MMM - YYYY'));\n const uniqueMonths = Array.from(new Set(months));\n return uniqueMonths;\n};\n\nconst AffiliateDashboard = () => {\n const dispatch = useDispatch();\n const { isLoading, promoCode, referrals, selectedMonth } = useSelector(\n (state) => state.affiliateDashboard\n );\n\n // Table\n const headers = [\n {\n name: 'Transaction ID',\n key: 'TransactionID',\n },\n {\n name: 'Parent Email',\n key: 'ParentEmail',\n },\n {\n name: 'Purchase Date',\n key: 'PurchaseDate',\n type: 'date',\n },\n {\n name: 'Plan',\n key: 'Plan',\n },\n {\n name: 'Currency',\n key: 'Currency',\n },\n {\n name: 'Amount',\n key: 'PurchaseAmount',\n type: 'currency',\n },\n ];\n\n const months = getUniqueMonths(referrals, 'PurchaseDate').reverse();\n\n const onChangeMonth = (value) => {\n dispatch(setSelectedMonth(value));\n };\n\n useEffect(() => {\n dispatch(getPromoCode());\n dispatch(getReferrals());\n }, [dispatch]);\n return (\n
    \n
    \n \n
    \n Welcome! Affiliate\n
    \n {isLoading && }\n {!isLoading && (\n <>\n \n \n \n

    My Referrals

    \n {referrals.length > 0 && (\n \n )}\n
    \n \n moment(row.PurchaseDate).format('MMM - YYYY') ===\n selectedMonth\n )}\n />\n
    \n \n )}\n
    \n
    \n );\n};\n\nexport default AffiliateDashboard;\n","import React from 'react';\nimport { Router, Switch, Route, Redirect } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { createBrowserHistory } from 'history';\nimport Login from 'pages/Login/Login';\nimport Dashboard from 'pages/Dashboard/Dashboard';\nimport ManageSchool from 'pages/ManageSchool/ManageSchool';\nimport AffiliateDashboard from 'pages/AffiliateDashboard/AffiliateDashboard';\n\nexport const history = createBrowserHistory({\n basename: process.env.REACT_APP_SUBDOMAIN,\n});\n\nconst AuthenticatedRoute = ({ component: Component, ...rest }) => (\n \n localStorage.getItem('access_token') ? (\n \n ) : (\n \n )\n }\n />\n);\n\nconst Routes = () => {\n const { isAffiliate } = useSelector((state) => state.login);\n return (\n \n \n {isAffiliate ? (\n \n ) : (\n \n )}\n \n {!isAffiliate && (\n <>\n \n \n \n )}\n\n {isAffiliate && (\n \n )}\n \n \n );\n};\n\nexport default Routes;\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyle = createGlobalStyle`\nbody {\n font-family: Muli;\n background-color: #f1f1f1;\n}`;\n","import React from 'react';\nimport Routes from './Routes';\nimport './App.css';\nimport 'assets/fonts/fonts.css';\nimport { GlobalStyle } from 'assets/styles/globalStyle.style';\n\nfunction App() {\n return (\n <>\n \n \n \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport store from 'store/index';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","module.exports = __webpack_public_path__ + \"static/media/login-koobits-logo.97c7527b.svg\";","module.exports = __webpack_public_path__ + \"static/media/login-partner-icon.f0bd4d88.svg\";","module.exports = __webpack_public_path__ + \"static/media/login-background.879c73a8.svg\";","module.exports = __webpack_public_path__ + \"static/media/login-decoration.5e346631.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-header-partners.d649400f.svg\";","module.exports = __webpack_public_path__ + \"static/media/avatar.1acf810c.png\";","module.exports = __webpack_public_path__ + \"static/media/icon-my-schools.f534da92.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-my-schools-active.e8113963.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-create-account.f406abe7.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-create-account-active.441fd5fd.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-renew-account.312c9d28.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-renew-account-active.cd2d59f7.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-align-syllabus.f4117159.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-align-syllabus-active.4e6c6816.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-school-report.f184df09.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-school-report-active.4f7a2c3e.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-other-settings.8ba30882.svg\";"],"sourceRoot":""}