{"version":3,"sources":["authentication/AuthenticationStaleError.js","authentication/CustomerPortalApiManagerFactory.js","usage/helpers/downloadUsageDialog.js","components/CircleProgressWithLabel.js","helpers/generateCsvString.js","ApplicationStubs.js","import.js","assets/jss/portalStyle.js","api/CustomerPortalApiCall.js","api/getCustomerPortalSettings.js","api/getLocale.js","user/authService.js","helpers/getInfoFromCurrentUser.js","components/Header.js","components/Loading.js","components/RedirectToLogin.js","components/Monitor.js","app/AppThemeProvider.js","app/ProtectedRoute.js","app/ThemedRoute.js","assets/jss/classes/drawer.js","components/TextFieldWithOnEnterAction.js","components/Login.js","api/getAccount.js","api/getAccountSummary.js","api/getInvoices.js","api/getInvoiceRender.js","helpers/dateFormat.js","helpers/numberFormat.js","helpers/transforms.js","components/ChangeAccount.js","components/EmptyListMessage.js","invoices/InvoiceCard.js","api/getPaymentMethods.js","api/getPaymentType.js","api/getCardType.js","api/getPaymentConfiguration.js","api/postPayment.js","api/postPaymentOneTimeBankAccount.js","api/postPaymentOneTimeCreditCard.js","components/ProcessingDialog.js","invoices/MakePaymentDialog.js","assets/jss/classes/bgShade.js","components/TablePaginationActions.js","components/Table.js","invoices/Invoices.js","components/useMediaQuery.js","overview/OverviewCard.js","overview/Overview.js","api/getAccountPackageSummary.js","api/getServiceSummary.js","api/getServiceStatusType.js","api/getAccountPackageStatusType.js","api/getAccountStatusType.js","components/ConfirmDialog.js","api/postCancelAccountPackages.js","products/ServiceHeader.js","products/ServiceListItem.js","products/ServiceRow.js","products/transform.js","products/Products.js","api/getUsage.js","usage/Usage.js","components/ReadOnlyField.js","api/postUserPasswordChange.js","components/ChangePasswordFields.js","components/ValidationErrors.js","components/ChangePasswordDialog.js","profile/tabs/UserDetail.js","profile/tabs/BillingInformation.js","api/putPaymentMethod.js","api/postSetPaymentMethodAsDefault.js","profile/tabs/paymentMethods/EditPaymentDialog.js","profile/tabs/paymentMethods/PaymentMethodRow.js","profile/tabs/paymentMethods/EmptyPaymentMethod.js","api/postPaymentMethodBankAccount.js","api/postPaymentMethodCC.js","profile/tabs/paymentMethods/AddPaymentDialog.js","profile/tabs/paymentMethods/PaymentMethods.js","profile/Profile.js","api/getAccountInvoicers.js","api/getCustomerPortalUser.js","app/routes.js","homePage/Navigator.js","homePage/PageHeader.js","homePage/BuildPage.js","counter/counterSlice.js","counter/Counter.js","components/LogisenseIcon.js","assets/images/logiSense/logisense_login_logo.png","user/useUserStyles.js","user/SignIn.js","user/CheckEmail.js","user/ForgotPassword.js","user/NewPassword.js","app/App.js","customHooks/importScript.js","app/store.js","serviceWorker.js","index.js","authentication/localStorage.js","assets/dayjsPlugins.js","counter/Counter.module.css"],"names":["AuthenticationStaleError","name","constructor","Error","CustomerPortalApiManagerFactory","config","api_configuration","authUrl","auth_url","logger","global","Logger","url_auth_server_request_prefix","authorization_server","version","url_auth_server_logout","resource_server","actingAccountId","isLogin","axios","this","clearStorage","initializeFromStoredToken","storage","getStorage","refreshToken","invoicerAccountId","refreshTokenExists","undefined","idleDate","dayjs","access_token_promise","establishClaim","refresh_token","useRefresh","current_claim","failCount","a","Promise","resolve","reject","searchParams","Accept","client_id","credentials","clientId","Object","assign","grant_type","password","username","acting_account_id","login","post","URLSearchParams","then","response","status","authResponse","data","accessToken","access_token","setStorage","e","console","error","Retryable","CouldNotEstablishResourceError","catch","err","warn","getCurrentToken","headers","finally","BaseManagerFactory","maxPerPage","DownloadUsageDialog","props","React","useState","usageDownloading","setUsageDownloading","progress","setProgress","onClose","open","periodData","fetchData","totalCount","handleClose","id","variant","start","end","value","color","onClick","progressCb","totalDataCount","completeCb","currentNumOfPages","Math","ceil","maxNumOfPages","min","progressMetric","currentPage","dataset","pageIndex","pageSize","getNextPage","results","concat","items","download","Blob","generateCsvString","downloadData","metric","prevProgress","disabled","disableElevation","CircularProgressWithLabel","position","display","justifyContent","top","left","bottom","right","alignItems","component","round","sanitizeString","strItem","separator","includes","replace","indexOf","arrayOfObjects","lineEnding","Array","isArray","every","obj","length","csvArray","push","keys","join","forEach","values","map","trace","msg","debug","info","log","$ui","Date","defineProperty","get","set","prefix","imports","window","exports","im","document","createElement","type","textContent","JSON","stringify","currentScript","after","defaultBrandingInfo","primaryColor","secondaryColor","largeLogo","smallLogo","setBranding","branding","schema","successColor","grayColor","blackColor","whiteColor","CustomerPortalApiCall","apiManager","getApiManager","cb","getAuthExpiredCb","mgr","execute","initializeApiManager","apiCall","onSuccess","onAuthenticationStaleError","onError","GetCustomerPortalSettings","accountId","customerPortalSetting","single","getCustomerPortalSettings","propTypes","identity","PropTypes","number","isRequired","allowPaymentMethodCreation","bool","allowPaymentMethodUpdate","allowPaymentProductCancellation","allowPayments","string","GetLocale","localeId","locale","getLocale","localeIdentifier","currentUser","authExpiredCb","factory","brandingInfo","currentOwnerCustomerPortalSettingsPromise","localeIdentifierPromise","getCurrentAccountId","getCurrentUser","user","getCurrentOwnerCustomerPortalSettings","u","settings","getLocaleIdentifier","buildApiManager","transformServerConfigToApiManagerFactoryConfig","serverConfig","initialize","create","Credentials","retry","Retry","apiConfiguration","ApiConfiguration","ClientId","Period","PeriodMultiplier","PeriodCap","MaxAttempts","AuthUrl","api_url","ApiUrl","AuthorizationServer","ResourceServer","Version","api_helper","usePostSearch","ApiManagerTypeEnum","CustomerPortal","executeCallback","params","parseInt","setBrandingInfo","reauthenticate","onFail","executeLoginWorkflow","getToken","isAuthenticated","logout","onComplete","requestResetLink","userName","onSuccessCb","onFailCb","apiConfig","postBody","getUserName","changeActingAccountId","authExpiredCallback","label","Typography","gutterBottom","title","Grid","container","spacing","item","xs","Header","to","pathname","state","from","location","useStyles","makeStyles","json","wordBreak","Monitor","classes","redirectToLogin","setRedirectToLogin","loginResponse","setLoginResponse","useEffect","RedirectToLogin","Button","className","withStyles","theme","primaryMain","secondaryMain","createTheme","palette","primary","light","main","dark","secondary","typography","h5","fontWeight","fontSize","letterSpacing","shape","borderRadius","MuiTab","disableRipple","MuiTypography","mixins","toolbar","minHeight","overrides","MuiDrawer","paper","backgroundColor","MuiButton","textTransform","contained","boxShadow","MuiTabs","root","marginLeft","borderRight","borderRightColor","indicator","height","width","borderTopLeftRadius","borderTopRightRadius","margin","minWidth","padding","breakpoints","up","down","selected","MuiIconButton","MuiTooltip","tooltip","MuiDivider","MuiListItemText","fontWeightMedium","MuiListItemIcon","marginRight","MuiAvatar","responsiveFontSizes","buildTheme","ThemeProvider","Component","rest","auth","setAuth","loading","setLoading","isInternal","setIsInternal","checkAuth","Loading","render","drawerWidth","logoHeight","drawerClass","drawer","flexShrink","onEnterPress","TextField","onKeyPress","event","key","onLoginSuccess","loginWorkflow","isAuthenticating","setIsAuthenticating","authenticationFailed","setAuthenticationFailed","setUsername","setPassword","disableUserName","loginHandler","Fragment","required","fullWidth","autoFocus","onChange","target","usernameChangeHandler","TextFieldWithOnEnterAction","autoComplete","passwordChangeHandler","submit","CircularProgress","GetAccount","options","account","getAccount","accountStatusTypeId","accountStatusTypeName","accountTypeId","accountTypeName","accountsReceivableTermsId","accountsReceivableTermsName","actingOwnerId","actingOwnerName","billDay","billGroupId","billGroupName","created","createdByUserId","createdByUserName","currencyCode","currencyId","currencyName","extensions","object","invoiceDeliveryId","invoiceDeliveryName","invoicerAccountName","taxSettingAccountId","taxSettingAccountName","usageBillDay","usageInvoicerAccountId","usageInvoicerAccountName","GetAccountSummary","accountSummary","first","filters","getAccountSummary","accountName","balance","balanceDue","charge","credit","discount","payment","tax","GetInvoices","pagedOptions","searchRequest","readRequest","ReadRequest","order","orderBy","direction","invoice","paged","pageNumber","getInvoices","date","due","totalCharge","totalTax","total","GetInvoiceRender","invoiceId","getInvoiceRender","pdf","link","invoiceName","dateHelperSetup","localeDateFormat","localeDateTimeFormat","uiDateHelper","dateHelpers","dbToUIDateTimeConvert","strDateTime","showDateOnly","formats","dbDateTimeFormat","format","currDate","utc","local","bind","isoToUIDateTimeConvert","isoDateTime","dateFormat","isoDateTimeFormat","isValid","isoToUIDateConvert","isoDate","isoDateFormat","uiToDayjsConvert","uiToISODateTimeConvert","uiToISODateConvert","uiNow","uiDateToDateTimeConvert","strDate","isUIDateValid","uiDate","minDate","maxDate","max","isISODateValid","isoComparisonFn","localeInfo","localeData","longDateFormat","timeFormat","defaultLocale","getCurrencyFormat","currency","selectedCurrency","formatter","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","guid","guidS4","random","toString","substring","portalConfigTransform","invoiceTransform","uid","col1","col2","col3","col4","col5","col6","col7","col8","changeAccountButton","textDecoration","cursor","grid","paddingLeft","paddingRight","invoicerAccounts","setCurrentAccount","text","buttonClass","accountFilter","setAccountFilter","anchorChangeAccount","setAnchorChangeAccount","openChangeAccount","Boolean","filteredAccounts","filter","trim","toLowerCase","startsWith","handleChangeAccountClose","handleAccountChange","buttonClassName","clsx","currentTarget","Menu","anchorEl","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","onInput","preventDefault","helperText","InputProps","startAdornment","InputAdornment","MenuItem","changeAccount","screenId","headerLabel","entityName","textAlign","amount","amountId","labelId","matches","useMediaQuery","Card","CardContent","GetPaymentMethods","paymentMethod","all","getPaymentMethods","paymentMethodIdentifier","isActive","GetPaymentType","paymentType","GetAllPaymentTypes","getAllPaymentTypes","getPaymentType","vendorCardName","paymentBaseTypeId","paymentBaseTypeName","paymentTypeDisbursementTypeId","paymentTypeDisbursementTypeName","paymentGatewayId","paymentGatewayName","cardTypeId","cardTypeName","GetCardType","cardType","getCardType","GetPaymentConfiguration","paymentConfiguration","getPaymentConfiguration","environmentKey","PostPayment","postPayment","PostPaymentOneTimeBankAccount","accountNumber","routingNumber","firstName","lastName","posting","automaticDisburse","savePaymentMethod","paymentMethodName","paymentOneTimeBankAccount","postPaymentOneTimeBankAccount","PostPaymentOneTimeCreditCard","paymentMethodToken","paymentOneTimeCreditCard","postPaymentOneTimeCreditCard","dialogTitle","content","icon","successIcon","failedIcon","message","ProcessingDialog","successMessage","failedMessage","isLoading","setIsLoading","isSuccess","setIsSuccess","errorMessage","setErrorMessage","trackingId","setTrackingId","errors","buildErrorMessage","getTrackingId","Dialog","DialogTitle","DialogContent","DialogActions","flexWrap","formControl","spreedlyInput","borderBottom","newPaymentMethod","borderTop","currencyAmountValidator","RegExp","PaymentMethodTypeEnum","PaymentBaseTypeEnum","DataEnums","PaymentMethodEnum","currentYear","getFullYear","initializeSpreedly","gatewayToken","Spreedly","init","defaultSpreedlySetup","onReadyCB","onErrorCB","fieldEventCB","validationCB","on","createCSSText","styleObj","TypeError","property","paymentMethodTransform","digitsReg","match","lastDigits","paymentTypeId","paymentTypeName","description","autopay","isValueNonEmpty","setToDisabled","ref","current","buildPaymentMethodMessage","MakePaymentDialog","accountBalance","accountCurrencyCode","currencyFormatter","hideInvoices","onSuccessfulPayment","getAmountFromAccountBalance","useCallback","isDialogOpen","setIsDialogOpen","paymentMethods","setPaymentMethods","setGatewayToken","customerPortalSettings","setCustomerPortalSettings","paymentApiCall","setPaymentApiCall","processingMessage","setProcessingMessage","setPaymentType","setCardType","paymentMethodId","setPaymentMethodId","setPaymentMethod","setAmount","invoices","setInvoices","setInvoiceId","newPaymentMethodType","setNewPaymentMethodType","payNow","setPayNow","setFirstName","setLastName","expiryMonth","setExpiryMonth","expiryYear","setExpiryYear","expiryError","setExpiryError","setAccountNumber","setRoutingNumber","savePaymentCheck","setSavePaymentCheck","setPaymentMethodName","defaultCheck","setDefaultCheck","spreedlyVisible","setSpreedlyVisible","spreedlyNumberValid","setSpreedlyNumberValid","spreedlyAmountValid","setSpreedlyAmountValid","spreedlyCvvValid","setSpreedlyCvvValid","spreedlyCreditError","setSpreedlyCreditError","spreedlyAmountError","setSpreedlyAmountError","spreedlyCVVError","setSpreedlyCVVError","setPaymentMethodToken","genericError","setGenericError","openGenericMessage","setOpenGenericMessage","spreedlyReady","setSpreedlyReady","spreedlyCreditInput","useRef","recacheButton","paymentMethodButton","initializePaymentMethods","operator","condition","defaultPaymentMethod","find","pm","getInvoicesWithBalances","closeDialog","invoiceChange","curAmount","parseFloat","accounting","formatNumber","method","makeOneTimeBankPayment","paymentOptions","dbNow","makeOneTimeCreditPayment","makeExistingPayment","paymentObj","detail","triggerTokenize","requiredFields","first_name","last_name","month","year","tokenizeCreditCard","submitPayment","CREDIT_CARD","recache","spreedlyRecacheOnReady","setRecache","last_four_digits","card_type","setFieldType","setNumberFormat","compStyle","getComputedStyle","font","setStyle","click","spreedlyNewPaymentOnReady","token","enablePayNow","test","validateNewCreditCard","validateNewACH","ACH","setupSpreedly","isLoaded","removeHandlers","removeSpreedly","unload","spreedlyOnErrorCB","attribute","activeEl","inputProperties","validNumber","validCvv","reload","buttonLabel","onExit","Snackbar","onExited","action","IconButton","close","FormControl","InputLabel","Select","input","Input","hidden","shrink","htmlFor","OutlinedInput","inputComponent","notched","FormHelperText","placeholder","InputLabelProps","inputProps","FormControlLabel","control","Checkbox","checked","Hidden","bgShadeClass","TablePaginationActions","count","page","rowsPerPage","onPageChange","classNames","overflow","cellAlignCenter","cellAlignRight","cellAlignLeft","header","headerFirstChild","headerLastChild","pagination","columns","controlledPageCount","pageCount","handleSortChange","totalRows","useTable","initialState","manualPagination","usePagination","getTableProps","getTableBodyProps","headerGroups","prepareRow","gotoPage","setPageSize","StyledTableSortLabel","fill","TableSortLabel","alignmentStyleByClass","alignmentStyleByAlign","alignment","TableContainer","Paper","TableHead","headerGroup","TableRow","getHeaderGroupProps","column","idx","alignStyle","align","orderStyle","TableCell","getHeaderProps","sortDirection","isSortable","active","TableBody","colSpan","bgShade","row","getRowProps","cells","cell","getCellProps","TablePagination","rowsPerPageOptions","SelectProps","native","onRowsPerPageChange","Number","ActionsComponent","HtmlTooltip","maxWidth","pxToRem","border","Tooltip","InvoiceCards","summaryData","cardGridSize","gridCardRoot","handleInvoiceDownloadClick","invoiceResults","pdfLink","roundAccurately","decimalPlaces","accountSummaryTransform","summary","isInvoicerAccount","noFormatBalance","noFormatBalanceDue","marginBottom","currentAccount","dateFormatter","setDateFormat","setCurrencyFormat","useMemo","accessor","columnName","Cell","setData","customerPortalConfig","setCustomerPortalConfig","setSummaryData","isInvoicer","setIsInvoicer","invoiceLoading","setInvoiceLoading","setPageCount","setTotalRows","pageIdx","setPageIdx","setOrder","setOrderBy","fetchInvoices","columnId","getSortColumn","summaryPromise","accountPromise","invoicePromise","portalConfig","currencyPromise","dateTransformPromise","formatters","result","query","setMatches","media","matchMedia","listener","addListener","removeListener","cardAction","maxHeight","contentRoot","OverviewCard","ActionButtonComponent","actionButtonComponent","CardActionArea","CardActions","setInvoice","invoicerAccount","setInvoicerAccount","usageInvoicerAccount","setUsageInvoicerAccount","setSummary","portalSettings","invoiceData","invoicer","usageInvoicer","isPageWide","isPageBarelyWide","cardSpacing","size","GetAccountPackageSummary","currentAccountId","getAccountPackageSummary","accountPackageStatusTypeId","accountPackageStatusTypeName","nextBill","quantity","details","temporalData","array","GetServiceSummary","getServiceSummary","accountPackageId","serviceBaseTypeId","serviceName","serviceStatusTypeId","serviceStatusTypeName","GetServiceStatusType","serviceStatusType","getServiceStatusType","baseBillingStatusTypeId","baseBillingStatusTypeName","GetAccountPackageStatusType","accountPackageStatusType","getAccountPackageStatusType","preventChanges","GetAccountStatusType","accountStatusType","getAccountStatusType","isDefault","defaults","confirmLabel","cancelLabel","Icon","InfoOutlinedIcon","ConfirmDialog","handleConfirmClick","handleCancelClick","PostCancelAccountPackages","packageId","billCancelOptionTypeId","effectiveCancel","waiveEarlyTerminationFee","cancelAccountPackages","masterId","postCancelAccountPackages","useHeaderStyles","headerBorder","ServiceHeader","startIdx","endIdx","leftClickHandler","rightClickHandler","serviceStatusList","disableLeftStatusScroll","disableRightStatusScroll","visibleServiceStatusList","slice","scroll","useBorderlessStyle","caption","paddingTop","emptyCell","serviceStatus","ServiceListItem","counts","service","serviceStatusCounts","chargeType","billingBaseTypeEnum","accountStatusBg","RowAttributes","onCancelClick","allowCancelPackage","gridCell","field","fieldLabel","cancelButton","useRowStyles","headerTopBorder","bolderFont","flexGrow","fontStyle","statusLabel","smallerCell","confirmationBody","Row","onCancelPackage","services","statusId","openCancelModal","setOpenCancelModal","cancelApiCall","setCancelApiCall","serviceStatusStartIdx","setServiceStatusStartIdx","serviceStatusEndIdx","setServiceStatusEndIdx","statusCount","nameColSpan","DialogContentText","serviceChargeTypeEnum","RECURRING","ONE_TIME","groupServicesByName","serviceList","reduce","packages","serviceSummary","accountPackageStatusList","currentAccountStatus","accountPackageStatus","serviceIdx","firstService","statusType","selectedService","svc","b","Products","setServiceSummary","setServiceStatusList","cancelledStatus","setCancelledStatus","setDateFormatter","setRowsPerPage","setAccountPackageStatusList","accountStatusList","setAccountStatusList","packageSummary","accStatus","transform","oldData","pkg","isMounted","serviceStatusPromise","accountPackageStatusPromise","accountStatusPromise","portalConfigPromise","packageSummaryPromise","serviceSummaryPromise","accountPackageStatusCancelled","GetUsage","usageMonth","usageYear","pageOptions","requestOptions","queryParameters","monthlyUsageSummary","getUsage","packageName","usageIdentifier","frequency","frequencyUnit","usage","usageUnit","selectEmpty","marginTop","Usage","currentLocale","usageBillingPeriod","setUsageBillingPeriod","usageLoading","setUsageLoading","usageBillingPeriodList","setUsageBillingPeriodList","usagePeriodList","now","startDateFirstPeriod","isBefore","subtract","setEndDate","startDate","add","endDateFirstPeriod","monthOffset","setUsageBillingPeriods","downloadUsage","usagePeriod","period","fetchUsage","sm","md","lg","startIcon","currentPageIdx","periodItem","udrUsageIdentifier","displayUsageTotal","spacer","PostUserPasswordChange","portalUserPasswordChange","postUserPasswordChange","confirmPassword","confirmPasswordError","listItem","validationErrors","dialogButton","currentPassword","setCurrentPassword","newPassword","setNewPassword","setConfirmPassword","setConfirmPasswordError","setValidationErrors","isChangingPassword","setIsChangingPassword","updateConfirmPasswordError","pass","confirmPass","submitHandler","clearTextPassword","clearTextNewPassword","clearTextConfirmPassword","messages","isValidSubmit","reason","disableEscapeKeyDown","halfWidth","readOnlyField","paddingBottom","customerPortalUser","openModal","setOpenModal","handleModalOpen","handleModalClose","email","changePassword","PutPaymentMethod","update","putPaymentMethod","PostSetPaymentMethodAsDefault","postSetPaymentMethodAsDefault","formBody","marginBlock","EditPaymentDialog","paymentMethodBaseId","hasDefault","paymentMethodNameList","newName","setNewName","setOpen","defaultModalCheck","setDefaultModalCheck","activeModalCheck","setActiveModalCheck","saveClose","defaultValue","readOnly","badgeCell","handleIsActiveChange","handleIsDefaultChange","handleEditPaymentMethod","fnUpdate","labelPlacement","Switch","Radio","generateName","PostPaymentMethodBankAccount","payload","paymentMethodBankAccount","postPaymentMethodBankAccount","PostPaymentMethodCreditCard","paymentMethodCreditCard","postPaymentMethodCreditCard","textValidator","bankAccountNumberValidator","bankRoutingNumberValidator","PaymentTypeEnum","AddPaymentDialog","setName","setEnvironmentKey","defaultPaymentCheck","setDefaultPaymentCheck","save","setSave","spreedlyCVVValid","setSpreedlyCVVValid","spreedlyDateError","setSpreedlyDateError","accountNumberError","setAccountNumberError","routingNumberError","setRoutingNumberError","expiry","setExpiry","dialogOpen","setDialogOpen","saveACHPaymentCallback","saveCCPaymentCallback","spreedlyOnReady","checkValidInput","split","setAccountId","setHasDefault","setPaymentMethodNameList","getData","getPaymentTypes","getPaymentMethodsPromise","getSettingsPromise","paymentTypeList","paymentMethodList","checkDefault","some","selectedPaymentMethod","newActiveValue","updatePaymentMethodState","paymentMethodsToUpdate","oldValue","z","Container","EmptyPaymentMethod","buildTab","tabInfo","tabId","Tab","TabPanel","children","index","other","role","Box","p","background","rootVertical","panel","tabs","tabsVertical","selectedTab","setSelectedTab","handleTabChange","newValue","tabInfos","UserDetail","isVisibleByNonInvoicerAccount","BillingInformation","PaymentMethods","Tabs","orientation","tab","buildTabPanel","GetAccountInvoicers","getAccountInvoicers","GetCustomerPortalUser","portalUser","getCustomerPortalUser","localeName","ownerId","ownerName","timeZone","routeList","href","itemCategory","list","firebase","common","white","positionedLink","itemActiveItem","itemPrimary","itemIcon","noLogo","url","drawerProps","category","poweredByLogiSenseLink","rel","ListItemText","Drawer","List","disablePadding","ListItem","src","alt","routes","activeClassName","button","ListItemIcon","timeoutPromise","timeoutPromiseResolve","timeoutPromiseReject","secondaryBar","zIndex","divider","onDrawerToggle","changeAccountProps","anchorUserProfile","setAnchorUserProfile","openUserProfile","handleProfileClose","history","useHistory","AppBar","elevation","Toolbar","mdUp","edge","smDown","noWrap","Divider","app","flex","flexDirection","rightContainer","mobileOpen","setMobileOpen","setCustomerPortalUser","setCurrentLocale","setInvoicerAccounts","setUserName","accountInvoicerTransform","getAccountInvoicersPromise","getCustomerPortalUserPromise","accounts","transformedAccounts","loadPage","handleDrawerToggle","checkForAuth","pageProps","useRouteMatch","body","CssBaseline","implementation","Overview","Login","counterSlice","createSlice","reducers","increment","decrement","incrementByAmount","actions","selectCount","counter","Counter","useSelector","dispatch","useDispatch","incrementAmount","setIncrementAmount","styles","textbox","asyncButton","setTimeout","logo","greeting","form","buttonRow","floatLeft","float","floatRight","Copyright","Link","useUserStyles","redirectToReferrer","setRedirectToReferrer","LogisenseIcon","noValidate","mt","resendCount","setResendCount","isReturnToLoginClicked","setIsReturnToLoginClicked","isCancelClicked","setIsCancelClicked","submitSucceed","setSubmitSucceed","CheckEmail","queryString","search","resetLinkKey","requestPasswordReset","isSubmitDisabled","App","resourceUrl","script","async","appendChild","removeChild","ProtectedRoute","path","exact","BuildPage","ThemedRoute","SignIn","ForgotPassword","NewPassword","configureStore","reducer","counterReducer","hostname","loadDayjsPlugins","ReactDOM","StrictMode","store","getElementById","navigator","serviceWorker","ready","registration","unregister","REFRESH_TOKEN_KEY","INVOICE_ACCOUNT_ID_KEY","LOGIN_RESPONSE_KEY","localStorage","removeItem","getItem","parse","setItem","jwtToken","decodeJWT","segments","claims","decodeURIComponent","encodeURIComponent","atob","extend","localizedFormat","module"],"mappings":"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","file":"static/js/main.de2dc641.chunk.js","sourcesContent":["export default class AuthenticationStaleError extends Error {\r\n constructor() {\r\n super(\"Authentication credentials are stale\")\r\n this.name = this.constructor.name;\r\n }\r\n}","import axios from 'axios';\r\nimport { Retryable } from '@lb/utils/constructs';\r\nimport { BaseManagerFactory } from '@lb/utils/apiManager';\r\nimport dayjs from '../assets/dayjsPlugins.js'\r\nimport AuthenticationStaleError from './AuthenticationStaleError.js';\r\nimport { clearStorage, getStorage, setStorage } from './localStorage.js'\r\n\r\nexport default class CustomerPortalApiManagerFactory extends BaseManagerFactory {\r\n constructor(config) {\r\n super(config);\r\n let api_configuration = config.api_configuration;\r\n this.authUrl = api_configuration.auth_url;\r\n this.logger = global.Logger;\r\n this.url_auth_server_request_prefix = `${this.authUrl}/${api_configuration.authorization_server}/api/v${api_configuration.version}/CustomerPortal/Access/Login`;\r\n this.url_auth_server_logout = `${this.authUrl}/${api_configuration.resource_server}/api/v${api_configuration.version}/internal/CustomerPortal/Access/Logout`;\r\n this.actingAccountId = config.actingAccountId;\r\n this.isLogin = config.isLogin;\r\n }\r\n\r\n getClient() {\r\n return axios;\r\n }\r\n\r\n initialize() {\r\n if (this.isLogin) {\r\n clearStorage();\r\n }\r\n\r\n if (!this.initializeFromStoredToken()) {\r\n super.initialize();\r\n }\r\n }\r\n\r\n initializeFromStoredToken() {\r\n const storage = getStorage();\r\n const refreshToken = storage.refreshToken;\r\n const invoicerAccountId = storage.invoicerAccountId;\r\n const refreshTokenExists = refreshToken !== undefined && invoicerAccountId !== undefined;\r\n if (refreshTokenExists) {\r\n this.idleDate = dayjs();\r\n this.access_token_promise = this.establishClaim(true, { \r\n refresh_token: refreshToken,\r\n actingAccountId: invoicerAccountId,\r\n });\r\n }\r\n return refreshTokenExists;\r\n }\r\n\r\n async tokenAwaitable(useRefresh, current_claim, failCount) {\r\n return new Promise((resolve, reject) => {\r\n let searchParams = {\r\n Accept: 'application/x-www-form-urlencoded',\r\n 'Content-type': 'application/x-www-form-urlencoded',\r\n client_id: this.credentials.clientId,\r\n };\r\n\r\n if (useRefresh === true && current_claim !== undefined && failCount === 0) {\r\n // Refreshing the access token\r\n searchParams = Object.assign(searchParams, {\r\n grant_type: 'refresh_token',\r\n refresh_token: current_claim['refresh_token']\r\n });\r\n } else if (this.credentials.password !== undefined) {\r\n // Initial login attempt\r\n searchParams = Object.assign(searchParams, {\r\n grant_type: 'password',\r\n username: this.credentials.username,\r\n password: this.credentials.password\r\n });\r\n } else {\r\n // Timeout occured, refresh token is now stale, user will need to re-provide credentials\r\n clearStorage();\r\n return reject(new AuthenticationStaleError());\r\n }\r\n\r\n if (current_claim !== undefined && current_claim.actingAccountId !== undefined) {\r\n this.actingAccountId = current_claim.actingAccountId;\r\n }\r\n\r\n if (this.actingAccountId !== undefined) {\r\n searchParams.acting_account_id = this.actingAccountId;\r\n }\r\n\r\n // Do not keep the password any longer than we need to\r\n if (this.credentials.password !== undefined) {\r\n delete this.credentials.password;\r\n }\r\n if (this.config.password !== undefined) {\r\n delete this.config.password;\r\n }\r\n\r\n const login = (this.config.isLogin === true);\r\n this.config.isLogin = false;\r\n\r\n axios.post(this.url_auth_server_request_prefix, new URLSearchParams(searchParams))\r\n .then(function (response) {\r\n if (response.status === 200) {\r\n try {\r\n let authResponse = response.data;\r\n let accessToken = login ? authResponse.access_token : undefined; // Only reset the access token on initial login when we know the accountID is the InvoicerAccountID\r\n setStorage(authResponse.refresh_token, accessToken, authResponse);\r\n return resolve(authResponse);\r\n } catch (e) {\r\n console.error(`Failed to parse authorization response. Response: ${response}`);\r\n console.error(e);\r\n return reject(new Retryable.CouldNotEstablishResourceError(response));\r\n }\r\n }\r\n clearStorage();\r\n return reject(new Retryable.CouldNotEstablishResourceError(response));\r\n }).catch(function (err) {\r\n clearStorage();\r\n console.warn('An unexpected error occurred when obtaining an authorization token, treating it as a stale token.')\r\n return reject(new AuthenticationStaleError());\r\n });\r\n });\r\n }\r\n\r\n async logout() {\r\n const [access_token, ] = await this.getCurrentToken();\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(this.url_auth_server_logout, undefined, {\r\n headers: {\r\n 'Authorization': 'Bearer ' + access_token\r\n }\r\n })\r\n .then(function () {\r\n return resolve();\r\n })\r\n .catch(function (err) {\r\n return reject(new Error(err));\r\n })\r\n .finally(() => {\r\n clearStorage();\r\n });\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport CircularProgress from '../../components/CircleProgressWithLabel';\r\nimport generateCsvString from '../../helpers/generateCsvString';\r\n\r\nconst maxPageCount = 5;\r\nconst maxPerPage = 2000;\r\n// 2000 is about 1MB per page of response\r\n// So that is a 5MB Dl for the file\r\n\r\nconst downloadData = function (fetchData, progressCb, totalDataCount, completeCb) {\r\n const currentNumOfPages = Math.ceil(totalDataCount / maxPerPage);\r\n const maxNumOfPages = Math.min(currentNumOfPages, maxPageCount);\r\n const progressMetric = 100 / maxNumOfPages;\r\n\r\n let currentPage = 1;\r\n let dataset = [];\r\n\r\n const getNextPage = (results) => {\r\n dataset = dataset.concat(results.items);\r\n progressCb(progressMetric);\r\n currentPage++;\r\n if (currentPage <= maxNumOfPages) {\r\n fetchData({ pageIndex: currentPage, pageSize: maxPerPage })\r\n .then(getNextPage);\r\n } else {\r\n global.download(new Blob([generateCsvString(dataset)]), 'periodData.csv', 'text/plain');\r\n completeCb();\r\n }\r\n }\r\n fetchData({ pageIndex: currentPage, pageSize: maxPerPage }).then(getNextPage);\r\n}\r\n\r\nfunction DownloadUsageDialog(props) {\r\n const [usageDownloading, setUsageDownloading] = React.useState(false);\r\n const [progress, setProgress] = React.useState(0);\r\n const { onClose, open, periodData, fetchData, totalCount } = props;\r\n // 1 million Record Max\r\n\r\n const handleClose = () => {\r\n onClose();\r\n setProgress(0);\r\n setUsageDownloading(false);\r\n };\r\n\r\n const startDownload = function () {\r\n const progressCallback = (metric) => {\r\n setProgress((prevProgress) => prevProgress + metric);\r\n }\r\n const completeCallback = () => {\r\n handleClose();\r\n }\r\n setUsageDownloading(true);\r\n downloadData(fetchData, progressCallback, totalCount, completeCallback)\r\n }\r\n\r\n return (\r\n \r\n {`${periodData.start} - ${periodData.end}`}\r\n \r\n \r\n Download Now\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDownloadUsageDialog.propTypes = {\r\n onClose: PropTypes.func.isRequired,\r\n open: PropTypes.bool.isRequired,\r\n periodData: PropTypes.object.isRequired,\r\n totalCount: PropTypes.number.isRequired,\r\n fetchData: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default DownloadUsageDialog;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nfunction CircularProgressWithLabel(props) {\r\n return (\r\n \r\n \r\n \r\n {`${Math.round(\r\n props.value,\r\n )}%`}\r\n \r\n \r\n );\r\n}\r\n\r\nCircularProgressWithLabel.propTypes = {\r\n /**\r\n * The value of the progress indicator for the determinate variant.\r\n * Value between 0 and 100.\r\n */\r\n value: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default CircularProgressWithLabel;","const sanitizeString = (strItem, separator) => {\r\n const checkSpecialCharsAndEmpty = (value) => {\r\n return value.includes('\\n') || value.includes('\\r') || value.includes('\\t') || value.includes(',')\r\n || value.includes(';') || value.includes('.') || value.includes('\"') || value.includes('\\'')\r\n || value.includes('`') || value.includes('´');\r\n };\r\n\r\n if (strItem === undefined || strItem === null) {\r\n strItem = '';\r\n }\r\n if (typeof strItem === 'string') {\r\n if (checkSpecialCharsAndEmpty(strItem)) {\r\n strItem = strItem.replace(/(\\r\\n|\\n|\\r|\\s+|\\t| )/gm, ' ');\r\n strItem = strItem.replace(/,/g, ',');\r\n strItem = strItem.replace(/\"/g, '\"\"');\r\n strItem = strItem.replace(/'/g, '\\'');\r\n strItem = strItem.replace(/ +(?= )/g, '');\r\n }\r\n if (strItem.indexOf(separator) > 0) {\r\n strItem = `\"${strItem}\"`;\r\n }\r\n }\r\n return strItem;\r\n};\r\n\r\nexport default (arrayOfObjects, separator = ',', lineEnding = '\\n') => {\r\n if (!Array.isArray(arrayOfObjects) || !arrayOfObjects.every((obj) => typeof obj === 'object') || arrayOfObjects.length === 0) return '';\r\n let csvArray = []\r\n // CSV Headers\r\n csvArray.push(Object.keys(arrayOfObjects[0]).join(separator));\r\n\r\n // CSV Data\r\n arrayOfObjects.forEach((obj) => {\r\n csvArray.push(\r\n Object.values(obj)\r\n .map((obj) => sanitizeString(obj, separator))\r\n .join(separator)\r\n );\r\n })\r\n return csvArray.join(lineEnding);\r\n}","import axios from 'axios';\r\nimport download from 'downloadjs';\r\n\r\nglobal.Logger = {\r\n trace: (msg) => { console.trace(msg); },\r\n debug: (msg) => { console.debug(msg); },\r\n info: (msg) => { console.log(msg); },\r\n warn: (msg) => { console.warn(msg); },\r\n error: (msg) => { console.error(msg); }\r\n}\r\n\r\nglobal.$ui = {\r\n Date: {}\r\n};\r\nObject.defineProperty($ui.Date, 'MIN_DATE', {\r\n get: function () { return new Date(1970, 0, 1) },\r\n set: function () { console.warn('Attempted to change $ui.Date.MIN_DATE, which is not allowed')}\r\n});\r\n\r\nObject.defineProperty($ui.Date, 'MAX_DATE', {\r\n get: function () { return new Date(2199, 11, 31) },\r\n set: function () { console.warn('Attempted to change $ui.Date.MAX_DATE, which is not allowed')}\r\n});\r\n\r\n\r\nglobal.axios = axios;\r\nglobal.download = download;","// TODO - Update to reference CPUI paths\r\nconst prefix = '';\r\nconst imports = {\r\n imports: {\r\n 'vendor/': `${prefix}/vendor/`,\r\n 'entities/': `${prefix}/application/entities/`,\r\n 'screens/': `${prefix}/application/screens/`,\r\n 'core/': `${prefix}/application/core/`,\r\n 'ui_clone': `${prefix}/application/helpers/clone.js`,\r\n // Node Modules\r\n 'uuid': `${prefix}/import/uuid.js`,\r\n 'axios': `${prefix}/import/axios.js`,\r\n 'lodash': `${prefix}/node_modules/lodash-es/lodash.js`,\r\n },\r\n};\r\n\r\n// Module Loader\r\nwindow.exports = {};\r\n\r\n// ImportMap Element Creation\r\nconst im = document.createElement('script');\r\nim.type = 'importmap';\r\nim.textContent = JSON.stringify(imports);\r\ndocument.currentScript.after(im);","const defaultFont = {\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: \"300\",\r\n lineHeight: \"1.5em\"\r\n};\r\n\r\nconst defaultBrandingInfo = {\r\n primaryColor: '#009be5',\r\n secondaryColor: '#18202c',\r\n largeLogo: undefined,\r\n smallLogo: undefined,\r\n}\r\n\r\nlet primaryColor = defaultBrandingInfo.primaryColor;\r\nlet secondaryColor = defaultBrandingInfo.secondaryColor;\r\nlet largeLogo = defaultBrandingInfo.largeLogo;\r\nlet smallLogo = defaultBrandingInfo.smallLogo;\r\n\r\nconst setBranding = (branding) => {\r\n const schema = branding ?? defaultBrandingInfo;\r\n primaryColor = schema.primaryColor ?? defaultBrandingInfo.primaryColor;\r\n secondaryColor = schema.secondaryColor ?? defaultBrandingInfo.secondaryColor;\r\n largeLogo = schema.largeLogo ?? defaultBrandingInfo.largeLogo;\r\n smallLogo = schema.smallLogo ?? defaultBrandingInfo.smallLogo;\r\n}\r\n\r\nconst warningColor = [\r\n \"#ff9800\",\r\n \"#ffa726\",\r\n \"#fb8c00\",\r\n \"#ffa21a\"\r\n];\r\nconst dangerColor = [\r\n \"#f44336\",\r\n \"#ef5350\",\r\n \"#e53935\",\r\n \"#f55a4e\"\r\n];\r\nconst successColor = [\r\n \"#4caf50\",\r\n \"#66bb6a\",\r\n \"#43a047\",\r\n \"#5cb860\"\r\n];\r\nconst infoColor = [\r\n \"#00acc1\",\r\n \"#26c6da\",\r\n \"#00acc1\",\r\n \"#00d3ee\"\r\n];\r\nconst grayColor = [\r\n \"#999\",\r\n \"#777\",\r\n \"#3C4858\",\r\n \"#AAAAAA\",\r\n \"#D2D2D2\",\r\n \"#DDD\",\r\n \"#b4b4b4\",\r\n \"#555555\",\r\n \"#333\",\r\n \"#a9afbb\",\r\n \"#eee\",\r\n \"#e7e7e7\"\r\n];\r\nconst blackColor = \"#000\";\r\nconst whiteColor = \"#FFF\";\r\nconst yellowColor = \"#F2E100\";\r\nconst lightColor = 'rgba(255, 255, 255, 0.7)';\r\n\r\nexport {\r\n setBranding,\r\n defaultFont,\r\n primaryColor,\r\n secondaryColor,\r\n warningColor,\r\n dangerColor,\r\n successColor,\r\n infoColor,\r\n grayColor,\r\n blackColor,\r\n whiteColor,\r\n yellowColor,\r\n lightColor,\r\n largeLogo,\r\n smallLogo,\r\n};","import { getAuthExpiredCb, getApiManager } from '../user/authService';\r\nimport AuthenticationStaleError from '../authentication/AuthenticationStaleError';\r\n\r\nexport default class CustomerPortalApiCall {\r\n constructor() {\r\n this.apiManager = undefined;\r\n }\r\n\r\n async initializeApiManager() {\r\n if (this.apiManager === undefined) {\r\n this.apiManager = await getApiManager();\r\n }\r\n }\r\n\r\n apiCall(...props) {\r\n throw new Error('Classes extending CustomerPortalApiCall must implement \"apiCall\" ');\r\n }\r\n\r\n onSuccess(results) {\r\n console.trace(results);\r\n return Promise.resolve(results);\r\n }\r\n\r\n onError(err) {\r\n console.error(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n onAuthenticationStaleError(err, ...props) {\r\n let cb = getAuthExpiredCb();\r\n if (typeof cb !== 'function') {\r\n return Promise.reject(err);\r\n }\r\n\r\n return cb().then(() => {\r\n getApiManager().then((mgr) => {\r\n this.apiManager = mgr;\r\n return this.execute(...props);\r\n });\r\n });\r\n }\r\n\r\n execute(...props) {\r\n return this.initializeApiManager().then(() => {\r\n return this.apiCall(...props)\r\n .then((results) => {\r\n return this.onSuccess(results);\r\n })\r\n .catch((err) => {\r\n if (err instanceof AuthenticationStaleError) {\r\n return this.onAuthenticationStaleError(err, ...props);\r\n }\r\n return Promise.reject(err);\r\n })\r\n .catch((err) => {\r\n return this.onError(err);\r\n })\r\n })\r\n }\r\n}","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetCustomerPortalSettings extends CustomerPortalApiCall {\r\n apiCall(accountId) {\r\n return this.apiManager.customerPortalSetting.single(accountId);\r\n }\r\n}\r\n\r\nconst getCustomerPortalSettings = (accountId) => new GetCustomerPortalSettings().execute(accountId);\r\ngetCustomerPortalSettings.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n allowPaymentMethodCreation: PropTypes.bool.isRequired,\r\n allowPaymentMethodUpdate: PropTypes.bool.isRequired,\r\n allowPaymentProductCancellation: PropTypes.bool.isRequired,\r\n allowPayments: PropTypes.bool.isRequired,\r\n largeLogo: PropTypes.string,\r\n primaryColor: PropTypes.string,\r\n secondaryColor: PropTypes.string,\r\n smallLogo: PropTypes.string,\r\n}\r\nexport default getCustomerPortalSettings;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetLocale extends CustomerPortalApiCall {\r\n apiCall(localeId) {\r\n return this.apiManager.locale.single(localeId);\r\n }\r\n}\r\n\r\nconst getLocale = (localeId) => new GetLocale().execute(localeId);\r\n\r\ngetLocale.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n localeIdentifier: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getLocale;","import { setBranding } from '../assets/jss/portalStyle';\r\nimport { getCurrentOwnerCustomerPortalSettings, resetCurrentUserSettings } from '../helpers/getInfoFromCurrentUser';\r\nimport { getStorage } from '../authentication/localStorage.js';\r\nimport CustomerPortalApiManagerFactory from '../authentication/CustomerPortalApiManagerFactory';\r\nimport serverConfig from '../server.config.json';\r\nimport axios from 'axios';\r\n\r\nlet apiManager, currentUser, authExpiredCb, factory, brandingInfo;\r\nexport const buildApiManager = async () => {\r\n if (apiManager === undefined) {\r\n try {\r\n let config = transformServerConfigToApiManagerFactoryConfig(serverConfig);\r\n factory = new CustomerPortalApiManagerFactory(config);\r\n factory.initialize();\r\n apiManager = factory.create(config);\r\n await initialize();\r\n } catch {\r\n apiManager = undefined;\r\n console.log('Could not build API manager based on the current refresh token');\r\n }\r\n }\r\n return apiManager;\r\n}\r\n\r\nlet transformServerConfigToApiManagerFactoryConfig = (serverConfig) => {\r\n var config = (serverConfig === undefined) ? {} : serverConfig;\r\n var credentials = (config.Credentials === undefined) ? {} : config.Credentials;\r\n var retry = (serverConfig.Retry === undefined) ? {} : serverConfig.Retry;\r\n var apiConfiguration = (serverConfig.ApiConfiguration === undefined) ? {} : serverConfig.ApiConfiguration;\r\n return {\r\n username: '',\r\n password: '',\r\n clientId: credentials.ClientId,\r\n retry: {\r\n Period: retry.Period,\r\n PeriodMultiplier: retry.PeriodMultiplier,\r\n PeriodCap: retry.PeriodCap,\r\n MaxAttempts: retry.MaxAttempts,\r\n },\r\n api_configuration: {\r\n auth_url: apiConfiguration.AuthUrl,\r\n api_url: apiConfiguration.ApiUrl,\r\n authorization_server: apiConfiguration.AuthorizationServer,\r\n resource_server: apiConfiguration.ResourceServer,\r\n version: apiConfiguration.Version,\r\n },\r\n api_helper: {\r\n usePostSearch: false\r\n },\r\n type: CustomerPortalApiManagerFactory.ApiManagerTypeEnum.CustomerPortal\r\n };\r\n}\r\n\r\nlet executeCallback = (cb, params) => {\r\n if (typeof cb === 'function') {\r\n cb(params)\r\n }\r\n}\r\n\r\nlet initialize = async () => {\r\n await apiManager.initialize();\r\n let storage = getStorage();\r\n if (parseInt(storage?.invoicerAccountId) !== 0) {\r\n await setBrandingInfo();\r\n }\r\n}\r\n\r\nexport const setBrandingInfo = async () => {\r\n await getCurrentUser().then(async () => {\r\n let settings = await getCurrentOwnerCustomerPortalSettings();\r\n brandingInfo = {\r\n largeLogo: settings.largeLogo,\r\n smallLogo: settings.smallLogo,\r\n primaryColor: settings.primaryColor,\r\n secondaryColor: settings.secondaryColor,\r\n };\r\n setBranding(brandingInfo);\r\n });\r\n}\r\n\r\nexport const reauthenticate = async (username, password, onSuccess, onFail) => {\r\n executeLoginWorkflow(username, password, false, onSuccess, onFail);\r\n}\r\n\r\nexport const login = async (username, password, onSuccess, onFail) => {\r\n executeLoginWorkflow(username, password, true, onSuccess, onFail);\r\n}\r\n\r\nconst executeLoginWorkflow = async (username, password, isLogin, onSuccess, onFail) => {\r\n let config = transformServerConfigToApiManagerFactoryConfig(serverConfig);\r\n config.username = username;\r\n config.password = password;\r\n config.isLogin = isLogin;\r\n if (apiManager !== undefined && apiManager.factory !== undefined) {\r\n config.actingAccountId = apiManager.factory.actingAccountId;\r\n }\r\n factory = new CustomerPortalApiManagerFactory(config);\r\n factory.initialize();\r\n apiManager = factory.create(config);\r\n apiManager\r\n .getToken()\r\n .then(() => initialize())\r\n .then(() => {\r\n executeCallback(onSuccess)\r\n })\r\n .catch(err => {\r\n console.error(err);\r\n executeCallback(onFail, err);\r\n });\r\n};\r\n\r\nexport const isAuthenticated = async () => {\r\n var isAuthenticated = false;\r\n if (apiManager !== undefined) {\r\n await apiManager.getToken().then(() => {\r\n isAuthenticated = true;\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n }\r\n return isAuthenticated;\r\n}\r\n\r\nexport const logout = async (cb) => {\r\n function onComplete() {\r\n apiManager = undefined;\r\n currentUser = undefined;\r\n brandingInfo = undefined;\r\n resetCurrentUserSettings();\r\n setBranding();\r\n executeCallback(cb);\r\n }\r\n\r\n factory.logout()\r\n .then(() => {\r\n console.debug('Logout Successful')\r\n onComplete();\r\n })\r\n .catch(() => {\r\n console.warn('Error with Logout');\r\n onComplete();\r\n });\r\n};\r\n\r\nexport const getCurrentUser = async () => {\r\n if (currentUser === undefined && apiManager !== undefined) {\r\n currentUser = await apiManager.getCurrentUser()\r\n }\r\n return currentUser;\r\n}\r\n\r\nexport const getApiManager = async () => {\r\n if (apiManager === undefined) {\r\n await buildApiManager();\r\n }\r\n return apiManager;\r\n}\r\n\r\nexport const requestResetLink = (userName, onSuccessCb, onFailCb) => {\r\n let config = transformServerConfigToApiManagerFactoryConfig(serverConfig);\r\n let apiConfig = config.api_configuration;\r\n let postBody = {\r\n userName: userName\r\n };\r\n axios.post(\r\n `${apiConfig.api_url}/${apiConfig.resource_server}/api/v${apiConfig.version}/internal/CustomerPortal/Access/Password/ResetLink`,\r\n postBody,\r\n {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-type': 'application/json',\r\n }\r\n })\r\n .then((response) => {\r\n onSuccessCb(response)\r\n })\r\n .catch((error) => {\r\n onFailCb(error.response);\r\n });\r\n};\r\n\r\nexport const requestPasswordReset = (data, onSuccessCb, onFailCb) => {\r\n let config = transformServerConfigToApiManagerFactoryConfig(serverConfig);\r\n let apiConfig = config.api_configuration;\r\n let postBody = {\r\n userName: data.userName,\r\n clearTextPassword: data.password,\r\n resetLinkKey: data.resetLinkKey\r\n };\r\n axios.post(\r\n `${apiConfig.api_url}/${apiConfig.resource_server}/api/v${apiConfig.version}/internal/CustomerPortal/Access/Password/Reset`,\r\n JSON.stringify(postBody),\r\n {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-type': 'application/json',\r\n }\r\n })\r\n .then((response) => {\r\n onSuccessCb(response)\r\n })\r\n .catch((error) => {\r\n onFailCb(error.response);\r\n });\r\n};\r\n\r\nexport const getUserName = async () => {\r\n const user = await getCurrentUser();\r\n return user === undefined ? undefined : user.name;\r\n}\r\n\r\nexport const getAuthExpiredCb = () => {\r\n return authExpiredCb;\r\n}\r\n\r\nexport const setAuthExpiredCb = (newCallback) => {\r\n authExpiredCb = newCallback;\r\n}\r\n\r\nexport const refreshToken = async (actingAccountId) => {\r\n try {\r\n await apiManager.changeActingAccountId(actingAccountId);\r\n } catch (err) {\r\n console.error(err);\r\n let authExpiredCallback = getAuthExpiredCb();\r\n if (typeof (authExpiredCallback) === 'function') {\r\n await authExpiredCallback(false);\r\n }\r\n }\r\n}","import getCustomerPortalSettings from '../api/getCustomerPortalSettings.js';\r\nimport getLocale from '../api/getLocale.js';\r\nimport { getCurrentUser } from '../user/authService.js'\r\n//let timeZone = undefined;\r\nlet localeIdentifier = undefined;\r\nlet currentOwnerCustomerPortalSettingsPromise = undefined\r\nlet localeIdentifierPromise = undefined;\r\n\r\nexport const resetCurrentUserSettings = () => {\r\n localeIdentifier = undefined;\r\n currentOwnerCustomerPortalSettingsPromise = undefined\r\n localeIdentifierPromise = undefined;\r\n}\r\n\r\nexport const getCurrentAccountId = () => {\r\n return new Promise((resolve) => {\r\n getCurrentUser().then((user) => {\r\n return resolve(user.accountId);\r\n });\r\n });\r\n};\r\n\r\nexport const getCurrentOwnerCustomerPortalSettings = () => {\r\n if (currentOwnerCustomerPortalSettingsPromise === undefined) {\r\n currentOwnerCustomerPortalSettingsPromise = new Promise((resolve) => {\r\n getCurrentUser().then((u) => {\r\n getCustomerPortalSettings(u.accountId).then((settings) => {\r\n return resolve(settings);\r\n })\r\n });\r\n })\r\n }\r\n return currentOwnerCustomerPortalSettingsPromise;\r\n}\r\n\r\nexport const getLocaleIdentifier = () => {\r\n if (localeIdentifier !== undefined) {\r\n return Promise.resolve(localeIdentifier)\r\n }\r\n\r\n if (localeIdentifierPromise === undefined) {\r\n localeIdentifierPromise = new Promise((resolve) => {\r\n getCurrentUser().then((user) => {\r\n const localeId = user.localeId;\r\n getLocale(localeId)\r\n .then((locale) => {\r\n localeIdentifier = locale === undefined ? undefined : locale.localeIdentifier;\r\n return resolve(localeIdentifier);\r\n })\r\n }).catch((err) => {\r\n console.error(err);\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n return localeIdentifierPromise;\r\n\r\n};\r\n\r\n// TODO - Likely going to need this at some point ??\r\n// TODO - Will need to re-use the promise here \r\n// export const getTimeZone = () => {\r\n// return new Promise((resolve) => {\r\n// if (timeZone !== undefined) {\r\n// return resolve(timeZone)\r\n// }\r\n// getCurrentUser().then((user) => {\r\n// if (user === undefined) {\r\n// return resolve();\r\n// }\r\n// timeZone = user.timeZone;\r\n// return resolve(timeZone);\r\n// }).catch((err) => {\r\n// console.error(err);\r\n// resolve();\r\n// });\r\n// });\r\n// }","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nexport default (props) => { // Possibly some style\r\n const {id, label} = props;\r\n return {label}\r\n}","import React from 'react';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Header from \"./Header\";\r\n\r\nexport default (props) => {\r\n const { title } = props;\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n
LOADING
\r\n \r\n )\r\n}","import React from 'react'\r\nimport { Redirect } from 'react-router-dom'\r\nexport default (props) => {\r\n return ( \r\n \r\n )\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { useRouteMatch } from 'react-router-dom';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport DialogActions from '@material-ui/core/Button';\r\nimport RedirectToLogin from './RedirectToLogin'\r\nimport { logout } from '../user/authService';\r\nimport { getStorage } from '../authentication/localStorage.js';\r\nconst useStyles = makeStyles(() => ({\r\n json: {\r\n wordBreak: 'break-word',\r\n },\r\n}));\r\n\r\nfunction Monitor() {\r\n const classes = useStyles();\r\n const [redirectToLogin, setRedirectToLogin] = React.useState(false);\r\n const [loginResponse, setLoginResponse] = React.useState({});\r\n\r\n useEffect(() => {\r\n const storage = getStorage();\r\n setLoginResponse(storage.loginResponse);\r\n }, []);\r\n\r\n const handleLogout = () => {\r\n logout();\r\n setRedirectToLogin(true);\r\n };\r\n\r\n if (redirectToLogin) {\r\n return \r\n }\r\n return (\r\n
\r\n \r\n \r\n \r\n

No available account information.

\r\n
\r\n {\r\n JSON.stringify(loginResponse)\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Monitor;","import React from 'react';\r\nimport { createTheme, responsiveFontSizes, ThemeProvider, withStyles } from '@material-ui/core/styles';\r\n\r\nimport { primaryColor, secondaryColor } from '../assets/jss/portalStyle';\r\n\r\nlet buildTheme = (primaryMain, secondaryMain) => {\r\n let theme = createTheme({\r\n palette: {\r\n primary: {\r\n light: '#63ccff',\r\n main: primaryMain ?? '#009be5',\r\n dark: '#006db3',\r\n },\r\n secondary: {\r\n main: secondaryMain ?? '#009be5',\r\n }\r\n },\r\n typography: {\r\n h5: {\r\n fontWeight: 500,\r\n fontSize: 26,\r\n letterSpacing: 0.5,\r\n },\r\n },\r\n shape: {\r\n borderRadius: 8,\r\n },\r\n props: {\r\n MuiTab: {\r\n disableRipple: true,\r\n },\r\n MuiTypography: {\r\n component: 'div',\r\n }\r\n },\r\n mixins: {\r\n toolbar: {\r\n minHeight: 48,\r\n },\r\n },\r\n });\r\n theme = {\r\n ...theme,\r\n overrides: {\r\n MuiDrawer: {\r\n paper: {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n },\r\n MuiButton: {\r\n label: {\r\n textTransform: 'none',\r\n },\r\n contained: {\r\n boxShadow: 'none',\r\n '&:active': {\r\n boxShadow: 'none',\r\n },\r\n },\r\n },\r\n MuiTabs: {\r\n root: {\r\n marginLeft: theme.spacing(1),\r\n borderRight: '5px solid',\r\n borderRightColor: '#d6d9dc',\r\n },\r\n indicator: {\r\n height: 3,\r\n width: 3,\r\n borderTopLeftRadius: 3,\r\n borderTopRightRadius: 3,\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n MuiTab: {\r\n root: {\r\n textTransform: 'none',\r\n margin: '0 16px',\r\n minWidth: 0,\r\n padding: 0,\r\n [theme.breakpoints.up('md')]: {\r\n padding: theme.spacing(2),\r\n minWidth: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0 8px',\r\n },\r\n },\r\n selected: {\r\n color: theme.palette.primary.main,\r\n },\r\n },\r\n MuiIconButton: {\r\n root: {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n MuiTooltip: {\r\n tooltip: {\r\n borderRadius: 4,\r\n },\r\n },\r\n MuiDivider: {\r\n root: {\r\n backgroundColor: '#404854',\r\n },\r\n },\r\n MuiListItemText: {\r\n primary: {\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n },\r\n MuiListItemIcon: {\r\n root: {\r\n color: 'inherit',\r\n marginRight: 0,\r\n '& svg': {\r\n fontSize: 20,\r\n },\r\n },\r\n },\r\n MuiAvatar: {\r\n root: {\r\n width: 32,\r\n height: 32,\r\n },\r\n },\r\n },\r\n };\r\n return responsiveFontSizes(theme);\r\n};\r\nconst styles = (theme) => ({\r\n});\r\nfunction AppThemeProvider(props) {\r\n const theme = buildTheme(primaryColor, secondaryColor);\r\n return (\r\n \r\n )\r\n}\r\nexport default withStyles(styles)(AppThemeProvider)","import React, { useState, useEffect } from 'react';\r\nimport { Route } from 'react-router-dom';\r\n\r\nimport { getApiManager } from '../user/authService';\r\nimport { getStorage } from '../authentication/localStorage.js';\r\nimport Loading from '../components/Loading';\r\nimport RedirectToLogin from '../components/RedirectToLogin';\r\nimport Monitor from '../components/Monitor';\r\nimport AppThemeProvider from './AppThemeProvider'\r\n\r\nexport default ({ component: Component, ...rest }) => {\r\n const [auth, setAuth] = useState(false)\r\n const [loading, setLoading] = useState(true)\r\n const [isInternal, setIsInternal] = useState(false)\r\n useEffect(() => {\r\n const checkAuth = async () => {\r\n const apiManager = await getApiManager();\r\n const storage = getStorage();\r\n setIsInternal(parseInt(storage?.invoicerAccountId) === 0);\r\n setAuth(apiManager !== undefined);\r\n setLoading(false);\r\n }\r\n checkAuth();\r\n }, []);\r\n\r\n if (loading) {\r\n return \r\n } else if (isInternal) {\r\n return \r\n }\r\n return (\r\n \r\n auth ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport AppThemeProvider from './AppThemeProvider'\r\n\r\nexport default ({ component: Component, ...rest }) => {\r\n return (\r\n (\r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\n","export const drawerWidth = 232;\r\nexport const logoHeight = 133;\r\nexport const drawerClass = (theme) => ({\r\n drawer: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n backgroundColor: theme.palette.secondary.main\r\n }\r\n});\r\n","import React from 'react'\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nexport default (props) => {\r\n const { onEnterPress, ...rest } = props;\r\n return (\r\n {\r\n if (event.key === 'Enter') {\r\n onEnterPress(event);\r\n }\r\n }}\r\n { ...rest }\r\n />\r\n )\r\n}","import React, { useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport TextFieldWithOnEnterAction from './TextFieldWithOnEnterAction'\r\n\r\nexport default (props) => {\r\n const { onLoginSuccess, loginWorkflow, classes } = props;\r\n const [isAuthenticating, setIsAuthenticating] = useState(false);\r\n const [authenticationFailed, setAuthenticationFailed] = useState(false);\r\n const [username, setUsername] = useState(props.username ?? '');\r\n const [password, setPassword] = useState('');\r\n const disableUserName = (props.username !== undefined);\r\n\r\n const loginHandler = () => {\r\n setIsAuthenticating(true);\r\n setAuthenticationFailed(false);\r\n\r\n const onSuccess = () => {\r\n onLoginSuccess();\r\n }\r\n const onFail = () => {\r\n setIsAuthenticating(false);\r\n setAuthenticationFailed(true);\r\n }\r\n\r\n loginWorkflow(username, password, onSuccess, onFail);\r\n };\r\n\r\n const usernameChangeHandler = (event) => {\r\n setUsername(event.target.value);\r\n };\r\n\r\n const passwordChangeHandler = (event) => {\r\n setPassword(event.target.value);\r\n };\r\n\r\n return (\r\n \r\n usernameChangeHandler(event)}\r\n />\r\n passwordChangeHandler(event)}\r\n onEnterPress={loginHandler}\r\n />\r\n \r\n Log In\r\n \r\n {/* TODO: need CSS on these */}\r\n { isAuthenticating && }\r\n { authenticationFailed &&
Username and/or Password is not correct
}\r\n
\r\n )\r\n}","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetAccount extends CustomerPortalApiCall {\r\n apiCall(accountId, options) {\r\n return this.apiManager.account.single(accountId)\r\n }\r\n}\r\n\r\nconst getAccount = (accountId, options) => new GetAccount().execute(accountId, options);\r\n\r\ngetAccount.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n accountStatusTypeId: PropTypes.number.isRequired,\r\n accountStatusTypeName: PropTypes.string.isRequired,\r\n accountTypeId: PropTypes.number.isRequired,\r\n accountTypeName: PropTypes.string.isRequired,\r\n accountsReceivableTermsId: PropTypes.number.isRequired,\r\n accountsReceivableTermsName: PropTypes.string.isRequired,\r\n actingOwnerId: PropTypes.number.isRequired,\r\n actingOwnerName: PropTypes.string.isRequired,\r\n billDay: PropTypes.number,\r\n billGroupId: PropTypes.number,\r\n billGroupName: PropTypes.string,\r\n created: PropTypes.string.isRequired,\r\n createdByUserId: PropTypes.number.isRequired,\r\n createdByUserName: PropTypes.string.isRequired,\r\n currencyCode: PropTypes.string.isRequired,\r\n currencyId: PropTypes.number.isRequired,\r\n currencyName: PropTypes.string.isRequired,\r\n extensions: PropTypes.object,\r\n invoiceDeliveryId: PropTypes.number,\r\n invoiceDeliveryName: PropTypes.string,\r\n invoicerAccountId: PropTypes.number,\r\n invoicerAccountName: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n taxSettingAccountId: PropTypes.number,\r\n taxSettingAccountName: PropTypes.string,\r\n usageBillDay: PropTypes.number,\r\n usageInvoicerAccountId: PropTypes.number,\r\n usageInvoicerAccountName: PropTypes.string,\r\n};\r\n\r\nexport default getAccount;","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetAccountSummary extends CustomerPortalApiCall {\r\n apiCall(accountId, options) {\r\n return this.apiManager.accountSummary.first({\r\n filters: [{ name: 'accountId', value: accountId }]\r\n });\r\n }\r\n}\r\n\r\nconst getAccountSummary = (accountId, options) => new GetAccountSummary().execute(accountId, options);\r\n\r\ngetAccountSummary.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n accountId: PropTypes.number.isRequired,\r\n accountName: PropTypes.string.isRequired,\r\n balance: PropTypes.number.isRequired,\r\n balanceDue: PropTypes.number.isRequired,\r\n charge: PropTypes.number.isRequired,\r\n credit: PropTypes.number.isRequired,\r\n discount: PropTypes.number.isRequired,\r\n payment: PropTypes.number.isRequired,\r\n tax: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default getAccountSummary;","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetInvoices extends CustomerPortalApiCall {\r\n apiCall(accountId, options) {\r\n // for all cases exclude if not sent\r\n let filters = [\r\n { name: 'accountId', value: accountId },\r\n {\"name\": \"sent\", \"operator\": \"isNotNull\"}\r\n ];\r\n let pagedOptions = {};\r\n let searchRequest = {};\r\n if (options !== undefined) {\r\n if (Array.isArray(options.filters)) {\r\n filters = filters.concat(options.filters)\r\n } else if (typeof options.filters === 'object') {\r\n filters.push(options.filters);\r\n }\r\n if (options.readRequest !== undefined) {\r\n pagedOptions.readRequest = options.ReadRequest;\r\n }\r\n if (options.order !== undefined && options.orderBy !== undefined) {\r\n searchRequest.orderBy = [{ name: options.orderBy, direction: options.order }]\r\n }\r\n }\r\n searchRequest.filters = filters;\r\n\r\n return this.apiManager.invoice.paged(\r\n options.pageNumber,\r\n options.pageSize,\r\n searchRequest,\r\n pagedOptions\r\n )\r\n }\r\n}\r\n\r\n// comment the following line and uncomment the following code to get a full list of invoices - useful for pagination\r\nconst getInvoices = (accountId, options) => new GetInvoices().execute(accountId, options);\r\n\r\n// const invoices = {\r\n// \"totalCount\": 19,\r\n// \"items\": [\r\n// {\r\n// \"identity\": 18336,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18336\",\r\n// \"date\": \"2020-02-06T22:14:43Z\",\r\n// \"due\": \"2020-02-27T22:14:43Z\",\r\n// \"invoiceStatusTypeId\": 5,\r\n// \"invoiceStatusTypeName\": \"Posted\",\r\n// \"processed\": \"2020-02-06T22:14:57Z\",\r\n// \"billRunHistoryId\": 1,\r\n// \"billRunHistoryName\": \"test\",\r\n// \"previousBalance\": 0,\r\n// \"balance\": 20.73,\r\n// \"created\": \"2017-06-01T00:00:00Z\",\r\n// \"closed\": \"2017-06-01T00:00:00Z\",\r\n// \"total\": 22.49375205481,\r\n// \"totalCharge\": 20.81624657534,\r\n// \"totalTax\": 2.9724369863,\r\n// \"totalDiscount\": 0,\r\n// \"totalPaymentApplied\": 0,\r\n// \"totalCreditApplied\": -0.09,\r\n// \"totalPaymentAttached\": 10.05,\r\n// \"totalCreditAttached\": -1.12602739726,\r\n// \"baseTotal\": 22.49375205481,\r\n// \"baseTotalCharge\": 20.81624657534,\r\n// \"baseTotalDiscount\": 0,\r\n// \"baseTotalPaymentApplied\": 0,\r\n// \"baseTotalCreditApplied\": -0.09,\r\n// \"baseTotalPaymentAttached\": 10.05,\r\n// \"baseTotalCreditAttached\": -1.12602739726,\r\n// \"baseBalance\": 20.73,\r\n// \"baseTotalTax\": 2.9724369863,\r\n// \"basePreviousBalance\": 0,\r\n// \"isVoid\": false,\r\n// \"isVoiding\": false,\r\n// \"doNotDeliver\": false\r\n// },\r\n// {\r\n// \"identity\": 18337,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18337\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 74.86,\r\n// \"total\": 54.664701951,\r\n// \"totalCharge\": 47.834253325,\r\n// \"totalTax\": 6.830448626,\r\n// },\r\n// {\r\n// \"identity\": 18338,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18338\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 75.86,\r\n// \"total\": 55.764701951,\r\n// \"totalCharge\": 48.834253325,\r\n// \"totalTax\": 6.930448626,\r\n// },\r\n// {\r\n// \"identity\": 18339,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18339\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 76.86,\r\n// \"total\": 56.864701951,\r\n// \"totalCharge\": 49.834253325,\r\n// \"totalTax\": 7.030448626,\r\n// },\r\n// {\r\n// \"identity\": 18340,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18340\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 77.86,\r\n// \"total\": 57.964701951,\r\n// \"totalCharge\": 50.834253325,\r\n// \"totalTax\": 7.130448626,\r\n// },\r\n// {\r\n// \"identity\": 18341,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18341\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 78.86,\r\n// \"total\": 58.864701951,\r\n// \"totalCharge\": 51.834253325,\r\n// \"totalTax\": 7.230448626,\r\n// },\r\n// {\r\n// \"identity\": 18342,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18342\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 79.86,\r\n// \"total\": 59.764701951,\r\n// \"totalCharge\": 52.834253325,\r\n// \"totalTax\": 7.330448626,\r\n// },\r\n// {\r\n// \"identity\": 18343,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18343\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 80.86,\r\n// \"total\": 60.664701951,\r\n// \"totalCharge\": 53.834253325,\r\n// \"totalTax\": 7.430448626,\r\n// },\r\n// {\r\n// \"identity\": 18344,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18344\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 81.86,\r\n// \"total\": 61.564701951,\r\n// \"totalCharge\": 54.834253325,\r\n// \"totalTax\": 7.530448626,\r\n// },\r\n// {\r\n// \"identity\": 18345,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18345\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 82.86,\r\n// \"total\": 62.464701951,\r\n// \"totalCharge\": 55.834253325,\r\n// \"totalTax\": 7.630448626,\r\n// },\r\n// {\r\n// \"identity\": 18346,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18346\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 83.86,\r\n// \"total\": 63.364701951,\r\n// \"totalCharge\": 56.834253325,\r\n// \"totalTax\": 7.730448626,\r\n// }, {\r\n// \"identity\": 18347,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18347\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 84.86,\r\n// \"total\": 64.264701951,\r\n// \"totalCharge\": 57.834253325,\r\n// \"totalTax\": 7.830448626,\r\n// }, {\r\n// \"identity\": 18348,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18348\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 85.86,\r\n// \"total\": 65.164701951,\r\n// \"totalCharge\": 58.834253325,\r\n// \"totalTax\": 7.930448626,\r\n// }, {\r\n// \"identity\": 18349,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18349\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 86.86,\r\n// \"total\": 66.064701951,\r\n// \"totalCharge\": 59.834253325,\r\n// \"totalTax\": 8.030448626,\r\n// },\r\n// {\r\n// \"identity\": 18350,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18350\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 87.86,\r\n// \"total\": 67.164701951,\r\n// \"totalCharge\": 60.834253325,\r\n// \"totalTax\": 8.130448626,\r\n// },\r\n// {\r\n// \"identity\": 18351,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18351\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 88.86,\r\n// \"total\": 68.264701951,\r\n// \"totalCharge\": 61.834253325,\r\n// \"totalTax\": 8.230448626,\r\n// },\r\n// {\r\n// \"identity\": 18352,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18352\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 89.86,\r\n// \"total\": 69.364701951,\r\n// \"totalCharge\": 62.834253325,\r\n// \"totalTax\": 8.330448626,\r\n// },\r\n// {\r\n// \"identity\": 18353,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18353\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 90.86,\r\n// \"total\": 70.464701951,\r\n// \"totalCharge\": 63.834253325,\r\n// \"totalTax\": 8.430448626,\r\n// },\r\n// {\r\n// \"identity\": 18354,\r\n// \"accountId\": 10000000,\r\n// \"accountName\": \"Anthem Records\",\r\n// \"name\": \"18354\",\r\n// \"date\": \"2020-03-06T22:14:43Z\",\r\n// \"due\": \"2020-03-27T22:14:43Z\",\r\n// \"balance\": 91.86,\r\n// \"total\": 71.564701951,\r\n// \"totalCharge\": 64.834253325,\r\n// \"totalTax\": 8.530448626,\r\n// },\r\n// ]\r\n// };\r\n\r\n// function dynamicSort(property, isAsc) {\r\n// var sortOrder = isAsc ? 1 : -1;\r\n// return function (a,b) {\r\n// /* next line works with strings and numbers */\r\n// var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\r\n// return result * sortOrder;\r\n// }\r\n// }\r\n\r\n// const getInvoices = (accountId, options) => {\r\n// let filters = [{ name: 'accountId', value: accountId }];\r\n// let pagedOptions = {};\r\n// let orderBy;\r\n// if (options !== undefined) {\r\n// if (Array.isArray(options.filters)) {\r\n// filters = filters.concat(options.filters)\r\n// } else if (typeof options.filters === 'object') {\r\n// filters.push(options.filters);\r\n// }\r\n// if (options.readRequest !== undefined) {\r\n// pagedOptions.readRequest = options.ReadRequest;\r\n// }\r\n// if (options.order !== undefined && options.orderBy !== undefined) {\r\n// orderBy = { name: options.orderBy, direction: options.order };\r\n// }\r\n// }\r\n//\r\n// const start = (options.pageNumber - 1) * options.pageSize;\r\n// const end = options.pageNumber * options.pageSize;\r\n// return Promise.resolve(\r\n// Object.assign(\r\n// {},\r\n// invoices,\r\n// {\r\n// items: orderBy\r\n// ? invoices.items.slice(start, end).sort(dynamicSort(orderBy.name, orderBy.direction === 'asc'))\r\n// : invoices.items.slice(start, end)\r\n// }\r\n// )\r\n// );\r\n// }\r\n\r\ngetInvoices.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n date: PropTypes.string.isRequired,\r\n due: PropTypes.number.isRequired,\r\n totalCharge: PropTypes.number.isRequired,\r\n totalTax: PropTypes.number.isRequired,\r\n total: PropTypes.number.isRequired,\r\n balance: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default getInvoices;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall'\r\n\r\nclass GetInvoiceRender extends CustomerPortalApiCall {\r\n apiCall(invoiceId) {\r\n return this.apiManager.getInvoiceRender(invoiceId);\r\n }\r\n}\r\n\r\nconst getInvoiceRender = (invoiceId) => new GetInvoiceRender().execute(invoiceId);\r\n\r\ngetInvoiceRender.propTypes = {\r\n pdf: PropTypes.string,\r\n link: PropTypes.string,\r\n invoiceName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getInvoiceRender;","import { dateHelpers } from '@lb/utils/helpers';\r\nimport dayjs from '../assets/dayjsPlugins.js';\r\nimport { getLocaleIdentifier } from './getInfoFromCurrentUser.js';\r\n\r\nconst defaultTimeFormat = 'h:mm A';\r\n\r\nfunction dateHelperSetup(localeDateFormat, localeDateTimeFormat) {\r\n const uiDateHelper = dateHelpers;\r\n\r\n uiDateHelper.dbToUIDateTimeConvert = function(strDateTime, showDateOnly) {\r\n if (showDateOnly) {\r\n return this.dayjs(strDateTime, this.formats.dbDateTimeFormat).format(localeDateFormat);\r\n }\r\n const currDate = this.dayjs.utc(strDateTime, this.formats.dbDateTimeFormat).local();\r\n return this.dayjs(currDate).format(localeDateTimeFormat);\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.isoToUIDateTimeConvert = function(isoDateTime, showDateOnly) {\r\n if (isoDateTime === '') return undefined;\r\n const dateFormat = (showDateOnly) ? localeDateFormat : localeDateTimeFormat;\r\n const currDate = this.dayjs.utc(isoDateTime, this.formats.isoDateTimeFormat).local();\r\n return (currDate.isValid())\r\n ? this.dayjs(currDate).format(dateFormat) : isoDateTime;\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.isoToUIDateConvert = function(isoDate) {\r\n if (isoDate === '') return undefined;\r\n const currDate = this.dayjs(isoDate, this.formats.isoDateFormat);\r\n return (currDate.isValid()) ? currDate.format(localeDateFormat) : isoDate;\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.uiToDayjsConvert = function(strDateTime) {\r\n if (strDateTime === undefined || strDateTime === '') return '';\r\n return this.dayjs(strDateTime, [localeDateTimeFormat, localeDateFormat], true);\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.uiToISODateTimeConvert = function(strDateTime) {\r\n if (strDateTime === undefined || strDateTime === '') return '';\r\n const currDate = this.dayjs(strDateTime, localeDateTimeFormat, true);\r\n return (currDate.isValid())\r\n ? currDate.utc().format(this.formats.isoDateTimeFormat) : strDateTime;\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.uiToISODateConvert = function(strDateTime) {\r\n if (strDateTime === undefined || strDateTime === '') return '';\r\n const currDate = this.dayjs(strDateTime, localeDateFormat, true);\r\n return (currDate.isValid())\r\n ? currDate.format(this.formats.isoDateFormat) : strDateTime;\r\n }.bind(uiDateHelper);\r\n\r\n uiDateHelper.uiNow = function(showDateOnly) {\r\n const dateFormat = (showDateOnly) ? localeDateFormat : localeDateTimeFormat;\r\n return this.dayjs.utc().format(dateFormat);\r\n }.bind(uiDateHelper);\r\n\r\n // Converts a UI date to a dateTime starting at 12AM\r\n uiDateHelper.uiDateToDateTimeConvert = function(strDate) {\r\n if (strDate === undefined || strDate === '') return '';\r\n return this.dayjs(strDate, localeDateFormat).format(localeDateTimeFormat);\r\n }.bind(uiDateHelper);\r\n\r\n // Checks for Valid date\r\n uiDateHelper.isUIDateValid = function (date) {\r\n return this.dayjs(date, localeDateFormat).isValid();\r\n }.bind(uiDateHelper);\r\n\r\n // Does not use directly, but calls into uiToISODateConvert\r\n uiDateHelper.isUIDateValid = function(uiDate, minDate, maxDate) {\r\n // Dates outside this range are considered invalid and should match our default component restrictions\r\n const min = this.dayjs(minDate).format(this.formats.isoDateFormat);\r\n const max = this.dayjs(maxDate).format(this.formats.isoDateFormat);\r\n const isoDate = this.uiToISODateConvert(uiDate);\r\n return this.isISODateValid(isoDate)\r\n && this.isoComparisonFn(isoDate, min, true) >= 0\r\n && this.isoComparisonFn(max, isoDate, true) >= 0;\r\n }.bind(uiDateHelper);\r\n\r\n return uiDateHelper;\r\n}\r\n\r\nconst dateFormat = async () => {\r\n const localeInfo = await getLocaleIdentifier();\r\n dayjs.locale(localeInfo);\r\n const dateFormat = dayjs.localeData().longDateFormat('L');\r\n const timeFormat = `${dateFormat} ${defaultTimeFormat}`;\r\n return dateHelperSetup(dateFormat, timeFormat);\r\n};\r\nexport default dateFormat;\r\n","import { getLocaleIdentifier } from './getInfoFromCurrentUser.js';\r\n\r\nconst defaultCurrency = 'USD';\r\nconst defaultLocale = 'en-US';\r\n\r\nlet numberFormat = undefined;\r\n\r\nexport const getNumberFormat = async () => {\r\n if (numberFormat === undefined) {\r\n let locale = await getLocaleIdentifier();\r\n if (locale === undefined) {\r\n console.debug(`Attempting to retrieve a number formatter, but could not retrieve a locale for the current user, defaulting to ${defaultLocale}`)\r\n locale = defaultLocale;\r\n }\r\n numberFormat = new Intl.NumberFormat(locale);\r\n }\r\n return numberFormat;\r\n};\r\n\r\nexport const getCurrencyFormat = async (currency) => {\r\n let selectedCurrency = currency;\r\n if (selectedCurrency === undefined) {\r\n console.debug(`Attempting to retrieve a currency formatter without specifying a currency, defaulting to ${defaultCurrency}`);\r\n selectedCurrency = defaultCurrency;\r\n }\r\n let locale = await getLocaleIdentifier();\r\n if (locale === undefined) {\r\n console.debug(`Attempting to retrieve a currency formatter, but could not retrieve a locale for the current user, defaulting to ${defaultLocale}`)\r\n locale = defaultLocale;\r\n }\r\n let formatter = new Intl.NumberFormat(locale, { \r\n style: 'decimal', \r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n });\r\n return { \r\n format: (number) => {\r\n //Ensure currency always appears at the front, regardless of locale information (fr-CA would have currency at the end of the string)\r\n return `${selectedCurrency} ${formatter.format(number)}`\r\n }\r\n }\r\n};\r\n\r\nexport const guid = () => {\r\n const guidS4 = () => {\r\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n }\r\n return (guidS4() + guidS4() + '-' + guidS4() + '-' + guidS4() + '-' + guidS4() + '-' + guidS4() + guidS4() + guidS4());\r\n}","export const portalConfigTransform = (data) => {\r\n const defaultOwnerConfig = {\r\n 'allowPayments': false,\r\n 'allowPaymentMethodCreation': false,\r\n 'allowPaymentMethodUpdate': false,\r\n 'allowPaymentProductCancellation': false\r\n };\r\n return Object.assign(defaultOwnerConfig, data);\r\n};\r\n\r\nexport const invoiceTransform = (item) => {\r\n return {\r\n id: item.identity,\r\n uid: item.identity,\r\n name: item.name,\r\n balance: item.balance,\r\n col1: item.name,\r\n col2: item.date,\r\n col3: item.due,\r\n col4: item.totalCharge,\r\n col5: item.totalTax,\r\n col6: item.total,\r\n col7: item.balance,\r\n col8: item.identity,\r\n };\r\n};","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport Grid from '@material-ui/core/Grid'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport Menu from '@material-ui/core/Menu'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Typography'\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport { refreshToken } from '../user/authService'\r\n\r\nconst styles = (theme) => ({\r\n changeAccountButton: {\r\n fontSize: '14px',\r\n textDecoration: 'underline', \r\n cursor: 'pointer',\r\n },\r\n grid: {\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n }\r\n});\r\n\r\nfunction ChangeAccount(props) {\r\n const { classes, invoicerAccounts, setCurrentAccount, text, buttonClass } = props;\r\n const [accountFilter, setAccountFilter] = React.useState('');\r\n const [anchorChangeAccount, setAnchorChangeAccount] = React.useState(null);\r\n \r\n if (!Array.isArray(invoicerAccounts) || invoicerAccounts.length <= 1) {\r\n return false;\r\n }\r\n\r\n const openChangeAccount = Boolean(anchorChangeAccount);\r\n const filteredAccounts = invoicerAccounts.filter((account) => {\r\n return (\r\n accountFilter === undefined ||\r\n accountFilter.trim() === '' ||\r\n account.name.toLowerCase().startsWith(accountFilter.toLowerCase())\r\n )\r\n })\r\n\r\n const handleChangeAccountClose = () => {\r\n setAnchorChangeAccount(null);\r\n };\r\n\r\n const handleAccountFilterChange = (event) => {\r\n setAccountFilter(event.currentTarget.value);\r\n }\r\n\r\n const handleChangeAccountMenu = (event) => {\r\n setAnchorChangeAccount(event.currentTarget);\r\n };\r\n \r\n const handleAccountChange = async (account) => {\r\n await refreshToken(account.uid);\r\n setCurrentAccount(account);\r\n setAccountFilter('');\r\n handleChangeAccountClose();\r\n }\r\n\r\n let buttonClassName = classes.changeAccountButton;\r\n if (buttonClass !== undefined) {\r\n buttonClassName = clsx(buttonClassName, buttonClass);\r\n }\r\n return (\r\n \r\n \r\n {text}\r\n \r\n e.preventDefault()}\r\n onClose={handleChangeAccountClose}\r\n variant='selectedMenu'\r\n >\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n \r\n \r\n \r\n {\r\n filteredAccounts.map((account) => (\r\n handleAccountChange(account)}\r\n >\r\n \r\n\r\n {account.name}\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(ChangeAccount);","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from '@material-ui/core';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport Header from '../components/Header';\r\nimport ChangeAccount from '../components/ChangeAccount';\r\n\r\nconst styles = (theme) => ({\r\n changeAccount: {\r\n display: 'inline',\r\n }\r\n})\r\n\r\nfunction EmptyListMessage(props) {\r\n const {classes, ...rest} = props;\r\n const {screenId, headerLabel, entityName, invoicerAccounts} = rest;\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n This account currently does not have any {entityName}.\r\n {\r\n Array.isArray(invoicerAccounts) && invoicerAccounts.length > 1 &&\r\n {'Please select a '}\r\n \r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nEmptyListMessage.propTypes = {\r\n entityName: PropTypes.string.isRequired,\r\n headerLabel: PropTypes.string.isRequired,\r\n screenId: PropTypes.string.isRequired,\r\n invoicerAccounts: PropTypes.array,\r\n};\r\n\r\nexport default withStyles(styles)(EmptyListMessage);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {withStyles} from '@material-ui/core';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\n\r\nconst style = (theme) => ({\r\n root: {\r\n padding: theme.spacing(1),\r\n textAlign: 'center',\r\n '&:last-child': {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n})\r\n\r\nfunction InvoiceCard(props) {\r\n const { classes, amount, label, amountId, labelId } = props;\r\n const matches = useMediaQuery('(min-height:500px)');\r\n\r\n return (\r\n \r\n \r\n {\r\n matches ?\r\n <>\r\n \r\n {label}\r\n \r\n \r\n {amount}\r\n \r\n \r\n :\r\n \r\n {label}: {amount}\r\n \r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nInvoiceCard.propTypes = {\r\n amount: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default withStyles(style)(InvoiceCard);","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetPaymentMethods extends CustomerPortalApiCall {\r\n apiCall(accountId, searchRequest) {\r\n if (searchRequest === undefined) {\r\n searchRequest = { filters: [] }\r\n }\r\n\r\n searchRequest.filters.push(\r\n { name: 'accountId', value: accountId }\r\n );\r\n return this.apiManager.paymentMethod.all(searchRequest);\r\n }\r\n}\r\n\r\nconst getPaymentMethods = (accountId, searchRequest) => new GetPaymentMethods().execute(accountId, searchRequest);\r\ngetPaymentMethods.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n paymentMethodIdentifier: PropTypes.string.isRequired,\r\n isActive: PropTypes.bool.isRequired,\r\n}\r\nexport default getPaymentMethods;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetPaymentType extends CustomerPortalApiCall {\r\n apiCall(id) {\r\n return this.apiManager.paymentType.single(id);\r\n }\r\n}\r\n\r\nclass GetAllPaymentTypes extends CustomerPortalApiCall {\r\n apiCall() {\r\n return this.apiManager.paymentType.all();\r\n }\r\n}\r\n\r\nexport const getAllPaymentTypes = () => new GetAllPaymentTypes().execute();\r\n\r\nexport const getPaymentType = (id) => new GetPaymentType().execute(id);\r\n\r\ngetPaymentType.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n vendorCardName: PropTypes.string.isRequired,\r\n paymentBaseTypeId: PropTypes.number.isRequired,\r\n paymentBaseTypeName: PropTypes.string.isRequired,\r\n paymentTypeDisbursementTypeId: PropTypes.number.isRequired,\r\n paymentTypeDisbursementTypeName: PropTypes.string.isRequired,\r\n isActive: PropTypes.bool.isRequired,\r\n paymentGatewayId: PropTypes.number,\r\n paymentGatewayName: PropTypes.string,\r\n cardTypeId: PropTypes.number,\r\n cardTypeName: PropTypes.string,\r\n};\r\n\r\ngetAllPaymentTypes.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n vendorCardName: PropTypes.string.isRequired,\r\n paymentBaseTypeId: PropTypes.number.isRequired,\r\n paymentBaseTypeName: PropTypes.string.isRequired,\r\n paymentTypeDisbursementTypeId: PropTypes.number.isRequired,\r\n paymentTypeDisbursementTypeName: PropTypes.string.isRequired,\r\n isActive: PropTypes.bool.isRequired,\r\n paymentGatewayId: PropTypes.number,\r\n paymentGatewayName: PropTypes.string,\r\n cardTypeId: PropTypes.number,\r\n cardTypeName: PropTypes.string,\r\n};\r\n\r\n","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetCardType extends CustomerPortalApiCall {\r\n apiCall(id) {\r\n return this.apiManager.cardType.single(id);\r\n }\r\n}\r\n\r\nconst getCardType = (id) => new GetCardType().execute(id);\r\n\r\ngetCardType.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n vendorCardName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getCardType;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetPaymentConfiguration extends CustomerPortalApiCall {\r\n apiCall() {\r\n return this.apiManager.paymentConfiguration.all();\r\n }\r\n}\r\n\r\nconst getPaymentConfiguration = () => new GetPaymentConfiguration().execute();\r\n\r\ngetPaymentConfiguration.propTypes = {\r\n environmentKey: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getPaymentConfiguration;","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostPayment extends CustomerPortalApiCall {\r\n apiCall(data) {\r\n return this.apiManager.payment.create(data);\r\n }\r\n}\r\n\r\nconst postPayment = (data) => new PostPayment().execute(data);\r\n\r\nexport default postPayment;","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostPaymentOneTimeBankAccount extends CustomerPortalApiCall {\r\n apiCall(data) {\r\n let postBody = {\r\n accountId: data.accountId,\r\n amount: data.amount,\r\n accountNumber: data.accountNumber,\r\n routingNumber: data.routingNumber,\r\n firstName: data.firstName,\r\n lastName: data.lastName,\r\n posting: data.posting,\r\n automaticDisburse: true,\r\n }\r\n if (data.savePaymentMethod === true) {\r\n postBody.savePaymentMethod = data.savePaymentMethod;\r\n postBody.name = data.paymentMethodName;\r\n }\r\n return this.apiManager.paymentOneTimeBankAccount.create(postBody);\r\n }\r\n}\r\n\r\nconst postPaymentOneTimeBankAccount = (data) => new PostPaymentOneTimeBankAccount().execute(data);\r\n\r\nexport default postPaymentOneTimeBankAccount;","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostPaymentOneTimeCreditCard extends CustomerPortalApiCall {\r\n apiCall(data) {\r\n let postBody = {\r\n accountId: data.accountId,\r\n amount: data.amount,\r\n date: data.date,\r\n paymentMethodToken: data.paymentMethodToken,\r\n posting: data.posting,\r\n automaticDisburse: true,\r\n }\r\n if (data.savePaymentMethod === true) {\r\n postBody.savePaymentMethod = data.savePaymentMethod;\r\n postBody.name = data.paymentMethodName;\r\n }\r\n return this.apiManager.paymentOneTimeCreditCard.create(postBody);\r\n }\r\n}\r\n\r\nconst postPaymentOneTimeCreditCard = (data) => new PostPaymentOneTimeCreditCard().execute(data);\r\n\r\nexport default postPaymentOneTimeCreditCard;","import React, { useEffect } from 'react';\r\nimport clsx from 'clsx'\r\n\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport CancelIcon from '@material-ui/icons/Cancel';\r\nimport { CircularProgress, Typography } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dialogTitle: {\r\n textAlign: 'center',\r\n },\r\n content: {\r\n textAlign: 'center',\r\n },\r\n icon: {\r\n fontSize: 60,\r\n },\r\n successIcon: {\r\n color: 'green',\r\n },\r\n failedIcon: {\r\n color: 'red',\r\n },\r\n message: {\r\n color: 'rgb(0,0,0,0.65)',\r\n fontWeight: 700\r\n },\r\n}));\r\n\r\nconst buildErrorMessage = (err) => {\r\n const defaultMessage = '';\r\n if (err === undefined) return defaultMessage;\r\n if (err.response !== undefined && err.response.data !== undefined && Array.isArray(err.response.data.errors)) {\r\n var errorMessages = err.response.data.errors.map((e) => e.message);\r\n return errorMessages.join(' ');\r\n }\r\n if (err.message !== undefined) { \r\n return err.message;\r\n }\r\n\r\n return defaultMessage;\r\n}\r\n\r\nconst getTrackingId = (err) => {\r\n return (\r\n err !== undefined && \r\n err.response !== undefined && \r\n err.response.data !== undefined && \r\n err.response.data.trackingId !== undefined\r\n ) ? err.response.data.trackingId : '';\r\n}\r\n\r\nexport default function ProcessingDialog(props) {\r\n let {\r\n apiCall,\r\n successMessage,\r\n failedMessage,\r\n onClose,\r\n message,\r\n } = props;\r\n\r\n const [isLoading, setIsLoading] = React.useState(true);\r\n const [isSuccess, setIsSuccess] = React.useState(false);\r\n const [errorMessage, setErrorMessage] = React.useState('');\r\n const [trackingId, setTrackingId] = React.useState('');\r\n if (message === undefined || message === null) {\r\n message = '';\r\n }\r\n\r\n useEffect(() => {\r\n apiCall.then((results) => {\r\n setIsSuccess(true);\r\n return Promise.resolve(results)\r\n }).catch((err) => {\r\n setIsSuccess(false);\r\n console.warn(err);\r\n setErrorMessage(buildErrorMessage(err));\r\n setTrackingId(getTrackingId(err));\r\n return Promise.reject(err);\r\n }).finally(() => {\r\n setIsLoading(false);\r\n })\r\n }, [apiCall]);\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n {\r\n isLoading ? undefined : <>\r\n {\r\n isSuccess \r\n ? \r\n : \r\n }\r\n {isSuccess ? successMessage : failedMessage}\r\n \r\n }\r\n \r\n \r\n {\r\n isLoading ? :<>\r\n { errorMessage.length > 0 && {errorMessage} }\r\n { trackingId.length > 0 && Tracking Identifier: {trackingId} }\r\n { message.length > 0 && {message}}\r\n \r\n }\r\n \r\n \r\n {\r\n !isLoading && \r\n }\r\n \r\n \r\n )\r\n}","import React, { useEffect, useCallback, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Material Components\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Button from '@material-ui/core/Button';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Hidden from '@material-ui/core/Hidden'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport CloseIcon from '@material-ui/icons/Close'\r\n\r\n//Helpers\r\nimport { DataEnums } from '@lb/utils/enums';\r\nimport { getCurrentOwnerCustomerPortalSettings } from '../helpers/getInfoFromCurrentUser'\r\n\r\n// API Components\r\nimport { dateHelpers, accounting } from '@lb/utils/helpers';\r\nimport getPaymentMethods from '../api/getPaymentMethods';\r\nimport { getPaymentType } from '../api/getPaymentType';\r\nimport getCardType from '../api/getCardType';\r\nimport getPaymentConfiguration from '../api/getPaymentConfiguration';\r\nimport postPayment from '../api/postPayment';\r\nimport getInvoices from '../api/getInvoices';\r\nimport postPaymentOneTimeBankAccount from '../api/postPaymentOneTimeBankAccount';\r\nimport postPaymentOneTimeCreditCard from '../api/postPaymentOneTimeCreditCard';\r\nimport ProcessingDialog from 'components/ProcessingDialog';\r\n\r\n// Component Functions and Variables\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n formControl: {\r\n margin: theme.spacing(1)\r\n },\r\n spreedlyInput: {\r\n borderBottom: '1px',\r\n height: '48px',\r\n },\r\n newPaymentMethod: {\r\n borderTop: '1px solid',\r\n },\r\n}));\r\n\r\nconst currencyAmountValidator = new RegExp(/^(?:\\d{1,3},)*(?:\\d{3},)*\\d{3}(?:\\.\\d{1,2})?$|^\\d+(?:\\.\\d{1,2})?$/);\r\nconst PaymentMethodTypeEnum = { NONE: 0, CREDIT_CARD: 1, ACH: 2 };\r\nconst PaymentBaseTypeEnum = DataEnums.PaymentBaseTypeEnum;\r\nconst PaymentMethodEnum = { NONE: 0, NEW: -1 }\r\nconst currentYear = new Date().getFullYear();\r\n\r\n// Export Spreedly Functions\r\nexport const initializeSpreedly = (gatewayToken) => {\r\n const Spreedly = window.Spreedly;\r\n Spreedly.init(\r\n gatewayToken,\r\n {\r\n 'numberEl': 'spreedly-credit',\r\n 'cvvEl': 'spreedly-cvv'\r\n }\r\n )\r\n};\r\n\r\nexport const defaultSpreedlySetup = (onReadyCB, onErrorCB, fieldEventCB, validationCB) => {\r\n if (typeof window.Spreedly !== 'object') {\r\n return console.warn('Resource - Spreedly Unavailable');\r\n }\r\n const Spreedly = window.Spreedly;\r\n Spreedly.on('ready', onReadyCB);\r\n Spreedly.on('errors', onErrorCB);\r\n Spreedly.on('fieldEvent', fieldEventCB);\r\n Spreedly.on('validation', validationCB);\r\n};\r\n\r\nexport const createCSSText = (styleObj) => {\r\n if (!styleObj || typeof styleObj !== 'object' || Array.isArray(styleObj)) {\r\n throw new TypeError(`expected an argument of type object, but got ${typeof styleObj}`);\r\n }\r\n const elements = Object.keys(styleObj).map(property => `${property}: ${styleObj[property]};`);\r\n return elements.join(' ');\r\n};\r\n\r\n// Transform Functions\r\nconst paymentMethodTransform = (item) => {\r\n let digitsReg = item.paymentMethodIdentifier.match(/\\d{4}/);\r\n let lastDigits = (digitsReg === null) ? '0000' : digitsReg[0];\r\n return {\r\n uid: item.identity,\r\n name: item.name,\r\n paymentTypeId: item.paymentTypeId,\r\n paymentTypeName: item.paymentTypeName,\r\n accountId: item.accountId,\r\n accountName: item.accountName,\r\n description: item.description,\r\n paymentMethodToken: item.paymentMethodToken,\r\n paymentMethodIdentifier: lastDigits,\r\n isActive: item.isActive,\r\n autopay: item.autopay,\r\n };\r\n};\r\nconst paymentTypeTransform = (item) => {\r\n return {\r\n uid: item.identity,\r\n name: item.name,\r\n paymentBaseTypeId: item.paymentBaseTypeId,\r\n paymentBaseTypeName: item.paymentBaseTypeName,\r\n cardTypeId: item.cardTypeId,\r\n cardTypeName: item.cardTypeName,\r\n isActive: item.isActive,\r\n };\r\n};\r\nconst cardTypeTransform = (item) => {\r\n return {\r\n uid: item.identity,\r\n name: item.name,\r\n vendorCardName: item.vendorCardName,\r\n };\r\n};\r\nconst invoiceTransform = data => data.map((item) => {\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n balance: item.balance,\r\n };\r\n});\r\n\r\n// Internal Functions\r\nconst isValueNonEmpty = (value) => {\r\n return value !== undefined && value !== null && value.length > 0;\r\n}\r\nconst validateNewCreditCard = (firstName, lastName, expiryMonth, expiryYear) => {\r\n return (\r\n isValueNonEmpty(firstName) &&\r\n isValueNonEmpty(lastName) &&\r\n isValueNonEmpty(expiryMonth) &&\r\n isValueNonEmpty(expiryYear)\r\n )\r\n}\r\n\r\nconst validateNewACH = (firstName, lastName, routingNumber, accountNumber) => {\r\n return (\r\n isValueNonEmpty(firstName) &&\r\n isValueNonEmpty(lastName) &&\r\n isValueNonEmpty(routingNumber) &&\r\n isValueNonEmpty(accountNumber)\r\n )\r\n}\r\n\r\nconst clickHiddenButton = (ref) => {\r\n ref.current.disabled = false;\r\n ref.current.click();\r\n ref.current.disabled = true;\r\n}\r\n\r\nconst setToDisabled = (ref) => {\r\n if (ref !== null && ref.current !== null && ref.current.disabled !== true) {\r\n ref.current.disabled = true;\r\n }\r\n}\r\n\r\nconst buildPaymentMethodMessage = (payment) => {\r\n return (payment === undefined && payment.identity !== undefined) ? '' : `Your payment ID is ${payment.identity}`;\r\n}\r\n\r\n// Main Dialog\r\n\r\nfunction MakePaymentDialog({\r\n accountId,\r\n accountBalance,\r\n accountCurrencyCode,\r\n currencyFormatter,\r\n hideInvoices,\r\n onSuccessfulPayment,\r\n ...props\r\n }) {\r\n const classes = useStyles();\r\n const getAmountFromAccountBalance = useCallback(() => {\r\n return accountBalance > 0 ? accountBalance : '';\r\n }, [accountBalance]);\r\n\r\n // Dialog Variables\r\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\r\n const [paymentMethods, setPaymentMethods] = React.useState([]);\r\n const [gatewayToken, setGatewayToken] = React.useState('');\r\n const [customerPortalSettings, setCustomerPortalSettings] = React.useState({});\r\n const [paymentApiCall, setPaymentApiCall] = React.useState(null);\r\n const [processingMessage, setProcessingMessage] = React.useState('');\r\n\r\n // Dialog Fields\r\n const [paymentType, setPaymentType] = React.useState({});\r\n const [cardType, setCardType] = React.useState({});\r\n const [paymentMethodId, setPaymentMethodId] = React.useState(0);\r\n const [paymentMethod, setPaymentMethod] = React.useState({});\r\n\r\n // EN-12262 Show account balance if no invoice selected\r\n const [amount, setAmount] = React.useState(getAmountFromAccountBalance());\r\n const [invoices, setInvoices] = React.useState([]);\r\n\r\n const [invoiceId, setInvoiceId] = React.useState(0);\r\n const [newPaymentMethodType, setNewPaymentMethodType] = React.useState(0);\r\n const [payNow, setPayNow] = React.useState(true);\r\n\r\n // Conditional Dialog Fields\r\n const [firstName, setFirstName] = React.useState('');\r\n const [lastName, setLastName] = React.useState('');\r\n const [expiryMonth, setExpiryMonth] = React.useState('');\r\n const [expiryYear, setExpiryYear] = React.useState('');\r\n const [expiryError, setExpiryError] = React.useState('');\r\n const [accountNumber, setAccountNumber] = React.useState('');\r\n const [routingNumber, setRoutingNumber] = React.useState('');\r\n\r\n const [savePaymentCheck, setSavePaymentCheck] = React.useState(false);\r\n const [paymentMethodName, setPaymentMethodName] = React.useState('');\r\n const [defaultCheck, setDefaultCheck] = React.useState(false);\r\n\r\n // Spreedly Fields\r\n const [spreedlyVisible, setSpreedlyVisible] = React.useState(false);\r\n const [spreedlyNumberValid, setSpreedlyNumberValid] = React.useState(false);\r\n const [spreedlyAmountValid, setSpreedlyAmountValid] = React.useState(false);\r\n const [spreedlyCvvValid, setSpreedlyCvvValid] = React.useState(false);\r\n const [spreedlyCreditError, setSpreedlyCreditError] = React.useState('');\r\n const [spreedlyAmountError, setSpreedlyAmountError] = React.useState('');\r\n const [spreedlyCVVError, setSpreedlyCVVError] = React.useState('');\r\n const [paymentMethodToken, setPaymentMethodToken] = React.useState('');\r\n const [genericError, setGenericError] = React.useState('');\r\n const [openGenericMessage, setOpenGenericMessage] = React.useState(false);\r\n\r\n // Spreedly State\r\n const [spreedlyReady, setSpreedlyReady] = React.useState(false);\r\n\r\n const spreedlyCreditInput = useRef(null);\r\n const recacheButton = useRef(null);\r\n const paymentMethodButton = useRef(null);\r\n\r\n setToDisabled(recacheButton);\r\n setToDisabled(paymentMethodButton);\r\n\r\n const resetDialogState = () => {\r\n const Spreedly = window.Spreedly;\r\n setPaymentType({});\r\n setCardType({});\r\n setPaymentMethodId(0);\r\n setPaymentMethod({});\r\n setInvoiceId(0);\r\n setNewPaymentMethodType({});\r\n setAmount(getAmountFromAccountBalance());\r\n setFirstName('');\r\n setLastName('');\r\n setExpiryMonth('');\r\n setExpiryYear('');\r\n setAccountNumber('');\r\n setRoutingNumber('');\r\n setPaymentMethodToken('');\r\n setSpreedlyVisible(false);\r\n setSpreedlyCreditError('');\r\n setSpreedlyAmountError('');\r\n setSpreedlyCVVError('');\r\n setSpreedlyNumberValid(false);\r\n setSpreedlyAmountValid(false);\r\n setSpreedlyCvvValid(false);\r\n setPayNow(true);\r\n setGenericError('');\r\n setOpenGenericMessage(false);\r\n if (Spreedly.isLoaded()) {\r\n Spreedly.removeHandlers();\r\n Spreedly.unload();\r\n }\r\n };\r\n\r\n // Initialize\r\n const initializePaymentMethods = useCallback(() => {\r\n getPaymentMethods(accountId, {\r\n filters: [\r\n { name: 'isActive', value: true, operator: 'eq', condition: 'and' },\r\n ]\r\n }).then((data) => {\r\n let paymentMethods = data.map(paymentMethodTransform)\r\n setPaymentMethods(paymentMethods);\r\n let defaultPaymentMethod = paymentMethods.find((pm) => pm.autopay === true);\r\n if (defaultPaymentMethod !== undefined) {\r\n setPaymentMethodId(defaultPaymentMethod.uid);\r\n setPaymentMethod(defaultPaymentMethod);\r\n }\r\n })\r\n }, [accountId]);\r\n\r\n const handleProcessingDialogClosed = () => {\r\n setProcessingMessage('');\r\n setPaymentApiCall(null);\r\n }\r\n\r\n const getInvoicesWithBalances = useCallback(() => {\r\n return getInvoices(\r\n accountId,\r\n {\r\n pageNumber: 1,\r\n pageSize: 1000,\r\n filters: [\r\n { name: 'balance', operator: 'gt', value: 0 },\r\n { name: 'isVoiding', operator: 'eq', value: 0 },\r\n { name: 'isVoid', operator: 'eq', value: 0 },\r\n ],\r\n order: 'desc',\r\n orderBy: 'date'\r\n }\r\n );\r\n }, [accountId])\r\n\r\n useEffect(() => {\r\n getPaymentConfiguration()\r\n .then((data) => {\r\n setGatewayToken(data.environmentKey);\r\n })\r\n }, [])\r\n\r\n useEffect(() => {\r\n setAmount(getAmountFromAccountBalance());\r\n }, [accountBalance, getAmountFromAccountBalance])\r\n\r\n // Dialog Functions\r\n const openDialog = () => {\r\n // EN-12244 Need to provide a list of invoices with positive balances sorted in reverse chronological order\r\n getInvoicesWithBalances().then((results) => {\r\n setInvoices(invoiceTransform(results.items));\r\n setIsDialogOpen(true);\r\n }).catch(() => {\r\n console.error('Unable to retrieve invoices with positive balances');\r\n setInvoices([]);\r\n setIsDialogOpen(true)\r\n });\r\n\r\n getCurrentOwnerCustomerPortalSettings().then((settings) => {\r\n setCustomerPortalSettings(settings);\r\n });\r\n\r\n initializePaymentMethods();\r\n };\r\n\r\n const closeDialog = () => {\r\n setIsDialogOpen(false);\r\n };\r\n\r\n const paymentMethodChange = (event) => {\r\n setPaymentType({});\r\n setCardType({});\r\n setNewPaymentMethodType(0);\r\n setPaymentMethodId(event.target.value);\r\n let paymentMethod = paymentMethods.find((method) => method.uid === event.target.value);\r\n if (paymentMethod !== undefined) setPaymentMethod(paymentMethod)\r\n };\r\n\r\n const amountChange = (event) => {\r\n setAmount(event.target.value);\r\n };\r\n\r\n const invoiceChange = useCallback((event) => {\r\n setInvoiceId(event.target.value);\r\n const invoice = invoices.find(invoice => invoice.id === event.target.value);\r\n // EN-12262 if no invoice selected revert to account balance if positive\r\n setAmount((curAmount) => {\r\n if (invoice && parseFloat(invoice.balance) > 0) return accounting.formatNumber(invoice.balance, 2);\r\n if (parseFloat(accountBalance) > 0) return accountBalance;\r\n return curAmount;\r\n })\r\n }, [invoices, accountBalance]);\r\n\r\n const expiryMonthChange = (event) => {\r\n let month = event.target.value;\r\n setExpiryMonth(month);\r\n setExpiryError('');\r\n };\r\n\r\n const expiryYearChange = (event) => {\r\n let year = event.target.value;\r\n setExpiryYear(year);\r\n setExpiryError('');\r\n };\r\n\r\n // Effects to gather additional data\r\n useEffect(() => {\r\n if (paymentMethodId > 0) {\r\n let paymentMethod = paymentMethods.find((method) => method.uid === paymentMethodId);\r\n if (paymentMethod !== undefined && paymentMethod.paymentTypeId !== undefined) {\r\n getPaymentType(paymentMethod.paymentTypeId)\r\n .then((paymentType) => {\r\n setPaymentType(paymentTypeTransform(paymentType));\r\n });\r\n }\r\n }\r\n }, [paymentMethodId, paymentMethods])\r\n\r\n useEffect(() => {\r\n if (typeof paymentType === 'object' && paymentType.cardTypeId !== undefined) {\r\n getCardType(paymentType.cardTypeId)\r\n .then((data) => {\r\n setCardType(cardTypeTransform(data));\r\n })\r\n }\r\n }, [paymentType])\r\n\r\n // Payment Functions\r\n const makeOneTimeBankPayment = useCallback(() => {\r\n let paymentOptions = {\r\n accountId: accountId,\r\n amount: amount,\r\n accountNumber: accountNumber,\r\n routingNumber: routingNumber,\r\n firstName: firstName,\r\n lastName: lastName,\r\n posting: dateHelpers.dbNow(),\r\n }\r\n if (savePaymentCheck) {\r\n paymentOptions.savePaymentMethod = savePaymentCheck;\r\n paymentOptions.paymentMethodName = paymentMethodName;\r\n }\r\n const apiCall = postPaymentOneTimeBankAccount(paymentOptions).then(\r\n (results) => {\r\n console.log('Payment Successful');\r\n if (typeof onSuccessfulPayment === 'function') {\r\n onSuccessfulPayment();\r\n }\r\n setProcessingMessage(buildPaymentMethodMessage(results));\r\n });\r\n\r\n setPaymentApiCall(apiCall);\r\n closeDialog();\r\n }, [accountId, amount, accountNumber, routingNumber, firstName, lastName, paymentMethodName, savePaymentCheck, onSuccessfulPayment]);\r\n\r\n const makeOneTimeCreditPayment = useCallback((paymentMethodToken) => {\r\n let paymentOptions = {\r\n accountId: accountId,\r\n amount: amount,\r\n paymentMethodToken: paymentMethodToken,\r\n date: dateHelpers.dbNow(),\r\n posting: dateHelpers.dbNow(),\r\n };\r\n\r\n if (savePaymentCheck) {\r\n paymentOptions.savePaymentMethod = savePaymentCheck;\r\n paymentOptions.paymentMethodName = paymentMethodName;\r\n }\r\n const apiCall = postPaymentOneTimeCreditCard(paymentOptions).then((results) => {\r\n console.log('Payment Successful');\r\n if (typeof onSuccessfulPayment === 'function') {\r\n onSuccessfulPayment();\r\n }\r\n setProcessingMessage(buildPaymentMethodMessage(results));\r\n });\r\n\r\n setPaymentApiCall(apiCall);\r\n closeDialog();\r\n }, [accountId, amount, onSuccessfulPayment, paymentMethodName, savePaymentCheck]);\r\n\r\n useEffect(() => {\r\n if (paymentMethodToken === '') return;\r\n makeOneTimeCreditPayment(paymentMethodToken)\r\n }, [paymentMethodToken, makeOneTimeCreditPayment])\r\n\r\n const makeExistingPayment = useCallback(() => {\r\n let paymentObj = {\r\n accountId: accountId,\r\n paymentMethodId: paymentMethodId,\r\n invoiceId: (invoiceId > 0) ? invoiceId : null,\r\n posting: dateHelpers.dbNow(),\r\n automaticDisburse: true,\r\n detail: null,\r\n amount: amount,\r\n }\r\n const apiCall = postPayment(paymentObj).then((results) => {\r\n console.log('Payment Successful');\r\n if (typeof onSuccessfulPayment === 'function') {\r\n onSuccessfulPayment();\r\n }\r\n setProcessingMessage(buildPaymentMethodMessage(results));\r\n });\r\n setPaymentApiCall(apiCall);\r\n closeDialog();\r\n }, [accountId, paymentMethodId, invoiceId, amount, onSuccessfulPayment]);\r\n\r\n const triggerTokenize = useCallback(() => {\r\n const Spreedly = window.Spreedly;\r\n let requiredFields = {\r\n first_name: firstName,\r\n last_name: lastName,\r\n month: expiryMonth,\r\n year: expiryYear,\r\n amount: amount,\r\n };\r\n Spreedly.tokenizeCreditCard(requiredFields);\r\n }, [firstName, lastName, expiryMonth, expiryYear, amount]);\r\n\r\n const submitPayment = useCallback(() => {\r\n setOpenGenericMessage(false);\r\n if (paymentMethodId === PaymentMethodEnum.NEW) {\r\n if (newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD) {\r\n triggerTokenize();\r\n } else if (newPaymentMethodType === PaymentMethodTypeEnum.ACH) {\r\n makeOneTimeBankPayment();\r\n }\r\n } else if (paymentType.paymentBaseTypeId === PaymentBaseTypeEnum.CREDIT_CARD) {\r\n const Spreedly = window.Spreedly;\r\n Spreedly.recache();\r\n } else {\r\n makeExistingPayment();\r\n }\r\n }, [paymentMethodId, paymentType, newPaymentMethodType, makeExistingPayment, triggerTokenize, makeOneTimeBankPayment]);\r\n\r\n // Spreedly Functions\r\n const spreedlyRecacheOnReady = useCallback(() => {\r\n const Spreedly = window.Spreedly;\r\n Spreedly.setRecache(paymentMethod.paymentMethodToken, {\r\n last_four_digits: paymentMethod.paymentMethodIdentifier,\r\n card_type: cardType.vendorCardName\r\n });\r\n Spreedly.setFieldType('number', 'text');\r\n Spreedly.setNumberFormat('prettyFormat');\r\n let compStyle = window.getComputedStyle(spreedlyCreditInput.current);\r\n let style = createCSSText({\r\n font: compStyle.font,\r\n width: '95%'\r\n });\r\n Spreedly.setStyle('number', style);\r\n Spreedly.setStyle('cvv', style);\r\n Spreedly.on('recacheReady', function () {\r\n Spreedly.on('recache', () => {\r\n clickHiddenButton(recacheButton);\r\n })\r\n setSpreedlyReady(true);\r\n });\r\n }, [paymentMethod, cardType, spreedlyCreditInput, recacheButton]);\r\n\r\n const spreedlyNewPaymentOnReady = useCallback(() => {\r\n const Spreedly = window.Spreedly;\r\n let compStyle = window.getComputedStyle(spreedlyCreditInput.current);\r\n let style = createCSSText({\r\n font: compStyle.font,\r\n width: '95%',\r\n });\r\n Spreedly.setFieldType('number', 'text');\r\n Spreedly.setNumberFormat('prettyFormat');\r\n Spreedly.setStyle('number', style);\r\n Spreedly.setStyle('cvv', style);\r\n Spreedly.on('paymentMethod', (token) => {\r\n setPaymentMethodToken(token);\r\n });\r\n setSpreedlyReady(true);\r\n }, [spreedlyCreditInput]);\r\n\r\n // Dialog Validation Effects\r\n\r\n useEffect(() => {\r\n let enablePayNow = false;\r\n setSpreedlyAmountError('');\r\n setSpreedlyAmountValid(true);\r\n if (amount !== '' && !currencyAmountValidator.test(amount)) {\r\n setSpreedlyAmountError('Amount is not a valid currency value.');\r\n setSpreedlyAmountValid(false);\r\n enablePayNow = spreedlyAmountValid;\r\n return;\r\n }\r\n ;\r\n\r\n if (parseFloat(amount) > 0 || parseFloat(amount?.replace(/,/g, '')) > 0) {\r\n if (paymentMethodId === PaymentMethodEnum.NEW) {\r\n if (newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD && spreedlyReady) {\r\n enablePayNow = validateNewCreditCard(firstName, lastName, expiryMonth, expiryYear);\r\n enablePayNow = enablePayNow && spreedlyNumberValid && spreedlyCvvValid;\r\n } else if (newPaymentMethodType === PaymentMethodTypeEnum.ACH) {\r\n enablePayNow = validateNewACH(firstName, lastName, routingNumber, accountNumber);\r\n }\r\n if (savePaymentCheck === true) {\r\n enablePayNow = enablePayNow && (paymentMethodName.length > 0)\r\n }\r\n } else if (paymentMethodId > 0 && paymentType.uid > 0) {\r\n if (paymentType.paymentBaseTypeId === PaymentBaseTypeEnum.CREDIT_CARD) {\r\n enablePayNow = spreedlyReady && spreedlyCvvValid;\r\n } else if (paymentType.paymentBaseTypeId === PaymentBaseTypeEnum.ACH) {\r\n enablePayNow = true;\r\n }\r\n }\r\n }\r\n setPayNow(enablePayNow);\r\n }, [\r\n paymentMethodId, paymentType, newPaymentMethodType,\r\n spreedlyReady, amount,\r\n firstName, lastName,\r\n expiryMonth, expiryYear,\r\n routingNumber, accountNumber,\r\n spreedlyNumberValid, spreedlyAmountValid, spreedlyCvvValid,\r\n paymentMethodName, savePaymentCheck,\r\n ]);\r\n\r\n // Main Dialog State Logic\r\n useEffect(() => {\r\n const Spreedly = window.Spreedly;\r\n\r\n function setupSpreedly() {\r\n setSpreedlyVisible(true);\r\n setSpreedlyReady(false);\r\n if (!Spreedly.isLoaded()) initializeSpreedly(gatewayToken);\r\n Spreedly.removeHandlers();\r\n }\r\n\r\n function removeSpreedly() {\r\n const Spreedly = window.Spreedly;\r\n if (Spreedly.isLoaded()) Spreedly.unload();\r\n setSpreedlyReady(false);\r\n setSpreedlyVisible(false);\r\n }\r\n\r\n const spreedlyOnErrorCB = (errors) => {\r\n errors.forEach(function (error) {\r\n if (error.attribute === 'cvv') {\r\n setSpreedlyCVVError(error.message);\r\n } else if (error.attribute === 'number') {\r\n setSpreedlyCreditError(error.message);\r\n } else if (error.key === 'errors.expired' || error.attribute === 'year' || error.attribute === 'month') {\r\n setExpiryError(error.message);\r\n } else {\r\n setGenericError(`The payment failed due to an unexpected exception: ${error.message}`);\r\n setOpenGenericMessage(true);\r\n }\r\n console.error(error.message);\r\n });\r\n };\r\n\r\n const fieldEventCB = function (name, type, activeEl, inputProperties) {\r\n if (type === 'input') {\r\n if (name === 'number') {\r\n setSpreedlyCreditError('');\r\n if (inputProperties.validNumber !== undefined) setSpreedlyNumberValid(inputProperties.validNumber === true)\r\n }\r\n if (name === 'cvv') {\r\n setSpreedlyCVVError('');\r\n if (inputProperties.validCvv !== undefined) setSpreedlyCvvValid(inputProperties.validCvv === true)\r\n }\r\n }\r\n }\r\n\r\n const validationCB = function (inputProperties) {\r\n if (!inputProperties.validNumber) setSpreedlyCreditError('Please enter a valid credit card number');\r\n if (!inputProperties.validCvv) setSpreedlyCreditError('Please enter a valid CVV');\r\n }\r\n\r\n if (isDialogOpen) {\r\n // Existing Payment Method\r\n if (paymentMethodId > 0 && paymentType.uid > 0) {\r\n if (cardType.uid > 0 && paymentType.paymentBaseTypeId === PaymentBaseTypeEnum.CREDIT_CARD) {\r\n setupSpreedly();\r\n defaultSpreedlySetup(spreedlyRecacheOnReady, spreedlyOnErrorCB, fieldEventCB, validationCB);\r\n Spreedly.reload();\r\n } else {\r\n removeSpreedly();\r\n }\r\n } else if (paymentMethodId === PaymentMethodEnum.NEW && newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD) {\r\n setupSpreedly();\r\n defaultSpreedlySetup(spreedlyNewPaymentOnReady, spreedlyOnErrorCB, fieldEventCB, validationCB);\r\n Spreedly.reload();\r\n } else {\r\n removeSpreedly();\r\n }\r\n }\r\n }, [isDialogOpen, paymentMethodId, paymentType, cardType, newPaymentMethodType, gatewayToken, spreedlyRecacheOnReady, spreedlyNewPaymentOnReady])\r\n\r\n const closeToast = () => {\r\n setOpenGenericMessage(false);\r\n }\r\n\r\n const exitedToast = () => {\r\n setGenericError('');\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {(props.title !== undefined) ? props.title : 'Payment'}\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n
\r\n \r\n Payment Method\r\n }\r\n value={paymentMethodId}\r\n label='Payment Method'\r\n onChange={paymentMethodChange}\r\n >\r\n None\r\n {\r\n paymentMethods.map((paymentMethod) => (\r\n {paymentMethod.name}\r\n ))\r\n }\r\n New\r\n Payment Method\r\n \r\n \r\n {\r\n (!hideInvoices) &&\r\n \r\n Invoice\r\n \r\n \r\n }\r\n {\r\n (paymentMethodId === PaymentMethodEnum.NEW) &&\r\n <>\r\n \r\n Payment Method Type\r\n setNewPaymentMethodType(event.target.value)}\r\n labelId={'paymentMethodLabel'}\r\n label='Payment Method Type'\r\n fullWidth\r\n >\r\n None \r\n Credit Card\r\n Bank Account\r\n \r\n \r\n {\r\n (newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD || newPaymentMethodType === PaymentMethodTypeEnum.ACH) && (\r\n \r\n \r\n \r\n setFirstName(event.target.value)}\r\n fullWidth\r\n />\r\n \r\n \r\n setLastName(event.target.value)}\r\n fullWidth\r\n />\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n }\r\n {\r\n (paymentMethodId !== PaymentMethodEnum.NONE) &&\r\n <>\r\n {\r\n (newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD) &&\r\n
\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n {\r\n (newPaymentMethodType === PaymentMethodTypeEnum.ACH) && (\r\n <>\r\n \r\n setRoutingNumber(event.target.value)}\r\n fullWidth/>\r\n \r\n \r\n setAccountNumber(event.target.value)}\r\n fullWidth/>\r\n \r\n \r\n )\r\n }\r\n {\r\n (paymentMethodId > 0 || (paymentMethodId === PaymentMethodEnum.NEW && newPaymentMethodType !== PaymentMethodTypeEnum.NONE)) &&\r\n \r\n Amount\r\n {accountCurrencyCode}}\r\n InputProps={{ inputProps: { min: 0 } }}\r\n variant='outlined'\r\n color='primary'\r\n label='Amount'\r\n value={amount}\r\n />\r\n {spreedlyAmountError}\r\n \r\n }\r\n {\r\n <>\r\n {/*Actions on save*/}\r\n {\r\n (newPaymentMethodType === PaymentMethodTypeEnum.CREDIT_CARD || newPaymentMethodType === PaymentMethodTypeEnum.ACH) && (\r\n customerPortalSettings.allowPaymentMethodCreation &&\r\n <>\r\n \r\n \r\n \r\n {\r\n setSavePaymentCheck(event.target.checked);\r\n setDefaultCheck(false);\r\n }}\r\n />\r\n }\r\n label='Save Payment Method'\r\n fullWidth\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n paymentApiCall !== null &&\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nMakePaymentDialog.propTypes = {\r\n accountId: PropTypes.number.isRequired,\r\n accountBalance: PropTypes.number.isRequired,\r\n accountCurrencyCode: PropTypes.string.isRequired,\r\n currencyFormatter: PropTypes.object.isRequired,\r\n hideInvoices: PropTypes.bool\r\n};\r\n\r\nexport default MakePaymentDialog\r\n","import {grayColor} from '../portalStyle';\r\nexport const bgShadeClass = () => ({\r\n backgroundColor: grayColor[5],\r\n})","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {makeStyles} from '@material-ui/core';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\nimport LastPageIcon from '@material-ui/icons/LastPage';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexShrink: 0,\r\n marginLeft: theme.spacing(2.5),\r\n },\r\n}));\r\n\r\nfunction TablePaginationActions(props) {\r\n const classes = useStyles();\r\n const { count, page, rowsPerPage, onPageChange } = props;\r\n\r\n const handleFirstPageButtonClick = () => {\r\n onPageChange(0);\r\n };\r\n\r\n const handleBackButtonClick = () => {\r\n onPageChange(page - 1);\r\n };\r\n\r\n const handleNextButtonClick = () => {\r\n onPageChange(page + 1);\r\n };\r\n\r\n const handleLastPageButtonClick = () => {\r\n onPageChange(Math.max(0, Math.ceil(count / rowsPerPage) - 1));\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label='next page'\r\n >\r\n \r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label='last page'\r\n >\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nTablePaginationActions.propTypes = {\r\n count: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired,\r\n page: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default TablePaginationActions;","import React from 'react';\r\nimport {usePagination, useTable} from 'react-table';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\n\r\nimport {CircularProgress, withStyles} from '@material-ui/core';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport MuiTable from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TablePagination from '@material-ui/core/TablePagination';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\n\r\nimport {blackColor, whiteColor} from '../assets/jss/portalStyle';\r\nimport {bgShadeClass} from '../assets/jss/classes/bgShade'\r\nimport TablePaginationActions from './TablePaginationActions';\r\n\r\nconst styles = () => ({\r\n root: {\r\n overflow: 'auto',\r\n },\r\n cellAlignCenter: {\r\n textAlign: 'center',\r\n },\r\n cellAlignRight: {\r\n textAlign: 'right',\r\n },\r\n cellAlignLeft: {\r\n textAlign: 'left',\r\n },\r\n header: {\r\n backgroundColor: blackColor,\r\n color: whiteColor,\r\n textAlign: 'center',\r\n },\r\n headerFirstChild: {\r\n backgroundColor: blackColor,\r\n color: whiteColor,\r\n textAlign: 'left',\r\n borderTopLeftRadius: '12px',\r\n },\r\n headerLastChild: {\r\n backgroundColor: blackColor,\r\n color: whiteColor,\r\n textAlign: 'center',\r\n borderTopRightRadius: '12px',\r\n },\r\n pagination: {\r\n minHeight: '32px',\r\n overflow: 'inherit',\r\n },\r\n ...bgShadeClass,\r\n})\r\n\r\nexport const classNames = {\r\n CURRENCY: 'currency-info',\r\n DATE: 'date-info',\r\n ICON: 'icon-info',\r\n STRING: 'string-info',\r\n}\r\n\r\nfunction Table(props) {\r\n const matches = useMediaQuery('(min-width:480px) and (min-height: 480px');\r\n\r\n const {\r\n classes,\r\n columns,\r\n data,\r\n fetchData,\r\n loading,\r\n pageCount: controlledPageCount,\r\n orderBy,\r\n order,\r\n handleSortChange,\r\n totalRows,\r\n } = props;\r\n\r\n // Use the state and functions returned from useTable to build your UI\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n prepareRow,\r\n page,\r\n gotoPage,\r\n setPageSize,\r\n // Get the state from the instance\r\n state: { pageIndex, pageSize },\r\n } = useTable(\r\n {\r\n columns,\r\n data,\r\n initialState: { pageIndex: 0, pageSize: 10 }, // Pass our hoisted table state\r\n manualPagination: true, // Tell the usePagination hook that we'll handle our own data fetching\r\n // This means we'll also have to provide our own pageCount.\r\n pageCount: controlledPageCount,\r\n },\r\n usePagination\r\n );\r\n\r\n const createSortHandler = (property) => (event) => {\r\n handleSortChange(event, property);\r\n };\r\n\r\n const StyledTableSortLabel = withStyles({\r\n icon: {\r\n '& path': {\r\n fill: '#eee'\r\n },\r\n },\r\n root: {\r\n '&.MuiTableSortLabel-active': {\r\n color: '#fff',\r\n },\r\n },\r\n })(TableSortLabel);\r\n\r\n // Listen for changes in pagination and use the state to fetch our new data\r\n React.useEffect(() => {\r\n fetchData({ pageIndex, pageSize })\r\n }, [fetchData, pageIndex, pageSize]);\r\n\r\n const alignmentStyleByClass = (className) => {\r\n switch (className) {\r\n case classNames.CURRENCY:\r\n return classes.cellAlignRight;\r\n case classNames.ICON:\r\n case classNames.DATE:\r\n return classes.cellAlignCenter;\r\n case classNames.STRING:\r\n default:\r\n return classes.cellAlignLeft;\r\n }\r\n };\r\n\r\n const alignmentStyleByAlign = (alignment) => {\r\n switch (alignment.toLowerCase()) {\r\n case 'right':\r\n return classes.cellAlignRight;\r\n case 'center':\r\n case 'centre':\r\n return classes.cellAlignCenter;\r\n case 'left':\r\n default:\r\n return classes.cellAlignLeft;\r\n }\r\n };\r\n // Render the UI for your table\r\n return (\r\n \r\n \r\n \r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map((column, idx) => {\r\n const className = column.className;\r\n const alignStyle = (column.align !== undefined) ? alignmentStyleByAlign(column.align) : alignmentStyleByClass(className);\r\n const orderStyle = (idx === 0) ? classes.headerFirstChild :\r\n (idx === headerGroup.headers.length - 1) ? classes.headerLastChild : classes.header;\r\n return (\r\n \r\n {column.isSortable ?\r\n \r\n {column.render('Header')}\r\n :\r\n column.render('Header')\r\n }\r\n \r\n )\r\n })}\r\n \r\n ))}\r\n \r\n \r\n {loading && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {(!loading) && (totalRows > 0) && page.map((row) => {\r\n prepareRow(row);\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n const column = cell.column;\r\n const className = column.className;\r\n const alignStyle = (column.align !== undefined) ? alignmentStyleByAlign(column.align) : alignmentStyleByClass(className);\r\n return (\r\n \r\n {cell.render('Cell')}\r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n {\r\n (totalRows > 0) && (\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n ActionsComponent={TablePaginationActions}\r\n />\r\n )\r\n }\r\n \r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n columns: PropTypes.array.isRequired,\r\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchData: PropTypes.func.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n pageCount: PropTypes.number.isRequired,\r\n orderBy: PropTypes.string,\r\n order: PropTypes.oneOf(['asc', 'desc']),\r\n handleSortChange: PropTypes.func,\r\n totalRows: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(Table);","import React, {useCallback, useEffect} from 'react';\r\n\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\nimport {withStyles} from '@material-ui/core/styles';\r\n\r\n\r\nimport getAccount from '../api/getAccount';\r\nimport getAccountSummary from '../api/getAccountSummary';\r\nimport getInvoices from '../api/getInvoices';\r\nimport getInvoiceRender from '../api/getInvoiceRender';\r\n\r\nimport dateFormat from '../helpers/dateFormat';\r\nimport {getCurrencyFormat} from '../helpers/numberFormat';\r\nimport {portalConfigTransform} from '../helpers/transforms.js';\r\nimport {getCurrentOwnerCustomerPortalSettings} from '../helpers/getInfoFromCurrentUser'\r\nimport Header from '../components/Header';\r\nimport Loading from '../components/Loading';\r\n\r\nimport {grayColor} from '../assets/jss/portalStyle';\r\n\r\nimport EmptyListMessage from '../components/EmptyListMessage';\r\nimport InvoiceCard from './InvoiceCard';\r\nimport MakePaymentDialog from './MakePaymentDialog';\r\nimport Table, {classNames} from '../components/Table';\r\n\r\nconst styles = (theme) => ({\r\n gridCardRoot: {\r\n marginBottom: theme.spacing(1),\r\n }\r\n});\r\n\r\nconst screenId = 'portalScreen_Invoices';\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: grayColor[11],\r\n color: grayColor[8],\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n}))(Tooltip);\r\n\r\nfunction InvoiceCards(props) {\r\n const { classes, summaryData, cardGridSize } = props;\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nfunction handleInvoiceDownloadClick(invoiceId) {\r\n // Solution for When CORS is setup\r\n // import('axios')\r\n // .then((importedLib) => {\r\n // const axios = importedLib.default;\r\n // getInvoiceRender(invoiceId)\r\n // .then((invoiceResults) => {\r\n // let pdfLink = invoiceResults.link;\r\n // if (pdfLink === '') {\r\n // console.warn('No pdf available to download');\r\n // } else {\r\n // axios.get(pdfLink)\r\n // .then((pdfResponse) => {\r\n // let invoiceName = invoiceResults.invoiceName;\r\n // let fileName = converters.invoiceToSafePdfName(invoiceName);\r\n // download(new Blob(pdfResponse.data), fileName, 'application/pdf');\r\n // })\r\n // .catch((e) => {\r\n // console.error(e.message);\r\n // })\r\n // }\r\n // });\r\n // })\r\n getInvoiceRender(invoiceId)\r\n .then((invoiceResults) => {\r\n let pdfLink = invoiceResults.link;\r\n if (pdfLink === '') {\r\n console.warn('No pdf available to download');\r\n } else {\r\n window.open(pdfLink);\r\n }\r\n });\r\n\r\n}\r\n\r\nconst roundAccurately = (number, decimalPlaces) => Number(Math.round(Number(number + 'e' + decimalPlaces)) + 'e' + decimalPlaces * -1);\r\nconst accountSummaryTransform = (summary, isInvoicerAccount, currencyFormatter) => {\r\n if (summary === undefined) {\r\n summary = { balance: 0, balanceDue: 0 }\r\n }\r\n return {\r\n balance: currencyFormatter.format(isInvoicerAccount ? summary.balance : 0),\r\n balanceDue: currencyFormatter.format(isInvoicerAccount ? summary.balanceDue : 0),\r\n noFormatBalance: isInvoicerAccount ? roundAccurately(summary.balance, 2) : 0,\r\n noFormatBalanceDue: isInvoicerAccount ? roundAccurately(summary.balanceDue, 2) : 0,\r\n }\r\n}\r\n\r\n\r\nfunction Invoices(props) {\r\n const { classes, ...rest } = props;\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n setPageIdx(1);\r\n };\r\n\r\n const { currentAccount } = props;\r\n const [dateFormatter, setDateFormat] = React.useState();\r\n const [currencyFormatter, setCurrencyFormat] = React.useState(() => ({ format: (number) => number }));\r\n const columns = React.useMemo(\r\n () => [\r\n {\r\n Header: 'Invoice',\r\n accessor: 'col1',\r\n id: 'ColumnHeaderInvoice',\r\n isSortable: true,\r\n width: '15%',\r\n columnName: 'name'\r\n },\r\n {\r\n Header: 'Date',\r\n accessor: 'col2',\r\n id: 'ColumnHeaderDate',\r\n isSortable: true,\r\n Cell: ({ value }) => dateFormatter.dbToUIDateTimeConvert(value, true),\r\n className: classNames.DATE,\r\n width: '10%',\r\n columnName: 'date'\r\n },\r\n {\r\n Header: 'Due',\r\n accessor: 'col3',\r\n id: 'ColumnHeaderDue',\r\n isSortable: true,\r\n Cell: ({ value }) => dateFormatter.dbToUIDateTimeConvert(value, true),\r\n className: classNames.DATE,\r\n width: '10%',\r\n columnName: 'due'\r\n },\r\n {\r\n Header: 'Charges',\r\n accessor: 'col4',\r\n id: 'ColumnHeaderCharges',\r\n isSortable: true,\r\n Cell: ({ value }) => currencyFormatter.format(value),\r\n className: classNames.CURRENCY,\r\n width: '15%',\r\n columnName: 'totalCharge'\r\n },\r\n {\r\n Header: 'Tax',\r\n accessor: 'col5',\r\n id: 'ColumnHeaderTax',\r\n isSortable: true,\r\n Cell: ({ value }) => currencyFormatter.format(value),\r\n className: classNames.CURRENCY,\r\n width: '10%',\r\n columnName: 'totalTax'\r\n },\r\n {\r\n Header: 'Total',\r\n accessor: 'col6',\r\n id: 'ColumnHeaderTotal',\r\n isSortable: true,\r\n Cell: ({ value }) => currencyFormatter.format(value),\r\n className: classNames.CURRENCY,\r\n width: '15%',\r\n columnName: 'total'\r\n },\r\n {\r\n Header: 'Balance',\r\n accessor: 'col7',\r\n id: 'ColumnHeaderBalance',\r\n isSortable: true,\r\n Cell: ({ value }) => currencyFormatter.format(value),\r\n className: classNames.CURRENCY,\r\n width: '15%',\r\n columnName: 'balance'\r\n },\r\n {\r\n Header: 'View',\r\n accessor: 'col8',\r\n id: 'ColumnHeaderDownload',\r\n isSortable: false,\r\n Cell: (target) => {\r\n return (\r\n \r\n {'View a copy of this '}{'invoice'}{' by clicking on this icon button'}\r\n \r\n }\r\n >\r\n {\r\n event.preventDefault();\r\n let invoiceId = target.cell.value;\r\n handleInvoiceDownloadClick(invoiceId);\r\n }}>\r\n {/* NOTE: set color to 'disabled' when implemented or remove */}\r\n \r\n \r\n )\r\n },\r\n className: classNames.ICON,\r\n width: '10%',\r\n }\r\n ],\r\n [dateFormatter, currencyFormatter]\r\n );\r\n // We'll start our table without any data\r\n const [data, setData] = React.useState([]);\r\n const [customerPortalConfig, setCustomerPortalConfig] = React.useState({});\r\n const [summaryData, setSummaryData] = React.useState({ balance: '', balanceDue: '' });\r\n const [isInvoicer, setIsInvoicer] = React.useState(false);\r\n const [loading, setLoading] = React.useState(true);\r\n const [invoiceLoading, setInvoiceLoading] = React.useState(false);\r\n const [pageCount, setPageCount] = React.useState(0);\r\n const [totalRows, setTotalRows] = React.useState(0);\r\n const [pageIdx, setPageIdx] = React.useState(1);\r\n const [rowsPerPage, setPageSize] = React.useState(10);\r\n // order by Date descending to start\r\n const [order, setOrder] = React.useState('desc');\r\n const [orderBy, setOrderBy] = React.useState('ColumnHeaderDate');\r\n\r\n const onSuccessfulPayment = () => {\r\n getAccountSummary(currentAccount.uid).then((result) => {\r\n setSummaryData(accountSummaryTransform(result, isInvoicer, currencyFormatter));\r\n })\r\n\r\n const accountId = currentAccount.uid\r\n if (accountId === undefined) return;\r\n\r\n const getSortColumn = (columnId) => {\r\n const column = columns.find(item => item.id === columnId);\r\n return column ? column.columnName : 'date';\r\n };\r\n const pageIndex = pageIdx;\r\n const pageSize = rowsPerPage;\r\n setInvoiceLoading(true);\r\n\r\n getInvoices(\r\n accountId,\r\n {\r\n pageNumber: pageIndex,\r\n pageSize: pageSize,\r\n order,\r\n orderBy: getSortColumn(orderBy)\r\n }\r\n ).then((results) => {\r\n let invoices = results.items;\r\n let totalCount = results.totalCount;\r\n setData(invoiceTransform(invoices));\r\n setPageCount(Math.ceil(totalCount / pageSize));\r\n setTotalRows(totalCount);\r\n setPageSize(pageSize);\r\n setPageIdx(pageIndex);\r\n setInvoiceLoading(false);\r\n });\r\n }\r\n\r\n const invoiceTransform = data => data.map((item) => {\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n balance: item.balance,\r\n col1: item.name,\r\n col2: item.date,\r\n col3: item.due,\r\n col4: item.totalCharge,\r\n col5: item.totalTax,\r\n col6: item.total,\r\n col7: item.balance,\r\n col8: item.identity,\r\n };\r\n });\r\n\r\n const fetchInvoices = useCallback(({ pageSize, pageIndex }) => {\r\n const getSortColumn = (columnId) => {\r\n const column = columns.find(item => item.id === columnId);\r\n return column ? column.columnName : 'date';\r\n };\r\n\r\n // This will get called when the table needs new data like page size change or page# change\r\n const accountId = currentAccount.uid\r\n if (accountId === undefined) return;\r\n\r\n pageIndex += 1;\r\n // Set the loading state\r\n setInvoiceLoading(true);\r\n\r\n getInvoices(\r\n accountId,\r\n {\r\n pageNumber: pageIndex,\r\n pageSize,\r\n order,\r\n orderBy: getSortColumn(orderBy)\r\n }\r\n ).then((results) => {\r\n let invoices = results.items;\r\n let totalCount = results.totalCount;\r\n setData(invoiceTransform(invoices));\r\n setPageCount(Math.ceil(totalCount / pageSize));\r\n setTotalRows(totalCount);\r\n setPageSize(pageSize);\r\n setPageIdx(pageIndex);\r\n setInvoiceLoading(false);\r\n });\r\n }, [order, orderBy, currentAccount, columns]);\r\n\r\n useEffect(() => { //Fetch all data needed on Initial Load\r\n const accountId = currentAccount.uid\r\n const summaryPromise = getAccountSummary(accountId);\r\n const accountPromise = getAccount(accountId);\r\n const invoicePromise = getInvoices(\r\n accountId,\r\n {\r\n pageIndex: pageIdx,\r\n pageSize: rowsPerPage\r\n }\r\n );\r\n const portalConfig = getCurrentOwnerCustomerPortalSettings();\r\n\r\n Promise.all([summaryPromise, accountPromise, invoicePromise, portalConfig])\r\n .then((results) => {\r\n const accountSummary = results[0];\r\n const currentAccount = results[1];\r\n const invoices = results[2];\r\n const portalConfig = results[3];\r\n setCustomerPortalConfig(portalConfigTransform(portalConfig));\r\n\r\n let totalCount = results[2].totalCount;\r\n setData(invoiceTransform(invoices.items));\r\n setPageCount(Math.ceil(totalCount / rowsPerPage));\r\n setTotalRows(totalCount);\r\n\r\n const isInvoicerAccount = (currentAccount.invoicerAccountId === currentAccount.identity ||\r\n currentAccount.usageInvoicerAccountId === currentAccount.identity);\r\n setIsInvoicer(isInvoicerAccount);\r\n let currencyPromise = getCurrencyFormat(currentAccount.currencyCode);\r\n let dateTransformPromise = dateFormat();\r\n Promise.all([currencyPromise, dateTransformPromise])\r\n .then((formatters) => {\r\n const [currencyFormatter, dateFormatter] = formatters;\r\n setCurrencyFormat(currencyFormatter);\r\n setDateFormat(dateFormatter);\r\n setSummaryData(accountSummaryTransform(accountSummary, isInvoicerAccount, currencyFormatter));\r\n setLoading(false);\r\n });\r\n })\r\n }, [currentAccount, pageIdx, rowsPerPage]);\r\n\r\n const gridSpacing = 2;\r\n const matches = useMediaQuery('(min-width:780px)');\r\n return (\r\n loading ? :\r\n (!isInvoicer || totalRows === 0)\r\n ?\r\n \r\n :\r\n <>\r\n \r\n \r\n
\r\n \r\n {\r\n customerPortalConfig.allowPayments &&\r\n \r\n \r\n \r\n }\r\n {\r\n matches &&\r\n \r\n }\r\n \r\n {\r\n !matches &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n )\r\n}\r\n\r\nexport {handleInvoiceDownloadClick};\r\nexport default withStyles(styles)(Invoices);\r\n","import { useState, useEffect } from 'react';\r\n\r\nexport default function useMediaQuery(query) {\r\n const [matches, setMatches] = useState(false);\r\n\r\n useEffect(() => {\r\n const media = window.matchMedia(query);\r\n if (media.matches !== matches) {\r\n setMatches(media.matches);\r\n }\r\n const listener = () => {\r\n setMatches(media.matches);\r\n };\r\n media.addListener(listener);\r\n return () => media.removeListener(listener);\r\n }, [matches, query]);\r\n\r\n return matches;\r\n}\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActionArea from '@material-ui/core/CardActionArea';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cardAction: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n root: {\r\n minWidth: '220px',\r\n textAlign: 'center',\r\n [theme.breakpoints.up('sm')]: {\r\n height: '150px',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n maxHeight: '150px',\r\n }\r\n },\r\n contentRoot: {\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(1),\r\n }\r\n }\r\n}));\r\n\r\nfunction OverviewCard(props) {\r\n const { actionButtonComponent: ActionButtonComponent, content, title } = props;\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n {\r\n (ActionButtonComponent !== undefined) &&\r\n \r\n {ActionButtonComponent}\r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nOverviewCard.propTypes = {\r\n actionButtonComponent: PropTypes.object,\r\n content: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default OverviewCard;","import React, {useState, useEffect} from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport getInvoices from '../api/getInvoices';\r\nimport getAccountSummary from '../api/getAccountSummary';\r\n\r\nimport Header from '../components/Header';\r\nimport Loading from '../components/Loading.js';\r\nimport useMediaQuery from '../components/useMediaQuery.js';\r\n\r\nimport {getCurrencyFormat} from '../helpers/numberFormat.js';\r\nimport {portalConfigTransform, invoiceTransform} from '../helpers/transforms.js';\r\nimport {getCurrentOwnerCustomerPortalSettings} from '../helpers/getInfoFromCurrentUser'\r\n\r\nimport MakePaymentDialog from '../invoices/MakePaymentDialog';\r\nimport {handleInvoiceDownloadClick} from '../invoices/Invoices';\r\nimport OverviewCard from './OverviewCard';\r\n\r\nconst screenId = 'portalScreen_Overview';\r\n\r\nexport default (props) => {\r\n const { currentAccount, invoicerAccounts } = props;\r\n const [loading, setLoading] = useState(true);\r\n const [invoice, setInvoice] = useState({});\r\n const [invoicerAccount, setInvoicerAccount] = useState({});\r\n const [usageInvoicerAccount, setUsageInvoicerAccount] = useState({});\r\n const [summary, setSummary] = useState({ balance: '', balanceDue: '' });\r\n const [currencyFormatter, setCurrencyFormat] = React.useState();\r\n const [customerPortalSettings, setCustomerPortalSettings] = useState({});\r\n\r\n useEffect(() => {\r\n let currencyPromise = getCurrencyFormat(currentAccount.currencyCode);\r\n Promise.all([currencyPromise])\r\n .then((response) => {\r\n let [currencyFormatter] = response;\r\n setCurrencyFormat(currencyFormatter);\r\n if (currentAccount.isInvoicerAccount) {\r\n let portalSettings, invoiceData, summaryData;\r\n const portalConfig = getCurrentOwnerCustomerPortalSettings();\r\n const invoicePromise = getInvoices(\r\n currentAccount.uid,\r\n {\r\n pageNumber: 1,\r\n pageSize: 1,\r\n order: 'desc',\r\n orderBy: 'date'\r\n }\r\n );\r\n const summaryPromise = getAccountSummary(currentAccount.uid);\r\n Promise.all([portalConfig, invoicePromise, summaryPromise])\r\n .then((results) => {\r\n [portalSettings, invoiceData, summaryData] = results;\r\n let invoices = invoiceData.items.map(invoiceTransform);\r\n let invoice = (invoices.length > 0) ? invoices[0] : {};\r\n setCustomerPortalSettings(portalConfigTransform(portalSettings));\r\n setInvoice(invoice);\r\n if (summaryData !== undefined) {\r\n setSummary(summaryData);\r\n }\r\n setLoading(false);\r\n });\r\n } else {\r\n const invoicer = invoicerAccounts.find((account) => account.uid === currentAccount.invoicerAccountId);\r\n const usageInvoicer = invoicerAccounts.find((account) => account.uid === currentAccount.usageInvoicerAccountId);\r\n setInvoicerAccount(invoicer);\r\n setUsageInvoicerAccount(usageInvoicer);\r\n setLoading(false)\r\n }\r\n });\r\n }, [currentAccount, invoicerAccounts]);\r\n\r\n const onSuccessfulPayment = () => {\r\n getAccountSummary(currentAccount.uid).then((result) => {\r\n setSummary(result);\r\n })\r\n }\r\n\r\n let isPageWide = useMediaQuery('(min-width: 1240px)');\r\n let isPageBarelyWide = useMediaQuery('(min-width: 760px)');\r\n let cardSpacing = isPageWide ? 3 : isPageBarelyWide ? 6 : 12;\r\n\r\n return (\r\n loading ? :\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {\r\n (currentAccount.isInvoicerAccount) ?\r\n (\r\n ) :\r\n undefined\r\n }\r\n />\r\n ) : (\r\n \r\n )\r\n }\r\n \r\n \r\n {\r\n (currentAccount.isInvoicerAccount) ?\r\n (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n \r\n {\r\n (currentAccount.isInvoicerAccount) ?\r\n (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n \r\n {\r\n (currentAccount.isInvoicerAccount) ?\r\n (\r\n handleInvoiceDownloadClick(invoice.uid)}\r\n >\r\n View\r\n \r\n ) : undefined\r\n }\r\n />\r\n ) : (\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n )\r\n};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetAccountPackageSummary extends CustomerPortalApiCall {\r\n apiCall(currentAccountId, pageIndex, pageSize) {\r\n return this.apiManager.getAccountPackageSummary(currentAccountId, pageIndex, pageSize)\r\n }\r\n}\r\n\r\nconst getAccountPackageSummary = (currentAccountId, pageIndex, pageSize) => {\r\n return new GetAccountPackageSummary().execute(currentAccountId, pageIndex, pageSize);\r\n}\r\n\r\ngetAccountPackageSummary.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n accountId: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n accountPackageStatusTypeId: PropTypes.number,\r\n accountPackageStatusTypeName: PropTypes.string,\r\n nextBill: PropTypes.string.isRequired,\r\n quantity: PropTypes.number.isRequired,\r\n details: PropTypes.shape({\r\n temporalData: PropTypes.shape({\r\n items: PropTypes.array.isRequired,\r\n }),\r\n }),\r\n};\r\n\r\nexport default getAccountPackageSummary;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetServiceSummary extends CustomerPortalApiCall {\r\n apiCall(accountId) {\r\n return this.apiManager.getServiceSummary(accountId);\r\n }\r\n}\r\n\r\nconst getServiceSummary = (accountId) => {\r\n return new GetServiceSummary().execute(accountId);\r\n}\r\n\r\ngetServiceSummary.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n accountPackageId: PropTypes.number.isRequired,\r\n count: PropTypes.number.isRequired,\r\n serviceBaseTypeId: PropTypes.number.isRequired,\r\n serviceName: PropTypes.string.isRequired,\r\n serviceStatusTypeId: PropTypes.number,\r\n serviceStatusTypeName: PropTypes.string,\r\n};\r\n\r\nexport default getServiceSummary;","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetServiceStatusType extends CustomerPortalApiCall {\r\n apiCall(searchRequest) {\r\n return this.apiManager.serviceStatusType.all(searchRequest);\r\n }\r\n}\r\n\r\nconst getServiceStatusType = (searchRequest) => new GetServiceStatusType().execute(searchRequest);\r\n\r\ngetServiceStatusType.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n baseBillingStatusTypeId: PropTypes.number.isRequired,\r\n baseBillingStatusTypeName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getServiceStatusType;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetAccountPackageStatusType extends CustomerPortalApiCall {\r\n apiCall(searchRequest) {\r\n return this.apiManager.accountPackageStatusType.all(searchRequest);\r\n }\r\n}\r\n\r\nconst getAccountPackageStatusType = (searchRequest) => new GetAccountPackageStatusType().execute(searchRequest);\r\n\r\ngetAccountPackageStatusType.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n baseBillingStatusTypeId: PropTypes.number.isRequired,\r\n baseBillingStatusTypeName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n preventChanges: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default getAccountPackageStatusType;","import PropTypes from 'prop-types';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetAccountStatusType extends CustomerPortalApiCall {\r\n apiCall(searchRequest) {\r\n return this.apiManager.accountStatusType.all(searchRequest);\r\n }\r\n}\r\n\r\nconst getAccountStatusType = (searchRequest) => new GetAccountStatusType().execute(searchRequest);\r\n\r\ngetAccountStatusType.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n baseBillingStatusTypeId: PropTypes.number.isRequired,\r\n baseBillingStatusTypeName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n isDefault: PropTypes.bool.isRequired,\r\n preventChanges: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default getAccountStatusType;","import React from 'react';\r\n\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dialogTitle: {\r\n textAlign: 'center',\r\n },\r\n content: {\r\n textAlign: 'center',\r\n },\r\n icon: {\r\n fontSize: 60,\r\n },\r\n \r\n}));\r\n\r\nconst defaults = {\r\n confirmLabel: 'Yes',\r\n cancelLabel: 'No',\r\n Icon: InfoOutlinedIcon,\r\n}\r\n\r\nexport default function ConfirmDialog(props) {\r\n let {\r\n open,\r\n title,\r\n Icon,\r\n confirmLabel,\r\n handleConfirmClick,\r\n cancelLabel,\r\n handleCancelClick,\r\n content,\r\n } = props;\r\n const classes = useStyles();\r\n Icon = Icon ?? defaults.Icon;\r\n confirmLabel = confirmLabel ?? defaults.confirmLabel;\r\n cancelLabel = cancelLabel ?? defaults.cancelLabel;\r\n\r\n return (\r\n \r\n \r\n \r\n
{title}
\r\n
\r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\n\r\n","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostCancelAccountPackages extends CustomerPortalApiCall {\r\n apiCall(packageId) {\r\n let postBody = {\r\n billCancelOptionTypeId: 1, //Prorate Final Period Charge\r\n effectiveCancel: new Date(),\r\n waiveEarlyTerminationFee: false,\r\n }\r\n return this.apiManager.cancelAccountPackages.create(postBody, { masterId: packageId });\r\n }\r\n}\r\n\r\nconst postCancelAccountPackages = (packageId) => new PostCancelAccountPackages().execute(packageId);\r\n\r\nexport default postCancelAccountPackages;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\r\nimport ArrowForwardIosIcon from '@material-ui/icons/ArrowForwardIos';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { grayColor } from '../assets/jss/portalStyle';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\n\r\nconst useHeaderStyles = makeStyles({\r\n root: {\r\n fontWeight: '700',\r\n marginLeft: '6px',\r\n },\r\n headerBorder: {\r\n backgroundColor: grayColor[10],\r\n borderBottom: '1px solid rgba(224, 224, 224, 1)',\r\n },\r\n});\r\n\r\nfunction ServiceHeader(props) {\r\n const { row, startIdx, endIdx, leftClickHandler, rightClickHandler } = props;\r\n const { serviceStatusList } = row;\r\n const classes = useHeaderStyles();\r\n const disableLeftStatusScroll = startIdx === 0;\r\n const disableRightStatusScroll = endIdx >= serviceStatusList.length - 1;\r\n const visibleServiceStatusList = serviceStatusList.slice(startIdx, endIdx + 1);\r\n\r\n const matches = useMediaQuery('(min-width:768px)');\r\n\r\n return (\r\n \r\n \r\n Service\r\n {\r\n matches &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {visibleServiceStatusList.map((status) => {\r\n return (\r\n {status.name}\r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n Qty\r\n \r\n \r\n )\r\n}\r\n\r\nServiceHeader.propTypes = {\r\n row: PropTypes.shape({\r\n serviceStatusList: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n }))\r\n }),\r\n};\r\n\r\nexport default ServiceHeader;","import React from 'react'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\n\r\nconst useBorderlessStyle = makeStyles({\r\n root: {\r\n '& > *': {\r\n borderBottom: 'unset',\r\n },\r\n },\r\n caption: {\r\n '& > *': {\r\n borderBottom: 'unset',\r\n fontSize: 'x-small',\r\n paddingTop: '0px !important',\r\n },\r\n },\r\n emptyCell: {\r\n width: '15px'\r\n },\r\n serviceStatus: {\r\n width: '300px'\r\n }\r\n});\r\n\r\nexport default function ServiceListItem(props) {\r\n const { service, startIdx, endIdx } = props;\r\n const classes = useBorderlessStyle();\r\n const matches = useMediaQuery('(min-width:768px)');\r\n\r\n let serviceStatus = (counts) => {\r\n return counts.map((count, idx) => {\r\n return (\r\n {count}\r\n )\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {service.name}\r\n \r\n {\r\n matches &&\r\n <>\r\n \r\n {\r\n serviceStatus(service.serviceStatusCounts.slice(startIdx, endIdx + 1))\r\n }\r\n \r\n \r\n }\r\n {service.totalCount}\r\n \r\n \r\n \r\n {service.chargeType === 'Recurring Charge' ? service.chargeType : 'One Time Charge'} \r\n \r\n \r\n )\r\n}","import React, { useState } from 'react'\r\nimport clsx from 'clsx';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\nimport { grayColor, successColor, whiteColor, yellowColor } from '../assets/jss/portalStyle';\r\nimport ConfirmDialog from '../components/ConfirmDialog';\r\nimport postCancelAccountPackages from '../api/postCancelAccountPackages';\r\nimport ServiceHeader from './ServiceHeader';\r\nimport ServiceListItem from './ServiceListItem'\r\nimport { Typography } from '@material-ui/core';\r\nimport ProcessingDialog from 'components/ProcessingDialog';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n\r\nconst billingBaseTypeEnum = {\r\n BILLING: { uid: 1, caption: 'Billing' },\r\n NON_BILLABLE: { uid: 2, caption: 'Non-Billable' },\r\n CANCELED: { uid: 3, caption: 'Canceled' },\r\n}\r\n\r\nconst accountStatusBg = (uid) => {\r\n switch (uid) {\r\n case billingBaseTypeEnum.BILLING.uid: return { backgroundColor: successColor[0] };\r\n case billingBaseTypeEnum.NON_BILLABLE.uid: return { backgroundColor: yellowColor };\r\n case billingBaseTypeEnum.CANCELED.uid: return { backgroundColor: grayColor[3] };\r\n }\r\n};\r\n\r\nfunction RowAttributes(props) {\r\n const { nextBill, status, onCancelClick, preventChanges, allowCancelPackage, classes } = props;\r\n return (\r\n \r\n \r\n
Next Bill Date: {nextBill}
\r\n
\r\n \r\n
Status: {status}
\r\n
\r\n {allowCancelPackage && !preventChanges &&\r\n \r\n \r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nconst useRowStyles = makeStyles({\r\n root: {\r\n '& > *': {\r\n borderBottom: 'unset',\r\n fontSize: 'larger',\r\n },\r\n '&:not(:first-child)': {\r\n borderTop: '#e0e0e0 2px solid',\r\n },\r\n },\r\n headerTopBorder: {\r\n backgroundColor: grayColor[10],\r\n },\r\n headerBorder: {\r\n backgroundColor: grayColor[10],\r\n borderBottom: '1px solid rgba(224, 224, 224, 1)',\r\n },\r\n bolderFont: {\r\n fontWeight: '700',\r\n },\r\n gridCell: {\r\n flexGrow: 0\r\n },\r\n field: {\r\n width: '200px'\r\n },\r\n fieldLabel: {\r\n fontStyle: 'italic',\r\n fontWeight: '700',\r\n },\r\n statusLabel: {\r\n color: whiteColor,\r\n margin: 'auto',\r\n padding: '5px',\r\n fontSize: 'large',\r\n borderRadius: '5px',\r\n },\r\n smallerCell: {\r\n width: '150px',\r\n },\r\n cancelButton: {\r\n height: '20px',\r\n width: '60px',\r\n },\r\n confirmationBody: {\r\n color: 'rgb(0,0,0,0.65)',\r\n fontWeight: 700\r\n },\r\n});\r\n\r\nexport default function Row(props) {\r\n const { onCancelPackage, currentAccount, row, allowCancelPackage } = props;\r\n const { id, name, quantity, nextBill, services, status, statusId, baseBillingStatusTypeId, preventChanges } = row;\r\n const [openCancelModal, setOpenCancelModal] = useState(false);\r\n const [cancelApiCall, setCancelApiCall] = useState(null);\r\n const [serviceStatusStartIdx, setServiceStatusStartIdx] = useState(0);\r\n const [serviceStatusEndIdx, setServiceStatusEndIdx] = useState(1);\r\n const classes = useRowStyles();\r\n const statusCount = serviceStatusEndIdx - serviceStatusStartIdx + 1;\r\n const statusScrollCellCount = 2;\r\n const nameColSpan = 2;\r\n\r\n const handleLeftStatusScrollClick = () => {\r\n if (serviceStatusStartIdx > 0) {\r\n setServiceStatusStartIdx(serviceStatusStartIdx - 1);\r\n setServiceStatusEndIdx(serviceStatusEndIdx - 1);\r\n }\r\n };\r\n const handleRightStatusScrollClick = () => {\r\n setServiceStatusStartIdx(serviceStatusStartIdx + 1);\r\n setServiceStatusEndIdx(serviceStatusEndIdx + 1);\r\n }\r\n\r\n const handleCancelPackageClick = (e) => {\r\n setOpenCancelModal(true);\r\n }\r\n const handleConfirmClick = (e) => {\r\n const apiCall = postCancelAccountPackages(id).then(() => {\r\n onCancelPackage(id, statusId, nextBill);\r\n });\r\n\r\n setCancelApiCall(apiCall);\r\n setOpenCancelModal(false);\r\n }\r\n const handleCancelClick = () => {\r\n setOpenCancelModal(false);\r\n }\r\n\r\n const handleProcessingDialogClosed = () => {\r\n setCancelApiCall(null);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {name}\r\n \r\n Qty\r\n \r\n {status}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {quantity}\r\n \r\n \r\n {\r\n services.length > 0 &&\r\n \r\n }\r\n {\r\n services.map((service) => (\r\n \r\n ))\r\n }\r\n {\r\n \r\n \r\n Are you sure you want to cancel {quantity} packages?\r\n \r\n \r\n This action cannot be reversed\r\n \r\n \r\n }\r\n />\r\n }\r\n {\r\n cancelApiCall !== null &&\r\n \r\n }\r\n \r\n );\r\n}","const serviceChargeTypeEnum = {\r\n RECURRING: { uid: 1, caption: 'Recurring Charge' },\r\n ONE_TIME: { uid: 2, caption: 'One Time Charge' },\r\n};\r\n\r\nconst groupServicesByName = (serviceList) => {\r\n let uniqueServiceNames = serviceList.reduce((result, service) => {\r\n if (!result.includes(service.serviceName)) {\r\n result.push(service.serviceName);\r\n }\r\n return result;\r\n }, []);\r\n let groupedServices = uniqueServiceNames.map((serviceName) => {\r\n return serviceList.filter((service) => service.serviceName === serviceName);\r\n });\r\n return groupedServices;\r\n}\r\n\r\nexport default (packages, serviceSummary, dateFormatter, serviceStatusList, accountPackageStatusList, currentAccountStatus) => {\r\n if (dateFormatter === undefined || serviceStatusList.length === 0 || packages.length === 0) return [];\r\n return packages.map((item) => {\r\n const accountPackageStatus = item?.details?.temporalData?.items[0];\r\n const accountPackageStatusType = accountPackageStatusList.find(status => status.id === accountPackageStatus.accountPackageStatusTypeId);\r\n const preventChanges = (\r\n (currentAccountStatus !== undefined && currentAccountStatus.preventChanges) ||\r\n (accountPackageStatusType !== undefined && accountPackageStatusType.preventChanges)\r\n );\r\n const serviceList = serviceSummary.filter(service => service.accountPackageId === item.identity);\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n quantity: item.quantity,\r\n nextBill: dateFormatter.dbToUIDateTimeConvert(item.nextBill, true),\r\n status: accountPackageStatus.accountPackageStatusTypeName,\r\n statusId: accountPackageStatus.accountPackageStatusTypeId,\r\n preventChanges: preventChanges,\r\n baseBillingStatusTypeId: accountPackageStatusType.baseBillingStatusTypeId,\r\n serviceStatusList: serviceStatusList,\r\n services: (serviceList === undefined || !Array.isArray(serviceList)) ? [] :\r\n groupServicesByName(serviceList).map((services, serviceIdx) => {\r\n const firstService = services[0];\r\n const chargeType = firstService.serviceBaseTypeId === serviceChargeTypeEnum.RECURRING.uid ? serviceChargeTypeEnum.RECURRING\r\n : serviceChargeTypeEnum.ONE_TIME;\r\n let totalCount;\r\n let serviceStatusCounts = [];\r\n serviceStatusCounts = serviceStatusList.map((statusType) => {\r\n let selectedService = services.find((svc) => svc.serviceStatusTypeId === statusType.id);\r\n return (selectedService === undefined) ? 0 : selectedService.count * item.quantity;\r\n })\r\n totalCount = serviceStatusCounts.reduce((a, b) => a + b, 0); // Add the counts to get total count\r\n return {\r\n id: item.identity * 1000 + serviceIdx,\r\n name: firstService.serviceName,\r\n chargeType: chargeType.caption,\r\n serviceStatusCounts: serviceStatusCounts,\r\n totalCount: totalCount,\r\n }\r\n })\r\n }\r\n })\r\n}","import React, { useEffect, useState } from 'react'\r\nimport { usePagination, useTable } from 'react-table';\r\n\r\nimport { CircularProgress } from '@material-ui/core';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport MuiTable from '@material-ui/core/Table';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TablePagination from '@material-ui/core/TablePagination';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\n\r\nimport TablePaginationActions from '../components/TablePaginationActions';\r\nimport { bgShadeClass } from '../assets/jss/classes/bgShade'\r\nimport { portalConfigTransform } from '../helpers/transforms.js';\r\nimport { getCurrentOwnerCustomerPortalSettings } from '../helpers/getInfoFromCurrentUser'\r\nimport dateFormat from '../helpers/dateFormat';\r\nimport Header from '../components/Header';\r\nimport EmptyListMessage from '../components/EmptyListMessage';\r\nimport Loading from '../components/Loading';\r\nimport getAccountPackageSummary from '../api/getAccountPackageSummary';\r\nimport getServiceSummary from '../api/getServiceSummary';\r\nimport getServiceStatusType from '../api/getServiceStatusType';\r\nimport getAccountPackageStatusType from '../api/getAccountPackageStatusType';\r\nimport getAccountStatusType from '../api/getAccountStatusType';\r\n\r\nimport ServiceRow from './ServiceRow';\r\nimport transform from './transform';\r\n\r\nconst CANCELLED_BASE_STATUS_ID = 3;\r\nconst getServiceStatusList = () => {\r\n return new Promise((resolve) => {\r\n getServiceStatusType(\r\n { filters: [{ name: 'baseBillingStatusTypeId', operator: 'notEq', value: CANCELLED_BASE_STATUS_ID }] }\r\n ).then(result => {\r\n return resolve(result.map((item) => {\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n baseBillingStatusTypeId: item.baseBillingStatusTypeId\r\n };\r\n }))\r\n }).catch((err) => {\r\n console.error(err);\r\n resolve();\r\n });\r\n });\r\n};\r\n\r\nconst getAccountPackageStatusList = () => {\r\n return new Promise((resolve) => {\r\n getAccountPackageStatusType(\r\n ).then(result => {\r\n return resolve(result.map((item) => {\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n baseBillingStatusTypeId: item.baseBillingStatusTypeId,\r\n preventChanges: item.preventChanges,\r\n };\r\n }))\r\n }).catch((err) => {\r\n console.error(err);\r\n resolve();\r\n });\r\n });\r\n};\r\n\r\nconst getAccountStatusList = () => {\r\n return new Promise((resolve) => {\r\n getAccountStatusType(\r\n ).then(result => {\r\n return resolve(result.map((item) => {\r\n return {\r\n id: item.identity,\r\n name: item.name,\r\n baseBillingStatusTypeId: item.baseBillingStatusTypeId,\r\n preventChanges: item.preventChanges,\r\n };\r\n }))\r\n }).catch((err) => {\r\n console.error(err);\r\n resolve();\r\n });\r\n });\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n ...bgShadeClass,\r\n root: {\r\n overflow: 'auto',\r\n },\r\n pagination: {\r\n overflow: 'visible',\r\n }\r\n});\r\n\r\nconst screenId = 'portalScreen_Products';\r\n\r\nfunction Products(props) {\r\n const { currentAccount } = props;\r\n const defaultPageSize = 10;\r\n const defaultPageIndex = 1;\r\n const [data, setData] = useState([]);\r\n const [customerPortalConfig, setCustomerPortalConfig] = React.useState({});\r\n const [serviceSummary, setServiceSummary] = useState([]);\r\n const [serviceStatusList, setServiceStatusList] = useState([]);\r\n const [cancelledStatus, setCancelledStatus] = useState({});\r\n const [dateFormatter, setDateFormatter] = useState();\r\n const [loading, setLoading] = useState(true);\r\n const [pageCount, setPageCount] = useState(0);\r\n const [totalRows, setTotalRows] = useState(0);\r\n const [pageIdx, setPageIdx] = useState(defaultPageIndex);\r\n const [rowsPerPage, setRowsPerPage] = useState(defaultPageSize);\r\n const [accountPackageStatusList, setAccountPackageStatusList] = useState([]);\r\n const [accountStatusList, setAccountStatusList] = useState([]);\r\n\r\n const matches = useMediaQuery('(min-width:480px) and (min-height: 480px');\r\n\r\n const columns = React.useMemo(\r\n () => [\r\n {\r\n accessor: 'id', // accessor is the \"key\" in the data\r\n },\r\n {\r\n accessor: 'name',\r\n },\r\n {\r\n accessor: 'quantity',\r\n },\r\n {\r\n accessor: 'nextBill',\r\n },\r\n {\r\n accessor: 'status',\r\n },\r\n {\r\n accessor: 'statusId',\r\n },\r\n {\r\n accessor: 'baseBillingStatusTypeId',\r\n },\r\n {\r\n accessor: 'preventChanges',\r\n },\r\n {\r\n accessor: 'serviceStatusList',\r\n },\r\n {\r\n accessor: 'services',\r\n },\r\n ],\r\n []\r\n )\r\n\r\n const fetchData = React.useCallback(({ pageSize, pageIndex }) => {\r\n // This will get called when the table needs new data\r\n const currentAccountId = currentAccount.uid;\r\n pageIndex += 1;\r\n if ((pageSize === rowsPerPage && pageIndex === pageIdx) || currentAccountId === undefined ||\r\n dateFormatter === undefined) return;\r\n // Set the loading state\r\n setLoading(true);\r\n getAccountPackageSummary(currentAccountId, pageIndex, pageSize)\r\n .then((results) => {\r\n const packageSummary = results.items;\r\n let totalCount = results.totalCount;\r\n let currentAccountStatus = accountStatusList.find(accStatus => accStatus.id === currentAccount.accountStatusTypeId);\r\n setData(transform(packageSummary, serviceSummary, dateFormatter, serviceStatusList, accountPackageStatusList, currentAccountStatus));\r\n setPageCount(Math.ceil(totalCount / pageSize));\r\n setTotalRows(totalCount);\r\n setRowsPerPage(pageSize);\r\n setPageIdx(pageIndex);\r\n setLoading(false);\r\n });\r\n }, [rowsPerPage, pageIdx, currentAccount, serviceSummary, dateFormatter, serviceStatusList, accountPackageStatusList, accountStatusList]);\r\n\r\n const classes = useStyles();\r\n\r\n const onCancelPackage = (packageId, statusId, nextBill) => {\r\n setData(oldData => {\r\n return oldData.map(pkg => {\r\n if (pkg.id === packageId && pkg.statusId === statusId && pkg.nextBill === nextBill) {\r\n pkg.status = cancelledStatus.name;\r\n pkg.statusId = cancelledStatus.id;\r\n pkg.preventChanges = true;\r\n };\r\n return pkg;\r\n });\r\n })\r\n }\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n prepareRow,\r\n page,\r\n gotoPage,\r\n setPageSize,\r\n // Get the state from the instance\r\n state: { pageIndex, pageSize },\r\n } = useTable(\r\n {\r\n columns,\r\n data,\r\n initialState: { pageIndex: 0, pageSize: 10 }, // Pass our hoisted table state\r\n manualPagination: true, // Tell the usePagination hook that we'll handle our own data fetching\r\n // This means we'll also have to provide our own pageCount.\r\n pageCount,\r\n },\r\n usePagination\r\n );\r\n\r\n //Fetch all data needed on Initial Load\r\n useEffect(() => {\r\n let isMounted = true;\r\n const accountId = currentAccount.uid\r\n const dateTransformPromise = dateFormat();\r\n const serviceStatusPromise = getServiceStatusList();\r\n const accountPackageStatusPromise = getAccountPackageStatusList();\r\n const accountStatusPromise = getAccountStatusList();\r\n const portalConfigPromise = getCurrentOwnerCustomerPortalSettings();\r\n const packageSummaryPromise = getAccountPackageSummary(accountId, defaultPageIndex, defaultPageSize);\r\n const serviceSummaryPromise = getServiceSummary(accountId);\r\n Promise.all([packageSummaryPromise, serviceSummaryPromise, serviceStatusPromise, accountPackageStatusPromise, accountStatusPromise, dateTransformPromise, portalConfigPromise])\r\n .then((results) => {\r\n const [packageSummary, serviceSummary, serviceStatusList, accountPackageStatusList, accountStatusList, dateFormatter, portalConfig] = results;\r\n let accountPackageStatusCancelled = accountPackageStatusList.find(status => status.baseBillingStatusTypeId === CANCELLED_BASE_STATUS_ID)\r\n let currentAccountStatus = accountStatusList.find(accStatus => accStatus.id === currentAccount.accountStatusTypeId);\r\n let totalCount = packageSummary.totalCount;\r\n if (isMounted) {\r\n setData(transform(packageSummary.items, serviceSummary, dateFormatter, serviceStatusList, accountPackageStatusList, currentAccountStatus));\r\n setPageCount(Math.ceil(totalCount / defaultPageSize));\r\n setTotalRows(totalCount);\r\n setDateFormatter(dateFormatter);\r\n setServiceSummary(serviceSummary);\r\n setServiceStatusList(serviceStatusList);\r\n setCancelledStatus(accountPackageStatusCancelled);\r\n setCustomerPortalConfig(portalConfigTransform(portalConfig));\r\n setAccountPackageStatusList(accountPackageStatusList);\r\n setAccountStatusList(accountStatusList);\r\n setLoading(false);\r\n }\r\n })\r\n\r\n return () => isMounted = false;\r\n }, [currentAccount]);\r\n\r\n // Listen for changes in pagination and use the state to fetch our new data\r\n useEffect(() => {\r\n fetchData({ pageIndex, pageSize })\r\n }, [fetchData, pageIndex, pageSize]);\r\n\r\n return (\r\n loading ? :\r\n data.length === 0\r\n ?\r\n \r\n :\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {loading && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {!loading && data.length > 0 && page.map((pkg) => {\r\n prepareRow(pkg);\r\n return (\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n {!loading && (\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n ActionsComponent={TablePaginationActions}\r\n />\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default Products;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass GetUsage extends CustomerPortalApiCall {\r\n apiCall(accountId, usageMonth, usageYear, pageOptions) {\r\n let requestOptions = {\r\n masterId: accountId,\r\n queryParameters: {\r\n usageMonth: usageMonth,\r\n usageYear: usageYear,\r\n },\r\n ReadRequest: { filters:[\r\n 'accountName', 'serviceName',\r\n 'packageName', 'udrUsageIdentifier', 'usageBaseUnitName', 'usageYear', 'usageMonth',\r\n 'usageBillPeriodStartDate', 'usageTotal', 'displayUsageTotal'\r\n ]}\r\n };\r\n return this.apiManager.monthlyUsageSummary.paged(\r\n pageOptions.pageNumber,\r\n pageOptions.pageSize,\r\n undefined,\r\n requestOptions\r\n )\r\n }\r\n}\r\n\r\n\r\nconst getUsage = (accountId, usageMonth, usageYear, pageOptions) => new GetUsage().execute(accountId, usageMonth, usageYear, pageOptions);\r\n\r\ngetUsage.propTypes = {\r\n identity: PropTypes.number.isRequired,\r\n serviceName: PropTypes.string.isRequired,\r\n packageName: PropTypes.string.isRequired,\r\n usageIdentifier: PropTypes.string.isRequired,\r\n frequency: PropTypes.number.isRequired,\r\n frequencyUnit: PropTypes.string.isRequired,\r\n usage: PropTypes.number.isRequired,\r\n usageUnit: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default getUsage;\r\n\r\n","import React, { useCallback, useEffect } from 'react'\r\nimport dayjs from '../assets/dayjsPlugins.js';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\n\r\nimport getUsage from '../api/getUsage';\r\nimport Header from '../components/Header';\r\nimport Loading from '../components/Loading';\r\nimport Table, { classNames } from '../components/Table';\r\n\r\nimport DownloadUsageDialog from './helpers/downloadUsageDialog';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n },\r\n selectEmpty: {\r\n fontSize: 'small',\r\n marginTop: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst columns = [\r\n {\r\n accessor: 'col1',\r\n align: 'left',\r\n className: classNames.STRING,\r\n columnName: 'product',\r\n id: 'ColumnHeaderProduct',\r\n isSortable: false,\r\n width: '55%',\r\n Header: 'Product',\r\n Cell: row => {\r\n return (\r\n
\r\n {row.value.serviceName}
\r\n {row.value.packageName}\r\n
\r\n )\r\n },\r\n },\r\n {\r\n accessor: 'col2',\r\n align: 'center',\r\n className: classNames.STRING,\r\n columnName: 'usageIdentifier',\r\n id: 'ColumnHeaderUsageIdentifier',\r\n isSortable: false,\r\n width: '30%',\r\n Header: 'Usage Identifier',\r\n },\r\n {\r\n accessor: 'col3',\r\n align: 'center',\r\n className: classNames.STRING,\r\n columnName: 'totalCharge',\r\n id: 'ColumnHeaderTotalUsed',\r\n isSortable: false,\r\n width: '15%',\r\n Header: 'Total Used',\r\n },\r\n];\r\n\r\nconst setUsageBillingPeriods = (usageBillDay, locale) => {\r\n const now = dayjs();\r\n const month = now.month() + 1,\r\n year = now.year();\r\n let startDateFirstPeriod = dayjs.utc(`${year}-${month}-${usageBillDay}`, 'YYYY-M-D');\r\n // if before the bill day, start a month earlier\r\n if (now.isBefore(startDateFirstPeriod, 'day')) {\r\n startDateFirstPeriod = startDateFirstPeriod.subtract(1, 'months');\r\n }\r\n\r\n const setEndDate = (startDate) => {\r\n return dayjs(startDate).add(1, 'months').subtract(1, 'days');\r\n }\r\n let endDateFirstPeriod = setEndDate(startDateFirstPeriod);\r\n\r\n const fnPeriodMap = (monthOffset) => {\r\n if (monthOffset > 0) {\r\n startDateFirstPeriod = startDateFirstPeriod.subtract(1, 'months');\r\n endDateFirstPeriod = setEndDate(startDateFirstPeriod);\r\n }\r\n \r\n return {\r\n id: monthOffset + 1,\r\n start: startDateFirstPeriod.locale(locale).format('MMM DD YYYY'),\r\n end: endDateFirstPeriod.locale(locale).format('MMM DD YYYY'),\r\n month: startDateFirstPeriod.month() + 1,\r\n year: startDateFirstPeriod.year(),\r\n }\r\n }\r\n // 18 months\r\n return [...Array(18).keys()].map(fnPeriodMap);\r\n}\r\n\r\nconst screenId = 'portalScreen_Usage';\r\n\r\nfunction Usage(props) {\r\n const { currentAccount, currentLocale } = props;\r\n const classes = useStyles();\r\n const [usageBillingPeriod, setUsageBillingPeriod] = React.useState('1'); // current billing period\r\n // We'll start our table without any data\r\n const [data, setData] = React.useState([]);\r\n const [loading, setLoading] = React.useState(true);\r\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\r\n const [usageLoading, setUsageLoading] = React.useState(false);\r\n const [usageBillingPeriodList, setUsageBillingPeriodList] = React.useState([]);\r\n const [totalRows, setTotalRows] = React.useState(0);\r\n const [pageCount, setPageCount] = React.useState(0);\r\n const [pageIdx, setPageIdx] = React.useState(1);\r\n const [rowsPerPage, setPageSize] = React.useState(10);\r\n\r\n const handleBillingPeriodChange = (event) => {\r\n const currentPageIdx = pageIdx;\r\n setUsageBillingPeriod(event.target.value);\r\n setPageIdx(1);\r\n if (currentPageIdx !== pageIdx) {\r\n fetchUsage({ pageIndex: pageIdx, pageSize: rowsPerPage })\r\n }\r\n };\r\n\r\n const usageTransform = (item) => {\r\n return {\r\n id: item.identity,\r\n col1: {\r\n serviceName: item.serviceName,\r\n packageName: item.packageName\r\n },\r\n col2: item.udrUsageIdentifier,\r\n col3: `${item.displayUsageTotal}`,\r\n };\r\n };\r\n\r\n useEffect(() => {\r\n const usageBillDay = currentAccount.usageBillDay;\r\n const usagePeriodList = setUsageBillingPeriods(usageBillDay, currentLocale);\r\n setUsageBillingPeriodList(usagePeriodList);\r\n setLoading(false);\r\n }, [currentAccount])\r\n\r\n\r\n const openDownloadDialog = function () {\r\n setIsDialogOpen(true);\r\n }\r\n\r\n const onUsageDialogClose = function () {\r\n setIsDialogOpen(false);\r\n }\r\n\r\n const downloadUsage = useCallback(({ pageSize, pageIndex }) => {\r\n const accountId = currentAccount.uid\r\n const usagePeriod = usageBillingPeriodList.find((period) => period.id === parseInt(usageBillingPeriod));\r\n if (accountId === undefined) return;\r\n return getUsage(\r\n accountId,\r\n usagePeriod.month,\r\n usagePeriod.year,\r\n {\r\n pageNumber: pageIndex,\r\n pageSize,\r\n }\r\n )\r\n }, [currentAccount, usageBillingPeriod, usageBillingPeriodList]);\r\n\r\n const fetchUsage = useCallback(({ pageSize, pageIndex }) => {\r\n // This will get called when the table needs new data like page size change or page# change\r\n const accountId = currentAccount.uid\r\n const usagePeriod = usageBillingPeriodList.find((period) => period.id === parseInt(usageBillingPeriod));\r\n if (accountId === undefined) return;\r\n pageIndex += 1;\r\n // Set the loading state\r\n setUsageLoading(true);\r\n\r\n getUsage(\r\n accountId,\r\n usagePeriod.month,\r\n usagePeriod.year,\r\n {\r\n pageNumber: pageIndex,\r\n pageSize,\r\n }\r\n ).then((results) => {\r\n let usage = results.items;\r\n let totalCount = results.totalCount;\r\n setData(usage);\r\n setPageCount(Math.ceil(totalCount / pageSize));\r\n setTotalRows(totalCount);\r\n setPageSize(pageSize);\r\n setPageIdx(pageIndex);\r\n setUsageLoading(false);\r\n });\r\n }, [currentAccount, usageBillingPeriod, usageBillingPeriodList]);\r\n\r\n return (\r\n loading ? :\r\n <>\r\n \r\n \r\n
\r\n \r\n {(totalRows > 0) && (\r\n \r\n <>\r\n }\r\n onClick={openDownloadDialog}\r\n disableElevation>\r\n Download\r\n \r\n period.id === parseInt(usageBillingPeriod))}\r\n totalCount={totalRows}\r\n fetchData={downloadUsage}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n Select Period\r\n \r\n {usageBillingPeriodList.map((periodItem) => {\r\n return (\r\n {periodItem.start} - {periodItem.end}\r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n {(!usageLoading) && (totalRows <= 0) && (\r\n
\r\n
\r\n
\r\n \r\n No usage found for the selected period\r\n \r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default Usage;","import React from \"react\";\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\n\r\nconst styles = (theme) => ({\r\n caption: {\r\n fontSize: 'smaller',\r\n },\r\n text: {\r\n fontWeight: 'bold',\r\n },\r\n spacer: {\r\n height: theme.spacing(1),\r\n }\r\n});\r\n\r\nfunction ReadOnlyField (props) {\r\n const { classes, caption, text } = props;\r\n return (\r\n <>\r\n {caption}\r\n \r\n {text}\r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(ReadOnlyField);","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostUserPasswordChange extends CustomerPortalApiCall {\r\n apiCall(data) {\r\n return this.apiManager.portalUserPasswordChange.create(data);\r\n }\r\n}\r\n\r\nconst postUserPasswordChange = (data) => new PostUserPasswordChange().execute(data);\r\nexport default postUserPasswordChange;","import React from 'react';\r\n\r\nimport { withStyles } from \"@material-ui/core\"\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nimport TextFieldWithOnEnterAction from './TextFieldWithOnEnterAction'\r\n\r\nconst styles = (theme) => {\r\n\r\n}\r\n\r\nfunction ChangePasswordFields (props) {\r\n const { password, confirmPassword, confirmPasswordError, onEnterPress} = props;\r\n return (\r\n <>\r\n \r\n 0}\r\n helperText={confirmPasswordError}\r\n onChange={confirmPassword.onChange}\r\n onEnterPress={onEnterPress}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(ChangePasswordFields);","import React from 'react';\r\nimport { withStyles } from \"@material-ui/core\";\r\n\r\nconst styles = (theme) => ({\r\n listItem: {\r\n color: 'red'\r\n }\r\n})\r\n\r\nfunction ValidationErrors (props) {\r\n const { classes, validationErrors } = props;\r\n if (!Array.isArray(validationErrors) || validationErrors.length <= 0) {\r\n return false;\r\n }\r\n return (\r\n
    \r\n {validationErrors.map((error, idx) => (\r\n
  • \r\n {error.message}\r\n
  • \r\n ))}\r\n
\r\n )\r\n}\r\n\r\nexport default withStyles(styles)(ValidationErrors)","import React, { useState } from 'react';\r\n\r\nimport { withStyles } from \"@material-ui/core\"\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nimport postUserPasswordChange from '../api/postUserPasswordChange'\r\nimport { getUserName } from '../user/authService'\r\nimport ChangePasswordFields from './ChangePasswordFields';\r\nimport ValidationErrors from './ValidationErrors';\r\n\r\nconst styles = (theme) => ({\r\n dialogButton: {\r\n margin: theme.spacing(2),\r\n },\r\n})\r\n\r\nfunction ChangePasswordDialog(props) {\r\n const { classes, onClose } = props;\r\n const [currentPassword, setCurrentPassword] = useState('');\r\n const [newPassword, setNewPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [confirmPasswordError, setConfirmPasswordError] = useState('');\r\n const [validationErrors, setValidationErrors] = useState([]);\r\n const [isChangingPassword, setIsChangingPassword] = useState(false);\r\n\r\n const currentPasswordChangeHandler = (event) => {\r\n setCurrentPassword(event.target.value);\r\n setValidationErrors([]);\r\n };\r\n\r\n const passwordChangeHandler = (event) => {\r\n if (confirmPassword.length > 0) {\r\n updateConfirmPasswordError(event.target.value, confirmPassword);\r\n }\r\n setNewPassword(event.target.value);\r\n setValidationErrors([]);\r\n };\r\n\r\n const passwordConfirmChangeHandler = (event) => {\r\n updateConfirmPasswordError(newPassword, event.target.value);\r\n setConfirmPassword(event.target.value);\r\n setValidationErrors([]);\r\n };\r\n\r\n const updateConfirmPasswordError = (pass, confirmPass) => {\r\n setConfirmPasswordError(pass !== confirmPass ? 'Passwords do not match' : '');\r\n }\r\n\r\n const submitHandler = async (e) => {\r\n let postBody = {\r\n userName: await getUserName(),\r\n clearTextPassword: currentPassword,\r\n clearTextNewPassword: newPassword,\r\n clearTextConfirmPassword: confirmPassword,\r\n }\r\n\r\n setIsChangingPassword(true);\r\n postUserPasswordChange(postBody).then(() => {\r\n setValidationErrors([]);\r\n if (typeof (onClose) === 'function') {\r\n onClose();\r\n }\r\n }).catch((error) => {\r\n let response = error.response;\r\n if (response !== undefined && response.data !== undefined && Array.isArray(response.data.messages)) {\r\n setValidationErrors(response.data.messages);\r\n }\r\n }).finally(() => setIsChangingPassword(false));\r\n };\r\n\r\n const cancelHandler = (e) => {\r\n if (typeof (onClose) === 'function') {\r\n onClose();\r\n }\r\n }\r\n\r\n const isValidSubmit = (\r\n currentPassword.length > 0 &&\r\n newPassword.length > 0 &&\r\n confirmPassword === newPassword\r\n );\r\n return (\r\n <>\r\n {\r\n if (reason !== 'backdropClick') {\r\n onClose(event, reason);\r\n }\r\n }}\r\n disableEscapeKeyDown\r\n >\r\n \r\n Change Password\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n Save\r\n \r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(ChangePasswordDialog);\r\n\r\n\r\n","import React from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core';\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nimport ReadOnlyField from '../../components/ReadOnlyField';\r\nimport ChangePasswordDialog from '../../components/ChangePasswordDialog'\r\n\r\nconst styles = (theme) => ({\r\n readOnlyField: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n});\r\n\r\nfunction UserDetail (props) {\r\n const { classes, customerPortalUser } = props;\r\n const [openModal, setOpenModal] = React.useState(false);\r\n\r\n const handleModalOpen = async () => {\r\n setOpenModal(true);\r\n };\r\n\r\n const handleModalClose = async () => {\r\n setOpenModal(false);\r\n };\r\n\r\n const items = [\r\n { caption: 'Account', text: customerPortalUser.accountName },\r\n { caption: 'Status', text: customerPortalUser.isActive ? 'Active' : 'Inactive' },\r\n { caption: 'Name', text: `${customerPortalUser.firstName} ${customerPortalUser.lastName}` },\r\n { caption: 'Email', text: customerPortalUser.email },\r\n { caption: 'Username', text: customerPortalUser.name },\r\n ]\r\n\r\n return (\r\n <>\r\n {\r\n items.map((item) => {\r\n return
\r\n \r\n
\r\n })\r\n }\r\n \r\n Change Password\r\n \r\n { openModal && }\r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(UserDetail)","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport ReadOnlyField from '../../components/ReadOnlyField';\r\n\r\nconst styles = (theme) => ({\r\n readOnlyField: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n changePassword: {\r\n marginTop: theme.spacing(1),\r\n }\r\n});\r\n\r\nfunction BillingInformation (props) {\r\n const { classes, currentAccount } = props;\r\n\r\n const items = [\r\n { caption: 'Currency', text: currentAccount.currencyCode },\r\n { caption: 'Payment Term', text: currentAccount.accountsReceivableTermsName },\r\n { caption: 'Invoice Delivery', text: currentAccount.invoiceDeliveryName },\r\n { caption: 'Bill Day', text: currentAccount.billDay },\r\n { caption: 'Usage Bill Day', text: currentAccount.usageBillDay },\r\n ]\r\n\r\n return (\r\n <>\r\n {\r\n items.map((item) => {\r\n return
\r\n \r\n
\r\n })\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(BillingInformation)","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PutPaymentMethod extends CustomerPortalApiCall {\r\n apiCall(data) {\r\n return this.apiManager.paymentMethod.update(data);\r\n }\r\n}\r\n\r\nconst putPaymentMethod = (data) => new PutPaymentMethod().execute(data);\r\nexport default putPaymentMethod;","import CustomerPortalApiCall from './CustomerPortalApiCall';\r\n\r\nclass PostSetPaymentMethodAsDefault extends CustomerPortalApiCall {\r\n apiCall(paymentMethodId) {\r\n return this.apiManager.postSetPaymentMethodAsDefault(paymentMethodId)\r\n }\r\n}\r\n\r\nconst postSetPaymentMethodAsDefault = (paymentMethodId) => new PostSetPaymentMethodAsDefault().execute(paymentMethodId);\r\nexport default postSetPaymentMethodAsDefault;","import React, { useState, useCallback } from 'react';\r\nimport {\r\n makeStyles, Dialog, DialogTitle, DialogContent, DialogActions, Button,\r\n Checkbox, FormControl, FormControlLabel, Grid, TextField, IconButton\r\n} from '@material-ui/core';\r\nimport putPaymentMethod from '../../../api/putPaymentMethod';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { DataEnums } from '@lb/utils/enums';\r\nimport ValidationErrors from '../../../components/ValidationErrors';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n formBody: {\r\n marginBlock: '8px'\r\n },\r\n formControl: {\r\n marginBlock: '6px'\r\n },\r\n spreedlyInput: {\r\n borderBottom: '1px',\r\n height: '48px'\r\n }\r\n}));\r\n\r\nconst EditPaymentDialog = (props) => {\r\n const { autopay, isActive, paymentMethodId, disabled, name, accountNumber, paymentMethodBaseId, hasDefault, paymentMethodNameList, onSuccessfulPayment } = props;\r\n const classes = useStyles();\r\n const [newName, setNewName] = useState(name);\r\n const [open, setOpen] = React.useState(false);\r\n const [defaultModalCheck, setDefaultModalCheck] = useState(autopay);\r\n const [activeModalCheck, setActiveModalCheck] = useState(isActive);\r\n const [validationErrors, setValidationErrors] = useState([]);\r\n\r\n const handleOpen = () => {\r\n setNewName(name);\r\n setDefaultModalCheck(autopay);\r\n setActiveModalCheck(isActive);\r\n setOpen(true);\r\n };\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const saveClose = useCallback(() => {\r\n setValidationErrors([]);\r\n if (paymentMethodNameList.includes(newName) && newName !== name) {\r\n setValidationErrors([{ error: 'Invalid Name', message: 'Name is already in use.' }]);\r\n return\r\n }\r\n if (newName === undefined || newName === null || newName === '') {\r\n setValidationErrors([{ error: 'Invalid Name', message: 'Invalid Name.' }]);\r\n return\r\n }\r\n const putBody = {\r\n name: newName,\r\n identity: paymentMethodId,\r\n isActive: activeModalCheck,\r\n autopay: activeModalCheck ? defaultModalCheck : false,\r\n };\r\n putPaymentMethod(putBody).then(() => onSuccessfulPayment());\r\n setValidationErrors([]);\r\n handleClose();\r\n }, [defaultModalCheck, activeModalCheck, paymentMethodId, newName]);\r\n\r\n return (props !== undefined) && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Edit Payment Method\r\n \r\n \r\n \r\n setNewName(event.target.value)}\r\n label='Name'\r\n fullWidth\r\n />\r\n \r\n \r\n \r\n {\r\n (\r\n <>\r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n setActiveModalCheck(event.target.checked)}\r\n />\r\n }\r\n label='Active'\r\n />\r\n \r\n \r\n setDefaultModalCheck(event.target.checked)}\r\n />\r\n }\r\n label='Default'\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\nexport default EditPaymentDialog;\r\n","import React from 'react'\r\n\r\nimport { withStyles } from '@material-ui/core';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Switch from '@material-ui/core/Switch';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nimport { DataEnums } from '@lb/utils/enums';\r\nimport ReadOnlyField from '../../../components/ReadOnlyField';\r\nimport EditPaymentDialog from './EditPaymentDialog';\r\n\r\nconst styles = () => ({\r\n badgeCell: {\r\n display: 'flex',\r\n },\r\n});\r\n\r\nfunction PaymentMethodRow(props) {\r\n const { paymentMethod, customerPortalSettings, handleIsActiveChange, handleIsDefaultChange,\r\n accountId, hasDefault, paymentMethodNameList, onSuccessfulPayment } = props;\r\n\r\n const handleEditPaymentMethod = (e, fnUpdate) => {\r\n fnUpdate(e, paymentMethod.identity);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleEditPaymentMethod(e, handleIsActiveChange)}\r\n />\r\n }\r\n />\r\n handleEditPaymentMethod(e, handleIsDefaultChange)}\r\n />\r\n }\r\n />\r\n \r\n }\r\n />\r\n {/* {\r\n isUpdating && \r\n } */}\r\n \r\n\r\n \r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(PaymentMethodRow)\r\n","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nexport default (props) => {\r\n return \r\n This account currently does not have any payment methods.\r\n ;\r\n}","import { v4 as uuid } from 'uuid';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\nimport { guid } from '../helpers/numberFormat';\r\nconst generateName = (data, paymentMethod) => {\r\n if (data.name !== undefined && data.name !== '') {\r\n return data.name;\r\n } else {\r\n return `ACH ${paymentMethod.accountNumber.slice(-4)} ${guid()}`;\r\n }\r\n};\r\nclass PostPaymentMethodBankAccount extends CustomerPortalApiCall {\r\n apiCall(data, paymentMethod) {\r\n let payload;\r\n payload = {\r\n accountId: data.accountId,\r\n accountNumber: paymentMethod.accountNumber,\r\n routingNumber: paymentMethod.routingNumber,\r\n firstName: paymentMethod.firstName,\r\n lastName: paymentMethod.lastName,\r\n autopay: data.autopay,\r\n isActive: data.isActive,\r\n name: generateName(data, paymentMethod),\r\n }\r\n return this.apiManager.paymentMethodBankAccount.create(payload);\r\n }\r\n}\r\n\r\nconst postPaymentMethodBankAccount = (data, paymentMethod) => new PostPaymentMethodBankAccount().execute(data, paymentMethod);\r\nexport default postPaymentMethodBankAccount;","import { v4 as uuid } from 'uuid';\r\nimport CustomerPortalApiCall from './CustomerPortalApiCall';\r\nimport { guid } from '../helpers/numberFormat';\r\nconst generateName = (data, paymentMethod) => {\r\n if (data.name !== undefined && data.name !== '') {\r\n return data.name;\r\n } else {\r\n return `${paymentMethod.card_type} ${paymentMethod.last_four_digits} ${guid()}`;\r\n }\r\n};\r\nclass PostPaymentMethodCreditCard extends CustomerPortalApiCall {\r\n apiCall(data, paymentMethod) {\r\n let payload;\r\n payload = {\r\n accountId: data.accountId,\r\n autopay: data.autopay,\r\n description: null,\r\n isActive: data.isActive,\r\n name: generateName(data, paymentMethod),\r\n paymentMethodToken: paymentMethod.token,\r\n }\r\n return this.apiManager.paymentMethodCreditCard.create(payload);\r\n }\r\n}\r\n\r\nconst postPaymentMethodCreditCard = (data, paymentMethod) => new PostPaymentMethodCreditCard().execute(data, paymentMethod);\r\nexport default postPaymentMethodCreditCard","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n makeStyles, Dialog, DialogTitle, DialogContent, DialogActions, Button, Checkbox, FormControl,\r\n FormControlLabel, FormHelperText, Grid, OutlinedInput, InputLabel, MenuItem, Select, TextField\r\n} from '@material-ui/core';\r\n\r\nimport getPaymentConfiguration from '../../../api/getPaymentConfiguration';\r\nimport postPaymentMethodBankAccount from 'api/postPaymentMethodBankAccount';\r\nimport postPaymentMethodCreditCard from 'api/postPaymentMethodCC';\r\nimport { createCSSText, defaultSpreedlySetup, initializeSpreedly } from '../../../invoices/MakePaymentDialog';\r\nimport ValidationErrors from '../../../components/ValidationErrors';\r\n\r\nconst textValidator = new RegExp(/^[a-zA-Z0-9]*$/);\r\nconst bankAccountNumberValidator = new RegExp(/^[0-9 ]+$/);\r\nconst bankRoutingNumberValidator = new RegExp(/^[0-9]{9}$/);\r\nconst PaymentTypeEnum = { NONE: '', CREDIT_CARD: 'CC', ACH: 'ACH' };\r\nconst useStyles = makeStyles(() => ({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n formBody: {\r\n marginBlock: '8px'\r\n },\r\n formControl: {\r\n marginBlock: '6px'\r\n },\r\n spreedlyInput: {\r\n borderBottom: '1px',\r\n height: '48px'\r\n }\r\n}));\r\n\r\nconst isValueNonEmpty = (value) => {\r\n return value !== undefined && value !== null && value.length > 0 && value !== '';\r\n}\r\nconst validateNewCreditCard = (firstName, lastName, expiryMonth, expiryYear) => {\r\n return (\r\n isValueNonEmpty(firstName) &&\r\n isValueNonEmpty(lastName) &&\r\n isValueNonEmpty(expiryMonth) &&\r\n isValueNonEmpty(expiryYear)\r\n )\r\n}\r\n\r\nconst validateNewACH = (firstName, lastName, routingNumber, accountNumber) => {\r\n return (\r\n isValueNonEmpty(firstName) &&\r\n isValueNonEmpty(lastName) &&\r\n isValueNonEmpty(routingNumber) &&\r\n isValueNonEmpty(accountNumber)\r\n )\r\n}\r\n\r\nfunction AddPaymentDialog(props) {\r\n const { currentAccountId, hasDefault, paymentMethodNameList, onSuccessfulPayment } = props;\r\n const classes = useStyles();\r\n const [name, setName] = useState('');\r\n const [environmentKey, setEnvironmentKey] = useState('');\r\n const [paymentMethod, setPaymentMethod] = useState('');\r\n const [firstName, setFirstName] = useState('');\r\n const [lastName, setLastName] = useState('');\r\n const [defaultPaymentCheck, setDefaultPaymentCheck] = useState(false);\r\n\r\n const [spreedlyVisible, setSpreedlyVisible] = useState(true);\r\n const [spreedlyReady, setSpreedlyReady] = useState(false);\r\n // const [spreedlyValid, setSpreedlyValid] = useState(true);\r\n const [save, setSave] = useState(false);\r\n\r\n const spreedlyCreditInput = useRef(null);\r\n const [spreedlyCreditError, setSpreedlyCreditError] = useState('');\r\n const [spreedlyCVVValid, setSpreedlyCVVValid] = useState(false);\r\n const [spreedlyCVVError, setSpreedlyCVVError] = useState('');\r\n const [spreedlyDateError, setSpreedlyDateError] = useState('');\r\n const [accountNumberError, setAccountNumberError] = useState('');\r\n const [routingNumberError, setRoutingNumberError] = useState('');\r\n const [expiry, setExpiry] = useState({});\r\n\r\n const [accountNumber, setAccountNumber] = useState('');\r\n const [routingNumber, setRoutingNumber] = useState('');\r\n const [accountId] = useState(currentAccountId);\r\n const [dialogOpen, setDialogOpen] = useState(false);\r\n const [validationErrors, setValidationErrors] = useState([]);\r\n\r\n const closeDialog = useCallback(() => {\r\n const Spreedly = window.Spreedly;\r\n setPaymentMethod('');\r\n setSpreedlyVisible(false);\r\n setSave(false);\r\n setSpreedlyCreditError('');\r\n setSpreedlyCVVError('');\r\n setSpreedlyDateError('');\r\n setAccountNumberError('');\r\n setRoutingNumberError('');\r\n setSpreedlyCVVValid(false);\r\n setSave(false);\r\n setValidationErrors([]);\r\n setName('');\r\n if (Spreedly.isLoaded()) {\r\n Spreedly.removeHandlers();\r\n Spreedly.unload();\r\n }\r\n setDialogOpen(false);\r\n });\r\n\r\n const saveACHPaymentCallback = useCallback((paymentMethod) => {\r\n if (paymentMethod?.accountNumber !== undefined) {\r\n console.log(paymentMethod?.accountNumber);\r\n } else {\r\n console.error('Unexpected Error Occurred - Closing Dialog')\r\n }\r\n\r\n const data = {\r\n name: name,\r\n accountId: accountId,\r\n autopay: defaultPaymentCheck,\r\n isActive: defaultPaymentCheck ? defaultPaymentCheck : false,\r\n }\r\n\r\n postPaymentMethodBankAccount(data, paymentMethod)\r\n .then(() => onSuccessfulPayment())\r\n .catch((e) => console.error(e));\r\n closeDialog();\r\n }, [accountId, closeDialog, defaultPaymentCheck, name]);\r\n\r\n const saveCCPaymentCallback = useCallback((token, paymentMethod) => {\r\n if (token !== undefined) {\r\n console.log(token)\r\n console.log(paymentMethod)\r\n } else {\r\n console.error('Unexpected Error Occurred - Closing Dialog')\r\n }\r\n\r\n const data = {\r\n name: name,\r\n accountId: accountId,\r\n autopay: defaultPaymentCheck,\r\n isActive: defaultPaymentCheck ? defaultPaymentCheck : false,\r\n }\r\n postPaymentMethodCreditCard(data, paymentMethod)\r\n .then(() => onSuccessfulPayment())\r\n .catch((e) => console.error(e));\r\n\r\n closeDialog();\r\n }, [accountId, closeDialog, defaultPaymentCheck, name]);\r\n\r\n const saveClose = useCallback(() => {\r\n setAccountNumberError('');\r\n setRoutingNumberError('');\r\n setValidationErrors([]);\r\n if (paymentMethod === PaymentTypeEnum.NONE) return;\r\n if (firstName === '' || lastName === '') return;\r\n if (paymentMethod === PaymentTypeEnum.CREDIT_CARD && expiry.month === undefined) return;\r\n if (!textValidator.test(name) && name === '') {\r\n setValidationErrors([{ error: 'Invalid Name', message: 'Name must not be empty and no special characters.' }]);\r\n return;\r\n };\r\n if (paymentMethodNameList.includes(name)) {\r\n setValidationErrors([{ error: 'Invalid Name', message: 'Name is already in use.' }]);\r\n return\r\n }\r\n if (paymentMethod === PaymentTypeEnum.ACH && (!bankRoutingNumberValidator.test(routingNumber) || !bankAccountNumberValidator.test(accountNumber))) {\r\n if (!bankRoutingNumberValidator.test(routingNumber)) {\r\n setRoutingNumberError('Invalid Routing Number.');\r\n }\r\n if (!bankAccountNumberValidator.test(accountNumber)) {\r\n setAccountNumberError('Invalid Account Number.');\r\n }\r\n return;\r\n }\r\n\r\n if (paymentMethod === PaymentTypeEnum.CREDIT_CARD) {\r\n const Spreedly = window.Spreedly;\r\n let requiredFields = {\r\n first_name: firstName,\r\n last_name: lastName,\r\n month: expiry.month,\r\n year: expiry.year\r\n };\r\n Spreedly.tokenizeCreditCard(requiredFields);\r\n } else {\r\n saveACHPaymentCallback({ firstName, lastName, accountNumber, routingNumber });\r\n }\r\n setValidationErrors([]);\r\n }, [paymentMethod, saveACHPaymentCallback, name,\r\n firstName, lastName,\r\n expiry,\r\n accountNumber, routingNumber\r\n ]);\r\n\r\n const spreedlyOnReady = useCallback(() => {\r\n const Spreedly = window.Spreedly;\r\n let compStyle = window.getComputedStyle(spreedlyCreditInput.current);\r\n let style = createCSSText({\r\n font: compStyle.font,\r\n width: '95%',\r\n });\r\n Spreedly.setFieldType('number', 'text');\r\n Spreedly.setNumberFormat('prettyFormat');\r\n Spreedly.setStyle('number', style);\r\n Spreedly.setStyle('cvv', style);\r\n setSpreedlyReady(true);\r\n }, [spreedlyCreditInput]);\r\n\r\n useEffect(() => {\r\n getPaymentConfiguration()\r\n .then((data) => {\r\n setEnvironmentKey(data.environmentKey);\r\n })\r\n }, [])\r\n\r\n useEffect(() => {\r\n function removeSpreedly() {\r\n const Spreedly = window.Spreedly;\r\n if (Spreedly.isLoaded()) Spreedly.unload();\r\n setSpreedlyVisible(false);\r\n }\r\n\r\n const spreedlyOnErrorCB = (errors) => {\r\n console.log(errors);\r\n errors.forEach(function (error) {\r\n if (error.attribute === 'cvv') {\r\n setSpreedlyCVVError(error.message);\r\n }\r\n if (error.attribute === 'number') {\r\n setSpreedlyCreditError(error.message);\r\n }\r\n if (error.attribute === 'year') {\r\n setSpreedlyDateError(error.message);\r\n }\r\n console.error(error.message);\r\n });\r\n };\r\n\r\n const fieldEventCB = function (name, type, /*activeEl, inputProperties*/) {\r\n if (type === 'input') {\r\n if (name === 'number') setSpreedlyCreditError('');\r\n if (name === 'cvv') {\r\n setSpreedlyCVVValid(true);\r\n setSpreedlyCVVError('');\r\n }\r\n if (name === 'year') setSpreedlyDateError('');\r\n // setSpreedlyValid(true);\r\n }\r\n }\r\n const validationCB = function (inputProperties) {\r\n if (!inputProperties.validNumber) setSpreedlyCreditError('Please enter a valid credit card number');\r\n if (!inputProperties.validCvv) setSpreedlyCreditError('Please enter a valid CVV');\r\n // setSpreedlyValid(inputProperties.validNumber && inputProperties.validCvv);\r\n }\r\n\r\n if (dialogOpen) {\r\n if (paymentMethod === PaymentTypeEnum.CREDIT_CARD) {\r\n const Spreedly = window.Spreedly;\r\n if (!Spreedly.isLoaded()) initializeSpreedly(environmentKey);\r\n setSpreedlyVisible(true);\r\n Spreedly.removeHandlers();\r\n defaultSpreedlySetup(spreedlyOnReady, spreedlyOnErrorCB, fieldEventCB, validationCB);\r\n Spreedly.on('paymentMethod', saveCCPaymentCallback)\r\n } else {\r\n removeSpreedly();\r\n }\r\n checkValidInput();\r\n }\r\n }, [dialogOpen, environmentKey, paymentMethod, spreedlyOnReady, saveCCPaymentCallback])\r\n\r\n const checkValidInput = () => {\r\n let enablePayNow = false;\r\n if (paymentMethod === PaymentTypeEnum.CREDIT_CARD && spreedlyReady) {\r\n enablePayNow = validateNewCreditCard(firstName, lastName, expiry.month, expiry.year) && spreedlyCVVValid;\r\n enablePayNow = enablePayNow && spreedlyCVVValid;\r\n } else if (paymentMethod === PaymentTypeEnum.ACH) {\r\n enablePayNow = validateNewACH(firstName, lastName, routingNumber, accountNumber);\r\n }\r\n setSave(enablePayNow);\r\n }\r\n\r\n return (\r\n
\r\n setDialogOpen(true)}\r\n color='primary'\r\n style={{ 'marginLeft': 'auto' }}\r\n >\r\n Add New\r\n \r\n \r\n \r\n Add Payment Method\r\n \r\n \r\n \r\n setName(event.target.value)}\r\n label='Name'\r\n fullWidth\r\n />\r\n \r\n \r\n \r\n Payment Method\r\n setPaymentMethod(event.target.value)}\r\n labelId={'paymentMethodLabel'}\r\n label='Payment Method'\r\n fullWidth\r\n >\r\n None \r\n Credit Card\r\n Bank Account\r\n \r\n \r\n \r\n\r\n {/*Name Components*/}\r\n {\r\n (paymentMethod !== PaymentTypeEnum.NONE) && (\r\n \r\n \r\n \r\n setFirstName(event.target.value)}\r\n fullWidth\r\n />\r\n \r\n \r\n setLastName(event.target.value)}\r\n fullWidth\r\n />\r\n \r\n \r\n \r\n )\r\n }\r\n {/*Credit Card Components*/}\r\n {\r\n (paymentMethod === PaymentTypeEnum.CREDIT_CARD) && (\r\n <>\r\n \r\n Credit Card\r\n \r\n {spreedlyCreditError}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n {/*ACH Components*/}\r\n {\r\n (paymentMethod === PaymentTypeEnum.ACH) && (\r\n <>\r\n \r\n setRoutingNumber(event.target.value)}\r\n fullWidth />\r\n {routingNumberError}\r\n \r\n \r\n setAccountNumber(event.target.value)}\r\n fullWidth />\r\n {accountNumberError}\r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n setDefaultPaymentCheck(event.target.checked)}\r\n />\r\n }\r\n label='Default'\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nAddPaymentDialog.propTypes = {\r\n currentAccountId: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default AddPaymentDialog;","import React, { useState, useEffect } from 'react';\r\n\r\nimport MuiTable from '@material-ui/core/Table';\r\nimport { withStyles, Container, TableBody, TableContainer } from '@material-ui/core';\r\n\r\nimport { getCurrentAccountId, getCurrentOwnerCustomerPortalSettings } from '../../../helpers/getInfoFromCurrentUser';\r\nimport Loading from '../../../components/Loading';\r\nimport { getAllPaymentTypes } from '../../../api/getPaymentType';\r\nimport getPaymentMethods from '../../../api/getPaymentMethods';\r\nimport putPaymentMethod from '../../../api/putPaymentMethod';\r\nimport postSetPaymentMethodAsDefault from '../../../api/postSetPaymentMethodAsDefault';\r\nimport PaymentMethodRow from './PaymentMethodRow';\r\nimport EmptyPaymentMethod from './EmptyPaymentMethod';\r\nimport AddPaymentDialog from './AddPaymentDialog';\r\n\r\nconst styles = (theme) => ({});\r\n\r\nfunction PaymentMethods() {\r\n const [loading, setLoading] = useState(true);\r\n const [paymentMethods, setPaymentMethods] = useState([]);\r\n const [customerPortalSettings, setCustomerPortalSettings] = useState({});\r\n const [accountId, setAccountId] = useState(false);\r\n const [hasDefault, setHasDefault] = useState(false);\r\n const [paymentMethodNameList, setPaymentMethodNameList] = useState([]);\r\n const allowPayments = customerPortalSettings.allowPaymentMethodUpdate;\r\n\r\n const getData = async () => {\r\n let accountId = await getCurrentAccountId();\r\n setAccountId(accountId);\r\n let getPaymentTypes = getAllPaymentTypes();\r\n let getPaymentMethodsPromise = getPaymentMethods(accountId);\r\n let getSettingsPromise = getCurrentOwnerCustomerPortalSettings();\r\n Promise.all([getPaymentTypes, getPaymentMethodsPromise, getSettingsPromise])\r\n .then((data) => {\r\n const [paymentTypeList, paymentMethodList, settings] = data;\r\n let paymentMethods = paymentMethodList.map((paymentMethod) => {\r\n return {\r\n ...paymentMethod,\r\n paymentMethodBaseId: paymentTypeList.find(paymentType => paymentMethod.paymentTypeId === paymentType.identity).paymentBaseTypeId,\r\n }\r\n })\r\n setPaymentMethods(paymentMethods);\r\n setCustomerPortalSettings(settings);\r\n let checkDefault = paymentMethodList.some(paymentMethod => paymentMethod.autopay === true && paymentMethod.isActive === true) === true;\r\n setHasDefault(checkDefault);\r\n let paymentMethodNameList = paymentMethodList.map(paymentMethod => paymentMethod.name);\r\n setPaymentMethodNameList(paymentMethodNameList);\r\n setLoading(false);\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n }, [])\r\n\r\n const handleIsActiveChange = (e, paymentMethodId) => {\r\n let selectedPaymentMethod = paymentMethods.find(pm => pm.identity === paymentMethodId);\r\n let newActiveValue = !selectedPaymentMethod.isActive;\r\n // Set auto-pay to false. \r\n // Either it is now inactive and it should not be default, or it was already inactive and should not have been default in the first place\r\n let newAutopayValue = false;\r\n let putBody = {\r\n identity: paymentMethodId,\r\n isActive: newActiveValue,\r\n autopay: newAutopayValue,\r\n };\r\n putPaymentMethod(putBody).then(() => {\r\n selectedPaymentMethod.isActive = newActiveValue;\r\n selectedPaymentMethod.autopay = newAutopayValue;\r\n updatePaymentMethodState([selectedPaymentMethod]);\r\n });\r\n }\r\n\r\n const handleIsDefaultChange = (e, paymentMethodId) => {\r\n let selectedPaymentMethod = paymentMethods.find(pm => pm.identity === paymentMethodId);\r\n let defaultPaymentMethod = paymentMethods.find(pm => pm.autopay === true);\r\n let isSelectedPaymentMethodDefault = (selectedPaymentMethod === defaultPaymentMethod)\r\n let paymentMethodsToUpdate = [selectedPaymentMethod];\r\n if (isSelectedPaymentMethodDefault) {\r\n // Set Auto-pay to false, there should not be a default payment method anymore\r\n let putBody = {\r\n identity: paymentMethodId,\r\n autopay: false,\r\n };\r\n putPaymentMethod(putBody).then(() => {\r\n selectedPaymentMethod.autopay = false;\r\n updatePaymentMethodState([selectedPaymentMethod]);\r\n })\r\n } else {\r\n // Set Auto-pay to true using the specialized endpoint. This will set other payment methods default = false\r\n postSetPaymentMethodAsDefault(paymentMethodId).then(() => {\r\n selectedPaymentMethod.autopay = true;\r\n if (defaultPaymentMethod) {\r\n defaultPaymentMethod.autopay = false;\r\n paymentMethodsToUpdate.push(defaultPaymentMethod);\r\n }\r\n updatePaymentMethodState(paymentMethodsToUpdate);\r\n })\r\n }\r\n }\r\n\r\n const updatePaymentMethodState = (paymentMethods) => {\r\n setPaymentMethods(oldValue => oldValue.map(pm => {\r\n let paymentMethod = paymentMethods.find(z => z.identity === pm.identity);\r\n return paymentMethod !== undefined ? paymentMethod : pm;\r\n }));\r\n }\r\n\r\n const onSuccessfulPayment = () => {\r\n setLoading(true);\r\n getData();\r\n };\r\n\r\n return loading ? : (\r\n <>\r\n {\r\n (allowPayments) && (\r\n \r\n )\r\n }\r\n {\r\n (paymentMethods.length === 0) ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n paymentMethods.map((method) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default withStyles(styles)(PaymentMethods)","import React from 'react';\r\nimport clsx from 'clsx';\r\n\r\nimport Box from '@material-ui/core/Box';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Tab, Tabs } from '@material-ui/core';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport Header from '../components/Header';\r\n\r\nimport UserDetail from './tabs/UserDetail'\r\nimport BillingInformation from './tabs/BillingInformation'\r\nimport PaymentMethods from './tabs/paymentMethods/PaymentMethods'\r\n\r\nconst buildTab = (tabInfo, idx) => {\r\n const tabId = `tab_${idx}`;\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n