{"version":3,"sources":["pages/layout/login/style.module.scss","pages/billing/style.module.scss","reportWebVitals.ts","api/request.ts","api/portal.ts","stores/portalReducer.ts","utils/getGlobal.ts","stores/rootReducer.ts","stores/index.tsx","hooks/useBillingModel.ts","pages/billing/accountUpcomingInvoice.tsx","assets/cards/visa.svg","assets/cards/mastercard.svg","assets/cards/amex.svg","hooks/useCountriesData.ts","pages/components/CountryStates/CountryDropdown.tsx","hooks/index.ts","pages/components/CountryStates/StateDropdown.tsx","pages/billing/UpdateBillingInfo.tsx","pages/billing/paymentMethods.tsx","pages/billing/accountBilling.tsx","assets/bv-logo.svg","assets/ep-logo.svg","pages/layout/BrandLogo.tsx","pages/billing/paymentItems.tsx","pages/billing/paymentDetails.tsx","utils/exportToPdf.ts","pages/billing/paymentHistory.tsx","pages/billing/billingData.tsx","pages/billing/index.tsx","pages/companyProfile/changePassword.tsx","pages/components/PageLoading/index.tsx","pages/companyProfile/contactForm.tsx","hooks/useClientModel.ts","pages/companyProfile/addressForm.tsx","pages/companyProfile/clientProfile.tsx","pages/companyProfile/index.tsx","pages/emailNotifiations/emailSettings.tsx","pages/emailNotifiations/index.tsx","utils/index.tsx","constants/enums.ts","pages/subscriptions/activeSubscriptions.tsx","pages/subscriptions/activeThirdPartySubscriptions.tsx","pages/subscriptions/cancelledSubscriptions.tsx","pages/subscriptions/cancelledThirdPartySubscriptions.tsx","pages/subscriptions/contactSales.tsx","pages/subscriptions/summary.tsx","pages/subscriptions/index.tsx","pages/layout/login/logos.tsx","pages/layout/login/loginPage.tsx","pages/layout/login/index.tsx","pages/layout/SiteLogo.tsx","pages/layout/SiderMenu.tsx","pages/components/UserAvatar.tsx","pages/layout/SiteName.tsx","pages/layout/LayoutBanner.tsx","pages/components/Intercom.tsx","pages/layout/index.tsx","pages/layout/login/resetPasswordPage.tsx","router/WrappedRoute.tsx","pages/Exception/404.tsx","router/index.tsx","App.tsx","index.tsx","pages/layout/style.module.scss","pages/companyProfile/style.module.scss","pages/emailNotifiations/style.module.scss"],"names":["module","exports","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","isoDateRegex","isoDateReviver","key","value","date","parts","exec","ms","substring","Date","UTC","fromISOString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","handleResponse","response","Promise","resolve","reject","a","ok","contentType","headers","get","includes","text","json","JSON","parse","blob","slice","handleError","error","message","apiLogin","payload","requestOptions","method","body","stringify","fetch","user","model","apiResetPassword","email","apiChangePassword","data","apiUpdateCompanyInformation","apiUpdateBillingInfoAction","apiUpdateEmailNotifications","isSubscribed","IsSubscribed","newSubscribers","Subscribers","apiDownloadLiicense","version","initialState","currentUser","undefined","clientModel","billingModel","countries","isCountriesLoading","collapsed","test","navigator","userAgent","portalSlice","createSlice","name","reducers","setPortalState","state","action","Object","assign","actions","loginAsync","dispatch","Role","window","location","href","origin","resetPasswordAsync","res","success","Modal","centered","title","content","changePasswordAsync","getClientModelAsync","callback","updateCompanyInformationAsync","updateBillingInfoActionAsync","updateEmailNotificationsAsync","getCountriesAsync","getState","length","downloadLicensesAsync","url","URL","createObjectURL","Blob","link","document","createElement","setAttribute","appendChild","click","parentNode","removeChild","rootReducer","portalReducer","store","configureStore","reducer","useAppDispatch","useDispatch","useAppState","selector","useSelector","useBillingModel","loading","React","useEffect","AccountUpcomingInvoice","upcoming","columns","dataIndex","align","render","val","toFixed","moment","Created","format","className","styles","upcoming_table","dataSource","Lines","rowKey","pagination","summary","Summary","fixed","Row","Cell","index","summary_cell","Subtotal","DiscountValue","DiscountDescription","Tax","TaxDescription","Total","StartingBalance","AmountDue","useCountriesData","priorityCountries","whitelist","blacklist","allCountires","useMemo","filterCountries","countriesListedFirst","filteredCountries","entries","map","filter","x","indexOf","countryShortCode","forEach","slug","result","find","push","Option","Select","CountryDropdown","props","priorityOptions","id","placeholder","onChange","onBlur","disabled","arbitraryProps","showDefaultOption","defaultOptionLabel","labelType","valueType","attrs","e","showSearch","filterOption","input","option","children","toLowerCase","country","countryName","getCountries","defaultProps","useIsUnmounted","isUnmountedRef","useRef","current","StateDropdown","classes","disableWhenEmpty","blankOptionLabel","countryValueType","customOptions","useState","regions","setRegions","getDuplicates","regionKey","region","defaultRegions","c","shortCode","getRegions","duplicateRegions","console","toString","getCustomOptions","isDisabled","getDefaultOption","label","getRegionList","CARD_OPTIONS","hidePostalCode","style","base","fontSize","innerWidth","color","letterSpacing","fontFamily","invalid","UpdateCardForm","onSubmit","handleBlur","handleFieldChange","handleCardFieldChange","billing","selectProvince","selectCountry","showAdditionalInfo","setShowAdditionalInfo","Form","useForm","form","onFinish","layout","gutter","span","Item","required","options","defaultChecked","checkedChildren","unCheckedChildren","Title","level","address_country","address_state","UpdateBillingInfoModal","visible","onCancel","onOk","accountId","setError","cardComplete","setCardComplete","processing","setProcessing","address_line1","address_line2","address_city","address_zip","billingInfo","setBillingInfo","stripe","useStripe","elements","useElements","validateForm","handleSubmit","event","preventDefault","card","getElement","CardElement","createToken","token","stripeTokenHandler","width","bodyStyle","padding","destroyOnClose","footer","onClick","type","complete","target","ErrorMessage","role","height","viewBox","fill","d","Meta","Card","Panel","Collapse","PaymentMethods","isModalVisible","setIsModalVisible","getBrandIcon","brand","visa","masterCard","amex","getTitle","last4","isExpired","stripePromise","loadStripe","StripeApiKey","bordered","ghost","header","ExpYear","ExpMonth","setMonth","getMonth","display","alignItems","avatar","src","Brand","shape","Last4","description","cardHeader","extra","EditOutlined","marginLeft","stopPropagation","column","Name","Funding","AddressLine1","AddressLine2","AddressCity","AddressState","AddressZip","AddressCountry","CustomerId","AccountBilling","account","Upcoming","BrandLogo","IsBirdviewBrand","rel","bv_logo","alt","ep_logo","PaymentItems","payment","record","Description","HasTrialPeriod","TrialPeriodStart","TrialPeriodEnd","Math","abs","Items","colSpan","Discount","Tax_Percent","GrandTotal","Text","strong","PaymentType","PaymentDetails","onClose","showDetails","handleClose","r_drawer","maskClosable","textAlign","justify","OrderNumber","BillingName","Company","BillingAddress","AddressInfo","ShippingName","ShippingAddress","OrderDate","marginRight","position","left","bottom","right","borderTop","background","element","querySelector","filename","margin","image","quality","html2canvas","jsPDF","unit","orientation","html2pdf","set","from","save","exportHtmlToPdf","PaymentHistory","items","openPaymentDetails","orderNotes","OrderNotes","float","Comments","setShowDetails","setPayment","onRow","rowIndex","amountTotals","reduce","Amount","taxTotals","grandTotalTotals","TabPane","Tabs","BillingsData","stripeAccounts","StripeCustomerAccounts","payments","Payments","tabTitle","Email","hideAdd","activeKey","newModel","SelectedCustomerAccount","tab","Id","Billing","minHeight","ChangePasswordForm","reseting","setReseting","onFinished","values","errorData","split","setFields","errors","resetFields","rules","whitespace","Password","prefix","LockOutlined","htmlType","ChangePasswordPopup","setVisible","placement","onVisibleChange","trigger","PageLoading","paddingTop","size","ContactForm","contact","useClientModel","AddressForm","address","getAddress","getFieldValue","countryChanged","setFieldsValue","ClientProfile","updating","setUpdating","showBillingContact","setShowBillingContact","showBillingAddress","setShowBillingAddress","Client","BillingContactSameAsProduct","BillingAddressSameAsShipping","client","initialValues","container","valuePropName","checked","primaryContact","FirstName","LastName","Phone","shippingAddress","CompanyProfile","EmailSettings","history","useHistory","subscribed","setSubscribed","showWeekly","setShowWeekly","copyContactFrom","getFieldsValue","item","newItem","splice","editContact","validateFields","validateDuplicate","rule","trim","wrap","form_items","PrimaryContact","form_notes","italic","BillingContact","requiredMark","List","fields","add","remove","restField","validator","DeleteTwoTone","twoToneColor","block","icon","PlusOutlined","EmailNotifications","getSiteNameByBrand","isBirdviewBrand","isInhouseClient","isHostedClient","isExtraStorage","isAddIns","hasRenewOptions","editions","brands","getEdition","edition","getEnumName","enums","LicenseType","getProductName","Typography","ActiveSubscriptions","clientLicenseType","ExtraStorage","IsRestrictedLicense","NumberOfUsers","Version","ProductName","Edition","LicenseRenewal","LastPaymentDate","ExpirationTerm","expire","ExpireDate","cancelledAt","CancelledAt","today","IsStripeSubscriptionActive","ActiveThirdPartySubscriptions","CancelledSubscriptions","CancelledThirdPartySubscriptions","ContactSales","useSummarySubsriptionsData","IsBirdview","ClientLicenseType","activeFullUsers","ActiveFullUsers","activeRestrictedUsers","ActiveResctrictedUsers","extraStorage","nonExpiredLicensesUsers","NonExpiredLicensesUsers","activeLicensesByType","ActiveLicensesByType","isCancelled","IsCancelled","downloading","setDownLoading","downloadLicense","DownloadOutlined","InfoCircleOutlined","Subscriptions","activeLicenses","ActiveLicenses","cancelledLicenses","CancelledLicenses","activeThirdPartyLicenses","ActiveThirdPartyLicenses","cancelledThirdPartyLicenses","CancelledThirdPartyLicenses","isSalesAssisted","IsSalesAssisted","isBirdview","stripeCustomerId","StripeCustomerId","isBirdviewAutomationEnabled","IsBirdviewAutomationEnabled","useClientSubscriptionsData","showSubscriptions","showThirdPartySubscriptions","showBothTabs","showIcon","marginBottom","flex","marginTop","defaultActiveKey","Logos","bv_tip","ep_tip","logo_block","logo_image_ep","logo_image_bv","password","LoginForm","isAuthChecked","setIsAuthChecked","returnUrl","DefaultRedirectUrl","setLoading","box","login_page","justify_center","logo","login_page_form","form_item","UserOutlined","site_form_item_icon","login_form_forgot","to","login_form_button","BoxLayout","box_row","box_center","fallback","SiteLogo","menu_logo_bv","menu_logo_ep","Sider","Layout","SiderMenu","handleOnCollapse","theme","useLocation","isInhousePerpetual","breakpoint","collapsedWidth","onCollapse","mode","log","defaultSelectedKeys","selectedKeys","pathname","MailOutlined","menu_icon","CreditCardOutlined","MessageOutlined","CustomerServiceOutlined","getColor","username","charCodeAt","GetUsernameAvatar","backgroundColor","verticalAlign","charAt","toUpperCase","SiteName","lineHeight","Header","SubMenu","Menu","LayoutBanner","onActionClick","localStorage","clear","alignSelf","MenuUnfoldOutlined","MenuFoldOutlined","menu","LogoutOutlined","Intercom","app_id","Content","MainLayout","toggle","onresize","needCollapse","getBoundingClientRect","layout_wrapper","ac_env","ResetPasswordForm","WrappedRoute","routeProps","getPageTitle","favicon","getElementById","Exception404","paddingBottom","Component","RenderRouter","PrivateRoutes","path","exact","AuthWrapper","EnsureLoggedIn","App","ReactDOM"],"mappings":"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","file":"static/js/main.fec2df12.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"box_row\":\"style_box_row__nozTq\",\"box_center\":\"style_box_center__16LF0\",\"login_form\":\"style_login_form__Zl2lw\",\"login_form_forgot\":\"style_login_form_forgot__1oJI8\",\"login_form_button\":\"style_login_form_button__VJ429\",\"login_page\":\"style_login_page__1SqM3\",\"logo\":\"style_logo__3M_Q8\",\"reset_page\":\"style_reset_page__czm18\",\"recover_page\":\"style_recover_page__223MZ\",\"justify_center\":\"style_justify_center__c7eCH\",\"flex\":\"style_flex__2G2mt\",\"box\":\"style_box__1m3wy\",\"ant-row\":\"style_ant-row__3PaDq\",\"back-link\":\"style_back-link__3cGVQ\",\"form\":\"style_form__2hWkK\",\"ant-card\":\"style_ant-card__jfoso\",\"ant-card-body\":\"style_ant-card-body__32m9G\",\"form_item\":\"style_form_item__3SYL6\",\"logo_block\":\"style_logo_block__1TijW\",\"logo_image_ep\":\"style_logo_image_ep__2x2-F\",\"logo_image_bv\":\"style_logo_image_bv__3odAP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upcoming_table\":\"style_upcoming_table__1LiWd\",\"summary_cell\":\"style_summary_cell__1WcIn\",\"r_drawer\":\"style_r_drawer__1E5Pj\",\"ant-typography\":\"style_ant-typography__2El1a\"};","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","\r\n// const codeMessage = {\r\n// 200: 'The server successfully returned the requested data.',\r\n// 201: 'New or modified data is successful.',\r\n// 202: 'A request has entered the background queue (asynchronous task).',\r\n// 204: 'Delete data successfully.',\r\n// 302: 'User is not autorized.',\r\n// 400: 'The request was sent with an error. The server did not perform any operations to create or modify data.',\r\n// 401: 'The user does not have permission (token, username, password is incorrect).',\r\n// 403: 'User is authorized, but access is forbidden.',\r\n// 404: 'The request sent is for a record that does not exist and the server is not operating.',\r\n// 406: 'The format of the request is not available.',\r\n// 410: 'The requested resource is permanently deleted and will not be obtained again.',\r\n// 422: 'When creating an object, a validation error occurred.',\r\n// 500: 'The server has an error. Please check the server.',\r\n// 502: 'Gateway error.',\r\n// 503: 'The service is unavailable, the server is temporarily overloaded or maintained.',\r\n// 504: 'The gateway timed out.',\r\n// };\r\n\r\n// const checkStatus = (response: { status: string | number; statusText: any; url: any; }) => {\r\n\r\n// if (response.status >= 200 && response.status < 300) {\r\n// return response;\r\n// }\r\n// const errortext = response.statusText;\r\n// notification.error({\r\n// message: `Request error ${response.status}: ${response.url}`,\r\n// description: errortext,\r\n// });\r\n// const error = new Error(errortext);\r\n// error.name = response.status as string;\r\n// //error.response = response;\r\n// throw error;\r\n// };\r\n\r\n/**\r\n * Requests a URL, returning a promise.\r\n *\r\n * @param {string} url The URL we want to request\r\n * @param {object} [option] The options we want to pass to \"fetch\"\r\n * @return {object} An object containing either \"data\" or \"err\"\r\n */\r\nexport type Response = {\r\n status: boolean;\r\n message: string;\r\n result: T;\r\n};\r\n\r\nexport type MyResponse = Promise>;\r\n\r\nexport const request = (\r\n url: string,\r\n option?: any,\r\n): any => {\r\n const options = {\r\n ...option,\r\n };\r\n\r\n const defaultOptions = {\r\n credentials: 'include',\r\n };\r\n const newOptions = { ...defaultOptions, ...options };\r\n if (\r\n newOptions.method === 'POST' ||\r\n newOptions.method === 'PUT' ||\r\n newOptions.method === 'DELETE'\r\n ) {\r\n if (!(newOptions.body instanceof FormData)) {\r\n newOptions.headers = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n ...newOptions.headers,\r\n };\r\n newOptions.body = JSON.stringify(newOptions.body);\r\n } else {\r\n // newOptions.body is FormData\r\n newOptions.headers = {\r\n Accept: 'application/json',\r\n ...newOptions.headers,\r\n };\r\n }\r\n }\r\n\r\n return fetch(url, newOptions);\r\n}\r\n\r\n\r\n// IE/FF/Chrome handle ISO date format in Date.parse inconsistently so we need to have our own implementation\r\nvar isoDateRegex = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?Z?$/;\r\nconst fromISOString = function (date: string) {\r\n var parts = isoDateRegex.exec(date);\r\n if (parts) {\r\n var ms = +((parts[7] || \"\") + \"000\").substring(0, 3); // handling 1/10 and 1/100 and trimming extra digits (may come from C# DateTime)\r\n\r\n return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], ms)); // always UTC\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst isoDateReviver = (key: any, value: string) => {\r\n if (typeof value === 'string') {\r\n var date = fromISOString(value);\r\n if (date) {\r\n // treating parsed date as local client date\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nexport const handleResponse = (response: any): any => {\r\n return new Promise(async (resolve, reject) => {\r\n if (response.ok) {\r\n // return json if it was returned in the response\r\n var contentType = response.headers.get(\"content-type\");\r\n if (contentType && contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n const json = text ? JSON.parse(text, isoDateReviver) : null;\r\n resolve(json);\r\n }\r\n else if (contentType && contentType.includes(\"text/plain\")) {\r\n const blob = response.blob();\r\n resolve(blob);\r\n }\r\n else {\r\n resolve();\r\n }\r\n } else {\r\n\r\n // return error message from response body\r\n response.text().then(text => {\r\n return reject(text.slice(1, -1));\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport const handleError = (error: any): any => {\r\n return Promise.reject(error && error.message);\r\n}\r\n","import { BillingModel, ChangePasswordParams, Client, ClientModel, CurrentUser, LoginParams } from '../types';\r\nimport { handleError, handleResponse } from './request';\r\n\r\ntype RequestResult = {\r\n model?: T;\r\n error?: string;\r\n}\r\ntype SuccessfulModel = {\r\n successful: boolean;\r\n}\r\n\r\nexport const apiLogin = (payload: LoginParams): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(payload)\r\n };\r\n return fetch('/api/new/signin', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (user: CurrentUser) => {\r\n return { model: user };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n};\r\n\r\nexport const apiLogout = () => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n };\r\n return fetch('/api/new/signout', requestOptions).then(handleResponse, handleError);\r\n};\r\n\r\nexport const apiCurrentUser = (): Promise => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n };\r\n return fetch('/api/new/currentUser', requestOptions).then(handleResponse, handleError);\r\n};\r\n\r\nexport const apiResetPassword = (email: string) => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ email })\r\n };\r\n return fetch('/api/new/passwordRecovery', requestOptions).then(handleResponse, handleError);\r\n};\r\n\r\nexport const apiChangePassword = (payload: ChangePasswordParams): RequestResult => {\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(payload)\r\n };\r\n return fetch('/api/new/changePassword', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: SuccessfulModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n};\r\n\r\nexport const apiGetClientModel = (): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n };\r\n return fetch('/api/new/clientModel', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: ClientModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n};\r\n\r\n\r\nexport const apiGetBillingModel = (): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n };\r\n return fetch('/api/new/billingModel', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: BillingModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n\r\n};\r\n\r\nexport const apiUpdateCompanyInformation = (data: Client): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n };\r\n return fetch('/api/new/updateCompanyProfile', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: ClientModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n}\r\n\r\nexport const apiGetCountries = () => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n };\r\n return fetch('/api/new/GetCountryList', requestOptions).then(handleResponse, handleError);\r\n}\r\n\r\nexport const apiUpdateBillingInfoAction = (data: any): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n };\r\n return fetch('/api/new/updateBillingInfo', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: BillingModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n}\r\n\r\nexport const apiUpdateEmailNotifications = (data: Client): RequestResult => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n isSubscribed: data.IsSubscribed,\r\n newSubscribers: data.Subscribers,\r\n })\r\n };\r\n return fetch('/api/new/updateEmailNotifications', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (data: SuccessfulModel) => {\r\n return { model: data };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n ) as RequestResult;\r\n}\r\nexport const apiDownloadLiicense = (data: string): any => {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n version: data,\r\n })\r\n };\r\n return fetch('/api/new/downloadLicense', requestOptions)\r\n .then(handleResponse, handleError)\r\n .then(\r\n (blob: Blob) => {\r\n return { model: blob };\r\n },\r\n (error: string) => {\r\n return { error: error };\r\n }\r\n );\r\n}","import { createSlice, PayloadAction, Dispatch } from '@reduxjs/toolkit';\r\nimport { message, Modal } from 'antd';\r\nimport { apiChangePassword, apiCurrentUser, apiDownloadLiicense, apiGetBillingModel, apiGetClientModel, apiGetCountries, apiLogin, apiLogout, apiResetPassword, apiUpdateBillingInfoAction, apiUpdateCompanyInformation, apiUpdateEmailNotifications } from '../api/portal';\r\nimport { ChangePasswordParams, Client, ClientModel, CurrentUser, LoginParams, PortalState } from '../types';\r\nimport { getGlobalState } from '../utils/getGlobal';\r\nimport { Country } from '../pages/components/CountryStates';\r\nimport { useHistory } from 'react-router';\r\n\r\n\r\nconst initialState: PortalState = {\r\n currentUser: undefined,\r\n clientModel: undefined,\r\n billingModel: undefined,\r\n countries: [],\r\n isCountriesLoading: false,\r\n ...getGlobalState(),\r\n};\r\n\r\nconst portalSlice = createSlice({\r\n name: 'user',\r\n initialState,\r\n reducers: {\r\n setPortalState(state, action: PayloadAction>) {\r\n Object.assign(state, action.payload);\r\n }\r\n }\r\n});\r\n\r\nexport const { setPortalState } = portalSlice.actions;\r\n\r\nexport default portalSlice.reducer;\r\n\r\nexport const loginAsync = (payload: LoginParams) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiLogin({ ...payload });\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n\r\n if (model) {\r\n if (model.Role === 6) { // affiliate user\r\n window.location.href = window.location.origin + \"/affiliate\";\r\n return false;\r\n }\r\n dispatch(\r\n setPortalState({\r\n currentUser: model\r\n })\r\n );\r\n\r\n return true;\r\n }\r\n }\r\n};\r\n\r\nexport const logoutAsync = () => {\r\n return async (dispatch: Dispatch) => {\r\n return await apiLogout()\r\n .then(() => {\r\n localStorage.clear();\r\n dispatch(\r\n setPortalState({\r\n currentUser: undefined\r\n })\r\n );\r\n return true;\r\n });\r\n };\r\n};\r\n\r\nexport const getCurrentUserAsync = (callback?: (user: CurrentUser) => void) => {\r\n return async (dispatch: Dispatch) => {\r\n const user = await apiCurrentUser();\r\n dispatch(\r\n setPortalState({\r\n currentUser: user,\r\n })\r\n );\r\n callback?.(user);\r\n };\r\n};\r\n\r\nexport const resetPasswordAsync = (email: string) => {\r\n return async () => {\r\n return await apiResetPassword(email)\r\n .then(\r\n (res) => {\r\n message.success(\"You will receive an email with the password recovery email soon\");\r\n return res;\r\n },\r\n error => {\r\n Modal.error({\r\n centered: true,\r\n title: 'Recover password failed',\r\n content: error,\r\n });\r\n return false;\r\n });\r\n\r\n };\r\n};\r\n\r\nexport const changePasswordAsync = (payload: ChangePasswordParams) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiChangePassword({ ...payload });\r\n if (error) {\r\n return error;\r\n }\r\n if (model) {\r\n message.success(\"Password changed successfully\");\r\n return true;\r\n }\r\n };\r\n\r\n};\r\n\r\nexport const getClientModelAsync = (callback?: (model: ClientModel) => void) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiGetClientModel();\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n dispatch(\r\n setPortalState({\r\n clientModel: model,\r\n })\r\n );\r\n callback?.(model);\r\n return true;\r\n }\r\n };\r\n};\r\n\r\nexport const getBillingModelAsync = () => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiGetBillingModel();\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n dispatch(\r\n setPortalState({\r\n billingModel: model,\r\n })\r\n );\r\n return true;\r\n }\r\n };\r\n};\r\n\r\nexport const updateCompanyInformationAsync = (payload: Client) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiUpdateCompanyInformation({ ...payload });\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n dispatch(\r\n setPortalState({\r\n clientModel: model,\r\n })\r\n );\r\n message.success(\"Company information updated successfully\");\r\n return true;\r\n }\r\n };\r\n};\r\n\r\nexport const updateBillingInfoActionAsync = (payload: any) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiUpdateBillingInfoAction({ ...payload });\r\n\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n dispatch(\r\n setPortalState({\r\n billingModel: model,\r\n })\r\n );\r\n message.success(\"Billing information updated successfully\");\r\n return true;\r\n }\r\n };\r\n};\r\nexport const updateEmailNotificationsAsync = (payload: Client) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiUpdateEmailNotifications({ ...payload });\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n message.success(\"Email notifications updated successfully\");\r\n return true;\r\n }\r\n };\r\n};\r\nexport const getCountriesAsync = (callback?: (model: Country[]) => void) => {\r\n return async (dispatch: Dispatch, getState: () => PortalState) => {\r\n\r\n const isCountriesLoading = getState().isCountriesLoading;\r\n if (getState().countries.length || isCountriesLoading) {\r\n return;\r\n }\r\n\r\n dispatch(setPortalState({ isCountriesLoading: true }));\r\n const countries = await apiGetCountries();\r\n dispatch(\r\n setPortalState({\r\n countries,\r\n isCountriesLoading: false\r\n })\r\n );\r\n\r\n\r\n };\r\n};\r\n\r\nexport const downloadLicensesAsync = (version: string) => {\r\n return async (dispatch: Dispatch) => {\r\n const { model, error } = await apiDownloadLiicense(version);\r\n if (error) {\r\n message.error(error);\r\n return false;\r\n }\r\n if (model) {\r\n const url = window.URL.createObjectURL(\r\n new Blob([model]),\r\n );\r\n\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.setAttribute(\r\n 'download',\r\n \"EasyLicense.config\",\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode?.removeChild(link);\r\n return true;\r\n }\r\n };\r\n};","export function getGlobalState() {\r\n const device = /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent) ? 'MOBILE' : 'DESKTOP';\r\n const collapsed = device !== 'DESKTOP';\r\n\r\n return {\r\n //device,\r\n collapsed\r\n } as const;\r\n}","import portalReducer from './portalReducer';\r\n\r\nconst rootReducer = portalReducer;\r\n\r\nexport default rootReducer;\r\n\r\n","import { configureStore } from '@reduxjs/toolkit';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport rootReducer from './rootReducer';\r\n\r\nconst store = configureStore({\r\n reducer: rootReducer\r\n});\r\n\r\ntype AppState = ReturnType;\r\ntype AppDispatch = typeof store.dispatch;\r\n\r\nexport const useAppDispatch = () => useDispatch();\r\n\r\nexport const useAppState = any>(selector: T): ReturnType => useSelector(selector);\r\n\r\nexport default store;","import React from \"react\";\r\nimport { useAppDispatch, useAppState } from \"../stores\";\r\nimport { getBillingModelAsync } from \"../stores/portalReducer\";\r\n\r\n\r\nexport const useBillingModel = () => {\r\n const dispatch = useAppDispatch();\r\n const model = useAppState(state => state.billingModel);\r\n const loading = !model;\r\n\r\n React.useEffect(() => {\r\n if (!model) {\r\n dispatch(getBillingModelAsync());\r\n }\r\n }, [model, dispatch]);\r\n\r\n\r\n return { model, loading }\r\n}","import { Divider, Table } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport moment from \"moment\";\r\nimport { Invoice, InvoiceLineItem } from \"../../types\";\r\n\r\nimport styles from './style.module.scss';\r\n\r\ntype Props = {\r\n loading: boolean;\r\n upcoming: Invoice | undefined;\r\n}\r\n\r\nexport const AccountUpcomingInvoice: React.FC = ({ upcoming, loading }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: 'Description',\r\n dataIndex: 'Description',\r\n key: 'Description',\r\n },\r\n {\r\n title: 'Date',\r\n dataIndex: 'Period',\r\n key: 'Period',\r\n },\r\n {\r\n title: 'Amount',\r\n dataIndex: 'Amount',\r\n key: 'Amount',\r\n align: \"right\",\r\n render: val => <>${(val).toFixed(2)},\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n {!!upcoming && <>\r\n

Upcoming invoice

\r\n \r\n This is a preview of the invoice that will be billed on {moment(upcoming.Created).format('MMM DD, YYYY')}. It may change if the subscription is updated.\r\n \r\n < Divider />\r\n \r\n className={styles.upcoming_table}\r\n loading={loading}\r\n dataSource={upcoming.Lines}\r\n columns={columns}\r\n rowKey={\"Id\"}\r\n pagination={false}\r\n summary={() => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n Subtotal\r\n ${upcoming.Subtotal.toFixed(2)}\r\n \r\n {upcoming.DiscountValue !== 0 && \r\n \r\n Discount ({upcoming.DiscountDescription})\r\n -${upcoming.DiscountValue.toFixed(2)}\r\n \r\n }\r\n {upcoming.Tax > 0 && \r\n \r\n {upcoming.TaxDescription}\r\n ${upcoming.Tax.toFixed(2)}\r\n \r\n }\r\n \r\n \r\n Total\r\n ${upcoming.Total.toFixed(2)}\r\n \r\n {upcoming.StartingBalance > 0 && \r\n \r\n Starting customer balance\r\n ${upcoming.StartingBalance.toFixed(2)}\r\n \r\n }\r\n \r\n \r\n Amount Due\r\n ${upcoming.AmountDue.toFixed(2)}\r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n < Divider />\r\n }\r\n \r\n );\r\n}","export default __webpack_public_path__ + \"static/media/visa.f7c9d628.svg\";","export default __webpack_public_path__ + \"static/media/mastercard.9f68457e.svg\";","export default __webpack_public_path__ + \"static/media/amex.79816fd9.svg\";","import React from \"react\";\r\nimport { Country } from \"../pages/components/CountryStates\";\r\nimport { useAppDispatch, useAppState } from \"../stores\";\r\nimport { getCountriesAsync } from \"../stores/portalReducer\";\r\n\r\n\r\nexport const useCountriesData = (priorityCountries: string[] = [], whitelist: string[] = [], blacklist: string[] = []) => {\r\n const dispatch = useAppDispatch();\r\n\r\n const allCountires = useAppState(state => state.countries);\r\n const loading = !allCountires.length;\r\n React.useEffect(() => {\r\n dispatch(getCountriesAsync());\r\n }, [dispatch]);\r\n\r\n const countries = React.useMemo(() => filterCountries(allCountires, priorityCountries, whitelist, blacklist),\r\n [allCountires, priorityCountries, whitelist, blacklist]);\r\n\r\n\r\n return {\r\n countries,\r\n loading\r\n };\r\n}\r\n\r\nconst filterCountries = (countries: Country[], priorityCountries: string[] = [], whitelist: string[] = [], blacklist: string[] = []) => {\r\n let countriesListedFirst = [] as Country[];\r\n let filteredCountries = Object.entries(countries).map(([, country]) => country);\r\n\r\n if (whitelist.length > 0) {\r\n filteredCountries = countries.filter(x => whitelist.indexOf(x.countryShortCode) > -1);\r\n } else if (blacklist.length > 0) {\r\n filteredCountries = countries.filter(x => blacklist.indexOf(x.countryShortCode) === -1);\r\n }\r\n\r\n if (priorityCountries.length > 0) {\r\n\r\n // ensure the countries are added in the order in which they are specified by the user\r\n priorityCountries.forEach((slug) => {\r\n const result = filteredCountries.find(x => x.countryShortCode === slug);\r\n if (result) {\r\n countriesListedFirst.push(result);\r\n }\r\n });\r\n\r\n filteredCountries = filteredCountries.filter(x => priorityCountries.indexOf(x.countryShortCode) === -1);\r\n }\r\n\r\n return countriesListedFirst.length ? [...countriesListedFirst, ...filteredCountries] : filteredCountries;\r\n};","import React from 'react';\r\nimport { Select } from 'antd';\r\nimport { useCountriesData } from '../../../hooks/useCountriesData';\r\n\r\nconst Option = Select.Option;\r\n\r\ntype CountryDropdownProps = {\r\n value?: string,\r\n name?: string,\r\n id?: string,\r\n className?: string,\r\n showDefaultOption?: boolean,\r\n defaultOptionLabel?: string,\r\n priorityOptions: string[],\r\n onChange?: (value: string) => void;\r\n onBlur?: (e: React.FocusEventHandler) => void;\r\n labelType?: string;//'full' | 'short',\r\n valueType?: string;//'full' | 'short',\r\n whitelist?: string[],\r\n blacklist?: string[],\r\n disabled?: boolean,\r\n placeholder?: string,\r\n} & Readonly<{\r\n children?: React.ReactNode;\r\n}>\r\n\r\n\r\nconst defaultProps: Partial = {\r\n value: '',\r\n name: 'rcrs-country',\r\n id: '',\r\n className: '',\r\n showDefaultOption: true,\r\n defaultOptionLabel: 'Select Country',\r\n priorityOptions: [],\r\n onChange: () => { },\r\n onBlur: () => { },\r\n labelType: 'full',\r\n valueType: 'short',\r\n whitelist: [],\r\n blacklist: [],\r\n disabled: false,\r\n};\r\n\r\nexport const CountryDropdown: React.FC = (props) => {\r\n\r\n const { countries, loading } = useCountriesData(props.priorityOptions, props.whitelist || [], props.blacklist || []);\r\n\r\n const getCountries = () => {\r\n const { valueType, labelType } = props;\r\n return countries.map(country => (\r\n \r\n ));\r\n }\r\n\r\n const getDefaultOption = () => {\r\n if (!props.showDefaultOption) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n const { name, id, className, value, placeholder, onChange, onBlur, disabled, showDefaultOption, defaultOptionLabel,\r\n labelType, valueType, whitelist, blacklist, priorityOptions, ...arbitraryProps } = props;\r\n\r\n const filterOption = (input: string, option: any) => {\r\n return option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\r\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;\r\n }\r\n\r\n const attrs: any = {\r\n ...arbitraryProps,\r\n name,\r\n value: value || \"\",\r\n placeholder,\r\n onChange: (e) => onChange?.(e),\r\n onBlur: (e) => onBlur?.(e),\r\n disabled,\r\n loading\r\n };\r\n if (id) {\r\n attrs.id = id;\r\n }\r\n if (className) {\r\n attrs.className = className;\r\n }\r\n\r\n return (\r\n \r\n );\r\n\r\n};\r\n\r\nCountryDropdown.defaultProps = defaultProps;\r\n\r\n\r\n","import { useEffect, useRef } from \"react\";\r\n\r\nexport const useIsUnmounted = () => {\r\n const isUnmountedRef = useRef(false);\r\n useEffect(() => () => void (isUnmountedRef.current = true), []);\r\n return { isUnmountedRef };\r\n}","import React, { useEffect } from 'react';\r\nimport { Select } from 'antd';\r\nimport { Region } from '.';\r\nimport { useIsUnmounted } from '../../../hooks';\r\nimport { useCountriesData } from '../../../hooks/useCountriesData';\r\n\r\nconst Option = Select.Option;\r\n\r\ntype StateDropdownProps = {\r\n\r\n country: string,\r\n countryValueType: string,\r\n\r\n value?: string,\r\n name?: string,\r\n id?: string,\r\n classes?: string,\r\n blankOptionLabel?: string,\r\n showDefaultOption?: boolean,\r\n defaultOptionLabel?: string,\r\n priorityOptions?: string[],\r\n onChange?: (value: string) => void;\r\n onBlur?: React.FocusEventHandler;\r\n labelType?: string,\r\n valueType?: string,\r\n disabled?: boolean,\r\n disableWhenEmpty?: boolean,\r\n placeholder?: string,\r\n customOptions?: string[],\r\n} & Readonly<{\r\n children?: React.ReactNode;\r\n}>\r\n\r\nconst defaultProps: StateDropdownProps = {\r\n country: '',\r\n value: '',\r\n name: 'rcrs-region',\r\n id: '',\r\n classes: '',\r\n blankOptionLabel: 'N/A',\r\n showDefaultOption: true,\r\n defaultOptionLabel: 'Select region',\r\n onChange: (value: string) => { },\r\n onBlur: () => { },\r\n countryValueType: 'short',\r\n labelType: 'full',\r\n valueType: 'short',\r\n disabled: false,\r\n disableWhenEmpty: true,\r\n customOptions: []\r\n};\r\n\r\nexport const StateDropdown: React.FC = (props) => {\r\n const { countries, loading } = useCountriesData();\r\n const { value, country, onChange, onBlur, id, name, classes, disabled, blankOptionLabel, showDefaultOption,\r\n defaultOptionLabel, labelType, valueType, countryValueType, disableWhenEmpty, customOptions,\r\n ...arbitraryProps } = props;\r\n\r\n const [regions, setRegions] = React.useState([] as Region[]);\r\n const { isUnmountedRef } = useIsUnmounted();\r\n\r\n const getCustomOptions = (regions: Region[]) => {\r\n const { customOptions } = props;\r\n\r\n const duplicateRegions = getDuplicates(regions);\r\n\r\n if (duplicateRegions.length) {\r\n console.error('Error: Duplicate regions present: ' + duplicateRegions.toString() + '.\\nThe above item(s) is/are already getting added to the region dropdown by the library.');\r\n return [];\r\n }\r\n\r\n return (customOptions || []).map((option) => {\r\n if (option) {\r\n return { name: option, shortCode: option };\r\n }\r\n else {\r\n return {};\r\n }\r\n });\r\n }\r\n\r\n const getDuplicates = (regions: Region[]): Region[] => {\r\n const { customOptions, valueType } = props;\r\n const regionKey: string = valueType === 'full' ? 'regionName' : 'regionShortCode';\r\n\r\n return regions.filter((region) => (customOptions || []).indexOf(region[regionKey]) !== -1).map(region => region[regionKey]) as Region[];\r\n }\r\n\r\n const getRegions = (country: string): Region[] => {\r\n if (!country) {\r\n return [];\r\n }\r\n const { countryValueType } = props;\r\n let regions = [] as any;\r\n countries.filter((c) => {\r\n let field = (countryValueType === 'full') ? c.countryName : c.countryShortCode;\r\n if (field === country) {\r\n regions = c.regions;\r\n }\r\n return regions;\r\n });\r\n\r\n if (!regions || regions.length === 0) {\r\n return [];\r\n }\r\n return Object.entries(regions).map(([, region]) => {\r\n let { name, shortCode } = region as Region;\r\n\r\n return { name: name, shortCode: shortCode } as Region;\r\n });\r\n }\r\n\r\n const getRegionList = () => {\r\n const { labelType, valueType } = props;\r\n return regions.map(({ name, shortCode }) => {\r\n const label = (labelType === 'full') ? name : shortCode;\r\n const value = (valueType === 'full') ? name : shortCode;\r\n return ;\r\n });\r\n }\r\n\r\n // there are two default options. The \"blank\" option which shows up when the user hasn't selected a country yet, and\r\n // a \"default\" option which shows\r\n const getDefaultOption = () => {\r\n const { blankOptionLabel, showDefaultOption, defaultOptionLabel, country } = props;\r\n if (!country || regions.length === 0) {\r\n return ;\r\n }\r\n if (showDefaultOption) {\r\n return ;\r\n }\r\n return null;\r\n }\r\n\r\n useEffect(() => {\r\n if (isUnmountedRef.current) {\r\n return;\r\n }\r\n\r\n if (country) {\r\n const defaultRegions = getRegions(country);\r\n setRegions([\r\n ...defaultRegions,\r\n ...getCustomOptions(defaultRegions)\r\n ] as Region[]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [country, isUnmountedRef, loading]);\r\n\r\n\r\n const isDisabled = disabled || (disableWhenEmpty && country === '') || (regions.length === 0 && !loading);\r\n const attrs: any = {\r\n ...arbitraryProps,\r\n name,\r\n value: value || \"\",\r\n onChange: (e) => onChange?.(e),\r\n onBlur: (e) => onBlur?.(e),\r\n disabled: isDisabled\r\n };\r\n if (id) {\r\n attrs.id = id;\r\n }\r\n if (classes) {\r\n attrs.className = classes;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nStateDropdown.defaultProps = defaultProps;\r\n","import React, { ChangeEvent, useState } from 'react';\r\nimport { Modal, Switch, Form, Input, Row, Col, Button, Typography } from 'antd';\r\n\r\nimport { updateBillingInfoActionAsync } from '../../stores/portalReducer';\r\nimport { CardElement, useStripe, useElements } from '@stripe/react-stripe-js';\r\nimport { StripeCardElementChangeEvent, StripeError } from '@stripe/stripe-js';\r\nimport { useAppDispatch } from '../../stores';\r\nimport { CountryDropdown, StateDropdown } from '../components/CountryStates';\r\n\r\nconst CARD_OPTIONS = {\r\n hidePostalCode: true,\r\n style: {\r\n base: {\r\n fontSize: window.innerWidth < 450 ? '14px' : '18px',\r\n color: '#424770',\r\n letterSpacing: '0.025em',\r\n fontFamily: 'Montserrat, sans-serif',\r\n '::placeholder': {\r\n color: '#aab7c4',\r\n },\r\n },\r\n invalid: {\r\n color: '#9e2146',\r\n },\r\n },\r\n};\r\ntype BillingInfo = {\r\n address_line1: string,\r\n address_line2: string,\r\n address_city: string,\r\n address_zip: string,\r\n address_country: string,\r\n address_state: string,\r\n name: string,\r\n}\r\n\r\ntype UpdateCardFormProps = {\r\n onSubmit: (event: any) => void;\r\n handleBlur: () => any;\r\n handleFieldChange: (event: ChangeEvent) => void;\r\n handleCardFieldChange: (event: StripeCardElementChangeEvent) => void;\r\n billing: BillingInfo,\r\n selectProvince: (value: string) => void;\r\n selectCountry: (value: string) => void;\r\n\r\n}\r\n\r\n\r\n\r\nexport const UpdateCardForm: React.FC = ({ onSubmit, handleBlur, handleFieldChange, handleCardFieldChange, billing, selectProvince, selectCountry }) => {\r\n\r\n const [showAdditionalInfo, setShowAdditionalInfo] = useState(false);\r\n const [form] = Form.useForm();\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 \r\n \r\n \r\n \r\n \r\n \r\n {showAdditionalInfo &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Billing Address\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 \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 \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\ntype UpdateBillingInfoModalProps = {\r\n visible: boolean;\r\n onCancel: () => void;\r\n onOk: () => void;\r\n accountId: string;\r\n}\r\n\r\nexport const UpdateBillingInfoModal: React.FC = ({ visible, onCancel, onOk, accountId }) => {\r\n const dispatch = useAppDispatch();\r\n\r\n const [error, setError] = useState(null as StripeError | null);\r\n const [cardComplete, setCardComplete] = useState(false);\r\n const [processing, setProcessing] = useState(false);\r\n const [billingInfo, setBillingInfo] = useState({\r\n address_line1: '',\r\n address_line2: '',\r\n address_city: '',\r\n address_zip: '',\r\n address_country: '',\r\n address_state: '',\r\n name: '',\r\n });\r\n\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n const handleCardFieldChange = event => {\r\n setCardComplete(event.complete);\r\n }\r\n const handleBlur = () => {\r\n validateForm();\r\n };\r\n\r\n const handleFieldChange = event => {\r\n setBillingInfo({\r\n ...billingInfo,\r\n [event.target.name]: event.target.value\r\n });\r\n }\r\n\r\n const validateForm = () => {\r\n return stripe && cardComplete;\r\n };\r\n\r\n const selectCountry = (value: string) => {\r\n setBillingInfo({\r\n ...billingInfo,\r\n address_country: value,\r\n address_state: ''\r\n });\r\n };\r\n\r\n const selectProvince = (value: string) => {\r\n setBillingInfo({\r\n ...billingInfo,\r\n address_state: value\r\n });\r\n };\r\n\r\n const handleSubmit = async event => {\r\n // We don't want to let default form submission happen here,\r\n // which would refresh the page.\r\n event.preventDefault();\r\n if (!stripe || !elements) {\r\n // Stripe.js has not yet loaded.\r\n // Make sure to disable form submission until Stripe.js has loaded.\r\n return;\r\n }\r\n\r\n if (cardComplete) {\r\n setProcessing(true);\r\n }\r\n\r\n const card = elements.getElement(CardElement);\r\n\r\n if (!card) return;\r\n\r\n const { token, error } = await stripe.createToken(card, billingInfo);\r\n\r\n if (error) {\r\n setError(error);\r\n } else {\r\n // Send the token to server.\r\n if (!token) return;\r\n\r\n await stripeTokenHandler(token?.id || \"\");\r\n }\r\n\r\n setProcessing(false);\r\n };\r\n\r\n const stripeTokenHandler = async (token: string) => {\r\n\r\n const result = await dispatch(updateBillingInfoActionAsync({\r\n ...billingInfo,\r\n token: token,\r\n accountId\r\n }));\r\n\r\n if (result === true) {\r\n onOk();\r\n }\r\n };\r\n\r\n return (\r\n Cancel,\r\n \r\n ]}\r\n >\r\n <>\r\n \r\n {error && {error.message}}\r\n \r\n \r\n );\r\n}\r\n\r\nconst ErrorMessage = ({ children }) => (\r\n
\r\n \r\n \r\n \r\n \r\n {children}\r\n
\r\n);\r\n\r\n\r\n\r\n","import React, { useState } from 'react';\r\nimport { Card, Collapse, Descriptions, Divider, Skeleton, Tag } from \"antd\";\r\nimport Avatar from \"antd/lib/avatar/avatar\";\r\nimport { EditOutlined } from '@ant-design/icons';\r\nimport visa from '../../assets/cards/visa.svg';\r\nimport masterCard from '../../assets/cards/mastercard.svg';\r\nimport amex from '../../assets/cards/amex.svg';\r\nimport { StripeCard } from \"../../types\";\r\nimport { UpdateBillingInfoModal } from './UpdateBillingInfo';\r\nimport { Elements } from '@stripe/react-stripe-js';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport { useAppState } from '../../stores';\r\n\r\nconst { Meta } = Card;\r\nconst { Panel } = Collapse;\r\n\r\ntype Props = {\r\n loading: boolean;\r\n card?: StripeCard;\r\n}\r\n\r\nexport const PaymentMethods: React.FC = ({ card, loading }) => {\r\n\r\n const [isModalVisible, setIsModalVisible] = useState(false);\r\n const { currentUser } = useAppState(state => state);\r\n\r\n const showModal = () => {\r\n setIsModalVisible(true);\r\n };\r\n\r\n const handleOk = () => {\r\n setIsModalVisible(false);\r\n };\r\n\r\n const handleCancel = () => {\r\n setIsModalVisible(false);\r\n };\r\n\r\n const updateCardExtra = () => (\r\n {\r\n showModal();\r\n event.stopPropagation();\r\n }}\r\n />\r\n );\r\n\r\n const getBrandIcon = (brand: string) => {\r\n switch (brand) {\r\n case \"Visa\": return visa;\r\n case \"MasterCard\": return masterCard;\r\n case \"American Express\": return amex;\r\n }\r\n }\r\n const getTitle = (brand: string, last4: string, isExpired: boolean) => {\r\n return <>\r\n {brand} **** {last4} {isExpired && (Expired)}\r\n \r\n }\r\n const cardHeader = (card: StripeCard) => {\r\n const date = new Date(card.ExpYear, card.ExpMonth, 1);\r\n var expiryDate = new Date(date.setMonth(date.getMonth() + 1));\r\n const isExpired = expiryDate < new Date();\r\n\r\n return }\r\n title={getTitle(card.Brand, card.Last4, isExpired)}\r\n description={`Expires ${card.ExpMonth} / ${card.ExpYear}`}\r\n />\r\n }\r\n\r\n const stripePromise = loadStripe(currentUser?.StripeApiKey || \"\");\r\n\r\n return (\r\n <>\r\n {card &&\r\n <>\r\n

Payment methods

\r\n \r\n \r\n \r\n \r\n <>\r\n \r\n {card.Name}\r\n **** **** **** {card.Last4}\r\n {card.ExpMonth} / {card.ExpYear}\r\n {card.Brand} {card.Funding} card\r\n \r\n {card.AddressLine1}
\r\n {card.AddressLine2 !== \"\" && <>{card.AddressLine2}
}\r\n {card.AddressCity}, {card.AddressState}, {card.AddressZip}, {card.AddressCountry}\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","import { StripeCustomerAccount } from \"../../types\"\r\nimport { AccountUpcomingInvoice } from \"./accountUpcomingInvoice\";\r\nimport { PaymentMethods } from \"./paymentMethods\"\r\n\r\ntype Props = {\r\n account: StripeCustomerAccount,\r\n loading: boolean;\r\n}\r\nexport const AccountBilling: React.FC = ({ account, loading }) => {\r\n return (\r\n <>\r\n {account.Card && }\r\n \r\n \r\n );\r\n}","export default __webpack_public_path__ + \"static/media/bv-logo.8f970aff.svg\";","export default __webpack_public_path__ + \"static/media/ep-logo.3fa90886.svg\";","import { useAppState } from '../../stores';\r\n\r\nimport bv_logo from '../../assets/bv-logo.svg';\r\nimport ep_logo from '../../assets/ep-logo.svg';\r\n\r\nexport const BrandLogo = () => {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n return (\r\n <>\r\n {currentUser?.IsBirdviewBrand ?\r\n \r\n \"Birdview\"\r\n :\r\n \r\n \"Easy\r\n }\r\n \r\n );\r\n}","import { Divider, Table, Typography } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport { Payment, PaymentItem } from \"../../types\";\r\n\r\nimport styles from './style.module.scss';\r\nimport moment from \"moment\";\r\n\r\ntype Props = {\r\n payment: Payment | undefined;\r\n}\r\n\r\nexport const PaymentItems: React.FC = ({ payment }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: 'Description',\r\n dataIndex: 'Description',\r\n key: 'Description',\r\n render: (text, record) => {\r\n return <>\r\n <>{record.Description}\r\n {record.HasTrialPeriod && <>
\r\n ({moment(record.TrialPeriodStart).format('MMM DD, YYYY')} - {moment(record.TrialPeriodEnd).format('MMM DD, YYYY')})\r\n \r\n }\r\n \r\n }\r\n },\r\n {\r\n title: 'Rate, USD',\r\n dataIndex: 'Rate',\r\n key: 'Rate',\r\n align: \"right\",\r\n width: '15%',\r\n render: val => <>{val < 0 ? \"-\" : \"\"}${(Math.abs(val)).toFixed(2)},\r\n },\r\n {\r\n title: 'Quantity',\r\n dataIndex: 'Quantity',\r\n key: 'Quantity',\r\n align: \"right\",\r\n width: '15%',\r\n },\r\n {\r\n title: 'Amount, USD',\r\n dataIndex: 'Amount',\r\n key: 'Amount',\r\n align: \"right\",\r\n width: '15%',\r\n render: val => <>{val < 0 ? \"-\" : \"\"}${(Math.abs(val)).toFixed(2)},\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n {!!payment && <>\r\n\r\n \r\n className={styles.upcoming_table}\r\n dataSource={payment.Items}\r\n columns={columns}\r\n rowKey={\"OrderItemId\"}\r\n pagination={false}\r\n summary={() => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n Subtotal\r\n {payment.Subtotal < 0 ? \"-\" : \"\"}${(Math.abs(payment.Subtotal)).toFixed(2)}\r\n \r\n {payment.Discount > 0 &&\r\n \r\n \r\n Discount\r\n -${payment.Discount.toFixed(2)}\r\n \r\n }\r\n \r\n \r\n GST/HST {(payment.Tax !== 0 && payment.Tax_Percent === 0) ? <> : <>({payment.Tax_Percent}%)}\r\n {payment.Tax < 0 ? \"-\" : \"\"}${(Math.abs(payment.Tax)).toFixed(2)}\r\n \r\n \r\n \r\n Grand Total\r\n {payment.GrandTotal < 0 ? \"-\" : \"\"}${(Math.abs(payment.GrandTotal)).toFixed(2)}\r\n \r\n \r\n \r\n Payment Type: {payment.PaymentType}\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n < Divider />\r\n }\r\n \r\n );\r\n}","import { Button, Col, Divider, Drawer, Row, Typography } from \"antd\"\r\nimport moment from \"moment\";\r\nimport { Payment } from \"../../types\";\r\nimport { exportHtmlToPdf } from \"../../utils/exportToPdf\";\r\nimport { BrandLogo } from \"../layout/BrandLogo\";\r\nimport { PaymentItems } from \"./paymentItems\";\r\nimport styles from './style.module.scss';\r\n\r\ntype Props = {\r\n data?: Payment;\r\n onClose: () => void;\r\n showDetails: boolean;\r\n}\r\n\r\nexport const PaymentDetails: React.FC = ({ onClose, showDetails, data }) => {\r\n\r\n const handleClose = () => {\r\n onClose();\r\n }\r\n\r\n const exportToPdf = () => {\r\n const element = document.querySelector(\"#container\");\r\n if (element)\r\n exportHtmlToPdf(element, `Receipt_${data?.OrderNumber}.pdf`);\r\n }\r\n return (\r\n <>\r\n {data &&
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Logic Software Inc.\r\n

\r\n 446 Autumn Hill Blvd
\r\n Vaughan ON L4J 9B8
\r\n Canada
\r\n +1 416-907 9944
\r\n accounting@birdviewpsa.com
\r\n https://birdviewpsa.com
\r\n HST Registration No.: 861513588 RT0001
\r\n

\r\n \r\n
\r\n \r\n

Receipt / Paid Invoice
\r\n #{data.OrderNumber}

\r\n
\r\n \r\n \r\n \r\n
BILL TO
\r\n
\r\n {data.BillingName}
\r\n {data.Company}
\r\n {data.BillingAddress?.AddressInfo}\r\n
\r\n \r\n \r\n
SHIP TO
\r\n
\r\n {data.ShippingName}
\r\n {data.Company}
\r\n {data.ShippingAddress?.AddressInfo}\r\n
\r\n \r\n \r\n
DATE
\r\n
{moment(data.OrderDate).format(\"MMM DD, YYYY\")}
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Thank you!\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}","import * as html2pdf from 'html2pdf.js';\r\n\r\nexport const exportHtmlToPdf = (element: HTMLElement, filename: string) => {\r\n\r\n const options = {\r\n margin: [0, 0.3],\r\n filename: filename,\r\n image: { type: \"jpeg\", quality: 1 },\r\n html2canvas: {},\r\n jsPDF: {\r\n unit: \"in\",\r\n format: \"letter\",\r\n orientation: \"portrait\",\r\n },\r\n };\r\n\r\n html2pdf().set(options).from(element).save();\r\n};","import { Button, Table, TableColumnsType, Tag } from \"antd\";\r\nimport moment from \"moment\";\r\nimport { useState } from \"react\";\r\nimport { Payment } from \"../../types\";\r\nimport { PaymentDetails } from \"./paymentDetails\";\r\n\r\ntype Props = {\r\n loading: boolean;\r\n rowKey: string;\r\n items: Payment[];\r\n}\r\n\r\nexport const PaymentHistory: React.FC = ({ loading, items, rowKey }) => {\r\n const columns: TableColumnsType = [\r\n {\r\n title: \"Order #\",\r\n dataIndex: 'OrderNumber',\r\n key: 'OrderNumber',\r\n width: 200,\r\n render: (text, record) => {\r\n return (\r\n \r\n );\r\n },\r\n },\r\n {\r\n title: \"Order Date\",\r\n dataIndex: 'OrderDate',\r\n key: 'OrderDate',\r\n align: \"center\",\r\n width: 150,\r\n render: val => <>{moment(val).format('MM/DD/YYYY')},\r\n },\r\n {\r\n title: \"Details\",\r\n dataIndex: 'Description',\r\n key: 'Description',\r\n render: (text, record) => {\r\n const orderNotes = record.OrderNotes === \"REFUND\" ? {record.OrderNotes} :\r\n record.OrderNotes === \"PRORATE\" ? {record.OrderNotes} : <>\r\n return (\r\n <> {record.Description} {orderNotes}\r\n {record.Comments &&\r\n \r\n
\r\n {record.Comments}\r\n
\r\n }\r\n \r\n );\r\n },\r\n },\r\n {\r\n title: \"Amount\",\r\n dataIndex: 'Amount',\r\n key: 'Amount',\r\n width: 150,\r\n align: \"right\",\r\n render: val => <>{val < 0 ? \"-\" : \"\"}${(Math.abs(val)).toFixed(2)},\r\n },\r\n {\r\n title: \"Tax\",\r\n dataIndex: 'Tax',\r\n key: 'Tax',\r\n width: 150,\r\n align: \"right\",\r\n render: val => <>{val < 0 ? \"-\" : \"\"}${(Math.abs(val)).toFixed(2)},\r\n },\r\n {\r\n title: \"Grand Total\",\r\n dataIndex: 'GrandTotal',\r\n key: 'GrandTotal',\r\n width: 150,\r\n align: \"right\",\r\n render: val => <>{val < 0 ? \"-\" : \"\"}${(Math.abs(val)).toFixed(2)},\r\n },\r\n\r\n ];\r\n\r\n const [showDetails, setShowDetails] = useState(false);\r\n const [payment, setPayment] = useState(undefined as Payment | undefined);\r\n\r\n const handleCloseDetails = () => {\r\n setShowDetails(false);\r\n setPayment(undefined);\r\n };\r\n\r\n const openPaymentDetails = (record: Payment) => {\r\n setShowDetails(true);\r\n setPayment(record);\r\n }\r\n\r\n const\r\n onRow = (record, rowIndex) => {\r\n return {\r\n onClick: (event) => openPaymentDetails(record),\r\n };\r\n }\r\n return (\r\n <>\r\n \r\n bordered\r\n loading={loading}\r\n dataSource={items}\r\n columns={columns}\r\n rowKey={rowKey}\r\n pagination={false}\r\n onRow={onRow}\r\n summary={() => {\r\n const amountTotals = items.reduce((a, { Amount }) => a + Amount, 0);\r\n const taxTotals = items.reduce((a, { Tax }) => a + Tax, 0);\r\n const grandTotalTotals = items.reduce((a, { GrandTotal }) => a + GrandTotal, 0);\r\n return (\r\n <>\r\n \r\n \r\n Totals:\r\n {amountTotals < 0 ? \"-\" : \"\"}${(Math.abs(amountTotals)).toFixed(2)}\r\n {taxTotals < 0 ? \"-\" : \"\"}${(Math.abs(taxTotals)).toFixed(2)}\r\n {grandTotalTotals < 0 ? \"-\" : \"\"}${(Math.abs(grandTotalTotals)).toFixed(2)}\r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n {payment && \r\n }\r\n );\r\n}","import { Alert, Row, Skeleton, Tabs } from 'antd';\r\nimport Meta from 'antd/lib/card/Meta';\r\nimport * as React from 'react';\r\nimport { useBillingModel } from '../../hooks/useBillingModel';\r\nimport { useAppDispatch } from \"../../stores\";\r\nimport { setPortalState } from '../../stores/portalReducer';\r\nimport { BillingModel, StripeCustomerAccount } from '../../types';\r\nimport { AccountBilling } from './accountBilling';\r\nimport { PaymentHistory } from './paymentHistory';\r\n\r\nconst { TabPane } = Tabs;\r\n\r\nexport const BillingsData: React.FC = () => {\r\n const dispatch = useAppDispatch();\r\n\r\n const { model, loading } = useBillingModel();\r\n\r\n const stripeAccounts = model?.StripeCustomerAccounts || [];\r\n const payments = model?.Payments || [];\r\n\r\n\r\n const onChange = (activeKey: string) => {\r\n const newModel = {\r\n ...model,\r\n SelectedCustomerAccount: activeKey\r\n }\r\n dispatch(\r\n setPortalState({\r\n billingModel: newModel as BillingModel,\r\n })\r\n );\r\n };\r\n\r\n const tabTitle = (account: StripeCustomerAccount) => {\r\n return \r\n }\r\n\r\n return (\r\n <>\r\n \r\n {stripeAccounts.length > 0 &&\r\n \r\n {stripeAccounts.map(account => (\r\n \r\n \r\n \r\n ))}\r\n \r\n\r\n }\r\n {stripeAccounts.length === 0 && <>\r\n

Payment methods

\r\n \r\n }\r\n
\r\n\r\n

Payment history

\r\n \r\n \r\n  \r\n \r\n \r\n );\r\n}","import { PageHeader } from 'antd';\r\nimport * as React from 'react';\r\nimport { BillingsData } from './billingData';\r\n\r\n\r\nclass Billing extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n )\r\n }\r\n}\r\nexport default Billing;","import React, { Component, FC, useState } from 'react';\r\nimport { Button, Col, Form, Input, Popover, Row } from 'antd';\r\nimport { LockOutlined } from '@ant-design/icons';\r\nimport { ChangePasswordParams } from '../../types';\r\nimport { useAppDispatch } from '../../stores';\r\nimport { changePasswordAsync } from '../../stores/portalReducer';\r\n\r\n\r\ntype Props = {\r\n onClose: () => void;\r\n}\r\n\r\nexport const ChangePasswordForm: FC = ({ onClose }) => {\r\n const dispatch = useAppDispatch();\r\n const [form] = Form.useForm();\r\n const [reseting, setReseting] = useState(false);\r\n\r\n const onFinished = async (values: ChangePasswordParams) => {\r\n setReseting(true);\r\n dispatch(await changePasswordAsync(values))\r\n .then((res) => {\r\n setReseting(false);\r\n if (typeof res === 'string') {\r\n const errorData = res.split(':');\r\n form.setFields([\r\n {\r\n name: errorData[0],\r\n errors: [errorData[1]],\r\n },\r\n ]);\r\n } else {\r\n form.resetFields();\r\n onClose();\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n layout=\"vertical\" form={form} onFinish={onFinished} >\r\n \r\n } placeholder=\"Old Password\" />\r\n \r\n \r\n } placeholder=\"New Password\" />\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 const ChangePasswordPopup: React.FC = () => {\r\n const [visible, setVisible] = React.useState(false);\r\n const wrapper = React.createRef();\r\n const handleCloseDetails = () => {\r\n setVisible(false);\r\n };\r\n\r\n const handleVisibleChange = (visible) => {\r\n setVisible(visible);\r\n }\r\n\r\n return (\r\n Change password}\r\n visible={visible}\r\n onVisibleChange={handleVisibleChange}\r\n content={
}\r\n trigger=\"click\">\r\n \r\n
\r\n );\r\n}\r\n","import { Spin } from 'antd';\r\n\r\nexport const PageLoading = () => (\r\n
\r\n \r\n
\r\n);\r\n","import { Form, Row, Col, Divider, Input, FormInstance } from 'antd';\r\nimport { AddressForm } from './addressForm';\r\n\r\ntype Props = {\r\n contact: string;\r\n form: FormInstance;\r\n}\r\n\r\nexport const ContactForm: React.FC = ({ form, contact }) => {\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 \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 \r\n \r\n \r\n}","import React from \"react\";\r\nimport { useAppDispatch, useAppState } from \"../stores\";\r\nimport { getClientModelAsync } from \"../stores/portalReducer\";\r\n\r\n\r\nexport const useClientModel = () => {\r\n const dispatch = useAppDispatch();\r\n const model = useAppState(state => state.clientModel);\r\n const loading = !model;\r\n\r\n React.useEffect(() => {\r\n if (!model) {\r\n dispatch(getClientModelAsync());\r\n }\r\n }, [model, dispatch]);\r\n\r\n\r\n return { model, loading }\r\n}","import { Form, Row, Col, Divider, Input, FormInstance } from 'antd';\r\nimport { useState } from 'react';\r\nimport { CountryDropdown, StateDropdown } from '../components/CountryStates';\r\nimport { Address } from '../../types';\r\n\r\ntype Props = {\r\n address:string;\r\n form: FormInstance;\r\n}\r\n\r\nexport const AddressForm: React.FC = ({ form, address }) => {\r\n const getAddress = () => {\r\n return form.getFieldValue(`${address}`);\r\n }\r\n const [, countryChanged] = useState(false);\r\n\r\n const changeCountry = (value: string) => {\r\n countryChanged(true);\r\n\r\n form.setFieldsValue({\r\n [address]: {\r\n AddressCountry: value,\r\n AddressState: \"\",\r\n }\r\n });\r\n };\r\n\r\nreturn <>\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 \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}","import React, { useState } from 'react';\r\nimport { Form, Divider, Input, Button } from 'antd';\r\nimport { useAppDispatch } from '../../stores';\r\nimport { updateCompanyInformationAsync } from '../../stores/portalReducer';\r\n\r\nimport Checkbox from 'antd/lib/checkbox/Checkbox';\r\nimport { Client } from '../../types';\r\nimport { PageLoading } from '../components/PageLoading';\r\nimport styles from './style.module.scss';\r\nimport { ContactForm } from './contactForm';\r\nimport { useClientModel } from '../../hooks/useClientModel';\r\nimport { AddressForm } from './addressForm';\r\n\r\nexport const ClientProfile: React.FC = () => {\r\n const dispatch = useAppDispatch();\r\n const { model, loading } = useClientModel();\r\n\r\n const [updating, setUpdating] = useState(false);\r\n\r\n const [showBillingContact, setShowBillingContact] = useState(false);\r\n const [showBillingAddress, setShowBillingAddress] = useState(false);\r\n\r\n const [form] = Form.useForm();\r\n\r\n React.useEffect(() => {\r\n if (model) {\r\n setShowBillingContact(!model?.Client.BillingContactSameAsProduct);\r\n setShowBillingAddress(!model?.Client.BillingAddressSameAsShipping);\r\n }\r\n }, [model]);\r\n\r\n const onChangeContact = (e: any) => {\r\n setShowBillingContact(!e.target.checked);\r\n \r\n let primaryContact= form.getFieldValue(\"PrimaryContact\");\r\n form.setFieldsValue({\r\n [\"BillingContact\"]:{\r\n FirstName: primaryContact.FirstName,\r\n LastName: primaryContact.LastName,\r\n Email: primaryContact.Email,\r\n Phone: primaryContact.Phone,\r\n Title: primaryContact.Title,\r\n }\r\n });\r\n }\r\n\r\n const onChangeAddress = (e: any) => {\r\n setShowBillingAddress(!e.target.checked);\r\n let shippingAddress= form.getFieldValue(\"ShippingAddress\");\r\n form.setFieldsValue({\r\n [\"BillingAddress\"]:{\r\n AddressCountry: shippingAddress.AddressCountry,\r\n AddressState: shippingAddress.AddressState,\r\n AddressLine1: shippingAddress.AddressLine1,\r\n AddressLine2: shippingAddress.AddressLine2,\r\n AddressCity: shippingAddress.AddressCity,\r\n AddressZip: shippingAddress.AddressZip,\r\n }\r\n });\r\n }\r\n const onFinished = async (client: Client) => {\r\n setUpdating(true);\r\n dispatch(await updateCompanyInformationAsync({\r\n ...client,\r\n BillingContactSameAsProduct: !showBillingContact,\r\n BillingAddressSameAsShipping: !showBillingAddress,\r\n }))\r\n .then((res) => {\r\n setUpdating(false);\r\n });\r\n };\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n
\r\n form={form} onFinish={onFinished} layout=\"vertical\" initialValues={model?.Client}>\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n  \r\n
\r\n\r\n
\r\n Primary Contact\r\n \r\n \r\n \r\n
\r\n
\r\n Shipping address\r\n \r\n \r\n \r\n
\r\n
\r\n Billing Contact\r\n {showBillingContact &&\r\n \r\n \r\n \r\n\r\n }\r\n \r\n Same as primary contact\r\n \r\n
\r\n
\r\n Billing Address\r\n {showBillingAddress &&\r\n \r\n \r\n \r\n }\r\n \r\n Same as shiping address\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","import { Button, PageHeader } from 'antd';\r\nimport * as React from 'react';\r\nimport { ChangePasswordPopup } from './changePassword';\r\nimport { ClientProfile } from './clientProfile';\r\n\r\nclass CompanyProfile extends React.Component {\r\n\r\n\r\n public render() {\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 )\r\n }\r\n}\r\nexport default CompanyProfile;","import React, { useState } from 'react';\r\nimport { Typography, Divider, Form, Checkbox, Input, Button, Space, Descriptions, Col, Card } from 'antd';\r\nimport { EditOutlined, DeleteTwoTone, PlusOutlined } from '@ant-design/icons';\r\nimport { useClientModel } from '../../hooks/useClientModel';\r\nimport { Client, Contact } from '../../types';\r\nimport { PageLoading } from '../components/PageLoading';\r\nimport styles from './style.module.scss';\r\nimport { useHistory } from 'react-router';\r\nimport { useAppDispatch } from '../../stores';\r\nimport { updateEmailNotificationsAsync } from '../../stores/portalReducer';\r\nimport { isHostedClient } from '../../utils';\r\n\r\nexport const EmailSettings: React.FC = () => {\r\n\r\n const dispatch = useAppDispatch();\r\n const { model, loading } = useClientModel();\r\n const [updating, setUpdating] = useState(false);\r\n const [form] = Form.useForm();\r\n const history = useHistory();\r\n const [subscribed, setSubscribed] = useState(false);\r\n const [showWeekly, setShowWeekly] = useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!loading) {\r\n setSubscribed(model?.Client.IsSubscribed || false);\r\n // hide weekly account review report section\r\n setShowWeekly(false); // isHostedClient(model?.ClientLicenseType));\r\n }\r\n }, [loading, model]);\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n\r\n\r\n const copyContactFrom = (key: number, contact: Contact | undefined) => {\r\n const { Subscribers } = form.getFieldsValue();\r\n\r\n const newSubscribers = [...Subscribers];\r\n const item = newSubscribers[key];\r\n const newItem = {\r\n Name: contact?.Name,\r\n Email: contact?.Email,\r\n }\r\n newSubscribers.splice(key, 1, {\r\n ...item,\r\n ...newItem,\r\n });\r\n\r\n form.setFieldsValue({\r\n Subscribers: newSubscribers\r\n });\r\n validateForm();\r\n }\r\n\r\n const editContact = event => {\r\n history.push('/portal/companyProfile');\r\n event.stopPropagation();\r\n }\r\n\r\n const validateForm = async () => {\r\n await form.validateFields();\r\n }\r\n const onFinished = async (client: Client) => {\r\n validateForm();\r\n\r\n setUpdating(true);\r\n await dispatch(updateEmailNotificationsAsync(client));\r\n setUpdating(false);\r\n };\r\n\r\n const onChange = (e: any) => {\r\n setSubscribed(e.target.checked);\r\n }\r\n\r\n const validateDuplicate = (rule: any, value: any) => {\r\n if (value) {\r\n const { Subscribers } = form.getFieldsValue();\r\n const isValid = Subscribers.filter(x => x && x.Email === value.trim()).length <= 1;\r\n if (isValid) {\r\n return Promise.resolve();\r\n } else {\r\n return Promise.reject(`Duplicate email. Please enter unique email`);\r\n }\r\n }\r\n else {\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n Primary Contact\r\n \r\n }\r\n bordered={false}\r\n >\r\n \r\n
\r\n \r\n Name}>{model?.Client.PrimaryContact.Name}\r\n Email}>{model?.Client.PrimaryContact.Email}\r\n \r\n
\r\n
\r\n General notifications: product tips & tricks, maintenance notices, product updates, etc.
\r\n Frequency: occasionaly \r\n
\r\n
\r\n \r\n \r\n Billing Contact\r\n \r\n \r\n }\r\n bordered={false}\r\n >\r\n \r\n
\r\n \r\n Name}>{model?.Client.BillingContact.Name}\r\n Email}>{model?.Client.BillingContact.Email}\r\n \r\n
\r\n
\r\n Upcoming charges, transaction receipts, etc.
\r\n Frequency: occasionaly \r\n
\r\n
\r\n \r\n {showWeekly && \r\n form={form}\r\n requiredMark={false}\r\n onFinish={onFinished}\r\n initialValues={model?.Client} >\r\n\r\n \r\n Weekly usage report\r\n }\r\n bordered={false}\r\n >\r\n {subscribed &&\r\n \r\n \r\n {(fields, { add, remove }) => (\r\n <>\r\n {fields.map(({ key, name, ...restField }) => (\r\n
\r\n Name}\r\n name={[name, 'Name']}\r\n rules={[\r\n { required: true, whitespace: true, message: 'Name is required!' },\r\n ]}\r\n >\r\n \r\n \r\n Email}\r\n name={[name, 'Email']}\r\n rules={[{\r\n type: 'email',\r\n message: 'The input is not valid e-mail!',\r\n },\r\n {\r\n required: true,\r\n whitespace: true,\r\n message: 'Email is required!'\r\n },\r\n {\r\n validator: validateDuplicate,\r\n },\r\n ]}>\r\n validateForm()} />\r\n \r\n \r\n }>\r\n \r\n \r\n {fields.length > 1 && remove(name)} />}\r\n \r\n \r\n \r\n
\r\n\r\n ))}\r\n {fields.length < 3 && \r\n \r\n \r\n }\r\n \r\n )}\r\n
\r\n
\r\n Personalized product usage statistics
\r\n Frequency: weekly \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","import { PageHeader } from 'antd';\r\nimport * as React from 'react';\r\nimport { EmailSettings } from './emailSettings';\r\n\r\n\r\nclass EmailNotifications extends React.Component {\r\n public render() {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n )\r\n }\r\n}\r\nexport default EmailNotifications;","\r\n\r\nexport const getSiteNameByBrand = (isBirdviewBrand?: boolean) => {\r\n return isBirdviewBrand === undefined ?\r\n \"Customer Portal\"\r\n : isBirdviewBrand ? \"Birdview Customer Portal\" : \"Easy Projects Customer Portal\";\r\n}\r\n\r\n\r\nexport const getPageTitle = (title?: string, isBirdviewBrand?: boolean) => {\r\n\r\n return title ? `${title} | ${getSiteNameByBrand(isBirdviewBrand)}` : `${getSiteNameByBrand(isBirdviewBrand)}`;\r\n}\r\n\r\n\r\nexport const isInhouseClient = (type?: number) => {\r\n return type === 1 || type === 2;\r\n}\r\n\r\nexport const isHostedClient = (type?: number) => {\r\n return type === 4;\r\n}\r\n\r\nexport const isInhouseSubscriptionClient = (type?: number) => {\r\n return type === 9;\r\n}\r\n\r\nexport const isExtraStorage = (type?: number) => {\r\n return type === 7;\r\n}\r\nexport const isAddIns = (type?: number) => {\r\n return type === 10;\r\n}\r\nexport const hasRenewOptions = (type: number) => {\r\n const renewedTypes = [2, 4, 7, 9, 10, 11, 12, 14];\r\n return renewedTypes.includes(type);\r\n}\r\n\r\nexport const showUpdatePlanButton = (edition: number) => {\r\n //exclude lite | ps_lite edition\r\n \r\n return edition !== 2 && edition !== 7;\r\n \r\n}\r\n\r\n","export const editions = [\r\n { value: -1, name: \"Unknown\" },\r\n { value: 0, name: \"Legacy Team\" },\r\n { value: 1, name: \"Legacy Enterprise\" },\r\n { value: 2, name: \"Lite\" },\r\n { value: 3, name: \"Team\" },\r\n { value: 4, name: \"Enterprise\" },\r\n { value: 7, name: \"PSA Lite\" },\r\n { value: 5, name: \"PSA Team\" },\r\n { value: 6, name: \"PSA Enterprise\" },\r\n\r\n { value: 8, name: \"Project Management Lite\" },\r\n { value: 9, name: \"Project Management Team\" },\r\n { value: 10, name: \"Project Management Enterprise\" },\r\n\r\n { value: 11, name: \"Resource Management Team\" },\r\n { value: 12, name: \"Resource Management Enterprise\" },\r\n];\r\n\r\nexport const trialTypes = [\r\n { value: 0, name: \"Self Serve\" },\r\n { value: 1, name: \"Sales Assisted\" },\r\n];\r\n\r\nexport const brands = [\r\n { value: 0, name: \"Easy Projects\" },\r\n { value: 1, name: \"Birdview\" },\r\n];\r\n\r\nexport const useInStats = [\r\n { value: 0, name: \"Yes\" },\r\n { value: 1, name: \"No\" },\r\n];\r\n\r\nexport const roles = [\r\n { value: 1, name: \"Administrator\" },\r\n { value: 2, name: \"Accounting\" },\r\n { value: 3, name: \"Sales\" },\r\n { value: 4, name: \"Support\" },\r\n { value: 6, name: \"Affilate\" },\r\n { value: 7, name: \"Statistics\" },\r\n];\r\n\r\nexport const userStatuses = [\r\n { value: 1, name: \"Active\" },\r\n { value: 0, name: \"Deactivated\" },\r\n];\r\nexport const salesStatuses = [\r\n { value: 1, name: \"Active\" },\r\n { value: 0, name: \"Inactive\" },\r\n];\r\nexport const showInDashboards = [\r\n { value: 1, name: \"Yes\" },\r\n { value: 0, name: \"No\" },\r\n];\r\nexport const categories = [\r\n { value: 1, name: \"Retention\" },\r\n { value: 0, name: \"Inbound\" },\r\n];\r\nexport const getBrand = (value) => {\r\n let brand = brands.find(x => x.value === value);\r\n if (!!brand) {\r\n return brand.name;\r\n }\r\n return value;\r\n};\r\nexport const getEdition = (value) => {\r\n let edition = editions.find(x => x.value === value);\r\n if (!!edition) {\r\n return edition.name;\r\n }\r\n return value;\r\n};\r\nexport const getClientType = (item) => {\r\n return item.isHosted ? \"Hosted\" : \"In-house\";\r\n};\r\nexport const getClientStatus = (item) => {\r\n return item.isCanceled ? \"Cancelled\" : \"Active\";\r\n};\r\nexport const getEnumName = (value, enums) => {\r\n return (enums.find(x => x.value === value) || []).name || value;\r\n};\r\n\r\nexport const invoiceTerms = [\r\n { value: 0, name: \"Term0\" },\r\n { value: 30, name: \"Term30\" },\r\n { value: 45, name: \"Term45\" },\r\n { value: 60, name: \"Term60\" },\r\n];\r\n\r\nexport const taxes = [\r\n { value: 0, name: \"No Tax\" },\r\n { value: 5, name: \"5% Tax\" },\r\n // { value: 12, name: \"12% Tax\" },\r\n { value: 13, name: \"13% Tax\" },\r\n // { value: 14, name: \"14% Tax\" },\r\n { value: 15, name: \"15% Tax\" },\r\n];\r\n\r\nexport const products = [\r\n {\r\n value: 0,\r\n groupName: \"Hosted\",\r\n items: [\r\n { value: \"EP-TEAM-Host\", name: \"Easy Projects Legacy TEAM Host Subscription\" },\r\n { value: \"EP-ENT-Host\", name: \"Easy Projects Legacy ENT Host Subscription\" },\r\n { value: \"EP-NPS-TEAM-Host\", name: \"Easy Projects TEAM Host Subscription\" },\r\n { value: \"EP-NPS-ENT-Host\", name: \"Easy Projects ENT Host Subscription\" },\r\n { value: \"PS-LITE-Host\", name: \"Birdview PSA LITE Host Subscription\" },\r\n\r\n { value: \"PS-TEAM-Host\", name: \"Birdview PSA TEAM Host Subscription\" },\r\n { value: \"PS-ENT-Host\", name: \"Birdview PSA ENT Host Subscription\" },\r\n \r\n { value: \"PM-LITE-Host\", name: \"Birdview Project Management LITE Host Subscription\" },\r\n { value: \"PM-TEAM-Host\", name: \"Birdview Project Management TEAM Host Subscription\" },\r\n { value: \"PM-ENT-Host\", name: \"Birdview Project Management ENT Host Subscription\" },\r\n \r\n { value: \"RM-TEAM-Host\", name: \"Birdview Resource Management TEAM Host Subscription\" },\r\n { value: \"RM-ENT-Host\", name: \"Birdview Resource Management ENT Host Subscription\" },\r\n ]\r\n },\r\n {\r\n value: 1,\r\n groupName: \"In-house\",\r\n items: [\r\n { value: \"EP-TEAM\", name: \"EP.NET TEAM In-House Subscription\" },\r\n { value: \"EP-ENT\", name: \"EP.NET ENT In-House Subscription\" },\r\n ]\r\n },\r\n {\r\n value: 2,\r\n groupName: \"3rd party\",\r\n items: [\r\n { value: \"Private-Cloud\", name: \"Private Cloud Subscription \" },\r\n { value: \"PBI\", name: \"Power BI Subscription\" },\r\n { value: \"outlookaddin\", name: \"MS Outlook Add-in for Easy Projects\" },\r\n { value: \"qbconnector\", name: \"Easy Projects To QuickBooks Connector\" },\r\n { value: \"EPO365\", name: \"Outlook 365 for Easy Projects\" },\r\n { value: \"EPCC\", name: \"Easy Projects for Adobe Creative Cloud\" },\r\n ]\r\n },\r\n {\r\n value: 3,\r\n groupName: \"Services\",\r\n items: [\r\n { value: \"EP-TRAINING\", name: \"Training\" },\r\n { value: \"EP-SERVICES\", name: \"Easy Projects Services\" },\r\n { value: \"PROF-SERVICES\", name: \"Professional Services\" }\r\n ]\r\n }\r\n];\r\n\r\nexport const taxRateStatuses = [\r\n { value: 1, name: \"Active\" },\r\n { value: 0, name: \"Archived\" },\r\n];\r\n\r\nexport const LicenseRenewalType = [\r\n { value: 0, name: \"Automatic\" },\r\n { value: 1, name: \"Manual\" },\r\n { value: 2, name: \"GS Auto renewal off\" },\r\n { value: 3, name: \"Free\" },\r\n];\r\n\r\nexport const LicenseType = [\r\n { value: 0, name: \"Unknown\" },\r\n { value: 1, name: \"In-house Perpetual\" },\r\n { value: 2, name: \"In-house Perpetual with GS\" },\r\n { value: 3, name: \"Limited access\" },\r\n { value: 4, name: \"Hosted subscription\" },\r\n { value: 5, name: \"Source\" },\r\n { value: 6, name: \"Source with GS\" },\r\n { value: 7, name: \"Extra Storage\" },\r\n { value: 8, name: \"Additional Services\" },\r\n { value: 9, name: \"In-house subscription\" },\r\n { value: 10, name: \"Add Ins\" },\r\n { value: 11, name: \"Private Cloud\" },\r\n { value: 12, name: \"Power BI\" },\r\n { value: 13, name: \"PS Maintenance\" },\r\n];\r\n\r\nexport const getProductName = (brand: string, edition: string) => `${brand} ${edition}`;\r\n\r\n","import { Divider, Table, Tag, Tooltip, Typography } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport moment from \"moment\";\r\nimport * as enums from \"../../constants/enums\";\r\nimport { Subscription } from \"../../types\";\r\nimport { hasRenewOptions, isExtraStorage, isHostedClient, isInhouseClient } from \"../../utils\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n loading: boolean;\r\n rowKey: string;\r\n items: Subscription[];\r\n clientLicenseType?: number;\r\n}\r\n\r\nexport const ActiveSubscriptions: React.FC = ({ loading, items, rowKey, clientLicenseType }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: \"Created on\",\r\n dataIndex: 'FirstOrderDate',\r\n key: 'FirstOrderDate',\r\n width: 150,\r\n render: val => <>{moment(val).format('MM/DD/YYYY')},\r\n },\r\n\r\n {\r\n title: <>{isHostedClient(clientLicenseType) ? \"Users / Storage\" : \"Users\"},\r\n dataIndex: 'NumberOfUsers',\r\n key: 'NumberOfUsers',\r\n align: \"right\",\r\n width: 150,\r\n render: (text, record) => {\r\n if (isExtraStorage(record.LicenseType)) {\r\n return <> {record.ExtraStorage} Gb\r\n } else {\r\n return <>\r\n {record.IsRestrictedLicense &&\r\n \r\n RESTRICTED\r\n }\r\n {record.NumberOfUsers}\r\n \r\n }\r\n },\r\n },\r\n {\r\n title: \"Product\",\r\n dataIndex: 'ProductName',\r\n key: 'ProductName',\r\n width: 300,\r\n render: (text, record) => {\r\n const version = isHostedClient(record.LicenseType) || isExtraStorage(record.LicenseType) ? latest :\r\n {record.Version}\r\n return (\r\n <> {record.ProductName} {enums.getEdition(record.Edition)}: {version}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Type\",\r\n dataIndex: 'LicenseType',\r\n key: 'LicenseType',\r\n width: '20%',\r\n render: (text, record) => {\r\n return (\r\n <> {enums.getEnumName(record.LicenseType, enums.LicenseType)} {record.LicenseRenewal === 3 && (FREE)}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Last Payment\",\r\n dataIndex: 'LastPaymentDate',\r\n key: 'LastPaymentDate',\r\n width: 150,\r\n render: (text, record) => {\r\n return (\r\n <> {record.LicenseRenewal !== 3 && <>{record.LastPaymentDate ? moment(record.LastPaymentDate).format('MM/DD/YYYY') : \"\"}} \r\n \r\n );\r\n },\r\n },\r\n {\r\n title: \"Term (months)\",\r\n dataIndex: 'ExpirationTerm',\r\n key: 'ExpirationTerm',\r\n align: \"right\",\r\n render: (text, record) => {\r\n if (hasRenewOptions(record.LicenseType) && record.LicenseRenewal !== 3) {\r\n return <>{record.ExpirationTerm}\r\n }\r\n return <>\r\n },\r\n },\r\n {\r\n title: \"Renews on\",\r\n dataIndex: 'ExpireDate',\r\n key: 'ExpireDate',\r\n render: (text, record) => {\r\n if (hasRenewOptions(record.LicenseType) && record.LicenseRenewal !== 3) {\r\n const expire = moment(record.ExpireDate).format('MM/DD/YYYY');\r\n const cancelledAt = moment(record.CancelledAt || record.ExpireDate).format('MM/DD/YYYY');\r\n const today = moment().format('MM/DD/YYYY');\r\n if (record.IsStripeSubscriptionActive) {\r\n if (moment(expire) < moment(today)) {\r\n return {expire}\r\n }\r\n return {expire}\r\n } else {\r\n return Cancelled at {cancelledAt}\r\n }\r\n }\r\n return <>\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n Active {isInhouseClient(clientLicenseType) ? \"Licenses\" : \"Subscriptions\"}\r\n \r\n bordered\r\n loading={loading}\r\n dataSource={items}\r\n columns={columns}\r\n rowKey={rowKey}\r\n pagination={false}\r\n />\r\n );\r\n}","import { Divider, Table, Typography } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport moment from \"moment\";\r\nimport { Subscription } from \"../../types\";\r\nimport { hasRenewOptions, isAddIns } from \"../../utils\";\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n loading: boolean;\r\n rowKey: string;\r\n items: Subscription[];\r\n}\r\n\r\nexport const ActiveThirdPartySubscriptions: React.FC = ({ loading, items, rowKey }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: \"Created on\",\r\n dataIndex: 'FirstOrderDate',\r\n key: 'FirstOrderDate',\r\n width: 150,\r\n render: val => <>{moment(val).format('MM/DD/YYYY')},\r\n },\r\n\r\n {\r\n title: \"Users\",\r\n dataIndex: 'NumberOfUsers',\r\n key: 'NumberOfUsers',\r\n align: \"right\",\r\n width: 150,\r\n render: (text, record) => {\r\n if (isAddIns(record.LicenseType)) {\r\n return <> {record.NumberOfUsers}\r\n }\r\n },\r\n },\r\n {\r\n title: \"Product\",\r\n dataIndex: 'ProductName',\r\n key: 'ProductName',\r\n width: 300,\r\n render: (text, record) => {\r\n return (\r\n <> {record.ProductName} {record.LicenseRenewal === 3 && (FREE)}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Last Payment\",\r\n dataIndex: 'LastPaymentDate',\r\n key: 'LastPaymentDate',\r\n width: 150,\r\n render: (text, record) => {\r\n return (\r\n <> {record.LicenseRenewal !== 3 && <>{record.LastPaymentDate ? moment(record.LastPaymentDate).format('MM/DD/YYYY') :\"\"}} \r\n );\r\n },\r\n },\r\n {\r\n title: \"Term (months)\",\r\n dataIndex: 'ExpirationTerm',\r\n key: 'ExpirationTerm',\r\n align: \"right\",\r\n render: (text, record) => {\r\n if (hasRenewOptions(record.LicenseType) && record.LicenseRenewal !== 3) {\r\n return <>{record.ExpirationTerm}\r\n }\r\n return <>\r\n },\r\n },\r\n\r\n {\r\n title: \"Renews on\",\r\n dataIndex: 'ExpireDate',\r\n key: 'ExpireDate',\r\n render: (text, record) => {\r\n if (hasRenewOptions(record.LicenseType) && record.LicenseRenewal !== 3) {\r\n const expire = moment(record.ExpireDate).format('MM/DD/YYYY');\r\n const cancelledAt = moment(record.CancelledAt || record.ExpireDate).format('MM/DD/YYYY');\r\n const today = moment().format('MM/DD/YYYY');\r\n if (record.IsStripeSubscriptionActive) {\r\n if (moment(expire) < moment(today)) {\r\n return {expire}\r\n }\r\n return {expire}\r\n } else {\r\n return Cancelled at {cancelledAt}\r\n }\r\n }\r\n return <>\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n Active 3rd party Subscriptions\r\n \r\n bordered\r\n loading={loading}\r\n dataSource={items}\r\n columns={columns}\r\n rowKey={rowKey}\r\n pagination={false}\r\n />\r\n\r\n\r\n );\r\n}","import { Divider, Table, Tag, Tooltip, Typography } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport moment from \"moment\";\r\nimport * as enums from \"../../constants/enums\";\r\nimport { Subscription } from \"../../types\";\r\nimport { isExtraStorage, isHostedClient, isInhouseClient } from \"../../utils\";\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n loading: boolean;\r\n rowKey: string;\r\n items: Subscription[];\r\n clientLicenseType?: number;\r\n}\r\n\r\nexport const CancelledSubscriptions: React.FC = ({ loading, items, rowKey, clientLicenseType }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: \"Created on\",\r\n dataIndex: 'FirstOrderDate',\r\n key: 'FirstOrderDate',\r\n width: 150,\r\n render: val => <>{moment(val).format('MM/DD/YYYY')},\r\n },\r\n {\r\n title: <>{isHostedClient(clientLicenseType) ? \"Users / Storage\" : \"Users\"},\r\n dataIndex: 'NumberOfUsers',\r\n key: 'NumberOfUsers',\r\n align: \"right\",\r\n width: 150,\r\n render: (text, record) => {\r\n if (isExtraStorage(record.LicenseType)) {\r\n return <> {record.ExtraStorage} Gb\r\n } else {\r\n return <>\r\n {record.IsRestrictedLicense &&\r\n \r\n RESTRICTED\r\n }\r\n {record.NumberOfUsers}\r\n \r\n }\r\n },\r\n },\r\n {\r\n title: \"Product\",\r\n dataIndex: 'ProductName',\r\n key: 'ProductName',\r\n width: 300,\r\n render: (text, record) => {\r\n const version = isExtraStorage(record.LicenseType) ? <> : {record.Version};\r\n return (\r\n <> {record.ProductName} {enums.getEdition(record.Edition)}: {version}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Type\",\r\n dataIndex: 'LicenseType',\r\n key: 'LicenseType',\r\n width: '20%',\r\n render: (text, record) => {\r\n return (\r\n <> {enums.getEnumName(record.LicenseType, enums.LicenseType)} {record.LicenseRenewal === 3 && (FREE)}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Cancelled on\",\r\n dataIndex: 'CancellationDate',\r\n key: 'CancellationDate',\r\n render: val => <>{val ? moment(val).format('MM/DD/YYYY') : \"\"},\r\n },\r\n ];\r\n return (\r\n <>\r\n Cancelled {isInhouseClient(clientLicenseType) ? \"Licenses\" : \"Subscriptions\"}\r\n \r\n bordered\r\n loading={loading}\r\n dataSource={items}\r\n columns={columns}\r\n rowKey={rowKey}\r\n pagination={false}\r\n />\r\n );\r\n}","import { Divider, Table, Typography } from \"antd\";\r\nimport { ColumnsType } from \"antd/lib/table\";\r\nimport moment from \"moment\";\r\nimport * as enums from \"../../constants/enums\";\r\nimport { Subscription } from \"../../types\";\r\nimport { isAddIns } from \"../../utils\";\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n loading: boolean;\r\n rowKey: string;\r\n items: Subscription[];\r\n}\r\n\r\nexport const CancelledThirdPartySubscriptions: React.FC = ({ loading, items, rowKey }) => {\r\n const columns: ColumnsType = [\r\n {\r\n title: \"Created on\",\r\n dataIndex: 'FirstOrderDate',\r\n key: 'FirstOrderDate',\r\n width: 150,\r\n render: val => <>{moment(val).format('MM/DD/YYYY')},\r\n },\r\n {\r\n title: \"Users\",\r\n dataIndex: 'NumberOfUsers',\r\n key: 'NumberOfUsers',\r\n align: \"right\",\r\n width: 150,\r\n render: (text, record) => {\r\n if (isAddIns(record.LicenseType)) {\r\n return <> {record.NumberOfUsers}\r\n }\r\n },\r\n },\r\n {\r\n title: \"Product\",\r\n dataIndex: 'ProductName',\r\n key: 'ProductName',\r\n width: 300,\r\n render: (text, record) => {\r\n return (\r\n <> {record.ProductName} {record.LicenseRenewal === 3 && (FREE)}\r\n );\r\n },\r\n },\r\n {\r\n title: \"Cancelled on\",\r\n dataIndex: 'CancellationDate',\r\n key: 'CancellationDate',\r\n render: val => <>{val ? moment(val).format('MM/DD/YYYY') : \"\"},\r\n },\r\n ];\r\n return (\r\n <>\r\n Cancelled 3rd party Subscriptions\r\n \r\n bordered\r\n loading={loading}\r\n dataSource={items}\r\n columns={columns}\r\n rowKey={rowKey}\r\n pagination={false}\r\n />\r\n );\r\n}","import { useAppState } from '../../stores';\r\n\r\nexport const ContactSales = () => {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n return (\r\n <>\r\n {currentUser?.IsBirdviewBrand ?\r\n \r\n contact our sales department.\r\n :\r\n \r\n contact our sales department.\r\n }\r\n \r\n\r\n );\r\n}","import { Skeleton, Descriptions, Button, Tag, Tooltip } from \"antd\";\r\nimport { useAppState } from \"../../stores\";\r\nimport * as enums from \"../../constants/enums\";\r\nimport { isInhouseClient } from \"../../utils\";\r\nimport { useAppDispatch } from \"../../stores\";\r\nimport { downloadLicensesAsync } from \"../../stores/portalReducer\";\r\nimport { DownloadOutlined } from '@ant-design/icons';\r\nimport React, { useState } from \"react\";\r\nimport { InfoCircleOutlined } from '@ant-design/icons';\r\n\r\nconst useSummarySubsriptionsData = () => {\r\n const model = useAppState(state => state.clientModel);\r\n const brandValue = model?.IsBirdview || false ? 1 : 0;\r\n const brand = enums.getBrand(brandValue);\r\n const edition = enums.getEdition(model?.Edition || 0);\r\n const clientLicenseType = model?.ClientLicenseType;\r\n const activeFullUsers = model?.ActiveFullUsers || 0;\r\n const activeRestrictedUsers = model?.ActiveResctrictedUsers || 0;\r\n const extraStorage = model?.ExtraStorage || 0;\r\n const nonExpiredLicensesUsers = model?.NonExpiredLicensesUsers || 0;\r\n const activeLicensesByType = model?.ActiveLicensesByType || [];\r\n const isCancelled = model?.IsCancelled;\r\n return {\r\n brand,\r\n edition,\r\n clientLicenseType,\r\n activeFullUsers,\r\n activeRestrictedUsers,\r\n extraStorage,\r\n nonExpiredLicensesUsers,\r\n activeLicensesByType,\r\n isCancelled\r\n };\r\n};\r\n\r\ntype Props = {\r\n loading: boolean;\r\n};\r\n\r\nexport const Summary: React.FC = ({ loading }) => {\r\n const { brand, edition, clientLicenseType, activeFullUsers, activeRestrictedUsers, extraStorage, nonExpiredLicensesUsers, activeLicensesByType, isCancelled } = useSummarySubsriptionsData();\r\n const dispatch = useAppDispatch();\r\n const [downloading, setDownLoading] = useState(false);\r\n const downloadLicense = async (version: string) => {\r\n setDownLoading(true);\r\n await dispatch(downloadLicensesAsync(version));\r\n setDownLoading(false);\r\n }\r\n\r\n const totalUsersForInhousePerpetual = () => {\r\n return (\r\n <>\r\n {\r\n Object.entries(activeLicensesByType)\r\n .map(([key, value]) =>\r\n Total licenses of version {key}} key={key}>\r\n {value} \r\n \r\n )\r\n }\r\n \r\n )\r\n }\r\n const totalUsersForSubscriptions = () => {\r\n return (\r\n <>\r\n Total Active Licenses} >\r\n {activeFullUsers === nonExpiredLicensesUsers ? activeFullUsers : `Valid ${nonExpiredLicensesUsers} of ${activeFullUsers}`}\r\n \r\n {activeRestrictedUsers > 0 && Restricted Licenses} >\r\n {activeRestrictedUsers} \r\n \r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n const subscriptionStatus = () => {\r\n return (\r\n Subscription Status} >\r\n {isCancelled ? \"Cancelled\" : \"Active\"}\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {!isInhouseClient(clientLicenseType) && <>{subscriptionStatus()}}\r\n {!isCancelled && <>\r\n Product}>{enums.getProductName(brand, edition)}\r\n License type}>\r\n {enums.getEnumName(clientLicenseType, enums.LicenseType)}\r\n \r\n\r\n <>{isInhouseClient(clientLicenseType) ? totalUsersForInhousePerpetual() : totalUsersForSubscriptions()}\r\n\r\n {extraStorage > 0 && (\r\n Extra storage}>\r\n {`${extraStorage} Gb`}\r\n )}\r\n }\r\n \r\n \r\n \r\n );\r\n}","import { Alert, Button, PageHeader, Row, Col, Tabs } from 'antd';\r\nimport * as React from 'react';\r\nimport { useAppDispatch, useAppState } from '../../stores';\r\nimport { getClientModelAsync } from '../../stores/portalReducer';\r\nimport { isInhouseClient, showUpdatePlanButton } from '../../utils';\r\nimport { ActiveSubscriptions } from './activeSubscriptions';\r\nimport { ActiveThirdPartySubscriptions } from './activeThirdPartySubscriptions';\r\nimport { CancelledSubscriptions } from './cancelledSubscriptions';\r\nimport { CancelledThirdPartySubscriptions } from './cancelledThirdPartySubscriptions';\r\nimport { ContactSales } from './contactSales';\r\nimport { Summary } from './summary';\r\n\r\nconst { TabPane } = Tabs;\r\n\r\nconst useClientSubscriptionsData = () => {\r\n const model = useAppState(state => state.clientModel);\r\n return {\r\n activeLicenses: model?.ActiveLicenses || [],\r\n cancelledLicenses: model?.CancelledLicenses || [],\r\n activeThirdPartyLicenses: model?.ActiveThirdPartyLicenses || [],\r\n cancelledThirdPartyLicenses: model?.CancelledThirdPartyLicenses || [],\r\n isSalesAssisted: model?.IsSalesAssisted || false,\r\n isBirdview: model?.IsBirdview || false,\r\n stripeCustomerId: model?.Client.StripeCustomerId,\r\n clientLicenseType: model?.ClientLicenseType,\r\n isBirdviewAutomationEnabled: model?.IsBirdviewAutomationEnabled,\r\n isCancelled: model?.IsCancelled,\r\n };\r\n}\r\n\r\nconst Subscriptions: React.FC = () => {\r\n const dispatch = useAppDispatch();\r\n const model = useAppState(state => state.clientModel);\r\n const loading = !model;\r\n\r\n React.useEffect(() => {\r\n if (!model) {\r\n dispatch(getClientModelAsync());\r\n }\r\n }, [model, dispatch]);\r\n\r\n const { activeLicenses, cancelledLicenses,\r\n activeThirdPartyLicenses, cancelledThirdPartyLicenses,\r\n isSalesAssisted, isBirdviewAutomationEnabled,\r\n stripeCustomerId, clientLicenseType, isCancelled } = useClientSubscriptionsData();\r\n\r\n const showSubscriptions = activeLicenses.length > 0 || cancelledLicenses.length > 0;\r\n const showThirdPartySubscriptions = activeThirdPartyLicenses.length > 0 || cancelledThirdPartyLicenses.length > 0;\r\n const showBothTabs = showSubscriptions && showThirdPartySubscriptions;\r\n\r\n const addLicensesLink = () => {\r\n return stripeCustomerId ?\r\n `/payment/addMoreLicenses?accountId=${stripeCustomerId}` :\r\n '/payment/addMoreLicenses';\r\n }\r\n const updatePlanLink = () => {\r\n return '/payment/plans';\r\n }\r\n\r\n const purchaseAutomationLink = () => {\r\n return '/payment/automationPurchase';\r\n }\r\n return (\r\n <>\r\n \r\n
\r\n \r\n {isInhouseClient(clientLicenseType) &&\r\n We’re sorry, but as of August 1, 2018 Perpetual licenses and Gold Support packages are no longer available.\r\n
\r\n
\r\n Please contact us at sales@birdviewpsa.com or +1 (888) 261-9878 to learn how to switch your Perpetual licenses to the Subscription licenses.}\r\n type=\"warning\"\r\n showIcon\r\n />}\r\n {!loading && <>\r\n {!isInhouseClient(clientLicenseType) &&\r\n \r\n \r\n
\r\n To decrease the number of licenses or to cancel your account, please \r\n
\r\n {!isCancelled && <>\r\n {!isSalesAssisted &&\r\n \r\n }\r\n\r\n {showUpdatePlanButton(model.Edition) &&\r\n \r\n }\r\n {isBirdviewAutomationEnabled !== true && \r\n }\r\n }\r\n \r\n
\r\n }\r\n }\r\n \r\n {showSubscriptions &&\r\n \r\n {activeLicenses.length > 0 && \r\n }\r\n {cancelledLicenses.length > 0 && }\r\n \r\n }\r\n\r\n {showThirdPartySubscriptions &&\r\n \r\n {activeThirdPartyLicenses.length > 0 && \r\n }\r\n {cancelledThirdPartyLicenses.length > 0 && }\r\n \r\n }\r\n \r\n
\r\n \r\n )\r\n}\r\nexport default Subscriptions;","\r\nimport { Tooltip } from 'antd';\r\nimport { FC, } from 'react';\r\nimport bv_logo from '../../../assets/bv-logo.svg';\r\nimport ep_logo from '../../../assets/ep-logo.svg';\r\nimport styles from './style.module.scss';\r\n\r\nexport const Logos: FC = () => {\r\n\r\n const bv_tip = Birdview PSA is a professional services automation platform built for organizations that want to better manage their entire delivery lifecycle. It includes all of the features and functionality of Easy Projects, plus an added layer of advanced functionality and financial tools for billing clients and tracking revenue and profit.\r\n const ep_tip = Easy Projects is Work and Project Management Software that is designed to help teams of all sizes collaborate more effectively, stay on budget and deliver projects faster.\r\n return (\r\n
\r\n \r\n
\r\n \r\n \"EasyProjects\"\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \"Birdview\"\r\n \r\n
\r\n
\r\n
\r\n )\r\n}","import { FC, useEffect, useState } from 'react';\r\nimport { Button, Checkbox, Col, Form, Input, Row } from 'antd';\r\nimport { Link, useHistory } from 'react-router-dom';\r\nimport { LoginParams } from '../../../types';\r\nimport { getCurrentUserAsync, loginAsync } from '../../../stores/portalReducer';\r\nimport { useAppDispatch } from '../../../stores';\r\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\r\nimport styles from './style.module.scss';\r\nimport { DefaultRedirectUrl } from '../../../router';\r\nimport { PageLoading } from '../../components/PageLoading';\r\nimport { useIsUnmounted } from '../../../hooks';\r\nimport { Logos } from './logos';\r\n\r\nconst initialValues: LoginParams = {\r\n email: '',\r\n password: '',\r\n};\r\n\r\nexport const LoginForm: FC = () => {\r\n const history = useHistory();\r\n const dispatch = useAppDispatch();\r\n const { isUnmountedRef } = useIsUnmounted();\r\n\r\n const [isAuthChecked, setIsAuthChecked] = useState(false);\r\n let returnUrl = history.location.state?.returnUrl ?? DefaultRedirectUrl;\r\n if (returnUrl === \"/portal/login\") {\r\n returnUrl = DefaultRedirectUrl;\r\n }\r\n\r\n const [form] = Form.useForm();\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const onFinished = async (form: LoginParams) => {\r\n setLoading(true);\r\n const res = await dispatch(loginAsync(form))\r\n\r\n setLoading(false);\r\n if (!!res) {\r\n history.push(returnUrl);\r\n }\r\n\r\n };\r\n\r\n useEffect(() => {\r\n dispatch(getCurrentUserAsync((user) => {\r\n if (isUnmountedRef.current) {\r\n return;\r\n }\r\n\r\n if (user) {\r\n history.push(returnUrl);\r\n } else {\r\n setIsAuthChecked(true);\r\n }\r\n }));\r\n }, [isUnmountedRef, history, dispatch, returnUrl]);\r\n\r\n if (!isAuthChecked) {\r\n return \r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Customer Portal Login

\r\n
\r\n \r\n \r\n form={form} onFinish={onFinished} className={styles.login_page_form} initialValues={initialValues}>\r\n \r\n } placeholder=\"E-mail\" />\r\n \r\n \r\n } type=\"password\" placeholder=\"Password\" />\r\n \r\n \r\n <>\r\n Remember me\r\n Forgot password\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","import Layout from \"antd/lib/layout/layout\";\r\nimport { Fragment, ReactNode, Suspense } from \"react\";\r\nimport { PageLoading } from \"../../components/PageLoading\";\r\nimport styles from './style.module.scss';\r\n\r\ninterface IBoxLayoutProps {\r\n children?: ReactNode;\r\n}\r\n\r\nconst BoxLayout: React.FC = ({ children }) => {\r\n return (\r\n \r\n \r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n }>\r\n
\r\n );\r\n}\r\nexport default BoxLayout;","import { useAppState } from '../../stores';\r\nimport styles from './style.module.scss';\r\n\r\nexport const SiteLogo = () => {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n return (\r\n <>\r\n {currentUser?.IsBirdviewBrand ?\r\n \r\n
\r\n :\r\n \r\n
\r\n }\r\n \r\n );\r\n}","import { Layout, Menu } from 'antd';\r\nimport {\r\n MailOutlined,\r\n MessageOutlined,\r\n UserOutlined,\r\n CreditCardOutlined,\r\n CustomerServiceOutlined,\r\n} from '@ant-design/icons';\r\n\r\nimport styles from './style.module.scss';\r\nimport { useHistory, useLocation } from 'react-router';\r\nimport { SiteLogo } from './SiteLogo';\r\nimport { useAppState } from '../../stores';\r\nimport { isInhouseClient } from '../../utils';\r\n\r\nconst { Sider } = Layout;\r\n\r\n\r\nexport type SiderMenuProps = {\r\n collapsed: boolean;\r\n handleOnCollapse: () => void;\r\n};\r\n\r\nconst SiderMenu = ({ handleOnCollapse, collapsed }: SiderMenuProps) => {\r\n const theme = 'light';\r\n const location = useLocation();\r\n const history = useHistory();\r\n const { currentUser } = useAppState(state => state);\r\n const isInhousePerpetual = isInhouseClient(currentUser?.ClientLicenseType);\r\n\r\n const handleSiderMenuClick = (action: { key: any; }) => {\r\n console.log('menu:', action);\r\n switch (action.key) {\r\n case '/portal':\r\n case '/portal/companyProfile':\r\n case '/portal/billing':\r\n case '/portal/manageSubscriptions':\r\n history.push(action.key);\r\n break;\r\n case 'support': break;\r\n default:\r\n history.push('/portal');\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {isInhousePerpetual ? <>Licenses : <>Subscriptions}\r\n \r\n \r\n \r\n Company Profile\r\n \r\n \r\n \r\n Billing\r\n \r\n \r\n \r\n Email Notifications\r\n \r\n \r\n \r\n \r\n Support\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SiderMenu;","import * as React from \"react\";\r\nimport { Avatar, Spin } from 'antd';\r\nimport { AvatarSize } from 'antd/lib/avatar/SizeContext';\r\nimport { useAppState } from \"../../stores\";\r\n\r\nfunction getColor(username: string) {\r\n const colors = [\r\n '#ffa38a',\r\n '#a9a7e0',\r\n '#D686D4',\r\n '#96CE56',\r\n '#4A90E2',\r\n '#62b3d0',\r\n '#ef7676',\r\n ];\r\n const firstChar = username.charCodeAt(0);\r\n const secondChar = username.charCodeAt(1);\r\n const thirdChar = username.charCodeAt(2);\r\n\r\n return colors[(firstChar + secondChar + thirdChar) % 7];\r\n}\r\n\r\nconst loading = (\r\n \r\n \r\n \r\n);\r\n\r\nexport const GetUsernameAvatar = (size: AvatarSize = 'large') => {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n if (!currentUser || !currentUser.Name) {\r\n return loading;\r\n }\r\n const username = currentUser?.Name;\r\n return (\r\n
\r\n \r\n {username ? username.charAt(0).toUpperCase() : ''}\r\n \r\n {username}\r\n
\r\n );\r\n};","import Meta from 'antd/lib/card/Meta';\r\nimport { useAppState } from '../../stores';\r\nimport { getSiteNameByBrand } from '../../utils';\r\n\r\nexport const SiteName = () => {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n \r\n );\r\n}","import * as React from \"react\";\r\nimport {\r\n MenuUnfoldOutlined,\r\n MenuFoldOutlined,\r\n LogoutOutlined,\r\n} from '@ant-design/icons';\r\nimport { Layout, Menu } from 'antd';\r\nimport styles from './style.module.scss';\r\nimport { GetUsernameAvatar } from '../components/UserAvatar';\r\nimport { SiderMenuProps } from \"./SiderMenu\";\r\nimport { logoutAsync } from \"../../stores/portalReducer\";\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useAppDispatch, useAppState } from \"../../stores\";\r\nimport { SiteName } from \"./SiteName\";\r\n\r\nconst { Header } = Layout;\r\nconst { SubMenu } = Menu;\r\n\r\ntype Action = 'myProfile' | 'logout';\r\n\r\nconst LayoutBanner: React.FC = ({ collapsed, handleOnCollapse }) => {\r\n const getCollapseIcon = () => {\r\n return (\r\n <>\r\n {collapsed ? :\r\n }\r\n \r\n );\r\n };\r\n const history = useHistory();\r\n const dispatch = useAppDispatch();\r\n const { currentUser } = useAppState(state => state);\r\n\r\n const onActionClick = async (action: Action) => {\r\n switch (action) {\r\n // case 'myProfile':\r\n // return;\r\n case 'logout':\r\n await dispatch(logoutAsync()).then(\r\n (res) => {\r\n !!res && history.push('/portal/login');\r\n }\r\n );\r\n return;\r\n }\r\n };\r\n\r\n if (!currentUser) {\r\n return null;\r\n }\r\n return (\r\n
\r\n \r\n {window.innerWidth > 992 && getCollapseIcon()}\r\n \r\n
\r\n\r\n \r\n \r\n {/* \r\n onActionClick('myProfile')}>\r\n \r\n Profile\r\n \r\n */}\r\n \r\n onActionClick('logout')}>\r\n \r\n Logout\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default LayoutBanner;","import React from \"react\";\r\n\r\ndeclare global {\r\n interface Window {\r\n ac_env: string;\r\n }\r\n}\r\n\r\nexport const Intercom: React.FC = () => {\r\n\r\n React.useEffect(() => {\r\n // @ts-ignore\r\n window.Intercom('boot', {\r\n app_id: 'kzmrgubj',\r\n });\r\n // @ts-ignore\r\n return () => window.Intercom('shutdown')\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\n\r\n\r\n","import { FC, Suspense, useEffect } from 'react';\r\nimport { Layout } from 'antd';\r\nimport { useAppDispatch, useAppState } from '../../stores';\r\nimport SiderMenu from './SiderMenu';\r\nimport LayoutBanner from './LayoutBanner';\r\nimport { setPortalState } from '../../stores/portalReducer';\r\nimport { PageLoading } from '../components/PageLoading';\r\nimport styles from './style.module.scss';\r\nimport { Intercom } from '../components/Intercom';\r\n\r\nconst { Content } = Layout;\r\nconst WIDTH = 992;\r\n\r\nconst MainLayout: FC = ({ children }) => {\r\n const { collapsed } = useAppState(state => state);\r\n const dispatch = useAppDispatch();\r\n\r\n const toggle = () => {\r\n dispatch(\r\n setPortalState({\r\n collapsed: !collapsed\r\n })\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n window.onresize = () => {\r\n const rect = document.body.getBoundingClientRect();\r\n const needCollapse = rect.width < WIDTH;\r\n dispatch(\r\n setPortalState({\r\n collapsed: needCollapse\r\n })\r\n );\r\n };\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }>\r\n {children}\r\n \r\n \r\n \r\n {window.ac_env === \"production\" && }\r\n \r\n );\r\n};\r\n\r\nexport default MainLayout;\r\n","import { FC, useState } from 'react';\r\nimport { Button, Col, Form, Input, Row } from 'antd';\r\nimport { ResetPasswordParams, } from '../../../types';\r\nimport { resetPasswordAsync } from '../../../stores/portalReducer';\r\nimport { useAppDispatch } from '../../../stores';\r\nimport { UserOutlined } from '@ant-design/icons';\r\nimport styles from './style.module.scss';\r\nimport { Link, useHistory } from 'react-router-dom';\r\nimport { Logos } from './logos';\r\n\r\nexport const ResetPasswordForm: FC = () => {\r\n const history = useHistory();\r\n const dispatch = useAppDispatch();\r\n const [form] = Form.useForm();\r\n const [reseting, setReseting] = useState(false);\r\n\r\n const onFinished = async (form: ResetPasswordParams) => {\r\n setReseting(true);\r\n dispatch(await resetPasswordAsync(form.email))\r\n .then((res) => {\r\n setReseting(false);\r\n if (!!res) {\r\n history.push(\"/portal/login\");\r\n }\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Reset your password

