{"version":3,"sources":["pages/Message.tsx","utils/get-initials.ts","client.service.ts","icons/Search.tsx","http.ts","account.service.ts","Store.ts","components/MainNavbar.tsx","components/MainSidebar.tsx","theme/base-theme-options.ts","theme/light-theme-options.ts","theme/dark-theme-options.ts","theme/index.ts","components/Footer.tsx","components/MainLayout.tsx","components/PublicLayout.tsx","components/profile/ProfileNavbar.tsx","icons/ChevronDown.tsx","icons/ChevronRight.tsx","components/NavItem.tsx","components/NavSection.tsx","components/profile/ProfileSidebar.tsx","components/profile/ProfileLayout.tsx","data.ts","Styles.ts","components/Question.tsx","components/QuestionList.tsx","components/CategoryCard.tsx","components/CategoryList.tsx","components/SearchButton.tsx","images/search-bg.png","pages/Home.tsx","pages/Category.tsx","pages/Search.tsx","pages/Question.tsx","utils/credit-cards.js","images/credit-cards.png","images/paypal.svg","utils/cart.ts","pages/reseller/QuoteCheckout.tsx","cart.service.ts","pages/cart/CartCheckout.tsx","components/dashboard/DashboardNavbar.tsx","components/dashboard/DashboardSidebar.tsx","components/dashboard/DashboardLayout.tsx","icons/Plus.tsx","icons/Lock.tsx","components/Label.tsx","components/dashboard/QuestionListTable.tsx","pages/dashboard/AdmQuestionList.tsx","components/dashboard/CategoryListTable.tsx","pages/dashboard/AdmCategoryList.tsx","pages/dashboard/CategoryDetails.tsx","pages/dashboard/QuestionDetails.tsx","pages/dashboard/Settings.tsx","components/LoadingScreen.tsx","pages/profile/Checkout.tsx","pages/reseller/ResellerCheckout.tsx","routes.js","components/GlobalStyles.tsx","App.tsx","ScrollToTop.ts","reportWebVitals.ts","index.tsx","components/PropertyListItem.tsx","components/Title.tsx","settings.tsx","components/Scrollbar.tsx","components/Logo.tsx","reseller.service.ts","hooks/use-mounted.ts","components/ToastState.ts","AppSettings.ts","components/PropertyList.tsx"],"names":["Message","title","message","linkText","linkUrl","homeText","homeUrl","sx","backgroundColor","display","flexDirection","minHeight","maxWidth","py","elevation","p","justifyContent","alignItems","pb","to","size","variant","pt","minWidth","component","RouterLink","getInitials","name","replace","split","slice","map","v","toUpperCase","join","clientService","emptyProfile","email","firstName","lastName","company","address","city","state","country","zip","phone","fax","notify","getProfile","updateProfile","updatePassword","getOrders","getInvoice","getExtraSupport","deactivateLicense","getUpgrades","getUpgradeInfo","getCheckoutInfo","getDownloads","getDiscountInfo","generateToken","checkout","unsubscribe","clientId","a","http","path","result","data","method","body","mapOrderData","order","dateTime","Date","expiryDate","undefined","ok","orderId","mapExtraSupport","productId","productName","reason","accountService","getAccount","id","clientName","clientEmail","token","quantity","license","isUpgrade","upgradeFromProduct","params","formData","mapDownloads","download","mapDiscountToken","mapDiscountInfo","discountInfo","volumeDiscounts","discountTokens","eligibleDiscount","mapGenerateTokenResponse","response","tokens","Search","createSvgIcon","xmlns","viewBox","fill","fillRule","d","clipRule","getBody","config","file","FormData","key","append","String","JSON","stringify","getContentType","headers","contentType","request","Request","startsWith","webAPIUrl","authHeader","account","set","jwtToken","fetch","status","json","logout","console","error","url","UserRole","login","item","localStorage","getItem","parse","checkEmail","addClientProfile","verifyEmail","register","forgotPassword","setAccount","setItem","removeAccount","removeItem","parseJwt","base64","jsonPayload","decodeURIComponent","window","atob","c","charCodeAt","toString","getRole","roleAsString","Admin","Reseller","Client","password","Id","Email","FirstName","LastName","role","initialQuestionState","loading","categories","category","recentlyAdded","browsed","searched","filtered","viewing","GETTING_CATEGORIES","gettingCategoriesAction","type","GOT_CATEGORIES","gotCategoriesAction","GETTING_CATEGORY","GOT_CATEGORY","GETTING_RECENTLY_ADDED","GOT_RECENTLY_ADDED","gotRecentlyAddedAction","questions","GETTING_BROWSED","GOT_BROWSED","gotBrowsedAction","SEARCHING_QUESTIONS","SEARCHED_QUESTIONS","searchedQuestionsAction","FILTERING_QUESTIONS","FILTERED_QUESTIONS","filteredQuestionsAction","GETTING_QUESTION","GOT_QUESTION","gotQuestionAction","question","initialAccountState","user","GETTING_ACCOUNT","GOT_ACCOUNT","rootReducer","combineReducers","action","useStyles","makeStyles","theme","createStyles","homeLink","textDecoration","MainNavbar","onSidebarMobileOpen","showMenu","customTitle","classes","navigate","useNavigate","AppBar","color","Toolbar","Hidden","mdUp","IconButton","onClick","fontSize","className","Stack","direction","spacing","Logo","Typography","caretColor","whiteSpace","lineHeight","fontWeight","xs","md","Box","flexGrow","mdDown","Button","marginLeft","open","Divider","orientation","height","mx","startIcon","MainSidebar","onMobileClose","openMobile","location","useLocation","useEffect","pathname","Drawer","anchor","onClose","PaperProps","width","pl","pr","baseThemeOptions","components","MuiTableHead","styleOverrides","root","borderBottom","letterSpacing","textTransform","paddingTop","paddingBottom","MuiLinearProgress","borderRadius","overflow","MuiCardHeader","defaultProps","titleTypographyProps","subheaderTypographyProps","typography","subtitle2","h4","lightThemeOptions","palette","background","default","paper","primary","main","contrastText","secondary","success","neutral","100","200","300","400","500","600","700","800","900","darkThemeOptions","active","hover","selected","disabledBackground","disabled","divider","light","dark","info","mode","text","warning","shadows","footerStyle","Footer","fontFamily","padding","Container","Grid","container","sm","css","settings","phone1","phone2","hours","href","socials","facebook","twitter","youtube","line","idx","year","MainLayoutRoot","experimentalStyled","MainLayout","children","useState","isSidebarMobileOpen","setIsSidebarMobileOpen","PublicLayoutRoot","PublicLayout","ProfileNavbar","isReseller","useTheme","lgUp","lgDown","Avatar","mr","bgcolor","ChevronDown","ChevronRight","NavItem","props","depth","icon","openProp","other","setOpen","paddingLeft","ListItem","disableGutters","endIcon","prevOpen","textAlign","Collapse","in","renderNavItems","items","List","disablePadding","reduce","acc","reduceChildRoutes","exactMatch","matchPath","end","partialMatch","push","NavSection","subheader","ListSubheader","disableSticky","clientSections","resellerSections","ProfileSidebar","sections","content","Scrollbar","options","suppressScrollX","section","mt","lg","top","ProfileLayoutRoot","ProfileLayoutWrapper","flex","breakpoints","up","ProfileLayoutContainer","ProfileLayoutContent","position","WebkitOverflowScrolling","ProfileLayout","getCategories","getCategoriesWithCounters","getCategory","categoryId","postCategory","putCategory","deleteCategory","mapQuestionData","updated","getRecentQuestions","getCategoryQuestions","getQuestion","questionId","getQuestionForEdit","searchQuestions","query","getQuestionsWithFilter","published","archived","search","postQuestion","putQuestion","deleteQuestion","uploadAttachment","responseData","axios","post","onUploadProgress","progress","then","catch","log","gray2","Question","showCategory","showLabels","labels","trim","length","label","Chip","categoryName","toLocaleDateString","toLocaleTimeString","QuestionList","CategoryCard","Card","CardActionArea","Link","CardMedia","alt","src","margin","CardContent","gutterBottom","align","description","CategoryList","SearchButton","useForm","handleSubmit","control","useSearchParams","get","Paper","onSubmit","defaultValue","rules","required","render","field","onChange","value","fieldState","TextField","helperText","Home","dispatch","useDispatch","useSelector","doGetCategories","doGetRecentQuestions","Title","backgroundImage","searchBackground","backgroundPosition","backgroundSize","link","cursor","marginRight","Category","useParams","parseInt","filter","fetchQuestions","fetchedQuestions","fetchCategories","fetchedCategories","Breadcrumbs","aria-label","foundResults","doSearch","foundQuestion","doGetQuestion","Number","dangerouslySetInnerHTML","__html","clearNumber","formatCreditCardNumber","nextValue","issuer","Payment","fns","cardType","clearValue","formatCVC","cardNumber","maxLength","formatExpirationDate","prevValue","month","currYear","getFullYear","usaStatesAndTerritories","long","short","canadaProvinces","checkZip","test","shortProvinceOrStateName","longName","province","CountryNameToCode","tabs","PaypalButton","styled","PaypalImg","backgroundRepeat","translateCardType","QuoteCheckout","useMediaQuery","down","isMounted","useMounted","currentTab","setCurrentTab","setInfo","memo","setMemo","isAnnualSupport","setIsAnnualSupport","openDialog","setOpenDialog","dialogTitle","setDialogTitle","openBlacklistedDialog","setOpenBlacklistedDialog","openMonerisDialog","setOpenMonerisDialog","dialogMessage","setDialogMessage","dialogFollowLink","setDialogFollowLink","defaultToastState","toastState","setToastState","phone_a","phone_b","phone_c","paypalData","setPaypalData","refPaypalSubmitButton","useRef","handleSubmitPayPal","setCardNumber","expiry","setExpiry","cvc","setCvc","focused","setFocused","setIssuer","inProgress","setInProgress","loadError","setLoadError","loadData","useCallback","resellerService","getQuoteCheckoutInfo","billingFax","handleInputFocus","target","handleInputChange","order_id","bill_first_name","billingFirstName","bill_last_name","billingLastName","bill_company","billingCompany","bill_address_one","billingAddress","bill_city","billingCity","bill_state_or_province","billingState","bill_country","billingCountry","bill_postal_code","billingZip","bill_email","billingEmail","bill_phone","billingPhone","bill_fax","bill_po","credit_card_brand","credit_card_number","replaceAll","expire_month","substr","expire_year","cvv","bill_amount","total","discount_amount","discount","bill_gst","gst","bill_pst","pst","comments","forEach","licenseId","qty","amount","triggerPaypalSubmit","current","click","onSubmitPaypal","substring","updatedPaypalData","handleCloseSnackbar","event","Dialog","aria-labelledby","aria-describedby","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","Snackbar","autoHideDuration","anchorOrigin","vertical","horizontal","Alert","severity","CardHeader","Table","TableHead","TableRow","TableCell","TableBody","product","licenseName","numeral","price","format","style","tax","Tabs","indicatorColor","scrollButtons","textColor","tab","Tab","mb","px","PropertyList","PropertyListItem","shippingFirstName","shippingLastName","shippingCompany","shippingAddress","shippingCity","shippingState","shippingZip","shippingCountry","shippingPhone","shippingEmail","onFocus","creditCards","acceptedCards","number","callback","isValid","columnSpacing","fullWidth","m","paypalProductName","paypalAmount","hidden","ref","cartService","getProduct","getDiscount","getPaypalInfo","isBlackListed","pid","lic","subtotal","discountCode","products","PromoCard","PromoLink","PromoDialogLink","PromoTitle","div","PromoSubtitle","PromoProduct","PromoName","h3","PromoDescr","PromoMore","VertDivider","CartCheckout","openInvoiceDialog","setOpenInvoiceDialog","openPaypalDialog","setOpenPaypalDialog","openPromoDialog","setOpenPromoDialog","acceptedTerms","setAcceptedTerms","invoiceDisabled","setInvoiceDisabled","failMessage","setFailMessage","searchParams","productInfo","setProductInfo","setProducts","upgraded","setUpgraded","setTotal","setSubtotal","setPid","setDiscount","mainDiscount","setMainDiscount","setDiscountCode","reseller","setReseller","taxes","setTaxes","setGst","setPst","paypalInfo","setPaypalInfo","billing","countries","setCountries","setCountry","canadaProvince","setCanadaProvince","usaState","setUsaState","gotoHome","setGotoHome","watch","paypalWatch","registerForm1","handleSubmitForm1","errorsForm1","formState","errors","onPromoInfoClick","showError","onSubmitDiscountForm","fetchedDiscount","resellerId","calcTax","calcTotal","paypalTag","setPaypalTag","paypalName","setPaypalName","setPaypalAmount","refSubmitButtom","isNaN","fetchedProductInfo","getCountries","fetchedCountries","newProducts","calculatedSupport","str","prefix","supportQty","supportPrice","promoQty","handleSupportChange","supportIdx","findIndex","newSubtotal","triggerSubmit","fetchedPaypalInfo","exchangeRate","ipAddress","productShort","toFixed","cartStr","itemName","tag","handleUpgrade","mainProduct","promoDiscount","promoProduct","promoProductId","promoProductName","promoLicenseId","promoLicenseName","promoPrice","promoAmount","onSubmitInvoice","onSubmitCreditCard","isInvoice","discount_code","handleCloseDialog","beforeTaxes","newCountry","newProvince","totalTax","_gst","_pst","parseFloat","includedInDataStudio","my","promoSavings","fontStyle","rel","Checkbox","checked","FormControl","Select","MenuItem","index","alignContent","visibility","showPromo","areaProduct","pattern","select","code","newProv","prov","nextOrderId","DashboardNavbar","DashboardSidebar","DashboardLayoutRoot","DashboardLayoutWrapper","DashboardLayoutContainer","DashboardLayoutContent","DashboardLayout","Plus","Lock","LabelRoot","styleprops","shape","flexShrink","pxToRem","fontWeightMedium","paddingRight","Label","styleProps","getStatusLabel","draft","QuestionListTable","selectedQuestions","setSelectedQuestions","page","setPage","limit","setLimit","setQuery","drafts","filters","setFilters","filteredQuestions","toLowerCase","matches","containsQuery","includes","isPublished","isArchived","applyFilters","paginatedQuestions","applyPagination","selectedSomeQuestions","selectedAllQuestions","updatedFilters","flexWrap","InputProps","startAdornment","InputAdornment","placeholder","indeterminate","isQuestionSelected","prevSelected","isPublic","TablePagination","count","onPageChange","newPage","onRowsPerPageChange","rowsPerPage","rowsPerPageOptions","AdmQuestionList","doGetQuestions","CategoryListTable","selectedCategories","setSelectedCategories","paginatedCategories","selectedSomeCategories","selectedAllCategories","isCategorySelected","questionCount","AdmCategoryList","setCategories","cancelled","CategoryDetails","setCategory","fetchedCategory","doGetCategory","handleDelete","xl","QuestionDetails","setQuestion","setUpdated","editorRef","attachments","setAttachments","fetchedQuestion","isPromoted","submitHandler","getContent","userId","attachmentsToAdd","i","add","hiddenFileInput","React","onInit","evt","editor","apiKey","tinymceKey","initialValue","init","menubar","plugins","toolbar","onEditorChange","FormControlLabel","Switch","defaultChecked","InputLabel","htmlFor","attach","underline","attachmentsUrl","fileName","files","attachment","attachmentId","remove","doUpload","Settings","LoadingScreen","NProgress","start","done","Checkout","pid_from","client_id","product_id","product_amount","subtotalAfterDiscount","invoice","ResellerCheckout","cart","original_order","every","element","po","shipping","reseller_id","Loadable","Component","fallback","Login","lazy","CreateAccount","ForgotPassword","Register","Orders","Profile","Upgrades","Discounts","Support","Invoice","SoftwareDownload","AddSupport","Deactivate","Upgrade","Unsubscribe","Unsubscribed","ResellerProfile","ResellerOrders","ResellerNewOrder","SubmitRequest","AuthorizationRequired","NotFound","ServerError","routes","html","GlobalStyles","App","useRoutes","createMuiTheme","responsiveFontSizes","createTheme","StyledEngineProvider","injectFirst","ThemeProvider","ScrollToTop","scrollTo","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","store","createStore","ReactDOM","LocalizationProvider","dateAdapter","AdapterDateFns","document","getElementById","disableTypography","supportEmail","mapUrl","website","domainName","secureWebOrderUrl","hstNumber","forwardRef","navigator","userAgent","overflowX","resellerEmail","getOrdersCount","getProducts","getProductPrice","getExtraSupportInfo","profile","mapResellerOrder","from","prevDate","prevOrder","rows","toISOString","server"],"mappings":"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","file":"static/js/main.f562c7a7.chunk.js","sourcesContent":["import { FC } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { Box, Card, CardContent, Container, Typography, Link } from '@mui/material';\r\nimport { Logo } from '../components/Logo';\r\nimport { Title } from '../components/Title';\r\n\r\ninterface MessageProps {\r\n    title: string;\r\n    message: string;\r\n    linkText?: string;\r\n    linkUrl?: string;\r\n    homeText?: string;\r\n    homeUrl?: string;\r\n}\r\n\r\nconst Message: FC<MessageProps> = ({ title, message, linkText, linkUrl, homeText, homeUrl }) => {\r\n    if (!homeText) {\r\n        homeText = 'Home';\r\n    }\r\n    if (!homeUrl) {\r\n        homeUrl = '/';\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Title title={title} />\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    display: 'flex',\r\n                    flexDirection: 'column',\r\n                    minHeight: '100vh',\r\n                }}\r\n            >\r\n                <Container maxWidth=\"sm\" sx={{ py: '60px' }}>\r\n                    <Card elevation={6} sx={{ p: 4 }}>\r\n                        <CardContent\r\n                            sx={{\r\n                                display: 'flex',\r\n                                flexDirection: 'column',\r\n                                p: 4,\r\n                            }}\r\n                        >\r\n                            <Box\r\n                                sx={{\r\n                                    display: 'flex',\r\n                                    justifyContent: 'center',\r\n                                    alignItems: 'center',\r\n                                    flexDirection: 'column',\r\n                                }}\r\n                            >\r\n                                <Box sx={{ pb: 2 }}>\r\n                                    <RouterLink to=\"/\">\r\n                                        <Logo size={64} />\r\n                                    </RouterLink>\r\n                                </Box>\r\n                                <Typography variant=\"h4\">{title}</Typography>\r\n                                <Typography sx={{ pt: 5 }}>{message}</Typography>\r\n                                <Box\r\n                                    sx={{\r\n                                        pt: 3,\r\n                                        display: 'flex',\r\n                                        justifyContent: 'space-evenly',\r\n                                        minWidth: '100%',\r\n                                    }}\r\n                                >\r\n                                    <Link component={RouterLink} to={homeUrl}>\r\n                                        {homeText}\r\n                                    </Link>\r\n                                    {linkText && (\r\n                                        <Link component={RouterLink} to={linkUrl}>\r\n                                            {linkText}\r\n                                        </Link>\r\n                                    )}\r\n                                </Box>\r\n                            </Box>\r\n                        </CardContent>\r\n                    </Card>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\nexport default Message;\r\n","export const getInitials = (name = ''): string =>\r\n    name\r\n        .replace(/\\s+/, ' ')\r\n        .split(' ')\r\n        .slice(0, 2)\r\n        .map((v) => v && v[0].toUpperCase())\r\n        .join('');\r\n","import { http } from './http';\r\nimport type { HttpResponse } from './http';\r\nimport type { ProfileData, UnsubscribeRequest } from './types/profile';\r\nimport type { Invoice } from './types/invoice';\r\nimport type { ExtraSupport, ExtraSupportResponse, DeactivateRequest } from './types/order';\r\nimport type { Upgrade, ProductUpgradeInfo } from './types/upgrade';\r\nimport type { CheckoutInfoResponse, CheckoutRequest, CheckoutResponse } from './types/checkout';\r\nimport type { DownloadResponse, Download } from './types/download';\r\nimport type {\r\n    DiscountInfo,\r\n    DiscountInfoResponse,\r\n    DiscountToken,\r\n    DiscountTokenResponse,\r\n    GenerateTokenResponse,\r\n    GenerateTokenInfo,\r\n} from './types/discount';\r\nimport { accountService } from './account.service';\r\n\r\nexport const clientService = {\r\n    emptyProfile,\r\n    getProfile,\r\n    updateProfile,\r\n    updatePassword,\r\n    getOrders,\r\n    getInvoice,\r\n    getExtraSupport,\r\n    deactivateLicense,\r\n    getUpgrades,\r\n    getUpgradeInfo,\r\n    getCheckoutInfo,\r\n    getDownloads,\r\n    getDiscountInfo,\r\n    generateToken,\r\n    checkout,\r\n    unsubscribe,\r\n};\r\n\r\n// const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay));\r\n\r\nfunction emptyProfile(): ProfileData {\r\n    return {\r\n        email: '',\r\n        firstName: '',\r\n        lastName: '',\r\n        company: '',\r\n        address: '',\r\n        city: '',\r\n        state: '',\r\n        country: '',\r\n        zip: '',\r\n        phone: '',\r\n        fax: '',\r\n        notify: false,\r\n    };\r\n}\r\n\r\nasync function getProfile(clientId: number): Promise<HttpResponse<ProfileData>> {\r\n    const result = await http<ProfileData>({\r\n        path: `/clients/${clientId}/profile`,\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function updateProfile(clientId: number, data: ProfileData): Promise<HttpResponse<any>> {\r\n    const result = await http<any, ProfileData>({\r\n        path: `/clients/${clientId}/profile`,\r\n        method: 'PUT',\r\n        body: data,\r\n    });\r\n    return result;\r\n}\r\n\r\nexport interface UpdatePasswordRequest {\r\n    oldPassword: string;\r\n    newPassword: string;\r\n}\r\n\r\nasync function updatePassword(clientId: number, data: UpdatePasswordRequest): Promise<HttpResponse<any>> {\r\n    const result = await http<any, UpdatePasswordRequest>({\r\n        path: `/clients/${clientId}/password`,\r\n        method: 'POST',\r\n        body: data,\r\n    });\r\n    return result;\r\n}\r\n\r\ninterface OrderDataResponse {\r\n    orderId: string;\r\n    dateTime: string;\r\n    type: string;\r\n    amount: number;\r\n    amountCAD: number;\r\n    refundStatus: string;\r\n    productName: string;\r\n    product: string;\r\n    curVer: string;\r\n    productId: number;\r\n    expiryDate: string;\r\n    lifetimeSupport: boolean;\r\n}\r\n\r\nexport interface OrderData {\r\n    orderId: string;\r\n    dateTime: Date;\r\n    type: string;\r\n    amount: number;\r\n    amountCAD: number;\r\n    refundStatus: string;\r\n    productName: string;\r\n    product: string;\r\n    curVer: string;\r\n    productId: number;\r\n    expiryDate?: Date;\r\n    lifetimeSupport: boolean;\r\n}\r\n\r\nconst mapOrderData = (order: OrderDataResponse): OrderData => ({\r\n    ...order,\r\n    dateTime: new Date(order.dateTime),\r\n    expiryDate: order['expiryDate'] === undefined ? null : new Date(order.expiryDate),\r\n});\r\n\r\nasync function getOrders(clientId: number): Promise<HttpResponse<OrderData[]>> {\r\n    const result = await http<OrderDataResponse[]>({\r\n        path: `/clients/${clientId}/orders`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return { ok: result.ok, body: result.body.map(mapOrderData) };\r\n    } else {\r\n        return { ok: false, message: result.message, body: null };\r\n    }\r\n}\r\n\r\nasync function getInvoice(orderId: string): Promise<Invoice | null> {\r\n    const result = await http<Invoice>({\r\n        path: `/clients/invoices/${orderId}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nconst mapExtraSupport = (data: ExtraSupportResponse): ExtraSupport => ({\r\n    ...data,\r\n    dateTime: new Date(data.dateTime),\r\n    expiryDate: new Date(data.expiryDate),\r\n});\r\n\r\nasync function getExtraSupport(orderId: string): Promise<HttpResponse<ExtraSupport>> {\r\n    const result = await http<ExtraSupportResponse>({\r\n        path: `/clients/extra-support/${orderId}`,\r\n    });\r\n\r\n    if (result.ok && result.body) {\r\n        return { ok: result.ok, message: result.message, body: mapExtraSupport(result.body) };\r\n    } else {\r\n        return { ok: false, message: result.message, body: null };\r\n    }\r\n}\r\n\r\nasync function deactivateLicense(\r\n    orderId: string,\r\n    productId: number,\r\n    productName: string,\r\n    reason: string\r\n): Promise<boolean> {\r\n    const result = await http<any, DeactivateRequest>({\r\n        path: `/clients/${accountService.getAccount().id}/deactivate`,\r\n        method: 'POST',\r\n        body: {\r\n            clientName: accountService.getAccount().name,\r\n            clientEmail: accountService.getAccount().email,\r\n            orderId: orderId,\r\n            productId: productId,\r\n            productName: productName,\r\n            reason: reason,\r\n        },\r\n    });\r\n    return result.ok;\r\n}\r\n\r\nasync function unsubscribe(email: string): Promise<HttpResponse<any>> {\r\n    const result = await http<any, UnsubscribeRequest>({\r\n        path: `/clients/unsubscribe`,\r\n        method: 'POST',\r\n        body: {\r\n            email: email,\r\n        },\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function getUpgrades(): Promise<Upgrade[]> {\r\n    const result = await http<Upgrade[]>({\r\n        path: `/clients/${accountService.getAccount().id}/upgrades`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n}\r\n\r\nasync function getUpgradeInfo(token: string): Promise<HttpResponse<ProductUpgradeInfo>> {\r\n    const result = await http<ProductUpgradeInfo>({\r\n        path: `/clients/upgrade/${token}`,\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function getCheckoutInfo(\r\n    productId: number,\r\n    quantity: number,\r\n    license: number,\r\n    orderId: number,\r\n    isUpgrade: boolean,\r\n    upgradeFromProduct: number\r\n): Promise<HttpResponse<CheckoutInfoResponse>> {\r\n    const result = await http<CheckoutInfoResponse>({\r\n        path: `/clients/checkout?productId=${productId}&quantity=${quantity}&license=${license}&orderId=${orderId}&isUpgrade=${isUpgrade}&upgradeFromProduct=${upgradeFromProduct}`,\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function checkout(params: CheckoutRequest): Promise<CheckoutResponse | null> {\r\n    const result = await http<CheckoutResponse, CheckoutRequest>({\r\n        path: 'https://secure.lsoft.net/OrderProcessBackend.aspx',\r\n        method: 'POST',\r\n        body: params,\r\n        formData: true,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nconst mapDownloads = (download: DownloadResponse): Download => ({\r\n    ...download,\r\n    dateTime: new Date(download.dateTime),\r\n});\r\n\r\nasync function getDownloads(orderId: string): Promise<HttpResponse<Download>> {\r\n    const result = await http<DownloadResponse>({\r\n        path: `/clients/downloads/${orderId}`,\r\n    });\r\n\r\n    if (result.ok && result.body) {\r\n        return { ok: result.ok, message: result.message, body: mapDownloads(result.body) };\r\n    } else {\r\n        return { ok: false, message: result.message, body: null };\r\n    }\r\n}\r\n\r\nconst mapDiscountToken = (token: DiscountTokenResponse): DiscountToken => ({\r\n    ...token,\r\n    dateTime: new Date(token.dateTime),\r\n});\r\n\r\nconst mapDiscountInfo = (discountInfo: DiscountInfoResponse): DiscountInfo => ({\r\n    volumeDiscounts: discountInfo.volumeDiscounts,\r\n    discountTokens: discountInfo.discountTokens.map(mapDiscountToken),\r\n    eligibleDiscount: discountInfo.eligibleDiscount,\r\n});\r\n\r\nasync function getDiscountInfo(): Promise<DiscountInfo | null> {\r\n    const result = await http<DiscountInfoResponse>({\r\n        path: `/clients/${accountService.getAccount().id}/discounts`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapDiscountInfo(result.body);\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nconst mapGenerateTokenResponse = (response: GenerateTokenResponse): GenerateTokenInfo => ({\r\n    ...response,\r\n    tokens: response.tokens.map(mapDiscountToken),\r\n});\r\n\r\nasync function generateToken(): Promise<GenerateTokenInfo | null> {\r\n    const result = await http<GenerateTokenResponse>({\r\n        path: `/clients/${accountService.getAccount().id}/discounts/generate`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapGenerateTokenResponse(result.body);\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n","import { createSvgIcon } from '@mui/material/utils';\r\n\r\nconst Search = createSvgIcon(\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n        <path\r\n            fillRule=\"evenodd\"\r\n            d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\r\n            clipRule=\"evenodd\"\r\n        />\r\n    </svg>,\r\n    'Search'\r\n);\r\n\r\nexport default Search;\r\n","import { webAPIUrl } from './AppSettings';\r\nimport { accountService } from './account.service';\r\n\r\nexport interface HttpRequest<REQB> {\r\n    path: string;\r\n    method?: string;\r\n    body?: REQB;\r\n    accessToken?: string;\r\n    file?: File;\r\n    authHeader?: any;\r\n    formData?: boolean;\r\n}\r\n\r\nexport interface HttpResponse<RESB> {\r\n    ok: boolean;\r\n    body?: RESB;\r\n    message?: string;\r\n}\r\n\r\nfunction getBody(config) {\r\n    if (config.file) {\r\n        return config.file;\r\n    } else if (config.formData) {\r\n        const formData = new FormData();\r\n        for (const key in config.body) {\r\n            formData.append(String(key), String(config.body[key]));\r\n        }\r\n        return formData;\r\n    } else if (config.body) {\r\n        return JSON.stringify(config.body);\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nfunction getContentType(config): string | null {\r\n    if (config.formData) {\r\n        return null;\r\n    }\r\n    if (config.file) {\r\n        return 'multipart/form-data';\r\n    } else {\r\n        return 'application/json';\r\n    }\r\n}\r\n\r\nexport const http = async <RESB, REQB = undefined>(config: HttpRequest<REQB>): Promise<HttpResponse<RESB>> => {\r\n    const headers = {};\r\n    const contentType = getContentType(config);\r\n    if (contentType) {\r\n        headers['Content-Type'] = contentType;\r\n    }\r\n\r\n    const request = new Request(config.path.startsWith('http') ? config.path : `${webAPIUrl}${config.path}`, {\r\n        method: config.method || 'GET',\r\n        headers: {\r\n            ...headers,\r\n            ...config.authHeader,\r\n        },\r\n        body: getBody(config),\r\n    });\r\n\r\n    var account = accountService.getAccount();\r\n    if (account) {\r\n        request.headers.set('authorization', `bearer ${account.jwtToken}`);\r\n    }\r\n\r\n    try {\r\n        const response = await fetch(request);\r\n        if (response.ok) {\r\n            if (response.status === 204) {\r\n                return { ok: response.ok };\r\n            } else {\r\n                const body = await response.json();\r\n                return { ok: response.ok, body };\r\n            }\r\n        } else {\r\n            if (response.status === 401 || response.status === 403) {\r\n                accountService.logout();\r\n                return { ok: false, message: 'Unauthorized' };\r\n            }\r\n            const body = await response.json();\r\n            console.error(`Error requesting ${request.method} ${request.url}`, body.message);\r\n            return { ok: response.ok, message: body.message };\r\n        }\r\n    } catch (e) {\r\n        return { ok: false, message: 'Connection error' };\r\n    }\r\n};\r\n\r\n// const logError = async (request: Request, response: Response) => {\r\n//     const contentType = response.headers.get('content-type');\r\n//     let body: any;\r\n//     if (contentType && contentType.indexOf('application/json') !== -1) {\r\n//         body = await response.json();\r\n//     } else {\r\n//         body = await response.text();\r\n//     }\r\n//     console.error(`Error requesting ${request.method} ${request.url}`, body);\r\n// };\r\n","import { http } from './http';\r\nimport type {\r\n    EmailCheckRequest,\r\n    EmailCheckResponse,\r\n    AddProfileRequest,\r\n    VerifyEmailResponse,\r\n    VerifyEmailRequest,\r\n    RegisterRequest,\r\n    ForgotPasswordRequest,\r\n    ForgotPasswordResponse,\r\n} from './types/account';\r\n\r\nexport const accountService = {\r\n    login,\r\n    logout,\r\n    getAccount,\r\n    checkEmail,\r\n    addClientProfile,\r\n    verifyEmail,\r\n    register,\r\n    forgotPassword,\r\n};\r\n\r\ninterface LoginRequest {\r\n    login: string;\r\n    password: string;\r\n}\r\n\r\nexport enum UserRole {\r\n    Client = 0,\r\n    Reseller = 1,\r\n    Admin = 2,\r\n}\r\n\r\nexport interface UserAccount {\r\n    id: number;\r\n    email: string;\r\n    name: string;\r\n    role: UserRole; // undefined for now\r\n    jwtToken: string;\r\n}\r\n\r\nlet account: UserAccount = null;\r\n\r\nfunction getAccount(): UserAccount | null {\r\n    // if account does not exist, try to get it from local storage\r\n    if (!account) {\r\n        const item = localStorage.getItem('account');\r\n        if (item) {\r\n            account = JSON.parse(item);\r\n        }\r\n    }\r\n    return account;\r\n}\r\n\r\nfunction setAccount(data: UserAccount) {\r\n    account = data;\r\n    localStorage.setItem('account', JSON.stringify(data));\r\n}\r\n\r\nfunction removeAccount() {\r\n    account = null;\r\n    localStorage.removeItem('account');\r\n}\r\n\r\nfunction parseJwt(token) {\r\n    var base64Url = token.split('.')[1];\r\n    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n    var jsonPayload = decodeURIComponent(\r\n        window\r\n            .atob(base64)\r\n            .split('')\r\n            .map(function (c) {\r\n                return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n            })\r\n            .join('')\r\n    );\r\n\r\n    return JSON.parse(jsonPayload);\r\n}\r\n\r\nfunction getRole(roleAsString: string): UserRole {\r\n    if (roleAsString === 'Admin') {\r\n        return UserRole.Admin;\r\n    } else if (roleAsString === 'Reseller') {\r\n        return UserRole.Reseller;\r\n    } else if (roleAsString === 'Client') {\r\n        return UserRole.Client;\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nasync function login(login: string, password: string): Promise<boolean> {\r\n    const result = await http<UserAccount, LoginRequest>({\r\n        path: '/accounts/authenticate',\r\n        method: 'POST',\r\n        body: { login, password },\r\n    });\r\n    if (result.ok) {\r\n        var jwtToken = parseJwt(result.body.jwtToken);\r\n        setAccount({\r\n            id: jwtToken.Id,\r\n            email: jwtToken.Email,\r\n            name: jwtToken.FirstName + ' ' + jwtToken.LastName,\r\n            role: getRole(jwtToken['http://schemas.microsoft.com/ws/2008/06/identity/claims/role']),\r\n            jwtToken: result.body.jwtToken,\r\n        });\r\n        // startRefreshTokenTimer();\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nasync function logout() {\r\n    // revoke token, stop refresh timer, publish null to user subscribers and redirect to login page\r\n    // await http({\r\n    //     path: '/accounts/revoke-token',\r\n    //     method: 'POST',\r\n    // });\r\n    // stopRefreshTokenTimer();\r\n    removeAccount();\r\n}\r\n\r\nasync function refreshToken() {\r\n    const result = await http({\r\n        path: '/accounts/refresh-token',\r\n        method: 'POST',\r\n    });\r\n    if (result.ok) {\r\n        // const user = result.body;\r\n\r\n        // account = user;\r\n        startRefreshTokenTimer();\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n// helper functions\r\n\r\nlet refreshTokenTimeout;\r\n\r\nfunction startRefreshTokenTimer() {\r\n    // parse json object from base64 encoded jwt token\r\n    const jwtToken = JSON.parse(atob(account.jwtToken.split('.')[1]));\r\n\r\n    // set a timeout to refresh the token a minute before it expires\r\n    const expires = new Date(jwtToken.exp * 1000);\r\n    const timeout = expires.getTime() - Date.now() - 60 * 1000;\r\n\r\n    // eslint-disable-next-line\r\n    refreshTokenTimeout = setTimeout(refreshToken, timeout);\r\n}\r\n\r\n// function stopRefreshTokenTimer() {\r\n//     clearTimeout(refreshTokenTimeout);\r\n// }\r\n\r\nasync function checkEmail(email: string): Promise<EmailCheckResponse | null> {\r\n    const result = await http<EmailCheckResponse, EmailCheckRequest>({\r\n        path: `/accounts/check-email`,\r\n        method: 'POST',\r\n        body: { email },\r\n    });\r\n\r\n    if (result.ok) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function addClientProfile(email: string): Promise<boolean> {\r\n    const result = await http<any, AddProfileRequest>({\r\n        path: `/accounts/add-profile`,\r\n        method: 'POST',\r\n        body: { email },\r\n    });\r\n    return result.ok;\r\n}\r\n\r\nasync function verifyEmail(token: string): Promise<string | undefined> {\r\n    const result = await http<VerifyEmailResponse, VerifyEmailRequest>({\r\n        path: '/accounts/verify-email',\r\n        method: 'POST',\r\n        body: { token },\r\n    });\r\n    if (result.ok) {\r\n        return result.body.email;\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nasync function register(data: RegisterRequest): Promise<boolean> {\r\n    const result = await http<any, RegisterRequest>({\r\n        path: `/accounts/register`,\r\n        method: 'POST',\r\n        body: data,\r\n    });\r\n    return result.ok;\r\n}\r\n\r\nasync function forgotPassword(email: string): Promise<ForgotPasswordResponse | null> {\r\n    const result = await http<ForgotPasswordResponse, ForgotPasswordRequest>({\r\n        path: `/accounts/forgot-password`,\r\n        method: 'POST',\r\n        body: { email },\r\n    });\r\n\r\n    if (result.ok) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n","import { Store, createStore, combineReducers } from 'redux';\r\nimport { QuestionData, CategoryData } from './data';\r\nimport { UserAccount } from './account.service';\r\n\r\ninterface QuestionState {\r\n    readonly loading: boolean;\r\n    readonly categories: CategoryData[];\r\n    readonly category: CategoryData | null;\r\n    readonly recentlyAdded: QuestionData[];\r\n    readonly browsed: QuestionData[];\r\n    readonly searched: QuestionData[];\r\n    readonly filtered: QuestionData[];\r\n    readonly viewing: QuestionData | null;\r\n}\r\n\r\nconst initialQuestionState: QuestionState = {\r\n    loading: false,\r\n    categories: [],\r\n    category: null,\r\n    recentlyAdded: [],\r\n    browsed: [],\r\n    searched: [],\r\n    filtered: [],\r\n    viewing: null,\r\n};\r\n\r\nexport const GETTING_CATEGORIES = 'GettingCategories';\r\nexport const gettingCategoriesAction = () =>\r\n    ({\r\n        type: GETTING_CATEGORIES,\r\n    } as const);\r\n\r\nexport const GOT_CATEGORIES = 'GotCategories';\r\nexport const gotCategoriesAction = (categories: CategoryData[]) =>\r\n    ({\r\n        type: GOT_CATEGORIES,\r\n        categories,\r\n    } as const);\r\n\r\nexport const GETTING_CATEGORY = 'GettingCategory';\r\nexport const gettingCategoryAction = () =>\r\n    ({\r\n        type: GETTING_CATEGORY,\r\n    } as const);\r\n\r\nexport const GOT_CATEGORY = 'GotCategory';\r\nexport const gotCategoryAction = (category: CategoryData | null) =>\r\n    ({\r\n        type: GOT_CATEGORY,\r\n        category,\r\n    } as const);\r\n\r\nexport const GETTING_RECENTLY_ADDED = 'GettingRecentlyAdded';\r\nexport const gettingRecentlyAddedAction = () =>\r\n    ({\r\n        type: GETTING_RECENTLY_ADDED,\r\n    } as const);\r\n\r\nexport const GOT_RECENTLY_ADDED = 'GotRecentlyAdded';\r\nexport const gotRecentlyAddedAction = (questions: QuestionData[]) =>\r\n    ({\r\n        type: GOT_RECENTLY_ADDED,\r\n        questions,\r\n    } as const);\r\n\r\nexport const GETTING_BROWSED = 'GettingBrowsed';\r\nexport const gettingBrowsedAction = () =>\r\n    ({\r\n        type: GETTING_BROWSED,\r\n    } as const);\r\n\r\nexport const GOT_BROWSED = 'GotBrowsed';\r\nexport const gotBrowsedAction = (questions: QuestionData[]) =>\r\n    ({\r\n        type: GOT_BROWSED,\r\n        questions,\r\n    } as const);\r\n\r\nexport const SEARCHING_QUESTIONS = 'SearchingQuestions';\r\nexport const searchingQuestionsAction = () => ({ type: SEARCHING_QUESTIONS } as const);\r\n\r\nexport const SEARCHED_QUESTIONS = 'SearchedQuestions';\r\nexport const searchedQuestionsAction = (questions: QuestionData[]) =>\r\n    ({\r\n        type: SEARCHED_QUESTIONS,\r\n        questions: questions,\r\n    } as const);\r\n\r\nexport const FILTERING_QUESTIONS = 'FilteringQuestions';\r\nexport const filteringQuestionsAction = () => ({ type: FILTERING_QUESTIONS } as const);\r\n\r\nexport const FILTERED_QUESTIONS = 'FilteredQuestions';\r\nexport const filteredQuestionsAction = (questions: QuestionData[]) =>\r\n    ({\r\n        type: FILTERED_QUESTIONS,\r\n        questions: questions,\r\n    } as const);\r\n\r\nexport const GETTING_QUESTION = 'GettingQuestion';\r\nexport const gettingQuestionAction = () => ({ type: GETTING_QUESTION } as const);\r\n\r\nexport const GOT_QUESTION = 'GotQuestion';\r\nexport const gotQuestionAction = (question: QuestionData | null) =>\r\n    ({\r\n        type: GOT_QUESTION,\r\n        question: question,\r\n    } as const);\r\n\r\ntype QuestionsActions =\r\n    | ReturnType<typeof gettingCategoriesAction>\r\n    | ReturnType<typeof gotCategoriesAction>\r\n    | ReturnType<typeof gettingCategoryAction>\r\n    | ReturnType<typeof gotCategoryAction>\r\n    | ReturnType<typeof gettingRecentlyAddedAction>\r\n    | ReturnType<typeof gotRecentlyAddedAction>\r\n    | ReturnType<typeof gettingBrowsedAction>\r\n    | ReturnType<typeof gotBrowsedAction>\r\n    | ReturnType<typeof searchingQuestionsAction>\r\n    | ReturnType<typeof searchedQuestionsAction>\r\n    | ReturnType<typeof filteringQuestionsAction>\r\n    | ReturnType<typeof filteredQuestionsAction>\r\n    | ReturnType<typeof gettingQuestionAction>\r\n    | ReturnType<typeof gotQuestionAction>\r\n    | ReturnType<typeof gettingAccountAction>\r\n    | ReturnType<typeof gotAccountAction>;\r\n\r\nconst questionsReducer = (state = initialQuestionState, action: QuestionsActions) => {\r\n    switch (action.type) {\r\n        case GETTING_CATEGORIES: {\r\n            return {\r\n                ...state,\r\n                categories: [],\r\n                loading: true,\r\n            };\r\n        }\r\n        case GOT_CATEGORIES: {\r\n            return {\r\n                ...state,\r\n                categories: action.categories,\r\n                loading: false,\r\n            };\r\n        }\r\n        case GETTING_CATEGORY: {\r\n            return {\r\n                ...state,\r\n                category: null,\r\n                loading: true,\r\n            };\r\n        }\r\n        case GOT_CATEGORY: {\r\n            return {\r\n                ...state,\r\n                category: action.category,\r\n                loading: false,\r\n            };\r\n        }\r\n        case GETTING_RECENTLY_ADDED: {\r\n            return {\r\n                ...state,\r\n                recentlyAdded: [],\r\n                loading: true,\r\n            };\r\n        }\r\n        case GOT_RECENTLY_ADDED: {\r\n            return {\r\n                ...state,\r\n                recentlyAdded: action.questions,\r\n                loading: false,\r\n            };\r\n        }\r\n        case GETTING_BROWSED: {\r\n            return {\r\n                ...state,\r\n                browsed: [],\r\n                loading: true,\r\n            };\r\n        }\r\n        case GOT_BROWSED: {\r\n            return {\r\n                ...state,\r\n                browsed: action.questions,\r\n                loading: false,\r\n            };\r\n        }\r\n        case SEARCHING_QUESTIONS: {\r\n            return {\r\n                ...state,\r\n                searched: [],\r\n                loading: true,\r\n            };\r\n        }\r\n        case SEARCHED_QUESTIONS: {\r\n            return {\r\n                ...state,\r\n                searched: action.questions,\r\n                loading: false,\r\n            };\r\n        }\r\n        case FILTERING_QUESTIONS: {\r\n            return {\r\n                ...state,\r\n                filtered: [],\r\n                loading: true,\r\n            };\r\n        }\r\n        case FILTERED_QUESTIONS: {\r\n            return {\r\n                ...state,\r\n                filtered: action.questions,\r\n                loading: false,\r\n            };\r\n        }\r\n        case GETTING_QUESTION: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                viewing: null,\r\n            };\r\n        }\r\n        case GOT_QUESTION: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                viewing: action.question,\r\n            };\r\n        }\r\n    }\r\n    return state;\r\n};\r\n\r\n////////////////////\r\n// account\r\n\r\ninterface AccountState {\r\n    readonly loading: boolean;\r\n    readonly user: UserAccount | null;\r\n}\r\n\r\nconst initialAccountState: AccountState = {\r\n    loading: false,\r\n    user: null,\r\n};\r\n\r\nexport const GETTING_ACCOUNT = 'GettingAccount';\r\nexport const gettingAccountAction = () => ({ type: GETTING_ACCOUNT } as const);\r\n\r\nexport const GOT_ACCOUNT = 'GotAccount';\r\nexport const gotAccountAction = (user: UserAccount | null) =>\r\n    ({\r\n        type: GOT_ACCOUNT,\r\n        user: user,\r\n    } as const);\r\n\r\ntype AccountActions = ReturnType<typeof gettingAccountAction> | ReturnType<typeof gotAccountAction>;\r\n\r\nconst accountReducer = (state = initialAccountState, action: AccountActions) => {\r\n    switch (action.type) {\r\n        case GETTING_ACCOUNT: {\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n                user: null,\r\n            };\r\n        }\r\n        case GOT_ACCOUNT: {\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                user: action.user,\r\n            };\r\n        }\r\n    }\r\n    return state;\r\n};\r\n\r\nexport interface AppState {\r\n    readonly questions: QuestionState;\r\n    readonly account: AccountState;\r\n}\r\n\r\nconst rootReducer = combineReducers<AppState>({ questions: questionsReducer, account: accountReducer });\r\nexport const configureStore = (): Store<AppState> => {\r\n    const store = createStore(rootReducer, undefined);\r\n    return store;\r\n};\r\n","import type { FC } from 'react';\r\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\r\nimport { AppBar, Box, Button, Divider, Hidden, IconButton, Toolbar, Typography, Stack } from '@mui/material';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport PersonIcon from '@mui/icons-material/Person';\r\nimport { Theme } from '@mui/material/styles';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport { Logo } from './Logo';\r\nimport { accountService, UserRole } from '../account.service';\r\n\r\ninterface MainNavbarProps {\r\n    onSidebarMobileOpen?: () => void;\r\n    showMenu: boolean;\r\n    customTitle?: string;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n    createStyles({\r\n        homeLink: {\r\n            textDecoration: 'none',\r\n        },\r\n    })\r\n);\r\n\r\nexport const MainNavbar: FC<MainNavbarProps> = ({ onSidebarMobileOpen, showMenu, customTitle }) => {\r\n    const classes = useStyles();\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n\r\n    const onSignIn = () => {\r\n        if (account) {\r\n            accountService.logout();\r\n            navigate('/');\r\n        } else {\r\n            navigate('/account/login');\r\n        }\r\n    };\r\n\r\n    const onProfile = () => {\r\n        if (account) {\r\n            switch (account.role) {\r\n                case UserRole.Reseller:\r\n                    navigate('/reseller/orders');\r\n                    break;\r\n                case UserRole.Admin:\r\n                    navigate('/kb/');\r\n                    break;\r\n                default:\r\n                    navigate('/client/orders');\r\n                    break;\r\n            }\r\n        } else {\r\n            window.open('https://lsoft.zendesk.com/hc/en-us/requests/new', '_blank');\r\n        }\r\n    };\r\n\r\n    return (\r\n        <AppBar\r\n            elevation={0}\r\n            sx={{\r\n                color: 'text.secondary',\r\n            }}\r\n        >\r\n            <Toolbar sx={{ minHeight: 64 }}>\r\n                {showMenu && (\r\n                    <Hidden mdUp>\r\n                        <IconButton sx={{ color: 'white' }} onClick={onSidebarMobileOpen} size=\"large\">\r\n                            <MenuIcon fontSize=\"small\" />\r\n                        </IconButton>\r\n                    </Hidden>\r\n                )}\r\n                <RouterLink to=\"/\" className={classes.homeLink}>\r\n                    <Stack direction=\"row\" spacing={1} sx={{ textDecoration: 'none' }}>\r\n                        <Logo />\r\n                        <Typography\r\n                            sx={{\r\n                                caretColor: 'rgba(0,0,0,0)',\r\n                                color: 'white',\r\n                                whiteSpace: 'nowrap',\r\n                                textDecoration: 'none',\r\n                                lineHeight: '40px',\r\n                            }}\r\n                            variant=\"h6\"\r\n                        >\r\n                            LSoft Technologies\r\n                        </Typography>\r\n                        <Typography\r\n                            id=\"page-title\"\r\n                            sx={{\r\n                                color: 'white',\r\n                                whiteSpace: 'nowrap',\r\n                                fontWeight: 100,\r\n                                lineHeight: '40px',\r\n                                display: { xs: 'none', md: 'block' },\r\n                            }}\r\n                            variant=\"h6\"\r\n                        >\r\n                            |&nbsp; {customTitle ? customTitle : 'Customer Support'}\r\n                        </Typography>\r\n                    </Stack>\r\n                </RouterLink>\r\n                <Box sx={{ flexGrow: 1 }} />\r\n                {showMenu && (\r\n                    <Hidden mdDown>\r\n                        <Button\r\n                            sx={{\r\n                                color: 'white',\r\n                                marginLeft: 1,\r\n                            }}\r\n                            onClick={onProfile}\r\n                        >\r\n                            {account ? (account.role === UserRole.Admin ? 'Dashboard' : 'Profile') : 'Submit request'}\r\n                        </Button>\r\n\r\n                        <Divider\r\n                            orientation=\"vertical\"\r\n                            sx={{\r\n                                height: 32,\r\n                                mx: 2,\r\n                                backgroundColor: 'white',\r\n                            }}\r\n                        />\r\n                        <Button\r\n                            sx={{\r\n                                color: 'white',\r\n                                marginLeft: 1,\r\n                            }}\r\n                            startIcon={<PersonIcon />}\r\n                            onClick={onSignIn}\r\n                        >\r\n                            {account ? 'Sign Out' : 'Sign In'}\r\n                        </Button>\r\n                    </Hidden>\r\n                )}\r\n            </Toolbar>\r\n        </AppBar>\r\n    );\r\n};\r\n","import { useEffect } from 'react';\r\nimport type { FC } from 'react';\r\nimport { Link as RouterLink, useLocation, useNavigate } from 'react-router-dom';\r\nimport { Button, Box, Drawer, Hidden } from '@mui/material';\r\nimport { Logo } from './Logo';\r\nimport { accountService, UserRole } from '../account.service';\r\n\r\ninterface MainSidebarProps {\r\n    onMobileClose: () => void;\r\n    openMobile: boolean;\r\n}\r\n\r\nexport const MainSidebar: FC<MainSidebarProps> = ({ onMobileClose, openMobile }) => {\r\n    const location = useLocation();\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n\r\n    useEffect(() => {\r\n        if (openMobile && onMobileClose) {\r\n            onMobileClose();\r\n        }\r\n        //READ: https://stackoverflow.com/questions/55840294/how-to-fix-missing-dependency-warning-when-using-useeffect-react-hook\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [location.pathname]);\r\n\r\n    const onSignIn = () => {\r\n        if (account) {\r\n            accountService.logout();\r\n            navigate('/');\r\n        } else {\r\n            navigate('/account/login');\r\n        }\r\n    };\r\n\r\n    const onProfile = () => {\r\n        if (account) {\r\n            switch (account.role) {\r\n                case UserRole.Reseller:\r\n                    navigate('/reseller/orders');\r\n                    break;\r\n                case UserRole.Admin:\r\n                    navigate('/kb/');\r\n                    break;\r\n                default:\r\n                    navigate('/client/orders');\r\n                    break;\r\n            }\r\n        } else {\r\n            window.open('https://lsoft.zendesk.com/hc/en-us/requests/new', '_blank');\r\n        }\r\n    };\r\n\r\n    return (\r\n        <Hidden mdUp>\r\n            <Drawer\r\n                anchor=\"left\"\r\n                onClose={onMobileClose}\r\n                open={openMobile}\r\n                variant=\"temporary\"\r\n                PaperProps={{\r\n                    sx: {\r\n                        backgroundColor: 'background.default',\r\n                        width: 256,\r\n                    },\r\n                }}\r\n            >\r\n                <Box\r\n                    sx={{\r\n                        display: 'flex',\r\n                        flexDirection: 'column',\r\n                        height: '100%',\r\n                        p: 2,\r\n                    }}\r\n                >\r\n                    <Box\r\n                        sx={{\r\n                            display: 'flex',\r\n                            justifyContent: 'center',\r\n                            p: 2,\r\n                        }}\r\n                    >\r\n                        <RouterLink to=\"/\">\r\n                            <Logo />\r\n                        </RouterLink>\r\n                    </Box>\r\n\r\n                    <Button\r\n                        sx={{\r\n                            justifyContent: 'flex-start',\r\n                            pl: `16px`,\r\n                            pr: '8px',\r\n                            py: '12px',\r\n                            width: '100%',\r\n                        }}\r\n                        variant=\"text\"\r\n                        onClick={onProfile}\r\n                    >\r\n                        {account ? (account.role === UserRole.Admin ? 'Dashboard' : 'Profile') : 'Submit request'}\r\n                    </Button>\r\n\r\n                    <Button\r\n                        variant=\"text\"\r\n                        sx={{\r\n                            justifyContent: 'flex-start',\r\n                            pl: `16px`,\r\n                            pr: '8px',\r\n                            py: '12px',\r\n                            width: '100%',\r\n                        }}\r\n                        onClick={onSignIn}\r\n                    >\r\n                        {account ? 'Sign Out' : 'Sign In'}\r\n                    </Button>\r\n                </Box>\r\n            </Drawer>\r\n        </Hidden>\r\n    );\r\n};\r\n","import { ThemeOptions } from '@mui/material';\r\n\r\nexport const baseThemeOptions: ThemeOptions = {\r\n    components: {\r\n        MuiTableHead: {\r\n            styleOverrides: {\r\n                root: {\r\n                    borderBottom: 'none',\r\n                    '& .MuiTableCell-root': {\r\n                        borderBottom: 'none',\r\n                        fontSize: '12px',\r\n                        fontWeight: 600,\r\n                        lineHeight: 1,\r\n                        letterSpacing: 0.5,\r\n                        textTransform: 'uppercase',\r\n                    },\r\n                    '& .MuiTableCell-paddingCheckbox': {\r\n                        paddingTop: 4,\r\n                        paddingBottom: 4,\r\n                    },\r\n                },\r\n            },\r\n        },\r\n        MuiLinearProgress: {\r\n            styleOverrides: {\r\n                root: {\r\n                    borderRadius: 3,\r\n                    overflow: 'hidden',\r\n                },\r\n            },\r\n        },\r\n        MuiCardHeader: {\r\n            defaultProps: {\r\n                titleTypographyProps: {\r\n                    variant: 'h6',\r\n                },\r\n                subheaderTypographyProps: {\r\n                    variant: 'body2',\r\n                },\r\n            },\r\n        },\r\n    },\r\n    typography: {\r\n        subtitle2: {\r\n            fontSize: '0.875rem',\r\n            fontWeight: 500,\r\n            lineHeight: 1.57,\r\n        },\r\n        h4: {\r\n            fontWeight: 700,\r\n            fontSize: '2rem',\r\n            lineHeight: 1.375,\r\n        },\r\n    },\r\n};\r\n","import { ThemeOptions } from '@mui/material';\r\n\r\n// Colors\r\n\r\nconst neutral = {\r\n    100: '#F3F4F6',\r\n    200: '#E5E7EB',\r\n    300: '#D1D5DB',\r\n    400: '#9CA3AF',\r\n    500: '#6B7280',\r\n    600: '#4B5563',\r\n    700: '#374151',\r\n    800: '#1F2937',\r\n    900: '#111827',\r\n};\r\n\r\nconst background = {\r\n    default: '#F4F6F8',\r\n    paper: '#FFFFFF',\r\n};\r\n\r\n// const divider = '#E6E8F0';\r\n\r\nconst primary = {\r\n    main: '#1875d1',\r\n    contrastText: '#FFFFFF',\r\n};\r\n\r\nconst secondary = {\r\n    main: '#f50057',\r\n    contrastText: '#FFFFFF',\r\n};\r\n\r\n// const success = {\r\n//     main: '#4caf50',\r\n//     contrastText: '#FFFFFF',\r\n// };\r\n\r\nconst success = {\r\n    main: '#8bc34a',\r\n    contrastText: '#FFFFFF',\r\n};\r\n\r\n// const info = {\r\n//     main: '#2196F3',\r\n//     light: '#64B6F7',\r\n//     dark: '#0B79D0',\r\n//     contrastText: '#FFFFFF',\r\n// };\r\n\r\n// const warning = {\r\n//     main: '#ff9800',\r\n//     contrastText: '#FFFFFF',\r\n// };\r\n\r\nconst error = {\r\n    main: '#f44336',\r\n    contrastText: '#FFFFFF',\r\n};\r\n\r\n// const text = {\r\n//     primary: '#121828',\r\n//     secondary: '#65748B',\r\n//     disabled: 'rgba(55, 65, 81, 0.48)',\r\n// };\r\n\r\nexport const lightThemeOptions: ThemeOptions = {\r\n    components: {\r\n        MuiTableHead: {\r\n            styleOverrides: {\r\n                root: {\r\n                    backgroundColor: neutral[100],\r\n                    '.MuiTableCell-root': {\r\n                        color: neutral[700],\r\n                    },\r\n                },\r\n            },\r\n        },\r\n    },\r\n\r\n    palette: { background, primary, secondary, success, error },\r\n};\r\n","import { ThemeOptions } from '@mui/material';\r\n\r\n// Colors\r\n\r\nconst neutral = {\r\n    100: '#F3F4F6',\r\n    200: '#E5E7EB',\r\n    300: '#D1D5DB',\r\n    400: '#9CA3AF',\r\n    500: '#6B7280',\r\n    600: '#4B5563',\r\n    700: '#374151',\r\n    800: '#1F2937',\r\n    900: '#111827',\r\n};\r\n\r\nconst background = {\r\n    default: '#0B0F19',\r\n    paper: neutral[900],\r\n};\r\n\r\nconst divider = '#2D3748';\r\n\r\nconst primary = {\r\n    main: '#7582EB',\r\n    light: '#909BEF',\r\n    dark: '#515BA4',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst secondary = {\r\n    main: '#10B981',\r\n    light: '#3FC79A',\r\n    dark: '#0B815A',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst success = {\r\n    main: '#14B8A6',\r\n    light: '#43C6B7',\r\n    dark: '#0E8074',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst info = {\r\n    main: '#2196F3',\r\n    light: '#64B6F7',\r\n    dark: '#0B79D0',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst warning = {\r\n    main: '#FFB020',\r\n    light: '#FFBF4C',\r\n    dark: '#B27B16',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst error = {\r\n    main: '#D14343',\r\n    light: '#DA6868',\r\n    dark: '#922E2E',\r\n    contrastText: neutral[900],\r\n};\r\n\r\nconst text = {\r\n    primary: '#EDF2F7',\r\n    secondary: '#A0AEC0',\r\n    disabled: 'rgba(255, 255, 255, 0.48)',\r\n};\r\n\r\nexport const darkThemeOptions: ThemeOptions = {\r\n    components: {\r\n        MuiTableHead: {\r\n            styleOverrides: {\r\n                root: {\r\n                    backgroundColor: neutral[800],\r\n                    '.MuiTableCell-root': {\r\n                        color: neutral[300],\r\n                    },\r\n                },\r\n            },\r\n        },\r\n    },\r\n\r\n    palette: {\r\n        action: {\r\n            active: neutral[400],\r\n            hover: 'rgba(255, 255, 255, 0.04)',\r\n            selected: 'rgba(255, 255, 255, 0.08)',\r\n            disabledBackground: 'rgba(255, 255, 255, 0.12)',\r\n            disabled: 'rgba(255, 255, 255, 0.26)',\r\n        },\r\n        background,\r\n        divider,\r\n        error,\r\n        info,\r\n        mode: 'dark',\r\n        neutral,\r\n        primary,\r\n        secondary,\r\n        success,\r\n        text,\r\n        warning,\r\n    },\r\n\r\n    shadows: [\r\n        'none',\r\n        '0px 1px 2px rgba(0, 0, 0, 0.24)',\r\n        '0px 1px 2px rgba(0, 0, 0, 0.24)',\r\n        '0px 1px 4px rgba(0, 0, 0, 0.24)',\r\n        '0px 1px 5px rgba(0, 0, 0, 0.24)',\r\n        '0px 1px 6px rgba(0, 0, 0, 0.24)',\r\n        '0px 2px 6px rgba(0, 0, 0, 0.24)',\r\n        '0px 3px 6px rgba(0, 0, 0, 0.24)',\r\n        '0px 4px 6px rgba(0, 0, 0, 0.24)',\r\n        '0px 5px 12px rgba(0, 0, 0, 0.24)',\r\n        '0px 5px 14px rgba(0, 0, 0, 0.24)',\r\n        '0px 5px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 6px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 7px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 8px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 9px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 10px 15px rgba(0, 0, 0, 0.24)',\r\n        '0px 12px 22px -8px rgba(0, 0, 0, 0.24)',\r\n        '0px 13px 22px -8px rgba(0, 0, 0, 0.24)',\r\n        '0px 14px 24px -8px rgba(0, 0, 0, 0.24)',\r\n        '0px 20px 25px rgba(0, 0, 0, 0.24)',\r\n        '0px 25px 50px rgba(0, 0, 0, 0.24)',\r\n        '0px 25px 50px rgba(0, 0, 0, 0.24)',\r\n        '0px 25px 50px rgba(0, 0, 0, 0.24)',\r\n        '0px 25px 50px rgba(0, 0, 0, 0.24)',\r\n    ],\r\n};\r\n","import type { Theme } from '@mui/material';\r\nimport { createTheme as createMuiTheme, responsiveFontSizes } from '@mui/material/styles';\r\nimport { baseThemeOptions } from './base-theme-options';\r\nimport { lightThemeOptions } from './light-theme-options';\r\nimport { darkThemeOptions } from './dark-theme-options';\r\n\r\ninterface Neutral {\r\n    100: string;\r\n    200: string;\r\n    300: string;\r\n    400: string;\r\n    500: string;\r\n    600: string;\r\n    700: string;\r\n    800: string;\r\n    900: string;\r\n}\r\n\r\ndeclare module '@mui/material/styles' {\r\n    interface Palette {\r\n        neutral?: Neutral;\r\n    }\r\n\r\n    interface PaletteOptions {\r\n        neutral?: Neutral;\r\n    }\r\n}\r\n\r\ninterface ThemeConfig {\r\n    responsiveFontSizes?: boolean;\r\n    mode: 'light' | 'dark';\r\n}\r\n\r\nexport const createTheme = (config: ThemeConfig): Theme => {\r\n    let theme = createMuiTheme(baseThemeOptions, config.mode === 'dark' ? darkThemeOptions : lightThemeOptions);\r\n\r\n    if (config.responsiveFontSizes) {\r\n        theme = responsiveFontSizes(theme);\r\n    }\r\n\r\n    return theme;\r\n};\r\n\r\nexport const footerStyle = {\r\n    background: '#272938',\r\n    text: '#7286a0',\r\n    bottomBackground: '#1f2131',\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport { Box, Container, Grid } from '@mui/material';\r\nimport FacebookIcon from '@mui/icons-material/Facebook';\r\nimport TwitterIcon from '@mui/icons-material/Twitter';\r\nimport YouTubeIcon from '@mui/icons-material/YouTube';\r\nimport { footerStyle } from '../theme';\r\nimport { settings } from '../settings';\r\n\r\nexport const Footer = () => (\r\n    <>\r\n        <Box\r\n            sx={{\r\n                backgroundColor: footerStyle.background,\r\n                color: footerStyle.text,\r\n                fontFamily: 'Roboto',\r\n                lineHeight: '24px',\r\n                padding: '40px 0',\r\n                a: {\r\n                    textDecoration: 'none',\r\n                    color: '#7286a0',\r\n                },\r\n            }}\r\n        >\r\n            <Container maxWidth=\"lg\">\r\n                <Grid container spacing={5}>\r\n                    <Grid item xs={12} sm={4} md={4} sx={{}}>\r\n                        <h3\r\n                            css={css`\r\n                                padding-bottom: 0.5em;\r\n                            `}\r\n                        >\r\n                            About\r\n                        </h3>\r\n                        <p>\r\n                            LSoft Technologies Inc. is a privately owned North American software company. Our goal is to\r\n                            create world’s leading data recovery, security and backup solutions by providing rock solid\r\n                            performance, innovation, and unparalleled customer service.\r\n                        </p>\r\n                    </Grid>\r\n                    <Grid item xs={12} sm={4} md={4} sx={{}}>\r\n                        <h3\r\n                            css={css`\r\n                                padding-bottom: 0.5em;\r\n                            `}\r\n                        >\r\n                            Contact Us\r\n                        </h3>\r\n                        <h4>{settings.email}</h4>\r\n                        <p>\r\n                            {settings.phone1}\r\n                            <br />\r\n                            {settings.phone2}\r\n                            <br />\r\n                            {settings.hours}\r\n                        </p>\r\n                        <p>Fax: {settings.fax}</p>\r\n                        <div\r\n                            css={css`\r\n                                a {\r\n                                    padding-right: 20px;\r\n                                }\r\n                            `}\r\n                        >\r\n                            <a href={settings.socials.facebook}>\r\n                                <FacebookIcon />\r\n                            </a>\r\n                            <a href={settings.socials.twitter}>\r\n                                <TwitterIcon />\r\n                            </a>\r\n                            <a href={settings.socials.youtube}>\r\n                                <YouTubeIcon />\r\n                            </a>\r\n                        </div>\r\n                    </Grid>\r\n                    <Grid item>\r\n                        <h3\r\n                            css={css`\r\n                                padding-bottom: 0.5em;\r\n                            `}\r\n                        >\r\n                            Address\r\n                        </h3>\r\n                        <h4>LSoft Technologies Inc.</h4>\r\n                        <p>\r\n                            {settings.address.map((line, idx) => (\r\n                                <span key={idx}>\r\n                                    {line}\r\n                                    <br />\r\n                                </span>\r\n                            ))}\r\n                        </p>\r\n                    </Grid>\r\n                </Grid>\r\n            </Container>\r\n        </Box>\r\n        <Box\r\n            sx={{\r\n                backgroundColor: footerStyle.bottomBackground,\r\n                color: footerStyle.text,\r\n            }}\r\n        >\r\n            <Container maxWidth=\"lg\">\r\n                <p\r\n                    css={css`\r\n                        margin: 0;\r\n                        padding: 16px;\r\n                    `}\r\n                >\r\n                    &copy; {settings.year} LSoft Technologies Inc. All Rights Reserved.\r\n                </p>\r\n            </Container>\r\n        </Box>\r\n    </>\r\n);\r\n","import { useState } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { Box } from '@mui/material';\r\nimport { experimentalStyled } from '@mui/material/styles';\r\nimport { MainNavbar } from './MainNavbar';\r\nimport { MainSidebar } from './MainSidebar';\r\nimport { Footer } from './Footer';\r\n\r\ninterface MainLayoutProps {\r\n    children?: ReactNode;\r\n}\r\n\r\nconst MainLayoutRoot = experimentalStyled('div')(({ theme }) => ({\r\n    backgroundColor: theme.palette.background.default,\r\n    paddingTop: 64,\r\n}));\r\n\r\nexport const MainLayout: FC<MainLayoutProps> = ({ children }) => {\r\n    const [isSidebarMobileOpen, setIsSidebarMobileOpen] = useState<boolean>(false);\r\n\r\n    return (\r\n        <MainLayoutRoot>\r\n            <MainNavbar showMenu={true} onSidebarMobileOpen={(): void => setIsSidebarMobileOpen(true)} />\r\n            <MainSidebar onMobileClose={(): void => setIsSidebarMobileOpen(false)} openMobile={isSidebarMobileOpen} />\r\n            <Box sx={{ minHeight: '80vh' }}>{children || <Outlet />}</Box>\r\n            <Footer />\r\n        </MainLayoutRoot>\r\n    );\r\n};\r\n","import type { FC, ReactNode } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { Box } from '@mui/material';\r\nimport { experimentalStyled } from '@mui/material/styles';\r\nimport { MainNavbar } from './MainNavbar';\r\nimport { Footer } from './Footer';\r\n\r\ninterface PublicLayoutProps {\r\n    children?: ReactNode;\r\n    customTitle?: string;\r\n}\r\n\r\nconst PublicLayoutRoot = experimentalStyled('div')(({ theme }) => ({\r\n    backgroundColor: theme.palette.background.default,\r\n    paddingTop: 64,\r\n}));\r\n\r\nexport const PublicLayout: FC<PublicLayoutProps> = ({ children, customTitle }) => {\r\n    return (\r\n        <PublicLayoutRoot>\r\n            <MainNavbar showMenu={false} customTitle={customTitle} />\r\n            <Box sx={{ minHeight: '80vh' }}>{children || <Outlet />}</Box>\r\n            <Footer />\r\n        </PublicLayoutRoot>\r\n    );\r\n};\r\n","import type { FC } from 'react';\r\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\r\nimport { AppBar, Box, Button, Divider, Hidden, IconButton, Toolbar, Typography, Stack, Avatar } from '@mui/material';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport PersonIcon from '@mui/icons-material/Person';\r\nimport { Theme } from '@mui/material/styles';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport { Logo } from '../Logo';\r\nimport { accountService } from '../../account.service';\r\nimport { getInitials } from '../../utils/get-initials';\r\nimport { useTheme } from '@mui/styles';\r\n\r\ninterface ProfileNavbarProps {\r\n    onSidebarMobileOpen?: () => void;\r\n    isReseller: boolean;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n    createStyles({\r\n        homeLink: {\r\n            textDecoration: 'none',\r\n        },\r\n    })\r\n);\r\n\r\nexport const ProfileNavbar: FC<ProfileNavbarProps> = ({ onSidebarMobileOpen, isReseller }) => {\r\n    const classes = useStyles();\r\n    const navigate = useNavigate();\r\n    const theme = useTheme();\r\n    const account = accountService.getAccount();\r\n\r\n    const logout = () => {\r\n        accountService.logout();\r\n        navigate('/');\r\n    };\r\n\r\n    return (\r\n        <AppBar\r\n            elevation={0}\r\n            sx={{\r\n                backgroundColor: 'primary',\r\n                color: 'text.secondary',\r\n            }}\r\n        >\r\n            <Toolbar sx={{ minHeight: 64 }}>\r\n                <Hidden lgUp>\r\n                    <IconButton\r\n                        sx={{ color: theme.palette.primary.contrastText }}\r\n                        onClick={onSidebarMobileOpen}\r\n                        size=\"large\"\r\n                    >\r\n                        <MenuIcon fontSize=\"small\" />\r\n                    </IconButton>\r\n                </Hidden>\r\n                <Hidden lgDown>\r\n                    <RouterLink to=\"/\" className={classes.homeLink}>\r\n                        <Stack direction=\"row\" spacing={1} sx={{ textDecoration: 'none' }}>\r\n                            <Logo />\r\n                            <Typography\r\n                                sx={{\r\n                                    caretColor: 'rgba(0,0,0,0)',\r\n                                    color: theme.palette.primary.contrastText,\r\n                                    whiteSpace: 'nowrap',\r\n                                    textDecoration: 'none',\r\n                                    lineHeight: '40px',\r\n                                }}\r\n                                variant=\"h6\"\r\n                            >\r\n                                LSoft Technologies\r\n                            </Typography>\r\n                            <Typography\r\n                                sx={{\r\n                                    color: 'white',\r\n                                    whiteSpace: 'nowrap',\r\n                                    fontWeight: 100,\r\n                                    lineHeight: '40px',\r\n                                }}\r\n                                variant=\"h6\"\r\n                            >\r\n                                |&nbsp; Customer Support\r\n                            </Typography>\r\n                        </Stack>\r\n                    </RouterLink>\r\n                </Hidden>\r\n                <Box sx={{ flexGrow: 1 }} />\r\n                {account && (\r\n                    <Avatar\r\n                        sx={{\r\n                            height: 42,\r\n                            mr: 2,\r\n                            width: 42,\r\n                            color: theme.palette.primary.main,\r\n                            bgcolor: 'white',\r\n                        }}\r\n                    >\r\n                        {getInitials(`${account.name}`)}\r\n                    </Avatar>\r\n                )}\r\n                {account && (\r\n                    <Typography sx={{ color: theme.palette.primary.contrastText, fontWeight: 300 }}>\r\n                        {isReseller ? 'Reseller ID' : 'Client ID'}: {account.id}\r\n                    </Typography>\r\n                )}\r\n                <Divider\r\n                    orientation=\"vertical\"\r\n                    sx={{\r\n                        height: 32,\r\n                        mx: 2,\r\n                        backgroundColor: theme.palette.primary.contrastText,\r\n                    }}\r\n                />\r\n                <Button\r\n                    sx={{\r\n                        color: theme.palette.primary.contrastText,\r\n                        marginLeft: 1,\r\n                    }}\r\n                    startIcon={<PersonIcon />}\r\n                    onClick={logout}\r\n                >\r\n                    Sign Out\r\n                </Button>\r\n            </Toolbar>\r\n        </AppBar>\r\n    );\r\n};\r\n","import { createSvgIcon } from '@mui/material/utils';\r\n\r\nconst ChevronDown = createSvgIcon(\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n        <path\r\n            fillRule=\"evenodd\"\r\n            d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\r\n            clipRule=\"evenodd\"\r\n        />\r\n    </svg>,\r\n    'ChevronDown'\r\n);\r\n\r\nexport default ChevronDown;\r\n","import { createSvgIcon } from '@mui/material/utils';\r\n\r\nconst ChevronRight = createSvgIcon(\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n        <path\r\n            fillRule=\"evenodd\"\r\n            d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\r\n            clipRule=\"evenodd\"\r\n        />\r\n    </svg>,\r\n    'ChevronRight'\r\n);\r\n\r\nexport default ChevronRight;\r\n","import { useState } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport { NavLink as RouterLink } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { Box, Button, Collapse, ListItem } from '@mui/material';\r\nimport type { ListItemProps } from '@mui/material';\r\nimport ChevronDownIcon from '../icons/ChevronDown';\r\nimport ChevronRightIcon from '../icons/ChevronRight';\r\n\r\ninterface NavItemProps extends ListItemProps {\r\n    active?: boolean;\r\n    children?: ReactNode;\r\n    depth: number;\r\n    icon?: ReactNode;\r\n    info?: ReactNode;\r\n    open?: boolean;\r\n    path?: string;\r\n    title: string;\r\n}\r\n\r\nconst NavItem: FC<NavItemProps> = (props) => {\r\n    const { active, children, depth, icon, info, open: openProp, path, title, ...other } = props;\r\n    const [open, setOpen] = useState<boolean>(openProp);\r\n\r\n    const handleToggle = (): void => {\r\n        setOpen((prevOpen) => !prevOpen);\r\n    };\r\n\r\n    let paddingLeft = 16;\r\n\r\n    if (depth > 0) {\r\n        paddingLeft = 32 + 8 * depth;\r\n    }\r\n\r\n    // Branch\r\n    if (children) {\r\n        return (\r\n            <ListItem\r\n                disableGutters\r\n                sx={{\r\n                    display: 'block',\r\n                    py: 0,\r\n                }}\r\n                {...other}\r\n            >\r\n                <Button\r\n                    endIcon={!open ? <ChevronRightIcon fontSize=\"small\" /> : <ChevronDownIcon fontSize=\"small\" />}\r\n                    onClick={handleToggle}\r\n                    startIcon={icon}\r\n                    sx={{\r\n                        color: 'text.secondary',\r\n                        fontWeight: 'fontWeightMedium',\r\n                        justifyContent: 'flex-start',\r\n                        pl: `${paddingLeft}px`,\r\n                        pr: '8px',\r\n                        py: '12px',\r\n                        textAlign: 'left',\r\n                        textTransform: 'none',\r\n                        width: '100%',\r\n                    }}\r\n                    variant=\"text\"\r\n                >\r\n                    <Box sx={{ flexGrow: 1 }}>{title}</Box>\r\n                    {info}\r\n                </Button>\r\n                <Collapse in={open}>{children}</Collapse>\r\n            </ListItem>\r\n        );\r\n    }\r\n\r\n    // Leaf\r\n    return (\r\n        <ListItem\r\n            disableGutters\r\n            sx={{\r\n                display: 'flex',\r\n                py: 0,\r\n            }}\r\n        >\r\n            <Button\r\n                component={path && RouterLink}\r\n                startIcon={icon}\r\n                sx={{\r\n                    color: 'text.secondary',\r\n                    fontWeight: 'fontWeightMedium',\r\n                    justifyContent: 'flex-start',\r\n                    textAlign: 'left',\r\n                    pl: `${paddingLeft}px`,\r\n                    pr: '8px',\r\n                    py: '12px',\r\n                    textTransform: 'none',\r\n                    width: '100%',\r\n                    ...(active && {\r\n                        color: 'primary.main',\r\n                        fontWeight: 'fontWeightBold',\r\n                        '& svg': {\r\n                            color: 'primary.main',\r\n                        },\r\n                    }),\r\n                }}\r\n                variant=\"text\"\r\n                to={path}\r\n            >\r\n                <Box sx={{ flexGrow: 1 }}>{title}</Box>\r\n                {info}\r\n            </Button>\r\n        </ListItem>\r\n    );\r\n};\r\n\r\nNavItem.propTypes = {\r\n    active: PropTypes.bool,\r\n    children: PropTypes.node,\r\n    depth: PropTypes.number.isRequired,\r\n    icon: PropTypes.node,\r\n    info: PropTypes.node,\r\n    open: PropTypes.bool,\r\n    path: PropTypes.string,\r\n    title: PropTypes.string.isRequired,\r\n};\r\n\r\nNavItem.defaultProps = {\r\n    active: false,\r\n    open: false,\r\n};\r\n\r\nexport default NavItem;\r\n","import type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { matchPath } from 'react-router-dom';\r\nimport { List, ListSubheader } from '@mui/material';\r\nimport type { ListProps } from '@mui/material';\r\nimport NavItem from './NavItem';\r\n\r\ninterface Item {\r\n    path?: string;\r\n    icon?: ReactNode;\r\n    info?: ReactNode;\r\n    children?: Item[];\r\n    title: string;\r\n}\r\n\r\ninterface NavSectionProps extends ListProps {\r\n    items: Item[];\r\n    pathname: string;\r\n    title: string;\r\n}\r\n\r\nconst renderNavItems = ({\r\n    depth = 0,\r\n    items,\r\n    pathname,\r\n}: {\r\n    items: Item[];\r\n    pathname: string;\r\n    depth?: number;\r\n}): JSX.Element => (\r\n    <List disablePadding>\r\n        {items.reduce(\r\n            // eslint-disable-next-line @typescript-eslint/no-use-before-define, no-use-before-define\r\n            (acc, item) =>\r\n                reduceChildRoutes({\r\n                    acc,\r\n                    item,\r\n                    pathname,\r\n                    depth,\r\n                }),\r\n            []\r\n        )}\r\n    </List>\r\n);\r\n\r\nconst reduceChildRoutes = ({\r\n    acc,\r\n    pathname,\r\n    item,\r\n    depth,\r\n}: {\r\n    acc: JSX.Element[];\r\n    pathname: string;\r\n    item: Item;\r\n    depth: number;\r\n}): Array<JSX.Element> => {\r\n    const key = `${item.title}-${depth}`;\r\n    const exactMatch = item.path\r\n        ? !!matchPath(\r\n              {\r\n                  path: item.path,\r\n                  end: true,\r\n              },\r\n              pathname\r\n          )\r\n        : false;\r\n\r\n    if (item.children) {\r\n        const partialMatch = item.path\r\n            ? !!matchPath(\r\n                  {\r\n                      path: item.path,\r\n                      end: false,\r\n                  },\r\n                  pathname\r\n              )\r\n            : false;\r\n\r\n        acc.push(\r\n            <NavItem\r\n                active={partialMatch}\r\n                depth={depth}\r\n                icon={item.icon}\r\n                info={item.info}\r\n                key={key}\r\n                open={partialMatch}\r\n                path={item.path}\r\n                title={item.title}\r\n            >\r\n                {renderNavItems({\r\n                    depth: depth + 1,\r\n                    items: item.children,\r\n                    pathname,\r\n                })}\r\n            </NavItem>\r\n        );\r\n    } else {\r\n        acc.push(\r\n            <NavItem\r\n                active={exactMatch}\r\n                depth={depth}\r\n                icon={item.icon}\r\n                info={item.info}\r\n                key={key}\r\n                path={item.path}\r\n                title={item.title}\r\n            />\r\n        );\r\n    }\r\n\r\n    return acc;\r\n};\r\n\r\nconst NavSection: FC<NavSectionProps> = (props) => {\r\n    const { items, pathname, title, ...other } = props;\r\n\r\n    return (\r\n        <List\r\n            subheader={\r\n                <ListSubheader\r\n                    disableGutters\r\n                    disableSticky\r\n                    sx={{\r\n                        color: 'text.primary',\r\n                        fontSize: '0.75rem',\r\n                        lineHeight: 2.5,\r\n                        fontWeight: 700,\r\n                        textTransform: 'uppercase',\r\n                    }}\r\n                >\r\n                    {title}\r\n                </ListSubheader>\r\n            }\r\n            {...other}\r\n        >\r\n            {renderNavItems({\r\n                items,\r\n                pathname,\r\n            })}\r\n        </List>\r\n    );\r\n};\r\n\r\nNavSection.propTypes = {\r\n    items: PropTypes.array,\r\n    pathname: PropTypes.string,\r\n    title: PropTypes.string,\r\n};\r\n\r\nexport default NavSection;\r\n","import { useEffect } from 'react';\r\nimport type { FC } from 'react';\r\nimport { Link as RouterLink, useLocation } from 'react-router-dom';\r\nimport { Box, Drawer, Hidden } from '@mui/material';\r\nimport Scrollbar from '../Scrollbar';\r\nimport NavSection from '../NavSection';\r\nimport { Logo } from '../Logo';\r\nimport ReceiptIcon from '@mui/icons-material/Receipt';\r\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\r\nimport UpgradeIcon from '@mui/icons-material/Upgrade';\r\nimport LocalOfferIcon from '@mui/icons-material/LocalOffer';\r\nimport HelpCenterIcon from '@mui/icons-material/HelpCenter';\r\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\r\n\r\ninterface ProfileSidebarProps {\r\n    onMobileClose: () => void;\r\n    openMobile: boolean;\r\n    isReseller: boolean;\r\n}\r\n\r\nconst clientSections = [\r\n    {\r\n        title: 'Client Profile',\r\n        items: [\r\n            {\r\n                title: 'Orders',\r\n                path: '/client/orders',\r\n                icon: <ReceiptIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Profile',\r\n                path: '/client/profile',\r\n                icon: <AccountCircleIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Upgrades',\r\n                path: '/client/upgrades',\r\n                icon: <UpgradeIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Discounts',\r\n                path: '/client/discounts',\r\n                icon: <LocalOfferIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Support',\r\n                path: '/client/support',\r\n                icon: <HelpCenterIcon fontSize=\"small\" />,\r\n            },\r\n        ],\r\n    },\r\n];\r\n\r\nconst resellerSections = [\r\n    {\r\n        title: 'Reseller Profile',\r\n        items: [\r\n            {\r\n                title: 'New Order',\r\n                path: '/reseller/orders/new',\r\n                icon: <AddCircleIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Orders',\r\n                path: '/reseller/orders',\r\n                icon: <ReceiptIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Profile',\r\n                path: '/reseller/profile',\r\n                icon: <AccountCircleIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Support',\r\n                path: '/reseller/support',\r\n                icon: <HelpCenterIcon fontSize=\"small\" />,\r\n            },\r\n        ],\r\n    },\r\n];\r\n\r\nexport const ProfileSidebar: FC<ProfileSidebarProps> = (props) => {\r\n    const { onMobileClose, openMobile, isReseller } = props;\r\n    const location = useLocation();\r\n    const sections = isReseller ? resellerSections : clientSections;\r\n\r\n    useEffect(() => {\r\n        if (openMobile && onMobileClose) {\r\n            onMobileClose();\r\n        }\r\n    }, [location.pathname]);\r\n\r\n    const content = (\r\n        <Box\r\n            sx={{\r\n                display: 'flex',\r\n                flexDirection: 'column',\r\n                height: '100%',\r\n            }}\r\n        >\r\n            <Scrollbar options={{ suppressScrollX: true }}>\r\n                <Hidden lgUp>\r\n                    <Box\r\n                        sx={{\r\n                            display: 'flex',\r\n                            justifyContent: 'center',\r\n                            p: 2,\r\n                        }}\r\n                    >\r\n                        <RouterLink to=\"/\">\r\n                            <Logo />\r\n                        </RouterLink>\r\n                    </Box>\r\n                </Hidden>\r\n                <Box sx={{ p: 2 }}>\r\n                    {sections.map((section) => (\r\n                        <NavSection\r\n                            key={section.title}\r\n                            pathname={location.pathname}\r\n                            sx={{\r\n                                '& + &': {\r\n                                    mt: 3,\r\n                                },\r\n                            }}\r\n                            {...section}\r\n                        />\r\n                    ))}\r\n                </Box>\r\n            </Scrollbar>\r\n        </Box>\r\n    );\r\n\r\n    return (\r\n        <>\r\n            <Drawer\r\n                anchor=\"left\"\r\n                onClose={onMobileClose}\r\n                open={openMobile}\r\n                PaperProps={{\r\n                    sx: {\r\n                        backgroundColor: 'background.paper',\r\n                        width: 280,\r\n                        display: { xs: 'block', lg: 'none' },\r\n                    },\r\n                }}\r\n                variant=\"temporary\"\r\n            >\r\n                {content}\r\n            </Drawer>\r\n            <Drawer\r\n                anchor=\"left\"\r\n                open\r\n                PaperProps={{\r\n                    sx: {\r\n                        backgroundColor: 'background.paper',\r\n                        height: 'calc(100% - 64px) !important',\r\n                        top: '64px !Important',\r\n                        width: 280,\r\n                        display: { xs: 'none', lg: 'block' },\r\n                    },\r\n                }}\r\n                variant=\"persistent\"\r\n            >\r\n                {content}\r\n            </Drawer>\r\n        </>\r\n    );\r\n};\r\n","import { useState } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { experimentalStyled } from '@mui/material/styles';\r\nimport { ProfileNavbar } from './ProfileNavbar';\r\nimport { ProfileSidebar } from './ProfileSidebar';\r\n\r\ninterface ProfileLayoutProps {\r\n    children?: ReactNode;\r\n    isReseller: boolean;\r\n}\r\n\r\nconst ProfileLayoutRoot = experimentalStyled('div')(({ theme }) => ({\r\n    backgroundColor: theme.palette.background.default,\r\n    display: 'flex',\r\n    height: '100%',\r\n    overflow: 'hidden',\r\n    width: '100%',\r\n}));\r\n\r\nconst ProfileLayoutWrapper = experimentalStyled('div')(({ theme }) => ({\r\n    display: 'flex',\r\n    flex: '1 1 auto',\r\n    overflow: 'hidden',\r\n    paddingTop: '64px',\r\n    [theme.breakpoints.up('lg')]: {\r\n        paddingLeft: '280px',\r\n    },\r\n}));\r\n\r\nconst ProfileLayoutContainer = experimentalStyled('div')({\r\n    display: 'flex',\r\n    flex: '1 1 auto',\r\n    overflow: 'hidden',\r\n});\r\n\r\nconst ProfileLayoutContent = experimentalStyled('div')({\r\n    flex: '1 1 auto',\r\n    height: '100%',\r\n    overflow: 'auto',\r\n    position: 'relative',\r\n    WebkitOverflowScrolling: 'touch',\r\n});\r\n\r\nexport const ProfileLayout: FC<ProfileLayoutProps> = (props) => {\r\n    const [isSidebarMobileOpen, setIsSidebarMobileOpen] = useState<boolean>(false);\r\n    const { isReseller } = props;\r\n\r\n    return (\r\n        <ProfileLayoutRoot>\r\n            <ProfileNavbar onSidebarMobileOpen={(): void => setIsSidebarMobileOpen(true)} isReseller={isReseller} />\r\n            <ProfileSidebar\r\n                onMobileClose={(): void => setIsSidebarMobileOpen(false)}\r\n                openMobile={isSidebarMobileOpen}\r\n                isReseller={isReseller}\r\n            />\r\n            <ProfileLayoutWrapper>\r\n                <ProfileLayoutContainer>\r\n                    <ProfileLayoutContent>\r\n                        <Outlet />\r\n                    </ProfileLayoutContent>\r\n                </ProfileLayoutContainer>\r\n            </ProfileLayoutWrapper>\r\n        </ProfileLayoutRoot>\r\n    );\r\n};\r\n","import { http } from './http';\r\nimport axios from 'axios';\r\nimport { webAPIUrl } from './AppSettings';\r\n\r\n// #region Category\r\nexport interface CategoryData {\r\n    categoryId: number;\r\n    name: string;\r\n    icon: string;\r\n    description: string;\r\n    questionCount: number;\r\n}\r\n\r\nexport interface CategoryPostRequest {\r\n    name: string;\r\n    icon: string;\r\n    description: string;\r\n}\r\n\r\nexport const getCategories = async (): Promise<CategoryData[]> => {\r\n    const result = await http<CategoryData[]>({\r\n        path: '/categories',\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const getCategoriesWithCounters = async (): Promise<CategoryData[]> => {\r\n    const result = await http<CategoryData[]>({\r\n        path: '/categories?counters=1',\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const getCategory = async (categoryId: number): Promise<CategoryData | null> => {\r\n    const result = await http<CategoryData>({\r\n        path: `/categories/${categoryId}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const postCategory = async (category: CategoryPostRequest): Promise<CategoryData | undefined> => {\r\n    const result = await http<CategoryData, CategoryPostRequest>({\r\n        path: `/categories`,\r\n        method: 'POST',\r\n        body: category,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return undefined;\r\n    }\r\n};\r\n\r\nexport const putCategory = async (\r\n    categoryId: number,\r\n    category: CategoryPostRequest\r\n): Promise<CategoryData | undefined> => {\r\n    const result = await http<CategoryData, CategoryPostRequest>({\r\n        path: `/categories/${categoryId}`,\r\n        method: 'PUT',\r\n        body: category,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return undefined;\r\n    }\r\n};\r\n\r\nexport const deleteCategory = async (categoryId: number): Promise<boolean> => {\r\n    const result = await http<any>({\r\n        path: `/categories/${categoryId}`,\r\n        method: 'DELETE',\r\n    });\r\n    return result.ok;\r\n};\r\n\r\n// #endregion\r\n\r\n//#region Question\r\n\r\nexport interface QuestionPostRequest {\r\n    categoryId: number;\r\n    title: string;\r\n    content: string;\r\n    labels: string;\r\n    isPromoted: boolean;\r\n    isPublic: boolean;\r\n    isPublished: boolean;\r\n    isArchived: boolean;\r\n    userId: number;\r\n}\r\n\r\nexport interface QuestionDataResponse {\r\n    questionId: number;\r\n    categoryId: number;\r\n    categoryName: string;\r\n    title: string;\r\n    labels: string;\r\n    updated: string;\r\n    content: string;\r\n    isPublic: boolean;\r\n    isPublished: boolean;\r\n    isArchived: boolean;\r\n    isPromoted: boolean;\r\n}\r\n\r\nexport interface QuestionData {\r\n    questionId: number;\r\n    categoryId: number;\r\n    categoryName: string;\r\n    title: string;\r\n    labels: string;\r\n    updated: Date;\r\n    content: string;\r\n    isPublic: boolean;\r\n    isPublished: boolean;\r\n    isArchived: boolean;\r\n    isPromoted: boolean;\r\n}\r\n\r\nconst mapQuestionData = (question: QuestionDataResponse): QuestionData => ({\r\n    ...question,\r\n    updated: new Date(question.updated),\r\n});\r\n\r\nexport const getRecentQuestions = async (): Promise<QuestionData[]> => {\r\n    const result = await http<QuestionDataResponse[]>({\r\n        path: '/questions/recent',\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.map(mapQuestionData);\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const getCategoryQuestions = async (categoryId: number): Promise<QuestionData[]> => {\r\n    const result = await http<QuestionDataResponse[]>({\r\n        path: `/questions?category=${categoryId}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.map(mapQuestionData);\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const getQuestion = async (questionId: number): Promise<QuestionData | null> => {\r\n    const result = await http<QuestionDataResponse>({\r\n        path: `/questions/${questionId}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapQuestionData(result.body);\r\n    } else {\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const getQuestionForEdit = async (questionId: number): Promise<QuestionData | null> => {\r\n    const result = await http<QuestionDataResponse>({\r\n        path: `/questions/${questionId}/edit`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapQuestionData(result.body);\r\n    } else {\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const searchQuestions = async (query: string): Promise<QuestionData[]> => {\r\n    const result = await http<QuestionDataResponse[]>({\r\n        path: `/questions?search=${query}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.map(mapQuestionData);\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const getQuestionsWithFilter = async ({ published = null, archived = null, search = null } = {}): Promise<\r\n    QuestionData[]\r\n> => {\r\n    const result = await http<QuestionDataResponse[]>({\r\n        path: `/questions/filter?published=${published != null ? (published ? 1 : 0) : ''}&archived=${\r\n            archived != null ? (archived ? 1 : 0) : ''\r\n        }&search=${search != null ? search : ''}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.map(mapQuestionData);\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const postQuestion = async (question: QuestionPostRequest): Promise<QuestionData | undefined> => {\r\n    const result = await http<QuestionDataResponse, QuestionPostRequest>({\r\n        path: `/questions`,\r\n        method: 'POST',\r\n        body: question,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapQuestionData(result.body);\r\n    } else {\r\n        return undefined;\r\n    }\r\n};\r\n\r\nexport const putQuestion = async (\r\n    questionId: number,\r\n    question: QuestionPostRequest\r\n): Promise<QuestionData | undefined> => {\r\n    const result = await http<QuestionDataResponse, QuestionPostRequest>({\r\n        path: `/questions/${questionId}`,\r\n        method: 'PUT',\r\n        body: question,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return mapQuestionData(result.body);\r\n    } else {\r\n        return undefined;\r\n    }\r\n};\r\n\r\nexport const deleteQuestion = async (questionId: number): Promise<boolean> => {\r\n    const result = await http<any>({\r\n        path: `/questions/${questionId}`,\r\n        method: 'DELETE',\r\n    });\r\n    return result.ok;\r\n};\r\n\r\n//#endregion\r\n\r\n//#region Login\r\n\r\nexport interface LoginRequest {\r\n    email: string;\r\n    password: string;\r\n}\r\nexport interface LoginResponse {\r\n    token: string;\r\n}\r\n\r\nexport const login = async (credentials: LoginRequest): Promise<boolean> => {\r\n    const result = await http<LoginResponse, LoginRequest>({\r\n        path: '/accounts/login',\r\n        method: 'POST',\r\n        body: credentials,\r\n    });\r\n    if (result.ok) {\r\n        const { token } = result.body;\r\n        localStorage.setItem('jwt', token);\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n};\r\n\r\n//#endregion\r\n\r\n//#region Attachment\r\n\r\nexport interface AttachmentData {\r\n    attachmentId: number;\r\n    fileName: string;\r\n}\r\n\r\nexport interface AttachmentList {\r\n    attachments: string;\r\n}\r\n\r\nexport const getAttachments = async (questionId: number): Promise<AttachmentData[]> => {\r\n    const result = await http<AttachmentData[]>({\r\n        path: `/attachments?question=${questionId}`,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n};\r\n\r\nexport const addAttachments = async (questionId: number, attachments: AttachmentList): Promise<boolean> => {\r\n    const result = await http<any, AttachmentList>({\r\n        path: `/attachments/${questionId}/add`,\r\n        method: 'POST',\r\n        body: attachments,\r\n    });\r\n    return result.ok;\r\n};\r\n\r\nexport const removeAttachments = async (attachments: AttachmentList): Promise<boolean> => {\r\n    const result = await http<any, AttachmentList>({\r\n        path: `/attachments`,\r\n        method: 'POST',\r\n        body: attachments,\r\n    });\r\n    return result.ok;\r\n};\r\n\r\nexport const uploadAttachment = async (file: File): Promise<AttachmentData | undefined> => {\r\n    const formData = new FormData();\r\n    formData.append('File', file);\r\n\r\n    let responseData: AttachmentData = undefined;\r\n    await axios\r\n        .post(`${webAPIUrl}/attachments`, formData, {\r\n            headers: { 'Content-Type': 'multipart/form-data' },\r\n            onUploadProgress: (progress) => {\r\n                // let completed = Math.round((progress.loaded * 100) / progress.total);\r\n            },\r\n        })\r\n        .then((response) => {\r\n            responseData = response.data;\r\n        })\r\n        .catch((error) => {\r\n            console.log(error);\r\n        });\r\n\r\n    return responseData;\r\n};\r\n\r\n//#endregion\r\n","export const gray1 = '#383737';\r\nexport const gray2 = '#5c5a5a';\r\nexport const gray3 = '#857c81';\r\nexport const gray4 = '#b9b9b9';\r\nexport const gray5 = '#e3e2e2';\r\nexport const gray6 = '#f7f8fa';\r\n\r\nexport const accent1 = '#dbb365';\r\nexport const accent2 = '#efd197';\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport { gray2, gray3 } from '../Styles';\r\nimport { QuestionData } from '../data';\r\nimport { Link } from 'react-router-dom';\r\nimport Chip from '@mui/material/Chip';\r\nimport Stack from '@mui/material/Stack';\r\n\r\ninterface Props {\r\n    data: QuestionData;\r\n    showCategory: boolean;\r\n    showLabels: boolean;\r\n}\r\nexport const Question = ({ data, showCategory, showLabels }: Props) => (\r\n    <div\r\n        css={css`\r\n            padding: 10px 0px;\r\n        `}\r\n    >\r\n        <div\r\n            css={css`\r\n                padding: 10px 0px;\r\n                font-size: 19px;\r\n            `}\r\n        >\r\n            <Link\r\n                css={css`\r\n                    text-decoration: none;\r\n                    color: ${gray2};\r\n                `}\r\n                to={`/questions/${data.questionId}`}\r\n            >\r\n                {data.title}\r\n            </Link>\r\n        </div>\r\n        {showLabels && data.labels.trim().length > 0 && (\r\n            <div\r\n                css={css`\r\n                    padding-bottom: 10px;\r\n                    font-size: 15px;\r\n                    color: ${gray2};\r\n                `}\r\n            >\r\n                <Stack direction=\"row\" spacing={1}>\r\n                    {data.labels.split(',').map((label, idx) => {\r\n                        return <Chip key={idx} label={label.trim()} />;\r\n                    })}\r\n                </Stack>\r\n            </div>\r\n        )}\r\n        {showCategory && (\r\n            <div\r\n                css={css`\r\n                    padding-bottom: 10px;\r\n                    font-size: 15px;\r\n                    color: ${gray2};\r\n                `}\r\n            >\r\n                <Link\r\n                    css={css`\r\n                        text-decoration: none;\r\n                        color: ${gray2};\r\n                        font-size: 16px;\r\n                        font-weight: 300;\r\n                    `}\r\n                    to={`/categories/${data.categoryId}`}\r\n                >\r\n                    [ {data.categoryName} ]\r\n                </Link>\r\n            </div>\r\n        )}\r\n        <div\r\n            css={css`\r\n                font-size: 12px;\r\n                font-style: italic;\r\n                color: ${gray3};\r\n            `}\r\n        >\r\n            {`Updated on ${data.updated.toLocaleDateString()} ${data.updated.toLocaleTimeString()}`}\r\n        </div>\r\n    </div>\r\n);\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport { QuestionData } from '../data';\r\nimport { accent2, gray5 } from '../Styles';\r\nimport { Question } from './Question';\r\n\r\ninterface Props {\r\n    data: QuestionData[];\r\n    showCategory: boolean;\r\n    showLabels: boolean;\r\n}\r\n\r\nexport const QuestionList = ({ data, showCategory, showLabels }: Props) => (\r\n    <ul\r\n        css={css`\r\n            list-style: none;\r\n            margin: 10px 10px 50px 10px;\r\n            padding: 0 20px;\r\n            background-color: #fff;\r\n            border-bottom-left-radius: 4px;\r\n            border-bottom-right-radius: 4px;\r\n            border-top: 3px solid ${accent2};\r\n            box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.16);\r\n        `}\r\n    >\r\n        {data.map((question) => (\r\n            <li\r\n                key={question.questionId}\r\n                css={css`\r\n                    border-top: 1px solid ${gray5};\r\n                    :first-of-type {\r\n                        border-top: none;\r\n                    }\r\n                `}\r\n            >\r\n                <Question\r\n                    key={question.questionId}\r\n                    data={question}\r\n                    showCategory={showCategory}\r\n                    showLabels={showLabels}\r\n                />\r\n            </li>\r\n        ))}\r\n    </ul>\r\n);\r\n","import { Link } from 'react-router-dom';\r\nimport { CategoryData } from '../data';\r\n\r\nimport Card from '@mui/material/Card';\r\nimport CardActionArea from '@mui/material/CardActionArea';\r\nimport CardContent from '@mui/material/CardContent';\r\nimport CardMedia from '@mui/material/CardMedia';\r\nimport Typography from '@mui/material/Typography';\r\n\r\ninterface Props {\r\n    data: CategoryData;\r\n}\r\n\r\nexport const CategoryCard = ({ data }: Props) => {\r\n    return (\r\n        <Card\r\n            sx={{\r\n                height: '100%',\r\n            }}\r\n        >\r\n            <CardActionArea\r\n                component={Link}\r\n                to={`/categories/${data.categoryId}`}\r\n                sx={{\r\n                    height: '100%',\r\n                    display: 'flex',\r\n                    flexDirection: 'column',\r\n                }}\r\n            >\r\n                <CardMedia\r\n                    component=\"img\"\r\n                    alt={data.name}\r\n                    src={`/static/categories/${data.icon}`}\r\n                    sx={{\r\n                        width: 60,\r\n                        height: 60,\r\n                        margin: '0 auto',\r\n                        pt: 1.5,\r\n                    }}\r\n                />\r\n                <CardContent sx={{ flex: 1 }}>\r\n                    <Typography gutterBottom variant=\"h5\" component=\"h2\" align=\"center\">\r\n                        {data.name}\r\n                    </Typography>\r\n                    <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\" align=\"center\">\r\n                        {data.description}\r\n                    </Typography>\r\n                </CardContent>\r\n            </CardActionArea>\r\n        </Card>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport Grid from '@mui/material/Grid';\r\nimport { CategoryData } from '../data';\r\nimport { CategoryCard } from './CategoryCard';\r\n\r\ninterface Props {\r\n    data: CategoryData[];\r\n}\r\n\r\nexport const CategoryList = ({ data }: Props) => {\r\n    return (\r\n        <div\r\n            css={css`\r\n                margin: 30px;\r\n            `}\r\n        >\r\n            <Grid container spacing={2}>\r\n                {data.map((category) => (\r\n                    <Grid key={category.categoryId} item xs={6} sm={4}>\r\n                        <CategoryCard data={category} />\r\n                    </Grid>\r\n                ))}\r\n            </Grid>\r\n        </div>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport React from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { Paper, TextField } from '@mui/material';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\n// import CloseIcon from '@mui/icons-material/Close';\r\n\r\ntype FormData = {\r\n    search: string;\r\n};\r\n\r\nexport const SearchButton = () => {\r\n    const { handleSubmit, control } = useForm<FormData>();\r\n    const [searchParams] = useSearchParams();\r\n    const query = searchParams.get('query') || '';\r\n    const navigate = useNavigate();\r\n\r\n    const submitForm = ({ search }: FormData) => {\r\n        navigate(`/search?query=${search}`);\r\n    };\r\n\r\n    return (\r\n        <Paper\r\n            css={css`\r\n                position: relative;\r\n                top: 50%;\r\n                transform: translateY(-50%);\r\n                margin: 0 auto;\r\n                padding: 2px 4px;\r\n                display: flex;\r\n                align-items: center;\r\n                max-width: 500px;\r\n            `}\r\n        >\r\n            <SearchIcon\r\n                css={css`\r\n                    color: rgba(0, 0, 0, 0.54);\r\n                    padding: 0 10px;\r\n                `}\r\n            />\r\n            <form onSubmit={handleSubmit(submitForm)}>\r\n                <Controller\r\n                    name=\"search\"\r\n                    control={control}\r\n                    defaultValue={query}\r\n                    rules={{ required: 'Search criteria required' }}\r\n                    render={({ field: { onChange, value }, fieldState: { error } }) => (\r\n                        <TextField\r\n                            variant=\"standard\"\r\n                            value={value}\r\n                            onChange={onChange}\r\n                            error={!!error}\r\n                            helperText={error ? error.message : null}\r\n                            css={css`\r\n                                padding: 10px 0;\r\n                                width: 420px;\r\n                            `}\r\n                        />\r\n                    )}\r\n                />\r\n            </form>\r\n        </Paper>\r\n    );\r\n};\r\n","export default __webpack_public_path__ + \"static/media/search-bg.3c86ef97.png\";","import { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { getRecentQuestions, getCategories } from '../data';\r\nimport {\r\n    gettingCategoriesAction,\r\n    gotCategoriesAction,\r\n    gettingRecentlyAddedAction,\r\n    gotRecentlyAddedAction,\r\n    AppState,\r\n} from '../Store';\r\n\r\nimport { QuestionList } from '../components/QuestionList';\r\nimport { CategoryList } from '../components/CategoryList';\r\nimport { SearchButton } from '../components/SearchButton';\r\nimport { Title } from '../components/Title';\r\n\r\nimport searchBackground from '../images/search-bg.png';\r\nimport Container from '@mui/material/Container';\r\nimport Box from '@mui/material/Box';\r\nimport Typography from '@mui/material/Typography';\r\n\r\nexport const Home = () => {\r\n    const dispatch = useDispatch();\r\n    const loading = useSelector((state: AppState) => state.questions.loading);\r\n    const categories = useSelector((state: AppState) => state.questions.categories);\r\n    const questions = useSelector((state: AppState) => state.questions.recentlyAdded);\r\n\r\n    useEffect(() => {\r\n        const doGetCategories = async () => {\r\n            dispatch(gettingCategoriesAction());\r\n            const categories = await getCategories();\r\n            dispatch(gotCategoriesAction(categories));\r\n        };\r\n        doGetCategories();\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        const doGetRecentQuestions = async () => {\r\n            dispatch(gettingRecentlyAddedAction());\r\n            const questions = await getRecentQuestions();\r\n            dispatch(gotRecentlyAddedAction(questions));\r\n        };\r\n        doGetRecentQuestions();\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            <Title title=\"Customer Support\" />\r\n            <Box\r\n                sx={{\r\n                    backgroundImage: `url(${searchBackground})`,\r\n                    backgroundPosition: 'center',\r\n                    backgroundSize: 'cover',\r\n                    height: 300,\r\n                }}\r\n            >\r\n                <SearchButton />\r\n            </Box>\r\n            <Container maxWidth=\"lg\">\r\n                {!loading && <CategoryList data={categories} />}\r\n                <Typography variant=\"h5\" align=\"center\" sx={{ pt: 2 }}>\r\n                    Recent articles\r\n                </Typography>\r\n                {!loading && <QuestionList data={questions} showCategory={true} showLabels={false} />}\r\n            </Container>\r\n        </>\r\n    );\r\n};\r\n","import { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { getCategories, getCategoryQuestions } from '../data';\r\nimport {\r\n    gettingBrowsedAction,\r\n    gotBrowsedAction,\r\n    AppState,\r\n    gettingCategoriesAction,\r\n    gotCategoriesAction,\r\n} from '../Store';\r\n\r\nimport { Title } from '../components/Title';\r\nimport { QuestionList } from '../components/QuestionList';\r\n\r\nimport { Theme } from '@mui/material/styles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport { Container, Typography, Breadcrumbs, Link } from '@mui/material';\r\nimport HomeIcon from '@mui/icons-material/Home';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n    createStyles({\r\n        link: {\r\n            display: 'flex',\r\n            cursor: 'pointer',\r\n        },\r\n        icon: {\r\n            marginRight: theme.spacing(0.5),\r\n            width: 20,\r\n            height: 20,\r\n        },\r\n    })\r\n);\r\n\r\nexport const Category = () => {\r\n    const classes = useStyles();\r\n\r\n    const dispatch = useDispatch();\r\n    const loading = useSelector((state: AppState) => state.questions.loading);\r\n    const categories = useSelector((state: AppState) => state.questions.categories);\r\n    const questions = useSelector((state: AppState) => state.questions.browsed);\r\n\r\n    const { id } = useParams();\r\n    const categoryId = parseInt(id);\r\n    const category = categories.filter((category) => category.categoryId === categoryId)[0];\r\n\r\n    const fetchQuestions = async () => {\r\n        dispatch(gettingBrowsedAction());\r\n        const fetchedQuestions = await getCategoryQuestions(categoryId);\r\n        dispatch(gotBrowsedAction(fetchedQuestions));\r\n    };\r\n\r\n    const fetchCategories = async () => {\r\n        dispatch(gettingCategoriesAction());\r\n        const fetchedCategories = await getCategories();\r\n        dispatch(gotCategoriesAction(fetchedCategories));\r\n    };\r\n\r\n    useEffect(() => {\r\n        fetchQuestions();\r\n        fetchCategories();\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, []);\r\n\r\n    const navigate = useNavigate();\r\n\r\n    return (\r\n        <>\r\n            {category && <Title title={category.name} />}\r\n\r\n            <Container maxWidth=\"lg\">\r\n                <Breadcrumbs\r\n                    aria-label=\"breadcrumb\"\r\n                    sx={{\r\n                        paddingTop: '20px',\r\n                    }}\r\n                >\r\n                    <Link\r\n                        color=\"inherit\"\r\n                        onClick={() => {\r\n                            navigate('/');\r\n                        }}\r\n                        className={classes.link}\r\n                    >\r\n                        <HomeIcon className={classes.icon} />\r\n                        Home\r\n                    </Link>\r\n                    <Typography>{category && category.name}</Typography>\r\n                </Breadcrumbs>\r\n\r\n                <Typography variant=\"h5\" align=\"center\" sx={{ padding: 2 }}>\r\n                    {category && category.name}\r\n                </Typography>\r\n                {!loading && <QuestionList data={questions} showCategory={false} showLabels={true} />}\r\n            </Container>\r\n        </>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useNavigate, useSearchParams } from 'react-router-dom';\r\nimport { searchQuestions } from '../data';\r\nimport { searchingQuestionsAction, searchedQuestionsAction, AppState } from '../Store';\r\n\r\nimport { Title } from '../components/Title';\r\nimport { QuestionList } from '../components/QuestionList';\r\nimport { Container, Typography, Breadcrumbs, Link } from '@mui/material';\r\nimport HomeIcon from '@mui/icons-material/Home';\r\n\r\nexport const Search = () => {\r\n    const dispatch = useDispatch();\r\n    const questions = useSelector((state: AppState) => state.questions.searched);\r\n    const loading = useSelector((state: AppState) => state.questions.loading);\r\n    const [searchParams] = useSearchParams();\r\n    const search = searchParams.get('query') || '';\r\n    const navigate = useNavigate();\r\n\r\n    useEffect(() => {\r\n        const doSearch = async (query: string) => {\r\n            dispatch(searchingQuestionsAction());\r\n            const foundResults = await searchQuestions(query);\r\n            dispatch(searchedQuestionsAction(foundResults));\r\n        };\r\n\r\n        doSearch(search);\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [search]);\r\n\r\n    return (\r\n        <>\r\n            {<Title title=\"Seach results\" />}\r\n\r\n            <Container maxWidth=\"lg\">\r\n                <Breadcrumbs\r\n                    aria-label=\"breadcrumb\"\r\n                    css={css`\r\n                        padding-top: 20px;\r\n                    `}\r\n                >\r\n                    <Link\r\n                        color=\"inherit\"\r\n                        onClick={() => {\r\n                            navigate('/');\r\n                        }}\r\n                        css={css`\r\n                            display: flex;\r\n                            cursor: pointer;\r\n                        `}\r\n                    >\r\n                        <HomeIcon\r\n                            css={css`\r\n                                margin-right: 5px;\r\n                                width: 20px;\r\n                                height: 20px;\r\n                            `}\r\n                        />\r\n                        Home\r\n                    </Link>\r\n                    <Typography>Search results</Typography>\r\n                </Breadcrumbs>\r\n\r\n                <Typography variant=\"h5\" align=\"center\" sx={{ padding: 2 }}>\r\n                    Search results\r\n                </Typography>\r\n                {search && (\r\n                    <p\r\n                        css={css`\r\n                            font-size: 16px;\r\n                            font-weight: bold;\r\n                            font-style: italic;\r\n                            margin-top: 0;\r\n                            margin-left: 2em;\r\n                        `}\r\n                    >\r\n                        {questions.length} results for \"{search}\"\r\n                    </p>\r\n                )}\r\n                {!loading && <QuestionList data={questions} showCategory={true} showLabels={true} />}\r\n            </Container>\r\n        </>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { css } from '@emotion/react';\r\nimport { useEffect } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { gettingQuestionAction, gotQuestionAction, AppState } from '../Store';\r\nimport { getQuestion } from '../data';\r\n\r\nimport { Title } from '../components/Title';\r\nimport { Container, Typography, Breadcrumbs, Link, Chip, Stack } from '@mui/material';\r\nimport HomeIcon from '@mui/icons-material/Home';\r\n\r\nexport const Question = () => {\r\n    const dispatch = useDispatch();\r\n    const question = useSelector((state: AppState) => state.questions.viewing);\r\n\r\n    const { id } = useParams();\r\n    const questionId = parseInt(id);\r\n    const navigate = useNavigate();\r\n\r\n    useEffect(() => {\r\n        const doGetQuestion = async (questionId: number) => {\r\n            dispatch(gettingQuestionAction());\r\n            const foundQuestion = await getQuestion(questionId);\r\n            dispatch(gotQuestionAction(foundQuestion));\r\n        };\r\n        if (questionId) {\r\n            doGetQuestion(Number(questionId));\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [questionId]);\r\n\r\n    return (\r\n        <>\r\n            {question && <Title title={question.title} />}\r\n\r\n            <Container maxWidth=\"md\" css={css``}>\r\n                <Breadcrumbs\r\n                    aria-label=\"breadcrumb\"\r\n                    css={css`\r\n                        padding: 20px 0;\r\n                    `}\r\n                >\r\n                    <Link\r\n                        color=\"inherit\"\r\n                        onClick={() => {\r\n                            navigate('/');\r\n                        }}\r\n                        css={css`\r\n                            display: flex;\r\n                            cursor: pointer;\r\n                        `}\r\n                    >\r\n                        <HomeIcon\r\n                            css={css`\r\n                                margin-right: 5px;\r\n                                width: 20px;\r\n                                height: 20px;\r\n                            `}\r\n                        />\r\n                        Home\r\n                    </Link>\r\n                    <Typography>{question && question.categoryName}</Typography>\r\n                </Breadcrumbs>\r\n\r\n                <Typography variant=\"h4\">{question && question.title}</Typography>\r\n\r\n                {question && (\r\n                    <>\r\n                        {question.labels.trim().length > 0 && (\r\n                            <Stack\r\n                                direction=\"row\"\r\n                                spacing={1}\r\n                                css={css`\r\n                                    padding: 20px 0;\r\n                                `}\r\n                            >\r\n                                {question.labels.split(',').map((label, idx) => {\r\n                                    return <Chip key={idx} label={label.trim()} />;\r\n                                })}\r\n                            </Stack>\r\n                        )}\r\n                        <Typography variant=\"overline\">Updated on {question.updated.toLocaleDateString()}</Typography>\r\n                        <div\r\n                            css={css`\r\n                                padding: 5px 0;\r\n                                margin-bottom: 30px;\r\n                                border-bottom: 1px solid rgb(217, 233, 255);\r\n                            `}\r\n                        />\r\n                        <div\r\n                            css={css`\r\n                                img {\r\n                                    max-width: 100%;\r\n                                }\r\n                                pre {\r\n                                    white-space: pre-wrap;\r\n                                    word-wrap: break-word;\r\n                                    text-align: justify;\r\n                                }\r\n                                padding-bottom: 2em;\r\n                                a {\r\n                                    color: #007bff;\r\n                                    text-decoration: none;\r\n                                    background-color: transparent;\r\n                                }\r\n                            `}\r\n                            dangerouslySetInnerHTML={{ __html: question.content }}\r\n                        ></div>\r\n                    </>\r\n                )}\r\n            </Container>\r\n        </>\r\n    );\r\n};\r\n","import Payment from 'payment';\r\n\r\nfunction clearNumber(value = '') {\r\n    return value.replace(/\\D+/g, '');\r\n}\r\n\r\n///////////////////////////////////////////\r\n// Credit card numbers for testing\r\n/*\r\n\r\nVisa                4111 1111 4555 1142\r\nVisa Debit          4002 6900 0000 0008\r\nMastercard          5555 4444 3333 1111\r\nMastercard Debit    2223 5204 4356 0010\r\nAmerican Express    3714 4963 5398 431\r\nDiners Club         3056 9309 0259 04\r\nDiscover            6011 1111 1111 1117\r\n\r\n--- DISABLED:\r\nVisa Electron       4917300800000000\r\nMaestro             5000 5500 0000 0029\r\nJCB                 3569 9900 1009 5841\r\nHipercard           6062 8288 8866 6688\r\nUnionPay            6243 0300 0000 0001\r\nElo                 5066 9911 1111 1118\r\n\r\n*/\r\nexport function formatCreditCardNumber(value) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n\r\n    const issuer = Payment.fns.cardType(value);\r\n    const clearValue = clearNumber(value);\r\n    let nextValue;\r\n\r\n    switch (issuer) {\r\n        case 'amex':\r\n            nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(4, 10)} ${clearValue.slice(10, 15)}`;\r\n            break;\r\n        case 'dinersclub':\r\n            nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(4, 10)} ${clearValue.slice(10, 14)}`;\r\n            break;\r\n        default:\r\n            nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(4, 8)} ${clearValue.slice(\r\n                8,\r\n                12\r\n            )} ${clearValue.slice(12, 19)}`;\r\n            break;\r\n    }\r\n\r\n    return nextValue.trim();\r\n}\r\n\r\nexport function formatCVC(value, cardNumber) {\r\n    const clearValue = clearNumber(value);\r\n    let maxLength = 4;\r\n\r\n    const issuer = Payment.fns.cardType(cardNumber);\r\n    maxLength = issuer === 'amex' ? 4 : 3;\r\n\r\n    return clearValue.slice(0, maxLength);\r\n}\r\n\r\nexport function formatExpirationDate(prevValue, value) {\r\n    const clearValue = clearNumber(value);\r\n\r\n    if (clearValue.length === 2) {\r\n        const month = Number(clearValue);\r\n        if (!(month >= 1 && month <= 12)) {\r\n            return prevValue;\r\n        }\r\n    }\r\n\r\n    if (clearValue.length === 4) {\r\n        const year = Number(clearValue.slice(2, 4));\r\n        const currYear = new Date().getFullYear() - 2000;\r\n        if (year < currYear || year > currYear + 15) {\r\n            return prevValue;\r\n        }\r\n    }\r\n\r\n    if (clearValue.length >= 3) {\r\n        return `${clearValue.slice(0, 2)}/${clearValue.slice(2, 4)}`;\r\n    }\r\n\r\n    return clearValue;\r\n}\r\n","export default __webpack_public_path__ + \"static/media/credit-cards.d5c5c727.png\";","export default __webpack_public_path__ + \"static/media/paypal.52593b00.svg\";","export const usaStatesAndTerritories = [\r\n    { long: 'Alabama', short: 'AL' },\r\n    { long: 'Alaska', short: 'AK' },\r\n    { long: 'Arizona', short: 'AZ' },\r\n    { long: 'Arkansas', short: 'AR' },\r\n    { long: 'California', short: 'CA' },\r\n    { long: 'Colorado', short: 'CO' },\r\n    { long: 'Connecticut', short: 'CT' },\r\n    { long: 'Delaware', short: 'DE' },\r\n    { long: 'Florida', short: 'FL' },\r\n    { long: 'Georgia', short: 'GA' },\r\n    { long: 'Hawaii', short: 'HI' },\r\n    { long: 'Idaho', short: 'ID' },\r\n    { long: 'Illinois', short: 'IL' },\r\n    { long: 'Indiana', short: 'IN' },\r\n    { long: 'Iowa', short: 'IA' },\r\n    { long: 'Kansas', short: 'KS' },\r\n    { long: 'Kentucky', short: 'KY' },\r\n    { long: 'Louisiana', short: 'LA' },\r\n    { long: 'Maine', short: 'ME' },\r\n    { long: 'Maryland', short: 'MD' },\r\n    { long: 'Massachusetts', short: 'MA' },\r\n    { long: 'Michigan', short: 'MI' },\r\n    { long: 'Minnesota', short: 'MN' },\r\n    { long: 'Mississippi', short: 'MS' },\r\n    { long: 'Missouri', short: 'MO' },\r\n    { long: 'Montana', short: 'MT' },\r\n    { long: 'Nebraska', short: 'NE' },\r\n    { long: 'Nevada', short: 'NV' },\r\n    { long: 'New Hampshire', short: 'NH' },\r\n    { long: 'New Jersey', short: 'NJ' },\r\n    { long: 'New Mexico', short: 'NM' },\r\n    { long: 'New York', short: 'NY' },\r\n    { long: 'North Carolina', short: 'NC' },\r\n    { long: 'North Dakota', short: 'ND' },\r\n    { long: 'Ohio', short: 'OH' },\r\n    { long: 'Oklahoma', short: 'OK' },\r\n    { long: 'Oregon', short: 'OR' },\r\n    { long: 'Pennsylvania', short: 'PA' },\r\n    { long: 'Rhode Island', short: 'RI' },\r\n    { long: 'South Carolina', short: 'SC' },\r\n    { long: 'South Dakota', short: 'SD' },\r\n    { long: 'Tennessee', short: 'TN' },\r\n    { long: 'Texas', short: 'TX' },\r\n    { long: 'Utah', short: 'UT' },\r\n    { long: 'Vermont', short: 'VT' },\r\n    { long: 'Virginia', short: 'VA' },\r\n    { long: 'Washington', short: 'WA' },\r\n    { long: 'West Virginia', short: 'WV' },\r\n    { long: 'Wisconsin', short: 'WI' },\r\n    { long: 'Wyoming', short: 'WY' },\r\n    { long: 'American Samoa', short: 'AS' },\r\n    { long: 'Guam', short: 'GU' },\r\n    { long: 'Northern Mariana Islands', short: 'MP' },\r\n    { long: 'Puerto Rico', short: 'PR' },\r\n    { long: 'United States Virgin Islands', short: 'VI' },\r\n    { long: 'District of Columbia', short: 'DC' },\r\n];\r\n\r\nexport const canadaProvinces = [\r\n    { long: 'Alberta', short: 'AB' },\r\n    { long: 'British Columbia', short: 'BC' },\r\n    { long: 'Manitoba', short: 'MB' },\r\n    { long: 'New Brunswick', short: 'NB' },\r\n    { long: 'Newfoundland and Labrador', short: 'NL' },\r\n    { long: 'Nova Scotia', short: 'NS' },\r\n    { long: 'Ontario', short: 'ON' },\r\n    { long: 'Prince Edward Island', short: 'PE' },\r\n    { long: 'Quebec', short: 'QC' },\r\n    { long: 'Saskatchewan', short: 'SK' },\r\n    { long: 'Northwest Territories', short: 'NT' },\r\n    { long: 'Nunavut', short: 'NU' },\r\n    { long: 'Yukon', short: 'YT' },\r\n];\r\n\r\nexport function checkZip(value) {\r\n    return /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(value);\r\n}\r\n\r\n// This function is used to convert the full name of a province or state to its abbreviation.\r\n// for example, 'British Columbia' -> 'BC'\r\n// If country is not US or Canada, it will return the original name.\r\nexport function shortProvinceOrStateName(longName: string) {\r\n    for (const state of usaStatesAndTerritories) {\r\n        if (state.long === longName) {\r\n            return state.short;\r\n        }\r\n    }\r\n    for (const province of canadaProvinces) {\r\n        if (province.long === longName) {\r\n            return province.short;\r\n        }\r\n    }\r\n    return longName;\r\n}\r\n\r\n// get country code from country name for most common countries\r\nexport function CountryNameToCode(country: string) {\r\n    switch (country) {\r\n        case 'United States':\r\n        case 'USA':\r\n        case 'U.S.A.':\r\n            return 'US';\r\n\r\n        case 'Canada':\r\n            return 'CA';\r\n\r\n        case 'United Kingdom':\r\n            return 'GB';\r\n\r\n        default:\r\n            return country;\r\n    }\r\n}\r\n","import { useEffect, useState, useCallback, useRef } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport type { ChangeEvent } from 'react';\r\nimport { Title } from '../../components/Title';\r\nimport {\r\n    Box,\r\n    Card,\r\n    CardContent,\r\n    Typography,\r\n    Grid,\r\n    Container,\r\n    Divider,\r\n    CardHeader,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TableRow,\r\n    useMediaQuery,\r\n    Theme,\r\n    Button,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    Snackbar,\r\n    Alert,\r\n    Tabs,\r\n    Tab,\r\n    TextField,\r\n} from '@mui/material';\r\nimport { useForm } from 'react-hook-form';\r\nimport type { QuoteCheckoutInfo } from '../../types/reseller';\r\nimport { resellerService } from '../../reseller.service';\r\nimport { useMounted } from '../../hooks/use-mounted';\r\nimport { Scrollbar } from '../../components/Scrollbar';\r\nimport { PropertyList } from '../../components/PropertyList';\r\nimport { PropertyListItem } from '../../components/PropertyListItem';\r\nimport numeral from 'numeral';\r\nimport CreditCard from 'react-credit-cards';\r\nimport { formatCreditCardNumber, formatExpirationDate, formatCVC } from '../../utils/credit-cards';\r\nimport 'react-credit-cards/es/styles-compiled.css';\r\nimport creditCards from '../../images/credit-cards.png';\r\nimport { IToastState, defaultToastState } from '../../components/ToastState';\r\nimport Message from '../Message';\r\nimport PaypalImg from '../../images/paypal.svg';\r\nimport { styled } from '@mui/material/styles';\r\nimport { settings } from '../../settings';\r\nimport { checkZip } from '../../utils/cart';\r\nimport { CountryNameToCode, shortProvinceOrStateName } from '../../utils/cart';\r\n\r\nconst tabs = [\r\n    { label: 'Billing', value: 'billing' },\r\n    { label: 'Shipping', value: 'shipping' },\r\n];\r\n\r\nconst PaypalButton = styled(Button)(({ theme }) => ({\r\n    backgroundColor: '#ffc439',\r\n    backgroundImage: `url(${PaypalImg})`,\r\n    backgroundRepeat: 'no-repeat',\r\n    backgroundPosition: 'center',\r\n}));\r\n\r\nconst translateCardType = (issuer: string): string => {\r\n    switch (issuer) {\r\n        case 'visa':\r\n            return 'VISA';\r\n        case 'mastercard':\r\n            return 'MC';\r\n        case 'amex':\r\n            return 'AMEX';\r\n        case 'dinersclub':\r\n            return 'DINE';\r\n        case 'discover':\r\n            return 'DISC';\r\n        default:\r\n            return '';\r\n    }\r\n};\r\n\r\ninterface PaypalData {\r\n    firstName: string;\r\n    lastName: string;\r\n    address: string;\r\n    city: string;\r\n    zip: string;\r\n    country: string;\r\n    state: string;\r\n    email: string;\r\n    phone_a: string;\r\n    phone_b: string;\r\n    phone_c: string;\r\n}\r\nfunction emptyPaypalData(): PaypalData {\r\n    return {\r\n        firstName: '',\r\n        lastName: '',\r\n        address: '',\r\n        city: '',\r\n        zip: '',\r\n        country: '',\r\n        state: '',\r\n        email: '',\r\n        phone_a: '',\r\n        phone_b: '',\r\n        phone_c: '',\r\n    };\r\n}\r\n\r\nconst ANNUAL_SUPPORT_ID = 36;\r\n\r\nexport const QuoteCheckout = () => {\r\n    const { orderId } = useParams();\r\n    const smDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\r\n    const align = smDown ? 'vertical' : 'horizontal';\r\n\r\n    const isMounted = useMounted();\r\n    const [currentTab, setCurrentTab] = useState<string>('billing');\r\n    const [info, setInfo] = useState<QuoteCheckoutInfo | null>(null);\r\n    const [memo, setMemo] = useState<string>('');\r\n    const [isAnnualSupport, setIsAnnualSupport] = useState<boolean>(false);\r\n\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n    const [dialogTitle, setDialogTitle] = useState('');\r\n    const [openBlacklistedDialog, setOpenBlacklistedDialog] = useState(false);\r\n    const [openMonerisDialog, setOpenMonerisDialog] = useState(false);\r\n    const [dialogMessage, setDialogMessage] = useState('');\r\n    const [dialogFollowLink, setDialogFollowLink] = useState('');\r\n    const [toastState, setToastState] = useState<IToastState>(defaultToastState);\r\n    const { handleSubmit } = useForm<QuoteCheckoutInfo>();\r\n\r\n    const [paypalData, setPaypalData] = useState<PaypalData>(emptyPaypalData());\r\n    const refPaypalSubmitButton = useRef<HTMLButtonElement>(null);\r\n    const { handleSubmit: handleSubmitPayPal } = useForm<PaypalData>();\r\n\r\n    const [cardNumber, setCardNumber] = useState<string>('');\r\n    const [expiry, setExpiry] = useState<string>('');\r\n    const [cvc, setCvc] = useState<string>('');\r\n    const [focused, setFocused] = useState<string>('');\r\n    const [issuer, setIssuer] = useState<string>('');\r\n    const [inProgress, setInProgress] = useState<boolean>(false);\r\n    const [loadError, setLoadError] = useState<string>(undefined);\r\n\r\n    const loadData = useCallback(async () => {\r\n        try {\r\n            const data = await resellerService.getQuoteCheckoutInfo(orderId);\r\n            if (isMounted()) {\r\n                if (data.ok) {\r\n                    setInfo(data.body);\r\n                    setMemo(data.body.billingFax);\r\n                    if (data.body.items.length === 1 && data.body.items[0].productId === ANNUAL_SUPPORT_ID) {\r\n                        setIsAnnualSupport(true);\r\n                    }\r\n                } else {\r\n                    setLoadError(data.message);\r\n                }\r\n            }\r\n        } catch (err) {\r\n            console.error(err);\r\n        }\r\n    }, [isMounted]);\r\n\r\n    useEffect(() => {\r\n        loadData();\r\n    }, []);\r\n\r\n    const handleTabsChange = (event: ChangeEvent<{}>, value: string): void => {\r\n        setCurrentTab(value);\r\n    };\r\n\r\n    const handleCallback = ({ issuer }, isValid) => {\r\n        if (isValid) {\r\n            setIssuer(issuer);\r\n        } else {\r\n            setIssuer('');\r\n        }\r\n    };\r\n\r\n    const handleInputFocus = ({ target }) => {\r\n        setFocused(target.name);\r\n    };\r\n\r\n    const handleInputChange = ({ target }) => {\r\n        if (target.name === 'number') {\r\n            target.value = formatCreditCardNumber(target.value);\r\n            setCardNumber(target.value);\r\n        } else if (target.name === 'expiry') {\r\n            target.value = formatExpirationDate(expiry, target.value);\r\n            setExpiry(target.value);\r\n        } else if (target.name === 'cvc') {\r\n            target.value = formatCVC(target.value, cardNumber);\r\n            setCvc(target.value);\r\n        } else if (target.name === 'memo') {\r\n            setMemo(target.value);\r\n        }\r\n    };\r\n\r\n    const handleCloseBlacklistedDialog = () => {};\r\n    const handleCancelBlacklistedDialog = () => {\r\n        setOpenBlacklistedDialog(false);\r\n    };\r\n\r\n    const handleCloseMonerisDialog = () => {};\r\n    const handleCancelMonerisDialog = () => {\r\n        setOpenMonerisDialog(false);\r\n    };\r\n\r\n    const onSubmit = async (data: QuoteCheckoutInfo) => {\r\n        setInProgress(true);\r\n        let request: any = {\r\n            order_id: orderId,\r\n            bill_first_name: info.billingFirstName,\r\n            bill_last_name: info.billingLastName,\r\n            bill_company: info.billingCompany,\r\n            bill_address_one: info.billingAddress,\r\n            bill_city: info.billingCity,\r\n            bill_state_or_province: info.billingState,\r\n            bill_country: info.billingCountry,\r\n            bill_postal_code: info.billingZip,\r\n            bill_email: info.billingEmail,\r\n            bill_phone: info.billingPhone,\r\n            bill_fax: memo,\r\n            bill_po: '',\r\n            credit_card_brand: translateCardType(issuer),\r\n            credit_card_number: cardNumber.replaceAll(' ', ''),\r\n            expire_month: expiry.substr(0, 2),\r\n            expire_year: '20' + expiry.substr(3, 2),\r\n            cvv: cvc,\r\n            bill_amount: info.total,\r\n            discount_amount: info.discount,\r\n            bill_gst: info.gst,\r\n            bill_pst: info.pst,\r\n            comments: isAnnualSupport ? memo : '',\r\n        };\r\n        info.items.forEach((item, idx) => {\r\n            request[`product_id${idx > 0 ? idx : ''}`] = item.productId;\r\n            request[`product${idx > 0 ? idx : ''}`] = item.productName;\r\n            request[`license${idx > 0 ? idx : ''}`] = item.licenseId;\r\n            request[`quantity${idx > 0 ? idx : ''}`] = item.qty;\r\n            request[`product_amount${idx > 0 ? idx : ''}`] = item.amount;\r\n        });\r\n\r\n        const response = await resellerService.checkout(request);\r\n\r\n        if (response == null) {\r\n            setDialogTitle('Transaction Failed');\r\n            setDialogMessage('Server communication error');\r\n            setDialogFollowLink('');\r\n            setOpenDialog(true);\r\n            setInProgress(false);\r\n        } else if (!response.status) {\r\n            if (response.message === 'Blacklisted') {\r\n                setOpenBlacklistedDialog(true);\r\n                setInProgress(false);\r\n            } else if (response.message === 'moneris problem') {\r\n                setOpenMonerisDialog(true);\r\n                setInProgress(false);\r\n            } else {\r\n                setDialogTitle('Transaction Failed');\r\n                setDialogMessage(response.message);\r\n                setDialogFollowLink('');\r\n                setOpenDialog(true);\r\n                setInProgress(false);\r\n            }\r\n        } else {\r\n            setIssuer('');\r\n            setCardNumber('');\r\n            setExpiry('');\r\n            setCvc('');\r\n            setInProgress(false);\r\n            setDialogTitle('Success');\r\n            setDialogMessage('Payment was successfully processed');\r\n            setDialogFollowLink(`https://secure.lsoft.net/invoices/${response.order}?`);\r\n            setOpenDialog(true);\r\n        }\r\n    };\r\n\r\n    const triggerPaypalSubmit = () => {\r\n        refPaypalSubmitButton?.current?.click();\r\n    };\r\n    const onSubmitPaypal = async (data) => {\r\n        setOpenBlacklistedDialog(false);\r\n        setOpenMonerisDialog(false);\r\n\r\n        // check if zip code is valid for US, because Paypal freezes if US zip code is invalid; for other countries it's not a problem\r\n        // if zip is missing, address, city etc are ignored by Paypal\r\n        const country: string = CountryNameToCode(info.billingCountry);\r\n        const zip: string = country === 'US' && !checkZip(info.billingZip) ? '' : info.billingZip;\r\n        const state: string =\r\n            country === 'CA' || country === 'US' ? shortProvinceOrStateName(info.billingState) : info.billingState;\r\n\r\n        // phone number is split into 3 parts for US; other countries have only one part but area codes are checked by Paypal\r\n        let phone_a = '';\r\n        let phone_b = '';\r\n        let phone_c = '';\r\n\r\n        if (country === 'US' && info.billingPhone.length === 10) {\r\n            phone_a = info.billingPhone.substring(0, 3);\r\n            phone_b = info.billingPhone.substring(3, 6);\r\n            phone_c = info.billingPhone.substring(6, 10);\r\n        } else {\r\n            phone_a = info.billingPhone;\r\n        }\r\n\r\n        const updatedPaypalData: PaypalData = {\r\n            firstName: info.billingFirstName,\r\n            lastName: info.billingLastName,\r\n            address: info.billingAddress,\r\n            city: info.billingCity,\r\n            zip: zip,\r\n            country: country,\r\n            state: state,\r\n            email: info.billingEmail,\r\n            phone_a: phone_a,\r\n            phone_b: phone_b,\r\n            phone_c: phone_c,\r\n        };\r\n        setPaypalData(updatedPaypalData);\r\n\r\n        triggerPaypalSubmit();\r\n    };\r\n\r\n    const onDialogOk = () => {\r\n        setOpenDialog(false);\r\n        if (dialogFollowLink.length > 0) {\r\n            window.open(dialogFollowLink, '_blank');\r\n        }\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    if (loadError) {\r\n        return <Message title=\"Invalid Request\" message={loadError} />;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Title title=\"Checkout\" />\r\n            <Box\r\n                component=\"main\"\r\n                sx={{\r\n                    flexGrow: 1,\r\n                    py: 3,\r\n                }}\r\n            >\r\n                <Container maxWidth=\"lg\">\r\n                    <Dialog\r\n                        open={openDialog}\r\n                        onClose={() => setOpenDialog(false)}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">{dialogTitle}</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">{dialogMessage}</DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button onClick={() => onDialogOk()} autoFocus>\r\n                                OK\r\n                            </Button>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openBlacklistedDialog}\r\n                        onClose={handleCloseBlacklistedDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment pre-processing validation failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelBlacklistedDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    OK\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openMonerisDialog}\r\n                        onClose={handleCloseMonerisDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment processing failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                We experience payment processing issues with our provider. You can try again to process\r\n                                payment later on, or use PayPal as a credit card payment processor.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelMonerisDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    Use PayPal\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Snackbar\r\n                        open={toastState.open}\r\n                        autoHideDuration={6000}\r\n                        onClose={handleCloseSnackbar}\r\n                        anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                    >\r\n                        <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                            {toastState.message}\r\n                        </Alert>\r\n                    </Snackbar>\r\n\r\n                    <Grid container spacing={3}>\r\n                        <Grid item xs={12}>\r\n                            <Card>\r\n                                <CardHeader title=\"Order Summary\" />\r\n                                <CardContent sx={{ py: 0 }}>\r\n                                    <Scrollbar>\r\n                                        <Box sx={{ minWidth: 700 }}>\r\n                                            <Table>\r\n                                                <TableHead>\r\n                                                    <TableRow>\r\n                                                        <TableCell>Product</TableCell>\r\n                                                        <TableCell>License</TableCell>\r\n                                                        <TableCell align=\"right\">Price</TableCell>\r\n                                                        <TableCell align=\"right\">Quantity</TableCell>\r\n                                                        <TableCell align=\"right\">Amount</TableCell>\r\n                                                    </TableRow>\r\n                                                </TableHead>\r\n                                                <TableBody>\r\n                                                    {info &&\r\n                                                        info.items.map((product, idx) => (\r\n                                                            <TableRow key={idx}>\r\n                                                                <TableCell>{product.productName}</TableCell>\r\n                                                                <TableCell>{product.licenseName}</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    {numeral(product.price).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">{product.qty}</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    {numeral(product.amount).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        ))}\r\n                                                    {info && info.discount > 0 && (\r\n                                                        <TableRow>\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    Discount\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    {numeral(info.discount).format('0,0.00')}\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    )}\r\n\r\n                                                    {info && info.tax > 0 && (\r\n                                                        <TableRow>\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell align=\"right\">Tax</TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                {numeral(info.tax).format('0,0.00')}\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    )}\r\n\r\n                                                    {info && (\r\n                                                        <TableRow>\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    Order Total\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    US$ {numeral(info.total).format('0,0.00')}\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    )}\r\n                                                </TableBody>\r\n                                            </Table>\r\n                                        </Box>\r\n                                    </Scrollbar>\r\n                                </CardContent>\r\n                            </Card>\r\n                        </Grid>\r\n                        <Grid item md={6} xs={12}>\r\n                            <Tabs\r\n                                indicatorColor=\"primary\"\r\n                                onChange={handleTabsChange}\r\n                                scrollButtons=\"auto\"\r\n                                textColor=\"primary\"\r\n                                value={currentTab}\r\n                                variant=\"scrollable\"\r\n                            >\r\n                                {tabs.map((tab) => (\r\n                                    <Tab key={tab.value} label={tab.label} value={tab.value} />\r\n                                ))}\r\n                            </Tabs>\r\n                            <Divider sx={{ mb: 3 }} />\r\n                            {currentTab === 'shipping' && (\r\n                                <Box>\r\n                                    <Card>\r\n                                        <Box sx={{ px: 3 }}>\r\n                                            <PropertyList>\r\n                                                <PropertyListItem align={align} label=\"Name\">\r\n                                                    <Typography color=\"primary\" variant=\"body1\">\r\n                                                        {info && `${info.shippingFirstName} ${info.shippingLastName}`}\r\n                                                    </Typography>\r\n                                                </PropertyListItem>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Company\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingCompany}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Address\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingAddress}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"City\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingCity}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"State / Province\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingState}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Zip / Postal code\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingZip}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Country\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingCountry}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Phone\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.shippingPhone}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Email\">\r\n                                                        <Typography variant=\"body1\" color=\"primary\">\r\n                                                            {info && info.shippingEmail}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                            </PropertyList>\r\n                                        </Box>\r\n                                    </Card>\r\n                                </Box>\r\n                            )}\r\n                            {currentTab === 'billing' && (\r\n                                <Box>\r\n                                    <Card>\r\n                                        <Box sx={{ px: 3 }}>\r\n                                            <PropertyList>\r\n                                                <PropertyListItem align={align} label=\"Name\">\r\n                                                    <Typography color=\"primary\" variant=\"body1\">\r\n                                                        {info && `${info.billingFirstName} ${info.billingLastName}`}\r\n                                                    </Typography>\r\n                                                </PropertyListItem>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Company\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingCompany}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Address\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingAddress}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"City\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingCity}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"State / Province\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingState}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Zip / Postal code\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingZip}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Country\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingCountry}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Phone\">\r\n                                                        <Typography variant=\"body1\">\r\n                                                            {info && info.billingPhone}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                                <Box>\r\n                                                    <PropertyListItem align={align} label=\"Email\">\r\n                                                        <Typography variant=\"body1\" color=\"primary\">\r\n                                                            {info && info.billingEmail}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n\r\n                                                <Box>\r\n                                                    <PropertyListItem\r\n                                                        align={align}\r\n                                                        label={isAnnualSupport ? 'Original Order ID' : 'Memo *'}\r\n                                                    >\r\n                                                        {isAnnualSupport && (\r\n                                                            <Typography color=\"primary\" variant=\"body1\">\r\n                                                                {info && `${info.comments}`}\r\n                                                            </Typography>\r\n                                                        )}\r\n                                                        {!isAnnualSupport && (\r\n                                                            <Box\r\n                                                                sx={{\r\n                                                                    display: 'flex',\r\n                                                                    alignItems: 'center',\r\n                                                                }}\r\n                                                            >\r\n                                                                {info && (\r\n                                                                    <TextField\r\n                                                                        name=\"memo\"\r\n                                                                        size=\"small\"\r\n                                                                        required\r\n                                                                        value={memo}\r\n                                                                        onChange={handleInputChange}\r\n                                                                        onFocus={handleInputFocus}\r\n                                                                        sx={{\r\n                                                                            flexGrow: 1,\r\n                                                                        }}\r\n                                                                    />\r\n                                                                )}\r\n                                                            </Box>\r\n                                                        )}\r\n                                                    </PropertyListItem>\r\n                                                </Box>\r\n                                                <Divider />\r\n                                            </PropertyList>\r\n                                        </Box>\r\n                                    </Card>\r\n                                </Box>\r\n                            )}\r\n                        </Grid>\r\n\r\n                        <Grid item md={6} xs={12}>\r\n                            <Box sx={{ height: '100%' }}>\r\n                                <Card sx={{ height: '100%' }}>\r\n                                    <CardContent sx={{ px: 3 }}>\r\n                                        <Box\r\n                                            sx={{\r\n                                                mt: 0,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Box>\r\n                                                <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\r\n                                                    <Typography variant=\"h6\">Pay with &nbsp;</Typography>\r\n                                                    <img alt=\"credit cards\" style={{ width: 340 }} src={creditCards} />\r\n                                                </Box>\r\n\r\n                                                <CreditCard\r\n                                                    acceptedCards={[\r\n                                                        'visa',\r\n                                                        'mastercard',\r\n                                                        'amex',\r\n                                                        'dinersclub',\r\n                                                        'discover',\r\n                                                    ]}\r\n                                                    number={cardNumber}\r\n                                                    name=\"\"\r\n                                                    expiry={expiry}\r\n                                                    cvc={cvc}\r\n                                                    focused={focused}\r\n                                                    callback={handleCallback}\r\n                                                />\r\n                                            </Box>\r\n                                            <Box>\r\n                                                <Grid container columnSpacing={3}>\r\n                                                    <Grid item xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"number\"\r\n                                                            value={cardNumber}\r\n                                                            required\r\n                                                            label=\"Card Number\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"expiry\"\r\n                                                            value={expiry}\r\n                                                            required\r\n                                                            label=\"Valid Thru (MM/YY)\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"cvc\"\r\n                                                            value={cvc}\r\n                                                            label=\"CVC\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n\r\n                                                    <Grid item xs={12}>\r\n                                                        <form id=\"payment\" onSubmit={handleSubmit(onSubmit)}>\r\n                                                            <Button\r\n                                                                color=\"primary\"\r\n                                                                variant=\"contained\"\r\n                                                                type=\"submit\"\r\n                                                                fullWidth\r\n                                                                disabled={!issuer || expiry.length !== 5 || inProgress}\r\n                                                                sx={{ mt: 3 }}\r\n                                                            >\r\n                                                                Pay\r\n                                                            </Button>\r\n                                                        </form>\r\n\r\n                                                        <Divider sx={{ m: 3 }} variant=\"middle\">\r\n                                                            OR\r\n                                                        </Divider>\r\n\r\n                                                        <form\r\n                                                            action=\"https://www.paypal.com/cgi-bin/webscr\"\r\n                                                            method=\"post\"\r\n                                                            target=\"_new\"\r\n                                                        >\r\n                                                            {info && (\r\n                                                                <>\r\n                                                                    <input type=\"hidden\" name=\"cmd\" value=\"_xclick\" />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"business\"\r\n                                                                        value=\"company@lsoft.net\"\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"currency_code\"\r\n                                                                        value=\"USD\"\r\n                                                                    />\r\n                                                                    <input type=\"hidden\" name=\"lc\" value=\"US\" />\r\n                                                                    <input\r\n                                                                        name=\"item_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"item_name\"\r\n                                                                        value={info.paypalProductName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"amount\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"amount\"\r\n                                                                        value={info.paypalAmount}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"custom\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"custom\"\r\n                                                                        value={`MEMO: ${memo}`}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"invoice\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"invoice\"\r\n                                                                        value={orderId}\r\n                                                                    />\r\n\r\n                                                                    <input\r\n                                                                        name=\"first_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"first_name\"\r\n                                                                        value={paypalData.firstName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"last_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"last_name\"\r\n                                                                        value={paypalData.lastName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"address1\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.address}\r\n                                                                    />\r\n                                                                    <input name=\"address2\" type=\"hidden\" value=\"\" />\r\n                                                                    <input\r\n                                                                        name=\"city\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.city}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"country\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.country}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"state\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.state}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"zip\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.zip}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_a\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_a}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_b\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_b}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_c\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_c}\r\n                                                                    />\r\n                                                                </>\r\n                                                            )}\r\n                                                            <button\r\n                                                                hidden={true}\r\n                                                                ref={refPaypalSubmitButton}\r\n                                                                type={'submit'}\r\n                                                            />\r\n                                                        </form>\r\n\r\n                                                        <form\r\n                                                            id=\"payment\"\r\n                                                            onSubmit={handleSubmitPayPal(onSubmitPaypal)}\r\n                                                        >\r\n                                                            <PaypalButton variant=\"contained\" fullWidth type=\"submit\">\r\n                                                                &nbsp;\r\n                                                            </PaypalButton>\r\n                                                        </form>\r\n                                                    </Grid>\r\n                                                </Grid>\r\n                                            </Box>\r\n                                        </Box>\r\n                                    </CardContent>\r\n                                </Card>\r\n                            </Box>\r\n                        </Grid>\r\n                        <Grid item xs={12} sx={{}}>\r\n                            <Divider />\r\n                            <Box sx={{ mt: 3, display: 'flex', justifyContent: 'center' }}>\r\n                                <Typography variant=\"subtitle2\">\r\n                                    Secure payment services provided by{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        Royal Bank of Canada\r\n                                    </Box>{' '}\r\n                                    and{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        LSoft Technologies\r\n                                    </Box>\r\n                                </Typography>\r\n                            </Box>\r\n                        </Grid>\r\n                    </Grid>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { http } from './http';\r\nimport type { HttpResponse } from './http';\r\n\r\nexport const cartService = {\r\n    getProduct,\r\n    getDiscount,\r\n    getPaypalInfo,\r\n    checkout,\r\n    isBlackListed,\r\n};\r\n\r\nexport interface CartProduct {\r\n    productId: number;\r\n    productName: string;\r\n    licenseId: number;\r\n    licenseName: string;\r\n    price: number;\r\n    qty: number;\r\n    amount: number;\r\n}\r\n\r\nexport interface CartProductResponse {\r\n    productId: number;\r\n    productName: string;\r\n    areaProduct: string;\r\n    licenseId: number;\r\n    licenseName: string;\r\n    price: number;\r\n    qty: number;\r\n    amount: number;\r\n    includedInDataStudio: boolean;\r\n    productShort: string;\r\n    showPromo: boolean;\r\n    promoProductId: number;\r\n    promoProductName: string;\r\n    promoLicenseId: number;\r\n    promoLicenseName: string;\r\n    promoPrice: number;\r\n    promoQty: number;\r\n    promoAmount: number;\r\n    promoDiscount: number;\r\n    promoSavings: number;\r\n}\r\n\r\nexport interface OrderTax {\r\n    name: string;\r\n    amount: number;\r\n}\r\n\r\nexport interface CartInfo {\r\n    products: CartProduct[];\r\n    discountCode: string;\r\n    taxes: Array<OrderTax>;\r\n    discount: number;\r\n    total: number;\r\n}\r\n\r\nexport interface CartUpdateResponse {\r\n    pid: number;\r\n    lic: number;\r\n    qty: number;\r\n}\r\n\r\nexport interface CartDiscount {\r\n    discount: number;\r\n    resellerId: number;\r\n}\r\n\r\nexport interface CartCheckoutRequest {\r\n    bill_first_name: string;\r\n    bill_last_name: string;\r\n    bill_company: string;\r\n    bill_address_one: string;\r\n    bill_city: string;\r\n    bill_state_or_province: string;\r\n    bill_country: string;\r\n    bill_postal_code: string;\r\n    bill_email: string;\r\n    bill_phone: string;\r\n    bill_fax?: string;\r\n    bill_po?: string;\r\n    credit_card_brand: string;\r\n    credit_card_number: string;\r\n    expire_month: string;\r\n    expire_year: string;\r\n    cvv: string;\r\n    bill_amount: number;\r\n    discount_amount: number;\r\n    discount_code?: string;\r\n    bill_gst: number;\r\n    bill_pst: number;\r\n    comments: string;\r\n    reseller_id?: number;\r\n    [key: string]: string | number;\r\n}\r\n\r\nexport interface CartCheckoutResponse {\r\n    status: boolean;\r\n    order: string;\r\n    message: string;\r\n}\r\n\r\nexport interface CartPaypalInfo {\r\n    nextOrderId: string;\r\n    ipAddress: string;\r\n    exchangeRate: number;\r\n}\r\n\r\nexport interface BlackListedRequest {\r\n    name: string;\r\n    email: string;\r\n    creditCard: string;\r\n}\r\n\r\nexport interface BlackListedResponse {\r\n    status: boolean;\r\n    message: string;\r\n}\r\n\r\nasync function getProduct(pid: number, lic: number, qty: number): Promise<HttpResponse<CartProductResponse>> {\r\n    const path = `/cart/product?pid=${pid}&lic=${lic}&qty=${qty}`;\r\n    const result = await http<CartProductResponse>({\r\n        path: path,\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function getDiscount(\r\n    subtotal: number,\r\n    discountCode: string,\r\n    pid: number,\r\n    lic: number,\r\n    qty: number\r\n): Promise<CartDiscount | null> {\r\n    const path = `/cart/discount?subtotal=${subtotal}&discountCode=${discountCode}&pid=${pid}&lic=${lic}&qty=${qty}`;\r\n    const result = await http<CartDiscount>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function getPaypalInfo(products: string): Promise<CartPaypalInfo | null> {\r\n    const path = `/cart/paypal?products=${products}`;\r\n    const result = await http<CartPaypalInfo>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function checkout(params: CartCheckoutRequest): Promise<CartCheckoutResponse | null> {\r\n    const result = await http<CartCheckoutResponse, any>({\r\n        path: 'https://secure.lsoft.net/OrderProcessBackend.aspx',\r\n        method: 'POST',\r\n        body: params,\r\n        formData: true,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function isBlackListed(request: BlackListedRequest): Promise<BlackListedResponse | null> {\r\n    const result = await http<BlackListedResponse, BlackListedRequest>({\r\n        path: `/cart/blacklisted`,\r\n        method: 'POST',\r\n        body: request,\r\n    });\r\n\r\n    if (result.ok) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n","// #region imports\r\nimport { useEffect, useState, useCallback, useRef } from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { Title } from '../../components/Title';\r\nimport {\r\n    Box,\r\n    Card,\r\n    CardContent,\r\n    Typography,\r\n    Grid,\r\n    Container,\r\n    Divider,\r\n    CardHeader,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TableRow,\r\n    Button,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    Snackbar,\r\n    Alert,\r\n    TextField,\r\n    Select,\r\n    Checkbox,\r\n    IconButton,\r\n} from '@mui/material';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport MenuItem from '@mui/material/MenuItem';\r\n\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport type { Tax } from '../../types/reseller';\r\nimport { resellerService } from '../../reseller.service';\r\nimport {\r\n    CartProduct,\r\n    CartProductResponse,\r\n    CartDiscount,\r\n    cartService,\r\n    CartPaypalInfo,\r\n    CartCheckoutRequest,\r\n} from '../../cart.service';\r\nimport { useMounted } from '../../hooks/use-mounted';\r\nimport { Scrollbar } from '../../components/Scrollbar';\r\nimport numeral from 'numeral';\r\nimport CreditCard from 'react-credit-cards';\r\nimport { formatCreditCardNumber, formatExpirationDate, formatCVC } from '../../utils/credit-cards';\r\nimport 'react-credit-cards/es/styles-compiled.css';\r\nimport creditCards from '../../images/credit-cards.png';\r\nimport { IToastState, defaultToastState } from '../../components/ToastState';\r\nimport type { Country } from '../../types/helper';\r\nimport PaypalImg from '../../images/paypal.svg';\r\nimport { usaStatesAndTerritories } from '../../utils/cart';\r\nimport { canadaProvinces } from '../../utils/cart';\r\nimport { checkZip } from '../../utils/cart';\r\nimport { settings } from '../../settings';\r\nimport styled from '@emotion/styled';\r\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\r\n// #endregion\r\n\r\n// #region styles\r\nconst PaypalButton = styled(Button)(({ theme }) => ({\r\n    backgroundColor: '#ffc439',\r\n    backgroundImage: `url(${PaypalImg})`,\r\n    backgroundRepeat: 'no-repeat',\r\n    backgroundPosition: 'center',\r\n}));\r\n\r\nconst PromoCard = styled(Card)(() => ({\r\n    height: '100%',\r\n}));\r\n\r\nconst PromoLink = styled.a`\r\n    color: #007bff;\r\n    text-decoration: underline;\r\n    cursor: pointer;\r\n`;\r\n\r\nconst PromoDialogLink = styled.a`\r\n    text-decoration: none;\r\n    cursor: pointer;\r\n`;\r\n\r\nconst PromoTitle = styled.div`\r\n    font-size: 24px;\r\n    text-align: center;\r\n`;\r\nconst PromoSubtitle = styled.div`\r\n    font-size: 16px;\r\n    font-style: italic;\r\n    text-align: center;\r\n    margin-bottom: 20px;\r\n`;\r\n\r\nconst PromoProduct = styled.div`\r\n    padding: 15px;\r\n    height: 100%;\r\n    text-align: center;\r\n    img {\r\n        display: block;\r\n        margin: 0 auto;\r\n    }\r\n`;\r\n\r\nconst PromoName = styled.h3`\r\n    font-family: 'Segoe UI', 'Roboto', 'Geneva', 'Verdana', 'sans-serif';\r\n    font-weight: 700;\r\n    font-size: 14px;\r\n    margin-bottom: 8px;\r\n    margin-top: 10px;\r\n    color: #0d2366;\r\n    line-height: 20px;\r\n    letter-spacing: 0.6px;\r\n`;\r\nconst PromoDescr = styled.p`\r\n    font-family: 'Segoe UI', Roboto, Geneva, Verdana, sans-serif;\r\n    font-size: 12px;\r\n    font-weight: 400;\r\n    text-align: left;\r\n    line-height: 20px;\r\n    color: #5b6070;\r\n    margin-top: 10px;\r\n`;\r\nconst PromoMore = styled.p`\r\n    text-align: center;\r\n    color: #007bff;\r\n    a,\r\n    a:visited {\r\n        text-decoration: none;\r\n        color: rgb(24, 117, 209);\r\n    }\r\n`;\r\n\r\nconst VertDivider = styled.div`\r\n    border-left: 1px solid #e0e0e0;\r\n    height: 100px;\r\n    margin-left: 20px;\r\n    margin-right: 20px;\r\n`;\r\n\r\n// #endregion\r\n\r\nconst translateCardType = (issuer: string): string => {\r\n    switch (issuer) {\r\n        case 'visa':\r\n            return 'VISA';\r\n        case 'mastercard':\r\n            return 'MC';\r\n        case 'amex':\r\n            return 'AMEX';\r\n        case 'dinersclub':\r\n            return 'DINE';\r\n        case 'discover':\r\n            return 'DISC';\r\n        default:\r\n            return '';\r\n    }\r\n};\r\n\r\nconst ANNUAL_SUPPORT_ID = 36;\r\nconst ANNUAL_SUPPORT_NAME = 'Annual Support and Updates';\r\nconst SITE_LICENSE = -1;\r\nconst ENTERPRISE_LICENSE = -2;\r\nconst UNLIMITED_LICENSE = -5;\r\nconst ANNUAL_SUPPORT_GENERAL = 15.0;\r\nconst ANNUAL_SUPPORT_SITE = 399.0;\r\nconst ANNUAL_SUPPORT_ENTERPRISE = 799.0;\r\nconst ANNUAL_SUPPORT_UNLIMITED = 499.0;\r\n\r\ninterface FormData {\r\n    email: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address: string;\r\n    city: string;\r\n    state: string;\r\n    zip: string;\r\n    phone: string;\r\n}\r\nfunction emptyFormData(): FormData {\r\n    return {\r\n        email: '',\r\n        firstName: '',\r\n        lastName: '',\r\n        company: '',\r\n        address: '',\r\n        city: '',\r\n        state: '',\r\n        zip: '',\r\n        phone: '',\r\n    };\r\n}\r\nfunction emptyPaypalData(): PaypalData {\r\n    return {\r\n        firstName: '',\r\n        lastName: '',\r\n        address: '',\r\n        city: '',\r\n        zip: '',\r\n        country: '',\r\n        state: '',\r\n        email: '',\r\n        phone: '',\r\n        phone_a: '',\r\n        phone_b: '',\r\n        phone_c: '',\r\n    };\r\n}\r\n\r\nfunction removePrefix(str, prefix) {\r\n    if (str.startsWith(prefix)) {\r\n        return str.slice(prefix.length);\r\n    }\r\n    return str;\r\n}\r\ninterface DiscountFormData {\r\n    discountCode: string;\r\n}\r\n\r\ninterface PaypalData {\r\n    firstName: string;\r\n    lastName: string;\r\n    address: string;\r\n    city: string;\r\n    zip: string;\r\n    country: string;\r\n    state: string;\r\n    email: string;\r\n    phone: string;\r\n    phone_a: string;\r\n    phone_b: string;\r\n    phone_c: string;\r\n}\r\n\r\nexport const CartCheckout = () => {\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n    const [dialogTitle, setDialogTitle] = useState('');\r\n    const [openInvoiceDialog, setOpenInvoiceDialog] = useState(false);\r\n    const [openBlacklistedDialog, setOpenBlacklistedDialog] = useState(false);\r\n    const [openMonerisDialog, setOpenMonerisDialog] = useState(false);\r\n    const [openPaypalDialog, setOpenPaypalDialog] = useState(false);\r\n    const [openPromoDialog, setOpenPromoDialog] = useState(false);\r\n    const [acceptedTerms, setAcceptedTerms] = useState(false);\r\n    const [invoiceDisabled, setInvoiceDisabled] = useState(false);\r\n    const [failMessage, setFailMessage] = useState('');\r\n    const [toastState, setToastState] = useState<IToastState>(defaultToastState);\r\n    const [inProgress, setInProgress] = useState<boolean>(false);\r\n\r\n    const [searchParams] = useSearchParams();\r\n    const navigate = useNavigate();\r\n    const isMounted = useMounted();\r\n\r\n    const [productInfo, setProductInfo] = useState<CartProductResponse | null>(null);\r\n    const [products, setProducts] = useState<CartProduct[]>([]);\r\n    const [upgraded, setUpgraded] = useState<boolean>(false);\r\n    const [total, setTotal] = useState<number>(0);\r\n    const [subtotal, setSubtotal] = useState<number>(0);\r\n    const [pid, setPid] = useState<number>(0);\r\n    const [discount, setDiscount] = useState<number>(0); // current discount (main or promo product)\r\n    const [mainDiscount, setMainDiscount] = useState<number>(0); // main product discount saved (if discount code applied)\r\n    const [discountCode, setDiscountCode] = useState<string>('');\r\n    const [reseller, setReseller] = useState<number>(0);\r\n    const [taxes, setTaxes] = useState<Tax[]>([]);\r\n    const [gst, setGst] = useState<number>(0);\r\n    const [pst, setPst] = useState<number>(0);\r\n\r\n    const [paypalInfo, setPaypalInfo] = useState<CartPaypalInfo | null>(null);\r\n    const [billing] = useState<FormData | null>(emptyFormData());\r\n    const [countries, setCountries] = useState<Country[]>([]);\r\n    const [country, setCountry] = useState<string>('');\r\n    const [canadaProvince, setCanadaProvince] = useState<number>(0);\r\n    const [usaState, setUsaState] = useState<number>(0);\r\n\r\n    const [paypalData, setPaypalData] = useState<PaypalData>(emptyPaypalData());\r\n    const [gotoHome, setGotoHome] = useState<boolean>(false);\r\n\r\n    const { handleSubmit, control, watch } = useForm<FormData>();\r\n    const paypalWatch = {\r\n        firstName: watch('firstName'),\r\n        lastName: watch('lastName'),\r\n        address: watch('address'),\r\n        city: watch('city'),\r\n        zip: watch('zip'),\r\n        state: watch('state'),\r\n        email: watch('email'),\r\n        phone: watch('phone'),\r\n    };\r\n\r\n    const { handleSubmit: handleSubmitPayPal } = useForm<PaypalData>();\r\n    const {\r\n        register: registerForm1,\r\n        handleSubmit: handleSubmitForm1,\r\n        formState: { errors: errorsForm1 },\r\n    } = useForm<DiscountFormData>();\r\n\r\n    const onPromoInfoClick = () => {\r\n        setOpenPromoDialog(true);\r\n    };\r\n\r\n    const showError = (message: string) => {\r\n        setFailMessage(message);\r\n        setOpenDialog(true);\r\n        setInProgress(false);\r\n        setGotoHome(true);\r\n    };\r\n\r\n    const onSubmitDiscountForm = async (data) => {\r\n        if (data.discountCode) {\r\n            // apply discount code not only to main product but also to promo product whatever is currently in the cart\r\n            const fetchedDiscount: CartDiscount = await cartService.getDiscount(\r\n                subtotal,\r\n                data.discountCode,\r\n                products[0].productId,\r\n                products[0].licenseId,\r\n                products[0].qty\r\n            );\r\n            if (fetchedDiscount.discount === 0) {\r\n                setToastState({ open: true, status: 'error', message: 'Failed to apply discount code' });\r\n            } else {\r\n                setToastState({ open: true, status: 'success', message: 'Discount code applied' });\r\n            }\r\n            setDiscount(fetchedDiscount.discount);\r\n            setDiscountCode(data.discountCode);\r\n            setMainDiscount(fetchedDiscount.discount); // save main product discount for later\r\n            setReseller(fetchedDiscount.resellerId);\r\n            const tax = calcTax(subtotal - fetchedDiscount.discount, country, canadaProvinces[canadaProvince].short);\r\n            calcTotal(products, fetchedDiscount.discount, tax);\r\n        }\r\n    };\r\n    const [cardNumber, setCardNumber] = useState<string>('');\r\n    const [expiry, setExpiry] = useState<string>('');\r\n    const [cvc, setCvc] = useState<string>('');\r\n    const [focused, setFocused] = useState<string>('');\r\n    const [issuer, setIssuer] = useState<string>('');\r\n\r\n    const [paypalTag, setPaypalTag] = useState<string>('');\r\n    const [paypalName, setPaypalName] = useState<string>('');\r\n    const [paypalAmount, setPaypalAmount] = useState<string>('');\r\n    const refSubmitButtom = useRef<HTMLButtonElement>(null);\r\n\r\n    const loadData = useCallback(async () => {\r\n        try {\r\n            const pid = parseInt(searchParams.get('pid'), 10);\r\n            const lic = parseInt(searchParams.get('lic'), 10);\r\n            const qty = parseInt(searchParams.get('qty'), 10);\r\n            if (isNaN(pid) || isNaN(lic) || isNaN(qty) || (lic < 0 && qty > 1)) {\r\n                showError('Invalid product parameters');\r\n            }\r\n            setPid(pid);\r\n\r\n            const response = await cartService.getProduct(pid, lic, qty);\r\n            if (!response.ok) {\r\n                showError(response.message);\r\n            }\r\n            const fetchedProductInfo = response.body;\r\n            setProductInfo(fetchedProductInfo);\r\n            const fetchedCountries: Country[] = await resellerService.getCountries();\r\n            if (isMounted()) {\r\n                const DEFAULT_SUPPORT_QTY = 0;\r\n                const newProducts = [\r\n                    fetchedProductInfo,\r\n                    calculatedSupport(fetchedProductInfo, DEFAULT_SUPPORT_QTY, false),\r\n                ];\r\n                calcTotal(newProducts, discount, gst + pst);\r\n                setProducts(newProducts);\r\n                setCountries(fetchedCountries);\r\n                setCountry('US');\r\n            }\r\n        } catch (err) {\r\n            console.error(err);\r\n        }\r\n    }, [isMounted]);\r\n\r\n    useEffect(() => {\r\n        loadData();\r\n    }, []);\r\n\r\n    // supportQty - 0: 1 year, 1: 2 years, 2: 3 years, 4: 5 years, 9: 10 years, 15: lifetime\r\n    // supportQty - how many EXTRA years of support to add\r\n    // price depends on the license type and qty of product (as well as promo product)\r\n    const calculatedSupport = (\r\n        productInfo: CartProductResponse,\r\n        supportQty: number,\r\n        upgraded: boolean\r\n    ): CartProduct => {\r\n        let supportPrice = 0;\r\n        switch (productInfo.licenseId) {\r\n            case SITE_LICENSE:\r\n                supportPrice = ANNUAL_SUPPORT_SITE;\r\n                break;\r\n            case ENTERPRISE_LICENSE:\r\n                supportPrice = ANNUAL_SUPPORT_ENTERPRISE;\r\n                break;\r\n            case UNLIMITED_LICENSE:\r\n                supportPrice = ANNUAL_SUPPORT_UNLIMITED;\r\n                break;\r\n            default:\r\n                supportPrice = ANNUAL_SUPPORT_GENERAL;\r\n                break;\r\n        }\r\n        if (upgraded) {\r\n            supportPrice = supportPrice * productInfo.promoQty;\r\n        } else {\r\n            supportPrice = supportPrice * productInfo.qty;\r\n        }\r\n        const supportProduct: CartProduct = {\r\n            productId: ANNUAL_SUPPORT_ID,\r\n            productName: ANNUAL_SUPPORT_NAME,\r\n            licenseId: productInfo.licenseId,\r\n            licenseName: productInfo.licenseName,\r\n            price: supportPrice,\r\n            qty: supportQty,\r\n            amount: supportPrice * supportQty,\r\n        };\r\n        return supportProduct;\r\n    };\r\n\r\n    const calcTotal = (products: CartProduct[], discount: number, tax: number): void => {\r\n        let total = 0;\r\n        let subtotal = 0;\r\n        products.forEach((product) => {\r\n            subtotal += product.amount;\r\n        });\r\n        const beforeTaxes = subtotal - discount;\r\n        total = beforeTaxes + tax;\r\n        setTotal(total);\r\n        setSubtotal(subtotal);\r\n    };\r\n\r\n    // #region handlers\r\n    const handleSupportChange = (event) => {\r\n        const newProducts = [...products];\r\n        const supportIdx = newProducts.findIndex((item) => item.productId === ANNUAL_SUPPORT_ID);\r\n        newProducts[supportIdx].qty = event.target.value;\r\n        newProducts[supportIdx].amount = newProducts[supportIdx].price * newProducts[supportIdx].qty;\r\n        setProducts(newProducts);\r\n        const newSubtotal = newProducts.reduce((acc, item) => acc + item.amount, 0);\r\n        const tax = calcTax(newSubtotal - discount, country, canadaProvinces[canadaProvince].short);\r\n        calcTotal(newProducts, discount, tax);\r\n    };\r\n\r\n    const handleCallback = ({ issuer }, isValid) => {\r\n        if (isValid) {\r\n            setIssuer(issuer);\r\n        } else {\r\n            setIssuer('');\r\n        }\r\n    };\r\n\r\n    const handleInputFocus = ({ target }) => {\r\n        setFocused(target.name);\r\n    };\r\n\r\n    const handleInputChange = ({ target }) => {\r\n        if (target.name === 'number') {\r\n            target.value = formatCreditCardNumber(target.value);\r\n            setCardNumber(target.value);\r\n        } else if (target.name === 'expiry') {\r\n            target.value = formatExpirationDate(expiry, target.value);\r\n            setExpiry(target.value);\r\n        } else if (target.name === 'cvc') {\r\n            target.value = formatCVC(target.value, cardNumber);\r\n            setCvc(target.value);\r\n        } else if (target.name === 'memo') {\r\n        }\r\n    };\r\n\r\n    const triggerSubmit = () => {\r\n        refSubmitButtom?.current?.click();\r\n    };\r\n\r\n    const onSubmitPaypal = async (data) => {\r\n        // can be called from PayPal dialog or from Blacklist dialog\r\n        setOpenPaypalDialog(false);\r\n        setOpenBlacklistedDialog(false);\r\n        setOpenMonerisDialog(false);\r\n\r\n        const fetchedPaypalInfo: CartPaypalInfo = await cartService.getPaypalInfo(`${pid},${ANNUAL_SUPPORT_ID}`);\r\n        setPaypalInfo(fetchedPaypalInfo);\r\n\r\n        // check if zip code is valid for US, because Paypal freezes if US zip code is invalid; for other countries it's not a problem\r\n        // if zip is missing, address, city etc are ignored by Paypal\r\n        const zip: string = country === 'US' && !checkZip(paypalWatch.zip) ? '' : paypalWatch.zip;\r\n        const state: string =\r\n            country === 'CA'\r\n                ? canadaProvinces[canadaProvince].short\r\n                : country === 'US'\r\n                ? usaStatesAndTerritories[usaState].short\r\n                : paypalData.state;\r\n\r\n        // phone number is split into 3 parts for US; other countries have only one part but area codes are checked by Paypal\r\n        let phone_a = '';\r\n        let phone_b = '';\r\n        let phone_c = '';\r\n\r\n        if (country === 'US' && paypalWatch.phone.length === 10) {\r\n            phone_a = paypalWatch.phone.substring(0, 3);\r\n            phone_b = paypalWatch.phone.substring(3, 6);\r\n            phone_c = paypalWatch.phone.substring(6, 10);\r\n        } else {\r\n            phone_a = paypalWatch.phone;\r\n        }\r\n        const updatedPaypalData = {\r\n            ...paypalWatch,\r\n            country: country,\r\n            phone_a: phone_a,\r\n            phone_b: phone_b,\r\n            phone_c: phone_c,\r\n            state: state,\r\n            zip: zip,\r\n        };\r\n        setPaypalData(updatedPaypalData);\r\n\r\n        let prefix = `${fetchedPaypalInfo.exchangeRate},${fetchedPaypalInfo.ipAddress}`;\r\n        if (discount > 0) {\r\n            prefix += `,${upgraded ? `UP-${productInfo.productShort}` : discountCode},-${discount.toFixed(2)}`;\r\n        } else {\r\n            prefix += ',,0.00';\r\n        }\r\n        let cartStr = '';\r\n        let itemName = '';\r\n        products.forEach((item, idx) => {\r\n            if (item.qty > 0) {\r\n                cartStr += `${idx > 0 ? ';' : ''}${item.productId},${item.licenseId},${item.qty},${item.price.toFixed(\r\n                    2\r\n                )},${item.amount.toFixed(2)},${item.productName}`;\r\n                itemName += `${idx > 0 ? ',' : ''}${item.productName}`;\r\n            }\r\n        });\r\n\r\n        const amount = subtotal - discount;\r\n        let tag = `${prefix};${cartStr}`;\r\n\r\n        setPaypalName(itemName);\r\n        setPaypalTag(tag);\r\n        setPaypalAmount(amount.toFixed(2));\r\n        triggerSubmit();\r\n    };\r\n\r\n    const onInvoice = () => {\r\n        setAcceptedTerms(false);\r\n        setInvoiceDisabled(true);\r\n        setOpenInvoiceDialog(true);\r\n    };\r\n\r\n    const onPayPal = () => {\r\n        setOpenPaypalDialog(true);\r\n    };\r\n\r\n    const handleAcceptTerms = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        if (event.target.checked) {\r\n            setAcceptedTerms(true);\r\n            setInvoiceDisabled(false);\r\n        } else {\r\n            setAcceptedTerms(false);\r\n            setInvoiceDisabled(true);\r\n        }\r\n    };\r\n\r\n    const handleCloseBlacklistedDialog = () => {};\r\n    const handleCancelBlacklistedDialog = () => {\r\n        setOpenBlacklistedDialog(false);\r\n    };\r\n\r\n    const handleCloseMonerisDialog = () => {};\r\n    const handleCancelMonerisDialog = () => {\r\n        setOpenMonerisDialog(false);\r\n    };\r\n\r\n    const handleCloseInvoiceDialog = () => {};\r\n    const handleCancelInvoiceDialog = () => {\r\n        setOpenInvoiceDialog(false);\r\n    };\r\n\r\n    const handleClosePromoDialog = () => {};\r\n    const handleCancelPromoDialog = () => {\r\n        setOpenPromoDialog(false);\r\n    };\r\n\r\n    const handleUpgrade = async () => {\r\n        setOpenPromoDialog(false);\r\n\r\n        // check if product is already in the cart\r\n        // const promoExists = products.find((item) => item.productId === productInfo.promoProductId);\r\n        if (upgraded) {\r\n            setUpgraded(false);\r\n            // revert back to original product\r\n            const mainProduct: CartProduct = {\r\n                productId: productInfo.productId,\r\n                productName: productInfo.productName,\r\n                licenseId: productInfo.licenseId,\r\n                licenseName: productInfo.licenseName,\r\n                price: productInfo.price,\r\n                qty: productInfo.qty,\r\n                amount: productInfo.amount,\r\n            };\r\n            const newProducts = [...products];\r\n            newProducts[0] = mainProduct;\r\n            setProducts(newProducts);\r\n            const newSubtotal = newProducts.reduce((acc, item) => acc + item.amount, 0);\r\n            setSubtotal(newSubtotal);\r\n            setDiscount(mainDiscount);\r\n            const tax = calcTax(newSubtotal - mainDiscount, country, canadaProvinces[canadaProvince].short);\r\n            calcTotal(newProducts, mainDiscount, tax);\r\n        } else {\r\n            setUpgraded(true);\r\n            setDiscount(productInfo.promoDiscount); // replace main product discount (if any) with promo discount\r\n\r\n            const promoProduct: CartProduct = {\r\n                productId: productInfo.promoProductId,\r\n                productName: productInfo.promoProductName,\r\n                licenseId: productInfo.promoLicenseId,\r\n                licenseName: productInfo.promoLicenseName,\r\n                price: productInfo.promoPrice,\r\n                qty: productInfo.promoQty,\r\n                amount: productInfo.promoAmount,\r\n            };\r\n            const newProducts = [...products];\r\n            // replace main product with promo product\r\n            newProducts[0] = promoProduct;\r\n            setProducts(newProducts);\r\n            const newSubtotal = newProducts.reduce((acc, item) => acc + item.amount, 0);\r\n            setSubtotal(newSubtotal);\r\n            const tax = calcTax(\r\n                newSubtotal - productInfo.promoDiscount,\r\n                country,\r\n                canadaProvinces[canadaProvince].short\r\n            );\r\n            calcTotal(newProducts, productInfo.promoDiscount, tax);\r\n        }\r\n    };\r\n\r\n    const onSubmitInvoice = async (data: FormData) => {\r\n        setOpenInvoiceDialog(false);\r\n        onSubmit(data, true);\r\n    };\r\n\r\n    const handleCancelPaypalDialog = () => {\r\n        setOpenPaypalDialog(false);\r\n    };\r\n\r\n    const onSubmitCreditCard = async (data: FormData) => {\r\n        onSubmit(data, false);\r\n    };\r\n\r\n    const onSubmit = async (data: FormData, isInvoice: boolean) => {\r\n        setInProgress(true);\r\n\r\n        let request: CartCheckoutRequest = {\r\n            bill_first_name: data.firstName,\r\n            bill_last_name: data.lastName,\r\n            bill_company: data.company,\r\n            bill_address_one: data.address,\r\n            bill_city: data.city,\r\n            bill_state_or_province:\r\n                country === 'CA'\r\n                    ? canadaProvinces[canadaProvince].long\r\n                    : country === 'US'\r\n                    ? usaStatesAndTerritories[usaState].long\r\n                    : data.state,\r\n            bill_country: country,\r\n            bill_postal_code: data.zip,\r\n            bill_email: data.email,\r\n            bill_phone: data.phone,\r\n\r\n            credit_card_brand: '',\r\n            credit_card_number: '',\r\n            expire_month: '',\r\n            expire_year: '',\r\n            cvv: '',\r\n\r\n            bill_amount: total,\r\n            discount_amount: discount,\r\n            discount_code: upgraded ? 'UP' : discount > 0 ? discountCode : '',\r\n            bill_gst: gst,\r\n            bill_pst: pst,\r\n            comments: upgraded ? productInfo.productShort : '', // used for memo\r\n        };\r\n        if (reseller > 0) {\r\n            request['reseller_id'] = reseller;\r\n        }\r\n        if (isInvoice) {\r\n            request['order_type'] = 'INV';\r\n        } else {\r\n            request['credit_card_brand'] = translateCardType(issuer);\r\n            request['credit_card_number'] = cardNumber.replaceAll(' ', '');\r\n            request['expire_month'] = expiry.substr(0, 2);\r\n            request['expire_year'] = '20' + expiry.substr(3, 2);\r\n            request['cvv'] = cvc;\r\n        }\r\n\r\n        products.forEach((item, idx) => {\r\n            if (item.qty > 0) {\r\n                request[`product_id${idx > 0 ? idx : ''}`] = item.productId;\r\n                request[`product${idx > 0 ? idx : ''}`] = item.productName;\r\n                request[`license${idx > 0 ? idx : ''}`] = item.licenseId;\r\n                request[`quantity${idx > 0 ? idx : ''}`] = item.qty;\r\n                request[`product_amount${idx > 0 ? idx : ''}`] = item.amount;\r\n            }\r\n        });\r\n\r\n        const response = await cartService.checkout(request);\r\n\r\n        if (response == null) {\r\n            setDialogTitle('Transaction Failed');\r\n            setFailMessage('Server communication error');\r\n            setOpenDialog(true);\r\n            setInProgress(false);\r\n        } else if (!response.status) {\r\n            if (response.message === 'Blacklisted') {\r\n                setOpenBlacklistedDialog(true);\r\n                setInProgress(false);\r\n            } else if (response.message === 'moneris problem') {\r\n                setOpenMonerisDialog(true);\r\n                setInProgress(false);\r\n            } else {\r\n                setDialogTitle('Transaction Failed');\r\n                setFailMessage(response.message);\r\n                setOpenDialog(true);\r\n                setInProgress(false);\r\n            }\r\n        } else {\r\n            const toast_message = isInvoice ? 'Invoice was successfully created' : 'Payment was successfully processed';\r\n            setToastState({ open: true, status: 'success', message: toast_message });\r\n            setIssuer('');\r\n            setCardNumber('');\r\n            setExpiry('');\r\n            setCvc('');\r\n            setInProgress(false);\r\n            window.open(`https://secure.lsoft.net/invoices/${response.order}`, '_blank');\r\n        }\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    const onCountryChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        const newCountry = event.target.value;\r\n        const tax = calcTax(subtotal - discount, newCountry, canadaProvinces[canadaProvince].short);\r\n        calcTotal(products, discount, tax);\r\n        setCountry(newCountry);\r\n    };\r\n\r\n    const onProvinceChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        const newProv = event.target.value;\r\n        const tax = calcTax(subtotal - discount, country, canadaProvinces[newProv].short);\r\n        calcTotal(products, discount, tax);\r\n        setCanadaProvince(Number.parseInt(newProv));\r\n    };\r\n\r\n    const onStateChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        setUsaState(Number.parseInt(event.target.value));\r\n    };\r\n\r\n    const handleCloseDialog = () => {\r\n        setOpenDialog(false);\r\n        if (gotoHome) {\r\n            navigate('/');\r\n        }\r\n    };\r\n\r\n    const calcTax = (beforeTaxes: number, newCountry: string, newProvince: string): number => {\r\n        let totalTax = 0;\r\n\r\n        if (newCountry === 'CA') {\r\n            let _gst = 0;\r\n            let _pst = 0;\r\n            switch (newProvince) {\r\n                case 'AB':\r\n                case 'NT':\r\n                case 'NU':\r\n                case 'YT':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    setTaxes([{ name: 'GST (5%)', amount: _gst }]);\r\n                    break;\r\n                case 'BC':\r\n                case 'MB':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    _pst = parseFloat((beforeTaxes * 0.07).toFixed(2));\r\n                    setTaxes([\r\n                        { name: 'GST (5%)', amount: _gst },\r\n                        { name: 'PST (7%)', amount: _pst },\r\n                    ]);\r\n                    break;\r\n                case 'NB':\r\n                case 'NL':\r\n                case 'NS':\r\n                case 'PE':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    _pst = parseFloat((beforeTaxes * 0.1).toFixed(2));\r\n                    setTaxes([{ name: 'HST (15%)', amount: _gst + _pst }]);\r\n                    break;\r\n                case 'ON':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    _pst = parseFloat((beforeTaxes * 0.08).toFixed(2));\r\n                    setTaxes([{ name: 'HST (13%)', amount: _gst + _pst }]);\r\n                    break;\r\n                case 'QC':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    _pst = parseFloat((beforeTaxes * 0.09975).toFixed(2));\r\n                    setTaxes([\r\n                        { name: 'GST (5%)', amount: _gst },\r\n                        { name: 'QST (9.975%)', amount: _pst },\r\n                    ]);\r\n                    break;\r\n                case 'SK':\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    _pst = parseFloat((beforeTaxes * 0.06).toFixed(2));\r\n                    setTaxes([\r\n                        { name: 'GST (5%)', amount: _gst },\r\n                        { name: 'PST (6%)', amount: _pst },\r\n                    ]);\r\n                    break;\r\n                default:\r\n                    _gst = parseFloat((beforeTaxes * 0.05).toFixed(2));\r\n                    setTaxes([{ name: 'GST (5%)', amount: _gst }]);\r\n                    break;\r\n            }\r\n            setGst(_gst);\r\n            setPst(_pst);\r\n            totalTax = _gst + _pst;\r\n        } else {\r\n            setGst(0);\r\n            setPst(0);\r\n            setTaxes([]);\r\n            totalTax = 0;\r\n        }\r\n        return totalTax;\r\n    };\r\n    // #endregion\r\n\r\n    return (\r\n        <>\r\n            <Title title=\"Checkout\" />\r\n            <Box\r\n                component=\"main\"\r\n                sx={{\r\n                    flexGrow: 1,\r\n                    py: 3,\r\n                }}\r\n            >\r\n                <Container maxWidth=\"lg\">\r\n                    <Dialog\r\n                        open={openDialog}\r\n                        onClose={handleCloseDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">{dialogTitle}</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">{failMessage}</DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button onClick={handleCloseDialog} autoFocus>\r\n                                OK\r\n                            </Button>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openPromoDialog}\r\n                        onClose={handleClosePromoDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogContent>\r\n                            <PromoTitle>Active@ Data Studio</PromoTitle>\r\n                            <PromoSubtitle>12 disk tools in one package</PromoSubtitle>\r\n                            <Box sx={{ mt: 2 }}>\r\n                                {productInfo && productInfo.includedInDataStudio && (\r\n                                    <Typography sx={{ my: 2, mx: 3, fontSize: 12 }}>\r\n                                        <span style={{ fontWeight: 'bold' }}>\r\n                                            Save ${numeral(productInfo.promoSavings).format('0,0.00')}\r\n                                        </span>{' '}\r\n                                        (cost of {productInfo.productName} (included) plus extra $\r\n                                        {numeral(productInfo.promoDiscount).format('0,0.00')} discount off the regular\r\n                                        Data Studio price) by{' '}\r\n                                        <span style={{ fontWeight: 'bold' }}>\r\n                                            upgrading to Active@ Data Studio for $\r\n                                            {numeral(productInfo.promoAmount - productInfo.promoDiscount).format(\r\n                                                '0,0.00'\r\n                                            )}\r\n                                        </span>\r\n                                        .\r\n                                    </Typography>\r\n                                )}\r\n                                {productInfo && !productInfo.includedInDataStudio && (\r\n                                    <Typography sx={{ my: 1, fontSize: 13 }}>\r\n                                        <span style={{ fontWeight: 'bold' }}>\r\n                                            Save ${numeral(productInfo.promoSavings).format('0,0.00')}\r\n                                        </span>{' '}\r\n                                        (discount off the regular Data Studio price) by{' '}\r\n                                        <span style={{ fontWeight: 'bold' }}>\r\n                                            upgrading to Active@ Data Studio for $\r\n                                            {numeral(productInfo.promoAmount - productInfo.promoDiscount).format(\r\n                                                '0,0.00'\r\n                                            )}\r\n                                        </span>\r\n                                        .\r\n                                    </Typography>\r\n                                )}\r\n                            </Box>\r\n\r\n                            <Grid container spacing={2} sx={{ padding: '0px' }}>\r\n                                <Grid item xs={12} sm={6}>\r\n                                    <PromoCard sx={{ backgroundColor: '#f8f9fa' }}>\r\n                                        <PromoProduct>\r\n                                            <img src=\"/static/icons/boot-disk.png\" width=\"40\" alt=\"boot disk\" />\r\n                                            <PromoName>Active@ Boot Disk</PromoName>\r\n                                            <PromoDescr>\r\n                                                Operating system on CD/USB disk. Gives full access to even non-bootable\r\n                                                PC and provides a platform for data recovery tools.\r\n                                            </PromoDescr>\r\n                                        </PromoProduct>\r\n                                    </PromoCard>\r\n                                </Grid>\r\n\r\n                                <Grid item xs={12} sm={6}>\r\n                                    <PromoCard sx={{ backgroundColor: '#f8f9fa' }}>\r\n                                        <PromoProduct>\r\n                                            <img src=\"/static/icons/killdisk.png\" width=\"40\" alt=\"killdisk\" />\r\n                                            <PromoName>Active@ KillDisk</PromoName>\r\n                                            <PromoDescr>\r\n                                                Destroy all data on hard disks, excluding any possibility of deleted\r\n                                                files and folders data recovery. Supports more than 20 international\r\n                                                data sanitizing standards.\r\n                                            </PromoDescr>\r\n                                        </PromoProduct>\r\n                                    </PromoCard>\r\n                                </Grid>\r\n                                <Grid item xs={12} sm={6}>\r\n                                    <PromoCard sx={{ backgroundColor: '#f8f9fa' }}>\r\n                                        <PromoProduct>\r\n                                            <img src=\"/static/icons/disk-image.png\" width=\"40\" alt=\"backup\" />\r\n                                            <PromoName>Active@ Disk Image</PromoName>\r\n                                            <PromoDescr>\r\n                                                Disk image software that makes an exact copy of any PC disk for backup\r\n                                                purposes.\r\n                                            </PromoDescr>\r\n                                        </PromoProduct>\r\n                                    </PromoCard>\r\n                                </Grid>\r\n\r\n                                <Grid item xs={12} sm={6}>\r\n                                    <PromoCard sx={{ backgroundColor: '#f8f9fa' }}>\r\n                                        <PromoProduct>\r\n                                            <img src=\"/static/icons/file-recovery.png\" width=\"40\" alt=\"file recovery\" />\r\n                                            <PromoName>Active@ File Recovery</PromoName>\r\n                                            <PromoDescr>\r\n                                                Restore deleted or lost files, damaged or re-formatted volumes, even if\r\n                                                your PC doesn't boot. Includes advanced disk editor and Virtual RAID\r\n                                                re-constructor.\r\n                                            </PromoDescr>\r\n                                        </PromoProduct>\r\n                                    </PromoCard>\r\n                                </Grid>\r\n                            </Grid>\r\n                            <Typography variant=\"body2\" sx={{ fontSize: 12, fontStyle: 'italic', mt: 2, mb: 2, mx: 3 }}>\r\n                                Includes{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/bootdisk/\" target=\"_blank\">\r\n                                    Active@ Boot Disk\r\n                                </PromoLink>\r\n                                ,{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/killdisk/\" target=\"_blank\">\r\n                                    Active@ KillDisk\r\n                                </PromoLink>\r\n                                ,{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/disk-image/\" target=\"_blank\">\r\n                                    Active@ Disk Image\r\n                                </PromoLink>\r\n                                ,{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/file-recovery/\" target=\"_blank\">\r\n                                    Active@ File Recovery\r\n                                </PromoLink>\r\n                                ,{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/partition-recovery/\" target=\"_blank\">\r\n                                    Active@ Partition Recovery\r\n                                </PromoLink>\r\n                                ,{' '}\r\n                                <PromoLink href=\"https://www.lsoft.net/undelete/\" target=\"_blank\">\r\n                                    Active@ UNDELETE\r\n                                </PromoLink>\r\n                                {', '}\r\n                                <PromoLink href=\"https://www.lsoft.net/password-changer/\" target=\"_blank\">\r\n                                    Active@ Password Changer\r\n                                </PromoLink>{' '}\r\n                                and more...\r\n                            </Typography>\r\n\r\n                            <PromoMore>\r\n                                <a href=\"https://www.lsoft.net/data-studio/\" target=\"_blank\" rel=\"noreferrer\">\r\n                                    Learn more about Data Studio »\r\n                                </a>\r\n                            </PromoMore>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelPromoDialog}>\r\n                                Cancel\r\n                            </Button>\r\n                            <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" onClick={handleUpgrade}>\r\n                                Upgrade\r\n                            </Button>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openBlacklistedDialog}\r\n                        onClose={handleCloseBlacklistedDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment pre-processing validation failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelBlacklistedDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    OK\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openMonerisDialog}\r\n                        onClose={handleCloseMonerisDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment processing failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                We experience payment processing issues with our provider. You can try again to process\r\n                                payment later on, or use PayPal as a credit card payment processor.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelMonerisDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    Use PayPal\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openInvoiceDialog}\r\n                        onClose={handleCloseInvoiceDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Software delivery terms</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                Software download will only be available after invoice has been paid.\r\n                            </DialogContentText>\r\n                            <Box sx={{ mt: 2 }}>\r\n                                <Checkbox\r\n                                    checked={acceptedTerms}\r\n                                    value={acceptedTerms}\r\n                                    color=\"primary\"\r\n                                    onChange={handleAcceptTerms}\r\n                                />\r\n                                I agree to software delivery terms\r\n                            </Box>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelInvoiceDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmit(onSubmitInvoice)}>\r\n                                <Button\r\n                                    sx={{ mr: 2 }}\r\n                                    color=\"primary\"\r\n                                    variant=\"contained\"\r\n                                    type=\"submit\"\r\n                                    disabled={invoiceDisabled}\r\n                                >\r\n                                    OK\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openPaypalDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">PayPal Payment</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                You will be redirected to PayPal website to process a payment.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 1 }}>\r\n                                You’ll have options to pay either through your PayPal account or using credit card as a\r\n                                guest.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 1 }}>\r\n                                After successful payment you will be redirected back to LSoft’s web site to get an\r\n                                invoice and software download with registration key.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelPaypalDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    OK\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Snackbar\r\n                        open={toastState.open}\r\n                        autoHideDuration={6000}\r\n                        onClose={handleCloseSnackbar}\r\n                        anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                    >\r\n                        <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                            {toastState.message}\r\n                        </Alert>\r\n                    </Snackbar>\r\n\r\n                    <Grid container spacing={2}>\r\n                        <Grid item xs={12}>\r\n                            <Card>\r\n                                <CardHeader title=\"Order Summary\" />\r\n                                <CardContent sx={{ py: 0 }}>\r\n                                    <Scrollbar>\r\n                                        <Box sx={{ minWidth: 700 }}>\r\n                                            <Table>\r\n                                                <TableHead>\r\n                                                    <TableRow>\r\n                                                        <TableCell>Product</TableCell>\r\n                                                        <TableCell>License</TableCell>\r\n                                                        <TableCell align=\"right\">Price</TableCell>\r\n                                                        <TableCell align=\"right\">Quantity</TableCell>\r\n                                                        <TableCell align=\"right\">Amount</TableCell>\r\n                                                    </TableRow>\r\n                                                </TableHead>\r\n                                                <TableBody>\r\n                                                    {products.map((product, idx) => (\r\n                                                        <TableRow key={idx}>\r\n                                                            <TableCell>\r\n                                                                {product.productId === ANNUAL_SUPPORT_ID ? (\r\n                                                                    <FormControl\r\n                                                                        variant=\"standard\"\r\n                                                                        sx={{ m: 0, minWidth: 120 }}\r\n                                                                    >\r\n                                                                        <Select\r\n                                                                            id=\"support-select-standard\"\r\n                                                                            value={product.qty}\r\n                                                                            onChange={handleSupportChange}\r\n                                                                            sx={{ fontSize: 14 }}\r\n                                                                        >\r\n                                                                            <MenuItem value={0}>\r\n                                                                                <em>\r\n                                                                                    Annual Support and Updates - 1 year\r\n                                                                                    (INCLUDED)\r\n                                                                                </em>\r\n                                                                            </MenuItem>\r\n                                                                            <MenuItem value={1}>\r\n                                                                                Annual Support and Updates - 2 years\r\n                                                                            </MenuItem>\r\n                                                                            <MenuItem value={2}>\r\n                                                                                Annual Support and Updates - 3 years\r\n                                                                            </MenuItem>\r\n                                                                            <MenuItem value={4}>\r\n                                                                                Annual Support and Updates - 5 years\r\n                                                                            </MenuItem>\r\n                                                                            <MenuItem value={9}>\r\n                                                                                Annual Support and Updates - 10 years\r\n                                                                            </MenuItem>\r\n                                                                            <MenuItem value={15}>\r\n                                                                                Annual Support and Updates - Lifetime\r\n                                                                            </MenuItem>\r\n                                                                        </Select>\r\n                                                                    </FormControl>\r\n                                                                ) : (\r\n                                                                    product.productName\r\n                                                                )}\r\n                                                            </TableCell>\r\n                                                            <TableCell>\r\n                                                                {product.qty > 0 ? product.licenseName : ''}\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                {product.qty > 0\r\n                                                                    ? '$' + numeral(product.price).format('0,0.00')\r\n                                                                    : ''}\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                {product.qty > 0 ? product.qty : ''}\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                {product.qty > 0\r\n                                                                    ? '$' + numeral(product.amount).format('0,0.00')\r\n                                                                    : ''}\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    ))}\r\n\r\n                                                    <TableRow>\r\n                                                        <TableCell />\r\n                                                        <TableCell />\r\n                                                        <TableCell />\r\n                                                        <TableCell align=\"right\">\r\n                                                            <Typography style={{ fontWeight: 600 }}>\r\n                                                                Subtotal\r\n                                                            </Typography>\r\n                                                        </TableCell>\r\n                                                        <TableCell align=\"right\">\r\n                                                            <Typography style={{ fontWeight: 600 }}>\r\n                                                                ${numeral(subtotal).format('0,0.00')}\r\n                                                            </Typography>\r\n                                                        </TableCell>\r\n                                                    </TableRow>\r\n\r\n                                                    {discount > 0 && (\r\n                                                        <TableRow>\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    Discount\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    -$\r\n                                                                    {numeral(discount).format('0,0.00')}\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    )}\r\n\r\n                                                    {taxes.map((tax, index) => {\r\n                                                        return (\r\n                                                            <TableRow key={index}>\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell align=\"right\">{tax.name}</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    ${numeral(tax.amount).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        );\r\n                                                    })}\r\n\r\n                                                    <TableRow>\r\n                                                        <TableCell />\r\n                                                        <TableCell />\r\n                                                        <TableCell />\r\n                                                        <TableCell align=\"right\">\r\n                                                            <Typography style={{ fontWeight: 600 }}>\r\n                                                                Order Total\r\n                                                            </Typography>\r\n                                                        </TableCell>\r\n                                                        <TableCell align=\"right\">\r\n                                                            <Typography style={{ fontWeight: 600 }}>\r\n                                                                ${numeral(total).format('0,0.00')}\r\n                                                            </Typography>\r\n                                                        </TableCell>\r\n                                                    </TableRow>\r\n                                                </TableBody>\r\n                                            </Table>\r\n\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    alignItems: 'center',\r\n                                                    alignContent: 'center',\r\n                                                    justifyContent: 'space-between',\r\n                                                    pt: 2,\r\n                                                }}\r\n                                            >\r\n                                                {true && (\r\n                                                    <Box\r\n                                                        sx={{\r\n                                                            display: 'flex',\r\n                                                            alignItems: 'center',\r\n                                                            alignContent: 'center',\r\n                                                            visibility: `${\r\n                                                                productInfo && productInfo.showPromo ? '' : 'hidden'\r\n                                                            }`,\r\n                                                        }}\r\n                                                    >\r\n                                                        {' '}\r\n                                                        <a\r\n                                                            href=\"https://www.disktools.com/\"\r\n                                                            target=\"_blank\"\r\n                                                            rel=\"noreferrer\"\r\n                                                        >\r\n                                                            <img\r\n                                                                src=\"/static/images/datastudio.png\"\r\n                                                                width=\"150\"\r\n                                                                alt=\"data studio\"\r\n                                                            />\r\n                                                        </a>\r\n                                                        <Box>\r\n                                                            <Box\r\n                                                                sx={{\r\n                                                                    display: 'flex',\r\n                                                                    alignItems: 'center',\r\n                                                                    alignContent: 'center',\r\n                                                                }}\r\n                                                            >\r\n                                                                <PromoDialogLink onClick={onPromoInfoClick}>\r\n                                                                    <Typography sx={{ fontSize: 20 }}>\r\n                                                                        Consider Active@ Data Studio Toolkit{' '}\r\n                                                                    </Typography>{' '}\r\n                                                                </PromoDialogLink>\r\n                                                                <IconButton\r\n                                                                    color=\"primary\"\r\n                                                                    aria-label=\"more info\"\r\n                                                                    onClick={onPromoInfoClick}\r\n                                                                >\r\n                                                                    <HelpOutlineIcon />\r\n                                                                </IconButton>\r\n                                                            </Box>\r\n                                                            <PromoDialogLink onClick={onPromoInfoClick}>\r\n                                                                <Typography\r\n                                                                    variant=\"overline\"\r\n                                                                    gutterBottom\r\n                                                                    sx={{\r\n                                                                        fontSize: 12,\r\n                                                                        display: 'block',\r\n                                                                        lineHeight: '15px',\r\n                                                                    }}\r\n                                                                >\r\n                                                                    {productInfo && productInfo.includedInDataStudio\r\n                                                                        ? `${removePrefix(\r\n                                                                              productInfo.areaProduct,\r\n                                                                              'Active@ '\r\n                                                                          )} plus 11 Disk Tools in One Package!`\r\n                                                                        : '12 Disk Tools in One Package!'}\r\n                                                                </Typography>{' '}\r\n                                                            </PromoDialogLink>\r\n                                                        </Box>\r\n                                                        <Button\r\n                                                            variant=\"contained\"\r\n                                                            sx={{ m: 5, px: 4 }}\r\n                                                            onClick={handleUpgrade}\r\n                                                            size=\"large\"\r\n                                                        >\r\n                                                            {upgraded ? 'UNDO' : 'UPGRADE'}\r\n                                                        </Button>\r\n                                                    </Box>\r\n                                                )}\r\n\r\n                                                <>\r\n                                                    <form onSubmit={handleSubmitForm1(onSubmitDiscountForm)}>\r\n                                                        <Box\r\n                                                            sx={{\r\n                                                                display: 'flex',\r\n                                                                alignItems: 'center',\r\n                                                                alignContent: 'center',\r\n                                                                visibility: `${upgraded ? 'hidden' : ''}`,\r\n                                                            }}\r\n                                                        >\r\n                                                            <Box\r\n                                                                sx={{\r\n                                                                    visibility: `${\r\n                                                                        productInfo && productInfo.showPromo\r\n                                                                            ? ''\r\n                                                                            : 'hidden'\r\n                                                                    }`,\r\n                                                                }}\r\n                                                            >\r\n                                                                <VertDivider> &nbsp;</VertDivider>\r\n                                                            </Box>\r\n                                                            <TextField\r\n                                                                size=\"small\"\r\n                                                                label=\"Discount\"\r\n                                                                sx={{ width: 150 }}\r\n                                                                {...registerForm1('discountCode')}\r\n                                                            />\r\n                                                            {errorsForm1.discountCode && (\r\n                                                                <p>{errorsForm1.discountCode.message}</p>\r\n                                                            )}\r\n                                                            <Button\r\n                                                                sx={{ m: 1 }}\r\n                                                                type=\"submit\"\r\n                                                                variant=\"contained\"\r\n                                                                onClick={onSubmitDiscountForm}\r\n                                                            >\r\n                                                                Apply\r\n                                                            </Button>\r\n                                                        </Box>\r\n                                                    </form>\r\n                                                </>\r\n                                            </Box>\r\n                                        </Box>\r\n                                    </Scrollbar>\r\n                                </CardContent>\r\n                            </Card>\r\n                        </Grid>\r\n                        <Grid item md={6} xs={12}>\r\n                            <Box sx={{ height: '100%' }}>\r\n                                <Card sx={{ p: 0, height: '100%' }}>\r\n                                    <Box sx={{ p: 3 }}>\r\n                                        <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\r\n                                            <Typography variant=\"h6\">Billing Information</Typography>\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"firstName\"\r\n                                                control={control}\r\n                                                defaultValue={billing.firstName}\r\n                                                rules={{\r\n                                                    required: 'First Name is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'First Name cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        required\r\n                                                        label=\"First Name\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"lastName\"\r\n                                                control={control}\r\n                                                defaultValue={billing.lastName}\r\n                                                rules={{\r\n                                                    required: 'Last Name is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Last Name cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        required\r\n                                                        label=\"Last Name\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"company\"\r\n                                                control={control}\r\n                                                defaultValue={billing.company}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Company name cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Company\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"address\"\r\n                                                control={control}\r\n                                                defaultValue={billing.address}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Address cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Address\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"city\"\r\n                                                control={control}\r\n                                                defaultValue={billing.city}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'City name cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"City\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"zip\"\r\n                                                control={control}\r\n                                                defaultValue={billing.zip}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Zip/postal code cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Zip / Postal Code\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <TextField\r\n                                                label=\"Country\"\r\n                                                size=\"small\"\r\n                                                select\r\n                                                sx={{\r\n                                                    flexGrow: 1,\r\n                                                }}\r\n                                                value={country}\r\n                                                onChange={onCountryChange}\r\n                                            >\r\n                                                {countries.map((country, idx) => (\r\n                                                    <MenuItem key={idx} value={country.code}>\r\n                                                        {country.name}\r\n                                                    </MenuItem>\r\n                                                ))}\r\n                                            </TextField>\r\n                                        </Box>\r\n\r\n                                        {country === 'US' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <TextField\r\n                                                    label=\"State\"\r\n                                                    size=\"small\"\r\n                                                    select\r\n                                                    sx={{\r\n                                                        flexGrow: 1,\r\n                                                    }}\r\n                                                    value={usaState}\r\n                                                    onChange={onStateChange}\r\n                                                >\r\n                                                    {usaStatesAndTerritories.map((state, idx) => (\r\n                                                        <MenuItem key={idx} value={idx}>\r\n                                                            {state.long}\r\n                                                        </MenuItem>\r\n                                                    ))}\r\n                                                </TextField>\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        {country === 'CA' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <TextField\r\n                                                    label=\"Province\"\r\n                                                    size=\"small\"\r\n                                                    select\r\n                                                    sx={{\r\n                                                        flexGrow: 1,\r\n                                                    }}\r\n                                                    value={canadaProvince}\r\n                                                    onChange={onProvinceChange}\r\n                                                >\r\n                                                    {canadaProvinces.map((prov, idx) => (\r\n                                                        <MenuItem key={idx} value={idx}>\r\n                                                            {prov.long}\r\n                                                        </MenuItem>\r\n                                                    ))}\r\n                                                </TextField>\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        {country !== 'CA' && country !== 'US' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <Controller\r\n                                                    name=\"state\"\r\n                                                    control={control}\r\n                                                    defaultValue={billing.state}\r\n                                                    rules={{\r\n                                                        maxLength: {\r\n                                                            value: 150,\r\n                                                            message:\r\n                                                                'State / Province / Region cannot exceed 150 characters',\r\n                                                        },\r\n                                                        pattern: {\r\n                                                            value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                            message: 'Invalid character entered',\r\n                                                        },\r\n                                                    }}\r\n                                                    render={({ field, fieldState: { error } }) => (\r\n                                                        <TextField\r\n                                                            {...field}\r\n                                                            label=\"State / Province / Region\"\r\n                                                            size=\"small\"\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                            }}\r\n                                                            error={!!error}\r\n                                                            helperText={error ? error.message : null}\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"phone\"\r\n                                                control={control}\r\n                                                defaultValue={billing.phone}\r\n                                                rules={{\r\n                                                    required: 'Phone is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Phone cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[A-Za-zÀ-ž0-9\\s.,:/\\-&()#]+$/,\r\n                                                        message: 'Invalid character entered',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Phone\"\r\n                                                        size=\"small\"\r\n                                                        required\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"email\"\r\n                                                control={control}\r\n                                                defaultValue={billing.email}\r\n                                                rules={{\r\n                                                    required: 'Email is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Email cannot exceed 150 characters',\r\n                                                    },\r\n                                                    pattern: {\r\n                                                        value: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n                                                        message: 'Invalid email address',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Email\"\r\n                                                        size=\"small\"\r\n                                                        required\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n                                    </Box>\r\n                                </Card>\r\n                            </Box>\r\n                        </Grid>\r\n                        <Grid item md={6} xs={12}>\r\n                            <Box sx={{ height: '100%' }}>\r\n                                <Card sx={{ height: '100%' }}>\r\n                                    <CardContent sx={{ px: 3 }}>\r\n                                        <Box\r\n                                            sx={{\r\n                                                mt: 0,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Box>\r\n                                                <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\r\n                                                    <Typography variant=\"h6\">Pay with &nbsp;</Typography>\r\n                                                    <img alt=\"credit cards\" style={{ width: 340 }} src={creditCards} />\r\n                                                </Box>\r\n\r\n                                                <CreditCard\r\n                                                    acceptedCards={[\r\n                                                        'visa',\r\n                                                        'mastercard',\r\n                                                        'amex',\r\n                                                        'dinersclub',\r\n                                                        'discover',\r\n                                                    ]}\r\n                                                    number={cardNumber}\r\n                                                    name=\"\"\r\n                                                    expiry={expiry}\r\n                                                    cvc={cvc}\r\n                                                    focused={focused}\r\n                                                    callback={handleCallback}\r\n                                                />\r\n                                            </Box>\r\n                                            <Box>\r\n                                                <Grid container columnSpacing={3}>\r\n                                                    <Grid item xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"number\"\r\n                                                            value={cardNumber}\r\n                                                            required\r\n                                                            label=\"Card Number\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"expiry\"\r\n                                                            value={expiry}\r\n                                                            required\r\n                                                            label=\"Valid Thru (MM/YY)\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"cvc\"\r\n                                                            value={cvc}\r\n                                                            label=\"CVC\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n\r\n                                                    <Grid item xs={12}>\r\n                                                        <form id=\"payment\" onSubmit={handleSubmit(onSubmitCreditCard)}>\r\n                                                            <Button\r\n                                                                color=\"primary\"\r\n                                                                variant=\"contained\"\r\n                                                                type=\"submit\"\r\n                                                                fullWidth\r\n                                                                disabled={!issuer || expiry.length !== 5 || inProgress}\r\n                                                                sx={{ mt: 3 }}\r\n                                                            >\r\n                                                                Pay\r\n                                                            </Button>\r\n                                                        </form>\r\n\r\n                                                        <Divider sx={{ m: 2 }} variant=\"middle\">\r\n                                                            OR\r\n                                                        </Divider>\r\n\r\n                                                        <form\r\n                                                            id=\"paypal\"\r\n                                                            action=\"https://www.paypal.com/cgi-bin/webscr\"\r\n                                                            method=\"post\"\r\n                                                            target=\"_new\"\r\n                                                        >\r\n                                                            {paypalInfo && (\r\n                                                                <>\r\n                                                                    <input type=\"hidden\" name=\"cmd\" value=\"_xclick\" />\r\n                                                                    <input type=\"hidden\" name=\"charset\" value=\"utf-8\" />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"business\"\r\n                                                                        value=\"company@lsoft.net\"\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"currency_code\"\r\n                                                                        value=\"USD\"\r\n                                                                    />\r\n                                                                    <input type=\"hidden\" name=\"lc\" value=\"US\" />\r\n                                                                    <input\r\n                                                                        name=\"item_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"item_name\"\r\n                                                                        value={paypalName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"amount\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"amount\"\r\n                                                                        value={paypalAmount}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"custom\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"custom\"\r\n                                                                        value={paypalTag}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"invoice\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"invoice\"\r\n                                                                        value={paypalInfo.nextOrderId}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"image_url\"\r\n                                                                        value=\"https://secure.lsoft.net/images/shop_logo.png\"\r\n                                                                    />\r\n\r\n                                                                    <input type=\"hidden\" name=\"no_shipping\" value=\"1\" />\r\n\r\n                                                                    <input\r\n                                                                        name=\"first_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"first_name\"\r\n                                                                        value={paypalData.firstName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"last_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"last_name\"\r\n                                                                        value={paypalData.lastName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"address1\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.address}\r\n                                                                    />\r\n                                                                    <input name=\"address2\" type=\"hidden\" value=\"\" />\r\n                                                                    <input\r\n                                                                        name=\"city\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.city}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"country\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.country}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"state\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.state}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"zip\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.zip}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_a\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_a}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_b\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_b}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_c\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_c}\r\n                                                                    />\r\n                                                                </>\r\n                                                            )}\r\n                                                            <button\r\n                                                                hidden={true}\r\n                                                                ref={refSubmitButtom}\r\n                                                                type={'submit'}\r\n                                                            />\r\n                                                        </form>\r\n\r\n                                                        <form id=\"payment\" onSubmit={handleSubmitPayPal(onPayPal)}>\r\n                                                            <PaypalButton variant=\"contained\" fullWidth type=\"submit\">\r\n                                                                &nbsp;\r\n                                                            </PaypalButton>\r\n                                                        </form>\r\n\r\n                                                        <Divider sx={{ m: 2 }} variant=\"middle\">\r\n                                                            OR\r\n                                                        </Divider>\r\n                                                        <form id=\"invoice\" onSubmit={handleSubmit(onInvoice)}>\r\n                                                            <Button\r\n                                                                color=\"primary\"\r\n                                                                variant=\"contained\"\r\n                                                                type=\"submit\"\r\n                                                                fullWidth\r\n                                                                disabled={inProgress}\r\n                                                            >\r\n                                                                Invoice\r\n                                                            </Button>\r\n                                                        </form>\r\n                                                    </Grid>\r\n                                                </Grid>\r\n                                            </Box>\r\n                                        </Box>\r\n                                    </CardContent>\r\n                                </Card>\r\n                            </Box>\r\n                        </Grid>\r\n                        <Grid item xs={12} sx={{}}>\r\n                            <Divider />\r\n                            <Box sx={{ mt: 3, display: 'flex', justifyContent: 'center' }}>\r\n                                <Typography variant=\"subtitle2\">\r\n                                    Secure payment services provided by{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        Royal Bank of Canada\r\n                                    </Box>{' '}\r\n                                    and{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        LSoft Technologies\r\n                                    </Box>\r\n                                </Typography>\r\n                            </Box>\r\n                        </Grid>\r\n                    </Grid>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import type { FC } from 'react';\r\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\r\nimport { AppBar, Box, Button, Divider, Hidden, IconButton, Toolbar, Typography, Stack, Avatar } from '@mui/material';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport PersonIcon from '@mui/icons-material/Person';\r\nimport { Theme } from '@mui/material/styles';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport { Logo } from '../Logo';\r\nimport { accountService } from '../../account.service';\r\nimport { getInitials } from '../../utils/get-initials';\r\nimport { useTheme } from '@mui/styles';\r\n\r\ninterface DashboardNavbarProps {\r\n    onSidebarMobileOpen?: () => void;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n    createStyles({\r\n        homeLink: {\r\n            textDecoration: 'none',\r\n        },\r\n    })\r\n);\r\n\r\nexport const DashboardNavbar: FC<DashboardNavbarProps> = ({ onSidebarMobileOpen }) => {\r\n    const classes = useStyles();\r\n    const navigate = useNavigate();\r\n    const theme = useTheme();\r\n    const account = accountService.getAccount();\r\n\r\n    const logout = () => {\r\n        accountService.logout();\r\n        navigate('/');\r\n    };\r\n\r\n    return (\r\n        <AppBar\r\n            elevation={0}\r\n            sx={{\r\n                backgroundColor: 'primary',\r\n                color: 'text.secondary',\r\n            }}\r\n        >\r\n            <Toolbar sx={{ minHeight: 64 }}>\r\n                <Hidden lgUp>\r\n                    <IconButton sx={{ color: 'white' }} onClick={onSidebarMobileOpen} size=\"large\">\r\n                        <MenuIcon fontSize=\"small\" />\r\n                    </IconButton>\r\n                </Hidden>\r\n                <Hidden lgDown>\r\n                    <RouterLink to=\"/\" className={classes.homeLink}>\r\n                        <Stack direction=\"row\" spacing={1} sx={{ textDecoration: 'none' }}>\r\n                            <Logo />\r\n                            <Typography\r\n                                sx={{\r\n                                    caretColor: 'rgba(0,0,0,0)',\r\n                                    color: 'white',\r\n                                    whiteSpace: 'nowrap',\r\n                                    textDecoration: 'none',\r\n                                    lineHeight: '40px',\r\n                                }}\r\n                                variant=\"h6\"\r\n                            >\r\n                                LSoft Technologies\r\n                            </Typography>\r\n                            <Typography\r\n                                sx={{\r\n                                    color: 'white',\r\n                                    whiteSpace: 'nowrap',\r\n                                    fontWeight: 100,\r\n                                    lineHeight: '40px',\r\n                                }}\r\n                                variant=\"h6\"\r\n                            >\r\n                                |&nbsp; Customer Support\r\n                            </Typography>\r\n                        </Stack>\r\n                    </RouterLink>\r\n                </Hidden>\r\n                <Box sx={{ flexGrow: 1 }} />\r\n                <Avatar\r\n                    sx={{\r\n                        height: 42,\r\n                        mr: 2,\r\n                        width: 42,\r\n                        color: theme.palette.primary.main,\r\n                        bgcolor: 'white',\r\n                    }}\r\n                >\r\n                    {getInitials(`${account.name}`)}\r\n                </Avatar>\r\n                <Typography sx={{ color: theme.palette.primary.contrastText, fontWeight: 300 }}>ADMIN</Typography>\r\n\r\n                <Divider\r\n                    orientation=\"vertical\"\r\n                    sx={{\r\n                        height: 32,\r\n                        mx: 2,\r\n                        backgroundColor: 'white',\r\n                    }}\r\n                />\r\n                <Button\r\n                    sx={{\r\n                        color: 'white',\r\n                        marginLeft: 1,\r\n                    }}\r\n                    startIcon={<PersonIcon />}\r\n                    onClick={logout}\r\n                >\r\n                    Sign Out\r\n                </Button>\r\n            </Toolbar>\r\n        </AppBar>\r\n    );\r\n};\r\n","import { useEffect } from 'react';\r\nimport type { FC } from 'react';\r\nimport { Link as RouterLink, useLocation } from 'react-router-dom';\r\nimport { Box, Drawer, Hidden } from '@mui/material';\r\nimport ArticleIcon from '@mui/icons-material/Article';\r\nimport CategoryIcon from '@mui/icons-material/Category';\r\nimport SettingsIcon from '@mui/icons-material/Settings';\r\nimport Scrollbar from '../Scrollbar';\r\nimport NavSection from '../NavSection';\r\nimport { Logo } from '../Logo';\r\n\r\ninterface DashboardSidebarProps {\r\n    onMobileClose: () => void;\r\n    openMobile: boolean;\r\n}\r\n\r\nconst sections = [\r\n    {\r\n        title: 'Knowledge Base',\r\n        items: [\r\n            {\r\n                title: 'Articles',\r\n                path: '/kb/',\r\n                icon: <ArticleIcon fontSize=\"small\" />,\r\n            },\r\n            {\r\n                title: 'Categories',\r\n                path: '/kb/categories',\r\n                icon: <CategoryIcon fontSize=\"small\" />,\r\n            },\r\n        ],\r\n    },\r\n    {\r\n        title: 'General',\r\n        items: [\r\n            {\r\n                title: 'Settings',\r\n                path: '/kb/settings',\r\n                icon: <SettingsIcon fontSize=\"small\" />,\r\n            },\r\n        ],\r\n    },\r\n];\r\n\r\nexport const DashboardSidebar: FC<DashboardSidebarProps> = (props) => {\r\n    const { onMobileClose, openMobile } = props;\r\n    const location = useLocation();\r\n\r\n    useEffect(() => {\r\n        if (openMobile && onMobileClose) {\r\n            onMobileClose();\r\n        }\r\n    }, [location.pathname]);\r\n\r\n    const content = (\r\n        <Box\r\n            sx={{\r\n                display: 'flex',\r\n                flexDirection: 'column',\r\n                height: '100%',\r\n            }}\r\n        >\r\n            <Scrollbar options={{ suppressScrollX: true }}>\r\n                <Hidden lgUp>\r\n                    <Box\r\n                        sx={{\r\n                            display: 'flex',\r\n                            justifyContent: 'center',\r\n                            p: 2,\r\n                        }}\r\n                    >\r\n                        <RouterLink to=\"/\">\r\n                            <Logo />\r\n                        </RouterLink>\r\n                    </Box>\r\n                </Hidden>\r\n                <Box sx={{ p: 2 }}>\r\n                    {sections.map((section) => (\r\n                        <NavSection\r\n                            key={section.title}\r\n                            pathname={location.pathname}\r\n                            sx={{\r\n                                '& + &': {\r\n                                    mt: 3,\r\n                                },\r\n                            }}\r\n                            {...section}\r\n                        />\r\n                    ))}\r\n                </Box>\r\n            </Scrollbar>\r\n        </Box>\r\n    );\r\n\r\n    return (\r\n        <>\r\n            <Drawer\r\n                anchor=\"left\"\r\n                onClose={onMobileClose}\r\n                open={openMobile}\r\n                PaperProps={{\r\n                    sx: {\r\n                        backgroundColor: 'background.paper',\r\n                        width: 280,\r\n                        display: { xs: 'block', lg: 'none' },\r\n                    },\r\n                }}\r\n                variant=\"temporary\"\r\n            >\r\n                {content}\r\n            </Drawer>\r\n            <Drawer\r\n                anchor=\"left\"\r\n                open\r\n                PaperProps={{\r\n                    sx: {\r\n                        backgroundColor: 'background.paper',\r\n                        height: 'calc(100% - 64px) !important',\r\n                        top: '64px !Important',\r\n                        width: 280,\r\n                        display: { xs: 'none', lg: 'block' },\r\n                    },\r\n                }}\r\n                variant=\"persistent\"\r\n            >\r\n                {content}\r\n            </Drawer>\r\n        </>\r\n    );\r\n};\r\n","import { useState } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { experimentalStyled } from '@mui/material/styles';\r\nimport { DashboardNavbar } from './DashboardNavbar';\r\nimport { DashboardSidebar } from './DashboardSidebar';\r\n\r\ninterface DashboardLayoutProps {\r\n    children?: ReactNode;\r\n}\r\n\r\nconst DashboardLayoutRoot = experimentalStyled('div')(({ theme }) => ({\r\n    backgroundColor: theme.palette.background.default,\r\n    display: 'flex',\r\n    height: '100%',\r\n    overflow: 'hidden',\r\n    width: '100%',\r\n}));\r\n\r\nconst DashboardLayoutWrapper = experimentalStyled('div')(({ theme }) => ({\r\n    display: 'flex',\r\n    flex: '1 1 auto',\r\n    overflow: 'hidden',\r\n    paddingTop: '64px',\r\n    [theme.breakpoints.up('lg')]: {\r\n        paddingLeft: '280px',\r\n    },\r\n}));\r\n\r\nconst DashboardLayoutContainer = experimentalStyled('div')({\r\n    display: 'flex',\r\n    flex: '1 1 auto',\r\n    overflow: 'hidden',\r\n});\r\n\r\nconst DashboardLayoutContent = experimentalStyled('div')({\r\n    flex: '1 1 auto',\r\n    height: '100%',\r\n    overflow: 'auto',\r\n    position: 'relative',\r\n    WebkitOverflowScrolling: 'touch',\r\n});\r\n\r\nexport const DashboardLayout: FC<DashboardLayoutProps> = () => {\r\n    const [isSidebarMobileOpen, setIsSidebarMobileOpen] = useState<boolean>(false);\r\n\r\n    return (\r\n        <DashboardLayoutRoot>\r\n            <DashboardNavbar onSidebarMobileOpen={(): void => setIsSidebarMobileOpen(true)} />\r\n            <DashboardSidebar\r\n                onMobileClose={(): void => setIsSidebarMobileOpen(false)}\r\n                openMobile={isSidebarMobileOpen}\r\n            />\r\n            <DashboardLayoutWrapper>\r\n                <DashboardLayoutContainer>\r\n                    <DashboardLayoutContent>\r\n                        <Outlet />\r\n                    </DashboardLayoutContent>\r\n                </DashboardLayoutContainer>\r\n            </DashboardLayoutWrapper>\r\n        </DashboardLayoutRoot>\r\n    );\r\n};\r\n","import { createSvgIcon } from '@mui/material/utils';\r\n\r\nconst Plus = createSvgIcon(\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n        <path\r\n            fillRule=\"evenodd\"\r\n            d=\"M10 5a1 1 0 011 1v3h3a1 1 0 110 2h-3v3a1 1 0 11-2 0v-3H6a1 1 0 110-2h3V6a1 1 0 011-1z\"\r\n            clipRule=\"evenodd\"\r\n        />\r\n    </svg>,\r\n    'Plus'\r\n);\r\n\r\nexport default Plus;\r\n","import { createSvgIcon } from '@mui/material/utils';\r\n\r\nconst Lock = createSvgIcon(\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n        <path\r\n            fillRule=\"evenodd\"\r\n            d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\r\n            clipRule=\"evenodd\"\r\n        />\r\n    </svg>,\r\n    'Lock'\r\n);\r\n\r\nexport default Lock;\r\n","import type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport type { Theme } from '@mui/material';\r\nimport { experimentalStyled } from '@mui/material/styles';\r\nimport type { SxProps } from '@mui/system';\r\n\r\nexport type LabelColor = 'primary' | 'secondary' | 'error' | 'warning' | 'success';\r\n\r\ninterface LabelProps {\r\n    children?: ReactNode;\r\n    color?: LabelColor;\r\n    style?: {};\r\n    sx?: SxProps<Theme>;\r\n}\r\n\r\ninterface LabelRootProps {\r\n    styleprops: {\r\n        color: string;\r\n    };\r\n}\r\n\r\nconst LabelRoot = experimentalStyled('span')<LabelRootProps>(({ theme, styleprops }) => {\r\n    const backgroundColor = theme.palette[styleprops.color].main;\r\n    const color = theme.palette[styleprops.color].contrastText;\r\n\r\n    return {\r\n        alignItems: 'center',\r\n        backgroundColor,\r\n        borderRadius: theme.shape.borderRadius,\r\n        color,\r\n        cursor: 'default',\r\n        display: 'inline-flex',\r\n        flexGrow: 0,\r\n        flexShrink: 0,\r\n        fontFamily:\r\n            '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\r\n        fontSize: theme.typography.pxToRem(11),\r\n        fontWeight: theme.typography.fontWeightMedium,\r\n        justifyContent: 'center',\r\n        letterSpacing: 0.5,\r\n        minWidth: 20,\r\n        paddingBottom: theme.spacing(0.5),\r\n        paddingLeft: theme.spacing(1),\r\n        paddingRight: theme.spacing(1),\r\n        paddingTop: theme.spacing(0.5),\r\n        textTransform: 'uppercase',\r\n        whiteSpace: 'nowrap',\r\n    };\r\n});\r\n\r\nconst Label: FC<LabelProps> = (props) => {\r\n    const { color = 'primary', children, ...other } = props;\r\n\r\n    const styleProps = { color };\r\n\r\n    return (\r\n        <LabelRoot styleprops={styleProps} {...other}>\r\n            {children}\r\n        </LabelRoot>\r\n    );\r\n};\r\n\r\nLabel.propTypes = {\r\n    children: PropTypes.node,\r\n    color: PropTypes.oneOf(['primary', 'secondary', 'error', 'warning', 'success']),\r\n};\r\n\r\nexport default Label;\r\n","import { useState } from 'react';\r\nimport type { ChangeEvent } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { QuestionData } from '../../data';\r\nimport {\r\n    Box,\r\n    Card,\r\n    Checkbox,\r\n    Divider,\r\n    InputAdornment,\r\n    Link,\r\n    Tab,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TablePagination,\r\n    TableRow,\r\n    Tabs,\r\n    TextField,\r\n} from '@mui/material';\r\nimport SearchIcon from '../../icons/Search';\r\nimport LockIcon from '../../icons/Lock';\r\nimport Scrollbar from '../Scrollbar';\r\nimport Label from '../Label';\r\n\r\ntype Status = 'published' | 'draft' | 'archived';\r\n\r\nconst getStatusLabel = (status: Status): JSX.Element => {\r\n    const map = {\r\n        published: {\r\n            color: 'success',\r\n            text: 'Published',\r\n        },\r\n        draft: {\r\n            color: 'warning',\r\n            text: 'Draft',\r\n        },\r\n        archived: {\r\n            color: 'error',\r\n            text: 'Archived',\r\n        },\r\n    };\r\n\r\n    const { text, color }: any = map[status];\r\n\r\n    return <Label color={color}>{text}</Label>;\r\n};\r\n\r\ninterface QuestionListTableProps {\r\n    questions: QuestionData[];\r\n}\r\n\r\nconst tabs = [\r\n    {\r\n        label: 'All',\r\n        value: 'all',\r\n    },\r\n    {\r\n        label: 'Published',\r\n        value: 'published',\r\n    },\r\n    {\r\n        label: 'Drafts',\r\n        value: 'drafts',\r\n    },\r\n    {\r\n        label: 'Archived',\r\n        value: 'archived',\r\n    },\r\n];\r\n\r\nconst applyFilters = (questions: QuestionData[], query: string, filters: any): QuestionData[] => {\r\n    query = query.toLowerCase();\r\n    return questions.filter((question) => {\r\n        let matches = true;\r\n\r\n        if (query) {\r\n            let containsQuery = false;\r\n            if (question.title.toLowerCase().includes(query) || question.labels.toLowerCase().includes(query)) {\r\n                containsQuery = true;\r\n            }\r\n\r\n            if (!containsQuery) {\r\n                matches = false;\r\n            }\r\n        }\r\n\r\n        if (filters['published']) {\r\n            if (!question.isPublished || question.isArchived) {\r\n                matches = false;\r\n            }\r\n        } else if (filters['drafts']) {\r\n            if (question.isPublished || question.isArchived) {\r\n                matches = false;\r\n            }\r\n        } else if (filters['archived']) {\r\n            if (!question.isArchived) {\r\n                matches = false;\r\n            }\r\n        }\r\n\r\n        return matches;\r\n    });\r\n};\r\n\r\nconst applyPagination = (questions: QuestionData[], page: number, limit: number): QuestionData[] =>\r\n    questions.slice(page * limit, page * limit + limit);\r\n\r\nexport const QuestionListTable = (props: QuestionListTableProps) => {\r\n    const { questions, ...other } = props;\r\n    const [currentTab, setCurrentTab] = useState<string>('all');\r\n    const [selectedQuestions, setSelectedQuestions] = useState<number[]>([]);\r\n    const [page, setPage] = useState<number>(0);\r\n    const [limit, setLimit] = useState<number>(5);\r\n    const [query, setQuery] = useState<string>('');\r\n    const [filters, setFilters] = useState<any>({\r\n        published: null,\r\n        drafts: null,\r\n        archived: null,\r\n    });\r\n\r\n    const handleTabsChange = (event: ChangeEvent<{}>, value: string): void => {\r\n        const updatedFilters = {\r\n            published: null,\r\n            drafts: null,\r\n            archived: null,\r\n        };\r\n\r\n        if (value !== 'all') {\r\n            updatedFilters[value] = true;\r\n        }\r\n\r\n        setFilters(updatedFilters);\r\n        setSelectedQuestions([]);\r\n        setCurrentTab(value);\r\n        setPage(0);\r\n    };\r\n\r\n    const handleQueryChange = (event: ChangeEvent<HTMLInputElement>): void => {\r\n        setQuery(event.target.value);\r\n        setPage(0);\r\n    };\r\n\r\n    const handleSelectAllQuestions = (event: ChangeEvent<HTMLInputElement>): void => {\r\n        setSelectedQuestions(event.target.checked ? questions.map((question) => question.questionId) : []);\r\n    };\r\n\r\n    const handleSelectOneQuestion = (event: ChangeEvent<HTMLInputElement>, questionId: number): void => {\r\n        if (!selectedQuestions.includes(questionId)) {\r\n            setSelectedQuestions((prevSelected) => [...prevSelected, questionId]);\r\n        } else {\r\n            setSelectedQuestions((prevSelected) => prevSelected.filter((id) => id !== questionId));\r\n        }\r\n    };\r\n\r\n    const handlePageChange = (event: any, newPage: number): void => {\r\n        setPage(newPage);\r\n    };\r\n\r\n    const handleLimitChange = (event: ChangeEvent<HTMLInputElement>): void => {\r\n        setLimit(parseInt(event.target.value, 10));\r\n        setPage(0);\r\n    };\r\n\r\n    const filteredQuestions = applyFilters(questions, query, filters);\r\n    const paginatedQuestions = applyPagination(filteredQuestions, page, limit);\r\n    const selectedSomeQuestions = selectedQuestions.length > 0 && selectedQuestions.length < questions.length;\r\n    const selectedAllQuestions = selectedQuestions.length === questions.length;\r\n\r\n    return (\r\n        <Card {...other}>\r\n            <Tabs\r\n                indicatorColor=\"primary\"\r\n                onChange={handleTabsChange}\r\n                scrollButtons=\"auto\"\r\n                textColor=\"primary\"\r\n                value={currentTab}\r\n                variant=\"scrollable\"\r\n            >\r\n                {tabs.map((tab) => (\r\n                    <Tab key={tab.value} label={tab.label} value={tab.value} />\r\n                ))}\r\n            </Tabs>\r\n            <Divider />\r\n            <Box\r\n                sx={{\r\n                    alignItems: 'center',\r\n                    display: 'flex',\r\n                    flexWrap: 'wrap',\r\n                    m: -1,\r\n                    p: 2,\r\n                }}\r\n            >\r\n                <Box\r\n                    sx={{\r\n                        m: 1,\r\n                        maxWidth: '100%',\r\n                        width: 500,\r\n                    }}\r\n                >\r\n                    <TextField\r\n                        fullWidth\r\n                        InputProps={{\r\n                            startAdornment: (\r\n                                <InputAdornment position=\"start\">\r\n                                    <SearchIcon fontSize=\"small\" />\r\n                                </InputAdornment>\r\n                            ),\r\n                        }}\r\n                        onChange={handleQueryChange}\r\n                        placeholder=\"Search articles\"\r\n                        value={query}\r\n                        variant=\"outlined\"\r\n                    />\r\n                </Box>\r\n            </Box>\r\n            <Scrollbar>\r\n                <Box sx={{ minWidth: 700 }}>\r\n                    <Table>\r\n                        <TableHead>\r\n                            <TableRow>\r\n                                <TableCell padding=\"checkbox\">\r\n                                    <Checkbox\r\n                                        checked={selectedAllQuestions}\r\n                                        color=\"primary\"\r\n                                        indeterminate={selectedSomeQuestions}\r\n                                        onChange={handleSelectAllQuestions}\r\n                                    />\r\n                                </TableCell>\r\n                                <TableCell>Title</TableCell>\r\n                                <TableCell>Category</TableCell>\r\n                                <TableCell>Status</TableCell>\r\n                                <TableCell>Private</TableCell>\r\n                            </TableRow>\r\n                        </TableHead>\r\n                        <TableBody>\r\n                            {paginatedQuestions.map((question) => {\r\n                                const isQuestionSelected = selectedQuestions.includes(question.questionId);\r\n\r\n                                return (\r\n                                    <TableRow hover key={question.questionId} selected={isQuestionSelected}>\r\n                                        <TableCell padding=\"checkbox\">\r\n                                            <Checkbox\r\n                                                checked={isQuestionSelected}\r\n                                                color=\"primary\"\r\n                                                onChange={(event) =>\r\n                                                    handleSelectOneQuestion(event, question.questionId)\r\n                                                }\r\n                                                value={isQuestionSelected}\r\n                                            />\r\n                                        </TableCell>\r\n                                        <TableCell>\r\n                                            <Box\r\n                                                sx={{\r\n                                                    alignItems: 'center',\r\n                                                    display: 'flex',\r\n                                                }}\r\n                                            >\r\n                                                <Box>\r\n                                                    <Link\r\n                                                        color=\"inherit\"\r\n                                                        component={RouterLink}\r\n                                                        to={`/kb/questions/${question.questionId}`}\r\n                                                    >\r\n                                                        {question.title}\r\n                                                    </Link>\r\n                                                </Box>\r\n                                            </Box>\r\n                                        </TableCell>\r\n                                        <TableCell>{`${question.categoryName ?? ''}`}</TableCell>\r\n                                        <TableCell>\r\n                                            {getStatusLabel(\r\n                                                question.isArchived\r\n                                                    ? 'archived'\r\n                                                    : question.isPublished\r\n                                                    ? 'published'\r\n                                                    : 'draft'\r\n                                            )}\r\n                                        </TableCell>\r\n                                        <TableCell>{question.isPublic ? '' : <LockIcon color=\"disabled\" />}</TableCell>\r\n                                    </TableRow>\r\n                                );\r\n                            })}\r\n                        </TableBody>\r\n                    </Table>\r\n                </Box>\r\n            </Scrollbar>\r\n            <TablePagination\r\n                component=\"div\"\r\n                count={filteredQuestions.length}\r\n                onPageChange={handlePageChange}\r\n                onRowsPerPageChange={handleLimitChange}\r\n                page={page}\r\n                rowsPerPage={limit}\r\n                rowsPerPageOptions={[5, 10, 25]}\r\n            />\r\n        </Card>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\nimport { useEffect } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { getQuestionsWithFilter } from '../../data';\r\nimport { filteringQuestionsAction, filteredQuestionsAction, AppState } from '../../Store';\r\nimport { Box, Button, Container, Grid, Typography } from '@mui/material';\r\nimport PlusIcon from '../../icons/Plus';\r\nimport { Title } from '../../components/Title';\r\nimport { QuestionListTable } from '../../components/dashboard/QuestionListTable';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { Navigate } from 'react-router-dom';\r\n\r\nexport const AdmQuestionList = () => {\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n    const dispatch = useDispatch();\r\n    const questions = useSelector((state: AppState) => state.questions.filtered);\r\n\r\n    useEffect(() => {\r\n        const doGetQuestions = async () => {\r\n            dispatch(filteringQuestionsAction());\r\n            const questions = await getQuestionsWithFilter({ search: '' });\r\n            dispatch(filteredQuestionsAction(questions));\r\n        };\r\n        doGetQuestions();\r\n    }, []);\r\n\r\n    const handleAdd = () => {\r\n        navigate('/kb/questions/new');\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Admin) && <Navigate to=\"/account/login\" />}\r\n            <Title title=\"Articles\" />\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    minHeight: '100%',\r\n                    py: 8,\r\n                }}\r\n            >\r\n                <Container maxWidth={false}>\r\n                    <Grid container justifyContent=\"space-between\" spacing={3}>\r\n                        <Grid item>\r\n                            <Typography color=\"textPrimary\" variant=\"h5\">\r\n                                Article List\r\n                            </Typography>\r\n                        </Grid>\r\n                        <Grid item>\r\n                            <Box sx={{ m: -1 }}>\r\n                                <Button\r\n                                    color=\"primary\"\r\n                                    startIcon={<PlusIcon fontSize=\"small\" />}\r\n                                    sx={{ m: 1 }}\r\n                                    variant=\"contained\"\r\n                                    onClick={handleAdd}\r\n                                >\r\n                                    Add Article\r\n                                </Button>\r\n                            </Box>\r\n                        </Grid>\r\n                    </Grid>\r\n                    <Box sx={{ mt: 3 }}>\r\n                        <QuestionListTable questions={questions} />\r\n                    </Box>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { useState } from 'react';\r\nimport type { ChangeEvent } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { CategoryData } from '../../data';\r\nimport {\r\n    Box,\r\n    Card,\r\n    Checkbox,\r\n    Link,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TablePagination,\r\n    TableRow,\r\n} from '@mui/material';\r\nimport Scrollbar from '../Scrollbar';\r\n\r\ninterface CategoryListTableProps {\r\n    categories: CategoryData[];\r\n}\r\n\r\nconst applyPagination = (categories: CategoryData[], page: number, limit: number): CategoryData[] =>\r\n    categories.slice(page * limit, page * limit + limit);\r\n\r\nexport const CategoryListTable = (props: CategoryListTableProps) => {\r\n    const { categories, ...other } = props;\r\n    const [selectedCategories, setSelectedCategories] = useState<number[]>([]);\r\n    const [page, setPage] = useState<number>(0);\r\n    const [limit, setLimit] = useState<number>(10);\r\n\r\n    const handleSelectAllCategories = (event: ChangeEvent<HTMLInputElement>): void => {\r\n        setSelectedCategories(event.target.checked ? categories.map((category) => category.categoryId) : []);\r\n    };\r\n\r\n    const handleSelectOneCategory = (event: ChangeEvent<HTMLInputElement>, categoryId: number): void => {\r\n        if (!selectedCategories.includes(categoryId)) {\r\n            setSelectedCategories((prevSelected) => [...prevSelected, categoryId]);\r\n        } else {\r\n            setSelectedCategories((prevSelected) => prevSelected.filter((id) => id !== categoryId));\r\n        }\r\n    };\r\n\r\n    const handlePageChange = (event: any, newPage: number): void => {\r\n        setPage(newPage);\r\n    };\r\n\r\n    const handleLimitChange = (event: ChangeEvent<HTMLInputElement>): void => {\r\n        setLimit(parseInt(event.target.value, 10));\r\n        setPage(0);\r\n    };\r\n\r\n    const paginatedCategories = applyPagination(categories, page, limit);\r\n    const selectedSomeCategories = selectedCategories.length > 0 && selectedCategories.length < categories.length;\r\n    const selectedAllCategories = selectedCategories.length === categories.length;\r\n\r\n    return (\r\n        <Card {...other}>\r\n            <Box\r\n                sx={{\r\n                    alignItems: 'center',\r\n                    display: 'flex',\r\n                    flexWrap: 'wrap',\r\n                    m: -1,\r\n                    p: 2,\r\n                }}\r\n            ></Box>\r\n            <Scrollbar>\r\n                <Box sx={{ minWidth: 700 }}>\r\n                    <Table>\r\n                        <TableHead>\r\n                            <TableRow>\r\n                                <TableCell padding=\"checkbox\">\r\n                                    <Checkbox\r\n                                        checked={selectedAllCategories}\r\n                                        color=\"primary\"\r\n                                        indeterminate={selectedSomeCategories}\r\n                                        onChange={handleSelectAllCategories}\r\n                                    />\r\n                                </TableCell>\r\n                                <TableCell>Title</TableCell>\r\n                                <TableCell>Articles</TableCell>\r\n                            </TableRow>\r\n                        </TableHead>\r\n                        <TableBody>\r\n                            {paginatedCategories.map((category) => {\r\n                                const isCategorySelected = selectedCategories.includes(category.categoryId);\r\n\r\n                                return (\r\n                                    <TableRow hover key={category.categoryId} selected={isCategorySelected}>\r\n                                        <TableCell padding=\"checkbox\">\r\n                                            <Checkbox\r\n                                                checked={isCategorySelected}\r\n                                                color=\"primary\"\r\n                                                onChange={(event) =>\r\n                                                    handleSelectOneCategory(event, category.categoryId)\r\n                                                }\r\n                                                value={isCategorySelected}\r\n                                            />\r\n                                        </TableCell>\r\n                                        <TableCell>\r\n                                            <Box\r\n                                                sx={{\r\n                                                    alignItems: 'center',\r\n                                                    display: 'flex',\r\n                                                }}\r\n                                            >\r\n                                                <Box>\r\n                                                    <Link\r\n                                                        color=\"inherit\"\r\n                                                        component={RouterLink}\r\n                                                        to={`/kb/categories/${category.categoryId}`}\r\n                                                    >\r\n                                                        {category.name}\r\n                                                    </Link>\r\n                                                </Box>\r\n                                            </Box>\r\n                                        </TableCell>\r\n                                        <TableCell>{category.questionCount}</TableCell>\r\n                                    </TableRow>\r\n                                );\r\n                            })}\r\n                        </TableBody>\r\n                    </Table>\r\n                </Box>\r\n            </Scrollbar>\r\n            <TablePagination\r\n                component=\"div\"\r\n                count={categories.length}\r\n                onPageChange={handlePageChange}\r\n                onRowsPerPageChange={handleLimitChange}\r\n                page={page}\r\n                rowsPerPage={limit}\r\n                rowsPerPageOptions={[5, 10, 25]}\r\n            />\r\n        </Card>\r\n    );\r\n};\r\n","/** @jsxImportSource @emotion/react */\r\n// import { css } from '@emotion/react';\r\nimport { useEffect, useState } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { CategoryData, getCategoriesWithCounters } from '../../data';\r\nimport { Box, Button, Container, Grid, Typography } from '@mui/material';\r\nimport PlusIcon from '../../icons/Plus';\r\nimport { Title } from '../../components/Title';\r\nimport { CategoryListTable } from '../../components/dashboard/CategoryListTable';\r\nimport { Navigate } from 'react-router-dom';\r\nimport { accountService, UserRole } from '../../account.service';\r\n\r\nexport const AdmCategoryList = () => {\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n    const [categories, setCategories] = useState<CategoryData[]>([]);\r\n\r\n    useEffect(() => {\r\n        let cancelled = false;\r\n        const doGetCategories = async () => {\r\n            const fetchedCategories = await getCategoriesWithCounters();\r\n            if (!cancelled) {\r\n                setCategories(fetchedCategories);\r\n            }\r\n        };\r\n        doGetCategories();\r\n        return () => {\r\n            cancelled = true;\r\n        };\r\n    }, []);\r\n\r\n    const handleAdd = () => {\r\n        navigate('/kb/categories/new');\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Admin) && <Navigate to=\"/account/login\" />}\r\n            <Title title=\"Categories\" />\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    minHeight: '100%',\r\n                    py: 8,\r\n                }}\r\n            >\r\n                <Container maxWidth={false}>\r\n                    <Grid container justifyContent=\"space-between\" spacing={3}>\r\n                        <Grid item>\r\n                            <Typography color=\"textPrimary\" variant=\"h5\">\r\n                                Category List\r\n                            </Typography>\r\n                        </Grid>\r\n                        <Grid item>\r\n                            <Box sx={{ m: -1 }}>\r\n                                <Button\r\n                                    color=\"primary\"\r\n                                    startIcon={<PlusIcon fontSize=\"small\" />}\r\n                                    sx={{ m: 1 }}\r\n                                    variant=\"contained\"\r\n                                    onClick={handleAdd}\r\n                                >\r\n                                    Add Category\r\n                                </Button>\r\n                            </Box>\r\n                        </Grid>\r\n                    </Grid>\r\n                    <Box sx={{ mt: 3 }}>\r\n                        <CategoryListTable categories={categories} />\r\n                    </Box>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport {\r\n    Box,\r\n    Card,\r\n    Button,\r\n    Container,\r\n    Grid,\r\n    Typography,\r\n    FormControl,\r\n    TextField,\r\n    Snackbar,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    Alert,\r\n} from '@mui/material';\r\nimport { Title } from '../../components/Title';\r\nimport { CategoryData, getCategory, postCategory, putCategory, deleteCategory } from '../../data';\r\nimport { useForm, Controller, SubmitHandler } from 'react-hook-form';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { IToastState } from '../../components/ToastState';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { Navigate } from 'react-router-dom';\r\n\r\ninterface IFormData {\r\n    name: string;\r\n    icon: string;\r\n    description: string;\r\n}\r\n\r\nexport const CategoryDetails = () => {\r\n    const { categoryId } = useParams();\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n    const [category, setCategory] = useState<CategoryData | null>(null);\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n\r\n    const [toastState, setToastState] = useState<IToastState>({\r\n        open: false,\r\n        status: 'success',\r\n        message: '',\r\n    });\r\n\r\n    useEffect(() => {\r\n        let cancelled = false;\r\n        const doGetCategory = async (categoryId: number) => {\r\n            const fetchedCategory = await getCategory(categoryId);\r\n            if (!cancelled) {\r\n                setCategory(fetchedCategory);\r\n            }\r\n        };\r\n        if (categoryId) {\r\n            doGetCategory(Number(categoryId));\r\n        } else {\r\n            setCategory({\r\n                categoryId: 0,\r\n                name: '',\r\n                icon: '',\r\n                description: '',\r\n                questionCount: 0,\r\n            });\r\n        }\r\n        return () => {\r\n            cancelled = true;\r\n        };\r\n    }, []);\r\n\r\n    const { handleSubmit, control } = useForm<IFormData>();\r\n    const onSubmit: SubmitHandler<IFormData> = async (data) => {\r\n        let state: IToastState;\r\n\r\n        if (category.categoryId === 0) {\r\n            const result = await postCategory({\r\n                name: data.name,\r\n                icon: data.icon,\r\n                description: data.description,\r\n            });\r\n\r\n            if (result) {\r\n                state = { open: true, status: 'success', message: 'Category was successfully created' };\r\n            } else {\r\n                state = { open: true, status: 'error', message: 'Failed to create category' };\r\n            }\r\n        } else {\r\n            const result = await putCategory(Number(categoryId), {\r\n                name: data.name,\r\n                icon: data.icon,\r\n                description: data.description,\r\n            });\r\n\r\n            if (result) {\r\n                state = { open: true, status: 'success', message: 'Category was successfully updated' };\r\n            } else {\r\n                state = { open: true, status: 'error', message: 'Failed to save category' };\r\n            }\r\n        }\r\n        setToastState(state);\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    const handleDelete = async () => {\r\n        setOpenDialog(false);\r\n        const result = await deleteCategory(Number(categoryId));\r\n\r\n        if (!result) {\r\n            let state: IToastState;\r\n            state = { open: true, status: 'error', message: 'Failed to delete category' };\r\n            setToastState(state);\r\n        } else {\r\n            navigate('/kb/categories');\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Admin) && <Navigate to=\"/account/login\" />}\r\n            {category && <Title title={category.name} />}\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    minHeight: '100%',\r\n                    py: 8,\r\n                }}\r\n            >\r\n                <Dialog\r\n                    open={openDialog}\r\n                    onClose={() => setOpenDialog(false)}\r\n                    aria-labelledby=\"alert-dialog-title\"\r\n                    aria-describedby=\"alert-dialog-description\"\r\n                >\r\n                    <DialogTitle id=\"alert-dialog-title\">{'Delete this category?'}</DialogTitle>\r\n                    <DialogContent>\r\n                        <DialogContentText id=\"alert-dialog-description\">\r\n                            Deleting this category will make all its articles not assigned to a category. Do you want to\r\n                            continue?\r\n                        </DialogContentText>\r\n                    </DialogContent>\r\n                    <DialogActions>\r\n                        <Button onClick={() => setOpenDialog(false)}>Cancel</Button>\r\n                        <Button onClick={handleDelete} autoFocus>\r\n                            ОК\r\n                        </Button>\r\n                    </DialogActions>\r\n                </Dialog>\r\n                {category && (\r\n                    <form onSubmit={handleSubmit(onSubmit)}>\r\n                        <Container maxWidth={false}>\r\n                            <Snackbar\r\n                                open={toastState.open}\r\n                                autoHideDuration={6000}\r\n                                onClose={handleCloseSnackbar}\r\n                                anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                            >\r\n                                <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                                    {toastState.message}\r\n                                </Alert>\r\n                            </Snackbar>\r\n\r\n                            <Grid container justifyContent=\"space-between\" spacing={3}>\r\n                                <Grid item lg={8} xl={10} xs={12}>\r\n                                    <Typography color=\"textPrimary\" variant=\"h5\">\r\n                                        {category.categoryId === 0 ? 'Create' : 'Edit'} category\r\n                                    </Typography>\r\n                                </Grid>\r\n                                <Grid item lg={4} xl={2} xs={12}>\r\n                                    <FormControl fullWidth>\r\n                                        <Button color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                            Save\r\n                                        </Button>\r\n                                    </FormControl>\r\n                                </Grid>\r\n                            </Grid>\r\n                            <Card sx={{ mt: 5 }}>\r\n                                <Box sx={{ p: 3 }}>\r\n                                    <Grid container justifyContent=\"space-between\" spacing={5}>\r\n                                        <Grid item xs={12}>\r\n                                            <Controller\r\n                                                name=\"name\"\r\n                                                control={control}\r\n                                                defaultValue={category.name}\r\n                                                rules={{\r\n                                                    required: 'Name is required',\r\n                                                    maxLength: {\r\n                                                        value: 100,\r\n                                                        message: 'Name cannot exceed 100 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        fullWidth\r\n                                                        label=\"Name\"\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Grid>\r\n                                        <Grid item xs={12}>\r\n                                            <Controller\r\n                                                name=\"icon\"\r\n                                                control={control}\r\n                                                defaultValue={category.icon}\r\n                                                rules={{\r\n                                                    required: 'Icon is required',\r\n                                                    maxLength: {\r\n                                                        value: 100,\r\n                                                        message: 'Icon cannot exceed 100 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        fullWidth\r\n                                                        label=\"Icon\"\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Grid>\r\n                                        <Grid item xs={12}>\r\n                                            <Controller\r\n                                                name=\"description\"\r\n                                                control={control}\r\n                                                defaultValue={category.description}\r\n                                                rules={{\r\n                                                    required: 'Description is required',\r\n                                                    maxLength: {\r\n                                                        value: 250,\r\n                                                        message: 'Description cannot exceed 250 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        fullWidth\r\n                                                        label=\"Description\"\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Grid>\r\n                                        {category.categoryId !== 0 && (\r\n                                            <Grid item>\r\n                                                <Button color=\"secondary\" onClick={() => setOpenDialog(true)}>\r\n                                                    Delete category\r\n                                                </Button>\r\n                                            </Grid>\r\n                                        )}\r\n                                    </Grid>\r\n                                </Box>\r\n                            </Card>\r\n                        </Container>\r\n                    </form>\r\n                )}\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect, useState, useRef } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport { attachmentsUrl } from '../../AppSettings';\r\nimport {\r\n    Box,\r\n    Card,\r\n    Button,\r\n    Container,\r\n    Divider,\r\n    Grid,\r\n    Typography,\r\n    InputLabel,\r\n    MenuItem,\r\n    Select,\r\n    FormControl,\r\n    FormControlLabel,\r\n    Switch,\r\n    TextField,\r\n    Snackbar,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    Link,\r\n    Alert,\r\n} from '@mui/material';\r\nimport DeleteForeverIcon from '@mui/icons-material/DeleteForever';\r\nimport { Title } from '../../components/Title';\r\nimport {\r\n    CategoryData,\r\n    QuestionData,\r\n    getQuestionForEdit,\r\n    getCategories,\r\n    putQuestion,\r\n    postQuestion,\r\n    deleteQuestion,\r\n    uploadAttachment,\r\n} from '../../data';\r\nimport { Editor } from '@tinymce/tinymce-react';\r\nimport { useForm, Controller, SubmitHandler } from 'react-hook-form';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { tinymceKey } from '../../AppSettings';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { Navigate } from 'react-router-dom';\r\n\r\ntype IFormData = {\r\n    categoryId: number;\r\n    title: string;\r\n    labels: string;\r\n    content: string;\r\n    isPublic: boolean;\r\n    isPublished: boolean;\r\n    isArchived: boolean;\r\n    isPromoted: boolean;\r\n};\r\n\r\ninterface IToastState {\r\n    open: boolean;\r\n    status: 'error' | 'info' | 'success' | 'warning';\r\n    message: string;\r\n}\r\n\r\ninterface IAttachment {\r\n    id: number;\r\n    fileName: string;\r\n    add: boolean;\r\n    remove: boolean;\r\n}\r\n\r\nexport const QuestionDetails = () => {\r\n    const { questionId } = useParams();\r\n    const navigate = useNavigate();\r\n    const account = accountService.getAccount();\r\n    const [categories, setCategories] = useState<CategoryData[]>([]);\r\n    const [question, setQuestion] = useState<QuestionData | null>(null);\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n    const [updated, setUpdated] = useState<Date>(null);\r\n    const editorRef = useRef(null);\r\n    const [toastState, setToastState] = useState<IToastState>({\r\n        open: false,\r\n        status: 'success',\r\n        message: '',\r\n    });\r\n    const [attachments, setAttachments] = useState<IAttachment[]>([]);\r\n\r\n    useEffect(() => {\r\n        let cancelled = false;\r\n        const doGetCategories = async () => {\r\n            const fetchedCategories = await getCategories();\r\n            if (!cancelled) {\r\n                setCategories(fetchedCategories);\r\n            }\r\n        };\r\n        doGetCategories();\r\n        return () => {\r\n            cancelled = true;\r\n        };\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        let cancelled = false;\r\n        const doGetQuestion = async (questionId: number) => {\r\n            const fetchedQuestion = await getQuestionForEdit(questionId);\r\n            if (!cancelled) {\r\n                setQuestion(fetchedQuestion);\r\n                setUpdated(fetchedQuestion.updated);\r\n            }\r\n        };\r\n        if (questionId) {\r\n            doGetQuestion(Number(questionId));\r\n        } else {\r\n            setQuestion({\r\n                questionId: 0,\r\n                categoryId: 0,\r\n                categoryName: '',\r\n                title: '',\r\n                labels: '',\r\n                updated: new Date(),\r\n                content: '',\r\n                isPublic: true,\r\n                isPublished: false,\r\n                isArchived: false,\r\n                isPromoted: false,\r\n            });\r\n        }\r\n        return () => {\r\n            cancelled = true;\r\n        };\r\n    }, [questionId]);\r\n\r\n    const { handleSubmit, control } = useForm<IFormData>();\r\n    const submitHandler: SubmitHandler<IFormData> = async (data) => {\r\n        let state: IToastState;\r\n        let content = '';\r\n        if (editorRef.current) {\r\n            content = editorRef.current.getContent();\r\n            if (content.length === 0) {\r\n                state = { open: true, status: 'error', message: 'Article content cannot be empty' };\r\n                setToastState(state);\r\n                return;\r\n            }\r\n        }\r\n        if (question.questionId === 0) {\r\n            const result = await postQuestion({\r\n                categoryId: Number(data.categoryId),\r\n                title: data.title,\r\n                content: content,\r\n                labels: data.labels,\r\n                isPublic: data.isPublic,\r\n                isPublished: data.isPublished,\r\n                isArchived: data.isArchived,\r\n                isPromoted: data.isPromoted,\r\n                userId: 1,\r\n            });\r\n            if (result) {\r\n                let attachmentsToAdd = '';\r\n                for (let i = 0; i < attachments.length; i++) {\r\n                    if (attachments[i].add) {\r\n                        if (attachmentsToAdd.length > 0) {\r\n                            attachmentsToAdd += ',';\r\n                        }\r\n                        attachmentsToAdd += attachments[i].id.toString();\r\n                    }\r\n                }\r\n\r\n                // await addAttachments(result.questionId, { attachments: attachmentsToAdd });\r\n\r\n                state = { open: true, status: 'success', message: 'Article was successfully created' };\r\n                setUpdated(result.updated);\r\n            } else {\r\n                state = { open: true, status: 'error', message: 'Failed to create article' };\r\n            }\r\n        } else {\r\n            const result = await putQuestion(Number(questionId), {\r\n                categoryId: Number(data.categoryId),\r\n                title: data.title,\r\n                content: content,\r\n                labels: data.labels,\r\n                isPublic: data.isPublic,\r\n                isPublished: data.isPublished,\r\n                isArchived: data.isArchived,\r\n                isPromoted: data.isPromoted,\r\n                userId: 1,\r\n            });\r\n            if (result) {\r\n                state = { open: true, status: 'success', message: 'Article was successfully updated' };\r\n                setUpdated(result.updated);\r\n            } else {\r\n                state = { open: true, status: 'error', message: 'Failed to save article' };\r\n            }\r\n        }\r\n        setToastState(state);\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    const handleDelete = async () => {\r\n        setOpenDialog(false);\r\n        const result = await deleteQuestion(Number(questionId));\r\n\r\n        if (!result) {\r\n            let state: IToastState;\r\n            state = { open: true, status: 'error', message: 'Failed to delete article' };\r\n            setToastState(state);\r\n        } else {\r\n            navigate('/kb');\r\n        }\r\n    };\r\n\r\n    // file upload\r\n    const hiddenFileInput = React.useRef(null);\r\n    const handleUploadClick = (event) => {\r\n        hiddenFileInput.current.click();\r\n    };\r\n    const handleUploadChange = (event) => {\r\n        const file = event.target.files[0];\r\n        if (file !== undefined) {\r\n            const doUpload = async () => {\r\n                const attachment = await uploadAttachment(file);\r\n                if (attachment === undefined) {\r\n                    let state: IToastState;\r\n                    state = { open: true, status: 'error', message: `Failed to upload ${file.name}` };\r\n                    setToastState(state);\r\n                } else {\r\n                    setAttachments([\r\n                        ...attachments,\r\n                        { id: attachment.attachmentId, fileName: attachment.fileName, add: true, remove: false },\r\n                    ]);\r\n                }\r\n            };\r\n            doUpload();\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Admin) && <Navigate to=\"/account/login\" />}\r\n            {question && <Title title={question.title} />}\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    minHeight: '100%',\r\n                    py: 3,\r\n                }}\r\n            >\r\n                <Dialog\r\n                    open={openDialog}\r\n                    onClose={() => setOpenDialog(false)}\r\n                    aria-labelledby=\"alert-dialog-title\"\r\n                    aria-describedby=\"alert-dialog-description\"\r\n                >\r\n                    <DialogTitle id=\"alert-dialog-title\">{'Delete this article?'}</DialogTitle>\r\n                    <DialogContent>\r\n                        <DialogContentText id=\"alert-dialog-description\">\r\n                            Are you sure you want to delete this article?\r\n                        </DialogContentText>\r\n                    </DialogContent>\r\n                    <DialogActions>\r\n                        <Button onClick={() => setOpenDialog(false)}>Cancel</Button>\r\n                        <Button onClick={handleDelete} autoFocus>\r\n                            ОК\r\n                        </Button>\r\n                    </DialogActions>\r\n                </Dialog>\r\n                {question && (\r\n                    <Container maxWidth={false}>\r\n                        <Snackbar\r\n                            open={toastState.open}\r\n                            autoHideDuration={6000}\r\n                            onClose={handleCloseSnackbar}\r\n                            anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                        >\r\n                            <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                                {toastState.message}\r\n                            </Alert>\r\n                        </Snackbar>\r\n\r\n                        <Grid container justifyContent=\"space-between\" spacing={3}>\r\n                            <Grid item lg={8} xl={9} xs={12}>\r\n                                <Card sx={{ p: 3 }}>\r\n                                    <Box\r\n                                        sx={{\r\n                                            m: 0,\r\n                                            mb: 4,\r\n                                            maxWidth: '100%',\r\n                                            fontSize: 20,\r\n                                        }}\r\n                                    >\r\n                                        <Controller\r\n                                            name=\"title\"\r\n                                            control={control}\r\n                                            defaultValue={question.title}\r\n                                            rules={{\r\n                                                required: 'Title is required',\r\n                                                maxLength: {\r\n                                                    value: 4000,\r\n                                                    message: 'Title cannot exceed 4000 characters',\r\n                                                },\r\n                                            }}\r\n                                            render={({ field, fieldState: { error } }) => (\r\n                                                <TextField\r\n                                                    {...field}\r\n                                                    fullWidth\r\n                                                    label=\"Title\"\r\n                                                    error={!!error}\r\n                                                    helperText={error ? error.message : null}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n\r\n                                        <Typography variant=\"overline\">\r\n                                            Last Updated {updated && updated.toLocaleDateString()}{' '}\r\n                                            {updated && updated.toLocaleTimeString()}\r\n                                        </Typography>\r\n                                    </Box>\r\n                                    <Editor\r\n                                        onInit={(evt, editor) => (editorRef.current = editor)}\r\n                                        apiKey={tinymceKey}\r\n                                        initialValue={question.content}\r\n                                        init={{\r\n                                            height: 500,\r\n                                            menubar: false,\r\n                                            plugins: [\r\n                                                'advlist autolink lists link image charmap print preview anchor',\r\n                                                'searchreplace visualblocks code fullscreen',\r\n                                                'insertdatetime media table paste code help wordcount',\r\n                                                'imagetools code link',\r\n                                            ],\r\n                                            toolbar:\r\n                                                'undo redo | formatselect | bold italic forecolor | alignleft aligncenter | bullist numlist outdent indent | fullscreen removeformat | link image | code | table tabledelete | tableprops tablerowprops tablecellprops | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol',\r\n                                        }}\r\n                                        onEditorChange={(content, editor) => {}}\r\n                                    />\r\n                                </Card>\r\n                            </Grid>\r\n                            <Grid item lg={4} xl={3} xs={12}>\r\n                                <Box\r\n                                    sx={{\r\n                                        backgroundColor: 'background.default',\r\n                                        display: 'flex',\r\n                                        flexDirection: 'column',\r\n                                        flexGrow: 1,\r\n                                    }}\r\n                                >\r\n                                    <Box\r\n                                        sx={{\r\n                                            flexGrow: 1,\r\n                                            overflow: 'auto',\r\n                                        }}\r\n                                    >\r\n                                        <Grid container direction=\"column\" spacing=\"\" sx={{ p: 3 }}>\r\n                                            <Grid item>\r\n                                                <form onSubmit={handleSubmit(submitHandler)}>\r\n                                                    <FormControl fullWidth>\r\n                                                        <Button color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                                            Save\r\n                                                        </Button>\r\n                                                    </FormControl>\r\n                                                </form>\r\n                                            </Grid>\r\n                                            <Grid item sx={{ mt: 3 }}>\r\n                                                <Controller\r\n                                                    name=\"isPublished\"\r\n                                                    control={control}\r\n                                                    defaultValue={question.isPublished}\r\n                                                    render={({ field }) => (\r\n                                                        <FormControlLabel\r\n                                                            control={\r\n                                                                <Switch\r\n                                                                    {...field}\r\n                                                                    color=\"primary\"\r\n                                                                    defaultChecked={question.isPublished}\r\n                                                                />\r\n                                                            }\r\n                                                            label=\"Published\"\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Grid>\r\n                                            <Grid item sx={{ mt: 0 }}>\r\n                                                <Controller\r\n                                                    name=\"isPublic\"\r\n                                                    control={control}\r\n                                                    defaultValue={question.isPublic}\r\n                                                    render={({ field }) => (\r\n                                                        <FormControlLabel\r\n                                                            control={\r\n                                                                <Switch\r\n                                                                    {...field}\r\n                                                                    color=\"primary\"\r\n                                                                    defaultChecked={question.isPublic}\r\n                                                                />\r\n                                                            }\r\n                                                            label=\"Public\"\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Grid>\r\n                                            <Grid item sx={{ mt: 2 }}>\r\n                                                <FormControl fullWidth>\r\n                                                    <InputLabel htmlFor=\"category-select\">Category</InputLabel>\r\n                                                    <Controller\r\n                                                        control={control}\r\n                                                        name=\"categoryId\"\r\n                                                        defaultValue={question.categoryId ?? 0}\r\n                                                        render={({ field }) => (\r\n                                                            <Select {...field} id=\"category-select\">\r\n                                                                <MenuItem key={0} value={0} disabled>\r\n                                                                    NO CATEGORY\r\n                                                                </MenuItem>\r\n                                                                {categories.map((category) => (\r\n                                                                    <MenuItem\r\n                                                                        key={category.categoryId}\r\n                                                                        value={category.categoryId}\r\n                                                                    >\r\n                                                                        {category.name}\r\n                                                                    </MenuItem>\r\n                                                                ))}\r\n                                                            </Select>\r\n                                                        )}\r\n                                                    />\r\n                                                </FormControl>\r\n                                            </Grid>\r\n                                            <Grid item sx={{ mt: 4 }}>\r\n                                                <Controller\r\n                                                    name=\"labels\"\r\n                                                    control={control}\r\n                                                    defaultValue={question.labels}\r\n                                                    rules={{\r\n                                                        maxLength: {\r\n                                                            value: 1000,\r\n                                                            message: 'Labels cannot exceed 1000 characters',\r\n                                                        },\r\n                                                    }}\r\n                                                    render={({ field, fieldState: { error } }) => (\r\n                                                        <TextField\r\n                                                            {...field}\r\n                                                            fullWidth\r\n                                                            label=\"Labels\"\r\n                                                            variant=\"outlined\"\r\n                                                            error={!!error}\r\n                                                            helperText={error ? error.message : null}\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Grid>\r\n\r\n                                            <Grid item sx={{ mt: 2 }}>\r\n                                                <Controller\r\n                                                    name=\"isPromoted\"\r\n                                                    control={control}\r\n                                                    defaultValue={question.isPromoted}\r\n                                                    render={({ field }) => (\r\n                                                        <FormControlLabel\r\n                                                            control={\r\n                                                                <Switch\r\n                                                                    {...field}\r\n                                                                    color=\"primary\"\r\n                                                                    defaultChecked={question.isPromoted}\r\n                                                                />\r\n                                                            }\r\n                                                            label=\"Promoted\"\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Grid>\r\n\r\n                                            <Grid item sx={{ mt: 2 }}>\r\n                                                <Typography color=\"textSecondary\" variant=\"subtitle2\" sx={{ mb: 1 }}>\r\n                                                    Attachments\r\n                                                </Typography>\r\n                                                {attachments.map((attach) => (\r\n                                                    <div key={attach.id}>\r\n                                                        <Link\r\n                                                            variant=\"body2\"\r\n                                                            underline=\"hover\"\r\n                                                            href={attachmentsUrl + attach.id + '_' + attach.fileName}\r\n                                                            target=\"_blank\"\r\n                                                        >\r\n                                                            {attach.fileName}\r\n                                                        </Link>\r\n                                                        <Link\r\n                                                            component=\"button\"\r\n                                                            variant=\"body2\"\r\n                                                            color=\"secondary\"\r\n                                                            onClick={() => {}}\r\n                                                        >\r\n                                                            <DeleteForeverIcon />\r\n                                                        </Link>\r\n                                                    </div>\r\n                                                ))}\r\n                                                <FormControl>\r\n                                                    <Button\r\n                                                        color=\"primary\"\r\n                                                        variant=\"text\"\r\n                                                        onClick={handleUploadClick}\r\n                                                        sx={{ mt: 1 }}\r\n                                                    >\r\n                                                        Upload attachment\r\n                                                    </Button>\r\n                                                    <input\r\n                                                        type=\"file\"\r\n                                                        ref={hiddenFileInput}\r\n                                                        onChange={handleUploadChange}\r\n                                                        style={{ display: 'none' }}\r\n                                                    />\r\n                                                </FormControl>\r\n                                            </Grid>\r\n\r\n                                            <Grid item sx={{ mt: 2, pt: 1 }}>\r\n                                                <Divider />\r\n                                                <Controller\r\n                                                    name=\"isArchived\"\r\n                                                    control={control}\r\n                                                    defaultValue={question.isArchived}\r\n                                                    render={({ field }) => (\r\n                                                        <FormControlLabel\r\n                                                            sx={{ my: 2 }}\r\n                                                            control={\r\n                                                                <Switch\r\n                                                                    {...field}\r\n                                                                    color=\"secondary\"\r\n                                                                    defaultChecked={question.isArchived}\r\n                                                                />\r\n                                                            }\r\n                                                            label=\"Archived\"\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Grid>\r\n\r\n                                            {question.questionId !== 0 && (\r\n                                                <Grid item>\r\n                                                    <Button color=\"secondary\" onClick={() => setOpenDialog(true)}>\r\n                                                        Delete article\r\n                                                    </Button>\r\n                                                </Grid>\r\n                                            )}\r\n                                        </Grid>\r\n                                    </Box>\r\n                                </Box>\r\n                            </Grid>\r\n                        </Grid>\r\n                    </Container>\r\n                    // </form>\r\n                )}\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { Box, Container, Grid, Typography } from '@mui/material';\r\nimport { Title } from '../../components/Title';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { Navigate } from 'react-router-dom';\r\n\r\nexport const Settings = () => {\r\n    const account = accountService.getAccount();\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Admin) && <Navigate to=\"/account/login\" />}\r\n            <Title title=\"Settings\" />\r\n            <Box\r\n                sx={{\r\n                    backgroundColor: 'background.default',\r\n                    minHeight: '100%',\r\n                    py: 8,\r\n                }}\r\n            >\r\n                <Container maxWidth={false}>\r\n                    <Grid container justifyContent=\"space-between\" spacing={3}>\r\n                        <Grid item>\r\n                            <Typography color=\"textPrimary\" variant=\"h5\">\r\n                                Settings\r\n                            </Typography>\r\n                        </Grid>\r\n                    </Grid>\r\n                    <Box sx={{ mt: 3 }}>\r\n                        <Typography color=\"textSecondary\" variant=\"body2\">\r\n                            Dashboard settings\r\n                        </Typography>\r\n                    </Box>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { useEffect } from 'react';\r\nimport NProgress from 'nprogress';\r\nimport { Box } from '@mui/material';\r\n\r\nexport const LoadingScreen = () => {\r\n    useEffect(() => {\r\n        NProgress.start();\r\n        return (): void => {\r\n            NProgress.done();\r\n        };\r\n    }, []);\r\n\r\n    return (\r\n        <Box\r\n            sx={{\r\n                backgroundColor: 'background.paper',\r\n                minHeight: '100%',\r\n            }}\r\n        />\r\n    );\r\n};\r\n","import { FC, useEffect, useState, useCallback, useRef } from 'react';\r\nimport { useLocation, Navigate } from 'react-router';\r\nimport { Title } from '../../components/Title';\r\nimport {\r\n    Box,\r\n    Card,\r\n    CardContent,\r\n    Typography,\r\n    Grid,\r\n    Container,\r\n    Divider,\r\n    CardHeader,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TableRow,\r\n    useMediaQuery,\r\n    Theme,\r\n    Button,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    TextField,\r\n    Snackbar,\r\n    Alert,\r\n} from '@mui/material';\r\nimport { useForm } from 'react-hook-form';\r\nimport type { CheckoutInfoResponse } from '../../types/checkout';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { clientService } from '../../client.service';\r\nimport { useMounted } from '../../hooks/use-mounted';\r\nimport { Scrollbar } from '../../components/Scrollbar';\r\nimport { PropertyList } from '../../components/PropertyList';\r\nimport { PropertyListItem } from '../../components/PropertyListItem';\r\nimport numeral from 'numeral';\r\nimport CreditCard from 'react-credit-cards';\r\nimport { formatCreditCardNumber, formatExpirationDate, formatCVC } from '../../utils/credit-cards';\r\nimport 'react-credit-cards/es/styles-compiled.css';\r\nimport creditCards from '../../images/credit-cards.png';\r\nimport type { CheckoutRequest } from '../../types/checkout';\r\nimport { styled } from '@mui/material/styles';\r\nimport PaypalImg from '../../images/paypal.svg';\r\nimport { IToastState, defaultToastState } from '../../components/ToastState';\r\nimport Message from '../Message';\r\nimport { settings } from '../../settings';\r\nimport { checkZip } from '../../utils/cart';\r\nimport { CountryNameToCode, shortProvinceOrStateName } from '../../utils/cart';\r\n\r\nconst PaypalButton = styled(Button)(({ theme }) => ({\r\n    backgroundColor: '#ffc439',\r\n    backgroundImage: `url(${PaypalImg})`,\r\n    backgroundRepeat: 'no-repeat',\r\n    backgroundPosition: 'center',\r\n}));\r\n\r\nconst translateCardType = (issuer: string): string => {\r\n    switch (issuer) {\r\n        case 'visa':\r\n            return 'VISA';\r\n        case 'mastercard':\r\n            return 'MC';\r\n        case 'amex':\r\n            return 'AMEX';\r\n        case 'dinersclub':\r\n            return 'DINE';\r\n        case 'discover':\r\n            return 'DISC';\r\n        default:\r\n            return '';\r\n    }\r\n};\r\n\r\ninterface CheckoutProps {\r\n    isPublic: boolean;\r\n}\r\n\r\ninterface PaypalData {\r\n    firstName: string;\r\n    lastName: string;\r\n    address: string;\r\n    city: string;\r\n    zip: string;\r\n    country: string;\r\n    state: string;\r\n    email: string;\r\n    phone_a: string;\r\n    phone_b: string;\r\n    phone_c: string;\r\n}\r\nfunction emptyPaypalData(): PaypalData {\r\n    return {\r\n        firstName: '',\r\n        lastName: '',\r\n        address: '',\r\n        city: '',\r\n        zip: '',\r\n        country: '',\r\n        state: '',\r\n        email: '',\r\n        phone_a: '',\r\n        phone_b: '',\r\n        phone_c: '',\r\n    };\r\n}\r\n\r\nconst ANNUAL_SUPPORT_ID = 36;\r\n\r\nexport const Checkout: FC<CheckoutProps> = ({ isPublic }) => {\r\n    const location = useLocation();\r\n    const account = accountService.getAccount();\r\n    const { pid, qty, lic, order, pid_from } = location.state || {};\r\n    const isUpgrade = pid_from > 0;\r\n\r\n    const smDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\r\n    const align = smDown ? 'vertical' : 'horizontal';\r\n\r\n    const isMounted = useMounted();\r\n    const [info, setInfo] = useState<CheckoutInfoResponse | null>(null);\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n    const [openBlacklistedDialog, setOpenBlacklistedDialog] = useState(false);\r\n    const [openMonerisDialog, setOpenMonerisDialog] = useState(false);\r\n    const [dialogTitle, setDialogTitle] = useState('');\r\n    const [dialogMessage, setDialogMessage] = useState('');\r\n    const [dialogFollowLink, setDialogFollowLink] = useState('');\r\n    const [toastState, setToastState] = useState<IToastState>(defaultToastState);\r\n    const [loadError, setLoadError] = useState<string>(undefined);\r\n\r\n    const [cardNumber, setCardNumber] = useState<string>('');\r\n    const [expiry, setExpiry] = useState<string>('');\r\n    const [cvc, setCvc] = useState<string>('');\r\n    const [focused, setFocused] = useState<string>('');\r\n    const [issuer, setIssuer] = useState<string>('');\r\n    const [inProgress, setInProgress] = useState<boolean>(false);\r\n    const { handleSubmit } = useForm<FormData>();\r\n\r\n    const [paypalData, setPaypalData] = useState<PaypalData>(emptyPaypalData());\r\n    const refPaypalSubmitButton = useRef<HTMLButtonElement>(null);\r\n    const { handleSubmit: handleSubmitPayPal } = useForm<PaypalData>();\r\n\r\n    const loadData = useCallback(async () => {\r\n        try {\r\n            const data = await clientService.getCheckoutInfo(pid, qty, lic, order, isUpgrade, pid_from);\r\n            if (isMounted()) {\r\n                if (data.ok) {\r\n                    setInfo(data.body);\r\n                } else {\r\n                    setLoadError(data.message);\r\n                }\r\n            }\r\n        } catch (err) {\r\n            console.error(err);\r\n        }\r\n    }, [isMounted]);\r\n\r\n    useEffect(() => {\r\n        loadData();\r\n    }, []);\r\n\r\n    const handleCallback = ({ issuer }, isValid) => {\r\n        if (isValid) {\r\n            setIssuer(issuer);\r\n        } else {\r\n            setIssuer('');\r\n        }\r\n    };\r\n\r\n    const handleInputFocus = ({ target }) => {\r\n        setFocused(target.name);\r\n    };\r\n\r\n    const handleInputChange = ({ target }) => {\r\n        if (target.name === 'number') {\r\n            target.value = formatCreditCardNumber(target.value);\r\n            setCardNumber(target.value);\r\n        } else if (target.name === 'expiry') {\r\n            target.value = formatExpirationDate(expiry, target.value);\r\n            setExpiry(target.value);\r\n        } else if (target.name === 'cvc') {\r\n            target.value = formatCVC(target.value, cardNumber);\r\n            setCvc(target.value);\r\n        }\r\n    };\r\n\r\n    const onSubmit = async (data) => {\r\n        setInProgress(true);\r\n\r\n        const request: CheckoutRequest = {\r\n            client_id: info.clientId,\r\n            credit_card_brand: translateCardType(issuer),\r\n            credit_card_number: cardNumber.replaceAll(' ', ''),\r\n            expire_month: expiry.substr(0, 2),\r\n            expire_year: '20' + expiry.substr(3, 2),\r\n            cvv: cvc,\r\n            bill_amount: info.total,\r\n            bill_gst: info.gst,\r\n            bill_pst: info.pst,\r\n            discount_code: info.productId === ANNUAL_SUPPORT_ID ? '' : info.orderId,\r\n            discount_amount: info.discount,\r\n            comments: info.productId === ANNUAL_SUPPORT_ID ? info.orderId : '',\r\n            product_id: info.productId,\r\n            product: info.productName,\r\n            license: info.licenseId,\r\n            quantity: info.quantity,\r\n            product_amount: info.subtotal,\r\n        };\r\n\r\n        const response = await clientService.checkout(request);\r\n\r\n        if (response == null) {\r\n            setDialogTitle('Transaction Failed');\r\n            setDialogMessage('Server communication error');\r\n            setDialogFollowLink('');\r\n            setOpenDialog(true);\r\n            setInProgress(false);\r\n        } else if (!response.status) {\r\n            if (response.message === 'Blacklisted') {\r\n                setOpenBlacklistedDialog(true);\r\n                setInProgress(false);\r\n            } else if (response.message === 'moneris problem') {\r\n                setOpenMonerisDialog(true);\r\n                setInProgress(false);\r\n            } else {\r\n                setDialogTitle('Transaction Failed');\r\n                setDialogMessage(response.message);\r\n                setDialogFollowLink('');\r\n                setOpenDialog(true);\r\n                setInProgress(false);\r\n            }\r\n        } else {\r\n            setIssuer('');\r\n            setCardNumber('');\r\n            setExpiry('');\r\n            setCvc('');\r\n            setInProgress(false);\r\n            setDialogTitle('Success');\r\n            setDialogMessage('Payment was successfully processed');\r\n            setDialogFollowLink(`https://secure.lsoft.net/invoices/${response.order}`);\r\n            setOpenDialog(true);\r\n        }\r\n    };\r\n\r\n    const triggerPaypalSubmit = () => {\r\n        refPaypalSubmitButton?.current?.click();\r\n    };\r\n    const onSubmitPaypal = async (data) => {\r\n        setOpenBlacklistedDialog(false);\r\n        setOpenMonerisDialog(false);\r\n\r\n        // check if zip code is valid for US, because Paypal freezes if US zip code is invalid; for other countries it's not a problem\r\n        // if zip is missing, address, city etc are ignored by Paypal\r\n        const country: string = CountryNameToCode(info.country);\r\n        const zip: string = country === 'US' && !checkZip(info.zip) ? '' : info.zip;\r\n        const state: string = country === 'CA' || country === 'US' ? shortProvinceOrStateName(info.state) : info.state;\r\n\r\n        // phone number is split into 3 parts for US; other countries have only one part but area codes are checked by Paypal\r\n        let phone_a = '';\r\n        let phone_b = '';\r\n        let phone_c = '';\r\n\r\n        if (country === 'US' && info.phone.length === 10) {\r\n            phone_a = info.phone.substring(0, 3);\r\n            phone_b = info.phone.substring(3, 6);\r\n            phone_c = info.phone.substring(6, 10);\r\n        } else {\r\n            phone_a = info.phone;\r\n        }\r\n\r\n        const updatedPaypalData: PaypalData = {\r\n            firstName: info.firstName,\r\n            lastName: info.lastName,\r\n            address: info.address,\r\n            city: info.city,\r\n            zip: zip,\r\n            country: country,\r\n            state: state,\r\n            email: info.email,\r\n            phone_a: phone_a,\r\n            phone_b: phone_b,\r\n            phone_c: phone_c,\r\n        };\r\n        setPaypalData(updatedPaypalData);\r\n\r\n        triggerPaypalSubmit();\r\n    };\r\n\r\n    const onDialogOk = () => {\r\n        setOpenDialog(false);\r\n        if (dialogFollowLink.length > 0) {\r\n            window.open(dialogFollowLink, '_blank');\r\n        }\r\n    };\r\n\r\n    const handleCloseBlacklistedDialog = () => {};\r\n    const handleCancelBlacklistedDialog = () => {\r\n        setOpenBlacklistedDialog(false);\r\n    };\r\n\r\n    const handleCloseMonerisDialog = () => {};\r\n    const handleCancelMonerisDialog = () => {\r\n        setOpenMonerisDialog(false);\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    if (loadError) {\r\n        return <Message title=\"Invalid Request\" message={loadError} />;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {!isPublic && (!account || account.role !== UserRole.Client) && <Navigate to=\"/account/login\" />}\r\n            <Title title=\"Checkout\" />\r\n            <Box\r\n                component=\"main\"\r\n                sx={{\r\n                    flexGrow: 1,\r\n                    py: 3,\r\n                }}\r\n            >\r\n                <Container maxWidth=\"lg\">\r\n                    <Dialog\r\n                        open={openDialog}\r\n                        onClose={() => setOpenDialog(false)}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">{dialogTitle}</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">{dialogMessage}</DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button onClick={() => onDialogOk()} autoFocus>\r\n                                OK\r\n                            </Button>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openBlacklistedDialog}\r\n                        onClose={handleCloseBlacklistedDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment pre-processing validation failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelBlacklistedDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    OK\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Dialog\r\n                        open={openMonerisDialog}\r\n                        onClose={handleCloseMonerisDialog}\r\n                        aria-labelledby=\"alert-dialog-title\"\r\n                        aria-describedby=\"alert-dialog-description\"\r\n                    >\r\n                        <DialogTitle id=\"alert-dialog-title\">Payment processing failed</DialogTitle>\r\n                        <DialogContent>\r\n                            <DialogContentText id=\"alert-dialog-description\">\r\n                                We experience payment processing issues with our provider. You can try again to process\r\n                                payment later on, or use PayPal as a credit card payment processor.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                To process payment with Credit or Debit Card you will be <b>redirected to PayPal</b>{' '}\r\n                                where you can select option to pay with Credit/Debit Card as a guest. After successful\r\n                                payment you will be redirected back here to get an invoice and registration key.\r\n                            </DialogContentText>\r\n                            <DialogContentText sx={{ mt: 2 }}>\r\n                                You can also contact our sales department {settings.phone1} for order processing over\r\n                                the phone.\r\n                            </DialogContentText>\r\n                        </DialogContent>\r\n                        <DialogActions>\r\n                            <Button sx={{ mr: 2 }} onClick={handleCancelMonerisDialog} autoFocus>\r\n                                Cancel\r\n                            </Button>\r\n                            <form id=\"payment\" onSubmit={handleSubmitPayPal(onSubmitPaypal)}>\r\n                                <Button sx={{ mr: 2 }} color=\"primary\" variant=\"contained\" type=\"submit\">\r\n                                    Use PayPal\r\n                                </Button>\r\n                            </form>\r\n                        </DialogActions>\r\n                    </Dialog>\r\n\r\n                    <Snackbar\r\n                        open={toastState.open}\r\n                        autoHideDuration={6000}\r\n                        onClose={handleCloseSnackbar}\r\n                        anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                    >\r\n                        <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                            {toastState.message}\r\n                        </Alert>\r\n                    </Snackbar>\r\n\r\n                    <Grid container spacing={3}>\r\n                        <Grid item xs={12}>\r\n                            <Card>\r\n                                <CardHeader title=\"Order Summary\" />\r\n                                <CardContent sx={{ py: 0 }}>\r\n                                    <Scrollbar>\r\n                                        <Box sx={{ minWidth: 700 }}>\r\n                                            <Table>\r\n                                                <TableHead>\r\n                                                    <TableRow>\r\n                                                        <TableCell>Product</TableCell>\r\n                                                        <TableCell>License</TableCell>\r\n                                                        <TableCell align=\"right\">Price</TableCell>\r\n                                                        <TableCell align=\"right\">Quantity</TableCell>\r\n                                                        <TableCell align=\"right\">Amount</TableCell>\r\n                                                    </TableRow>\r\n                                                </TableHead>\r\n                                                <TableBody>\r\n                                                    <TableRow>\r\n                                                        <TableCell>{info && info.productName}</TableCell>\r\n                                                        <TableCell>{info && info.licenseName}</TableCell>\r\n                                                        <TableCell align=\"right\">\r\n                                                            {info && `$${numeral(info.price).format('0,0.00')}`}\r\n                                                        </TableCell>\r\n                                                        <TableCell align=\"right\">\r\n                                                            {info &&\r\n                                                                (info.productId === 36 && info.quantity === 15\r\n                                                                    ? 'Lifetime'\r\n                                                                    : info.quantity)}\r\n                                                        </TableCell>\r\n                                                        <TableCell align=\"right\">\r\n                                                            {info && `$${numeral(info.subtotal).format('0,0.00')}`}\r\n                                                        </TableCell>\r\n                                                    </TableRow>\r\n\r\n                                                    {info && info.discount > 0 && (\r\n                                                        <>\r\n                                                            <TableRow>\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell align=\"right\">Discount</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    {info &&\r\n                                                                        `-$${numeral(info.discount).format('0,0.00')}`}\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n\r\n                                                            <TableRow>\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell align=\"right\">Subtotal</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    {info &&\r\n                                                                        `$${numeral(info.subtotalAfterDiscount).format(\r\n                                                                            '0,0.00'\r\n                                                                        )}`}\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        </>\r\n                                                    )}\r\n\r\n                                                    {info &&\r\n                                                        info.taxes &&\r\n                                                        info.taxes.map((tax, index) => {\r\n                                                            return (\r\n                                                                <TableRow key={index}>\r\n                                                                    <TableCell />\r\n                                                                    <TableCell />\r\n                                                                    <TableCell />\r\n                                                                    <TableCell align=\"right\">{tax.name}</TableCell>\r\n                                                                    <TableCell align=\"right\">\r\n                                                                        {`$${numeral(tax.amount).format('0,0.00')}`}\r\n                                                                    </TableCell>\r\n                                                                </TableRow>\r\n                                                            );\r\n                                                        })}\r\n\r\n                                                    {info && (\r\n                                                        <TableRow>\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell />\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    Order Total\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                            <TableCell align=\"right\">\r\n                                                                <Typography style={{ fontWeight: 600 }}>\r\n                                                                    {`US$ ${numeral(info.total).format('0,0.00')}`}{' '}\r\n                                                                </Typography>\r\n                                                            </TableCell>\r\n                                                        </TableRow>\r\n                                                    )}\r\n                                                </TableBody>\r\n                                            </Table>\r\n                                        </Box>\r\n                                    </Scrollbar>\r\n                                </CardContent>\r\n                            </Card>\r\n                        </Grid>\r\n                        <Grid item md={6} xs={12}>\r\n                            <Box sx={{ height: '100%' }}>\r\n                                <Card sx={{ height: '100%' }}>\r\n                                    <CardHeader title=\"Billing information\" />\r\n                                    <Divider />\r\n                                    <Box sx={{ px: 3 }}>\r\n                                        <PropertyList>\r\n                                            <PropertyListItem align={align} label=\"Name\">\r\n                                                <Typography color=\"primary\" variant=\"body1\">\r\n                                                    {info && `${info.firstName} ${info.lastName}`}\r\n                                                </Typography>\r\n                                            </PropertyListItem>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Company\">\r\n                                                    <Typography variant=\"body1\">{info && info.company}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Address\">\r\n                                                    <Typography variant=\"body1\">{info && info.address}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"City\">\r\n                                                    <Typography variant=\"body1\">{info && info.city}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"State / Province\">\r\n                                                    <Typography variant=\"body1\">{info && info.state}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Zip / Postal code\">\r\n                                                    <Typography variant=\"body1\">{info && info.zip}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Country\">\r\n                                                    <Typography variant=\"body1\">{info && info.country}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Phone\">\r\n                                                    <Typography variant=\"body1\">{info && info.phone}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Fax\">\r\n                                                    <Typography variant=\"body1\">{info && info.fax}</Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Email\">\r\n                                                    <Typography variant=\"body1\" color=\"primary\">\r\n                                                        {info && info.email}\r\n                                                    </Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                            <Box>\r\n                                                <PropertyListItem align={align} label=\"Original Order ID\">\r\n                                                    <Typography variant=\"body1\" color=\"primary\">\r\n                                                        {info && info.orderId}\r\n                                                    </Typography>\r\n                                                </PropertyListItem>\r\n                                            </Box>\r\n                                            <Divider />\r\n                                        </PropertyList>\r\n                                    </Box>\r\n                                </Card>\r\n                            </Box>\r\n                        </Grid>\r\n                        <Grid item md={6} xs={12}>\r\n                            <Box sx={{ height: '100%' }}>\r\n                                <Card sx={{ height: '100%' }}>\r\n                                    <CardContent sx={{ px: 3 }}>\r\n                                        <Box\r\n                                            sx={{\r\n                                                mt: 0,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Box>\r\n                                                <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\r\n                                                    <Typography variant=\"h6\">Pay with &nbsp;</Typography>\r\n                                                    <img alt=\"credit cards\" style={{ width: 340 }} src={creditCards} />\r\n                                                </Box>\r\n\r\n                                                <CreditCard\r\n                                                    acceptedCards={[\r\n                                                        'visa',\r\n                                                        'mastercard',\r\n                                                        'amex',\r\n                                                        'dinersclub',\r\n                                                        'discover',\r\n                                                    ]}\r\n                                                    number={cardNumber}\r\n                                                    name=\"\"\r\n                                                    expiry={expiry}\r\n                                                    cvc={cvc}\r\n                                                    focused={focused}\r\n                                                    callback={handleCallback}\r\n                                                />\r\n                                            </Box>\r\n                                            <Box>\r\n                                                <Grid container columnSpacing={3}>\r\n                                                    <Grid item xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"number\"\r\n                                                            value={cardNumber}\r\n                                                            required\r\n                                                            label=\"Card Number\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"expiry\"\r\n                                                            value={expiry}\r\n                                                            required\r\n                                                            label=\"Valid Thru (MM/YY)\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n                                                    <Grid item md={6} xs={12}>\r\n                                                        <TextField\r\n                                                            name=\"cvc\"\r\n                                                            value={cvc}\r\n                                                            label=\"CVC\"\r\n                                                            fullWidth\r\n                                                            onChange={handleInputChange}\r\n                                                            onFocus={handleInputFocus}\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                                mr: 3,\r\n                                                                mt: 3,\r\n                                                            }}\r\n                                                        />\r\n                                                    </Grid>\r\n\r\n                                                    <Grid item xs={12}>\r\n                                                        <form id=\"payment\" onSubmit={handleSubmit(onSubmit)}>\r\n                                                            <Button\r\n                                                                color=\"primary\"\r\n                                                                variant=\"contained\"\r\n                                                                type=\"submit\"\r\n                                                                fullWidth\r\n                                                                disabled={!issuer || expiry.length !== 5 || inProgress}\r\n                                                                sx={{ mt: 3 }}\r\n                                                            >\r\n                                                                Pay\r\n                                                            </Button>\r\n                                                        </form>\r\n                                                        <Divider sx={{ m: 3 }} variant=\"middle\">\r\n                                                            OR\r\n                                                        </Divider>\r\n\r\n                                                        <form\r\n                                                            action=\"https://www.paypal.com/cgi-bin/webscr\"\r\n                                                            method=\"post\"\r\n                                                            target=\"_new\"\r\n                                                        >\r\n                                                            {info && (\r\n                                                                <>\r\n                                                                    <input type=\"hidden\" name=\"cmd\" value=\"_xclick\" />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"business\"\r\n                                                                        value=\"company@lsoft.net\"\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        type=\"hidden\"\r\n                                                                        name=\"currency_code\"\r\n                                                                        value=\"USD\"\r\n                                                                    />\r\n                                                                    <input type=\"hidden\" name=\"lc\" value=\"US\" />\r\n                                                                    <input\r\n                                                                        name=\"item_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"item_name\"\r\n                                                                        value={info.productName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"amount\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"amount\"\r\n                                                                        value={info.paypalAmount}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"custom\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"custom\"\r\n                                                                        value={info.paypalTag}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"invoice\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"invoice\"\r\n                                                                        value={info.invoice}\r\n                                                                    />\r\n\r\n                                                                    <input\r\n                                                                        name=\"first_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"first_name\"\r\n                                                                        value={paypalData.firstName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"last_name\"\r\n                                                                        type=\"hidden\"\r\n                                                                        id=\"last_name\"\r\n                                                                        value={paypalData.lastName}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"address1\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.address}\r\n                                                                    />\r\n                                                                    <input name=\"address2\" type=\"hidden\" value=\"\" />\r\n                                                                    <input\r\n                                                                        name=\"city\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.city}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"country\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.country}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"state\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.state}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"zip\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.zip}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_a\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_a}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_b\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_b}\r\n                                                                    />\r\n                                                                    <input\r\n                                                                        name=\"night_phone_c\"\r\n                                                                        type=\"hidden\"\r\n                                                                        value={paypalData.phone_c}\r\n                                                                    />\r\n                                                                </>\r\n                                                            )}\r\n                                                            <button\r\n                                                                hidden={true}\r\n                                                                ref={refPaypalSubmitButton}\r\n                                                                type={'submit'}\r\n                                                            />\r\n                                                        </form>\r\n\r\n                                                        <form\r\n                                                            id=\"payment\"\r\n                                                            onSubmit={handleSubmitPayPal(onSubmitPaypal)}\r\n                                                        >\r\n                                                            <PaypalButton variant=\"contained\" fullWidth type=\"submit\">\r\n                                                                &nbsp;\r\n                                                            </PaypalButton>\r\n                                                        </form>\r\n                                                    </Grid>\r\n                                                </Grid>\r\n                                            </Box>\r\n                                        </Box>\r\n                                    </CardContent>\r\n                                </Card>\r\n                            </Box>\r\n                        </Grid>\r\n                        <Grid item xs={12} sx={{}}>\r\n                            <Divider />\r\n                            <Box sx={{ mt: 3, display: 'flex', justifyContent: 'center' }}>\r\n                                <Typography variant=\"subtitle2\">\r\n                                    Secure payment services provided by{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        Royal Bank of Canada\r\n                                    </Box>{' '}\r\n                                    and{' '}\r\n                                    <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                        LSoft Technologies\r\n                                    </Box>\r\n                                </Typography>\r\n                            </Box>\r\n                        </Grid>\r\n                    </Grid>\r\n                </Container>\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { useEffect, useState, useCallback } from 'react';\r\nimport { useLocation, Navigate } from 'react-router';\r\nimport type { ChangeEvent } from 'react';\r\nimport { Title } from '../../components/Title';\r\nimport {\r\n    Box,\r\n    Card,\r\n    CardContent,\r\n    Typography,\r\n    Grid,\r\n    Container,\r\n    Divider,\r\n    CardHeader,\r\n    Table,\r\n    TableBody,\r\n    TableCell,\r\n    TableHead,\r\n    TableRow,\r\n    useMediaQuery,\r\n    Theme,\r\n    Button,\r\n    Dialog,\r\n    DialogActions,\r\n    DialogContent,\r\n    DialogContentText,\r\n    DialogTitle,\r\n    Snackbar,\r\n    Alert,\r\n    Tabs,\r\n    Tab,\r\n    TextField,\r\n    MenuItem,\r\n    Checkbox,\r\n} from '@mui/material';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport type { ResellerCheckoutInfo } from '../../types/reseller';\r\nimport { accountService, UserRole } from '../../account.service';\r\nimport { resellerService } from '../../reseller.service';\r\nimport { useMounted } from '../../hooks/use-mounted';\r\nimport { Scrollbar } from '../../components/Scrollbar';\r\nimport { PropertyList } from '../../components/PropertyList';\r\nimport { PropertyListItem } from '../../components/PropertyListItem';\r\nimport numeral from 'numeral';\r\nimport CreditCard from 'react-credit-cards';\r\nimport { formatCreditCardNumber, formatExpirationDate, formatCVC } from '../../utils/credit-cards';\r\nimport 'react-credit-cards/es/styles-compiled.css';\r\nimport creditCards from '../../images/credit-cards.png';\r\nimport { IToastState, defaultToastState } from '../../components/ToastState';\r\nimport type { Country } from '../../types/helper';\r\nimport { usaStatesAndTerritories } from '../../utils/cart';\r\nimport { canadaProvinces } from '../../utils/cart';\r\nimport { CartCheckoutRequest } from '../../cart.service';\r\nimport { settings } from '../../settings';\r\n\r\nconst tabs = [\r\n    { label: 'Shipping', value: 'shipping' },\r\n    { label: 'Billing', value: 'billing' },\r\n];\r\n\r\nconst translateCardType = (issuer: string): string => {\r\n    switch (issuer) {\r\n        case 'visa':\r\n            return 'VISA';\r\n        case 'mastercard':\r\n            return 'MC';\r\n        case 'amex':\r\n            return 'AMEX';\r\n        case 'dinersclub':\r\n            return 'DINE';\r\n        case 'discover':\r\n            return 'DISC';\r\n        default:\r\n            return '';\r\n    }\r\n};\r\n\r\nconst ANNUAL_SUPPORT_ID = 36;\r\n\r\ninterface ShippingData {\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address: string;\r\n    city: string;\r\n    zip: string;\r\n    state: string;\r\n    phone: string;\r\n    email: string;\r\n    po: string;\r\n    memo: string;\r\n}\r\nfunction emptyShipping(): ShippingData {\r\n    return {\r\n        firstName: '',\r\n        lastName: '',\r\n        company: '',\r\n        address: '',\r\n        city: '',\r\n        zip: '',\r\n        state: '',\r\n        phone: '',\r\n        email: '',\r\n        po: '',\r\n        memo: '',\r\n    };\r\n}\r\n\r\nexport const ResellerCheckout = () => {\r\n    const location = useLocation();\r\n    const account = accountService.getAccount();\r\n    const { cart, discount, subtotal, original_order } = location.state || {};\r\n\r\n    const products: string = cart.map((item) => item.productId).join(',');\r\n\r\n    // determine if the cart contains only the annual support product\r\n    let isAnnualSupport = cart.every((element) => element.productId === ANNUAL_SUPPORT_ID);\r\n\r\n    const smDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\r\n    const align = smDown ? 'vertical' : 'horizontal';\r\n\r\n    const isMounted = useMounted();\r\n    const [currentTab, setCurrentTab] = useState<string>('shipping');\r\n    const [info, setInfo] = useState<ResellerCheckoutInfo | null>(null);\r\n    const [shipping] = useState<ShippingData | null>(emptyShipping());\r\n\r\n    const [countries, setCountries] = useState<Country[]>([]);\r\n    const [country, setCountry] = useState<string>('');\r\n    const [canadaProvince, setCanadaProvince] = useState<number>(0);\r\n    const [usaState, setUsaState] = useState<number>(0);\r\n\r\n    const [openDialog, setOpenDialog] = useState(false);\r\n    const [failMessage, setFailMessage] = useState('');\r\n    const [openMonerisDialog, setOpenMonerisDialog] = useState(false);\r\n    const [toastState, setToastState] = useState<IToastState>(defaultToastState);\r\n    const [acceptedTerms, setAcceptedTerms] = useState(false);\r\n    const [invoiceDisabled, setInvoiceDisabled] = useState(false);\r\n    const [openInvoiceDialog, setOpenInvoiceDialog] = useState(false);\r\n\r\n    const { handleSubmit, control } = useForm<ShippingData>();\r\n\r\n    const [cardNumber, setCardNumber] = useState<string>('');\r\n    const [expiry, setExpiry] = useState<string>('');\r\n    const [cvc, setCvc] = useState<string>('');\r\n    const [focused, setFocused] = useState<string>('');\r\n    const [issuer, setIssuer] = useState<string>('');\r\n    const [inProgress, setInProgress] = useState<boolean>(false);\r\n\r\n    const loadData = useCallback(async () => {\r\n        try {\r\n            const resellerId = accountService.getAccount().id;\r\n            const data = await resellerService.getCheckoutInfo(resellerId, subtotal / 100, products);\r\n            const fetchedCountries = await resellerService.getCountries();\r\n            if (isMounted()) {\r\n                setInfo(data);\r\n                setCountries(fetchedCountries);\r\n                setCountry('US');\r\n            }\r\n        } catch (err) {\r\n            console.error(err);\r\n        }\r\n    }, [isMounted]);\r\n\r\n    useEffect(() => {\r\n        if (account) {\r\n            loadData();\r\n        }\r\n    }, []);\r\n\r\n    const handleTabsChange = (event: ChangeEvent<{}>, value: string): void => {\r\n        setCurrentTab(value);\r\n    };\r\n\r\n    const handleCallback = ({ issuer }, isValid) => {\r\n        if (isValid) {\r\n            setIssuer(issuer);\r\n        } else {\r\n            setIssuer('');\r\n        }\r\n    };\r\n\r\n    const handleInputFocus = ({ target }) => {\r\n        setFocused(target.name);\r\n    };\r\n\r\n    const handleInputChange = ({ target }) => {\r\n        if (target.name === 'number') {\r\n            target.value = formatCreditCardNumber(target.value);\r\n            setCardNumber(target.value);\r\n        } else if (target.name === 'expiry') {\r\n            target.value = formatExpirationDate(expiry, target.value);\r\n            setExpiry(target.value);\r\n        } else if (target.name === 'cvc') {\r\n            target.value = formatCVC(target.value, cardNumber);\r\n            setCvc(target.value);\r\n        }\r\n    };\r\n\r\n    const onSubmit = async (data: ShippingData, isInvoice: boolean) => {\r\n        setInProgress(true);\r\n\r\n        let request: CartCheckoutRequest = {\r\n            reseller_id: accountService.getAccount().id,\r\n            bill_first_name: data.firstName,\r\n            bill_last_name: data.lastName,\r\n            bill_company: data.company,\r\n            bill_address_one: data.address,\r\n            bill_city: data.city,\r\n            bill_state_or_province:\r\n                country === 'CA'\r\n                    ? canadaProvinces[canadaProvince].long\r\n                    : country === 'US'\r\n                    ? usaStatesAndTerritories[usaState].long\r\n                    : data.state,\r\n            bill_country: country,\r\n            bill_postal_code: data.zip,\r\n            bill_email: data.email,\r\n            bill_phone: data.phone,\r\n            bill_fax: data.memo,\r\n            bill_po: data.po,\r\n\r\n            credit_card_brand: '',\r\n            credit_card_number: '',\r\n            expire_month: '',\r\n            expire_year: '',\r\n            cvv: '',\r\n\r\n            bill_amount: info.total,\r\n            discount_amount: discount / 100.0,\r\n            bill_gst: info.gst,\r\n            bill_pst: info.pst,\r\n            comments: isAnnualSupport ? data.memo : '',\r\n        };\r\n        if (isInvoice) {\r\n            request['order_type'] = 'INV';\r\n        } else {\r\n            request['credit_card_brand'] = translateCardType(issuer);\r\n            request['credit_card_number'] = cardNumber.replaceAll(' ', '');\r\n            request['expire_month'] = expiry.substr(0, 2);\r\n            request['expire_year'] = '20' + expiry.substr(3, 2);\r\n            request['cvv'] = cvc;\r\n        }\r\n\r\n        cart.forEach((item, idx) => {\r\n            request[`product_id${idx > 0 ? idx : ''}`] = item.productId;\r\n            request[`product${idx > 0 ? idx : ''}`] = item.productName;\r\n            request[`license${idx > 0 ? idx : ''}`] = item.licenseId;\r\n            request[`quantity${idx > 0 ? idx : ''}`] = item.qty;\r\n            request[`product_amount${idx > 0 ? idx : ''}`] = item.amount / 100.0;\r\n        });\r\n\r\n        const response = await resellerService.checkout(request);\r\n\r\n        if (response == null) {\r\n            setFailMessage('Server communication error');\r\n            setOpenDialog(true);\r\n            setInProgress(false);\r\n        } else if (!response.status) {\r\n            if (response.message === 'moneris problem') {\r\n                setOpenMonerisDialog(true);\r\n                setInProgress(false);\r\n            } else {\r\n                setFailMessage(response.message);\r\n                setOpenDialog(true);\r\n                setInProgress(false);\r\n            }\r\n        } else {\r\n            const toast_message = isInvoice ? 'Invoice was successfully created' : 'Payment was successfully processed';\r\n            setToastState({ open: true, status: 'success', message: toast_message });\r\n            setIssuer('');\r\n            setCardNumber('');\r\n            setExpiry('');\r\n            setCvc('');\r\n            setInProgress(false);\r\n            window.open(`https://secure.lsoft.net/invoices/${response.order}`, '_blank');\r\n        }\r\n    };\r\n\r\n    const onInvoice = () => {\r\n        setAcceptedTerms(false);\r\n        setInvoiceDisabled(true);\r\n        setOpenInvoiceDialog(true);\r\n    };\r\n\r\n    const onSubmitCreditCard = async (data: ShippingData) => {\r\n        onSubmit(data, false);\r\n    };\r\n    const onSubmitInvoice = async (data: ShippingData) => {\r\n        setOpenInvoiceDialog(false);\r\n        onSubmit(data, true);\r\n    };\r\n\r\n    const handleCancelInvoiceDialog = () => {\r\n        setOpenInvoiceDialog(false);\r\n    };\r\n\r\n    const handleCloseMonerisDialog = () => {};\r\n    const handleCancelMonerisDialog = () => {\r\n        setOpenMonerisDialog(false);\r\n    };\r\n\r\n    const handleAcceptTerms = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        if (event.target.checked) {\r\n            setAcceptedTerms(true);\r\n            setInvoiceDisabled(false);\r\n        } else {\r\n            setAcceptedTerms(false);\r\n            setInvoiceDisabled(true);\r\n        }\r\n    };\r\n\r\n    const handleCloseSnackbar = (event?: React.SyntheticEvent, reason?: string) => {\r\n        if (reason === 'clickaway') {\r\n            return;\r\n        }\r\n        setToastState({ ...toastState, open: false });\r\n    };\r\n\r\n    const onCountryChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        const newCountry = event.target.value;\r\n        setCountry(newCountry);\r\n    };\r\n\r\n    const onProvinceChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        const newProv = event.target.value;\r\n        setCanadaProvince(Number.parseInt(newProv));\r\n    };\r\n\r\n    const onStateChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        setUsaState(Number.parseInt(event.target.value));\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {(!account || account.role !== UserRole.Reseller) && <Navigate to=\"/account/login\" />}\r\n            <Title title=\"Checkout\" />\r\n            <Box\r\n                component=\"main\"\r\n                sx={{\r\n                    flexGrow: 1,\r\n                    py: 3,\r\n                }}\r\n            >\r\n                {account && (\r\n                    <Container maxWidth=\"lg\">\r\n                        <Dialog\r\n                            open={openDialog}\r\n                            onClose={() => setOpenDialog(false)}\r\n                            aria-labelledby=\"alert-dialog-title\"\r\n                            aria-describedby=\"alert-dialog-description\"\r\n                        >\r\n                            <DialogTitle id=\"alert-dialog-title\">Transaction Failed</DialogTitle>\r\n                            <DialogContent>\r\n                                <DialogContentText id=\"alert-dialog-description\">{failMessage}</DialogContentText>\r\n                            </DialogContent>\r\n                            <DialogActions>\r\n                                <Button onClick={() => setOpenDialog(false)} autoFocus>\r\n                                    OK\r\n                                </Button>\r\n                            </DialogActions>\r\n                        </Dialog>\r\n\r\n                        <Dialog\r\n                            open={openInvoiceDialog}\r\n                            aria-labelledby=\"alert-dialog-title\"\r\n                            aria-describedby=\"alert-dialog-description\"\r\n                        >\r\n                            <DialogTitle id=\"alert-dialog-title\">Software delivery terms</DialogTitle>\r\n                            <DialogContent>\r\n                                <DialogContentText id=\"alert-dialog-description\">\r\n                                    Software download will only be available after invoice has been paid.\r\n                                </DialogContentText>\r\n                                <Box sx={{ mt: 2 }}>\r\n                                    <Checkbox\r\n                                        checked={acceptedTerms}\r\n                                        value={acceptedTerms}\r\n                                        color=\"primary\"\r\n                                        onChange={handleAcceptTerms}\r\n                                    />\r\n                                    I agree to software delivery terms\r\n                                </Box>\r\n                            </DialogContent>\r\n                            <DialogActions>\r\n                                <Button sx={{ mr: 2 }} onClick={handleCancelInvoiceDialog} autoFocus>\r\n                                    Cancel\r\n                                </Button>\r\n                                <form id=\"payment\" onSubmit={handleSubmit(onSubmitInvoice)}>\r\n                                    <Button\r\n                                        sx={{ mr: 2 }}\r\n                                        color=\"primary\"\r\n                                        variant=\"contained\"\r\n                                        type=\"submit\"\r\n                                        disabled={invoiceDisabled}\r\n                                    >\r\n                                        OK\r\n                                    </Button>\r\n                                </form>\r\n                            </DialogActions>\r\n                        </Dialog>\r\n\r\n                        <Dialog\r\n                            open={openMonerisDialog}\r\n                            onClose={handleCloseMonerisDialog}\r\n                            aria-labelledby=\"alert-dialog-title\"\r\n                            aria-describedby=\"alert-dialog-description\"\r\n                        >\r\n                            <DialogTitle id=\"alert-dialog-title\">Payment processing failed</DialogTitle>\r\n                            <DialogContent>\r\n                                <DialogContentText id=\"alert-dialog-description\">\r\n                                    We experience payment processing issues with our provider. You can try again to\r\n                                    process payment later on, or use PayPal as a credit card payment processor.\r\n                                </DialogContentText>\r\n                                <DialogContentText sx={{ mt: 2 }}>\r\n                                    If you wish to use PayPal, you need to create an invoice first. You can use PayPal\r\n                                    payment method once invoice is created.\r\n                                </DialogContentText>\r\n                                <DialogContentText sx={{ mt: 2 }}>\r\n                                    You can also contact our sales department {settings.phone1} for order processing\r\n                                    over the phone.\r\n                                </DialogContentText>\r\n                            </DialogContent>\r\n                            <DialogActions>\r\n                                <Button sx={{ mr: 2 }} onClick={handleCancelMonerisDialog} autoFocus>\r\n                                    OK\r\n                                </Button>\r\n                            </DialogActions>\r\n                        </Dialog>\r\n\r\n                        <Snackbar\r\n                            open={toastState.open}\r\n                            autoHideDuration={6000}\r\n                            onClose={handleCloseSnackbar}\r\n                            anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n                        >\r\n                            <Alert onClose={handleCloseSnackbar} severity={toastState.status}>\r\n                                {toastState.message}\r\n                            </Alert>\r\n                        </Snackbar>\r\n\r\n                        <Grid container spacing={3}>\r\n                            <Grid item xs={12}>\r\n                                <Card>\r\n                                    <CardHeader title=\"Order Summary\" />\r\n                                    <CardContent sx={{ py: 0 }}>\r\n                                        <Scrollbar>\r\n                                            <Box sx={{ minWidth: 700 }}>\r\n                                                <Table>\r\n                                                    <TableHead>\r\n                                                        <TableRow>\r\n                                                            <TableCell>Product</TableCell>\r\n                                                            <TableCell>License</TableCell>\r\n                                                            <TableCell align=\"right\">Price</TableCell>\r\n                                                            <TableCell align=\"right\">Qty</TableCell>\r\n                                                            <TableCell align=\"right\">Amount</TableCell>\r\n                                                            <TableCell align=\"right\">Discount</TableCell>\r\n                                                            <TableCell align=\"right\">Total</TableCell>\r\n                                                        </TableRow>\r\n                                                    </TableHead>\r\n                                                    <TableBody>\r\n                                                        {cart.map((product, idx) => (\r\n                                                            <TableRow key={idx}>\r\n                                                                <TableCell>{product.productName}</TableCell>\r\n                                                                <TableCell>{product.licenseName}</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    ${numeral(product.price / 100).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">{product.qty}</TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    ${numeral(product.amount / 100).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    ${numeral(product.discount / 100).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    {' '}\r\n                                                                    ${numeral(product.total / 100).format('0,0.00')}\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        ))}\r\n                                                        {info && info.taxes && (\r\n                                                            <TableRow>\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell align=\"right\">\r\n                                                                    <Typography style={{ fontWeight: 600 }}>\r\n                                                                        Subtotal\r\n                                                                    </Typography>\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    <Typography style={{ fontWeight: 600 }}>\r\n                                                                        ${numeral(subtotal / 100).format('0,0.00')}{' '}\r\n                                                                    </Typography>\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        )}\r\n\r\n                                                        {info &&\r\n                                                            info.taxes &&\r\n                                                            info.taxes.map((tax, index) => {\r\n                                                                return (\r\n                                                                    <TableRow key={index}>\r\n                                                                        <TableCell />\r\n                                                                        <TableCell />\r\n                                                                        <TableCell />\r\n                                                                        <TableCell />\r\n                                                                        <TableCell />\r\n                                                                        <TableCell align=\"right\">{tax.name}</TableCell>\r\n                                                                        <TableCell align=\"right\">\r\n                                                                            ${numeral(tax.amount).format('0,0.00')}\r\n                                                                        </TableCell>\r\n                                                                    </TableRow>\r\n                                                                );\r\n                                                            })}\r\n\r\n                                                        {info && (\r\n                                                            <TableRow>\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell />\r\n                                                                <TableCell align=\"right\">\r\n                                                                    <Typography style={{ fontWeight: 600 }}>\r\n                                                                        Order Total\r\n                                                                    </Typography>\r\n                                                                </TableCell>\r\n                                                                <TableCell align=\"right\">\r\n                                                                    <Typography style={{ fontWeight: 600 }}>\r\n                                                                        ${numeral(info.total).format('0,0.00')}\r\n                                                                    </Typography>\r\n                                                                </TableCell>\r\n                                                            </TableRow>\r\n                                                        )}\r\n                                                    </TableBody>\r\n                                                </Table>\r\n                                            </Box>\r\n                                        </Scrollbar>\r\n                                    </CardContent>\r\n                                </Card>\r\n                            </Grid>\r\n                            <Grid item md={6} xs={12}>\r\n                                <Tabs\r\n                                    indicatorColor=\"primary\"\r\n                                    onChange={handleTabsChange}\r\n                                    scrollButtons=\"auto\"\r\n                                    textColor=\"primary\"\r\n                                    value={currentTab}\r\n                                    variant=\"scrollable\"\r\n                                >\r\n                                    {tabs.map((tab) => (\r\n                                        <Tab key={tab.value} label={tab.label} value={tab.value} />\r\n                                    ))}\r\n                                </Tabs>\r\n                                <Divider sx={{ mb: 3 }} />\r\n                                {currentTab === 'shipping' && (\r\n                                    <Card sx={{ p: 3 }}>\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"firstName\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.firstName}\r\n                                                rules={{\r\n                                                    required: 'First Name is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'First Name cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        required\r\n                                                        label=\"First Name\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"lastName\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.lastName}\r\n                                                rules={{\r\n                                                    required: 'Last Name is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Last Name cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        required\r\n                                                        label=\"Last Name\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"company\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.company}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Company name cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Company\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"address\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.address}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Address cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Address\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"city\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.city}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'City name cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"City\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"zip\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.zip}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Zip/postal code cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Zip / Postal Code\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        {countries.length > 0 && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <TextField\r\n                                                    label=\"Country\"\r\n                                                    size=\"small\"\r\n                                                    select\r\n                                                    sx={{\r\n                                                        flexGrow: 1,\r\n                                                    }}\r\n                                                    value={country}\r\n                                                    onChange={onCountryChange}\r\n                                                >\r\n                                                    {countries.map((country, idx) => (\r\n                                                        <MenuItem key={idx} value={country.code}>\r\n                                                            {country.name}\r\n                                                        </MenuItem>\r\n                                                    ))}\r\n                                                </TextField>\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        {country === 'US' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <TextField\r\n                                                    label=\"State\"\r\n                                                    size=\"small\"\r\n                                                    select\r\n                                                    sx={{\r\n                                                        flexGrow: 1,\r\n                                                    }}\r\n                                                    value={usaState}\r\n                                                    onChange={onStateChange}\r\n                                                >\r\n                                                    {usaStatesAndTerritories.map((state, idx) => (\r\n                                                        <MenuItem key={idx} value={idx}>\r\n                                                            {state.long}\r\n                                                        </MenuItem>\r\n                                                    ))}\r\n                                                </TextField>\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        {country === 'CA' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <TextField\r\n                                                    label=\"Province\"\r\n                                                    size=\"small\"\r\n                                                    select\r\n                                                    sx={{\r\n                                                        flexGrow: 1,\r\n                                                    }}\r\n                                                    value={canadaProvince}\r\n                                                    onChange={onProvinceChange}\r\n                                                >\r\n                                                    {canadaProvinces.map((prov, idx) => (\r\n                                                        <MenuItem key={idx} value={idx}>\r\n                                                            {prov.long}\r\n                                                        </MenuItem>\r\n                                                    ))}\r\n                                                </TextField>\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        {country !== 'CA' && country !== 'US' && (\r\n                                            <Box\r\n                                                sx={{\r\n                                                    display: 'flex',\r\n                                                    mt: 2,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <Controller\r\n                                                    name=\"state\"\r\n                                                    control={control}\r\n                                                    defaultValue={shipping.state}\r\n                                                    rules={{\r\n                                                        maxLength: {\r\n                                                            value: 150,\r\n                                                            message:\r\n                                                                'State / Province / Region cannot exceed 150 characters',\r\n                                                        },\r\n                                                    }}\r\n                                                    render={({ field, fieldState: { error } }) => (\r\n                                                        <TextField\r\n                                                            {...field}\r\n                                                            label=\"State / Province / Region\"\r\n                                                            size=\"small\"\r\n                                                            sx={{\r\n                                                                flexGrow: 1,\r\n                                                            }}\r\n                                                            error={!!error}\r\n                                                            helperText={error ? error.message : null}\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                            </Box>\r\n                                        )}\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"phone\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.phone}\r\n                                                rules={{\r\n                                                    required: 'Phone is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Phone cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Phone\"\r\n                                                        size=\"small\"\r\n                                                        required\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"email\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.email}\r\n                                                rules={{\r\n                                                    required: 'Email is required',\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'Email cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"Email\"\r\n                                                        size=\"small\"\r\n                                                        required\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"po\"\r\n                                                control={control}\r\n                                                defaultValue={shipping.po}\r\n                                                rules={{\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: 'PO# cannot exceed 150 characters',\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label=\"PO #\"\r\n                                                        size=\"small\"\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n\r\n                                        <Box\r\n                                            sx={{\r\n                                                display: 'flex',\r\n                                                mt: 2,\r\n                                                alignItems: 'center',\r\n                                            }}\r\n                                        >\r\n                                            <Controller\r\n                                                name=\"memo\"\r\n                                                control={control}\r\n                                                defaultValue={original_order}\r\n                                                rules={{\r\n                                                    required: `${\r\n                                                        isAnnualSupport ? 'Original Order ID is required' : ''\r\n                                                    }`,\r\n                                                    maxLength: {\r\n                                                        value: 150,\r\n                                                        message: `${\r\n                                                            isAnnualSupport ? 'Original Order ID' : 'Memo'\r\n                                                        } cannot exceed 150 characters`,\r\n                                                    },\r\n                                                }}\r\n                                                render={({ field, fieldState: { error } }) => (\r\n                                                    <TextField\r\n                                                        {...field}\r\n                                                        label={isAnnualSupport ? 'Original Order ID' : 'Memo'}\r\n                                                        size=\"small\"\r\n                                                        required={isAnnualSupport}\r\n                                                        sx={{\r\n                                                            flexGrow: 1,\r\n                                                        }}\r\n                                                        error={!!error}\r\n                                                        helperText={error ? error.message : null}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                        </Box>\r\n                                    </Card>\r\n                                )}\r\n                                {currentTab === 'billing' && (\r\n                                    <Box>\r\n                                        <Card>\r\n                                            <Box sx={{ px: 3 }}>\r\n                                                <PropertyList>\r\n                                                    <PropertyListItem align={align} label=\"Name\">\r\n                                                        <Typography color=\"primary\" variant=\"body1\">\r\n                                                            {info && `${info.firstName} ${info.lastName}`}\r\n                                                        </Typography>\r\n                                                    </PropertyListItem>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Company\">\r\n                                                            <Typography variant=\"body1\">\r\n                                                                {info && info.company}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Address\">\r\n                                                            <Typography variant=\"body1\">\r\n                                                                {info && info.address}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"City\">\r\n                                                            <Typography variant=\"body1\">{info && info.city}</Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"State / Province\">\r\n                                                            <Typography variant=\"body1\">\r\n                                                                {info && info.state}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Zip / Postal code\">\r\n                                                            <Typography variant=\"body1\">{info && info.zip}</Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Country\">\r\n                                                            <Typography variant=\"body1\">\r\n                                                                {info && info.country}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Phone\">\r\n                                                            <Typography variant=\"body1\">\r\n                                                                {info && info.phone}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Fax\">\r\n                                                            <Typography variant=\"body1\">{info && info.fax}</Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                    <Box>\r\n                                                        <PropertyListItem align={align} label=\"Email\">\r\n                                                            <Typography variant=\"body1\" color=\"primary\">\r\n                                                                {info && info.email}\r\n                                                            </Typography>\r\n                                                        </PropertyListItem>\r\n                                                    </Box>\r\n                                                    <Divider />\r\n                                                </PropertyList>\r\n                                            </Box>\r\n                                        </Card>\r\n                                    </Box>\r\n                                )}\r\n                            </Grid>\r\n                            <Grid item md={6} xs={12}>\r\n                                <Box sx={{ height: '100%' }}>\r\n                                    <Card sx={{ height: '100%' }}>\r\n                                        <CardContent sx={{ px: 3 }}>\r\n                                            <Box\r\n                                                sx={{\r\n                                                    mt: 0,\r\n                                                    alignItems: 'center',\r\n                                                }}\r\n                                            >\r\n                                                <Box>\r\n                                                    <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\r\n                                                        <Typography variant=\"h6\">Pay with &nbsp;</Typography>\r\n                                                        <img\r\n                                                            alt=\"credit cards\"\r\n                                                            style={{ width: 340 }}\r\n                                                            src={creditCards}\r\n                                                        />\r\n                                                    </Box>\r\n\r\n                                                    <CreditCard\r\n                                                        acceptedCards={[\r\n                                                            'visa',\r\n                                                            'mastercard',\r\n                                                            'amex',\r\n                                                            'dinersclub',\r\n                                                            'discover',\r\n                                                        ]}\r\n                                                        number={cardNumber}\r\n                                                        name=\"\"\r\n                                                        expiry={expiry}\r\n                                                        cvc={cvc}\r\n                                                        focused={focused}\r\n                                                        callback={handleCallback}\r\n                                                    />\r\n                                                </Box>\r\n                                                <Box>\r\n                                                    <Grid container columnSpacing={3}>\r\n                                                        <Grid item xs={12}>\r\n                                                            <TextField\r\n                                                                name=\"number\"\r\n                                                                value={cardNumber}\r\n                                                                required\r\n                                                                label=\"Card Number\"\r\n                                                                fullWidth\r\n                                                                onChange={handleInputChange}\r\n                                                                onFocus={handleInputFocus}\r\n                                                                sx={{\r\n                                                                    flexGrow: 1,\r\n                                                                    mr: 3,\r\n                                                                    mt: 3,\r\n                                                                }}\r\n                                                            />\r\n                                                        </Grid>\r\n                                                        <Grid item md={6} xs={12}>\r\n                                                            <TextField\r\n                                                                name=\"expiry\"\r\n                                                                value={expiry}\r\n                                                                required\r\n                                                                label=\"Valid Thru (MM/YY)\"\r\n                                                                fullWidth\r\n                                                                onChange={handleInputChange}\r\n                                                                onFocus={handleInputFocus}\r\n                                                                sx={{\r\n                                                                    flexGrow: 1,\r\n                                                                    mr: 3,\r\n                                                                    mt: 3,\r\n                                                                }}\r\n                                                            />\r\n                                                        </Grid>\r\n                                                        <Grid item md={6} xs={12}>\r\n                                                            <TextField\r\n                                                                name=\"cvc\"\r\n                                                                value={cvc}\r\n                                                                label=\"CVC\"\r\n                                                                fullWidth\r\n                                                                onChange={handleInputChange}\r\n                                                                onFocus={handleInputFocus}\r\n                                                                sx={{\r\n                                                                    flexGrow: 1,\r\n                                                                    mr: 3,\r\n                                                                    mt: 3,\r\n                                                                }}\r\n                                                            />\r\n                                                        </Grid>\r\n\r\n                                                        <Grid item xs={12}>\r\n                                                            <form\r\n                                                                id=\"payment\"\r\n                                                                onSubmit={handleSubmit(onSubmitCreditCard)}\r\n                                                            >\r\n                                                                <Button\r\n                                                                    color=\"primary\"\r\n                                                                    variant=\"contained\"\r\n                                                                    type=\"submit\"\r\n                                                                    fullWidth\r\n                                                                    disabled={\r\n                                                                        !issuer || expiry.length !== 5 || inProgress\r\n                                                                    }\r\n                                                                    sx={{ mt: 3 }}\r\n                                                                >\r\n                                                                    Pay\r\n                                                                </Button>\r\n                                                            </form>\r\n\r\n                                                            <Divider sx={{ m: 2 }} variant=\"middle\">\r\n                                                                OR\r\n                                                            </Divider>\r\n                                                            <form id=\"invoice\" onSubmit={handleSubmit(onInvoice)}>\r\n                                                                <Button\r\n                                                                    color=\"primary\"\r\n                                                                    variant=\"contained\"\r\n                                                                    type=\"submit\"\r\n                                                                    fullWidth\r\n                                                                    disabled={inProgress}\r\n                                                                >\r\n                                                                    Invoice\r\n                                                                </Button>\r\n                                                            </form>\r\n\r\n                                                            <Box sx={{ mt: 2 }}>\r\n                                                                <Typography\r\n                                                                    variant=\"body2\"\r\n                                                                    sx={{ color: '#666', fontStyle: 'italic' }}\r\n                                                                >\r\n                                                                    You can use PayPal payment method once invoice is\r\n                                                                    created\r\n                                                                </Typography>\r\n                                                            </Box>\r\n                                                        </Grid>\r\n                                                    </Grid>\r\n                                                </Box>\r\n                                            </Box>\r\n                                        </CardContent>\r\n                                    </Card>\r\n                                </Box>\r\n                            </Grid>\r\n                            <Grid item xs={12} sx={{}}>\r\n                                <Divider />\r\n                                <Box sx={{ mt: 3, display: 'flex', justifyContent: 'center' }}>\r\n                                    <Typography variant=\"subtitle2\">\r\n                                        Secure payment services provided by{' '}\r\n                                        <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                            Royal Bank of Canada\r\n                                        </Box>{' '}\r\n                                        and{' '}\r\n                                        <Box component=\"span\" fontWeight=\"fontWeightBold\">\r\n                                            LSoft Technologies\r\n                                        </Box>\r\n                                    </Typography>\r\n                                </Box>\r\n                            </Grid>\r\n                        </Grid>\r\n                    </Container>\r\n                )}\r\n            </Box>\r\n        </>\r\n    );\r\n};\r\n","import { Suspense, lazy } from 'react';\r\nimport { MainLayout } from './components/MainLayout';\r\nimport { PublicLayout } from './components/PublicLayout';\r\nimport { ProfileLayout } from './components/profile/ProfileLayout';\r\nimport { Home } from './pages/Home';\r\nimport { Category } from './pages/Category';\r\nimport { Search } from './pages/Search';\r\nimport { Question } from './pages/Question';\r\nimport { QuoteCheckout } from './pages/reseller/QuoteCheckout';\r\nimport { CartCheckout } from './pages/cart/CartCheckout';\r\n\r\n// Admin KB\r\nimport { DashboardLayout } from './components/dashboard/DashboardLayout';\r\nimport { AdmQuestionList } from './pages/dashboard/AdmQuestionList';\r\nimport { AdmCategoryList } from './pages/dashboard/AdmCategoryList';\r\nimport { CategoryDetails } from './pages/dashboard/CategoryDetails';\r\nimport { QuestionDetails } from './pages/dashboard/QuestionDetails';\r\nimport { Settings } from './pages/dashboard/Settings';\r\n\r\nimport { LoadingScreen } from './components/LoadingScreen';\r\n\r\n// Client profile\r\nimport { Checkout } from './pages/profile/Checkout';\r\n\r\n// Reseller profile\r\nimport { ResellerCheckout } from './pages/reseller/ResellerCheckout';\r\n\r\nconst Loadable = (Component) => (props) => (\r\n    <Suspense fallback={<LoadingScreen />}>\r\n        <Component {...props} />\r\n    </Suspense>\r\n);\r\n\r\n// Authentication pages\r\nconst Login = Loadable(lazy(() => import('./pages/authentication/Login')));\r\nconst CreateAccount = Loadable(lazy(() => import('./pages/authentication/CreateAccount')));\r\nconst ForgotPassword = Loadable(lazy(() => import('./pages/authentication/ForgotPassword')));\r\nconst Register = Loadable(lazy(() => import('./pages/authentication/Register')));\r\n\r\n// Profile pages\r\nconst Orders = Loadable(lazy(() => import('./pages/profile/Orders')));\r\nconst Profile = Loadable(lazy(() => import('./pages/profile/Profile')));\r\nconst Upgrades = Loadable(lazy(() => import('./pages/profile/Upgrades')));\r\nconst Discounts = Loadable(lazy(() => import('./pages/profile/Discounts')));\r\nconst Support = Loadable(lazy(() => import('./pages/profile/Support')));\r\nconst Invoice = Loadable(lazy(() => import('./pages/profile/Invoice')));\r\nconst SoftwareDownload = Loadable(lazy(() => import('./pages/profile/SoftwareDownload')));\r\nconst AddSupport = Loadable(lazy(() => import('./pages/profile/AddSupport')));\r\nconst Deactivate = Loadable(lazy(() => import('./pages/profile/Deactivate')));\r\nconst Upgrade = Loadable(lazy(() => import('./pages/profile/Upgrade')));\r\nconst Unsubscribe = Loadable(lazy(() => import('./pages/profile/Unsubscribe')));\r\nconst Unsubscribed = Loadable(lazy(() => import('./pages/profile/Unsubscribed')));\r\n\r\n// Reseller profile\r\nconst ResellerProfile = Loadable(lazy(() => import('./pages/reseller/Profile')));\r\nconst ResellerOrders = Loadable(lazy(() => import('./pages/reseller/ResellerOrders')));\r\nconst ResellerNewOrder = Loadable(lazy(() => import('./pages/reseller/ResellerNewOrder')));\r\n\r\n// Help Center pages\r\nconst SubmitRequest = Loadable(lazy(() => import('./pages/Submit')));\r\n// const Category = Loadable(lazy(() => import('./pages/Category')));\r\n\r\n// Error pages\r\nconst AuthorizationRequired = Loadable(lazy(() => import('./pages/AuthorizationRequired')));\r\nconst NotFound = Loadable(lazy(() => import('./pages/NotFound')));\r\nconst ServerError = Loadable(lazy(() => import('./pages/ServerError')));\r\nconst Message = Loadable(lazy(() => import('./pages/Message')));\r\n\r\nexport const routes = [\r\n    {\r\n        path: '/account',\r\n        children: [\r\n            { path: 'login', element: <Login /> },\r\n            { path: 'create-account', element: <CreateAccount /> },\r\n            {\r\n                path: 'request-sent',\r\n                element: (\r\n                    <Message\r\n                        title=\"Request sent\"\r\n                        message=\"You'll get an email letting you know how to finilize profile registration.\"\r\n                    />\r\n                ),\r\n            },\r\n            {\r\n                path: 'password-sent',\r\n                element: (\r\n                    <Message\r\n                        title=\"Password sent\"\r\n                        message=\"You'll get an email with a password to sign in to your account.\"\r\n                    />\r\n                ),\r\n            },\r\n            { path: 'register', element: <Register /> },\r\n            {\r\n                path: 'verify-failed',\r\n                element: (\r\n                    <Message\r\n                        title=\"Verification failed\"\r\n                        message=\"Registration URL is not correct or user has already been registered.\"\r\n                    />\r\n                ),\r\n            },\r\n            {\r\n                path: 'registration-successful',\r\n                element: (\r\n                    <Message\r\n                        title=\"Registration successful\"\r\n                        message=\"Registration successful. You can now sign in to your account.\"\r\n                        linkText=\"Sign In\"\r\n                        linkUrl=\"/account/login\"\r\n                    />\r\n                ),\r\n            },\r\n            { path: 'forgot-password', element: <ForgotPassword /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '/client',\r\n        element: <ProfileLayout />,\r\n        children: [\r\n            { path: 'orders', element: <Orders /> },\r\n            { path: 'profile', element: <Profile /> },\r\n            { path: 'upgrades', element: <Upgrades /> },\r\n            { path: 'upgrades/:token', element: <Upgrade isPublic={false} /> },\r\n            { path: 'discounts', element: <Discounts /> },\r\n            { path: 'support', element: <Support /> },\r\n            { path: 'invoices/:orderId', element: <Invoice isPublic={false} isReseller={false} /> },\r\n            { path: 'downloads/:orderId', element: <SoftwareDownload isPublic={false} isReseller={false} /> },\r\n            { path: 'add-support/:orderId', element: <AddSupport isPublic={false} isReseller={false} /> },\r\n            { path: 'deactivate', element: <Deactivate /> },\r\n            { path: 'checkout', element: <Checkout isPublic={false} /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '/reseller',\r\n        element: <ProfileLayout isReseller={true} />,\r\n        children: [\r\n            { path: 'orders', element: <ResellerOrders /> },\r\n            { path: 'orders/new', element: <ResellerNewOrder /> },\r\n            { path: 'profile', element: <ResellerProfile /> },\r\n            { path: 'checkout', element: <ResellerCheckout /> },\r\n            { path: 'invoices/:orderId', element: <Invoice isPublic={false} isReseller={true} /> },\r\n            { path: 'downloads/:orderId', element: <SoftwareDownload isPublic={false} isReseller={true} /> },\r\n            { path: 'add-support/:orderId', element: <AddSupport isPublic={false} isReseller={true} /> },\r\n            { path: 'support', element: <Support /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '/',\r\n        element: <MainLayout />,\r\n        children: [\r\n            { path: '/', element: <Home /> },\r\n            { path: '/categories/:id', element: <Category /> },\r\n            { path: '/search', element: <Search /> },\r\n            { path: '/requests/new', element: <SubmitRequest /> },\r\n            { path: '/questions/:id', element: <Question /> },\r\n            { path: 'load', element: <LoadingScreen /> },\r\n            { path: '/unsubscribe', element: <Unsubscribe /> },\r\n            { path: '/unsubscribed', element: <Unsubscribed /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '/cart',\r\n        element: <PublicLayout customTitle=\"Secure Order Processing\" />,\r\n        children: [{ path: 'checkout', element: <CartCheckout /> }],\r\n    },\r\n    {\r\n        path: '/invoices',\r\n        element: <PublicLayout />,\r\n        children: [{ path: ':orderId', element: <Invoice isPublic={true} isReseller={false} /> }],\r\n    },\r\n    {\r\n        path: '/quote-checkout',\r\n        element: <PublicLayout />,\r\n        children: [{ path: ':orderId', element: <QuoteCheckout /> }],\r\n    },\r\n    {\r\n        path: '/downloads',\r\n        element: <PublicLayout />,\r\n        children: [{ path: ':orderId', element: <SoftwareDownload isPublic={true} isReseller={false} /> }],\r\n    },\r\n    {\r\n        path: '/add-support',\r\n        element: <PublicLayout />,\r\n        children: [\r\n            { path: ':orderId', element: <AddSupport isPublic={true} isReseller={false} /> },\r\n            { path: 'checkout', element: <Checkout isPublic={true} /> },\r\n            { path: 'upgrades/:token', element: <Upgrade isPublic={true} /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '/kb',\r\n        element: <DashboardLayout />,\r\n        children: [\r\n            { index: true, element: <AdmQuestionList /> },\r\n            { path: 'categories', element: <AdmCategoryList /> },\r\n            { path: 'categories/new', element: <CategoryDetails /> },\r\n            { path: 'categories/:categoryId', element: <CategoryDetails /> },\r\n            { path: 'questions/:questionId', element: <QuestionDetails /> },\r\n            { path: 'questions/new', element: <QuestionDetails /> },\r\n            { path: 'settings', element: <Settings /> },\r\n        ],\r\n    },\r\n    {\r\n        path: '401',\r\n        element: <AuthorizationRequired />,\r\n    },\r\n    {\r\n        path: '404',\r\n        element: <NotFound />,\r\n    },\r\n    {\r\n        path: '500',\r\n        element: <ServerError />,\r\n    },\r\n    {\r\n        path: 'clients',\r\n        element: <Login />,\r\n    },\r\n    {\r\n        path: '*',\r\n        element: <NotFound />,\r\n    },\r\n];\r\n","import type { FC } from 'react';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\n\r\nconst useStyles = makeStyles(() =>\r\n    createStyles({\r\n        '@global': {\r\n            '*': {\r\n                // boxSizing: 'border-box',\r\n                margin: 0,\r\n                padding: 0,\r\n            },\r\n            html: {\r\n                '-webkit-font-smoothing': 'antialiased',\r\n                '-moz-osx-font-smoothing': 'grayscale',\r\n                height: '100%',\r\n                width: '100%',\r\n            },\r\n            body: {\r\n                height: '100%',\r\n                width: '100%',\r\n            },\r\n            '#root': {\r\n                height: '100%',\r\n                width: '100%',\r\n            },\r\n        },\r\n    })\r\n);\r\n\r\nconst GlobalStyles: FC = () => {\r\n    useStyles();\r\n\r\n    return null;\r\n};\r\n\r\nexport default GlobalStyles;\r\n","import { useRoutes } from 'react-router-dom';\r\nimport { routes } from './routes';\r\n\r\nimport { ThemeProvider, Theme, StyledEngineProvider } from '@mui/material';\r\nimport GlobalStyles from './components/GlobalStyles';\r\nimport { createTheme } from './theme';\r\n\r\ndeclare module '@mui/styles/defaultTheme' {\r\n    // eslint-disable-next-line @typescript-eslint/no-empty-interface\r\n    interface DefaultTheme extends Theme {}\r\n}\r\n\r\nexport const App = () => {\r\n    const content = useRoutes(routes);\r\n    const theme = createTheme({\r\n        responsiveFontSizes: true,\r\n        mode: 'light',\r\n    });\r\n\r\n    return (\r\n        <StyledEngineProvider injectFirst>\r\n            <ThemeProvider theme={theme}>\r\n                <GlobalStyles />\r\n                {content}\r\n            </ThemeProvider>\r\n        </StyledEngineProvider>\r\n    );\r\n};\r\n","import { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nexport function ScrollToTop() {\r\n    const { pathname } = useLocation();\r\n\r\n    useEffect(() => {\r\n        window.scrollTo(0, 0);\r\n    }, [pathname]);\r\n\r\n    return null;\r\n}\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n    if (onPerfEntry && onPerfEntry instanceof Function) {\r\n        import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n            getCLS(onPerfEntry);\r\n            getFID(onPerfEntry);\r\n            getFCP(onPerfEntry);\r\n            getLCP(onPerfEntry);\r\n            getTTFB(onPerfEntry);\r\n        });\r\n    }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import './index.css';\r\nimport ReactDOM from 'react-dom';\r\nimport { HelmetProvider } from 'react-helmet-async';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider as ReduxProvider } from 'react-redux';\r\nimport { LocalizationProvider } from '@mui/lab';\r\nimport AdapterDateFns from '@mui/lab/AdapterDateFns';\r\nimport { configureStore } from './Store';\r\nimport { App } from './App';\r\nimport { ScrollToTop } from './ScrollToTop';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nconst store = configureStore();\r\n\r\nReactDOM.render(\r\n    <HelmetProvider>\r\n        <ReduxProvider store={store}>\r\n            <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n                <BrowserRouter>\r\n                    <ScrollToTop />\r\n                    <App />\r\n                </BrowserRouter>\r\n            </LocalizationProvider>\r\n        </ReduxProvider>\r\n    </HelmetProvider>,\r\n    document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals())\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","import type { FC } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Box, ListItem, ListItemText, Typography } from '@mui/material';\r\nimport type { ListItemProps } from '@mui/material';\r\n\r\ninterface PropertyListItemProps extends ListItemProps {\r\n    align?: 'horizontal' | 'vertical';\r\n    label: string;\r\n    value?: string;\r\n}\r\n\r\nexport const PropertyListItem: FC<PropertyListItemProps> = (props) => {\r\n    const { align, children, disableGutters, value, label, ...other } = props;\r\n\r\n    return (\r\n        <ListItem\r\n            sx={{\r\n                px: disableGutters ? 0 : 3,\r\n                py: 1.5,\r\n            }}\r\n            {...other}\r\n        >\r\n            <ListItemText\r\n                disableTypography\r\n                primary={\r\n                    <Typography sx={{ minWidth: align === 'vertical' ? 'inherit' : 180 }} variant=\"subtitle2\">\r\n                        {label}\r\n                    </Typography>\r\n                }\r\n                secondary={\r\n                    <Box\r\n                        sx={{\r\n                            flex: 1,\r\n                            mt: align === 'vertical' ? 0.5 : 0,\r\n                        }}\r\n                    >\r\n                        {children || (\r\n                            <Typography color=\"textSecondary\" variant=\"body2\">\r\n                                {value}\r\n                            </Typography>\r\n                        )}\r\n                    </Box>\r\n                }\r\n                sx={{\r\n                    display: 'flex',\r\n                    flexDirection: align === 'vertical' ? 'column' : 'row',\r\n                    my: 0,\r\n                }}\r\n            />\r\n        </ListItem>\r\n    );\r\n};\r\n\r\nPropertyListItem.defaultProps = {\r\n    align: 'vertical',\r\n};\r\n\r\nPropertyListItem.propTypes = {\r\n    align: PropTypes.oneOf(['horizontal', 'vertical']),\r\n    children: PropTypes.node,\r\n    disableGutters: PropTypes.bool,\r\n    label: PropTypes.string.isRequired,\r\n    value: PropTypes.string,\r\n};\r\n","import { Helmet } from 'react-helmet-async';\r\n\r\ninterface Props {\r\n    title?: string;\r\n}\r\n\r\nexport const Title = ({ title }: Props) => (\r\n    <Helmet>\r\n        <title>{`${title || ''} - LSoft Technologies`}</title>\r\n    </Helmet>\r\n);\r\n","export const settings = {\r\n    phone1: '+1 (877) 403-8082',\r\n    phone2: '+1 (905) 812-8434',\r\n    fax: '+1 (647) 795-2904',\r\n    hours: '9am to 6pm EST',\r\n    email: 'sales @ lsoft.net',\r\n    supportEmail: 'support @ lsoft.net',\r\n    address: ['7177 Danton Promenade', 'Mississauga, ON', 'L5N 5P3', 'Canada'],\r\n    mapUrl: 'https://maps.google.com/maps?q=7177%20Danton%20Prom&t=&z=13&ie=UTF8&iwloc=&output=embed',\r\n    website: {\r\n        name: 'www.lsoft.net',\r\n        url: 'https://www.lsoft.net',\r\n    },\r\n    domainName: 'http://lsoft.net',\r\n    secureWebOrderUrl: 'https://secure.lsoft.net/Order.aspx',\r\n    socials: {\r\n        facebook: 'http://www.facebook.com/pages/LSoft-Technologies/169521936414944',\r\n        twitter: 'https://twitter.com/#!/lsoft_net',\r\n        youtube: 'https://www.youtube.com/user/LsoftTechnologies',\r\n    },\r\n    hstNumber: '87239 4424 RT0001',\r\n    year: '2024',\r\n};\r\n","import { forwardRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\nimport type { ScrollBarProps as PerfectScrollbarProps } from 'react-perfect-scrollbar';\r\nimport { Box } from '@mui/material';\r\n\r\ninterface ScrollbarProps extends PerfectScrollbarProps {}\r\n\r\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>((props, ref) => {\r\n    const { children, ...other } = props;\r\n\r\n    const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n\r\n    if (isMobile) {\r\n        return (\r\n            <Box ref={ref} sx={{ overflowX: 'auto' }}>\r\n                {children}\r\n            </Box>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <PerfectScrollbar\r\n            // @ts-ignore\r\n            ref={ref}\r\n            {...other}\r\n        >\r\n            {children}\r\n        </PerfectScrollbar>\r\n    );\r\n});\r\n\r\nScrollbar.propTypes = {\r\n    children: PropTypes.node,\r\n};\r\n\r\nexport default Scrollbar;\r\n","import { Avatar } from '@mui/material';\r\n\r\ninterface Props {\r\n    size?: number;\r\n}\r\n\r\nexport const Logo = ({ size }: Props) => (\r\n    <Avatar src=\"/logo192.png\" alt=\"logo\" variant=\"square\" sx={{ width: size, height: size }} />\r\n);\r\n","import { http } from './http';\r\nimport type { ResellerProfile } from './types/profile';\r\nimport type {\r\n    ResellerOrder,\r\n    ResellerOrderResponse,\r\n    ResellerOrderCount,\r\n    ResellerProduct,\r\n    ResellerProductPrice,\r\n    ResellerCheckoutInfo,\r\n    CheckoutResponse,\r\n    QuoteCheckoutInfo,\r\n    ResellerExtraSupport,\r\n} from './types/reseller';\r\nimport type { HttpResponse } from './http';\r\nimport type { Country } from './types/helper';\r\n\r\nexport const resellerService = {\r\n    emptyProfile,\r\n    getProfile,\r\n    updateProfile,\r\n    updatePassword,\r\n    getOrders,\r\n    getOrdersCount,\r\n    getProducts,\r\n    getProductPrice,\r\n    getCountries,\r\n    getCheckoutInfo,\r\n    checkout,\r\n    getQuoteCheckoutInfo,\r\n    getExtraSupportInfo,\r\n};\r\n\r\nfunction emptyProfile(): ResellerProfile {\r\n    return {\r\n        login: '',\r\n        reseller: '',\r\n        resellerEmail: '',\r\n        firstName: '',\r\n        lastName: '',\r\n        company: '',\r\n        address: '',\r\n        city: '',\r\n        state: '',\r\n        country: '',\r\n        zip: '',\r\n        phone: '',\r\n        fax: '',\r\n    };\r\n}\r\n\r\nasync function getProfile(resellerId: number): Promise<ResellerProfile | null> {\r\n    const result = await http<ResellerProfile>({\r\n        path: `/resellers/${resellerId}/profile`,\r\n    });\r\n    if (result.ok) {\r\n        const profile = result.body;\r\n        return profile;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function updateProfile(resellerId: number, data: ResellerProfile): Promise<boolean> {\r\n    const result = await http<any, ResellerProfile>({\r\n        path: `/resellers/${resellerId}/profile`,\r\n        method: 'PUT',\r\n        body: data,\r\n    });\r\n    return result.ok;\r\n}\r\n\r\nexport interface UpdatePasswordRequest {\r\n    oldPassword: string;\r\n    newPassword: string;\r\n}\r\n\r\nasync function updatePassword(resellerId: number, data: UpdatePasswordRequest): Promise<boolean> {\r\n    const result = await http<any, UpdatePasswordRequest>({\r\n        path: `/resellers/${resellerId}/password`,\r\n        method: 'POST',\r\n        body: data,\r\n    });\r\n    return result.ok;\r\n}\r\n\r\nconst mapResellerOrder = (order: ResellerOrderResponse): ResellerOrder => ({\r\n    ...order,\r\n    dateTime: new Date(order.dateTime),\r\n    expiryDate: order.expiryDate ? new Date(order.expiryDate) : null,\r\n});\r\n\r\nasync function getOrders(\r\n    resellerId: number,\r\n    from: Date,\r\n    to: Date,\r\n    query: string,\r\n    prevDate: Date,\r\n    prevOrder: string,\r\n    rows: number\r\n): Promise<ResellerOrder[]> {\r\n    const path = `/resellers/${resellerId}/orders?from=${from ? from.toISOString() : ''}&to=${\r\n        to ? to.toISOString() : ''\r\n    }&query=${query}&prevdate=${prevDate.toISOString()}&prevorder=${prevOrder}&rows=${rows}`;\r\n    const result = await http<ResellerOrderResponse[]>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.map(mapResellerOrder);\r\n    } else {\r\n        return [];\r\n    }\r\n}\r\n\r\nasync function getOrdersCount(resellerId: number, from: Date, to: Date, query: string): Promise<number | undefined> {\r\n    const path = `/resellers/${resellerId}/orders/count?from=${from ? from.toISOString() : ''}&to=${\r\n        to ? to.toISOString() : ''\r\n    }&query=${query}`;\r\n    const result = await http<ResellerOrderCount>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body.count;\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nasync function getProducts(resellerId: number): Promise<ResellerProduct[]> {\r\n    const path = `/resellers/${resellerId}/products`;\r\n    const result = await http<ResellerProduct[]>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n}\r\n\r\nasync function getProductPrice(pid: number, lic: number, qty: number): Promise<ResellerProductPrice | null> {\r\n    const path = `/resellers/product-price?pid=${pid}&lic=${lic}&qty=${qty}`;\r\n    const result = await http<ResellerProductPrice>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function getCountries(): Promise<Country[]> {\r\n    const path = `/resellers/countries`;\r\n    const result = await http<Country[]>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return [];\r\n    }\r\n}\r\n\r\nasync function getCheckoutInfo(\r\n    resellerId: number,\r\n    subtotal: number,\r\n    products: string\r\n): Promise<ResellerCheckoutInfo | null> {\r\n    const path = `/resellers/${resellerId}/checkout?subtotal=${subtotal}&products=${products}`;\r\n    const result = await http<ResellerCheckoutInfo>({\r\n        path: path,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function checkout(params: any): Promise<CheckoutResponse | null> {\r\n    const result = await http<CheckoutResponse, any>({\r\n        path: 'https://secure.lsoft.net/OrderProcessBackend.aspx',\r\n        method: 'POST',\r\n        body: params,\r\n        formData: true,\r\n    });\r\n    if (result.ok && result.body) {\r\n        return result.body;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nasync function getQuoteCheckoutInfo(orderId: string): Promise<HttpResponse<QuoteCheckoutInfo>> {\r\n    const path = `/resellers/quote-checkout/${orderId}`;\r\n    const result = await http<QuoteCheckoutInfo>({\r\n        path: path,\r\n    });\r\n    return result;\r\n}\r\n\r\nasync function getExtraSupportInfo(orderId: string): Promise<HttpResponse<ResellerExtraSupport>> {\r\n    const path = `/resellers/extra-support/${orderId}`;\r\n    const result = await http<ResellerExtraSupport>({\r\n        path: path,\r\n    });\r\n\r\n    if (result.ok && result.body) {\r\n        return { ok: result.ok, message: result.message, body: result.body };\r\n    } else {\r\n        return { ok: false, message: result.message, body: null };\r\n    }\r\n}\r\n","import { useCallback, useEffect, useRef } from 'react';\r\n\r\nexport const useMounted = () => {\r\n    const isMounted = useRef(false);\r\n\r\n    useEffect(() => {\r\n        isMounted.current = true;\r\n\r\n        return () => {\r\n            isMounted.current = false;\r\n        };\r\n    }, []);\r\n\r\n    return useCallback(() => isMounted.current, []);\r\n};\r\n","export interface IToastState {\r\n    open: boolean;\r\n    status: 'error' | 'info' | 'success' | 'warning';\r\n    message: string;\r\n}\r\n\r\nexport const defaultToastState: IToastState = {\r\n    open: false,\r\n    status: 'success',\r\n    message: '',\r\n};\r\n","export const server =\r\n    process.env.REACT_APP_ENV === 'production'\r\n        ? 'https://dev.lsoft.net'\r\n        : process.env.REACT_APP_ENV === 'staging'\r\n        ? 'http://ec2-100-26-214-232.compute-1.amazonaws.com:5000'\r\n        : 'http://localhost:4000';\r\n\r\nexport const webAPIUrl = `${server}/api`;\r\nexport const attachmentsUrl = `${server}/attachments/`;\r\nexport const tinymceKey = 'qutz8206qzbw7y81g6436ssgeely1iban0ce6wg1gt2zu7ab';\r\n","import type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { List } from '@mui/material';\r\n\r\ninterface PropertyListProps {\r\n    children: ReactNode;\r\n}\r\n\r\nexport const PropertyList: FC<PropertyListProps> = (props) => {\r\n    const { children } = props;\r\n\r\n    return <List disablePadding>{children}</List>;\r\n};\r\n\r\nPropertyList.propTypes = {\r\n    children: PropTypes.node,\r\n};\r\n"],"sourceRoot":""}