\r\n
\r\n \r\n \r\n

Please enter your Customer Portal e-mail address to receive password reset instructions.

\r\n form={form} onFinish={onFinished} className={styles.login_page_form} >\r\n \r\n } placeholder=\"E-mail\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Back to login page\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n\r\n\r\n","import { useEffect } from 'react';\r\nimport { Route, RouteProps } from 'react-router';\r\nimport { useAppState } from '../stores';\r\nimport { getPageTitle } from '../utils';\r\n\r\n\r\nexport type WrappedRouteProps = {\r\n title?: string;\r\n} & RouteProps;\r\n\r\n\r\n\r\nexport function WrappedRoute({ title, ...routeProps }: WrappedRouteProps) {\r\n const { currentUser } = useAppState(state => state);\r\n\r\n useEffect(() => {\r\n document.title = getPageTitle(title, currentUser?.IsBirdviewBrand);\r\n if (currentUser?.IsBirdviewBrand) {\r\n const favicon = document.getElementById(\"favicon\");\r\n if (favicon)\r\n (favicon as HTMLLinkElement).href = '/client/bv-favicon.ico';\r\n }\r\n\r\n }, [currentUser, title]);\r\n\r\n\r\n return ;\r\n};\r\n","import React from 'react';\r\nimport { Row, Col } from 'antd';\r\nimport { Logos } from '../layout/login/logos';\r\nimport styles from '../layout/login/style.module.scss';\r\n\r\nexport default class Exception404 extends React.Component {\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

404. Sorry... Page cannot be found.

\r\n \r\n
\r\n \r\n \r\n

There might be several reasons why you see this page:

\r\n
    \r\n
  • If you typed the page address in the Address bar, make sure that it is spelled correctly.
  • \r\n
  • Open the {window.location.origin}/portal home page and look for links to the information you want.
  • \r\n
\r\n \r\n
\r\n \r\n \r\n

Feel free to reach out to us at info@birdviewpsa.com

\r\n \r\n
\r\n
\r\n\r\n );\r\n }\r\n}","import { FC, useEffect } from 'react';\r\nimport Billing from '../pages/billing';\r\nimport CompanyProfile from '../pages/companyProfile';\r\nimport EmailNotifications from '../pages/emailNotifiations';\r\nimport Subscriptions from '../pages/subscriptions';\r\nimport { Redirect, Route, Switch, useHistory } from 'react-router';\r\nimport { LoginForm } from '../pages/layout/login/loginPage';\r\nimport BoxLayout from '../pages/layout/login';\r\nimport MainLayout from '../pages/layout';\r\nimport { useAppState } from '../stores';\r\nimport { ResetPasswordForm } from '../pages/layout/login/resetPasswordPage';\r\nimport { WrappedRoute } from './WrappedRoute';\r\nimport Exception404 from '../pages/Exception/404';\r\n\r\nexport const LoginPath = \"/portal/login\";\r\nexport const DefaultRedirectUrl = \"/portal\";\r\n\r\nconst RenderRouter: FC = () => {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RenderRouter;\r\n\r\nconst PrivateRoutes = () => {\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\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 );\r\n}\r\n\r\nconst AuthWrapper = ({ children }) => {\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 {children}\r\n \r\n )\r\n}\r\n\r\nconst EnsureLoggedIn = ({ children }) => {\r\n const currentUser = useAppState(state => state.currentUser);\r\n const history = useHistory();\r\n useEffect(() => {\r\n if (currentUser === undefined) {\r\n history.push(\"/portal/login\", {\r\n returnUrl: history.location.pathname,\r\n });\r\n }\r\n }, [currentUser, history]);\r\n\r\n if (!currentUser) {\r\n return null;\r\n }\r\n\r\n return <>{children}\r\n};\r\n","\r\nimport { Provider } from 'react-redux';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport store from './stores';\r\nimport RenderRouter from './router';\r\n\r\nfunction App() {\r\n return (\r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport 'antd/dist/antd.css';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport './index.css';\r\nimport App from './App';\r\n\r\nReactDOM.render(\r\n // \r\n \r\n // \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"menu\":\"style_menu__3aaVw\",\"ant-menu-horizontal\":\"style_ant-menu-horizontal__DrSoH\",\"ant-menu-submenu\":\"style_ant-menu-submenu__1Wfs9\",\"ant-menu-item-selected\":\"style_ant-menu-item-selected__mZIif\",\"ant-menu-submenu-title\":\"style_ant-menu-submenu-title__2-7p3\",\"trigger\":\"style_trigger__2Ntq0\",\"menu_logo_bv\":\"style_menu_logo_bv__3wjXW\",\"menu_logo_ep\":\"style_menu_logo_ep__2UBoe\",\"layout\":\"style_layout__2-Gw-\",\"layout_wrapper\":\"style_layout_wrapper__2prrG\",\"content\":\"style_content__1R77D\",\"menu_icon\":\"style_menu_icon__Xgm8C\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"style_container__1vLyK\",\"items\":\"style_items__EoB35\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"form_items\":\"style_form_items__2_PT1\",\"form_notes\":\"style_form_notes__20sOJ\"};"],"sourceRoot":""}