{"version":3,"sources":["localisation/root/index.js","localisation lazy /^/.*/index/.js$/ groupOptions: {} namespace object","styles/GlobalStyles.js","utils/auth.js","utils/reduxCreators.js","config/index.js","services/client.js","services/termsAndConditions.js","ducks/auth.js","services/featureFlags.js","ducks/meta.js","ducks/featureFlags.js","utils/misc.js","utils/localStorage.js","utils/userPreferences.js","hoc/withUserData.js","components/pages/Login/Login.js","components/pages/Login/index.js","components/pages/LoginCallback/index.js","components/ui/PageWrapper/index.js","components/pages/Error/index.js","components/pages/Logout/index.js","constants/profileMenuEntries.js","assets/icons/fa-user.svg","assets/icons/fa-chart-area.svg","assets/icons/fa-edit.svg","assets/icons/fa-user-friends.svg","assets/icons/fa-tools.svg","assets/icons/fa-cog.svg","assets/icons/bi-key.svg","constants/sideMenuEntries.js","constants/featureFlags.js","assets/ds-logo.svg","components/core/AppLayout/SideMenu/MenuItemIcon.js","components/core/AppLayout/SideMenu/MenuItemText.js","components/core/AppLayout/SideMenu/LinkedMenuItem.js","components/core/AppLayout/SideMenu/CollapsibleMenuItem.js","assets/img-profile-placeholder-S.svg","components/core/AppLayout/SideMenu/Profile.js","components/core/AppLayout/SideMenu/index.js","components/pages/TermsAndConditions/TcContent/TcContent.styled.js","components/pages/TermsAndConditions/TcContent/index.js","components/pages/TermsAndConditions/TermsAndConditions.styled.js","components/pages/TermsAndConditions/TermsAndConditions.js","components/pages/TermsAndConditions/index.js","assets/welcome.svg","components/pages/HomePage/Welcome.js","components/pages/HomePage/HomePage.js","components/pages/HomePage/index.js","components/core/EmbedFrame/index.js","components/core/IFramePage/index.js","utils/iframe.js","components/pages/CustomerDetailsRedirect/index.js","services/suspensionRules.js","ducks/suspensionRules.js","components/ui/Table/TableHead.js","components/ui/Table/TablePagination.js","components/ui/Table/TableExpandableRow.js","components/ui/Table/index.js","components/pages/SuspensionRules/List/tableMetaData.js","components/pages/SuspensionRules/List/SuspensionRuleFilter.js","components/pages/SuspensionRules/List/SuspensionRuleList.js","components/pages/SuspensionRules/List/index.js","utils/numbers.js","components/pages/SuspensionRules/Detail/SuspensionRuleDetail.styled.js","components/pages/SuspensionRules/Detail/SuspensionRuleDetail.js","services/ssoGroups.js","ducks/ssoGroupManagement.js","components/pages/SsoGroupManangement/List/tableMetaData.js","components/pages/SsoGroupManangement/List/SsoGroupListFilter.js","components/pages/SsoGroupManangement/Delete/SsoGroupDeleteMessage.styled.js","components/pages/SsoGroupManangement/Delete/SsoGroupDeleteConfirmDialog.js","components/pages/SsoGroupManangement/List/SsoGroupList.js","components/pages/SsoGroupManangement/List/index.js","utils/search.js","components/pages/SsoGroupManangement/Role/tableMetaData.js","components/pages/SsoGroupManangement/Role/SsoRoleListFilter.js","components/pages/SsoGroupManangement/Role/SsoRoleList.js","components/pages/SsoGroupManangement/Role/index.js","components/pages/SsoGroupManangement/common/SsoGroupForm.styled.js","components/pages/SsoGroupManangement/Edit/SsoGroupEdit.js","components/pages/SsoGroupManangement/Edit/index.js","components/pages/SsoGroupManangement/Add/SsoGroupAdd.js","components/pages/SsoGroupManangement/Add/index.js","services/accountSearch.js","ducks/accountSearchResult.js","components/pages/CustomerSearch/tableMetaData.js","hooks/useToggle.js","assets/icons/fa-filter.svg","components/pages/CustomerSearch/SearchFields.js","components/pages/CustomerSearch/CustomerSearch.js","components/pages/CustomerSearch/index.js","hoc/withRouteParams.js","services/accountDetails.js","services/transactions.js","ducks/customerDetails.js","ducks/guarantorDetails.js","selectors/common.js","hoc/withScrollableTopTabs/withScrollableTopTabs.styled.js","hoc/withScrollableTopTabs/index.js","constants/customerPageTopTabs.js","constants/permissionTypes.js","components/pages/CustomerDetails/CustomerActions/index.js","assets/icons/ic-duplicate.svg","components/pages/CustomerDetails/PersonalInformationPreview/SkeletonLoader.js","components/pages/CustomerDetails/common/InfoRowComponents/index.js","assets/icons/ic-arrow-up.svg","assets/icons/ic-arrow-down.svg","components/pages/CustomerDetails/PersonalInformationPreview/PersonalInformation.styled.js","components/pages/CustomerDetails/PersonalInformationPreview/index.js","components/pages/CustomerDetails/EmergencyContactPreview/EmergencyContactPreview.styled.js","components/pages/CustomerDetails/EmergencyContactPreview/index.js","assets/icons/ic-close-modal.svg","components/pages/CustomerDetails/AdditionalInfoPreview/index.js","assets/icons/info-circle.svg","components/pages/CustomerDetails/PaymentSummaryPreview/index.js","components/pages/CustomerDetails/UpcomingPaymentPreview/UpcomingPaymentsLoader/index.js","components/pages/CustomerDetails/UpcomingPaymentPreview/index.js","utils/transactions.js","components/pages/CustomerDetails/TransactionsPreview/index.js","components/pages/CustomerDetails/ActivitiesPreview/index.js","components/pages/CustomerDetails/GuarantorDetails/GuarantorDetails.styled.js","components/pages/CustomerDetails/GuarantorDetails/index.js","components/pages/CustomerDetails/CustomerDetails.js","components/pages/CustomerDetails/index.js","ducks/transactions.js","assets/icons/ic-filter.svg","components/pages/Transactions/Filter/index.js","components/pages/Transactions/tableMetaData.js","components/pages/Transactions/Transactions.js","components/pages/Transactions/index.js","constants/suspensionConstants.js","services/suspensions.js","ducks/suspensions.js","utils/suspensions.js","components/pages/Suspensions/common/InfoWidgetTextRow.js","components/pages/Suspensions/AccountDetailsPreview/index.js","assets/icons/info-fill-circle.svg","components/pages/Suspensions/SuspensionRulesPreview/SuspensionRulesNote.js","components/pages/Suspensions/SuspensionRulesPreview/index.js","components/pages/Suspensions/PleaseNotePreview/index.js","utils/strings.js","components/pages/Suspensions/common/FormErrorAlert.js","components/pages/Suspensions/SuspensionLayout.js","constants/frequencyTypes.js","components/pages/Suspensions/common/SuspensionChargeOption/components/ChargeForSuspensionChx.js","components/pages/Suspensions/common/SuspensionChargeOption/components/SuspensionPaymentFrequencyDdl.js","components/pages/Suspensions/common/SuspensionChargeOption/components/SuspensionFeeTxt.js","components/pages/Suspensions/common/SuspensionChargeOption/components/styles.js","components/pages/Suspensions/common/SuspensionChargeOption/SuspensionChargeOptionForEdit.js","components/pages/Suspensions/common/SuspensionReasonTextarea.js","assets/icons/ic-calendar-day.svg","components/pages/Suspensions/common/SuspensionDateRangePicker/SuspensionDatePicker.js","components/pages/Suspensions/common/SuspensionDateRangePicker/index.js","components/pages/Suspensions/common/SuspensionFormCancelButton.js","components/pages/Suspensions/EditSuspensionForm/index.js","components/pages/Suspensions/common/SuspensionChargeOption/SuspensionChargeOptionForAdd.js","components/pages/Suspensions/AddSuspensionForm/index.js","components/pages/Suspensions/index.js","components/pages/Suspensions/Suspension.js","services/cancellationReasons.js","ducks/cancellationReasons.js","utils/poll.js","ducks/accountMeta.js","services/facilities.js","ducks/normalizer.js","ducks/schemas/index.js","ducks/facilities.js","selectors/facilities.js","constants/cancellationTypes.js","components/pages/Cancellation/CancellationForm/common/commonPropTypes.js","components/pages/Cancellation/CancellationForm/common/CancellationType/CancellationType.styled.js","components/pages/Cancellation/CancellationForm/common/CancellationType/index.js","components/pages/Cancellation/Cancellation.styled.js","components/pages/Cancellation/CancellationForm/common/FormLayout/FormLayout.styled.js","components/pages/Cancellation/CancellationForm/common/FormLayout/index.js","assets/icons/ic-alert.svg","components/pages/Cancellation/CancellationForm/common/ConfirmationModal/ConfirmationModal.styled.js","components/pages/Cancellation/CancellationForm/common/ConfirmationModal/index.js","constants/industryTypes.js","components/pages/Cancellation/CancellationForm/common/validators.js","components/pages/Cancellation/CancellationForm/common/cancellationUtils.js","components/pages/Cancellation/CancellationForm/CancellationForm.styled.js","components/pages/Cancellation/CancellationForm/common/NoticePeriod/NoticePeriod.styled.js","components/pages/Cancellation/CancellationForm/common/NoticePeriod/index.js","components/pages/Cancellation/CancellationForm/common/CancelFeeDeclaration/CancelFeeDeclaration.styled.js","components/pages/Cancellation/CancellationForm/common/CancelFeeDeclaration/index.js","components/pages/Cancellation/CancellationForm/common/NoPermissionError/NoPermissionError.styled.js","components/pages/Cancellation/CancellationForm/common/NoPermissionError/index.js","components/pages/Cancellation/CancellationForm/OverdueForm/index.js","components/pages/Cancellation/CancellationForm/NoOverdueForm/index.js","components/pages/Cancellation/CancellationForm/CancellationInfo/CancellationInfo.styled.js","components/pages/Cancellation/CancellationForm/CancellationInfo/index.js","components/pages/Cancellation/CancellationForm/index.js","components/pages/Cancellation/Cancellation.js","components/pages/Cancellation/index.js","ducks/accounts.js","components/pages/CustomerEmbedFrame/index.js","components/pages/CustomerEmbedFrame/SuspensionAlertMessage.js","components/pages/CustomerEmbedFrame/PaymentsEmbedFrame.js","components/core/AppRoutes/layoutRoutes/customerRoutes.js","components/core/AppRoutes/layoutRoutes/index.js","utils/routes.js","assets/icons/ic-arrow-right.svg","components/core/AppLayout/TopBar/BreadCrumbs/BreadCrumbs.styled.js","components/core/AppLayout/TopBar/BreadCrumbs/index.js","components/core/AppLayout/TopBar/TopBar.styled.js","components/core/AppLayout/TopBar/index.js","components/core/AppLayout/AppLayout.styled.js","components/core/AppLayout/AppLayout.js","components/core/AppLayout/index.js","components/core/PrivateRoutesWrapper/index.js","components/core/AppRoutes/AppRoutes.js","components/core/AppRoutes/index.js","components/core/HttpAlertDialog/HttpAlertDialog.styled.js","components/core/HttpAlertDialog/HttpAlertDialog.js","components/core/HttpAlertDialog/index.js","components/core/AppLoading/AppLoading.js","components/core/AppLoading/index.js","ducks/localisation.js","App.js","middlewares/index.js","middlewares/apiFailure.js","ducks/index.js","configureStore.js","index.js"],"names":["locales","dateFormat","dateTimeFormat","currency","prompts","ajaxErrorTitle","ajaxError_Generic","ajaxError_401","ajaxError_403","contactTypes","PW","PM","PH","PE","EM","CW","CE","CP","PV","FX","accountType","BA","CC","transactionType","I","R","paymentType","DD","AP","BI","CH","CQ","DT","DC","MO","PC","TB","TR","SU","EF","MR","RA","CO","CU","BP","ZC","ZO","WC","WO","transactionCode","PY","DP","DF","MS","PD","PF","OP","ST","AT","TF","SV","CM","DO","JG","AO","EO","NO","AF","FC","TC","RF","VF","FV","CF","SR","FD","transErrorCode","NA","AC","IF","AS","NE","IA","DL","XC","RC","LC","callHow","PHI","PHO","STF","EMI","EMO","FXI","FXO","LTI","LTO","CBW","SYS","VIS","WEB","WSI","WSE","SMS","SMO","callPurpose","addressType","BS","HM","PO","LE","termType","M","P","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","all","slice","keys","Object","module","exports","GlobalStyles","withStyles","theme","html","WebkitFontSmoothing","MozOsxFontSmoothing","boxSizing","WebkitTextSizeAdjust","body","margin","padding","fontFamily","fontSize","backgroundColor","palette","xpl","background","a","textDecoration","cursor","color","ul","listStyle","input","outline","opacity","getAuthToken","oidcConfig","userManager","UserManager","getUser","user","access_token","userHasSomePermissions","userPermissions","permissions","some","p","indexOf","loginAsync","Oidc","expired","signinRedirect","createReducer","initialState","handlers","state","action","handler","type","makeActionCreator","payload","basePath","window","environmentalVariables","authority","identityServerUrl","client_id","redirect_uri","baseUrl","response_type","scope","post_logout_redirect_uri","oldSelfServiceLink","wdeLink","locale","kyClientPromise","accessToken","ky","create","headers","Authorization","Accept","prefixUrl","createKyClientInternal","refreshKyClientAccessToken","kyClient","extend","getKyClient","putTcAccepted","tcAccepted","url","put","isAuthenticated","userId","userName","parentUserId","parentUserName","fullName","email","hasAcceptedTC","idToken","checkLogin","params","value","dispatch","getState","data","profile","web_user_permissions","split","web_user_id","web_user_parentid","web_user_parent_username","web_user_fullname","web_user_email","web_user_accepted_terms","toLowerCase","id_token","fetchFeatureFlags","get","json","httpError","appLoading","isSideBarOpen","resetHttpError","updateAppLoading","updateIsSideBarOpen","isSuspensionRulesEnabled","isSsoManagementEnabled","numberToCurrency","number","localisation","isNullOrUndefined","parseFloat","toFixed","toLocaleString","style","minimumFractionDigits","maximumFractionDigits","getDisplayName","ReactComponent","displayName","name","undefined","isNotEmptyArray","arr","Array","isArray","length","setValue","key","localStorage","setItem","JSON","stringify","getValue","parse","getItem","getUserTcPreference","setRequestedPath","path","searchString","setSideBarOpenPreference","open","getSideBarOpenPreference","withUserData","WrappedComponent","WithUserData","props","currentPath","getRequestedPath","sideBarOpen","userData","Login","useEffect","to","defaultProps","mapDispatchToProps","compose","connect","auth","LoginCallback","history","useHistory","clockSkew","signinRedirectCallback","push","console","error","propTypes","PropTypes","object","PageWrapper","styled","Logout","signoutRedirect","profileMenuEntries","_extends","assign","target","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","fill","d","_ref","svgRef","title","height","width","viewBox","ref","ForwardRef","forwardRef","className","sideMenuEntries","roles","icon","CustomerSvg","InsightsSvg","subRoutes","isExternal","OMGSvg","WDESvg","ToolSvg","AdminSvg","featureFlag","hidden","SsoSvg","clipPath","MenuItemIcon","classes","selected","Icon","ListItemIcon","classNames","text","secondary","marginRight","minWidth","dm","primary","default","MenuItemText","isSubMenuItem","ListItemText","root","subMenuItemSelected","menuItemSelected","itemText","paddingLeft","lineHeight","foreground","LinkedMenuItem","externalLinkClick","useCallback","preventDefault","ListItem","button","component","Link","onClick","borderRight","navigation","CollapsibleMenuItem","onCollapsibleMenuClick","subMenuItems","expand","handleMenuClick","iconSelected","Collapse","in","timeout","unmountOnExit","List","disablePadding","subMenuContainer","item","nested","subMenuRoot","subMenuSelected","subMenuItemText","borderLeft","spacing","gray","background2","cx","cy","r","stroke","strokeWidth","fillRule","transform","xlinkHref","mask","ProfileMenuContainer","display","alignItems","paddingRight","menuopen","ProfileName","ProfileMenu","Menu","common","black","ProfileMenuItem","MenuItem","line","borderBottom","athensGray","Profile","profileName","useState","anchorEl","setAnchorEl","handleProfileMenuOpen","event","currentTarget","handleProfileMenuClose","aria-owns","aria-haspopup","variant","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","onClose","index","filterByFeatureFlags","menuItem","featureFlags","filterByPermissions","SideMenu","handleSideBarClose","pathname","useLocation","filteredMenuItems","isMenuItemSelected","menuPath","startsWith","filter","subRoute","subRouteItem","filterMenuItems","initalSelectedMenuItem","find","openCollapsibleItem","setOpenCollapsibleItem","handleCollapsibleMenuItemClick","prevOpenItem","Drawer","drawer","drawerOpen","drawerClose","paper","listContent","toolbar","IconButton","closeIcon","role","imageContainer","dimension","sideBarWidth","flexShrink","whiteSpace","transition","transitions","easing","sharp","duration","enteringScreen","leavingScreen","overflowX","breakpoints","up","justifyContent","minHeight","flexDirection","content","flexGrow","white","list","flex","textAlign","paperAnchorDockedLeft","withTheme","ContentBody","ContentSubHeading","fontWeight","ContentUnorderedList","borderRadius","borderTop","ContentOrderedList","TcContent","PageContainer","TermsTitle","darkgray","NonModalPaper","BackgroundPaper","marginTop","NonModalHeaderContainer","NonModalBodyContainer","TermsModalTitle","NonModalCheckboxContainer","ModalHeaderContainer","DialogTitle","ModalBodyContainer","DialogContent","ModalActionsContainer","DialogActions","ModalActionsWrapper","ActionButtonsContainer","alignSelf","AcceptButton","FilledButton","marginLeft","TermsAndConditions","updateTcAccepted","tcReadComplete","tcCheckboxChecked","tcReadStatus","setTcReadStatus","scrolledToEnd","prevState","onModalScroll","offsetHeight","scrollTop","scrollHeight","checked","disabled","label","Dialog","scroll","maxWidth","onScroll","disableTypography","onChange","setUserTcPreference","isAccepted","marginBottom","subHeading","Paper","Typography","HomePage","includes","frame","border","visibility","spinner","position","top","frameSrc","locationKey","isFrameLoading","setIsFrameLoading","frameRef","useRef","bindIframeOnLoadEvent","current","onload","iFrameResize","log","onMessage","messageData","checkIframeStillLoggedIn","err","frameLocation","contentWindow","location","href","oldSsLink","sizeUnit","size","loading","src","IFramePage","appendQuery","search","replace","iframeSrc","siteQueryString","iframeUrl","iframeQueryString","iframeQuery","URLSearchParams","forEach","append","toString","iframeSrcAppendQuery","CustomerDetailsRedirect","oldOverviewLinkMatch","useRouteMatch","adfitNo","useParams","pathAdfitNo","isExact","fetchSuspensionRules","fetchSuspensionRule","facilityAccountId","updateSuspensionRule","fee","post","rules","cell","borderWidth","borderBottomColor","stoke","cellMobile","down","onRequestSort","order","orderBy","rows","enableSorting","numSelected","rowCount","checkboxSelection","onSelectAllClick","TableRow","TableCell","Checkbox","indeterminate","inputProps","row","align","alignment","sortDirection","hideInMobile","Tooltip","placement","numeric","enterDelay","TableSortLabel","active","direction","property","pageInfo","pagination","borderColor","paginationList","dataCount","onPageChange","rowsPerPage","currentPage","pageCount","Math","min","containerClassName","previousLabel","ButtonBase","nextLabel","marginPagesDisplayed","pageRangeDisplayed","subContainerClassName","activeClassName","forcePage","expandedCell","metadata","expandableColumn","rest","React","isExpanded","setIsExpanded","column","j","renderingField","__childrens","descendingComparator","b","boxShadow","noBackground","table","tableWrapper","noResults","footer","showNoResults","footerText","showFooter","showEmptyRows","showBorder","enableExpandableRow","selectedItems","setSelectedItems","onRowClick","setOrderBy","setOrder","setRowsPerPage","page","emptyRows","defaultColWidth","ceil","showHeader","handleClick","selectedIndex","newSelected","concat","aria-labelledby","newSelecteds","n","TableBody","colSpan","array","comparator","stabilizedThis","el","sort","stableSort","getComparator","isItemSelected","labelId","hover","aria-checked","tabIndex","tableMetadata","startAdornmentContainer","filterIcon","dobGrid","onSubmit","useForm","defaultValues","mode","reValidateMode","handleSubmit","register","Grid","container","lg","md","xs","inputRef","placeholder","adornment","SearchIconButton","SuspensionRuleList","getSuspensionRules","filteredRules","formState","setFormState","getRules","rulesData","suspensionRules","useMemo","rule","businessAccount","businessName","businessId","formattedFee","formattedDuration","admin","justify","processRuleData","formatText","pageHeader","noWrap","searchResult","formattedSearch","ajaxStatus","ajax","meta","convertToFloat","parsed","isNaN","roundToTwoDecimals","Number","round","BusinessAccountName","PaperHeader","PaperBody","PaperHeaderText","LoaderHeader","speed","x","y","rx","ry","FormContainer","InfoAlert","Alert","FormInput","Input","PaperBodyOverload","other","pointerEvents","ActionButtonContainer","CancelButton","SubtleButton","InputWrapper","LabelContainer","InputLabel","FormLabel","ErrorMessage","ClearAllButton","TextButton","SuspensionRuleLoaderContainer","SuspensionRuleLoader","SuspensionRuleDetail","control","errors","reset","suspensionRule","setSuspensionRule","isLoading","setIsLoading","isSubmittingForm","setIsSubmittingForm","submissionError","setSubmissionError","result","warn","getSuspensionRule","validateNegativeNumber","isNegativeNumber","submittingData","message","onBack","dismissible","AlertMessage","data-testid","required","max","validate","render","onBlur","step","startAdornment","showStartAdornmentDivider","showInlineIcons","parseInt","convertToInteger","isDisabled","fetchSsoGroups","fetchSsoGroup","ssoGroupId","fetchSsoRoles","deleteSsoGroup","delete","updateSsoGroup","groupExternalId","description","addSsoGroup","ssoGroupDetail","groups","getSsoRoles","TitleContainer","ContentContainer","FooterContainer","paddingBottom","Title","Content","groupName","isOpen","onDelete","SsoGroupList","getSsoGroups","deletingGroupId","setDeletingGroupId","errorMessage","setErrorMessage","isDeleteDialogOpen","setDeleteDialogOpen","filteredGroups","getGroups","groupsData","ssoGroups","group","groupId","groupDescription","handleEditGroupClick","deleteButton","handleDeleteGroupClick","processGroupData","errorContainer","getGroupName","warning","formatSearchText","searchContainer","onSearchFilterChange","onSearchKeywordChange","onSearchClick","defaultValue","options","SsoRoleList","selectedRoles","setSelectedRoles","searchFilter","setSearchFilter","searchKeyword","setSearchKeyword","filteredRoles","filterPermission","isAssignedPermissions","roleId","roleName","rolesData","ssoRoles","processRoleData","mainContainer","selectedItem","TableContainer","tableContainer","maxHeight","PageTitle","HiddenInputWrapper","PermissionsErrorMessage","SsoGroupLoaderContainer","SsoGroupLoader","SsoGroupEdit","ssoGroup","setSsoGroup","permissionsCount","setPermissionsCount","getRoles","getSsoGroup","maxLength","maxlength","helpText","resizeable","Role","SsoGroupAdd","fetchCustomerAccounts","searchText","dob","accounts","useToggle","initial","isOn","setOn","toggleValue","on","showDob","toggleShowDob","momentDate","moment","isValid","isSameOrBefore","Date","aria-label","CustomerSearch","searchAccounts","searchComplete","searchClicked","formMeta","setFormMeta","onSearchSubmit","dobFormatted","format","accountComponents","account","debitsuccessId","items","sortableStatus","isActive","isSuspended","isFixedTerm","status","statusRender","debitsuccessIdRender","add","minDate","setFullYear","getFullYear","dobRender","toDate","processAccountData","accountSearchResult","withRouteParams","WithRouteParams","routeParams","fetchPersonalInfo","fetchBalanceToSettle","fetchBalanceToSettleWithoutCancelFee","fetchActivePaymentMethod","fetchNextPayment","fetchTransactions","fetchCallNotes","fetchMembershipDue","membershipDue","postCancelAccount","fetchEstimatedFinalBillDate","fetchOutstandingDsFee","fetchDefaultFeeDue","checkAccountCancelStatus","token","fetchGuarantorDetails","fetchPendingPaymentAmount","fetchAccountInfo","fetchAllTransactions","s2ab","s","buf","ArrayBuffer","view","Uint8Array","charCodeAt","downloadTransactionsService","decoded","atob","ab","blob","Blob","link","document","URL","createObjectURL","download","click","balanceToSettle","payMethod","nextPaymentAmount","lastest3Transactions","transactions","callNotes","pendingPaymentAmount","defaultFeeDue","getPersonalInfo","getBalanceToSettle","entities","currentAccountAdfitNo","selectEntitiesByAdfitNo","stateSlice","StaticContainer","FixedContainer","sidebar","left","inputBorder","zIndex","ScrollTabs","scrollButtons","indicator","Tabs","ScrollTab","Tab","darkerText","typography","textTransform","withScrollableTopTabs","tabsList","selectedTabIndex","replaceParams","PageComponent","WithTopTabs","textColor","newValueIndex","selectedTab","newUrl","reduce","acc","currentValue","tabList","actionButton","customerDetails","permissionTypes","SkeletonLoader","primaryColor","secondaryColor","RowContainer","last","flexWrap","RowLeftText","RowRightText","strokeLinecap","strokeLinejoin","Container","textOverflow","overflow","AccountTagsContainer","CopyButtonContainer","CopyButton","Divider","RowRightTextButton","getArrowStyles","ExpandMoreIcon","ArrowDownIcon","ExpandLessIcon","ArrowUpIcon","Collapsible","PersonalInformationPreview","prefContact","contacts","prefAddress","addresses","firstName","cancelReason","customCancelReason","facilityName","expandContact","toggleExpandContact","expandAddress","toggleExpandAddress","clipButtonState","setClipButtonState","dobStr","clipBoard","ClipboardJS","trigger","destroy","preferredContact","c","contact","preferred","preferredAddress","addressId","filteredContacts","contactType","filteredAddress","previousAddress","renderContactByType","contactDetail","contentLoader","overdueAmount","getAccountStatus","toolTipComponent","clipboardAdfitNo","data-clipboard-text","clipboardBusinessID","address","adrs","loader","emergencyContact","showEmergency","contactName","expandButton","lightText","dialog","dialogTitleContainer","alignContent","closeButton","dialogContentContainer","overflowY","dialogText","dialogActionItemContainer","notes","loadDate","isDialogOpen","setDialogOpen","closeDialog","isNotEmptyString","test","formattedNotes","trim","Fragment","substring","textGrey","paperWidthMd","fullWidth","val","dangerouslySetInnerHTML","__html","clipRule","smallText","headings","overdueInfoIconContainer","overdueInfoIcon","verticalAlign","tooltip","borderStyle","tooltipArrow","overdueBreakdownContainer","overdueBreakdownItem","overdueBreakdownDivider","boldCurrency","startDate","finishDate","numOfTerm","catchUp","catchUpUntil","startDateStr","finishDateStr","arrow","enterTouchDelay","leaveTouchDelay","dsFeeDue","renderOverdueBreakDown","UpcomingPaymentsLoader","dateText","dataRight","teaser","billNext","nextPayDate","accountNo","paymentAvailable","found","pmtDate","pmtTeaser","pmtAmount","exists","groupTransactionsByPaymentId","resultWithoutPayment","resultWithPayment","paymentId","isCombinedPayment","paymentIds","trans","transactionsByPaymentId","totalAmount","childItems","transDateStr","transTypeStr","paymentTypeStr","amount","firstItem","parentItem","transcodeStr","transDate","tableHead","amountPos","green","amountNeg","negative","groupedTransactions","amountFld","abs","createRowItems","childItem","transcode","errorCodeStr","errorCode","retryCount","textGray","textBlack","textBold","gridCell","tableLayout","activities","cNote","callNote","notesFld","callHowFld","callWhenFld","callWhen","getCallNotesForDisplay","GuarantorDetails","guarantorInfo","formattedDateOfBirth","formattedDateSigned","dated","relation","phHm","phWk","getActivePayMethod","getNextPaymentAmount","getAllTransactions","getCallNotes","getMembershipDue","guarantorDetails","getGuarantorDetailsByAdfitNo","getDefaultFeeDue","xl","customerPageTopTabs","ownProps","CustomerDetails","accountInfor","downloaded","resetTransPage","filterButton","clearButton","datePicker","containerGrid","buttonsGrid","handleStartDateChange","startDateHelperText","handleEndDateChange","endDate","endDateHelperText","handleFilterClick","handleClearClick","okLabel","cancelLabel","divider","dataLeft","head","shape","nameHead","success","totalPaid","boldFont","getAccountInfo","downloadTransactions","getTrans","transactionsState","setTransactionState","match","matchSplit","tab","validateDate","toUpperCase","transData","total","filteredTrans","tran","momentFromDate","momentToDate","transactionDate","momentTransactionDate","isFromValid","isSameOrAfter","isToValid","checkValidTranDate","date","helperText","datePickerFormat","Transactions","suspensionDateStatus","defaultStartDate","fetchSuspensionInfo","suspensionStartDate","postSuspension","fetchSuspension","scheduleSuspenseId","putSuspension","suspensionInfo","currentSuspension","hasSuspensionRuleForAccount","canChargeForSuspension","suspensionRuleLoading","updateSuspensionRuleLoading","setSuspensionAlertMessage","obj","sessionStorage","setSuspensionWarningMessage","getSuspensionFormData","formValues","suspensionFee","chargeForSuspension","suspensionPaymentFrequency","suspensionEndDate","suspensionReason","TextRow","AccountDetails","accountDetails","collapsible","Note","nextAnniversaryStartDate","SuspensionRules","allowedSuspensionPeriod","currentAnniversaryRemainingSuspension","listStyleType","borderLeftWidth","information","showPleaseNote","setShowPleaseNote","compareCaseIgnored","value1","value2","errorMsg","setErrorMsg","item1","item2","canSuspendIgnoreSuspensionRules","canManageSuspensions","cloneElement","children","Weekly","Fortnightly","FourWeekly","Monthly","BiMonthly","Quarterly","OneOff","ChargeForSuspensionChx","FormItem","Label","htmlFor","SuspensionPaymentFrequencyDdl","values","frequencyTypes","Select","option","isSearchable","SuspensionFeeTxt","FormItemDisableBorder","styles","accentColor","disableSuspensionFeeAndFrequency","setDisableSuspensionFeeAndFrequency","isFuture","enableCharegeForSuspension","watchChargeForSuspension","useWatch","Textarea","resize","TextareaContainer","TextFieldComponent","InputProps","clearDate","TextField","readOnly","endAdornment","InputAdornment","stopPropagation","SuspensionDatePicker","setOpen","Highlight","getValues","disableStartDate","minEndDate","maxEndDate","handleSelectStartDate","dateDisplayFormat","highlightEndDate","setHighlightEndDate","isEndDateCalendarRestricted","onAccept","maxDate","CancelBtn","EditSuspensionForm","remainingSuspensionPeriod","watchSuspensionStartDate","editableSuspensionPeriod","diff","canSuspendDays","formData","updateSuspension","res","response","catch","SuspensionChargeOptionForEdit","AddSuspensionForm","accountNotStarted","isBefore","formDefaultValues","chargeForSuspensionDefault","errorObj","SuspensionChargeOptionForAdd","mapStateToProps","suspensions","getSuspensionInfo","isMandatedSuspension","getSuspension","suspension","isOngoing","isExpired","AddSuspension","EditSuspension","mandate","RedirectToSuspensionsPage","fetchCancellationReasons","reasonName","forceGetCancelReasons","formatCancelReason","reasons","reason","wait","ms","setTimeout","poll","taskFn","interval","retries","retriesRemaining","HTTPError","estimatedFinalBillDate","outstandingDsFee","balanceToSettleWithoutCancelFee","finalDate","balance","updateFinalBillDate","updateOutstandingDsFee","updateBalanceToSettleWithOutCancelFee","fetchFacilityById","facilityId","setEntities","setEntitiesWithNormalisation","schema","normalize","facilitySchema","Entity","idAttribute","facilities","getFacilityById","facility","getCustomerDetails","getFacilities","CANCEL_STRAIGHT_DOWN","SET_TO_TERM","COLLECT_OVERDUE","COLLECT_DS_FEE","COLLECT_CANCELLATION_FEE","WITH_NOTICE_PERIOD","CHARGE_BACK_DS_FEE","arrayOf","string","isRequired","bool","func","oneOfType","outsideTerm","cancelFee","isTermIdentified","hasPy","industryType","SubLabelContainer","SubLabel","CancellationType","cancellationOptions","formControl","newValue","Body","subLabels","optionValue","AccountName","CancellationLoaderContainer","CancellationLoader","BackButton","OutlinedButton","ConfirmSubmissionButton","CancelReasonDropdown","Dropdown","LoadingConfirmTextContainer","FormLayout","cancellationReasons","dataTestId","selectedObject","isClearable","css","Styled","ConfirmDialog","paperScrollPaper","DialogContentContainer","DangerIcon","AlertIcon","ContentTextContainer","ContentText","NoButton","ConfirmationModal","onCancelAccountClick","onCloseClick","displayText","disableBackdropClick","disableEscapeKeyDown","getCancellationFeeValidators","getOtherFormValues","cancelFeeLimit","country","isBiPartite","isNzHealthAndFitness","industryTypes","checkIfNzHealthAndFitness","cancelFeeCheckLimit","nonNzHealthAndFitness","nzHealthAndFitness","CancellationFeeLabel","CancellationFeeSideText","fontStyle","textShadow","CancellationFeeSubLabel","NoticePeriodWrapper","NoticePeriodStartDatePicker","DatePicker","NoticePeriod","cancelDaysNotice","noticeErrors","maxPastDate","subtract","getInvalidDateMessage","validDate","notInFuture","greaterThanMaxPastDate","disableFuture","invalidDateMessage","DeclarationContainer","DeclarationText","wordBreak","DeclareCheckbox","CancelFeeDeclaration","cancellationFeeValue","cancellationFeeError","declarationError","NoPermissionError","OverdueForm","onFormSubmit","isUpdatingAccount","endOfTermOption","cancellationTypes","noticerPeriodOption","confirmationModalState","setConfirmationModalState","cancellationOption","cancellationFee","noticeStartDate","cancellationFeeDeclaration","watch","watchCancellationOption","watchCancellationFee","onValidSubmit","onConfirmModal","onCancelConfirmModal","isEstimatedFinalBillDateToday","isSame","validity","valid","NoOverdueForm","recentNotClearedPayment","InfoAlertMessage","BodySectionWrapper","InfoLabel","InfoText","InfoSubTextContainer","InfoSubText","CancellationInfo","isSuccessAlertOpen","toggleSuccessAlert","formattedNoticeStartDate","alertMessages","dismissable","CancellationForm","cancelAccount","daysNotice","setIsUpdatingAccount","submittedInfo","setSubmittedInfo","configuredDaysNotice","getCancelDaysNotice","formattedData","toISOString","hasPendingPaymentAmount","noteAlerts","alertMessage","Cancellation","getCancellationReasons","getTransactions","getPendingPaymentAmount","getEstimatedFinalBillDate","getOutstandingDsFee","getBalanceToSettleWithoutCancelFee","getFacilityByAdfitNo","isLoaded","setIsLoaded","wasAccountActiveAtStart","setAccountActiveAtStart","restOfPromises","accountDependentPromises","finalPaymentDate","has","statusResult","currentState","finalBillDate","selectFacilityByAdfitNo","createSelector","accountMeta","subTab","Payments","Variations","Contract","PaymentMethod","Activities","CustomerEmbedFrame","Warning","borderLeftColor","green600","positive","showAlert","setShowAlert","warnings","removeItem","appendedQuery","frameLink","routes","ignoreForBreadCrumb","PaymentsEmbedFrame","breadCrumbName","layoutRoutes","exact","IframePage","replacePathParams","accumulator","LinkContainer","ArrowRightIcon","ArrowRight","BreadCrumbs","memo","routesList","getBreadCrumbNameFromPath","givenPath","splitPaths","breadCrumbEntries","flattenDeep","getBreadCrumbEntries","routeEntries","entry","RegExp","routePath","reverse","TopBarStaticContainer","TopBarFixedContainer","FlexGrower","DrawerMenuOpenButton","TopBar","handleSideBarOpen","AppContainer","VerticalContentContainer","AppLayout","PrivateRoutesWrapper","hasCheckedLogin","setHasCheckedLogin","AppRoutes","getFeatureFlags","renderNestedLayoutRoutes","routeEntry","RouteComponent","AlertContainer","AlertTitle","AlertContent","AlertFooter","HttpAlertDialog","alert","prompt","getAjaxErrorMessage","redirectUrl","buttonText","aria-describedby","lef","AppLoading","loadLocalisationConfigs","conf","config","localisationsFile","basename","libInstance","utils","MomentUtils","middlewares","store","next","errorResponse","clone","responseJson","statusText","errorText","validationErrors","thunk","getRootReducer","combineReducers","metaReducer","authReducer","localisationReducer","customerDetailsReducer","transactionsReducer","accountSearchReducer","cancellationReasonReducers","accountMetaReducer","facilitiesReducer","guarantorReducer","featureFlagsReducer","suspensionReducer","suspensionRulesReducer","ssoGroupsReducer","getSideBarInitialState","innerWidth","outerWidth","enhancers","createStore","metaInitialState","applyMiddleware","configureStore","ReactDOM","defaultTheme","getElementById"],"mappings":"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","file":"static/js/main.53bf15fc.chunk.js","sourcesContent":["export const locales = {\r\n dateFormat: 'DD/MM/YYYY',\r\n dateTimeFormat: 'MMM D, YYYY h:mma',\r\n currency: 'NZD',\r\n};\r\n\r\nexport const prompts = {\r\n ajaxErrorTitle: 'Error',\r\n ajaxError_Generic:\r\n 'Unfortunately we were unable to process your request.Please try again and if the problem persists, please contact your Account Manager.',\r\n ajaxError_401:\r\n 'Either you have been timed out or you do not have the permission to run this operation. Please try again by logging out and logging back in. If the problem persists, please contact your Account Manager.',\r\n ajaxError_403:\r\n 'Either you have been timed out or you do not have the permission to run this operation. Please try again by logging out and logging back in. If the problem persists, please contact your Account Manager.',\r\n contactTypes: {\r\n PW: 'Work phone',\r\n PM: 'Mobile phone',\r\n PH: 'Home phone',\r\n PE: 'Emergency phone',\r\n EM: 'Email',\r\n CW: 'Clubware',\r\n CE: 'Clubware email',\r\n CP: 'Clubware phone',\r\n PV: 'Previous',\r\n FX: 'Fax',\r\n },\r\n accountType: {\r\n BA: 'Bank Account',\r\n CC: 'Credit Card',\r\n },\r\n transactionType: {\r\n I: 'Invoice',\r\n R: 'Receipt',\r\n },\r\n paymentType: {\r\n DD: 'Direct Debit',\r\n AP: 'Automatic Payment',\r\n CC: 'Credit Card',\r\n BI: 'Bank Import',\r\n CH: 'Cash',\r\n CQ: 'Cheque',\r\n DT: 'Debt Collection',\r\n DC: 'Direct Credit',\r\n MO: 'Money Order',\r\n PC: 'Paid To Facility',\r\n TB: 'Telephone Banking',\r\n TR: 'Transfer',\r\n SU: 'Suspense',\r\n EF: 'EFTPOS',\r\n MR: 'Manual Receipting',\r\n RA: 'ReAllocation',\r\n CO: 'Credit Card Other',\r\n CU: 'Credit Union',\r\n BP: 'BPAY',\r\n ZC: 'Credit Card',\r\n ZO: 'Credit Card Other',\r\n WC: 'Web-Pay',\r\n WO: 'Web-Pay Other',\r\n },\r\n transactionCode: {\r\n PY: 'Payment',\r\n DP: 'Debt collection payment',\r\n DF: 'Debt collection fee',\r\n EF: 'Establishment fee',\r\n MS: 'Miscellaneous fee',\r\n PD: 'Paid at business',\r\n PF: 'Penalty fee',\r\n OP: 'One off payment',\r\n DC: 'Debt call fee',\r\n PV: 'Payment variation fee',\r\n ST: 'Statement fee',\r\n AT: 'Account transfer',\r\n TF: 'Transfer fee',\r\n SV: 'Service',\r\n CM: 'Commission',\r\n DO: 'Document preparation fee',\r\n JG: 'Judgement',\r\n AO: 'Attachment order',\r\n EO: 'Examination order',\r\n NO: 'Notice of proceedings',\r\n CO: 'Correspondence',\r\n AF: 'Agent fee',\r\n FC: 'Field call',\r\n TC: 'Trace fee',\r\n CC: 'Case close fee',\r\n RF: 'Refund',\r\n VF: 'Variation fee',\r\n FV: 'Facility variation fee',\r\n SU: 'Suspension fee',\r\n CF: 'Cancellation fee',\r\n SR: 'Surcharge',\r\n FD: 'Default fee',\r\n },\r\n transErrorCode: {\r\n NA: 'No authority',\r\n AC: 'Account closed',\r\n IF: 'Insufficient funds',\r\n AS: 'Authority stopped',\r\n NE: '',\r\n IA: 'Invalid account',\r\n DL: 'Declined',\r\n XC: 'Card expired',\r\n RC: 'Restricted card',\r\n LC: 'Lost or stolen card',\r\n },\r\n callHow: {\r\n PHI: 'Phone in',\r\n PHO: 'Phone out',\r\n STF: 'Staff',\r\n EMI: 'Email in',\r\n EMO: 'Email out',\r\n FXI: 'Fax in',\r\n FXO: 'Fax out',\r\n LTI: 'Letter in',\r\n LTO: 'Letter out',\r\n CBW: 'Clubware',\r\n SYS: 'System',\r\n VIS: 'Visit',\r\n WEB: 'Website',\r\n WSI: 'Web service internal',\r\n WSE: 'Web service external',\r\n SMS: 'Sms in',\r\n SMO: 'Sms out',\r\n },\r\n callPurpose: {},\r\n addressType: {\r\n BS: 'Business',\r\n HM: 'Home',\r\n PH: 'Physical',\r\n PO: 'Postal',\r\n PV: 'Previous',\r\n CW: 'ClubWare',\r\n LE: 'Legal',\r\n },\r\n termType: {\r\n M: 'Month(s)',\r\n P: 'Payment(s)',\r\n },\r\n};\r\n","var map = {\n\t\"./en-NZ/index.js\": [\n\t\t591,\n\t\t3\n\t],\n\t\"./en-US/index.js\": [\n\t\t592,\n\t\t4\n\t],\n\t\"./root/index.js\": [\n\t\t123\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 586;\nmodule.exports = webpackAsyncContext;","import { withStyles } from '@material-ui/core/styles';\r\n\r\nconst GlobalStyles = withStyles((theme) => ({\r\n // @global is handled by jss-plugin-global.\r\n '@global': {\r\n html: {\r\n WebkitFontSmoothing: 'subpixel-antialiased', // Antialiasing.\r\n MozOsxFontSmoothing: 'grayscale', // Antialiasing.\r\n boxSizing: 'border-box',\r\n // Fix font resize problem in iOS\r\n WebkitTextSizeAdjust: '100%',\r\n },\r\n '*, *::before, *::after': {\r\n boxSizing: 'inherit',\r\n },\r\n body: {\r\n margin: '0',\r\n padding: '0',\r\n fontFamily:\r\n \"apple-system, system-ui, 'Segoe UI', Arial, Helvetica, Roboto, sans-serif\",\r\n fontSize: '14px',\r\n backgroundColor: theme.palette.xpl.background,\r\n '&::backdrop': {\r\n backgroundColor: theme.palette.xpl.background,\r\n },\r\n },\r\n a: {\r\n textDecoration: 'none',\r\n cursor: 'pointer',\r\n color: 'inherit',\r\n },\r\n ul: {\r\n listStyle: 'none',\r\n },\r\n input: {\r\n '&:focus': {\r\n outline: 'none',\r\n },\r\n\r\n '&::-webkit-input-placeholder': {\r\n /* Chrome/Opera/Safari */\r\n color: '#b3b3b3 !important',\r\n opacity: '1 !important',\r\n fontSize: '14px',\r\n },\r\n '&::-moz-placeholder': {\r\n /* Firefox 19+ */\r\n color: '#b3b3b3 !important',\r\n opacity: '1 !important',\r\n fontSize: '14px',\r\n },\r\n '&:-ms-input-placeholder': {\r\n /* IE 10+ */\r\n color: '#b3b3b3 !important',\r\n opacity: '1 !important',\r\n fontSize: '14px',\r\n },\r\n '&:-moz-placeholder': {\r\n /* Firefox 18- */\r\n color: '#b3b3b3 !important',\r\n opacity: '1 !important',\r\n fontSize: '14px',\r\n },\r\n },\r\n },\r\n}))(() => null);\r\n\r\nexport default GlobalStyles;\r\n","import Oidc, { UserManager } from 'oidc-client';\r\n\r\nexport const getAuthToken = async (oidcConfig) => {\r\n const userManager = new UserManager(oidcConfig);\r\n const user = await userManager.getUser();\r\n if (user) return user.access_token;\r\n return null;\r\n};\r\n\r\nexport const userHasAllPermissions = (userPermissions, ...permissions) =>\r\n permissions.every((p) => userPermissions.indexOf(p) > -1);\r\n\r\nexport const userHasSomePermissions = (userPermissions, ...permissions) =>\r\n permissions.some((p) => userPermissions.indexOf(p) > -1);\r\n\r\nexport const loginAsync = async (oidcConfig) => {\r\n const userManager = new Oidc.UserManager(oidcConfig);\r\n const user = await userManager.getUser();\r\n if (!user || user.expired) {\r\n return userManager.signinRedirect();\r\n }\r\n return user;\r\n};\r\n\r\nexport const signOut = (oidcConfig) => {\r\n const userManager = new Oidc.UserManager(oidcConfig);\r\n return userManager.signoutRedirect();\r\n};\r\n","// https://redux.js.org/recipes/reducing-boilerplate#generating-reducers\r\n\r\nexport const createReducer = (initialState, handlers) => {\r\n return function reducer(state = initialState, action) {\r\n const handler = action && action.type && handlers[action.type];\r\n if (handler) {\r\n return handler(state, action);\r\n }\r\n return state;\r\n };\r\n};\r\n\r\nexport const makeActionCreator = (type) => {\r\n return function (payload) {\r\n return { type, payload };\r\n };\r\n};\r\n","const isProd = process.env.NODE_ENV === 'production';\r\n\r\nexport const basePath = isProd ? window.environmentalVariables.basePath : '/';\r\n\r\nexport const oidcConfig = isProd\r\n ? {\r\n authority: window.environmentalVariables.identityServerUrl,\r\n client_id: 'SelfServiceNew',\r\n redirect_uri: window.environmentalVariables.baseUrl + '/LoginCallback',\r\n response_type: 'id_token token',\r\n scope: 'openid profile SelfServiceApi',\r\n post_logout_redirect_uri: window.environmentalVariables.baseUrl,\r\n }\r\n : {\r\n authority: 'https://oc-qa-t2.debitsuccess.com/Identity',\r\n client_id: 'SelfServiceNew',\r\n redirect_uri: 'https://localhost:44308/LoginCallback',\r\n response_type: 'id_token token',\r\n scope: 'openid profile SelfServiceApi',\r\n post_logout_redirect_uri: 'https://localhost:44308',\r\n };\r\n\r\nexport const oldSelfServiceLink = isProd\r\n ? window.environmentalVariables.oldSelfServiceLink\r\n : 'https://localhost/SelfServiceOld';\r\n\r\nexport const wdeLink = isProd\r\n ? window.environmentalVariables.wdeLink\r\n : 'https://localhost/DirectEntry';\r\n\r\nexport const locale = isProd ? window.environmentalVariables.locale : 'en-NZ';\r\n","import ky from 'ky';\r\nimport { getAuthToken } from 'utils/auth';\r\nimport { oidcConfig, basePath } from 'config';\r\n\r\nconst createKyClientInternal = async () => {\r\n const accessToken = await getAuthToken(oidcConfig);\r\n return ky.create({\r\n headers: {\r\n Authorization: 'Bearer ' + accessToken,\r\n 'Content-Type': 'application/json;charset=utf-8',\r\n Accept: 'application/json;charset=utf-8',\r\n },\r\n prefixUrl: basePath,\r\n });\r\n};\r\n\r\nlet kyClientPromise = createKyClientInternal();\r\n\r\n// This is useful when the user is logged out and the login call back function is called.\r\nexport const refreshKyClientAccessToken = async () => {\r\n const accessToken = await getAuthToken(oidcConfig);\r\n //extend the already resolved promise to return a new client.\r\n kyClientPromise = kyClientPromise.then((kyClient) =>\r\n kyClient.extend({\r\n headers: {\r\n Authorization: 'Bearer ' + accessToken,\r\n },\r\n })\r\n );\r\n};\r\n\r\n// Returns the same resolved promise everytime.\r\nexport const getKyClient = async () => {\r\n return kyClientPromise;\r\n};\r\n","import { getKyClient } from './client';\r\n\r\nexport const putTcAccepted = async (tcAccepted) => {\r\n const url = `v1.0/TermsAndConditions/${tcAccepted}`;\r\n const kyClient = await getKyClient();\r\n return kyClient.put(url);\r\n};\r\n","import { loginAsync } from 'utils/auth';\r\nimport { createReducer } from 'utils/reduxCreators';\r\nimport { oidcConfig } from 'config';\r\nimport { putTcAccepted } from 'services/termsAndConditions';\r\n\r\nexport const CHECK_USER_AUTHENTICATED = 'auth/CHECK_USER_AUTHENTICATED';\r\nexport const UPDATE_TERMS_CONDITIONS = 'auth/UPDATE_TERMS_CONDITIONS';\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n permissions: [],\r\n userId: -1,\r\n userName: null,\r\n parentUserId: null,\r\n parentUserName: null,\r\n fullName: null,\r\n email: null,\r\n hasAcceptedTC: true,\r\n accessToken: null,\r\n idToken: null,\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [CHECK_USER_AUTHENTICATED]: (state, { payload }) => {\r\n return { ...state, ...payload };\r\n },\r\n [UPDATE_TERMS_CONDITIONS]: (state, { payload }) => {\r\n return { ...state, hasAcceptedTC: payload };\r\n },\r\n});\r\n\r\nexport const checkLogin = (params, value) => async (dispatch, getState) => {\r\n const user = await loginAsync(oidcConfig);\r\n if (!user || user.expired) {\r\n dispatch({ type: CHECK_USER_AUTHENTICATED, payload: initialState });\r\n } else {\r\n const data = {\r\n isAuthenticated: true,\r\n permissions: user.profile.web_user_permissions.split(','),\r\n userId: user.profile.web_user_id,\r\n parentUserId: user.profile.web_user_parentid,\r\n parentUserName: user.profile.web_user_parent_username,\r\n fullName: user.profile.web_user_fullname,\r\n email: user.profile.web_user_email,\r\n hasAcceptedTC:\r\n user.profile.web_user_accepted_terms &&\r\n user.profile.web_user_accepted_terms.toLowerCase() === 'true',\r\n accessToken: user.access_token,\r\n idToken: user.id_token,\r\n };\r\n dispatch({ type: CHECK_USER_AUTHENTICATED, payload: data });\r\n }\r\n};\r\n\r\nexport const updateTcAccepted = (isAccepted) => async (dispatch) => {\r\n const tcAccepted = await putTcAccepted(isAccepted);\r\n // todo payload status from response\r\n dispatch({ type: UPDATE_TERMS_CONDITIONS, payload: tcAccepted });\r\n};\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchFeatureFlags = async () => {\r\n let url = `v1/FeatureFlags`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n","import { createReducer, makeActionCreator } from 'utils/reduxCreators';\r\n\r\nexport const UPDATE_APP_HTTP_ERROR = 'meta/UPDATE_APP_HTTP_ERROR';\r\nexport const RESET_APP_HTTP_ERROR = 'meta/RESET_APP_HTTP_ERROR';\r\nexport const UPDATE_APP_LOADER = 'meta/UPDATE_APP_LOADER';\r\nexport const UPDATE_SIDE_BAR_OPEN = 'meta/UPDATE_SIDE_BAR_OPEN';\r\n\r\nexport const initialState = {\r\n httpError: null,\r\n appLoading: false,\r\n isSideBarOpen: false, //Need to show\\hide some UI based on the state of the side bar.\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [UPDATE_APP_HTTP_ERROR]: (state, action) => {\r\n const { payload } = action;\r\n return {\r\n ...state,\r\n httpError: payload,\r\n };\r\n },\r\n [RESET_APP_HTTP_ERROR]: (state) => {\r\n return {\r\n ...state,\r\n httpError: null,\r\n };\r\n },\r\n [UPDATE_APP_LOADER]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n appLoading: payload,\r\n };\r\n },\r\n [UPDATE_SIDE_BAR_OPEN]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n isSideBarOpen: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const updateHttpError = (errorResponse) => async (dispatch) => {\r\n const responseJson = await errorResponse.json();\r\n const action = {\r\n type: UPDATE_APP_HTTP_ERROR,\r\n payload: {\r\n status: errorResponse.status,\r\n statusText: responseJson.errorText || '',\r\n validationErrors: responseJson.validationErrors,\r\n },\r\n };\r\n dispatch(action);\r\n};\r\n\r\nexport const resetHttpError = makeActionCreator(RESET_APP_HTTP_ERROR);\r\n\r\nexport const updateAppLoading = makeActionCreator(UPDATE_APP_LOADER);\r\n\r\nexport const updateIsSideBarOpen = makeActionCreator(UPDATE_SIDE_BAR_OPEN);\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchFeatureFlags } from 'services/featureFlags';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_FEATURE_FLAGS = 'featureFlags/RECEIVED_FEATURE_FLAGS';\r\n\r\nconst initialState = {\r\n isSuspensionRulesEnabled: false,\r\n isSsoManagementEnabled: false,\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_FEATURE_FLAGS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getFeatureFlags = () => async (dispatch) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const result = await fetchFeatureFlags();\r\n dispatch(updateAppLoading(false));\r\n dispatch({ type: RECEIVED_FEATURE_FLAGS, payload: result });\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n","import { locale } from 'config';\r\n\r\nexport const numberToCurrency = function (number, localisation) {\r\n let currency = localisation.locales.currency || 'NZD';\r\n const fractionDigits = 2;\r\n if (\r\n isNullOrUndefined(number) ||\r\n parseFloat(number.toFixed(fractionDigits)) === 0\r\n ) {\r\n number = 0;\r\n }\r\n return number.toLocaleString(locale, {\r\n style: 'currency',\r\n currency: currency,\r\n minimumFractionDigits: fractionDigits,\r\n maximumFractionDigits: fractionDigits,\r\n });\r\n};\r\n\r\nexport const getDisplayName = (ReactComponent) =>\r\n ReactComponent.displayName || ReactComponent.name || 'Component';\r\n\r\nexport const isNullOrUndefined = (value) => {\r\n return value === null || value === undefined;\r\n};\r\n\r\nexport const isNotEmptyArray = (arr) => Array.isArray(arr) && arr.length > 0;\r\n\r\nexport const isNegativeNumber = function (number) {\r\n return number < 0;\r\n};\r\n","export const setValue = (key, value) => {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n};\r\n\r\nexport const getValue = (key) => {\r\n return JSON.parse(localStorage.getItem(key));\r\n};\r\n\r\nexport const removeValue = (key) => {\r\n localStorage.removeItem(key);\r\n};\r\n","import { setValue, getValue } from './localStorage';\r\n\r\nconst TC_ACCEPTED = 'TC_ACCEPTED_';\r\nconst REQUESTED_PATH = 'REQUESTED_PATH';\r\nconst SIDE_BAR_OPEN_CLOSE = 'SIDE_BAR_OPEN_CLOSE';\r\n\r\nexport const setUserTcPreference = (userId) => {\r\n setValue(TC_ACCEPTED + userId, true);\r\n};\r\n\r\nexport const getUserTcPreference = (userId) => getValue(TC_ACCEPTED + userId);\r\n\r\nexport const setRequestedPath = (path, searchString = '') => {\r\n setValue(REQUESTED_PATH, path + searchString);\r\n};\r\n\r\nexport const getRequestedPath = () => {\r\n try {\r\n return getValue(REQUESTED_PATH);\r\n } catch (e) {\r\n return '/';\r\n }\r\n};\r\n\r\nexport const setSideBarOpenPreference = (open) => {\r\n setValue(SIDE_BAR_OPEN_CLOSE, open);\r\n};\r\n\r\nexport const getSideBarOpenPreference = () => getValue(SIDE_BAR_OPEN_CLOSE);\r\n","import React from 'react';\r\nimport { getDisplayName } from 'utils/misc';\r\nimport {\r\n getRequestedPath,\r\n getSideBarOpenPreference,\r\n} from 'utils/userPreferences';\r\n\r\n//a HOC component to pass local storage data as props to component\r\nconst withUserData = (WrappedComponent) => {\r\n const WithUserData = (props) => {\r\n const currentPath = getRequestedPath();\r\n const sideBarOpen = getSideBarOpenPreference();\r\n\r\n return (\r\n \r\n );\r\n };\r\n WithUserData.displayName = `WithUserData(${getDisplayName(\r\n WrappedComponent\r\n )})`;\r\n return WithUserData;\r\n};\r\n\r\nexport default withUserData;\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Login = (props) => {\r\n const { userData, checkLogin, isAuthenticated } = props;\r\n useEffect(() => {\r\n checkLogin(); //call identityserver method to redirect\r\n }, [checkLogin]);\r\n\r\n //redirect back to the previously queried address, saved in the localStorage\r\n return isAuthenticated && ;\r\n};\r\n\r\nLogin.propTypes = {\r\n isAuthenticated: PropTypes.bool,\r\n userData: PropTypes.shape({\r\n currentPath: PropTypes.string.isRequired,\r\n }), //from withUserData HOC\r\n checkLogin: PropTypes.func.isRequired,\r\n};\r\n\r\nLogin.defaultProps = {\r\n isAuthenticated: false,\r\n};\r\n\r\nexport default Login;\r\n","import { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport withUserData from 'hoc/withUserData';\r\nimport { checkLogin } from 'ducks/auth';\r\nimport Login from './Login';\r\n\r\nconst mapStatetoProps = (state) => {\r\n return {\r\n isAuthenticated: state.auth.isAuthenticated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n checkLogin,\r\n};\r\n\r\nexport default compose(\r\n connect(mapStatetoProps, mapDispatchToProps),\r\n withUserData\r\n)(Login);\r\n","import { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Oidc from 'oidc-client';\r\nimport withUserData from 'hoc/withUserData';\r\nimport { refreshKyClientAccessToken } from 'services/client';\r\n\r\n//Identity server needs this page to call back to in order to complete its sign in process\r\nconst LoginCallback = (props) => {\r\n const { userData } = props;\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n await new Oidc.UserManager({\r\n clockSkew: 86400,\r\n }).signinRedirectCallback();\r\n await refreshKyClientAccessToken();\r\n history.push(userData.currentPath || '/');\r\n } catch (e) {\r\n console.error(e);\r\n history.push('/ErrorPage');\r\n }\r\n })();\r\n }, [userData.currentPath, history]);\r\n return null;\r\n};\r\n\r\nLoginCallback.propTypes = {\r\n userData: PropTypes.object, //from withUserData HOC\r\n};\r\n\r\nexport default withUserData(LoginCallback);\r\n","import { styled } from '@material-ui/core';\r\n\r\nconst PageWrapper = styled('div')({\r\n padding: '25px 40px',\r\n});\r\n\r\nexport default PageWrapper;\r\n","import React from 'react';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport { Link } from 'react-router-dom';\r\n\r\n//A temporary error page for login errors now, needs to be styled\r\nconst Error = () => {\r\n return (\r\n \r\n Error logging in.
\r\n There is an error trying to log you in, please try again.\r\n
\r\n Go Back\r\n
\r\n );\r\n};\r\n\r\nexport default Error;\r\n","import { useEffect } from 'react';\r\nimport { signOut } from 'utils/auth';\r\nimport { oidcConfig } from 'config';\r\n\r\nconst Logout = (props) => {\r\n useEffect(() => {\r\n signOut(oidcConfig);\r\n }, []);\r\n return null;\r\n};\r\n\r\nexport default Logout;\r\n","const profileMenuEntries = [\r\n {\r\n name: 'My Profile',\r\n path: '/MyProfile',\r\n },\r\n {\r\n name: 'My Settings',\r\n path: '/MySettings',\r\n },\r\n {\r\n name: 'Help',\r\n path: '/Help',\r\n },\r\n {\r\n name: 'Terms and Conditions',\r\n path: '/Terms',\r\n },\r\n {\r\n name: 'Logout',\r\n path: '/Logout',\r\n },\r\n];\r\n\r\nexport default profileMenuEntries;\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z\"\n});\n\nvar SvgFaUser = function SvgFaUser(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 448 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaUser, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-user.f64793e2.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M500 400c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v324h452zM372 128.7l-84 56-85.1-85.1c-5.5-5.5-14.8-4.4-18.8 2.3L96 256v96h384l-90.3-218.1c-3-6.9-11.5-9.4-17.7-5.2zM144 269.3l57.5-103.2 80.4 80.4c71.8-47.9 8.2-5.4 80.7-53.8L407.2 304H144v-34.7z\"\n});\n\nvar SvgFaChartArea = function SvgFaChartArea(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 512 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaChartArea, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-chart-area.1a3f8391.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z\"\n});\n\nvar SvgFaEdit = function SvgFaEdit(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 576 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaEdit, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-edit.2e4101ce.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm0-144c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zM272.1 276c-11.9 0-23.9 1.7-35.5 5.3-14.2 4.3-29.1 6.7-44.7 6.7s-30.5-2.4-44.7-6.7c-11.6-3.5-23.6-5.3-35.5-5.3-36.3 0-71.6 16.2-92.3 46.9C7.2 341.3 0 363.4 0 387.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-44.8c0-23.8-7.2-45.9-19.6-64.3-20.7-30.7-56-46.9-92.3-46.9zM336 432H48v-44.8c0-28.9 18.4-53.6 44.1-63.1 10.3-3.8 21.6-3.7 31.9 0 22.1 7.9 45 11.9 68 11.9s45.8-4 68.1-11.9c10.3-3.7 21.6-3.8 31.9 0 25.7 9.4 44.1 34.2 44.1 63.1V432zM192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm0-176c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm431.7 237.1C606.4 291.5 577 278 546.8 278c-27.8 0-34.8 10-66.8 10s-39-10-66.8-10c-13.3 0-26.2 3-38.2 8.1 5.8 5.9 11.3 12 16 18.9 4.7 7 8.6 14.4 12 22 3.3-.7 6.7-1.1 10.2-1.1 17.2 0 29.6 10 66.8 10 37.4 0 49.5-10 66.8-10 15.7 0 29.5 6.7 37.1 17.9 5.3 7.9 8.1 17.1 8.1 26.7V400H416v32c0 5.5-.6 10.8-1.6 16H600c22.1 0 40-17.9 40-40v-37.3c0-19.9-6-38.3-16.3-53.6z\"\n});\n\nvar SvgFaUserFriends = function SvgFaUserFriends(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 640 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaUserFriends, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-user-friends.40bc236c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M224 96.1v48.8l29.7 29.7c-6.8-34.8 3.5-70.3 28.5-95.3 20.3-20.3 47.2-31.2 75-31.2h1.2L301 105.3l15.1 90.6 90.6 15.1 57.3-57.3c.3 28.3-10.6 55.5-31.2 76.1-9.3 9.3-20.2 16.4-31.8 21.6 1.8 1.6 3.9 2.9 5.6 4.6l30.7 30.7c10.5-6.3 20.5-13.9 29.4-22.9 38.1-38.1 53.7-94.3 40.7-146.6C504.4 105 495 95.4 483 92c-12.2-3.4-25.2.1-34 9l-58.7 58.6-32.4-5.4-5.4-32.4 58.6-58.6c8.9-8.9 12.3-21.9 8.9-34-3.3-12.1-13-21.5-25.2-24.5-53.2-13.2-107.9 2-146.6 40.6C238 55.5 229.7 67 222.9 79.2l1.1.8v16.1zM106 454c-12.8 12.8-35.3 12.8-48.1 0-6.4-6.4-10-15-10-24 0-9.1 3.5-17.6 10-24l134.4-134.4-33.9-33.9L24 372C8.5 387.5 0 408.1 0 430s8.5 42.5 24 58 36.1 24 58 24 42.5-8.5 58-24l100.9-100.9c-9.7-15.8-15.2-33.8-15.7-52.1L106 454zm395.1-58.3L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7z\"\n});\n\nvar SvgFaTools = function SvgFaTools(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 512 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaTools, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-tools.35951549.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M452.515 237l31.843-18.382c9.426-5.441 13.996-16.542 11.177-27.054-11.404-42.531-33.842-80.547-64.058-110.797-7.68-7.688-19.575-9.246-28.985-3.811l-31.785 18.358a196.276 196.276 0 0 0-32.899-19.02V39.541a24.016 24.016 0 0 0-17.842-23.206c-41.761-11.107-86.117-11.121-127.93-.001-10.519 2.798-17.844 12.321-17.844 23.206v36.753a196.276 196.276 0 0 0-32.899 19.02l-31.785-18.358c-9.41-5.435-21.305-3.877-28.985 3.811-30.216 30.25-52.654 68.265-64.058 110.797-2.819 10.512 1.751 21.613 11.177 27.054L59.485 237a197.715 197.715 0 0 0 0 37.999l-31.843 18.382c-9.426 5.441-13.996 16.542-11.177 27.054 11.404 42.531 33.842 80.547 64.058 110.797 7.68 7.688 19.575 9.246 28.985 3.811l31.785-18.358a196.202 196.202 0 0 0 32.899 19.019v36.753a24.016 24.016 0 0 0 17.842 23.206c41.761 11.107 86.117 11.122 127.93.001 10.519-2.798 17.844-12.321 17.844-23.206v-36.753a196.34 196.34 0 0 0 32.899-19.019l31.785 18.358c9.41 5.435 21.305 3.877 28.985-3.811 30.216-30.25 52.654-68.266 64.058-110.797 2.819-10.512-1.751-21.613-11.177-27.054L452.515 275c1.22-12.65 1.22-25.35 0-38zm-52.679 63.019l43.819 25.289a200.138 200.138 0 0 1-33.849 58.528l-43.829-25.309c-31.984 27.397-36.659 30.077-76.168 44.029v50.599a200.917 200.917 0 0 1-67.618 0v-50.599c-39.504-13.95-44.196-16.642-76.168-44.029l-43.829 25.309a200.15 200.15 0 0 1-33.849-58.528l43.819-25.289c-7.63-41.299-7.634-46.719 0-88.038l-43.819-25.289c7.85-21.229 19.31-41.049 33.849-58.529l43.829 25.309c31.984-27.397 36.66-30.078 76.168-44.029V58.845a200.917 200.917 0 0 1 67.618 0v50.599c39.504 13.95 44.196 16.642 76.168 44.029l43.829-25.309a200.143 200.143 0 0 1 33.849 58.529l-43.819 25.289c7.631 41.3 7.634 46.718 0 88.037zM256 160c-52.935 0-96 43.065-96 96s43.065 96 96 96 96-43.065 96-96-43.065-96-96-96zm0 144c-26.468 0-48-21.532-48-48 0-26.467 21.532-48 48-48s48 21.533 48 48c0 26.468-21.532 48-48 48z\"\n});\n\nvar SvgFaCog = function SvgFaCog(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n height: \"18px\",\n width: \"18px\",\n viewBox: \"0 0 512 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaCog, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-cog.77009639.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 8a4 4 0 0 1 7.465-2H14a.5.5 0 0 1 .354.146l1.5 1.5a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0L13 9.207l-.646.647a.5.5 0 0 1-.708 0L11 9.207l-.646.647a.5.5 0 0 1-.708 0L9 9.207l-.646.647A.5.5 0 0 1 8 10h-.535A4 4 0 0 1 0 8zm4-3a3 3 0 1 0 2.712 4.285A.5.5 0 0 1 7.163 9h.63l.853-.854a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.793-.793-1-1h-6.63a.5.5 0 0 1-.451-.285A3 3 0 0 0 4 5z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z\"\n});\n\nvar SvgBiKey = function SvgBiKey(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n fill: \"currentColor\",\n className: \"bi bi-key\",\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgBiKey, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/bi-key.995afdac.svg\";\nexport { ForwardRef as ReactComponent };","import { oldSelfServiceLink, wdeLink } from 'config';\r\nimport { ReactComponent as CustomerSvg } from 'assets/icons/fa-user.svg';\r\nimport { ReactComponent as InsightsSvg } from 'assets/icons/fa-chart-area.svg';\r\nimport { ReactComponent as OMGSvg } from 'assets/icons/fa-edit.svg';\r\nimport { ReactComponent as WDESvg } from 'assets/icons/fa-user-friends.svg';\r\nimport { ReactComponent as ToolSvg } from 'assets/icons/fa-tools.svg';\r\nimport { ReactComponent as AdminSvg } from 'assets/icons/fa-cog.svg';\r\nimport { ReactComponent as SsoSvg } from 'assets/icons/bi-key.svg';\r\nimport {\r\n ssoManagementFeatureFlag,\r\n suspensionRulesFeatureFlag,\r\n} from './featureFlags';\r\n\r\nconst sideMenuEntries = [\r\n {\r\n name: 'Customers',\r\n path: '/Customers',\r\n roles: 'IsAdmin,CanAccessCustomerInfo',\r\n icon: CustomerSvg,\r\n },\r\n {\r\n name: 'Insights',\r\n icon: InsightsSvg,\r\n roles: 'CanAccessReports,CanAccessAnalytics',\r\n subRoutes: [\r\n {\r\n path: '/Reports',\r\n name: 'Reports',\r\n roles: 'CanAccessReports',\r\n },\r\n {\r\n name: 'Analytics',\r\n roles: 'CanAccessAnalytics',\r\n isExternal: true,\r\n path: oldSelfServiceLink + '/Analytics/DailyStatus',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'OMG',\r\n icon: OMGSvg,\r\n roles: 'CanLogonToOMG',\r\n subRoutes: [\r\n {\r\n path: '/OmgSettings',\r\n name: 'OMG Settings',\r\n roles: 'CanLogonToOMG',\r\n },\r\n {\r\n path: '/BrandTemplates',\r\n name: 'Brand Templates',\r\n roles: 'CanLogonToOMG',\r\n },\r\n {\r\n path: '/AccountTemplates',\r\n name: 'Account Templates',\r\n roles: 'CanLogonToOMG',\r\n },\r\n ],\r\n },\r\n {\r\n icon: WDESvg,\r\n name: 'Direct Entry',\r\n roles: 'CanUseDirectEntry',\r\n isExternal: true,\r\n path: wdeLink,\r\n },\r\n {\r\n name: 'Tools',\r\n roles:\r\n 'CanAccessBulkAccountUpdates,CanUploadCCDailyBuckets,CanAccessForms,CanCreateOneOffInvoices',\r\n icon: ToolSvg,\r\n subRoutes: [\r\n {\r\n path: '/BulkBusinessIdUpdate',\r\n name: 'Business ID Update',\r\n roles: 'CanAccessBulkAccountUpdates',\r\n },\r\n {\r\n path: '/InvoiceUpload',\r\n name: 'Invoices',\r\n roles: 'CanCreateOneOffInvoices',\r\n },\r\n {\r\n path: '/UploadCCBuckets',\r\n name: 'CC Bucket Uploads',\r\n roles: 'CanUploadCCDailyBuckets',\r\n },\r\n {\r\n path: '/Forms',\r\n name: 'Forms',\r\n roles: 'CanAccessForms',\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Administration',\r\n icon: AdminSvg,\r\n roles: 'IsAdmin,CanConfigureSuspensionRules',\r\n subRoutes: [\r\n {\r\n path: '/UserManagement',\r\n name: 'User Management',\r\n roles: 'IsAdmin',\r\n },\r\n {\r\n path: '/GroupManagement',\r\n name: 'Group Management',\r\n roles: 'IsAdmin',\r\n },\r\n {\r\n path: '/Settings',\r\n name: 'Custom Cancellation',\r\n roles: 'IsAdmin',\r\n },\r\n {\r\n path: '/SuspensionRules',\r\n name: 'Suspension Rules',\r\n roles: 'CanConfigureSuspensionRules',\r\n featureFlag: suspensionRulesFeatureFlag,\r\n hidden: false,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'SSO',\r\n icon: SsoSvg,\r\n roles: 'IsAdmin,IsGlobalAdmin,CanManageSSOUsers',\r\n featureFlag: ssoManagementFeatureFlag,\r\n subRoutes: [\r\n {\r\n path: '/SsoGroupManagement',\r\n name: 'Group Management',\r\n roles: 'IsAdmin,IsGlobalAdmin,CanManageSSOUsers',\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport default sideMenuEntries;\r\n","export const suspensionRulesFeatureFlag = 'isSuspensionRulesEnabled';\r\nexport const ssoManagementFeatureFlag = 'isSsoManagementEnabled';\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_1127_20447)\"\n}, React.createElement(\"path\", {\n d: \"M15.9484 18.5842C19.0081 16.5216 21.5438 13.7656 23.3517 10.5379C25.1596 7.31014 26.1891 3.70077 26.3576 0C22.678 0.16896 19.0893 1.20453 15.8803 3.02333C12.6714 4.84213 9.9319 7.39335 7.8824 10.4716C6.5062 10.2226 5.09335 10.2674 3.73544 10.6029C2.37753 10.9384 1.10488 11.5571 0 12.4191V14.1C1.62022 14.0982 3.22489 14.4178 4.72212 15.0406C6.21936 15.6633 7.57976 16.577 8.72543 17.7293C9.87109 18.8816 10.7795 20.2498 11.3987 21.7557C12.0179 23.2616 12.3357 24.8755 12.3338 26.5051H14.0191C14.8739 25.3941 15.4873 24.115 15.8197 22.7506C16.152 21.3862 16.1959 19.9668 15.9484 18.5842ZM17.543 5.9173C18.1262 5.91684 18.6964 6.09053 19.1814 6.41636C19.6663 6.74219 20.0441 7.20548 20.267 7.74752C20.4898 8.28957 20.5477 8.88595 20.4332 9.46108C20.3186 10.0362 20.0369 10.5642 19.6238 10.9782C19.2106 11.3921 18.6845 11.6733 18.1122 11.7862C17.5399 11.8991 16.9472 11.8386 16.4092 11.6123C15.8711 11.386 15.412 11.0042 15.0899 10.5152C14.7679 10.0261 14.5975 9.45197 14.6002 8.86542C14.6033 8.08246 14.9147 7.33262 15.4663 6.78007C16.0178 6.22752 16.7646 5.91729 17.543 5.9173Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M6.49699 23.2437C6.44745 22.411 6.08362 21.6287 5.47985 21.0567C4.87608 20.4847 4.07794 20.1661 3.2485 20.1661C2.41905 20.1661 1.62091 20.4847 1.01714 21.0567C0.413373 21.6287 0.0495467 22.411 0 23.2437V26.5168H3.25431C4.11741 26.5168 4.94515 26.172 5.55545 25.5581C6.16575 24.9443 6.50862 24.1118 6.50862 23.2437H6.49699Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M60.5907 26.5098H57.0435V10.0461H60.5907V26.5098Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M86.6809 13.2537V16.3491H83.659C81.5554 16.3491 80.8975 17.5975 80.8975 19.6222V26.5191H77.355V13.263H80.9022V15.6874C81.3322 14.5863 82.6595 13.263 84.3889 13.263L86.6809 13.2537Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M68.9727 12.9521C67.6095 12.9521 66.2769 13.3588 65.1434 14.1206C64.01 14.8824 63.1266 15.9651 62.605 17.2319C62.0834 18.4987 61.947 19.8926 62.2132 21.2373C62.4793 22.5821 63.1359 23.8172 64.1001 24.7866C65.0642 25.7559 66.2925 26.4159 67.6296 26.6832C68.9667 26.9504 70.3525 26.8128 71.6119 26.2877C72.8712 25.7627 73.9474 24.8739 74.7045 23.7336C75.4615 22.5933 75.8654 21.2529 75.8649 19.8818C75.8649 18.9716 75.6866 18.0703 75.3402 17.2294C74.9938 16.3885 74.4861 15.6245 73.8461 14.981C73.2061 14.3375 72.4463 13.8271 71.6101 13.479C70.7739 13.1309 69.8777 12.9518 68.9727 12.9521ZM68.9727 23.6225C68.2371 23.6225 67.5181 23.4031 66.9064 22.992C66.2948 22.581 65.8181 21.9968 65.5366 21.3133C65.2551 20.6297 65.1815 19.8776 65.325 19.152C65.4685 18.4264 65.8227 17.7599 66.3429 17.2367C66.863 16.7136 67.5257 16.3573 68.2471 16.213C68.9686 16.0686 69.7164 16.1427 70.396 16.4258C71.0756 16.709 71.6565 17.1884 72.0651 17.8036C72.4738 18.4187 72.6919 19.1419 72.6919 19.8818C72.6919 20.8739 72.3001 21.8253 71.6026 22.5268C70.9051 23.2283 69.9591 23.6225 68.9727 23.6225Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M39.535 13.2537H37.0687L32.9451 17.4011L28.8214 13.2537H26.3574V15.7342L30.4811 19.8817L26.3574 24.0292V26.5097H28.8214L32.9451 22.3622L37.0687 26.5097H39.535V24.0292L35.4114 19.8817L39.535 15.7342V13.2537Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M48.8865 12.9521C47.3314 12.9521 45.4858 13.8663 44.8279 14.8833V13.2467H41.29V29.7104H44.8372V24.8709C45.509 25.8973 47.3175 26.8044 48.8935 26.8044C52.6987 26.8044 55.5532 23.6996 55.5532 19.8724C55.5532 16.0452 52.6987 12.9521 48.8865 12.9521ZM48.6541 23.6225C47.9185 23.6225 47.1994 23.4031 46.5878 22.992C45.9762 22.581 45.4995 21.9968 45.218 21.3133C44.9365 20.6297 44.8628 19.8776 45.0063 19.152C45.1498 18.4264 45.5041 17.7598 46.0242 17.2367C46.5443 16.7136 47.207 16.3573 47.9285 16.213C48.6499 16.0686 49.3978 16.1427 50.0773 16.4258C50.7569 16.709 51.3378 17.1884 51.7465 17.8036C52.1552 18.4187 52.3733 19.1419 52.3733 19.8818C52.3733 20.8739 51.9814 21.8253 51.284 22.5268C50.5865 23.2283 49.6405 23.6225 48.6541 23.6225Z\",\n fill: \"#F44E27\"\n}), React.createElement(\"path\", {\n d: \"M39.9745 31.2792V47.7429H37.3989L37.1665 45.7229C36.3692 47.0649 34.6467 48 32.6151 48C28.9842 48 26.3599 45.4634 26.3599 41.1406C26.3599 36.6985 29.1144 34.2016 32.6151 34.2016C34.6746 34.2016 36.3343 35.083 37.1456 36.4296V31.2862L39.9745 31.2792ZM37.0898 41.1406C37.0898 38.4215 35.3929 36.7125 33.1776 36.7382C30.8531 36.7382 29.2655 38.4473 29.2655 41.1406C29.2655 43.8853 30.8927 45.4891 33.1776 45.4891C35.4045 45.4891 37.0898 43.8853 37.0898 41.1406Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M54.8513 41.8909H44.7606C44.8117 44.3762 46.4343 45.6714 48.4938 45.6714C50.0372 45.6714 51.325 44.9466 51.8643 43.4971H54.7211C54.0238 46.1881 51.6597 48 48.445 48C44.5026 48 41.9131 45.2576 41.9131 41.089C41.9131 36.9205 44.5026 34.2062 48.4217 34.2062C52.2571 34.2062 54.8583 36.848 54.8583 40.8342L54.8513 41.8909ZM44.7862 39.9224H51.9921C51.8364 37.6196 50.3185 36.4553 48.4124 36.4553C46.5063 36.4553 44.9931 37.6196 44.7862 39.9224Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M70.321 41.1148C70.321 45.5405 67.5665 48 64.0658 48C62.0319 48 60.2815 47.121 59.5098 45.7743L59.2773 47.7429H56.7041V31.2792H59.5353V36.4811C60.3071 35.0783 62.0063 34.2016 64.0658 34.2016C67.6688 34.2063 70.321 36.792 70.321 41.1148ZM67.4108 41.1148C67.4108 38.3958 65.8162 36.7382 63.4986 36.7125C61.2857 36.7125 59.5865 38.4215 59.5865 41.1406C59.5865 43.8596 61.2857 45.4891 63.4986 45.4891C65.7906 45.4891 67.4108 43.8339 67.4108 41.1148Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M71.9409 34.4868H74.7466V47.7429H71.9409V34.4868Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M78.5567 44.1425V36.9977H76.3438V34.4868H77.4781C78.301 34.4868 78.559 34.073 78.559 33.2454V31.2792H81.3647V34.4868H84.4284V36.9977H81.3624V43.6001C81.3624 44.6615 81.6715 45.2366 82.9082 45.2366H84.4005V47.7429H82.1085C79.8189 47.7429 78.5567 46.4477 78.5567 44.1425Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M92.5873 43.7287C92.6129 45.101 93.8728 45.9029 95.5976 45.9029C97.3224 45.9029 98.3521 45.2577 98.3521 44.091C98.3521 43.081 97.8384 42.5387 96.3437 42.3049L93.6938 41.8373C91.1206 41.3977 90.1164 40.0511 90.1164 38.1597C90.1164 35.7797 92.4595 34.225 95.4441 34.225C98.6613 34.225 101.004 35.7797 101.023 38.4192H98.2336C98.208 37.0726 97.0504 36.3151 95.4279 36.3151C93.8844 36.3151 92.9058 36.9627 92.9058 38.0498C92.9058 39.0084 93.5752 39.4526 95.042 39.7074L97.6408 40.175C100.086 40.6145 101.218 41.8326 101.218 43.8268C101.218 46.5692 98.6961 47.993 95.6394 47.993C92.1643 47.993 89.8281 46.3121 89.77 43.7216L92.5873 43.7287Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M114.438 34.4611V47.7428H111.918L111.711 46.0338C110.991 47.2238 109.677 48 107.992 48C104.696 48 102.767 45.7743 102.767 42.389V34.4611H105.468V41.9939C105.468 44.4019 106.704 45.5405 108.583 45.5148C110.642 45.4891 111.748 44.0138 111.748 41.7367V34.4611H114.438Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M122.392 36.661C120.203 36.661 118.71 38.2672 118.71 41.089C118.71 44.0652 120.256 45.5147 122.313 45.5147C123.961 45.5147 125.172 44.5796 125.712 42.8238H128.699C128.029 46.0338 125.609 48 122.367 48C118.452 48 115.833 45.2576 115.833 41.089C115.833 36.9205 118.452 34.2062 122.392 34.2062C125.609 34.2062 128.004 36.0438 128.699 39.2561H125.661C125.198 37.5938 123.936 36.661 122.392 36.661Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M136.163 36.661C133.973 36.661 132.481 38.2672 132.481 41.089C132.481 44.0652 134.026 45.5147 136.084 45.5147C137.732 45.5147 138.943 44.5796 139.482 42.8238H142.469C141.799 46.0338 139.38 48 136.137 48C132.223 48 129.598 45.2576 129.598 41.089C129.598 36.9205 132.223 34.2062 136.163 34.2062C139.38 34.2062 141.774 36.0438 142.469 39.2561H139.431C138.968 37.5938 137.706 36.661 136.163 36.661Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M156.393 41.8909H146.302C146.355 44.3762 147.976 45.6714 150.035 45.6714C151.579 45.6714 152.866 44.9466 153.408 43.4971H156.265C155.567 46.1881 153.201 48 149.989 48C146.051 48 143.45 45.2576 143.45 41.089C143.45 36.9205 146.051 34.2062 149.958 34.2062C153.794 34.2062 156.393 36.848 156.393 40.8342V41.8909ZM146.327 39.9224H153.533C153.378 37.6196 151.86 36.4553 149.956 36.4553C148.052 36.4553 146.534 37.6196 146.327 39.9224Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M160.231 43.7287C160.256 45.101 161.516 45.9029 163.252 45.9029C164.989 45.9029 166.007 45.2577 166.007 44.091C166.007 43.081 165.493 42.5387 164.001 42.3049L161.349 41.8373C158.775 41.3977 157.771 40.0511 157.771 38.1597C157.771 35.7797 160.112 34.225 163.099 34.225C166.316 34.225 168.659 35.7797 168.678 38.4192H165.888C165.863 37.0726 164.703 36.3151 163.083 36.3151C161.537 36.3151 160.561 36.9627 160.561 38.0498C160.561 39.0084 161.23 39.4526 162.697 39.7074L165.296 40.175C167.741 40.6145 168.873 41.8326 168.873 43.8268C168.873 46.5692 166.351 47.993 163.294 47.993C159.821 47.993 157.483 46.3121 157.427 43.7216L160.231 43.7287Z\",\n fill: \"#908090\"\n}), React.createElement(\"path\", {\n d: \"M172.35 43.7287C172.376 45.101 173.638 45.9029 175.372 45.9029C177.106 45.9029 178.129 45.2577 178.129 44.091C178.129 43.081 177.613 42.5387 176.121 42.3049L173.468 41.8373C170.895 41.3977 169.891 40.0511 169.891 38.1597C169.891 35.7797 172.234 34.225 175.219 34.225C178.438 34.225 180.779 35.7797 180.797 38.4192H178.008C177.983 37.0726 176.825 36.3151 175.202 36.3151C173.659 36.3151 172.68 36.9627 172.68 38.0498C172.68 39.0084 173.35 39.4526 174.817 39.7074L177.418 40.175C179.863 40.6145 180.995 41.8326 180.995 43.8268C180.995 46.5692 178.473 47.993 175.416 47.993C171.929 47.993 169.605 46.3121 169.547 43.7216L172.35 43.7287Z\",\n fill: \"#908090\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: \"clip0_1127_20447\"\n}, React.createElement(\"rect\", {\n width: 181,\n height: 48,\n fill: \"white\"\n})));\n\nvar SvgDsLogo = function SvgDsLogo(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 181,\n height: 48,\n viewBox: \"0 0 181 48\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgDsLogo, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ds-logo.97b2623d.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport classNames from 'classnames';\r\n\r\nconst styles = (theme) => ({\r\n icon: {\r\n color: theme.palette.xpl.text.secondary,\r\n marginRight: '14px',\r\n minWidth: 0,\r\n fontSize: '24px',\r\n },\r\n selected: {\r\n color: theme.palette.xpl.dm.primary.default,\r\n },\r\n});\r\n\r\nconst MenuItemIcon = (props) => {\r\n const { classes, selected, Icon } = props;\r\n\r\n return (\r\n \r\n {}\r\n \r\n );\r\n};\r\n\r\nMenuItemIcon.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n Icon: PropTypes.object,\r\n selected: PropTypes.bool,\r\n};\r\n\r\nMenuItemIcon.defaultProps = {\r\n selected: false,\r\n Icon: null,\r\n};\r\n\r\nexport default withStyles(styles)(MenuItemIcon);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n paddingLeft: '5px',\r\n '& span': {\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n },\r\n },\r\n itemText: {\r\n color: theme.palette.xpl.dm.text.secondary,\r\n },\r\n menuItemSelected: {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n subMenuItemSelected: {\r\n color: theme.palette.xpl.dm.primary.default,\r\n },\r\n});\r\n\r\nconst MenuItemText = (props) => {\r\n const { classes, name, selected, isSubMenuItem } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nMenuItemText.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n name: PropTypes.string.isRequired,\r\n selected: PropTypes.bool,\r\n isSubMenuItem: PropTypes.bool,\r\n};\r\n\r\nMenuItemText.defaultProps = {\r\n selected: false,\r\n isSubMenuItem: false,\r\n};\r\n\r\nexport default withStyles(styles)(MenuItemText);\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport { Link } from 'react-router-dom';\r\nimport classNames from 'classnames';\r\nimport MenuItemIcon from './MenuItemIcon';\r\nimport MenuItemText from './MenuItemText';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n borderRight: '4px solid transparent',\r\n '&:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background,\r\n '& svg, & span': {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n },\r\n '&$selected:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background,\r\n '& svg': {\r\n color: theme.palette.xpl.dm.primary.default,\r\n },\r\n },\r\n '&$selected': {\r\n backgroundColor: theme.palette.xpl.navigation,\r\n },\r\n },\r\n itemText: {\r\n paddingLeft: '5px',\r\n fontSize: '14px',\r\n },\r\n selected: {\r\n borderRight: `4px solid ${theme.palette.xpl.dm.primary.default}`,\r\n },\r\n});\r\n\r\nconst LinkedMenuItem = (props) => {\r\n const {\r\n path,\r\n classes,\r\n selected,\r\n Icon,\r\n name,\r\n className,\r\n isExternal,\r\n isSubMenuItem,\r\n } = props;\r\n\r\n const externalLinkClick = useCallback(\r\n (e) => {\r\n e.preventDefault();\r\n window.open(path);\r\n },\r\n [path]\r\n );\r\n\r\n return (\r\n \r\n {Icon && }\r\n \r\n \r\n );\r\n};\r\n\r\nLinkedMenuItem.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n path: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n Icon: PropTypes.object,\r\n selected: PropTypes.bool,\r\n isExternal: PropTypes.bool,\r\n isSubMenuItem: PropTypes.bool,\r\n};\r\n\r\nLinkedMenuItem.defaultProps = {\r\n selected: false,\r\n isExternal: false,\r\n Icon: null,\r\n isSubMenuItem: false,\r\n};\r\n\r\nexport default withStyles(styles)(LinkedMenuItem);\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport classNames from 'classnames';\r\nimport LinkedMenuItem from './LinkedMenuItem';\r\nimport MenuItemIcon from './MenuItemIcon';\r\nimport MenuItemText from './MenuItemText';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n '&:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background,\r\n '& svg, & span': {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n },\r\n '&$selected:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background,\r\n '& svg:first-child': {\r\n color: theme.palette.xpl.dm.primary.default,\r\n },\r\n },\r\n '&$selected': {\r\n backgroundColor: theme.palette.xpl.navigation,\r\n },\r\n },\r\n nested: {\r\n paddingLeft: '51px',\r\n borderLeft: 'none',\r\n },\r\n itemText: {\r\n paddingLeft: '5px',\r\n fontSize: '14px',\r\n },\r\n icon: {\r\n color: theme.palette.xpl.text.secondary,\r\n marginRight: theme.spacing(1),\r\n minWidth: 0,\r\n fontSize: '24px',\r\n },\r\n iconSelected: {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n selected: {\r\n backgroundColor: theme.palette.xpl.navigation,\r\n color: theme.palette.xpl.foreground,\r\n },\r\n subMenuRoot: {\r\n '&$subMenuSelected': {\r\n backgroundColor: theme.palette.xpl.gray[800],\r\n borderLeft: 'none',\r\n '&:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background2,\r\n '& span': {\r\n color: theme.palette.xpl.dm.primary.default,\r\n },\r\n },\r\n },\r\n '&:hover': {\r\n backgroundColor: theme.palette.xpl.dm.background2,\r\n },\r\n '&:hover $subMenuItemText': {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n },\r\n subMenuSelected: {},\r\n subMenuItemText: {\r\n paddingLeft: 0,\r\n },\r\n subMenuContainer: {\r\n backgroundColor: theme.palette.xpl.gray[800],\r\n },\r\n});\r\n\r\nconst CollapsibleMenuItem = (props) => {\r\n const {\r\n onCollapsibleMenuClick,\r\n name,\r\n classes,\r\n subMenuItems,\r\n className,\r\n expand,\r\n selected,\r\n Icon,\r\n } = props;\r\n\r\n const handleMenuClick = useCallback(() => {\r\n onCollapsibleMenuClick(name);\r\n }, [onCollapsibleMenuClick, name]);\r\n\r\n return (\r\n
\r\n \r\n {Icon && }\r\n \r\n {expand ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {subMenuItems.map((item) => (\r\n \r\n ))}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nCollapsibleMenuItem.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n Icon: PropTypes.object,\r\n subMenuItems: PropTypes.array,\r\n name: PropTypes.string,\r\n onCollapsibleMenuClick: PropTypes.func,\r\n selected: PropTypes.bool,\r\n expand: PropTypes.bool,\r\n};\r\n\r\nCollapsibleMenuItem.defaultProps = {\r\n selected: false,\r\n expand: false,\r\n Icon: null,\r\n};\r\n\r\nexport default withStyles(styles)(CollapsibleMenuItem);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, React.createElement(\"circle\", {\n id: \"path-1\",\n cx: 19,\n cy: 19,\n r: 19\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"UID\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n id: \"Customers1-2-Search\",\n transform: \"translate(-1243.000000, -13.000000)\"\n}, React.createElement(\"g\", {\n id: \"Top-nav\",\n transform: \"translate(210.000000, 0.000000)\"\n}, React.createElement(\"g\", {\n id: \"Account\",\n transform: \"translate(1033.000000, 13.000000)\"\n}, React.createElement(\"g\", {\n id: \"img-profile-placeholder-S\"\n}, React.createElement(\"mask\", {\n id: \"mask-2\",\n fill: \"white\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#path-1\"\n})), React.createElement(\"use\", {\n id: \"profile-base\",\n fill: \"#E1E4E8\",\n xlinkHref: \"#path-1\"\n}), React.createElement(\"path\", {\n d: \"M18.8333333,26 C22.9744376,26 26.3333333,22.6359447 26.3333333,18.4884793 C26.3333333,14.3410138 22.9744376,11 18.8333333,11 C14.692229,11 11.3333333,14.3640553 11.3333333,18.4884793 C11.3333333,22.6129032 14.692229,26 18.8333333,26 L18.8333333,26 Z M31.3263364,37.6666667 C31.3287265,37.6888649 31.3310589,37.7110872 31.3333333,37.7333333 L7.33333333,37.7333333 C7.33562214,37.7110883 7.33796964,37.6888659 7.34037561,37.6666667 C6.501504,37.6666667 5.98850575,37.6666667 5.98850575,37.6666667 C5.43678161,37.6666667 5,37.2323009 5,36.6836283 C5,31.5169617 9.22988506,27.3333333 14.4022989,27.3333333 L23.5977011,27.3333333 C28.7931034,27.3333333 33,31.539823 33,36.6836283 C33,37.2323009 32.5632184,37.6666667 32.0114943,37.6666667 C32.0114943,37.6666667 31.7619481,37.6666667 31.326345,37.6666667 Z M19,13.3333333 C21.9333333,13.3333333 24.3333333,15.7333333 24.3333333,18.6666667 C24.3333333,21.6 21.9333333,24 19,24 C16.0666667,24 13.6666667,21.6 13.6666667,18.6666667 C13.6666667,15.7333333 16.0666667,13.3333333 19,13.3333333 Z M31.3263364,37.6666667 C30.8194605,32.9590592 27.7155711,29.3333333 23.9487179,29.3333333 L14.7179487,29.3333333 C10.9512079,29.3333333 7.84739122,32.9885603 7.34037561,37.6666667 C9.95097138,37.6666667 15.7175764,37.6666667 19,37.6666667 C22.601528,37.6666667 29.1937205,37.6666667 31.326345,37.6666667 Z\",\n id: \"profile\",\n fill: \"#FFFFFF\",\n mask: \"url(#mask-2)\"\n}))))));\n\nvar SvgImgProfilePlaceholderS = function SvgImgProfilePlaceholderS(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: \"38px\",\n height: \"38px\",\n viewBox: \"0 0 38 38\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgImgProfilePlaceholderS, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/img-profile-placeholder-S.12642fe4.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { styled, Menu, MenuItem } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\nimport { IconButton } from '@ds/react-components';\r\nimport { ReactComponent as ProfileSvg } from 'assets/img-profile-placeholder-S.svg';\r\n\r\nconst ProfileMenuContainer = styled('div')(({ menuopen }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n cursor: 'pointer',\r\n paddingRight: menuopen ? '17px' : '0px', //Fix for disappearing scroll bar\r\n}));\r\n\r\nconst ProfileName = styled('p')({\r\n fontSize: '14px',\r\n margin: '0 0 0 10px',\r\n});\r\n\r\nconst ProfileMenu = styled(Menu)(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nconst ProfileMenuItem = styled(MenuItem)(({ theme, line }) => ({\r\n color: theme.palette.common.black,\r\n borderBottom: line ? `1px solid ${theme.palette.common.athensGray} ` : 'none',\r\n}));\r\n\r\nconst Profile = (props) => {\r\n const { profileName, profileMenuEntries } = props;\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n const handleProfileMenuOpen = useCallback(\r\n (event) => {\r\n setAnchorEl(event.currentTarget);\r\n },\r\n [setAnchorEl]\r\n );\r\n\r\n const handleProfileMenuClose = useCallback(() => {\r\n setAnchorEl(null);\r\n }, [setAnchorEl]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {profileName}\r\n \r\n \r\n {profileMenuEntries.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.name}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nProfile.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n profileName: PropTypes.string.isRequired,\r\n profileMenuEntries: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default Profile;\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport List from '@material-ui/core/List';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport DehazeIcon from '@material-ui/icons/Dehaze';\r\nimport { userHasSomePermissions } from 'utils/auth';\r\nimport { ReactComponent as LogoSvg } from 'assets/ds-logo.svg';\r\nimport LinkedMenuItem from './LinkedMenuItem';\r\nimport CollapsibleMenuItem from './CollapsibleMenuItem';\r\nimport Profile from './Profile';\r\n\r\nconst styles = (theme) => ({\r\n drawer: {\r\n width: theme.dimension.sideBarWidth,\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap',\r\n color: theme.palette.xpl.foreground,\r\n },\r\n drawerOpen: {\r\n width: theme.dimension.sideBarWidth,\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n backgroundColor: theme.palette.xpl.navigation,\r\n borderRight: 0,\r\n },\r\n drawerClose: {\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: 'hidden',\r\n width: 0,\r\n backgroundColor: theme.palette.xpl.navigation,\r\n borderRight: 0,\r\n },\r\n closeIcon: {\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none',\r\n },\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n justifyContent: 'flex-end',\r\n padding: '0 0 16px 16px',\r\n // ...theme.mixins.toolbar,\r\n minHeight: 78,\r\n flexDirection: 'column',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n },\r\n imageContainer: {\r\n paddingRight: '24px',\r\n cursor: 'pointer',\r\n },\r\n itemText: {\r\n color: theme.palette.xpl.foreground,\r\n },\r\n icon: {\r\n color: theme.palette.common.white,\r\n },\r\n list: {\r\n display: 'flex',\r\n minHeight: '100vh',\r\n flexDirection: 'column',\r\n },\r\n listContent: {\r\n flex: 1,\r\n },\r\n profile: {\r\n textAlign: 'center',\r\n padding: '18px 24px',\r\n backgroundColor: theme.palette.xpl.dm.background2,\r\n color: theme.palette.xpl.foreground,\r\n },\r\n paperAnchorDockedLeft: {\r\n borderRight: 0,\r\n },\r\n});\r\n\r\nconst filterByFeatureFlags = (menuItem, featureFlags) => {\r\n return !menuItem.featureFlag || featureFlags[menuItem.featureFlag];\r\n};\r\n\r\nconst filterByPermissions = (menuItem, userPermissions) => {\r\n return (\r\n !menuItem.roles ||\r\n userHasSomePermissions(userPermissions, ...menuItem.roles.split(','))\r\n );\r\n};\r\n\r\nconst SideMenu = (props) => {\r\n const {\r\n classes,\r\n userPermissions,\r\n isSideBarOpen,\r\n handleSideBarClose,\r\n sideMenuEntries,\r\n profileName,\r\n profileMenuEntries,\r\n featureFlags,\r\n } = props;\r\n\r\n const { pathname } = useLocation();\r\n const history = useHistory();\r\n\r\n const filterMenuItems = () => {\r\n const isMenuItemSelected = (menuPath) =>\r\n menuPath && pathname.toLowerCase().startsWith(menuPath.toLowerCase());\r\n\r\n return sideMenuEntries\r\n .filter(\r\n (menuItem) =>\r\n filterByFeatureFlags(menuItem, featureFlags) &&\r\n filterByPermissions(\r\n menuItem,\r\n userPermissions,\r\n ...menuItem.roles.split(',')\r\n )\r\n )\r\n .map((menuItem) => {\r\n return menuItem.subRoutes\r\n ? {\r\n ...menuItem,\r\n selected: menuItem.subRoutes.some((subRoute) =>\r\n isMenuItemSelected(subRoute.path)\r\n ),\r\n subRoutes: menuItem.subRoutes\r\n .filter(\r\n (subRouteItem) =>\r\n filterByFeatureFlags(subRouteItem, featureFlags) &&\r\n filterByPermissions(\r\n subRouteItem,\r\n userPermissions,\r\n ...subRouteItem.roles.split(',')\r\n ) &&\r\n !subRouteItem.hidden\r\n )\r\n .map((subRoute) => ({\r\n ...subRoute,\r\n selected: isMenuItemSelected(subRoute.path),\r\n })),\r\n }\r\n : {\r\n ...menuItem,\r\n selected: isMenuItemSelected(menuItem.path),\r\n };\r\n });\r\n };\r\n\r\n const filteredMenuItems = filterMenuItems();\r\n\r\n const [openCollapsibleItem, setOpenCollapsibleItem] = useState(() => {\r\n const initalSelectedMenuItem = filteredMenuItems.find(\r\n (item) => item.selected\r\n );\r\n return initalSelectedMenuItem ? initalSelectedMenuItem.name : '';\r\n });\r\n\r\n const handleCollapsibleMenuItemClick = useCallback(\r\n (name) =>\r\n setOpenCollapsibleItem((prevOpenItem) =>\r\n name === prevOpenItem ? null : name\r\n ),\r\n [setOpenCollapsibleItem]\r\n );\r\n\r\n const handleLogoClick = () => {\r\n history.push('/Customers');\r\n };\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {filteredMenuItems.map((menuItem) => {\r\n const {\r\n subRoutes,\r\n selected,\r\n icon,\r\n name,\r\n isExternal,\r\n path,\r\n } = menuItem;\r\n\r\n return menuItem.subRoutes && menuItem.subRoutes.length > 0 ? (\r\n \r\n ) : !menuItem.subRoutes ? (\r\n \r\n ) : (\r\n
\r\n );\r\n })}\r\n \r\n
\r\n\r\n {isSideBarOpen && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nSideMenu.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n isSideBarOpen: PropTypes.bool.isRequired,\r\n handleSideBarClose: PropTypes.func.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n sideMenuEntries: PropTypes.array.isRequired,\r\n userPermissions: PropTypes.array,\r\n profileName: PropTypes.string.isRequired,\r\n profileMenuEntries: PropTypes.array.isRequired,\r\n featureFlags: PropTypes.object,\r\n};\r\n\r\nSideMenu.defaultProps = {\r\n userPermissions: [],\r\n featureFlags: {},\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SideMenu);\r\n","import { styled } from '@material-ui/core';\r\n\r\nexport const Container = styled('div')({});\r\n\r\nexport const ContentBody = styled('p')(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n fontSize: '14px',\r\n}));\r\n\r\nexport const ContentSubHeading = styled('h3')(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n padding: '15px 0px 10px 0px',\r\n}));\r\n\r\nexport const HrBreak = styled('hr')({\r\n borderRadius: '6px',\r\n borderTop: '1px solid rgba(0, 0, 0, 0.08)',\r\n margin: '0px -15px 0px -15px',\r\n});\r\n\r\nexport const ContentUnorderedList = styled('ul')(({ theme }) => ({\r\n fontSize: '14px',\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const ContentOrderedList = styled('ol')(({ theme }) => ({\r\n fontSize: '14px',\r\n color: theme.palette.common.black,\r\n}));\r\n","import React from 'react';\r\nimport * as Styled from './TcContent.styled';\r\n\r\nconst TcContent = () => {\r\n return (\r\n
\r\n \r\n These terms and conditions govern your use of this website, by using\r\n this website you accept these terms and conditions in full. If you\r\n disagree with these terms and conditions or any part of these terms and\r\n conditions, you must not use this website.\r\n \r\n Use of content\r\n \r\n Debitsuccess owns the copyright and all other intellectual property\r\n rights associated with the content on this website. We cannot warrant\r\n that use of the site will not be interrupted or unavailable due to any\r\n factors outside our control. You may view, download or print off content\r\n from this site for your personal, non-commercial, use and information,\r\n subject to the following restrictions.\r\n \r\n \r\n You must not:\r\n
\r\n
\r\n \r\n
  • \r\n copy, reproduce, republish or duplicate the content of this website;\r\n
  • \r\n
  • \r\n create an archive or database containing the content, for any business\r\n purpose or other commercial exploitation, without specific consent;\r\n
  • \r\n
  • sell, rent or sub-licence material from this website; or
  • \r\n
  • \r\n copy, distribute or display the website or any part of it to third\r\n parties.\r\n
  • \r\n
    \r\n Acceptable use\r\n \r\n You must not use this website in any way that causes, or may cause,\r\n damage to the website or impairment of the availability or accessibility\r\n of the website; or in any way which is unlawful, illegal, fraudulent or\r\n harmful, or in connection with any unlawful, illegal, fraudulent or\r\n harmful purpose or activity.\r\n \r\n \r\n You must not use this website to copy, store, host, transmit, send, use,\r\n publish or distribute any material which consists of (or is linked to)\r\n any spyware, computer virus, Trojan horse, worm, keystroke logger,\r\n rootkit or other malicious computer software.\r\n \r\n \r\n You must not conduct any systematic or automated data collection\r\n activities on or in relation to this website without Debitsuccess’\r\n express written consent.\r\n \r\n Restricted access\r\n \r\n Debitsuccess reserves the right to restrict access to areas of this\r\n website, or indeed this entire website at Debitsuccess’ discretion.\r\n \r\n \r\n If Debitsuccess provides you with a user ID and password to enable you\r\n to access restricted areas of this website or services, you must ensure\r\n that the user ID and password are kept confidential.\r\n \r\n \r\n Debitsuccess may disable your user ID and password at Debitsuccess’ sole\r\n discretion without notice or explanation.\r\n \r\n \r\n Changes to customers’ details\r\n \r\n \r\n You confirm that should you make any changes to your customers’ details\r\n or particulars through accessing a restricted area of this website,\r\n that:\r\n \r\n \r\n
  • you have the required authority to make such change(s);
  • \r\n
  • \r\n you will, in the event of a dispute arising as a consequence of such\r\n change(s), provide Debitsuccess with evidence to substantiate your\r\n authority to make the change(s) within 48 hours of Debitsuccess\r\n requesting evidence;\r\n
  • \r\n
  • \r\n you are solely responsible to your customers for any losses, costs,\r\n actions, claims, demands, expenses or other liabilities arising as a\r\n result of the change(s); and\r\n
  • \r\n
  • \r\n you agree to indemnify Debitsuccess to the fullest extent possible\r\n under law from any losses, costs, actions, claims, demands, expenses\r\n or other liabilities arising as a result of the change(s).\r\n
  • \r\n
    \r\n User Content\r\n \r\n In these terms and conditions, “your user content” means material\r\n (including without limitation text, images, audio material, video\r\n material and audio-visual material) that you submit to this website.\r\n \r\n \r\n You grant to Debitsuccess a worldwide, irrevocable, non-exclusive,\r\n royalty-free license to use, reproduce, adapt, publish, translate and\r\n distribute your user content in any existing or future media. You also\r\n grant to Debitsuccess the right to sub-license these rights, and the\r\n right to bring an action for infringement of these rights.\r\n \r\n \r\n Your user content must not be illegal or unlawful, must not infringe any\r\n third party’s legal rights, and must not be capable of giving rise to\r\n legal action whether against you or Debitsuccess or a third party (in\r\n each case under any applicable law).\r\n \r\n \r\n You must not submit any user content to the website that is or has ever\r\n been the subject of any threatened or actual legal proceedings or other\r\n similar complaint.\r\n \r\n \r\n Debitsuccess reserves the right to edit or remove any material submitted\r\n to this website, or stored on Debitsuccess’ servers, or hosted or\r\n published upon this website.\r\n \r\n \r\n Notwithstanding Debitsuccess’ rights under these terms and conditions in\r\n relation to user content, Debitsuccess does not undertake to monitor the\r\n submission of such content to this website.\r\n \r\n No warranties\r\n \r\n This website is provided “as is” without any representations or\r\n warranties, express or implied. Debitsuccess makes no representations or\r\n warranties in relation to this website or the information and materials\r\n provided on this website.\r\n \r\n \r\n Without prejudice to the generality of the foregoing paragraph,\r\n Debitsuccess does not warrant that:\r\n \r\n \r\n
  • \r\n this website will be constantly available, or available at all; or\r\n
  • \r\n
  • \r\n the information on this website is complete, true, accurate or\r\n non-misleading.\r\n
  • \r\n
    \r\n \r\n Nothing on this website constitutes, or is meant to constitute, advice\r\n of any kind.\r\n \r\n \r\n Limitation of liability\r\n \r\n \r\n Debitsuccess will not be liable to you (whether under the law of\r\n contract, the law of torts or otherwise) in relation to the contents of,\r\n or use of, or otherwise in connection with, this website:\r\n \r\n \r\n
  • for any indirect, special or consequential loss; or
  • \r\n
  • \r\n for any business losses, loss of revenue, income, profits or\r\n anticipated savings, loss of contracts or business relationships, loss\r\n of reputation or goodwill, or loss or corruption of information or\r\n data.\r\n
  • \r\n
    \r\n \r\n These limitations of liability apply even if Debitsuccess has been\r\n expressly advised of the potential loss.\r\n \r\n\r\n Exceptions\r\n \r\n Nothing in this website disclaimer will exclude or limit any warranty\r\n implied by law that it would be unlawful to exclude or limit\r\n Debitsuccess’ liability in respect of any:\r\n \r\n \r\n
  • death or personal injury caused by Debitsuccess’ negligence;
  • \r\n
  • \r\n fraud or fraudulent misrepresentation on the part of Debitsuccess; or\r\n
  • \r\n
  • \r\n matter which it would be illegal or unlawful for Debitsuccess to\r\n exclude or limit or to attempt or purport to exclude or limit, its\r\n liability.\r\n
  • \r\n
    \r\n Reasonableness\r\n \r\n By using this website, you agree that the exclusions and limitations of\r\n liability set out in this website disclaimer are reasonable.\r\n \r\n \r\n If you do not think they are reasonable you must not use this website.\r\n \r\n Other Parties\r\n \r\n You accept that, as a limited liability entity, Debitsuccess has an\r\n interest in limiting the personal liability of its employees. You agree\r\n that you will not bring any claim personally against Debitsuccess’\r\n employees in respect of any losses you suffer in connection with this\r\n website.\r\n \r\n \r\n Without prejudice to the foregoing paragraph, you agree that the\r\n limitations of warranties and liability set out in this website\r\n disclaimer will protect Debitsuccess’ employees, agents, subsidiaries,\r\n successors, assigns and sub-contractors as well as Debitsuccess.\r\n \r\n \r\n Unenforceable provisions\r\n \r\n \r\n If any provision of this website disclaimer is, or is found to be,\r\n unenforceable under applicable law, that will not affect the\r\n enforceability of the other provisions of this website disclaimer.\r\n \r\n Indemnity\r\n \r\n Without limiting any other provision of these terms and conditions, you\r\n agree to indemnify Debitsuccess and undertake to keep Debitsuccess\r\n indemnified against any losses, damages, costs, liabilities and expenses\r\n (including without limitation legal expenses and any amount paid by\r\n Debitsuccess to a third party in settlement of a claim or dispute on the\r\n advice of Debitsuccess’ legal advisors) incurred or suffered by\r\n Debitsuccess arising out of any breach by you of any provision of these\r\n terms and conditions.\r\n \r\n \r\n Breaches of these terms and conditions\r\n \r\n \r\n Without prejudice to Debitsuccess’ other rights under these terms and\r\n conditions, if you breach these terms and conditions in any way,\r\n Debitsuccess may take such action as Debitsuccess deems appropriate to\r\n deal with the breach, including suspending your access to the website,\r\n prohibiting you from accessing the website, blocking computers using\r\n your IP address from accessing the website, contacting your internet\r\n service provider to request that they block your access to the website\r\n and/or bringing court proceedings against you.\r\n \r\n Variation\r\n \r\n Debitsuccess may revise these terms and conditions from time to time.\r\n Revised terms and conditions will apply to the use of this website from\r\n the date of the publication of the revised terms and conditions on this\r\n website. Please check this page regularly to ensure you are familiar\r\n with the current version.\r\n \r\n Severability\r\n \r\n If a provision of these terms and conditions is determined by any court\r\n or other competent authority to be unlawful and/or unenforceable, the\r\n other provisions will continue in effect. If any unlawful and/or\r\n unenforceable provision would be lawful or enforceable if part of it\r\n were deleted, that part will be deemed to be deleted, and the rest of\r\n the provision will continue in effect.\r\n \r\n Entire agreement\r\n \r\n These terms and conditions constitute the agreement between you and\r\n Debitsuccess in relation to your use of this website, and supersede all\r\n previous agreements in respect of your use of this website.\r\n \r\n
    \r\n );\r\n};\r\n\r\nTcContent.propTypes = {};\r\n\r\nexport default TcContent;\r\n","import {\r\n styled,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n} from '@material-ui/core';\r\nimport { FilledButton, BackgroundPaper } from '@ds/react-components';\r\n\r\nexport const PageContainer = styled('div')({});\r\n\r\nexport const TermsTitle = styled('h1')(({ theme }) => ({\r\n color: theme.palette.common.darkgray,\r\n fontSize: '26px',\r\n fontWeight: 'bold',\r\n}));\r\n\r\nexport const NonModalPaper = styled(BackgroundPaper)({\r\n width: '100%',\r\n marginTop: '24px',\r\n});\r\n\r\nexport const NonModalHeaderContainer = styled('div')({\r\n padding: '15px',\r\n borderBottom: '1px solid rgba(0, 0, 0, 0.08)',\r\n});\r\n\r\nexport const NonModalBodyContainer = styled('div')({\r\n padding: '15px',\r\n});\r\n\r\nexport const TermsModalTitle = styled('h2')(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n fontSize: '20px',\r\n fontWeight: 'bold',\r\n}));\r\n\r\nexport const NonModalCheckboxContainer = styled('div')({\r\n marginTop: '12px',\r\n display: 'flex',\r\n});\r\n\r\nexport const ModalHeaderContainer = styled(DialogTitle)({\r\n padding: '15px',\r\n borderBottom: '1px solid rgba(0, 0, 0, 0.08)',\r\n margin: 0,\r\n});\r\n\r\nexport const ModalBodyContainer = styled(DialogContent)({\r\n padding: '15px',\r\n});\r\n\r\nexport const ModalActionsContainer = styled(DialogActions)({\r\n padding: '15px',\r\n justifyContent: 'flex-start',\r\n borderTop: '1px solid rgba(0, 0, 0, 0.08)',\r\n});\r\n\r\nexport const ModalActionsWrapper = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n width: '100%',\r\n flexDirection: 'column',\r\n justifyContent: 'flex-start',\r\n [theme.breakpoints.up('sm')]: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n}));\r\n\r\nexport const ActionButtonsContainer = styled('div')(({ theme }) => ({\r\n marginTop: '15px',\r\n alignSelf: 'flex-end',\r\n [theme.breakpoints.up('sm')]: {\r\n marginTop: 0,\r\n alignSelf: 'auto',\r\n },\r\n}));\r\n\r\nexport const AcceptButton = styled(FilledButton)({\r\n marginLeft: '4px',\r\n});\r\n","import React, { useState, useCallback } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { Dialog } from '@material-ui/core';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport { FilledButton, Checkbox } from '@ds/react-components';\r\nimport {\r\n setUserTcPreference,\r\n getUserTcPreference,\r\n} from 'utils/userPreferences';\r\nimport TcContent from './TcContent';\r\n\r\nimport * as Styled from './TermsAndConditions.styled';\r\n\r\nconst TermsAndConditions = (props) => {\r\n const { hasAcceptedTC, updateTcAccepted, userId } = props;\r\n\r\n const history = useHistory();\r\n\r\n const [tcReadStatus, setTcReadStatus] = useState({\r\n tcReadComplete: false,\r\n tcCheckboxChecked: false,\r\n });\r\n\r\n const onClickDismiss = () => {\r\n history.push('/Logout');\r\n };\r\n\r\n const onClickAccept = () => {\r\n updateTcAccepted(true);\r\n setUserTcPreference(userId); //The server update is not immediate. So storing locally as well.\r\n };\r\n\r\n const onTcCheckboxChange = () => {\r\n setTcReadStatus((prevState) => ({\r\n ...prevState,\r\n tcCheckboxChecked: !prevState.tcCheckboxChecked,\r\n }));\r\n };\r\n\r\n const scrolledToEnd = useCallback(() => {\r\n setTcReadStatus((prevState) => ({\r\n ...prevState,\r\n tcReadComplete: true,\r\n }));\r\n }, [setTcReadStatus]);\r\n\r\n const onModalScroll = useCallback(\r\n (event) =>\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 10 && scrolledToEnd(),\r\n [scrolledToEnd]\r\n );\r\n\r\n //If the user has already accepted the terms and condition then do not show the accept option again.\r\n if (hasAcceptedTC || getUserTcPreference(userId)) {\r\n return (\r\n \r\n \r\n {'Terms and Conditions'}\r\n \r\n \r\n \r\n {'Debitsuccess Website Terms and Conditions'}\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 return (\r\n \r\n \r\n \r\n {'Debitsuccess Terms and Conditions'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Decline'}\r\n \r\n \r\n {'Accept'}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTermsAndConditions.propTypes = {\r\n hasAcceptedTC: PropTypes.bool,\r\n updateTcAccepted: PropTypes.func.isRequired,\r\n userId: PropTypes.string.isRequired,\r\n};\r\n\r\nTermsAndConditions.defaultProps = {\r\n hasAcceptedTC: false,\r\n};\r\n\r\nexport default TermsAndConditions;\r\n","import { connect } from 'react-redux';\r\nimport { updateTcAccepted } from 'ducks/auth';\r\nimport TermsAndConditions from './TermsAndConditions';\r\n\r\nconst mapStateToProps = (state) => ({\r\n hasAcceptedTC: state.auth.hasAcceptedTC,\r\n userId: state.auth.userId,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n updateTcAccepted,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TermsAndConditions);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n transform: \"translate(1)\"\n}, React.createElement(\"circle\", {\n cx: 77,\n cy: 41,\n r: 40,\n fill: \"#B4DAF6\"\n}), React.createElement(\"circle\", {\n cx: 211,\n cy: 85,\n r: 45,\n fill: \"#F1F4F7\"\n}), React.createElement(\"circle\", {\n cx: 319,\n cy: 35,\n r: 35,\n fill: \"#DAF1CB\"\n}), React.createElement(\"path\", {\n fill: \"#004A8C\",\n fillRule: \"nonzero\",\n stroke: \"#FFF\",\n strokeWidth: 2,\n d: \"M224.75 29h-62.5c-3.45 0-6.25 2.8-6.25 6.25v37.5c0 3.45 2.8 6.25 6.25 6.25h25l-3.125 12.5h-9.375a2.09 2.09 0 0 0-2.083 2.083 2.09 2.09 0 0 0 2.083 2.084h37.5a2.09 2.09 0 0 0 2.083-2.084 2.09 2.09 0 0 0-2.083-2.083h-9.375L199.75 79h25c3.45 0 6.25-2.8 6.25-6.25v-37.5c0-3.45-2.8-6.25-6.25-6.25zm-36.328 62.5l2.083-8.333h5.99l2.083 8.333h-10.156zm38.411-18.75a2.09 2.09 0 0 1-2.083 2.083h-62.5a2.09 2.09 0 0 1-2.083-2.083v-37.5a2.09 2.09 0 0 1 2.083-2.083h62.5a2.09 2.09 0 0 1 2.083 2.083v37.5zM64.167 35H5.833A5.835 5.835 0 0 0 0 40.833v42.778a5.835 5.835 0 0 0 5.833 5.833h58.334A5.835 5.835 0 0 0 70 83.611V40.833A5.835 5.835 0 0 0 64.167 35zM5.833 38.889h58.334a1.95 1.95 0 0 1 1.944 1.944v5.834H3.89v-5.834a1.95 1.95 0 0 1 1.944-1.944zm58.334 46.667H5.833A1.95 1.95 0 0 1 3.89 83.61V58.333H66.11v25.278a1.95 1.95 0 0 1-1.944 1.945zM23.333 75.347v.972c0 .803-.656 1.459-1.458 1.459h-8.75a1.463 1.463 0 0 1-1.458-1.459v-.972c0-.802.656-1.458 1.458-1.458h8.75c.802 0 1.458.656 1.458 1.458zm23.334 0v.972c0 .803-.657 1.459-1.459 1.459H28.681a1.463 1.463 0 0 1-1.459-1.459v-.972c0-.802.656-1.458 1.459-1.458h16.527c.802 0 1.459.656 1.459 1.458zM319.122 71.053a2.128 2.128 0 0 0 2.121-2.122 2.128 2.128 0 0 0-2.121-2.121A2.128 2.128 0 0 0 317 68.93a2.12 2.12 0 0 0 2.122 2.122zm81.685-25.434l-15.051.027-6.79-6.617a6.31 6.31 0 0 0-4.495-1.87h-13.393c-1.38 0-2.665.517-3.753 1.326-1.114-.862-2.48-1.366-3.885-1.366h-9.216a6.365 6.365 0 0 0-4.495 1.87l-6.63 6.63H318.06c-.584 0-1.061.478-1.061 1.061v2.122c0 .583.477 1.06 1.06 1.06h7.427V75.31h-7.426c-.584 0-1.061.477-1.061 1.06v2.122c0 .584.477 1.061 1.06 1.061h7.427a4.228 4.228 0 0 0 4.23-4.204h4.402l10.808 10.344c3.951 3.195 9.52 3.103 13.393-.027l.955.822a7 7 0 0 0 4.442 1.578 7.05 7.05 0 0 0 5.49-2.599l2.904-3.567c2.174 1.18 5.689 1.194 7.956-1.591l1.26-1.552a6.358 6.358 0 0 0 1.392-3.408h6.445a4.236 4.236 0 0 0 4.23 4.204h7.426c.583 0 1.06-.477 1.06-1.06V76.37c0-.584-.477-1.061-1.06-1.061h-7.426V49.89l7.426-.027c.583 0 1.06-.478 1.06-1.061V46.68a1.075 1.075 0 0 0-1.073-1.06zm-22.782 30.447l-1.26 1.551a2.118 2.118 0 0 1-2.983.305l-2.36-1.91-5.504 6.763c-.994 1.234-2.785 1.353-3.898.451l-4.058-3.46-1.38 1.697c-2.214 2.718-6.232 3.142-8.83 1.047L335.83 71.093h-6.1V49.849h5.119l7.863-7.863a2.13 2.13 0 0 1 1.499-.623h9.216c.119.291.04.093.146.384l-7.824 7.187a9.087 9.087 0 0 0-.557 12.85c1.896 2.069 7.77 5.211 12.85.557l3.023-2.772 16.655 13.513a2.137 2.137 0 0 1 .305 2.984zm11.112-4.973h-7.585c-.331-.464-.703-.915-1.167-1.3l-16.164-13.128 3.766-3.46a2.12 2.12 0 0 0 .132-2.998 2.131 2.131 0 0 0-2.997-.132l-9.958 9.123c-1.91 1.737-5.119 1.591-6.856-.292a4.86 4.86 0 0 1 .292-6.855l11.02-10.105a2.133 2.133 0 0 1 1.431-.557h13.394c.57 0 1.1.226 1.511.637l8.05 7.837h5.131v21.23zm10.609-4.27a2.128 2.128 0 0 0-2.122 2.122c0 1.167.955 2.121 2.122 2.121a2.128 2.128 0 0 0 2.121-2.121 2.12 2.12 0 0 0-2.121-2.122z\"\n}));\n\nvar SvgWelcome = function SvgWelcome(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 404,\n height: 130,\n viewBox: \"0 0 404 130\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgWelcome, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/welcome.7324d264.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport { withStyles, Paper, Typography } from '@material-ui/core';\r\nimport { ReactComponent as WelcomeImage } from 'assets/welcome.svg';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n height: '80vh',\r\n display: 'flex',\r\n textAlign: 'center',\r\n alignItems: 'center',\r\n },\r\n content: {\r\n flex: 1,\r\n marginBottom: '10vh',\r\n },\r\n subHeading: {\r\n color: '#6b6c6f',\r\n fontWeight: 'normal',\r\n },\r\n});\r\n\r\nconst Welcome = (props) => {\r\n const { classes } = props;\r\n return (\r\n \r\n
    \r\n \r\n \r\n Welcome to SelfService, a Debitsuccess online portal.\r\n \r\n \r\n We make billing simpler for you!\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(Welcome);\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport Welcome from './Welcome';\r\n\r\nconst HomePage = (props) => {\r\n const { permissions } = props;\r\n const history = useHistory();\r\n useEffect(() => {\r\n if (\r\n permissions.includes('IsAdmin') ||\r\n permissions.includes('CanAccessCustomerInfo')\r\n ) {\r\n history.push('/Customers');\r\n }\r\n }, [history, permissions]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nHomePage.propTypes = {\r\n permissions: PropTypes.array,\r\n};\r\n\r\nHomePage.defaultProps = {\r\n permissions: [],\r\n};\r\n\r\nexport default HomePage;\r\n","import { connect } from 'react-redux';\r\nimport HomePage from './HomePage';\r\n\r\nconst mapStateToProps = (state) => ({\r\n permissions: state.auth.permissions,\r\n hasAcceptedTC: state.auth.hasAcceptedTC,\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(HomePage);\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { compose } from 'redux';\r\nimport { BounceLoader } from 'react-spinners';\r\nimport PropTypes from 'prop-types';\r\nimport 'iframe-resizer';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { oldSelfServiceLink, oidcConfig } from 'config';\r\n\r\nconst styles = {\r\n frame: {\r\n width: '1px',\r\n minWidth: '100%',\r\n border: 'none',\r\n visibility: 'hidden',\r\n },\r\n spinner: {\r\n width: '100%',\r\n position: 'relative',\r\n top: '200px',\r\n justifyContent: 'center',\r\n display: 'flex',\r\n },\r\n};\r\n\r\nconst EmbedFrame = (props) => {\r\n const { frameSrc, classes, locationKey } = props;\r\n\r\n const [isFrameLoading, setIsFrameLoading] = useState(true);\r\n\r\n const frameRef = useRef(null);\r\n\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n bindIframeOnLoadEvent();\r\n });\r\n\r\n const bindIframeOnLoadEvent = () => {\r\n if (!frameRef) return;\r\n\r\n frameRef.current.onload = () => {\r\n try {\r\n window.iFrameResize(\r\n {\r\n log: false,\r\n onMessage: (messageData) => {\r\n //receving iframe url (supports cross domain), TODO: check iframe link here\r\n },\r\n },\r\n '#selfserviceFrame'\r\n ); //resize the iframe to prevent scrolling\r\n window.scroll(0, 0);\r\n // console.log('Frame Source: ' + frame.contentWindow.location.href);\r\n checkIframeStillLoggedIn(frameRef.current);\r\n } catch (err) {\r\n console.error('EmbedFrame Error: ' + err);\r\n }\r\n setIsFrameLoading(false);\r\n frameRef.current.style.visibility = 'visible';\r\n };\r\n };\r\n\r\n const checkIframeStillLoggedIn = (frame) => {\r\n //Just a hack to check if the iframe app is logged out, this only works in the same origin (i.e.not locally with IIS Express)\r\n const frameLocation = frame.contentWindow.location.href.toLowerCase();\r\n const identityServerUrl = oidcConfig.authority.toLowerCase();\r\n const oldSsLink = oldSelfServiceLink.toLowerCase();\r\n if (\r\n frameLocation.includes(identityServerUrl + '/account/login') ||\r\n frameLocation.includes(identityServerUrl + '/account/logout')\r\n ) {\r\n history.push('/Logout');\r\n } else if (\r\n frameLocation === oldSsLink + '/customer' ||\r\n frameLocation === oldSsLink + '/customer/'\r\n ) {\r\n history.push('/');\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
    \r\n );\r\n};\r\n\r\nEmbedFrame.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n frameSrc: PropTypes.string.isRequired,\r\n locationKey: PropTypes.string, //just to force refreshing the iframe\r\n};\r\n\r\nexport default compose(withStyles(styles))(EmbedFrame);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport EmbedFrame from 'components/core/EmbedFrame';\r\nimport { iframeSrcAppendQuery } from 'utils/iframe';\r\n\r\nconst IFramePage = (props) => {\r\n const { userId, frameSrc, appendQuery } = props;\r\n const { key, search } = useLocation();\r\n let src = frameSrc.replace('{#userId}', userId);\r\n if (appendQuery) {\r\n src = iframeSrcAppendQuery(src, search); //append query strings\r\n }\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nIFramePage.propTypes = {\r\n userId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n frameSrc: PropTypes.string.isRequired,\r\n noAppendQuery: PropTypes.bool,\r\n};\r\n\r\nIFramePage.defaultProps = {\r\n appendQuery: true,\r\n};\r\nexport default connect(\r\n (state) => ({\r\n userId: state.auth.userId,\r\n }),\r\n null\r\n)(IFramePage);\r\n","export const iframeSrcAppendQuery = (iframeSrc, siteQueryString) => {\r\n const iframeUrl = iframeSrc.split('?')[0];\r\n const iframeQueryString = iframeSrc.split('?')[1];\r\n\r\n const iframeQuery = new URLSearchParams(iframeQueryString);\r\n const siteQuery = new URLSearchParams(siteQueryString);\r\n\r\n siteQuery.forEach((value, key) => {\r\n iframeQuery.append(key, value);\r\n });\r\n\r\n return iframeUrl + '?' + iframeQuery.toString();\r\n};\r\n","import React from 'react';\r\nimport {\r\n Redirect,\r\n useLocation,\r\n useRouteMatch,\r\n useParams,\r\n} from 'react-router-dom';\r\n\r\nconst CustomerDetailsRedirect = () => {\r\n const location = useLocation();\r\n\r\n // The old link for overview page redirect. Remove after some days.\r\n const oldOverviewLinkMatch = useRouteMatch('/Customers/:adfitNo');\r\n\r\n const { adfitNo } = useParams();\r\n\r\n if (location.search && location.search.startsWith('?debitsuccessId=')) {\r\n let pathAdfitNo = location.search.replace('?debitsuccessId=', '');\r\n return ;\r\n }\r\n\r\n if (oldOverviewLinkMatch && oldOverviewLinkMatch.isExact) {\r\n return ;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default CustomerDetailsRedirect;\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchSuspensionRules = async () => {\r\n let url = `v1/FacilityAccountSuspensionRule`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchSuspensionRule = async (facilityAccountId) => {\r\n let url = `v1/FacilityAccountSuspensionRule/${facilityAccountId}`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const updateSuspensionRule = async ({\r\n facilityAccountId,\r\n fee,\r\n duration,\r\n}) => {\r\n let url = `v1/FacilityAccountSuspensionRule`;\r\n const kyClient = await getKyClient();\r\n return kyClient.post(url, {\r\n json: { facilityAccountId, fee, duration },\r\n });\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchSuspensionRules } from 'services/suspensionRules';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_SUSPENSION_RULES =\r\n 'suspensionRules/RECEIVED_SUSPENSION_RULES';\r\n\r\nconst initialState = {\r\n rules: [],\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_SUSPENSION_RULES]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n rules: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getSuspensionRules = () => async (dispatch) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const rules = await fetchSuspensionRules();\r\n dispatch(updateAppLoading(false));\r\n dispatch({ type: RECEIVED_SUSPENSION_RULES, payload: rules });\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport MaterialTableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst styles = (theme) => ({\r\n cell: {\r\n padding: '25px 15px',\r\n whiteSpace: 'nowrap',\r\n borderWidth: '2px',\r\n color: theme.palette.xpl.text.secondary,\r\n fontSize: '12px',\r\n fontWeight: 'normal',\r\n borderBottomColor: theme.palette.xpl.stoke,\r\n },\r\n cellMobile: {\r\n [theme.breakpoints.down('xs')]: {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n\r\nconst TableHead = (props) => {\r\n const {\r\n onRequestSort,\r\n order,\r\n orderBy,\r\n rows,\r\n classes,\r\n enableSorting,\r\n numSelected,\r\n rowCount,\r\n checkboxSelection,\r\n onSelectAllClick,\r\n } = props;\r\n const createSortHandler = (property) => (event) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n return (\r\n \r\n \r\n {checkboxSelection && (\r\n \r\n 0 && numSelected < rowCount}\r\n checked={rowCount > 0 && numSelected === rowCount}\r\n onChange={onSelectAllClick}\r\n inputProps={{ 'aria-label': 'select all items' }}\r\n />\r\n \r\n )}\r\n {rows.map((row) => (\r\n \r\n {enableSorting ? (\r\n \r\n \r\n {row.label}\r\n \r\n \r\n ) : (\r\n
    {row.label}
    \r\n )}\r\n \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTableHead.propTypes = {\r\n numSelected: PropTypes.number.isRequired,\r\n onRequestSort: PropTypes.func.isRequired,\r\n onSelectAllClick: PropTypes.func.isRequired,\r\n order: PropTypes.string,\r\n orderBy: PropTypes.string,\r\n rowCount: PropTypes.number.isRequired,\r\n enableSorting: PropTypes.bool,\r\n checkboxSelection: PropTypes.bool,\r\n};\r\n\r\nexport default withStyles(styles)(TableHead);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Pagination from 'react-paginate';\r\nimport RightIcon from '@material-ui/icons/ChevronRight';\r\nimport LeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ButtonBase from '@material-ui/core/ButtonBase';\r\nimport classNames from 'classnames';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n pageInfo: {\r\n marginRight: theme.spacing(1),\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n pagination: {\r\n marginLeft: 'auto',\r\n display: 'flex',\r\n '& a': {\r\n border: `1px solid ${theme.palette.xpl.stoke}`,\r\n marginLeft: -1,\r\n padding: '7px 12px',\r\n textAlign: 'center',\r\n display: 'block',\r\n height: '32px',\r\n width: 'auto',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n color: theme.palette.xpl.text.primary,\r\n backgroundColor: theme.palette.xpl.foreground,\r\n },\r\n '& li:first-child a': {\r\n padding: 0,\r\n borderRadius: `100px 0px 0px 100px`,\r\n },\r\n '& li:first-child .MuiTouchRipple-root': {\r\n marginTop: '1.5px',\r\n borderRadius: `100px 0px 0px 100px`,\r\n },\r\n '& li:first-child button': {\r\n padding: '3px 4px 2px 4px',\r\n },\r\n '& li:last-child a': {\r\n padding: 0,\r\n borderRadius: `0px 100px 100px 0px`,\r\n },\r\n '& li:last-child .MuiTouchRipple-root': {\r\n marginTop: '1.5px',\r\n borderRadius: `0px 100px 100px 0px`,\r\n },\r\n '& li:last-child button': {\r\n padding: '3px 4px 2px 4px',\r\n },\r\n '& li.break': {\r\n fontWeight: 'bold',\r\n },\r\n '& li.active a': {\r\n backgroundColor: theme.palette.xpl.secondary.background,\r\n borderColor: theme.palette.xpl.stoke,\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n },\r\n paginationList: {},\r\n});\r\nconst TablePagination = (props) => {\r\n const {\r\n classes,\r\n className,\r\n dataCount,\r\n onPageChange,\r\n rowsPerPage,\r\n currentPage,\r\n pageCount,\r\n } = props;\r\n\r\n // const pageCount = Math.ceil(dataCount / rowsPerPage);\r\n return (\r\n
    \r\n
    \r\n Viewing{' '}\r\n \r\n {currentPage * rowsPerPage + 1}-\r\n {Math.min(currentPage * rowsPerPage + rowsPerPage, dataCount)}\r\n {' '}\r\n of {dataCount}\r\n
    \r\n \r\n \r\n \r\n }\r\n nextLabel={\r\n \r\n \r\n \r\n }\r\n // breakLabel={null}\r\n pageCount={pageCount}\r\n marginPagesDisplayed={1}\r\n pageRangeDisplayed={4}\r\n onPageChange={onPageChange}\r\n subContainerClassName={'pages pagination'}\r\n activeClassName={'active'}\r\n forcePage={currentPage}\r\n />\r\n
    \r\n );\r\n};\r\n\r\nTablePagination.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n dataCount: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired,\r\n currentPage: PropTypes.number,\r\n className: PropTypes.string,\r\n};\r\n\r\nexport default withStyles(styles)(TablePagination);\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n icon: {\r\n padding: 0,\r\n marginLeft: 5,\r\n },\r\n row: {\r\n backgroundColor: `${theme.palette.xpl.background}`,\r\n },\r\n expandedCell: {\r\n padding: '10px 15px',\r\n color: theme.palette.xpl.text.secondary,\r\n borderBottomColor: theme.palette.xpl.stoke,\r\n },\r\n cell: {\r\n padding: '18px 15px',\r\n color: theme.palette.xpl.text.secondary,\r\n lineHeight: '20px',\r\n borderBottomColor: theme.palette.xpl.stoke,\r\n },\r\n cellMobile: {\r\n [theme.breakpoints.down('xs')]: {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n\r\nconst TableExpandableRow = ({\r\n classes,\r\n metadata,\r\n row,\r\n expandableColumn,\r\n ...rest\r\n}) => {\r\n const [isExpanded, setIsExpanded] = React.useState(false);\r\n\r\n return (\r\n <>\r\n setIsExpanded(!isExpanded)}>\r\n {metadata.map((column, j) => {\r\n if (column.id === expandableColumn) {\r\n return (\r\n \r\n {row[column.renderingField]}\r\n setIsExpanded(!isExpanded)}>\r\n {isExpanded ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n {row[column.renderingField]}\r\n \r\n );\r\n })}\r\n \r\n {isExpanded && (\r\n <>\r\n {row.__childrens.map((row, i) => {\r\n return (\r\n \r\n {metadata.map((column, j) => {\r\n return (\r\n \r\n {row[column.renderingField]}\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\nTableExpandableRow.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n metadata: PropTypes.array.isRequired,\r\n row: PropTypes.object,\r\n expandableColumn: PropTypes.string,\r\n};\r\n\r\nexport default withStyles(styles)(TableExpandableRow);\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport MaterialTable from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport TableHead from './TableHead.js';\r\nimport Pagination from './TablePagination.js';\r\nimport TableExpandableRow from './TableExpandableRow.js';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n padding: '0 15px',\r\n background: theme.palette.xpl.foreground,\r\n boxShadow: 'none',\r\n },\r\n noBackground: {\r\n background: 'transparent',\r\n boxShadow: 'none',\r\n padding: 0,\r\n margin: 0,\r\n },\r\n border: {\r\n border: `1px solid ${theme.palette.xpl.stoke}`,\r\n },\r\n table: {\r\n '& tr:last-child td': {\r\n borderBottom: 'none',\r\n },\r\n '& .MuiCheckbox-colorSecondary.Mui-checked': {\r\n color: theme.palette.xpl.secondary.default,\r\n },\r\n '& .MuiTableRow-root.Mui-selected': {\r\n background: theme.palette.xpl.foreground,\r\n },\r\n '& .MuiTableRow-root.Mui-selected:hover': {\r\n background: theme.palette.xpl.secondary.background,\r\n },\r\n '& .MuiCheckbox-root': {\r\n padding: '0px',\r\n },\r\n },\r\n tableWrapper: {\r\n // overflowX: 'auto',\r\n },\r\n cell: {\r\n padding: '18px 15px',\r\n color: theme.palette.xpl.text.secondary,\r\n lineHeight: '20px',\r\n borderBottomColor: theme.palette.xpl.stoke,\r\n },\r\n cellMobile: {\r\n [theme.breakpoints.down('xs')]: {\r\n display: 'none',\r\n },\r\n },\r\n row: {},\r\n noResults: {\r\n textAlign: 'center',\r\n fontSize: '22px',\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n footer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n height: 60,\r\n },\r\n pagination: {\r\n marginLeft: 'auto',\r\n },\r\n});\r\n\r\nfunction descendingComparator(a, b, orderBy) {\r\n if (b[orderBy] < a[orderBy]) {\r\n return -1;\r\n }\r\n if (b[orderBy] > a[orderBy]) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction stableSort(array, comparator) {\r\n const stabilizedThis = array.map((el, index) => [el, index]);\r\n stabilizedThis.sort((a, b) => {\r\n const order = comparator(a[0], b[0]);\r\n if (order !== 0) return order;\r\n return a[1] - b[1];\r\n });\r\n return stabilizedThis.map((el) => el[0]);\r\n}\r\n\r\nfunction getComparator(order, orderBy) {\r\n return order === 'desc'\r\n ? (a, b) => descendingComparator(a, b, orderBy)\r\n : (a, b) => -descendingComparator(a, b, orderBy);\r\n}\r\n\r\nfunction Table(props) {\r\n const {\r\n classes,\r\n data,\r\n metadata,\r\n showNoResults,\r\n footerText,\r\n enableSorting,\r\n showFooter,\r\n noBackground,\r\n showEmptyRows,\r\n currentPage,\r\n onPageChange,\r\n showBorder,\r\n enableExpandableRow,\r\n expandableColumn,\r\n checkboxSelection,\r\n selectedItems,\r\n setSelectedItems,\r\n onRowClick,\r\n } = props;\r\n\r\n const [orderBy, setOrderBy] = React.useState('id');\r\n const [order, setOrder] = React.useState('asc');\r\n const [rowsPerPage, setRowsPerPage] = React.useState(props.rowsPerPage || 10);\r\n React.useEffect(() => {\r\n setRowsPerPage(props.rowsPerPage || 10);\r\n }, [props.rowsPerPage]);\r\n\r\n const page = currentPage || 0;\r\n const emptyRows = showEmptyRows\r\n ? rowsPerPage - Math.min(rowsPerPage, data.length - page * rowsPerPage)\r\n : 0;\r\n\r\n const defaultColWidth = (1 / metadata.length) * 100 + '%';\r\n const pageCount = Math.ceil(data.length / rowsPerPage);\r\n const showHeader = !!metadata.find((row) => !!row.label);\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n onPageChange({ selected: 0 });\r\n };\r\n\r\n const handleSelectAllClick = (event) => {\r\n if (event.target.checked) {\r\n const newSelecteds = data.map((n) => n.id);\r\n setSelectedItems(newSelecteds);\r\n return;\r\n }\r\n setSelectedItems([]);\r\n };\r\n\r\n const handleClick = (event, id) => {\r\n if (checkboxSelection) {\r\n const selectedIndex = selectedItems.indexOf(id);\r\n let newSelected = [];\r\n\r\n if (selectedIndex === -1) {\r\n newSelected = newSelected.concat(selectedItems, id);\r\n } else if (selectedIndex === 0) {\r\n newSelected = newSelected.concat(selectedItems.slice(1));\r\n } else if (selectedIndex === selectedItems.length - 1) {\r\n newSelected = newSelected.concat(selectedItems.slice(0, -1));\r\n } else if (selectedIndex > 0) {\r\n newSelected = newSelected.concat(\r\n selectedItems.slice(0, selectedIndex),\r\n selectedItems.slice(selectedIndex + 1)\r\n );\r\n }\r\n\r\n setSelectedItems(newSelected);\r\n } else {\r\n if (onRowClick) {\r\n onRowClick(event, id);\r\n }\r\n }\r\n };\r\n\r\n const isSelected = (id) => selectedItems.indexOf(id) !== -1;\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n \r\n {checkboxSelection && (\r\n \r\n )}\r\n {metadata.map((r) => {\r\n return ;\r\n })}\r\n \r\n {showHeader && (\r\n \r\n )}\r\n {showNoResults ? (\r\n \r\n \r\n \r\n No Results Found\r\n \r\n \r\n \r\n ) : (\r\n \r\n {stableSort(data, getComparator(order, orderBy))\r\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((row, i) => {\r\n const isItemSelected = checkboxSelection\r\n ? isSelected(row.id)\r\n : false;\r\n const labelId = `table-checkbox-${i}`;\r\n if (enableExpandableRow && row.__childrens?.length > 0) {\r\n return (\r\n handleClick(event, row.id)}\r\n role=\"checkbox\"\r\n aria-checked={isItemSelected}\r\n tabIndex={-1}\r\n key={i}\r\n selected={isItemSelected}\r\n className={classes.row}\r\n />\r\n );\r\n }\r\n return (\r\n handleClick(event, row.id)}\r\n role=\"checkbox\"\r\n aria-checked={isItemSelected}\r\n tabIndex={-1}\r\n key={i}\r\n selected={isItemSelected}\r\n className={classes.row}>\r\n {checkboxSelection && (\r\n \r\n \r\n \r\n )}\r\n {metadata.map((column, j) => (\r\n \r\n {row[column.renderingField]}\r\n \r\n ))}\r\n \r\n );\r\n })}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n
    \r\n \r\n\r\n {showFooter && (\r\n
    \r\n
    {footerText}
    \r\n {pageCount > 1 && (\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n );\r\n}\r\n\r\nTable.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n data: PropTypes.array.isRequired,\r\n metadata: PropTypes.array.isRequired,\r\n onRowClick: PropTypes.func,\r\n showNoResults: PropTypes.bool,\r\n rowsPerPage: PropTypes.number,\r\n footerText: PropTypes.object,\r\n currentPage: PropTypes.number,\r\n onPageChange: PropTypes.func,\r\n enableSorting: PropTypes.bool,\r\n showFooter: PropTypes.bool,\r\n noBackground: PropTypes.bool,\r\n showEmptyRows: PropTypes.bool,\r\n showBorder: PropTypes.bool,\r\n enableExpandableRow: PropTypes.bool,\r\n expandableColumn: PropTypes.string,\r\n checkboxSelection: PropTypes.bool,\r\n selectedItems: PropTypes.array,\r\n setSelectedItems: PropTypes.func,\r\n};\r\n\r\nexport default withStyles(styles)(Table);\r\n","const tableMetadata = [\r\n {\r\n id: 'businessAccount',\r\n renderingField: 'businessAccount',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Business account',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'fee',\r\n renderingField: 'formattedFee',\r\n width: '25%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Suspension fee (Weekly)',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'duration',\r\n renderingField: 'formattedDuration',\r\n width: '25%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Allowed suspension period (Weeks)',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'admin',\r\n renderingField: 'admin',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: '',\r\n alignment: 'right',\r\n },\r\n];\r\n\r\nexport default tableMetadata;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useForm } from 'react-hook-form';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Grid } from '@material-ui/core';\r\nimport { SearchInput } from '@ds/react-components';\r\n\r\nconst styles = (theme) => ({\r\n startAdornmentContainer: {\r\n backgroundColor: theme.palette.xpl.foreground,\r\n color: theme.palette.xpl.text.action,\r\n },\r\n filterIcon: {\r\n width: '15px',\r\n height: '15px',\r\n marginRight: '6px',\r\n },\r\n dobGrid: {\r\n maxWidth: 250,\r\n },\r\n});\r\n\r\nconst SuspensionRuleFilter = (props) => {\r\n const { onSubmit } = props;\r\n\r\n const { handleSubmit, register } = useForm({\r\n defaultValues: {\r\n search: '',\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nSuspensionRuleFilter.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SuspensionRuleFilter);\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { Typography, Grid, withStyles } from '@material-ui/core';\r\nimport { TextButton } from '@ds/react-components';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport Table from 'components/ui/Table';\r\nimport tableMetadata from './tableMetaData';\r\nimport SuspensionRuleFilter from './SuspensionRuleFilter';\r\n\r\nconst styles = (theme) => ({\r\n row: {\r\n cursor: 'pointer',\r\n },\r\n pageHeader: {\r\n marginBottom: '20px',\r\n },\r\n});\r\n\r\nconst processRuleData = (rules) => {\r\n return rules.map((r) => {\r\n const rule = { ...r };\r\n rule.id = rule.facilityAccountId;\r\n rule.businessAccount = rule.businessName + ' - ' + rule.businessId;\r\n rule.formattedFee = rule.fee ?? '-';\r\n rule.formattedDuration = rule.duration ?? '-';\r\n rule.admin = (\r\n \r\n \r\n Edit\r\n \r\n \r\n );\r\n return rule;\r\n });\r\n};\r\n\r\nconst SuspensionRuleList = (props) => {\r\n const { getSuspensionRules, appLoading, classes, rules } = props;\r\n\r\n const history = useHistory();\r\n\r\n const [formState, setFormState] = useState({\r\n currentPage: 0,\r\n filteredRules: null,\r\n });\r\n\r\n useEffect(() => {\r\n const getRules = async () => {\r\n getSuspensionRules();\r\n };\r\n\r\n getRules();\r\n }, [getSuspensionRules]);\r\n\r\n const rulesData =\r\n formState.filteredRules === null ? rules : formState.filteredRules;\r\n\r\n const suspensionRules = useMemo(() => processRuleData(rulesData), [\r\n rulesData,\r\n ]);\r\n\r\n const showNoResults =\r\n !appLoading &&\r\n formState.filteredRules !== null &&\r\n formState.filteredRules.length === 0;\r\n\r\n const formatText = (text) => {\r\n // Replace hyphen symbols and double spaces if any\r\n return (text || '').replace(/-/g, ' ').replace(/ +/g, ' ');\r\n };\r\n\r\n const handleFilter = (data) => {\r\n const { search } = data;\r\n let searchResult = rules;\r\n\r\n if (search) {\r\n searchResult = rules.filter((item) => {\r\n const businessAccount = formatText(\r\n item.businessName + ' ' + item.businessId\r\n ).toLowerCase();\r\n const formattedSearch = formatText(search).toLowerCase();\r\n return businessAccount.includes(formattedSearch);\r\n });\r\n }\r\n\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: 0,\r\n filteredRules: searchResult,\r\n }));\r\n };\r\n\r\n const handleRowClick = (event, id) => {\r\n event.preventDefault();\r\n history.push(`/SuspensionRules/${id}/Edit`);\r\n };\r\n\r\n const handlePageClick = (data) => {\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: data.selected,\r\n }));\r\n };\r\n\r\n return (\r\n \r\n \r\n Suspension Rules\r\n \r\n {!appLoading && (\r\n <>\r\n \r\n \r\n \r\n \r\n {suspensionRules.length} Results Found\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nSuspensionRuleList.propTypes = {\r\n rules: PropTypes.arrayOf(PropTypes.object),\r\n getSuspensionRules: PropTypes.func.isRequired,\r\n appLoading: PropTypes.bool.isRequired,\r\n};\r\n\r\nSuspensionRuleList.defaultProps = {\r\n rules: [],\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionRuleList);\r\n","import { getSuspensionRules } from 'ducks/suspensionRules';\r\nimport { connect } from 'react-redux';\r\nimport SuspensionRuleList from './SuspensionRuleList';\r\n\r\nconst mapStateToProps = (state) => ({\r\n rules: state.suspensionRules.rules,\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getSuspensionRules,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SuspensionRuleList);\r\n","// Useful in forms where if not a number is entered then store null.\r\nexport const convertToInteger = (value) => {\r\n const parsed = parseInt(value, 10);\r\n return isNaN(parsed) ? null : parsed;\r\n};\r\n\r\nexport const convertToFloat = (value) => {\r\n const parsed = parseFloat(value);\r\n return isNaN(parsed) ? null : parsed;\r\n};\r\n\r\n// toFixed converts the result to string and also does not work in some cases.\r\n// If we want to round and keep it as float use this method.\r\nexport const roundToTwoDecimals = (number) =>\r\n Number(Math.round(number + 'e2') + 'e-2');\r\n","import ContentLoader from 'react-content-loader';\r\nimport React from 'react';\r\nimport {\r\n Alert,\r\n Input,\r\n FormLabel,\r\n BackgroundPaper,\r\n FilledButton,\r\n SubtleButton,\r\n TextButton,\r\n} from '@ds/react-components';\r\nimport { styled, Typography } from '@material-ui/core';\r\n\r\nexport const BusinessAccountName = styled((props) => (\r\n \r\n))(({ theme }) => ({\r\n marginTop: '18px',\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const Paper = styled(BackgroundPaper)({\r\n maxWidth: '910px',\r\n minHeight: '50px',\r\n marginTop: '18px',\r\n height: 'fit-content',\r\n});\r\n\r\nexport const PaperHeader = styled('div')(({ theme }) => ({\r\n padding: '18px 32px',\r\n borderBottom: `1px solid ${theme.palette.common.athensGray}`,\r\n color: theme.palette.common.black,\r\n fontWeight: 'normal',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n}));\r\n\r\nexport const PaperBody = styled('div')({\r\n padding: '18px 32px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nexport const PaperHeaderText = styled((props) => (\r\n \r\n))({\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const LoaderHeader = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const FormContainer = styled('div')({});\r\n\r\nexport const InfoAlert = styled(Alert)({\r\n marginTop: '18px',\r\n maxWidth: '910px',\r\n});\r\n\r\nexport const FormInput = styled(Input)({\r\n maxWidth: '380px',\r\n});\r\n\r\nexport const PaperBodyOverload = styled(({ loading, ...other }) => (\r\n \r\n))(({ loading }) => ({\r\n padding: '16px 32px 16px 32px',\r\n opacity: loading ? 0.5 : 1,\r\n pointerEvents: loading ? 'none' : 'initial',\r\n}));\r\n\r\nexport const ActionButtonContainer = styled('div')({\r\n display: 'flex',\r\n marginTop: '18px',\r\n});\r\n\r\nexport const CancelButton = styled(SubtleButton)({\r\n marginLeft: '16px',\r\n});\r\n\r\nexport const ConfirmSubmissionButton = styled(FilledButton)({\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const InputWrapper = styled('div')({\r\n margin: '16px 0',\r\n});\r\n\r\nexport const LabelContainer = styled('div')({\r\n marginBottom: '8px',\r\n});\r\n\r\nexport const InputLabel = styled(FormLabel)({\r\n marginBottom: 0,\r\n});\r\n\r\nexport const ErrorMessage = styled('label')({\r\n color: 'rgb(176, 0, 32)',\r\n});\r\n\r\nexport const ClearAllButton = styled(TextButton)({\r\n flex: '1',\r\n display: 'block',\r\n textAlign: 'right',\r\n});\r\n\r\nexport const SuspensionRuleLoaderContainer = styled('div')(({ theme }) => ({\r\n maxWidth: '280px',\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: '400px',\r\n },\r\n}));\r\n\r\nexport const SuspensionRuleLoader = (props) => (\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, { useEffect, useState } from 'react';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { FilledButton, Alert } from '@ds/react-components';\r\nimport { isNegativeNumber } from 'utils/misc';\r\nimport {\r\n convertToInteger,\r\n convertToFloat,\r\n roundToTwoDecimals,\r\n} from 'utils/numbers';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport * as Styled from './SuspensionRuleDetail.styled';\r\nimport {\r\n fetchSuspensionRule,\r\n updateSuspensionRule,\r\n} from '../../../../services/suspensionRules';\r\n\r\nconst SuspensionRuleDetail = () => {\r\n const history = useHistory();\r\n const { facilityAccountId } = useParams();\r\n const { handleSubmit, control, errors, reset } = useForm({\r\n defaultValues: {\r\n fee: null,\r\n duration: null,\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n const [suspensionRule, setSuspensionRule] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\r\n const [submissionError, setSubmissionError] = useState('');\r\n\r\n useEffect(() => {\r\n const getSuspensionRule = async (facilityAccountId) => {\r\n try {\r\n setIsLoading(true);\r\n const result = await fetchSuspensionRule(facilityAccountId);\r\n reset({ fee: result.fee, duration: result.duration });\r\n setSuspensionRule(result);\r\n setIsLoading(false);\r\n } catch (error) {\r\n setIsLoading(false);\r\n console.warn(error);\r\n }\r\n };\r\n\r\n getSuspensionRule(facilityAccountId);\r\n }, [facilityAccountId, reset]);\r\n\r\n const validateNegativeNumber = (number) => {\r\n return !isNegativeNumber(number);\r\n };\r\n\r\n const onClearAll = () => {\r\n reset({ fee: '', duration: '' });\r\n };\r\n\r\n const onSubmit = async (data) => {\r\n const { fee, duration } = data;\r\n const submittingData = {\r\n fee: fee,\r\n duration: duration,\r\n facilityAccountId,\r\n };\r\n\r\n try {\r\n setIsSubmittingForm(true);\r\n await updateSuspensionRule(submittingData);\r\n setSubmissionError('');\r\n history.push('/SuspensionRules');\r\n } catch (error) {\r\n setIsSubmittingForm(false);\r\n setSubmissionError(\r\n error.message || 'Something went wrong. Please try again.'\r\n );\r\n console.error(error);\r\n }\r\n };\r\n\r\n const onBack = () => {\r\n history.push(`/SuspensionRules`);\r\n };\r\n\r\n if (isLoading) {\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 if (!suspensionRule) {\r\n return (\r\n \r\n \r\n \r\n {\r\n 'The supension rule does not exist or you do not have permission to access it.'\r\n }\r\n \r\n \r\n \r\n \r\n {'Back'}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n suspensionRule && (\r\n \r\n {!!submissionError && (\r\n \r\n \r\n {submissionError}\r\n \r\n \r\n )}\r\n \r\n {`${suspensionRule.businessName} - ${suspensionRule.businessId}`}\r\n \r\n \r\n \r\n \r\n \r\n {'Edit Suspension Rule'}\r\n \r\n \r\n Clear all\r\n \r\n \r\n \r\n \r\n (\r\n <>\r\n \r\n \r\n {'Suspension fee (Weekly) '}\r\n \r\n \r\n {\r\n onBlur(event);\r\n onChange(roundToTwoDecimals(event.target.value));\r\n }}\r\n onChange={(event) => {\r\n onChange(convertToFloat(event.target.value));\r\n }}\r\n startAdornment={'$'}\r\n showStartAdornmentDivider={true}\r\n showInlineIcons={false}\r\n error={\r\n errors.fee &&\r\n (errors.fee.message || errors.fee.type === 'validate')\r\n }\r\n />\r\n {errors.fee && errors.fee.type === 'validate' && (\r\n \r\n {'Fee cannot be less than 0.'}\r\n \r\n )}\r\n \r\n )}\r\n />\r\n \r\n \r\n (\r\n <>\r\n \r\n \r\n {'Allowed supension period (Weeks) '}\r\n \r\n \r\n {\r\n onBlur(event);\r\n }}\r\n onChange={(event) => {\r\n onChange(convertToInteger(event.target.value));\r\n }}\r\n showInlineIcons={false}\r\n error={\r\n errors.duration &&\r\n (errors.duration.message ||\r\n errors.duration.type === 'validate')\r\n }\r\n />\r\n {errors.duration &&\r\n errors.duration.type === 'validate' && (\r\n \r\n {'Duration cannot be less than 0.'}\r\n \r\n )}\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {'Save'}\r\n \r\n \r\n {'Cancel'}\r\n \r\n \r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SuspensionRuleDetail;\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchSsoGroups = async () => {\r\n let url = `v1/SsoGroup`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\nexport const fetchSsoGroup = async (ssoGroupId) => {\r\n let url = `v1/SsoGroup/${ssoGroupId}`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\nexport const fetchSsoRoles = async () => {\r\n let url = `v1/SsoGroup/Roles`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const deleteSsoGroup = async (ssoGroupId) => {\r\n let url = `v1/SsoGroup/${ssoGroupId}`;\r\n\r\n const kyClient = await getKyClient();\r\n return kyClient.delete(url).json();\r\n};\r\n\r\nexport const updateSsoGroup = async ({\r\n ssoGroupId,\r\n name,\r\n groupExternalId,\r\n description,\r\n permissions,\r\n}) => {\r\n let url = `v1/SsoGroup/` + ssoGroupId;\r\n const kyClient = await getKyClient();\r\n return kyClient.put(url, {\r\n json: { name, groupExternalId, description, permissions },\r\n });\r\n};\r\nexport const addSsoGroup = async (ssoGroupDetail) => {\r\n const url = `v1/SsoGroup`;\r\n const kyClient = await getKyClient();\r\n return kyClient\r\n .post(url, {\r\n json: ssoGroupDetail,\r\n })\r\n .json();\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchSsoGroups, fetchSsoRoles } from 'services/ssoGroups';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_SSO_GROUPS = 'ssoGroups/RECEIVED_SSO_GROUPS';\r\nexport const RECEIVED_SSO_ROLES = 'ssoGroups/RECEIVED_SSO_ROLES';\r\n\r\nconst initialState = {\r\n groups: [],\r\n roles: [],\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_SSO_GROUPS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n groups: payload,\r\n };\r\n },\r\n [RECEIVED_SSO_ROLES]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n roles: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getSsoGroups = () => async (dispatch) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const groups = await fetchSsoGroups();\r\n dispatch(updateAppLoading(false));\r\n dispatch({ type: RECEIVED_SSO_GROUPS, payload: groups });\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n\r\nexport const getSsoRoles = () => async (dispatch) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const roles = await fetchSsoRoles();\r\n dispatch(updateAppLoading(false));\r\n dispatch({ type: RECEIVED_SSO_ROLES, payload: roles });\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n","const tableMetadata = [\r\n {\r\n id: 'name',\r\n renderingField: 'name',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Name',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'description',\r\n renderingField: 'description',\r\n width: '50%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Description',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'action',\r\n renderingField: 'action',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: '',\r\n alignment: 'right',\r\n },\r\n];\r\n\r\nexport default tableMetadata;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useForm } from 'react-hook-form';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Grid } from '@material-ui/core';\r\nimport { SearchInput } from '@ds/react-components';\r\n\r\nconst styles = (theme) => ({\r\n startAdornmentContainer: {\r\n backgroundColor: theme.palette.xpl.foreground,\r\n color: theme.palette.xpl.text.action,\r\n },\r\n filterIcon: {\r\n width: '15px',\r\n height: '15px',\r\n marginRight: '6px',\r\n },\r\n dobGrid: {\r\n maxWidth: 250,\r\n },\r\n});\r\n\r\nconst SsoGroupListFilter = (props) => {\r\n const { onSubmit } = props;\r\n\r\n const { handleSubmit, register } = useForm({\r\n defaultValues: {\r\n search: '',\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nSsoGroupListFilter.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SsoGroupListFilter);\r\n","import {\r\n DialogTitle,\r\n styled,\r\n Typography,\r\n DialogActions,\r\n DialogContent,\r\n} from '@material-ui/core';\r\n\r\nexport const TitleContainer = styled(DialogTitle)(({ theme }) => ({\r\n borderBottom: `solid 1px ${theme.palette.xpl.stoke}`,\r\n}));\r\n\r\nexport const ContentContainer = styled(DialogContent)(({ theme }) => ({\r\n color: theme.palette.xpl.text.secondary,\r\n fontSize: '14px',\r\n fontWeight: '400',\r\n lineHeight: '20px',\r\n marginBottom: '8px',\r\n}));\r\n\r\nexport const FooterContainer = styled(DialogActions)({\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n paddingBottom: '16px',\r\n});\r\n\r\nexport const Title = styled(Typography)(({ theme }) => ({\r\n color: theme.palette.xpl.text.primary,\r\n fontSize: '20px',\r\n fontWeight: '700',\r\n lineHeight: '28px',\r\n}));\r\n\r\nexport const Content = styled(Typography)(({ theme }) => ({\r\n marginTop: '8px',\r\n marginBottom: '8px',\r\n}));\r\n","import * as React from 'react';\r\nimport { OutlinedButton, FilledButton } from '@ds/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { Dialog, withStyles } from '@material-ui/core';\r\nimport * as Styled from './SsoGroupDeleteMessage.styled';\r\n\r\nconst styles = (theme) => ({\r\n groupName: {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nconst SsoGroupDeleteConfirmDialog = (props) => {\r\n const { classes, groupName, isOpen, onDelete, onClose } = props;\r\n\r\n return (\r\n \r\n \r\n {'Delete group?'}\r\n \r\n \r\n \r\n Are you sure you want to permanently delete this group\r\n {' ' + groupName}\r\n ?\r\n \r\n \r\n Users who are associated with this group will permanently lose\r\n permissions once deleted.\r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSsoGroupDeleteConfirmDialog.propTypes = {\r\n groupName: PropTypes.string.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onDelete: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(SsoGroupDeleteConfirmDialog);\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { Typography, Grid, withStyles } from '@material-ui/core';\r\nimport { TextButton, FilledButton, Alert } from '@ds/react-components';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport Table from 'components/ui/Table';\r\nimport { deleteSsoGroup } from 'services/ssoGroups';\r\nimport tableMetadata from './tableMetaData';\r\nimport SsoGroupListFilter from './SsoGroupListFilter';\r\nimport SsoGroupDeleteConfirmDialog from '../Delete/SsoGroupDeleteConfirmDialog';\r\n\r\nconst styles = (theme) => ({\r\n row: {\r\n cursor: 'pointer',\r\n },\r\n pageHeader: {\r\n marginBottom: '20px',\r\n },\r\n errorContainer: {\r\n marginTop: '16px',\r\n marginBottom: '16px',\r\n maxWidth: '910px',\r\n },\r\n deleteButton: {\r\n color: theme.palette.xpl.text.warning,\r\n },\r\n});\r\n\r\nconst SsoGroupList = (props) => {\r\n const { getSsoGroups, appLoading, classes, groups } = props;\r\n const [deletingGroupId, setDeletingGroupId] = useState(null);\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false);\r\n const [formState, setFormState] = useState({\r\n currentPage: 0,\r\n filteredGroups: null,\r\n });\r\n\r\n const history = useHistory();\r\n\r\n const processGroupData = (groups) => {\r\n return groups.map((r) => {\r\n const group = { ...r };\r\n group.id = group.groupId;\r\n group.groupName = group.name;\r\n group.groupDescription = group.description;\r\n group.action = (\r\n \r\n \r\n handleEditGroupClick(event, group.id)}>\r\n Edit\r\n \r\n handleDeleteGroupClick(event, group.id)}>\r\n Delete\r\n \r\n \r\n \r\n );\r\n return group;\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n const getGroups = async () => {\r\n await getSsoGroups();\r\n };\r\n\r\n getGroups();\r\n }, [getSsoGroups]);\r\n\r\n const groupsData =\r\n formState.filteredGroups === null ? groups : formState.filteredGroups;\r\n\r\n const ssoGroups = useMemo(() => processGroupData(groupsData), [groupsData]);\r\n\r\n const showNoResults =\r\n !appLoading &&\r\n formState.filteredGroups !== null &&\r\n formState.filteredGroups.length === 0;\r\n\r\n const formatText = (text) => {\r\n // Replace hyphen symbols and double spaces if any\r\n return (text || '').replace(/-/g, ' ').replace(/ +/g, ' ');\r\n };\r\n\r\n const handleFilter = (data) => {\r\n const { search } = data;\r\n let searchResult = groups;\r\n\r\n if (search) {\r\n searchResult = groups.filter((item) => {\r\n const groupName = formatText(item.name).toLowerCase();\r\n const formattedSearch = formatText(search).toLowerCase();\r\n return groupName.includes(formattedSearch);\r\n });\r\n }\r\n\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: 0,\r\n filteredGroups: searchResult,\r\n }));\r\n };\r\n\r\n const getGroupName = (id) => {\r\n const group = ssoGroups.find((x) => x.id === id);\r\n return group?.name;\r\n };\r\n\r\n const handleAddGroupClick = (event) => {\r\n event.preventDefault();\r\n history.push(`/SsoGroupManagement/Add`);\r\n };\r\n\r\n const handleEditGroupClick = (event, id) => {\r\n event.preventDefault();\r\n history.push(`/SsoGroupManagement/${id}/Edit`);\r\n };\r\n\r\n const handlePageClick = (data) => {\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: data.selected,\r\n }));\r\n };\r\n\r\n const handleDeleteGroupClick = (event, id) => {\r\n event.preventDefault();\r\n setDeletingGroupId(id);\r\n setDeleteDialogOpen(true);\r\n };\r\n\r\n const onDelete = async (groupId) => {\r\n try {\r\n await deleteSsoGroup(groupId);\r\n setDeleteDialogOpen(false);\r\n setErrorMessage('');\r\n await getSsoGroups();\r\n } catch (error) {\r\n setErrorMessage('Error occurred when deleting group. Please try again.');\r\n console.error(error);\r\n }\r\n };\r\n\r\n const closeDeleteDialog = () => {\r\n setDeleteDialogOpen(false);\r\n };\r\n\r\n return (\r\n \r\n {errorMessage && (\r\n <>\r\n \r\n {errorMessage}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n Group Management\r\n
    \r\n \r\n \r\n Add Group\r\n \r\n \r\n {!appLoading && (\r\n <>\r\n onDelete(deletingGroupId)}\r\n isOpen={isDeleteDialogOpen}\r\n onClose={closeDeleteDialog}>\r\n \r\n \r\n \r\n \r\n {ssoGroups.length} Results Found\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nSsoGroupList.propTypes = {\r\n groups: PropTypes.arrayOf(PropTypes.object),\r\n getSsoGroups: PropTypes.func.isRequired,\r\n appLoading: PropTypes.bool.isRequired,\r\n};\r\n\r\nSsoGroupList.defaultProps = {\r\n groups: [],\r\n};\r\n\r\nexport default withStyles(styles)(SsoGroupList);\r\n","import { getSsoGroups } from 'ducks/ssoGroupManagement';\r\nimport { connect } from 'react-redux';\r\nimport SsoGroupList from './SsoGroupList';\r\n\r\nconst mapStateToProps = (state) => ({\r\n groups: state.ssoGroups.groups,\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getSsoGroups,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SsoGroupList);\r\n","export const formatSearchText = (text) => {\r\n // Replace hyphen symbols and double spaces if any\r\n return (text || '').replace(/-/g, ' ').replace(/ +/g, ' ');\r\n};\r\n","const tableMetadata = [\r\n {\r\n id: 'name',\r\n renderingField: 'name',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Name',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'description',\r\n renderingField: 'description',\r\n width: '75%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Description',\r\n alignment: 'left',\r\n },\r\n];\r\n\r\nexport default tableMetadata;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Grid } from '@material-ui/core';\r\nimport { Dropdown, SearchInput } from '@ds/react-components';\r\n\r\nconst styles = (theme) => ({\r\n searchContainer: {\r\n marginBottom: '16px',\r\n },\r\n});\r\n\r\nconst SsoRoleListFilter = (props) => {\r\n const {\r\n classes,\r\n onSearchFilterChange,\r\n onSearchKeywordChange,\r\n onSearchClick,\r\n } = props;\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\nSsoRoleListFilter.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n onSearchFilterChange: PropTypes.func.isRequired,\r\n onSearchKeywordChange: PropTypes.func.isRequired,\r\n onSearchClick: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SsoRoleListFilter);\r\n","import React, { useState, useMemo, useEffect } from 'react';\r\nimport { Grid, withStyles } from '@material-ui/core';\r\nimport { formatSearchText } from 'utils/search';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport PropTypes from 'prop-types';\r\nimport Table from 'components/ui/Table';\r\nimport tableMetadata from './tableMetaData';\r\nimport SsoRoleListFilter from './SsoRoleListFilter';\r\n\r\nconst styles = (theme) => ({\r\n mainContainer: {\r\n padding: '30px',\r\n },\r\n tableContainer: {\r\n maxHeight: 500,\r\n },\r\n footer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n marginTop: '32px',\r\n },\r\n});\r\n\r\nconst SsoRoleList = (props) => {\r\n const { classes, roles, selectedRoles, setSelectedRoles } = props;\r\n const [searchFilter, setSearchFilter] = useState(1);\r\n const [searchKeyword, setSearchKeyword] = useState('');\r\n const [formState, setFormState] = useState({\r\n currentPage: 0,\r\n rowsPerPage: 10,\r\n filteredRoles: null,\r\n });\r\n\r\n const filterPermission = useMemo(\r\n () => (searchFilter, searchKeyword) => {\r\n let searchResult = roles;\r\n\r\n if (searchFilter !== null && searchFilter !== 1) {\r\n const isAssignedPermissions = searchFilter === 2 ? true : false;\r\n searchResult = searchResult.filter((item) => {\r\n return isAssignedPermissions\r\n ? selectedRoles.includes(item.roleId)\r\n : !selectedRoles.includes(item.roleId);\r\n });\r\n }\r\n\r\n if (searchKeyword) {\r\n searchResult = searchResult.filter((item) => {\r\n const roleName = formatSearchText(item.roleName).toLowerCase();\r\n const formattedSearch = formatSearchText(\r\n searchKeyword || ''\r\n ).toLowerCase();\r\n return roleName.includes(formattedSearch);\r\n });\r\n }\r\n\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: 0,\r\n filteredRoles: searchResult,\r\n }));\r\n },\r\n [roles, selectedRoles]\r\n );\r\n\r\n useEffect(() => {\r\n filterPermission(searchFilter, searchKeyword);\r\n }, [selectedRoles, searchFilter, filterPermission]);\r\n\r\n const processRoleData = (roles) => {\r\n return roles.map((r) => {\r\n const role = { ...r };\r\n role.id = role.roleId;\r\n role.name = role.roleName;\r\n return role;\r\n });\r\n };\r\n\r\n const rolesData =\r\n formState.filteredRoles === null ? roles : formState.filteredRoles;\r\n const ssoRoles = useMemo(() => processRoleData(rolesData), [rolesData]);\r\n const showNoResults =\r\n formState.filteredRoles !== null && formState.filteredRoles.length === 0;\r\n\r\n const onSearchClick = (e) => {\r\n e.preventDefault();\r\n filterPermission(searchFilter, searchKeyword);\r\n };\r\n\r\n const onSearchFilterChange = (selectedItem) => {\r\n setSearchFilter(selectedItem.value);\r\n };\r\n\r\n const onSearchKeywordChange = (e) => {\r\n setSearchKeyword(e.target.value);\r\n };\r\n\r\n const onSetSelectedItems = (data) => {\r\n setSelectedRoles(data);\r\n };\r\n\r\n const handlePageClick = (data) => {\r\n setFormState((prevState) => ({\r\n ...prevState,\r\n currentPage: data.selected,\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
    \r\n {ssoRoles.length} Results Found\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nSsoRoleList.propTypes = {\r\n roles: PropTypes.arrayOf(PropTypes.object),\r\n setSelectedRoles: PropTypes.func.isRequired,\r\n selectedRoles: PropTypes.arrayOf(PropTypes.object),\r\n};\r\n\r\nSsoRoleList.defaultProps = {\r\n roles: [],\r\n selectedRoles: [],\r\n};\r\n\r\nexport default withStyles(styles)(SsoRoleList);\r\n","import { connect } from 'react-redux';\r\nimport SsoRoleList from './SsoRoleList';\r\n\r\nconst mapStateToProps = (state) => ({\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n});\r\n\r\nexport default connect(mapStateToProps)(SsoRoleList);\r\n","import ContentLoader from 'react-content-loader';\r\nimport React from 'react';\r\nimport { Alert, BackgroundPaper, SubtleButton } from '@ds/react-components';\r\nimport { styled, Typography } from '@material-ui/core';\r\n\r\nexport const PageTitle = styled((props) => (\r\n \r\n))(({ theme }) => ({\r\n marginTop: '18px',\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const Paper = styled(BackgroundPaper)({\r\n minHeight: '50px',\r\n marginTop: '18px',\r\n height: 'fit-content',\r\n});\r\n\r\nexport const PaperHeader = styled('div')(({ theme }) => ({\r\n padding: '18px 32px',\r\n borderBottom: `1px solid ${theme.palette.xpl.stoke}`,\r\n color: theme.palette.xpl.text.primary,\r\n fontWeight: 'normal',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n}));\r\n\r\nexport const PaperBody = styled('div')({\r\n padding: '18px 32px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nexport const PaperHeaderText = styled((props) => (\r\n \r\n))({\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const LoaderHeader = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const FormContainer = styled('div')({});\r\n\r\nexport const InfoAlert = styled(Alert)({\r\n marginTop: '18px',\r\n});\r\n\r\nexport const PaperBodyOverload = styled(({ loading, ...other }) => (\r\n \r\n))(({ loading }) => ({\r\n padding: '16px 32px 16px 32px',\r\n opacity: loading ? 0.5 : 1,\r\n pointerEvents: loading ? 'none' : 'initial',\r\n maxWidth: '50%',\r\n}));\r\n\r\nexport const ActionButtonContainer = styled('div')({\r\n display: 'flex',\r\n marginTop: '18px',\r\n});\r\n\r\nexport const CancelButton = styled(SubtleButton)({\r\n marginLeft: '16px',\r\n});\r\n\r\nexport const InputWrapper = styled('div')({\r\n margin: '16px 0',\r\n});\r\n\r\nexport const HiddenInputWrapper = styled('div')({\r\n visibility: 'hidden',\r\n height: '0px',\r\n});\r\n\r\nexport const ErrorMessage = styled('label')(({ theme }) => ({\r\n color: theme.palette.xpl.text.warning,\r\n}));\r\n\r\nexport const PermissionsErrorMessage = styled('div')(({ theme }) => ({\r\n marginLeft: '32px',\r\n marginTop: '16px',\r\n color: theme.palette.xpl.text.warning,\r\n}));\r\n\r\nexport const SsoGroupLoaderContainer = styled('div')(({ theme }) => ({\r\n maxWidth: '280px',\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: '400px',\r\n },\r\n}));\r\n\r\nexport const SsoGroupLoader = (props) => (\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, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { FilledButton, Alert, Input, Textarea } from '@ds/react-components';\r\nimport { updateSsoGroup, fetchSsoGroup } from 'services/ssoGroups';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport RoleList from '../Role';\r\nimport * as Styled from '../common/SsoGroupForm.styled';\r\n\r\nconst styles = (theme) => ({});\r\n\r\nconst SsoGroupEdit = (props) => {\r\n const { roles, getSsoRoles } = props;\r\n const history = useHistory();\r\n const { ssoGroupId } = useParams();\r\n const [ssoGroup, setSsoGroup] = useState(null);\r\n const [selectedRoles, setSelectedRoles] = useState([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [permissionsCount, setPermissionsCount] = useState(0);\r\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\r\n const [submissionError, setSubmissionError] = useState('');\r\n\r\n const {\r\n handleSubmit,\r\n register,\r\n reset,\r\n control,\r\n setValue,\r\n formState: { errors },\r\n } = useForm({\r\n defaultValues: {\r\n groupId: null,\r\n name: null,\r\n groupExternalId: null,\r\n description: null,\r\n permissions: [],\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n\r\n useEffect(() => {\r\n const getRoles = async () => {\r\n await getSsoRoles();\r\n };\r\n\r\n const getSsoGroup = async (ssoGroupId) => {\r\n const result = await fetchSsoGroup(ssoGroupId);\r\n setSsoGroup(result);\r\n setIsLoading(false);\r\n reset({\r\n groupId: result.groupId,\r\n name: result.name,\r\n groupExternalId: result.groupExternalId,\r\n description: result.description,\r\n permissions: result.permissions,\r\n });\r\n\r\n if (result.permissions) {\r\n setSelectedRoles(result.permissions.map((p) => p.roleId));\r\n }\r\n };\r\n\r\n try {\r\n setIsLoading(true);\r\n getRoles();\r\n getSsoGroup(ssoGroupId);\r\n } catch (error) {\r\n setIsLoading(false);\r\n console.error(error);\r\n }\r\n }, [ssoGroupId, getSsoRoles, reset]);\r\n\r\n useEffect(() => {\r\n setPermissionsCount(selectedRoles.length);\r\n setValue('permissionsCount', selectedRoles.length);\r\n }, [setValue, selectedRoles]);\r\n\r\n const onCancel = (e) => {\r\n e.preventDefault();\r\n history.push(`/SsoGroupManagement`);\r\n };\r\n\r\n const onSubmit = async (data) => {\r\n const { name, groupExternalId, description } = data;\r\n const payload = {\r\n ssoGroupId,\r\n name,\r\n groupExternalId,\r\n description,\r\n permissions: selectedRoles.map((id) => {\r\n return { roleId: id };\r\n }),\r\n };\r\n\r\n try {\r\n setIsSubmittingForm(true);\r\n await updateSsoGroup(payload);\r\n history.push(`/SsoGroupManagement`);\r\n } catch (error) {\r\n setIsSubmittingForm(false);\r\n setSubmissionError(\r\n error.message || 'Something went wrong. Please try again.'\r\n );\r\n console.error(error);\r\n }\r\n };\r\n\r\n const onBack = () => {\r\n history.push(`/SsoGroupManagement`);\r\n };\r\n\r\n if (isLoading) {\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 if (!isLoading && !ssoGroup) {\r\n return (\r\n \r\n \r\n \r\n {\r\n 'The SSO group does not exist or you do not have permission to access it.'\r\n }\r\n \r\n \r\n \r\n \r\n {'Back'}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {!!submissionError && (\r\n \r\n \r\n {submissionError}\r\n \r\n \r\n )}\r\n {'Edit Group'}\r\n \r\n \r\n \r\n {'Group Details'}\r\n \r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={errors.name && errors.name.message}\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={\r\n errors.groupExternalId && errors.groupExternalId.message\r\n }\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={errors.description && errors.description.message}\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Permissions (' + selectedRoles.length + ' selected)'}\r\n \r\n \r\n \r\n \r\n \r\n {errors.permissionsCount && errors.permissionsCount.type === 'min' && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {'Save'}\r\n \r\n \r\n {'Cancel'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSsoGroupEdit.propTypes = {\r\n appLoading: PropTypes.bool.isRequired,\r\n roles: PropTypes.arrayOf(PropTypes.object),\r\n};\r\n\r\nSsoGroupEdit.defaultValues = {\r\n roles: [],\r\n};\r\n\r\nexport default withStyles(styles)(SsoGroupEdit);\r\n","import { connect } from 'react-redux';\r\nimport { getSsoRoles } from 'ducks/ssoGroupManagement';\r\nimport SsoGroupEdit from './SsoGroupEdit';\r\n\r\nconst mapStateToProps = (state) => ({\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n roles: state.ssoGroups.roles,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getSsoRoles,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SsoGroupEdit);\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { FilledButton, Alert, Input, Textarea } from '@ds/react-components';\r\nimport { addSsoGroup } from 'services/ssoGroups';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport RoleList from '../Role';\r\nimport * as Styled from '../common/SsoGroupForm.styled';\r\n\r\nconst styles = (theme) => ({});\r\n\r\nconst SsoGroupAdd = (props) => {\r\n const { roles, getSsoRoles } = props;\r\n const [selectedRoles, setSelectedRoles] = useState([]);\r\n const [permissionsCount, setPermissionsCount] = useState(0);\r\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\r\n const [submissionError, setSubmissionError] = useState('');\r\n const history = useHistory();\r\n const {\r\n handleSubmit,\r\n register,\r\n control,\r\n setValue,\r\n formState: { errors },\r\n } = useForm({\r\n defaultValues: {\r\n name: '',\r\n groupExternalId: '',\r\n description: '',\r\n permissions: [],\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n const getRoles = async () => {\r\n await getSsoRoles();\r\n };\r\n getRoles();\r\n }, [getSsoRoles]);\r\n\r\n useEffect(() => {\r\n setPermissionsCount(selectedRoles.length);\r\n setValue('permissionsCount', selectedRoles.length);\r\n }, [setValue, selectedRoles]);\r\n\r\n const onCancel = (e) => {\r\n e.preventDefault();\r\n history.push(`/SsoGroupManagement`);\r\n };\r\n\r\n const onSubmit = async (data) => {\r\n const { name, groupExternalId, description } = data;\r\n const payload = {\r\n name,\r\n groupExternalId,\r\n description,\r\n permissions: selectedRoles.map((id) => {\r\n return { roleId: id };\r\n }),\r\n };\r\n\r\n try {\r\n setIsSubmittingForm(true);\r\n await addSsoGroup(payload);\r\n history.push(`/SsoGroupManagement`);\r\n } catch (error) {\r\n setIsSubmittingForm(false);\r\n setSubmissionError(\r\n error.message || 'Something went wrong. Please try again.'\r\n );\r\n console.error(error);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {!!submissionError && (\r\n \r\n \r\n {submissionError}\r\n \r\n \r\n )}\r\n {'Add Group'}\r\n \r\n
    \r\n \r\n \r\n {'Group Details'}\r\n \r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={errors.name && errors.name.message}\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={\r\n errors.groupExternalId &&\r\n errors.groupExternalId.message\r\n }\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n (\r\n <>\r\n {\r\n onChange(event.target.value);\r\n }}\r\n error={errors.description && errors.description.message}\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {'Permissions (' + selectedRoles.length + ' selected)'}\r\n \r\n \r\n \r\n \r\n \r\n {errors.permissionsCount && errors.permissionsCount.type === 'min' && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {'Save'}\r\n \r\n \r\n {'Cancel'}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nSsoGroupAdd.propTypes = {\r\n appLoading: PropTypes.bool.isRequired,\r\n roles: PropTypes.arrayOf(PropTypes.object),\r\n};\r\n\r\nSsoGroupAdd.defaultValues = {\r\n roles: [],\r\n};\r\n\r\nexport default withStyles(styles)(SsoGroupAdd);\r\n","import { connect } from 'react-redux';\r\nimport { getSsoRoles } from 'ducks/ssoGroupManagement';\r\nimport SsoGroupAdd from './SsoGroupAdd';\r\n\r\nconst mapStateToProps = (state) => ({\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n roles: state.ssoGroups.roles,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getSsoRoles,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SsoGroupAdd);\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchCustomerAccounts = async (searchText, dob) => {\r\n let url = `v1.0/accounts?basicSearch=`;\r\n url += searchText || 'empty';\r\n url += '&dob=' + (dob || 'empty');\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchCustomerAccounts } from 'services/accountSearch';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_ACCOUNTS = 'accountSearch/RECEIVED_ACCOUNTS';\r\n\r\nconst initialState = {\r\n accounts: [],\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_ACCOUNTS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n accounts: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const searchAccounts = (searchText, dob) => async (dispatch) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const accounts = await fetchCustomerAccounts(searchText, dob);\r\n dispatch(updateAppLoading(false));\r\n dispatch({ type: RECEIVED_ACCOUNTS, payload: accounts });\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n","const tableMetadata = [\r\n {\r\n id: 'debitsuccessId',\r\n renderingField: 'debitsuccessIdRender',\r\n width: '10%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Debitsuccess ID',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'businessId',\r\n renderingField: 'businessId',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Business ID',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'name',\r\n renderingField: 'name',\r\n width: '20%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Name',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'facilityName',\r\n renderingField: 'facilityName',\r\n width: '20%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Business name',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'contact',\r\n renderingField: 'contact',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Contact',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'dob',\r\n renderingField: 'dobRender',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Date of birth',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'status',\r\n renderingField: 'statusRender',\r\n width: '20%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Status',\r\n alignment: 'left',\r\n },\r\n];\r\n\r\nexport default tableMetadata;\r\n","import React from 'react';\r\n\r\n/**\r\n * Helper hook for use when all you want to do is toggle something. E.g. a modal\r\n */\r\nconst useToggle = (initial = false) => {\r\n const [isOn, setOn] = React.useState(initial);\r\n\r\n const toggleValue = React.useCallback(() => {\r\n setOn((on) => !on);\r\n }, [setOn]);\r\n return [isOn, toggleValue];\r\n};\r\n\r\nexport default useToggle;\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M479.968 0H32.038C3.613 0-10.729 34.487 9.41 54.627L192 237.255V424a31.996 31.996 0 0 0 10.928 24.082l64 55.983c20.438 17.883 53.072 3.68 53.072-24.082V237.255L502.595 54.627C522.695 34.528 508.45 0 479.968 0zM288 224v256l-64-56V224L32 32h448L288 224z\"\n});\n\nvar SvgFaFilter = function SvgFaFilter(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n viewBox: \"0 0 512 512\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgFaFilter, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/fa-filter.44a01139.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport useToggle from 'hooks/useToggle';\r\nimport moment from 'moment';\r\nimport { Grid } from '@material-ui/core';\r\nimport {\r\n OutlinedButton,\r\n SearchInput,\r\n Input as FormInput,\r\n} from '@ds/react-components';\r\nimport { ReactComponent as FilterIcon } from 'assets/icons/fa-filter.svg';\r\n\r\nconst styles = (theme) => ({\r\n startAdornmentContainer: {\r\n backgroundColor: theme.palette.xpl.foreground,\r\n color: theme.palette.xpl.text.action,\r\n },\r\n filterIcon: {\r\n width: '15px',\r\n height: '15px',\r\n marginRight: '6px',\r\n },\r\n dobGrid: {\r\n maxWidth: 250,\r\n },\r\n});\r\n\r\nconst SearchFields = (props) => {\r\n const { classes, dateFormat, onSubmit } = props;\r\n\r\n const [showDob, toggleShowDob] = useToggle(false);\r\n\r\n const { handleSubmit, control, errors, register } = useForm({\r\n defaultValues: {\r\n search: '',\r\n dob: null,\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n\r\n return (\r\n
    \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n Filter By\r\n \r\n \r\n {showDob && (\r\n \r\n {\r\n if (!value) return true;\r\n const momentDate = moment(value, dateFormat, true);\r\n return (\r\n (momentDate.isValid() &&\r\n momentDate.isSameOrBefore(new Date())) ||\r\n `Please enter a valid date (${props.dateFormat}).`\r\n );\r\n },\r\n }}\r\n render={({ onChange, name, value, onBlur }) => (\r\n onChange(event.target.value)}\r\n error={errors.dob && errors.dob.message}\r\n aria-label=\"Enter optional date of birth\"\r\n />\r\n )}\r\n />\r\n \r\n )}\r\n \r\n
    \r\n );\r\n};\r\n\r\nSearchFields.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n dateFormat: PropTypes.string,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SearchFields);\r\n","import React, { useState, useMemo, Fragment, useCallback } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport moment from 'moment';\r\nimport { Typography, Grid, withStyles } from '@material-ui/core';\r\nimport { Badge } from '@ds/react-components';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport Table from 'components/ui/Table';\r\nimport tableMetadata from './tableMetaData';\r\nimport SearchFields from './SearchFields';\r\n\r\n//fixed date format that conforms to the API, regardless of the region\r\nconst dobParameterDateFormat = 'YYYY-MM-DD';\r\nconst dobResultDateFormat = 'YYYY-MM-DDTHH:mm:ssZ';\r\n\r\nconst styles = (theme) => ({\r\n row: {\r\n cursor: 'pointer',\r\n },\r\n pageHeader: {\r\n marginBottom: '20px',\r\n },\r\n debitsuccessId: {\r\n color: theme.palette.xpl.text.primary,\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nconst processAccountData = (accounts, dateFormat, classes) => {\r\n return accounts.map((a) => {\r\n //If a column needs to be sortable, then it needs to have a rendering field and a sortable(data) field\r\n const account = { ...a };\r\n account.id = account.debitsuccessId; //required for table component for selection\r\n\r\n let items = '';\r\n let sortableStatus = 0;\r\n if (!account.isActive) {\r\n items = (\r\n \r\n {items}\r\n \r\n Cancelled\r\n \r\n \r\n );\r\n sortableStatus = 2; //cancelled\r\n } else if (account.isSuspended) {\r\n items = (\r\n \r\n {items}\r\n \r\n Suspended\r\n \r\n \r\n );\r\n sortableStatus = 3; //suspended\r\n } else {\r\n items = (\r\n \r\n {items}\r\n \r\n Active\r\n \r\n \r\n );\r\n items = account.isFixedTerm ? (\r\n \r\n {items}\r\n \r\n Set to Term\r\n \r\n \r\n ) : (\r\n \r\n {items}\r\n \r\n Ongoing\r\n \r\n \r\n );\r\n sortableStatus = 1; //active + ongoning/fixed\r\n }\r\n account.status = sortableStatus;\r\n account.statusRender = (\r\n \r\n {items}\r\n \r\n );\r\n account.debitsuccessIdRender = (\r\n \r\n {account.debitsuccessId}\r\n \r\n );\r\n\r\n const dob = moment(account.dob, dobResultDateFormat).add(12, 'hours');\r\n const minDate = new Date();\r\n\r\n minDate.setFullYear(minDate.getFullYear() - 200);\r\n account.dobRender = dob.toDate() < minDate ? '' : dob.format(dateFormat);\r\n account.dob = dob.toDate();\r\n return account;\r\n });\r\n};\r\n\r\nconst CustomerSearch = (props) => {\r\n const { localisation, searchAccounts, appLoading, classes, accounts } = props;\r\n\r\n const history = useHistory();\r\n\r\n const [formMeta, setFormMeta] = useState({\r\n searchComplete: false,\r\n searchClicked: false,\r\n currentPage: 0,\r\n });\r\n\r\n const onSearchSubmit = useCallback(\r\n async (data) => {\r\n const { search, dob } = data;\r\n const dobFormatted =\r\n dob &&\r\n moment(dob, localisation.locales.dateFormat).format(\r\n dobParameterDateFormat\r\n );\r\n searchAccounts(search, dobFormatted);\r\n\r\n setFormMeta((prevState) => ({\r\n ...prevState,\r\n searchComplete: true,\r\n currentPage: 0,\r\n }));\r\n },\r\n [searchAccounts, setFormMeta, localisation]\r\n );\r\n\r\n const handleRowClick = (event, id) => {\r\n history.push(`/Customers/${id}/Overview`);\r\n };\r\n\r\n const handlePageClick = (data) => {\r\n setFormMeta((prevState) => ({\r\n ...prevState,\r\n currentPage: data.selected,\r\n }));\r\n };\r\n\r\n const { dateFormat } = localisation.locales;\r\n const accountComponents = useMemo(\r\n () => processAccountData(accounts, dateFormat, classes),\r\n [accounts, dateFormat, classes]\r\n );\r\n const showNoResults =\r\n accounts.length === 0 && formMeta.searchComplete && !appLoading;\r\n return (\r\n \r\n \r\n Customers\r\n
    \r\n \r\n\r\n \r\n \r\n \r\n {accountComponents.length} Results Found\r\n \r\n }\r\n showBorder={true}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCustomerSearch.propTypes = {\r\n accounts: PropTypes.arrayOf(PropTypes.object),\r\n localisation: PropTypes.object.isRequired,\r\n searchAccounts: PropTypes.func.isRequired,\r\n appLoading: PropTypes.bool.isRequired,\r\n};\r\n\r\nCustomerSearch.defaultProps = {\r\n accounts: [],\r\n};\r\n\r\nexport default withStyles(styles)(CustomerSearch);\r\n","import { searchAccounts } from 'ducks/accountSearchResult';\r\nimport { connect } from 'react-redux';\r\nimport CustomerSearch from './CustomerSearch';\r\n\r\nconst mapStateToProps = (state) => ({\r\n accounts: state.accountSearchResult.accounts,\r\n ajaxStatus: state.ajax,\r\n localisation: state.localisation,\r\n appLoading: state.meta.appLoading,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n searchAccounts: searchAccounts,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomerSearch);\r\n","import React from 'react';\r\nimport { getDisplayName } from 'utils/misc';\r\nimport { useParams } from 'react-router-dom';\r\n\r\n//a HOC component to pass matched url params. Mainly useful in react redux connect. Replaces withRouter HOC as it is being deprecated.\r\nconst withRouteParams = (WrappedComponent, displayName = '') => {\r\n const WithRouteParams = (props) => {\r\n const routeParams = useParams();\r\n return ;\r\n };\r\n WithRouteParams.displayName =\r\n displayName || `WithRouteParams(${getDisplayName(WrappedComponent)})`;\r\n return WithRouteParams;\r\n};\r\n\r\nexport default withRouteParams;\r\n","import ky from 'ky';\r\nimport { getKyClient } from './client';\r\n\r\nexport const fetchPersonalInfo = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/personalinfo`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchBalanceToSettle = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/balancetosettle`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchBalanceToSettleWithoutCancelFee = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/BalanceToSettleWithoutCanFee`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchActivePaymentMethod = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/ActivePayMethod`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchNextPayment = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/BillNextAmount`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchTransactions = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/TransactionsOverview`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchCallNotes = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/CallNotesOverview`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchMembershipDue = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/membershipdue`;\r\n const kyClient = await getKyClient();\r\n const result = await kyClient.get(url).json();\r\n return result.membershipDue;\r\n};\r\n\r\nexport const postCancelAccount = async (adfitNo, data) => {\r\n const url = `v1.0/accounts/${adfitNo}/CancelAccount`;\r\n const kyClient = await getKyClient();\r\n return kyClient.post(url, {\r\n json: data,\r\n });\r\n};\r\n\r\nexport const fetchEstimatedFinalBillDate = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/EstimatedFinalBillDate`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchOutstandingDsFee = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/OutstandingDsFees`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchDefaultFeeDue = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/DefaultFees`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\n//Using default ky instance as the url can be different from the configured base path.\r\nexport const checkAccountCancelStatus = async (url, token) => {\r\n return ky\r\n .get(url, {\r\n headers: {\r\n Authorization: 'Bearer ' + token,\r\n 'Content-Type': 'application/json;charset=utf-8',\r\n Accept: 'application/json;charset=utf-8',\r\n },\r\n })\r\n .json();\r\n};\r\n\r\nexport const fetchGuarantorDetails = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/GetGuarantorDetails`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchPendingPaymentAmount = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/overview/PendingPaymentAmount`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchAccountInfo = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/TransactionsSummary`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const fetchAllTransactions = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/Transactions`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nconst s2ab = (s) => {\r\n let buf = new ArrayBuffer(s.length);\r\n let view = new Uint8Array(buf);\r\n for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;\r\n return buf;\r\n};\r\n\r\nexport const downloadTransactionsService = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/DownloadTransactionsExcel`;\r\n const kyClient = await getKyClient();\r\n const result = await kyClient.get(url).json();\r\n let decoded = window.atob(result);\r\n let ab = s2ab(decoded);\r\n let blob = new Blob([ab], { type: 'application/vnd.ms-excel' });\r\n let link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(blob);\r\n link.download = 'Transaction(' + adfitNo + ').xlsx';\r\n link.click();\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport {\r\n fetchPersonalInfo,\r\n fetchActivePaymentMethod,\r\n fetchBalanceToSettle,\r\n fetchCallNotes,\r\n fetchTransactions,\r\n fetchNextPayment,\r\n fetchMembershipDue,\r\n fetchDefaultFeeDue,\r\n fetchPendingPaymentAmount,\r\n} from 'services/accountDetails';\r\nimport { fetchAllTransactions } from 'services/transactions';\r\n\r\nexport const RECEIVED_PERSONAL_INFO = 'cd/RECEIVED_PERSONAL_INFO';\r\nexport const RECEIVED_BALANCE = 'cd/RECEIVED_BALANCE';\r\nexport const RECEIVED_ACTIVE_PAY_METHOD = 'cd/RECEIVED_ACTIVE_PAY_METHOD';\r\nexport const RECEIVED_NEXT_PAY_AMOUNT = 'cd/RECEIVED_NEXT_PAY_AMOUNT';\r\nexport const RECEIVED_TRANSACTIONS = 'cd/RECEIVED_TRANSACTIONS';\r\nexport const RECEIVED_ALL_TRANSACTIONS = 'cd/RECEIVED_ALL_TRANSACTIONS';\r\nexport const RECEIVED_CALL_NOTES = 'cd/RECEIVED_CALL_NOTES';\r\nexport const RECEIVED_MEMBERSHIP_DUE_STATUS =\r\n 'cd/RECEIVED_MEMBERSHIP_DUE_STATUS';\r\nexport const RECEIVED_PENDING_PAYMENT_AMOUNT =\r\n 'cd/RECEIVED_PENDING_PAYMENT_AMOUNT';\r\nexport const RECEIVED_DEFAULT_FEE_DUE = 'cd/RECEIVED_DEFAULT_FEE_DUE';\r\n\r\nconst initialState = {};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_PERSONAL_INFO]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n },\r\n [RECEIVED_BALANCE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n balanceToSettle: payload,\r\n };\r\n },\r\n [RECEIVED_ACTIVE_PAY_METHOD]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n payMethod: payload,\r\n };\r\n },\r\n [RECEIVED_NEXT_PAY_AMOUNT]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n nextPaymentAmount: payload,\r\n };\r\n },\r\n [RECEIVED_TRANSACTIONS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n lastest3Transactions: payload,\r\n };\r\n },\r\n [RECEIVED_ALL_TRANSACTIONS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n transactions: payload,\r\n };\r\n },\r\n [RECEIVED_CALL_NOTES]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n callNotes: payload,\r\n };\r\n },\r\n [RECEIVED_MEMBERSHIP_DUE_STATUS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n membershipDue: payload,\r\n };\r\n },\r\n [RECEIVED_PENDING_PAYMENT_AMOUNT]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n pendingPaymentAmount: payload,\r\n };\r\n },\r\n [RECEIVED_DEFAULT_FEE_DUE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n defaultFeeDue: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getPersonalInfo = (adfitNo) => async (dispatch) => {\r\n const result = await fetchPersonalInfo(adfitNo);\r\n dispatch({ type: RECEIVED_PERSONAL_INFO, payload: result });\r\n};\r\n\r\nexport const getBalanceToSettle = (adfitNo) => async (dispatch) => {\r\n const result = await fetchBalanceToSettle(adfitNo);\r\n dispatch({ type: RECEIVED_BALANCE, payload: result });\r\n};\r\n\r\nexport const getActivePayMethod = (adfitNo) => async (dispatch) => {\r\n const result = await fetchActivePaymentMethod(adfitNo);\r\n dispatch({ type: RECEIVED_ACTIVE_PAY_METHOD, payload: result });\r\n};\r\n\r\nexport const getNextPaymentAmount = (adfitNo) => async (dispatch) => {\r\n const result = await fetchNextPayment(adfitNo);\r\n dispatch({ type: RECEIVED_NEXT_PAY_AMOUNT, payload: result });\r\n};\r\n\r\nexport const getTransactions = (adfitNo) => async (dispatch) => {\r\n const result = await fetchTransactions(adfitNo);\r\n dispatch({ type: RECEIVED_TRANSACTIONS, payload: result });\r\n};\r\n\r\nexport const getAllTransactions = (adfitNo) => async (dispatch) => {\r\n const result = await fetchAllTransactions(adfitNo);\r\n dispatch({ type: RECEIVED_ALL_TRANSACTIONS, payload: result });\r\n};\r\n\r\nexport const getCallNotes = (adfitNo) => async (dispatch) => {\r\n const result = await fetchCallNotes(adfitNo);\r\n dispatch({ type: RECEIVED_CALL_NOTES, payload: result });\r\n};\r\n\r\nexport const getMembershipDue = (adfitNo) => async (dispatch) => {\r\n const result = await fetchMembershipDue(adfitNo);\r\n dispatch({ type: RECEIVED_MEMBERSHIP_DUE_STATUS, payload: result });\r\n};\r\n\r\nexport const getPendingPaymentAmount = (adfitNo) => async (dispatch) => {\r\n const result = await fetchPendingPaymentAmount(adfitNo);\r\n dispatch({\r\n type: RECEIVED_PENDING_PAYMENT_AMOUNT,\r\n payload: result.pendingPaymentAmount,\r\n });\r\n};\r\nexport const getDefaultFeeDue = (adfitNo) => async (dispatch) => {\r\n const result = await fetchDefaultFeeDue(adfitNo);\r\n dispatch({ type: RECEIVED_DEFAULT_FEE_DUE, payload: result });\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchGuarantorDetails } from 'services/accountDetails';\r\n\r\nconst initialState = {\r\n entities: {},\r\n currentAccountAdfitNo: '',\r\n};\r\n\r\nexport const UPDATE_GUARANTOR_DETAILS = 'guarantor/UPDATE_GUARANTOR_DETAILS';\r\nexport const UPDATE_CURRENT_ACCOUNT_ADFIT_NO =\r\n 'guarantor/UPDATE_CURRENT_ACCOUNT_ADFIT_NO';\r\n\r\nexport default createReducer(initialState, {\r\n [UPDATE_GUARANTOR_DETAILS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n entities: payload,\r\n };\r\n },\r\n [UPDATE_CURRENT_ACCOUNT_ADFIT_NO]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n currentAccountAdfitNo: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getGuarantorDetailsByAdfitNo = (adfitNo) => async (dispatch) => {\r\n const result = await fetchGuarantorDetails(adfitNo);\r\n dispatch({\r\n type: UPDATE_GUARANTOR_DETAILS,\r\n payload: result,\r\n });\r\n dispatch({\r\n type: UPDATE_CURRENT_ACCOUNT_ADFIT_NO,\r\n payload: adfitNo,\r\n });\r\n};\r\n","// Selectors which are used commonly across all the redux slices.\r\n\r\nexport const selectEntitiesByAdfitNo = (stateSlice, adfitNo) => {\r\n try {\r\n if (stateSlice.currentAccountAdfitNo === adfitNo) {\r\n return stateSlice.entities;\r\n }\r\n return null;\r\n } catch (e) {\r\n return null;\r\n }\r\n};\r\n","import { styled, Tabs, withStyles, Tab } from '@material-ui/core';\r\n\r\n//Static container here makes sure that any element added below need not consider the fixed position element.\r\nexport const StaticContainer = styled('div')({\r\n width: '100%',\r\n height: '64px',\r\n});\r\n\r\n//Fixed and static container should have the same height.\r\nexport const FixedContainer = styled('div')(({ sidebar, theme }) => ({\r\n top: 64, //length of top-bar\r\n position: 'fixed',\r\n left: sidebar ? theme.dimension.sideBarWidth : 0,\r\n width: sidebar ? `calc(100% - ${theme.dimension.sideBarWidth}px)` : '100%',\r\n borderBottom: `solid 1px ${theme.palette.common.inputBorder}`,\r\n background: theme.palette.xpl.background,\r\n zIndex: 1000,\r\n height: '61px',\r\n}));\r\n\r\nexport const ScrollTabs = withStyles((theme) => ({\r\n scrollButtons: {\r\n width: '40px',\r\n },\r\n indicator: {\r\n backgroundColor: theme.palette.xpl.primary.default,\r\n },\r\n}))(Tabs);\r\n\r\nexport const ScrollTab = styled(Tab)(({ theme }) => ({\r\n fontSize: '14px',\r\n minHeight: '60px',\r\n '& span': {\r\n color: theme.palette.common.darkerText,\r\n },\r\n fontFamily: theme.typography.fontFamily,\r\n textTransform: 'none',\r\n opacity: 0.7,\r\n}));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\n\r\nimport * as Styled from './withScrollableTopTabs.styled';\r\n\r\nfunction withScrollableTopTabs(tabsList, selectedTabIndex, replaceParams = []) {\r\n return (PageComponent) => {\r\n const WithTopTabs = (props) => {\r\n const { isSideBarOpen, ...rest } = props;\r\n\r\n const params = useParams();\r\n\r\n const history = useHistory();\r\n\r\n const onTabChange = (event, newValueIndex) => {\r\n const selectedTab = tabsList[newValueIndex] || null;\r\n if (!selectedTab) return;\r\n const { path } = selectedTab;\r\n let newUrl = replaceParams.reduce((acc, currentValue) => {\r\n if (!acc.includes(currentValue) || !params[`${currentValue}`])\r\n return acc;\r\n return acc.replace(`:${currentValue}`, params[currentValue]);\r\n }, path);\r\n history.push(newUrl);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {tabsList.map((item) => {\r\n return ;\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n WithTopTabs.propTypes = {\r\n isSideBarOpen: PropTypes.bool.isRequired,\r\n };\r\n\r\n WithTopTabs.displayName = `WithScrollableTopTaps-${\r\n PageComponent.displayName || 'Component'\r\n }`;\r\n\r\n return connect((state) => ({\r\n isSideBarOpen: state.meta.isSideBarOpen,\r\n }))(WithTopTabs);\r\n };\r\n}\r\nexport default withScrollableTopTabs;\r\n","const tabList = [\r\n {\r\n name: 'Overview',\r\n path: '/Customers/:adfitNo/Overview',\r\n },\r\n {\r\n name: 'Payments',\r\n path: '/Customers/:adfitNo/Payments',\r\n },\r\n {\r\n name: 'Transactions',\r\n path: '/Customers/:adfitNo/Transactions',\r\n },\r\n {\r\n name: 'Payment Method',\r\n path: '/Customers/:adfitNo/PaymentMethod',\r\n },\r\n {\r\n name: 'Activities',\r\n path: '/Customers/:adfitNo/Activities',\r\n },\r\n {\r\n name: 'Variations',\r\n path: '/Customers/:adfitNo/Variations',\r\n },\r\n {\r\n name: 'Contract',\r\n path: '/Customers/:adfitNo/Contract',\r\n },\r\n];\r\n\r\nexport default tabList;\r\n","export default {\r\n canSetToTerm: 'CanSetToTerm',\r\n canCancelAllAccounts: 'CanCancelAllAccounts',\r\n canManageVariations: 'CanManageVariations',\r\n isAdmin: 'IsAdmin',\r\n canManageSuspensions: 'CanManageSuspensions',\r\n canSuspendIgnoreSuspensionRules: 'CanSuspendIgnoreSuspensionRules',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Link } from 'react-router-dom';\r\nimport { OutlinedButton } from '@ds/react-components';\r\nimport { Grid } from '@material-ui/core';\r\nimport permissionTypes from 'constants/permissionTypes';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n actionButton: {\r\n marginRight: '16px',\r\n marginTop: '25px',\r\n marginBottom: '15px',\r\n },\r\n});\r\n\r\nconst CustomerActions = (props) => {\r\n const { classes, permissions, adfitNo, customerDetails } = props;\r\n\r\n return (\r\n \r\n {permissions.includes('CanTransferAccount') && (\r\n \r\n \r\n {'Transfer Account'}\r\n \r\n \r\n )}\r\n {(permissions.includes(permissionTypes.isAdmin) ||\r\n (permissions.includes(permissionTypes.canManageVariations) &&\r\n permissions.includes(permissionTypes.canManageSuspensions))) && (\r\n \r\n \r\n {'Suspend Account'}\r\n \r\n \r\n )}\r\n {permissions.includes(permissionTypes.canManageVariations) &&\r\n (permissions.includes(permissionTypes.canCancelAllAccounts) ||\r\n permissions.includes(permissionTypes.canSetToTerm)) &&\r\n customerDetails &&\r\n customerDetails.isActive && (\r\n \r\n \r\n {'Cancel Account'}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nCustomerActions.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n permissions: PropTypes.array.isRequired,\r\n adfitNo: PropTypes.string.isRequired,\r\n customerDetails: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(CustomerActions);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"UID\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n id: \"UI-Elements\",\n transform: \"translate(-1418.000000, -2802.000000)\",\n fill: \"currentColor\"\n}, React.createElement(\"g\", {\n id: \"ic-duplicate-copy\",\n transform: \"translate(1415.000000, 2800.000000)\"\n}, React.createElement(\"g\", {\n id: \"ic-duplicate\"\n}, React.createElement(\"path\", {\n d: \"M14.8655742,3.80307422 L13.4469258,2.38442578 C13.2007857,2.13828387 12.8669475,2 12.5188516,2 L7.8125,2 C7.08761719,2 6.5,2.58761719 6.5,3.3125 L6.5,4.625 L4.3125,4.625 C3.58761719,4.625 3,5.21261719 3,5.9375 L3,14.6875 C3,15.4123828 3.58761719,16 4.3125,16 L10.4375,16 C11.1623828,16 11.75,15.4123828 11.75,14.6875 L11.75,13.375 L13.9375,13.375 C14.6623828,13.375 15.25,12.7873828 15.25,12.0625 L15.25,4.73114844 C15.25,4.38305249 15.1117161,4.04921431 14.8655742,3.80307422 Z M10.2734375,14.6875 L4.4765625,14.6875 C4.38595328,14.6875 4.3125,14.6140467 4.3125,14.5234375 L4.3125,6.1015625 C4.3125,6.01095328 4.38595328,5.9375 4.4765625,5.9375 L6.5,5.9375 L6.5,12.0625 C6.5,12.7873828 7.08761719,13.375 7.8125,13.375 L10.4375,13.375 L10.4375,14.5234375 C10.4375,14.6140467 10.3640467,14.6875 10.2734375,14.6875 Z M13.7734375,12.0625 L7.9765625,12.0625 C7.88595328,12.0625 7.8125,11.9890467 7.8125,11.8984375 L7.8125,3.4765625 C7.8125,3.38595328 7.88595328,3.3125 7.9765625,3.3125 L10.875,3.3125 L10.875,5.71875 C10.875,6.08119141 11.1688086,6.375 11.53125,6.375 L13.9375,6.375 L13.9375,11.8984375 C13.9375,11.9890467 13.8640467,12.0625 13.7734375,12.0625 L13.7734375,12.0625 Z M13.9375,5.0625 L12.1875,5.0625 L12.1875,3.3125 L12.450875,3.3125 C12.4943789,3.3125 12.5361055,3.32978125 12.5668945,3.36054297 L13.889457,4.68310547 C13.9202235,4.71387717 13.9375,4.75561093 13.9375,4.799125 L13.9375,5.0625 L13.9375,5.0625 Z\",\n id: \"Shape\"\n})))));\n\nvar SvgIcDuplicate = function SvgIcDuplicate(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: \"13px\",\n height: \"14px\",\n viewBox: \"0 0 13 14\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcDuplicate, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-duplicate.bfff17a6.svg\";\nexport { ForwardRef as ReactComponent };","import ContentLoader from 'react-content-loader';\r\nimport React from 'react';\r\n\r\n//can be created from here: http://danilowoz.com/create-content-loader/\r\nconst SkeletonLoader = () => (\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\nexport default SkeletonLoader;\r\n","import React from 'react';\r\nimport { styled, Typography } from '@material-ui/core';\r\n\r\nexport const RowContainer = styled(({ last, ...rest }) =>
    )(\r\n ({ last }) => ({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n marginBottom: last ? '0px' : '20px',\r\n })\r\n);\r\n\r\nexport const RowLeftText = styled(Typography)(({ theme }) => ({\r\n color: theme.palette.xpl.text.secondary,\r\n textAlign: 'left',\r\n marginRight: '15px',\r\n}));\r\n\r\nexport const RowRightText = styled(Typography)(({ theme }) => ({\r\n color: theme.palette.xpl.text.primary,\r\n textAlign: 'right',\r\n marginLeft: '15px',\r\n}));\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 5L5.00437 1L9 5\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIcArrowUp = function SvgIcArrowUp(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 10,\n height: 6,\n viewBox: \"0 0 10 6\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcArrowUp, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-arrow-up.226b398e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 1L5.00437 5L9 1\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIcArrowDown = function SvgIcArrowDown(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 10,\n height: 6,\n viewBox: \"0 0 10 6\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcArrowDown, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-arrow-down.840a2f3f.svg\";\nexport { ForwardRef as ReactComponent };","import { Collapse, styled } from '@material-ui/core';\r\nimport { IconButton, TextButton } from '@ds/react-components';\r\nimport { ReactComponent as ArrowUpIcon } from 'assets/icons/ic-arrow-up.svg';\r\nimport { ReactComponent as ArrowDownIcon } from 'assets/icons/ic-arrow-down.svg';\r\n\r\nexport const Container = styled('div')({\r\n minHeight: 450,\r\n});\r\n\r\nexport const TitleContainer = styled('div')({\r\n display: 'flex',\r\n});\r\n\r\nexport const Title = styled('h3')(({ theme }) => ({\r\n fontWeight: 'bold',\r\n fontSize: '26px',\r\n lineHeight: '31px',\r\n marginBottom: '10px',\r\n padding: 0,\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n}));\r\n\r\nexport const AccountTagsContainer = styled('div')({\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n '& span': {\r\n marginRight: 5,\r\n },\r\n marginBottom: '40px',\r\n});\r\n\r\nexport const CopyButtonContainer = styled('div')({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n});\r\n\r\nexport const CopyButton = styled(IconButton)({\r\n marginLeft: 3,\r\n});\r\n\r\nexport const Divider = styled('div')(({ theme }) => ({\r\n border: `1px solid ${theme.palette.xpl.stoke}`,\r\n marginBottom: '20px',\r\n}));\r\n\r\nexport const RowRightTextButton = styled(TextButton)(({ theme }) => ({\r\n color: theme.palette.xpl.text.primary,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n textAlign: 'right',\r\n}));\r\n\r\nconst getArrowStyles = (theme) => ({\r\n width: '8px',\r\n height: '4px',\r\n color: theme.palette.xpl.secondary.default,\r\n marginLeft: '8px',\r\n});\r\n\r\nexport const ExpandMoreIcon = styled(ArrowDownIcon)(({ theme }) => ({\r\n ...getArrowStyles(theme),\r\n}));\r\n\r\nexport const ExpandLessIcon = styled(ArrowUpIcon)(({ theme }) => ({\r\n ...getArrowStyles(theme),\r\n}));\r\n\r\nexport const Collapsible = styled(Collapse)(({ theme }) => ({\r\n borderRadius: '6px',\r\n backgroundColor: theme.palette.xpl.background,\r\n padding: '10px 16px 10px 16px',\r\n marginBottom: '19px',\r\n}));\r\n","import React, { Fragment, useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport { TextButton, InfoWidget, Badge } from '@ds/react-components';\r\nimport { ReactComponent as CopyIcon } from 'assets/icons/ic-duplicate.svg';\r\nimport ClipboardJS from 'clipboard';\r\nimport { isNotEmptyArray } from 'utils/misc';\r\nimport useToggle from 'hooks/useToggle';\r\nimport SkeletonLoader from './SkeletonLoader';\r\nimport {\r\n RowLeftText,\r\n RowRightText,\r\n RowContainer,\r\n} from '../common/InfoRowComponents';\r\n\r\nimport * as Styled from './PersonalInformation.styled';\r\n\r\nconst PersonalInformationPreview = (props) => {\r\n const { customerDetails, localisation, permissions } = props;\r\n\r\n const { dateFormat } = localisation.locales;\r\n\r\n const {\r\n adfitNo,\r\n businessId,\r\n name,\r\n fullName,\r\n dob,\r\n prefContact,\r\n contacts,\r\n prefAddress,\r\n addresses,\r\n firstName,\r\n isActive,\r\n cancelReason = 'Business request',\r\n customCancelReason,\r\n facilityName,\r\n } = customerDetails;\r\n\r\n const [expandContact, toggleExpandContact] = useToggle(false);\r\n const [expandAddress, toggleExpandAddress] = useToggle(false);\r\n const [clipButtonState, setClipButtonState] = useState({});\r\n\r\n const dobStr = dob && moment(dob).format(dateFormat);\r\n\r\n const { prompts } = localisation;\r\n\r\n useEffect(() => {\r\n const clipBoard = new ClipboardJS('button[data-clipboard-text]');\r\n clipBoard.on('success', (e) => {\r\n setClipButtonState((prevState) => ({\r\n ...prevState,\r\n [e.trigger.id]: 'Copied!',\r\n }));\r\n });\r\n return () => {\r\n clipBoard.destroy();\r\n };\r\n }, [setClipButtonState]);\r\n\r\n const preferredContact = useMemo(() => {\r\n if (!isNotEmptyArray(contacts)) return null;\r\n\r\n //Check if there is a preferred contact based on prefContact in customer table.\r\n if (prefContact) {\r\n const result = contacts.find((c) => c.contact === prefContact);\r\n if (result) return result;\r\n }\r\n\r\n //Check if any of the contacts are marked as preferred or else return the first one.\r\n return contacts.find((c) => c.preferred === true) || contacts[0];\r\n }, [contacts, prefContact]);\r\n\r\n const preferredAddress = useMemo(() => {\r\n if (!isNotEmptyArray(addresses)) return null;\r\n if (prefAddress) {\r\n const result = addresses.find((a) => a.addressId === prefAddress);\r\n if (result) return result;\r\n }\r\n return addresses.find((a) => a.preferred === true) || addresses[0];\r\n }, [addresses, prefAddress]);\r\n\r\n const filteredContacts = useMemo(() => {\r\n if (!isNotEmptyArray(contacts)) return [];\r\n return contacts.filter((c) => c.contactType !== 'PE');\r\n }, [contacts]);\r\n\r\n const filteredAddress = useMemo(() => {\r\n if (!isNotEmptyArray(addresses)) return [];\r\n return addresses.filter((c) => c.addressType !== 'PV');\r\n }, [addresses]);\r\n\r\n const previousAddress = useMemo(() => {\r\n if (!isNotEmptyArray(addresses)) return [];\r\n return addresses.filter((c) => c.addressType === 'PV');\r\n }, [addresses]);\r\n\r\n const getContactDisplayType = (contactType) => {\r\n if (\r\n !prompts ||\r\n !prompts.contactTypes ||\r\n !prompts.contactTypes[contactType]\r\n ) {\r\n return '';\r\n }\r\n return prompts.contactTypes[contactType] || '';\r\n };\r\n\r\n const renderContactByType = (contact) => {\r\n const { contactType, contactDetail } = contact;\r\n\r\n if (contactType === 'EM') {\r\n return {contactDetail};\r\n }\r\n return {contactDetail} ;\r\n };\r\n\r\n const getAccountStatus = (account) => {\r\n let status = null;\r\n if (!account.isActive) {\r\n status = (\r\n \r\n Cancelled\r\n \r\n );\r\n } else if (account.isSuspended) {\r\n status = (\r\n \r\n Suspended\r\n \r\n );\r\n } else {\r\n status = (\r\n \r\n Active\r\n \r\n );\r\n status = account.isFixedTerm ? (\r\n \r\n {status}\r\n Set to Term\r\n \r\n ) : (\r\n \r\n {status}\r\n Ongoing\r\n \r\n );\r\n }\r\n if (account.overdueAmount > 0) {\r\n status = (\r\n \r\n {status}\r\n Overdue\r\n \r\n );\r\n }\r\n return status;\r\n };\r\n\r\n return (\r\n \r\n {'Edit'}\r\n \r\n )\r\n }\r\n isLoading={!customerDetails.adfitNo}\r\n contentLoader={}>\r\n \r\n {name || firstName}\r\n \r\n {getAccountStatus(customerDetails)}\r\n \r\n\r\n \r\n {'Debitsucess ID'} \r\n \r\n {adfitNo}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {'Business ID'} \r\n \r\n {businessId}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {'Business Name'} \r\n {facilityName}\r\n \r\n\r\n {!isActive && (\r\n \r\n {'Cancellation reason'} \r\n \r\n {(customCancelReason &&\r\n 'Facility request -' + customCancelReason) ||\r\n cancelReason}\r\n \r\n \r\n )}\r\n\r\n \r\n\r\n \r\n {'Full name'}\r\n {fullName}\r\n \r\n\r\n \r\n {'Date of birth'}\r\n {dobStr}\r\n \r\n\r\n \r\n {'Contact'} \r\n {preferredContact ? (\r\n \r\n {renderContactByType(preferredContact)}\r\n {expandContact ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ) : (\r\n {'-'}\r\n )}\r\n \r\n\r\n \r\n {filteredContacts.map((contact, index) => (\r\n \r\n \r\n {getContactDisplayType(contact.contactType)}\r\n \r\n {renderContactByType(contact)}\r\n \r\n ))}\r\n \r\n\r\n \r\n {'Address'} \r\n {preferredAddress ? (\r\n \r\n {preferredAddress.address}\r\n {isNotEmptyArray(addresses) ? (\r\n expandAddress ? (\r\n \r\n ) : (\r\n \r\n )\r\n ) : null}\r\n \r\n ) : (\r\n {'-'}\r\n )}\r\n \r\n\r\n \r\n {filteredAddress.map((adrs) => {\r\n return (\r\n \r\n \r\n {' '}\r\n {localisation.prompts.addressType[adrs.addressType]}{' '}\r\n \r\n {adrs.address} \r\n \r\n );\r\n })}\r\n\r\n {previousAddress.length > 0 && }\r\n {previousAddress.map((adrs, index) => {\r\n return (\r\n \r\n \r\n {localisation.prompts.addressType[adrs.addressType]}{' '}\r\n \r\n {adrs.address} \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nPersonalInformationPreview.propTypes = {\r\n localisation: PropTypes.object,\r\n permissions: PropTypes.array.isRequired,\r\n customerDetails: PropTypes.object,\r\n};\r\n\r\nPersonalInformationPreview.defaultProps = {\r\n customerDetails: {},\r\n};\r\n\r\nexport default PersonalInformationPreview;\r\n","import { styled } from '@material-ui/core';\r\n\r\nexport const Container = styled('div')({});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Link } from 'react-router-dom';\r\nimport { TextButton, InfoWidget } from '@ds/react-components';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport {\r\n RowRightText,\r\n RowLeftText,\r\n RowContainer,\r\n} from '../common/InfoRowComponents';\r\n\r\nimport * as Styled from './EmergencyContactPreview.styled';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n data: {\r\n height: 40,\r\n },\r\n loader: {\r\n height: 150,\r\n width: '100%',\r\n },\r\n});\r\n\r\nconst EmergencyContactPreview = (props) => {\r\n const { classes, customerDetails, permissions } = props;\r\n const { adfitNo, contacts } = customerDetails;\r\n const anyContact = contacts && contacts[0];\r\n const emergencyContact =\r\n anyContact && contacts.find((c) => c.contactType === 'PE');\r\n const showEmergency = emergencyContact && emergencyContact.contactName;\r\n\r\n return (\r\n \r\n {showEmergency ? 'Edit' : Add}\r\n \r\n )\r\n }\r\n isLoading={!adfitNo}\r\n contentLoader={}\r\n classes={{ root: classes.root }}>\r\n {showEmergency && (\r\n \r\n \r\n {'Full Name'} \r\n \r\n {emergencyContact && emergencyContact.contactName}\r\n \r\n \r\n \r\n {'Contact'} \r\n \r\n {emergencyContact && emergencyContact.contactDetail}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nEmergencyContactPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n permissions: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(EmergencyContactPreview);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 1.5\n}, React.createElement(\"path\", {\n d: \"M1.21 11.123l4.913-5.005L1.21 1.123M11.456 1.123L6.544 6.128l4.912 4.995\"\n}));\n\nvar SvgIcCloseModal = function SvgIcCloseModal(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 13,\n height: 12,\n viewBox: \"0 0 13 12\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcCloseModal, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-close-modal.84fcae0f.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useCallback, useMemo, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {\r\n FilledButton,\r\n IconButton,\r\n TextButton,\r\n InfoWidget,\r\n} from '@ds/react-components';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport { Typography, Dialog } from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { ReactComponent as CloseSvg } from 'assets/icons/ic-close-modal.svg';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n expandButton: {\r\n color: theme.palette.common.lightText,\r\n },\r\n dialog: {\r\n maxWidth: '750px',\r\n },\r\n dialogTitleContainer: {\r\n display: 'flex',\r\n flex: '0 0 auto',\r\n flexDirection: 'row',\r\n margin: '30px 32px 0 40px',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n },\r\n closeButton: {\r\n margin: '0',\r\n color: theme.palette.common.black,\r\n },\r\n closeIcon: {\r\n width: '16px',\r\n height: '16px',\r\n },\r\n dialogContentContainer: {\r\n flex: '1 1 auto',\r\n overflowY: 'auto',\r\n maxHeight: '400px',\r\n minHeight: '40px',\r\n margin: '30px 36px 0 40px',\r\n padding: '0 14px 10px 0',\r\n },\r\n dialogText: {\r\n color: theme.palette.common.darkerText,\r\n padding: '1px 14px 1px 1px',\r\n margin: '10px 0',\r\n },\r\n dialogActionItemContainer: {\r\n flex: '0 0 auto',\r\n margin: '30px 36px 30px 40px',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n loader: {\r\n height: 150,\r\n width: '100%',\r\n },\r\n});\r\n\r\nconst AdditionalInfoPreview = (props) => {\r\n const { classes, customerDetails, localisation, className } = props;\r\n const { adfitNo, notes, loadDate } = customerDetails;\r\n const [isDialogOpen, setDialogOpen] = useState(false);\r\n const closeDialog = useCallback(() => {\r\n setDialogOpen(false);\r\n }, [setDialogOpen]);\r\n\r\n //Check if the string has just blank spaces.\r\n const isNotEmptyString = (value) => (!value ? false : !/^\\s*$/g.test(value));\r\n\r\n const formattedNotes = useMemo(() => {\r\n if (!notes) return '';\r\n return (\r\n notes\r\n .trim()\r\n .split(/(?:\\r|\\n|\\r\\n)+$/gim)\r\n // Remove lines with empty strings in them.\r\n .filter(isNotEmptyString)\r\n );\r\n }, [notes]);\r\n\r\n return (\r\n <>\r\n setDialogOpen(true)}>\r\n View All\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n isLoading={!adfitNo}\r\n contentLoader={}\r\n classes={{ root: classNames(className, classes.root) }}>\r\n \r\n {notes\r\n ? notes.substring(0, 190) + (notes.length > 190 ? '...' : '')\r\n : 'No additional information yet'}\r\n \r\n \r\n {loadDate\r\n ? 'Created ' +\r\n moment(loadDate).format(localisation.locales.dateTimeFormat)\r\n : ''}\r\n \r\n \r\n\r\n \r\n
    \r\n {'Additional Information'}\r\n \r\n \r\n \r\n
    \r\n
    \r\n {formattedNotes &&\r\n formattedNotes.map((val, index) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n \r\n {'Ok'}\r\n \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nAdditionalInfoPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n permissions: PropTypes.array.isRequired,\r\n className: PropTypes.string,\r\n localisation: PropTypes.shape({\r\n locales: PropTypes.shape({\r\n dateTimeFormat: PropTypes.string,\r\n }).isRequired,\r\n }),\r\n};\r\n\r\nexport default withStyles(styles)(AdditionalInfoPreview);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8 1.03226C11.8265 1.03226 14.9677 4.13145 14.9677 8C14.9677 11.8481 11.8513 14.9677 8 14.9677C4.15342 14.9677 1.03226 11.8528 1.03226 8C1.03226 4.15474 4.14845 1.03226 8 1.03226ZM8 0C3.58203 0 0 3.58332 0 8C0 12.4193 3.58203 16 8 16C12.418 16 16 12.4193 16 8C16 3.58332 12.418 0 8 0ZM6.83871 11.0968H7.22581V7.22581H6.83871C6.62494 7.22581 6.45161 7.05248 6.45161 6.83871V6.58065C6.45161 6.36687 6.62494 6.19355 6.83871 6.19355H8.3871C8.60087 6.19355 8.77419 6.36687 8.77419 6.58065V11.0968H9.16129C9.37506 11.0968 9.54839 11.2701 9.54839 11.4839V11.7419C9.54839 11.9557 9.37506 12.129 9.16129 12.129H6.83871C6.62494 12.129 6.45161 11.9557 6.45161 11.7419V11.4839C6.45161 11.2701 6.62494 11.0968 6.83871 11.0968ZM8 3.35484C7.4299 3.35484 6.96774 3.817 6.96774 4.3871C6.96774 4.95719 7.4299 5.41935 8 5.41935C8.5701 5.41935 9.03226 4.95719 9.03226 4.3871C9.03226 3.817 8.5701 3.35484 8 3.35484Z\"\n});\n\nvar SvgInfoCircle = function SvgInfoCircle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgInfoCircle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/info-circle.7621098e.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InfoWidget } from '@ds/react-components';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport { Typography, Grid, Tooltip, withStyles } from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { numberToCurrency, isNullOrUndefined } from 'utils/misc';\r\nimport { ReactComponent as InfoCircle } from 'assets/icons/info-circle.svg';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n '& h4': {\r\n fontWeight: 'bold',\r\n margin: '5px 0',\r\n },\r\n },\r\n error: {\r\n color: theme.palette.xpl.text.warning,\r\n fontWeight: 'normal',\r\n },\r\n smallText: {\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n headings: {\r\n color: theme.palette.xpl.text.secondary,\r\n paddingBottom: '5px',\r\n },\r\n data: {\r\n fontWeight: 'normal',\r\n paddingBottom: '10px',\r\n },\r\n overdueInfoIconContainer: {\r\n marginLeft: '4px',\r\n },\r\n overdueInfoIcon: {\r\n width: '16px',\r\n height: '16px',\r\n verticalAlign: 'middle',\r\n color: theme.palette.xpl.secondary.default,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n tooltip: {\r\n backgroundColor: theme.palette.xpl.foreground,\r\n fontSize: '12px',\r\n borderRadius: '6px',\r\n borderWidth: '1px',\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.xpl.stoke,\r\n color: theme.palette.common.black,\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.08)',\r\n padding: '11px 15px',\r\n },\r\n tooltipArrow: {\r\n color: theme.palette.common.white,\r\n '&::before': {\r\n border: `1px solid ${theme.palette.xpl.stoke}`,\r\n boxSizing: 'border-box',\r\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.08)',\r\n },\r\n },\r\n overdueBreakdownContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n fontSize: '12px',\r\n lineHeight: '20px',\r\n },\r\n overdueBreakdownItem: {\r\n display: 'flex',\r\n flex: '1 1 auto',\r\n justifyContent: 'space-between',\r\n },\r\n overdueBreakdownDivider: {\r\n borderTop: `1px solid ${theme.palette.xpl.stoke}`,\r\n margin: '6px 0 5px 0',\r\n width: '100%',\r\n },\r\n boldCurrency: {\r\n fontWeight: 'bold',\r\n marginLeft: '43px',\r\n },\r\n loader: {\r\n height: 150,\r\n width: '100%',\r\n },\r\n});\r\n\r\nconst PaymentSummaryPreview = (props) => {\r\n const { classes, customerDetails, localisation } = props;\r\n const {\r\n startDate,\r\n finishDate,\r\n numOfTerm,\r\n overdueAmount,\r\n membershipDue,\r\n catchUp,\r\n catchUpUntil,\r\n balanceToSettle,\r\n termType,\r\n defaultFeeDue,\r\n } = customerDetails;\r\n\r\n const { dateFormat } = localisation.locales;\r\n const startDateStr = startDate && moment(startDate).format(dateFormat);\r\n const finishDateStr = finishDate && moment(finishDate).format(dateFormat);\r\n\r\n const renderOverdueBreakDown = (\r\n overdueAmount,\r\n membershipDue,\r\n defaultFeeDue\r\n ) => {\r\n const dsFeeDue = overdueAmount - membershipDue - defaultFeeDue;\r\n return (\r\n
    \r\n
    \r\n \r\n {'Payments'}\r\n \r\n \r\n {numberToCurrency(membershipDue, localisation)}\r\n \r\n
    \r\n
    \r\n \r\n {'Default Fee'}\r\n \r\n \r\n {numberToCurrency(defaultFeeDue, localisation)}\r\n \r\n
    \r\n
    \r\n \r\n {'Other fees'}\r\n \r\n \r\n {numberToCurrency(dsFeeDue, localisation)}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {'Total'}\r\n \r\n \r\n {numberToCurrency(overdueAmount, localisation)}\r\n \r\n
    \r\n
    \r\n );\r\n };\r\n\r\n return (\r\n }\r\n isLoading={!customerDetails.adfitNo || balanceToSettle == null}\r\n className={classes.root}>\r\n \r\n \r\n \r\n Contract start date\r\n \r\n \r\n {startDateStr}\r\n \r\n \r\n \r\n \r\n {'Contract finish date'}\r\n \r\n \r\n {customerDetails.isActive ? 'Ongoing' : finishDateStr}\r\n \r\n \r\n \r\n Minimum term\r\n \r\n {numOfTerm} {localisation.prompts.termType[termType]}\r\n \r\n \r\n \r\n \r\n Balance to settle\r\n \r\n {`${numberToCurrency(\r\n balanceToSettle || 0,\r\n localisation\r\n )}`}\r\n \r\n {overdueAmount > 0 && (\r\n \r\n Overdue\r\n \r\n \r\n \r\n {`${numberToCurrency(overdueAmount || 0, localisation)}`}\r\n \r\n \r\n {!isNullOrUndefined(membershipDue) && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n {catchUp > 0 && (\r\n \r\n \r\n Catch up payment\r\n \r\n {`${numberToCurrency(\r\n catchUp || 0,\r\n localisation\r\n )}`}\r\n \r\n until{' '}\r\n {catchUpUntil\r\n ? `${moment(catchUpUntil).format(dateFormat)}`\r\n : 'fully paid'}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nPaymentSummaryPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(PaymentSummaryPreview);\r\n","import ContentLoader from 'react-content-loader';\r\nimport React from 'react';\r\n\r\nconst UpcomingPaymentsLoader = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default UpcomingPaymentsLoader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { OutlinedButton, InfoWidget } from '@ds/react-components';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport UpcomingPaymentsLoader from './UpcomingPaymentsLoader';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n dateText: {\r\n color: theme.palette.xpl.text.secondary,\r\n fontSize: '14px',\r\n fontWeight: 'normal',\r\n },\r\n dataRight: {\r\n textAlign: 'right',\r\n alignSelf: 'flex-end',\r\n },\r\n teaser: {\r\n color: theme.palette.xpl.text.primary,\r\n fontSize: '16px',\r\n },\r\n});\r\n\r\nconst nextPayDateFormat = 'dddd MMMM Do YYYY';\r\n\r\nconst UpcomingPaymentPreview = (props) => {\r\n const { classes, customerDetails, localisation, permissions } = props;\r\n const { adfitNo, billNext, payMethod, nextPaymentAmount } = customerDetails;\r\n const nextPayDate =\r\n payMethod && billNext && moment(billNext).format(nextPayDateFormat);\r\n const paymentType =\r\n payMethod && localisation.prompts.accountType[payMethod.accountType];\r\n const accountNo = payMethod && payMethod.accountNo;\r\n\r\n const paymentAvailable =\r\n payMethod && payMethod.found && adfitNo && nextPaymentAmount != null;\r\n\r\n const title = paymentAvailable ? 'Upcoming Payments' : 'No Upcoming Payments';\r\n const pmtDate = paymentAvailable\r\n ? `${nextPayDate} by ${paymentType} ending with ${accountNo}`\r\n : 'No payment method was found.';\r\n const pmtTeaser = paymentAvailable\r\n ? 'Next payment'\r\n : 'Information on next payment unavailable';\r\n const pmtAmount = paymentAvailable\r\n ? `${numberToCurrency(nextPaymentAmount || 0, localisation)}`\r\n : '';\r\n return (\r\n \r\n {'Pay at Business'} \r\n \r\n )\r\n }\r\n isLoading={!payMethod}\r\n contentLoader={}>\r\n \r\n \r\n {`${pmtTeaser}`}\r\n {`${pmtDate}`}\r\n \r\n \r\n {`${pmtAmount}`}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nUpcomingPaymentPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n customerDetails: PropTypes.object,\r\n localisation: PropTypes.object,\r\n permissions: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(UpcomingPaymentPreview);\r\n","export const groupTransactionsByPaymentId = (transactions) => {\r\n let resultWithPayment = [];\r\n let resultWithoutPayment = [];\r\n //If the paymentId is null, the docket would not be a combined payment\r\n const transWithoutPayment = transactions.filter((x) => x.paymentId === null);\r\n resultWithoutPayment = transWithoutPayment.map((item) => {\r\n item.isCombinedPayment = false;\r\n return item;\r\n });\r\n\r\n //If the paymentId is not null, try to combine the payments\r\n const transWithPayment = transactions.filter((x) => x.paymentId !== null);\r\n\r\n const paymentIds = transWithPayment.reduce((group, trans) => {\r\n const { paymentId } = trans;\r\n group[paymentId] = group[paymentId] ?? [];\r\n group[paymentId].push(trans);\r\n return group;\r\n }, {});\r\n\r\n for (const key in paymentIds) {\r\n const transactionsByPaymentId = paymentIds[key];\r\n // If payment only has one docket, display as normal row\r\n if (transactionsByPaymentId.length === 1) {\r\n transactionsByPaymentId[0].isCombinedPayment = false;\r\n const item = { ...transactionsByPaymentId[0] };\r\n resultWithPayment = [...resultWithPayment, item];\r\n } else {\r\n // If payment has multi dockets, display as expandable row\r\n let totalAmount = 0;\r\n\r\n const childItems = transactionsByPaymentId.map((trans) => {\r\n let item = { ...trans };\r\n item.transDateStr = '';\r\n item.transTypeStr = '';\r\n item.paymentTypeStr = '';\r\n totalAmount = totalAmount + item.amount;\r\n return item;\r\n });\r\n\r\n const firstItem = transactionsByPaymentId[0];\r\n let parentItem = { ...firstItem };\r\n parentItem.transcodeStr = 'Combined Payment';\r\n parentItem.amount = totalAmount;\r\n parentItem.isCombinedPayment = true;\r\n parentItem.__childrens = childItems;\r\n resultWithPayment = [...resultWithPayment, parentItem];\r\n }\r\n }\r\n\r\n return [...resultWithoutPayment, ...resultWithPayment].sort(\r\n (a, b) => new Date(b.transDate) - new Date(a.transDate)\r\n );\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport moment from 'moment';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Typography } from '@material-ui/core';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport { Link } from 'react-router-dom';\r\nimport Table from 'components/ui/Table';\r\nimport { TextButton, InfoWidget } from '@ds/react-components';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport { groupTransactionsByPaymentId } from 'utils/transactions';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n tableHead: {\r\n '& tr th': {\r\n padding: '0px 15px 15px 15px',\r\n },\r\n },\r\n amountPos: {\r\n color: theme.palette.xpl.green[700],\r\n },\r\n amountNeg: {\r\n color: theme.palette.xpl.message.negative.default,\r\n },\r\n loader: {\r\n height: 150,\r\n width: '100%',\r\n },\r\n transDate: {\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n});\r\n\r\nconst tableMetadata = [\r\n {\r\n id: 'transDate',\r\n renderingField: 'transDateStr',\r\n width: '10%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Date',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'paymentType',\r\n renderingField: 'paymentTypeStr',\r\n width: '20%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Payment method',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'transcode',\r\n renderingField: 'transcodeStr',\r\n width: '20%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Description',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'amount',\r\n renderingField: 'amountFld',\r\n width: '10%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Amount',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'errorCode',\r\n renderingField: 'errorCodeStr',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Details',\r\n alignment: 'left',\r\n },\r\n];\r\n\r\nconst TransactionsPreview = (props) => {\r\n const { classes, customerDetails, localisation } = props;\r\n const { adfitNo, transactions } = customerDetails;\r\n\r\n const trans = Array.isArray(transactions) ? transactions : [];\r\n const groupedTransactions = groupTransactionsByPaymentId(trans);\r\n const amountFld = (amount, classes, localisation) => (\r\n \r\n {amount < 0 ? '-' : '+'}\r\n {numberToCurrency(Math.abs(amount), localisation)}\r\n \r\n );\r\n\r\n const createRowItems = (transactions, classes, localisation) => {\r\n const { dateFormat } = localisation.locales;\r\n const overviewTableLength = 3;\r\n let result = transactions.map((item, index) => {\r\n // Date\r\n item.transDateStr = (\r\n \r\n {moment(item.transDate).format(dateFormat)}\r\n \r\n );\r\n\r\n // Payment method\r\n item.paymentTypeStr =\r\n localisation.prompts.paymentType[item.paymentType] || 'Other';\r\n\r\n // Description\r\n if (item.isCombinedPayment) {\r\n item.transcodeStr = 'Combined payment...';\r\n item.__childrens.forEach((childItem) => {\r\n childItem.transcodeStr =\r\n localisation.prompts.transactionCode[childItem.transcode];\r\n childItem.amountFld = amountFld(\r\n childItem.amount,\r\n classes,\r\n localisation\r\n );\r\n });\r\n } else {\r\n item.transcodeStr =\r\n localisation.prompts.transactionCode[item.transcode];\r\n }\r\n\r\n // Amount\r\n item.amountFld = amountFld(item.amount, classes, localisation);\r\n\r\n // Details\r\n item.errorCodeStr = localisation.prompts.transErrorCode[item.errorCode];\r\n if (item.retryCount > 0) {\r\n item.errorCodeStr = 'Payment Retry';\r\n }\r\n\r\n return item;\r\n });\r\n return result.slice(0, overviewTableLength);\r\n };\r\n\r\n const data = useMemo(\r\n () => createRowItems(groupedTransactions, classes, localisation),\r\n [classes, createRowItems, groupedTransactions, localisation, trans]\r\n );\r\n\r\n return (\r\n }\r\n actionButton={\r\n \r\n {' View All'}\r\n \r\n }\r\n isLoading={!adfitNo || transactions == null}\r\n classes={{ root: classes.root }}>\r\n \r\n \r\n );\r\n};\r\n\r\nTransactionsPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n customerDetails: PropTypes.object,\r\n};\r\n\r\nexport default withStyles(styles)(TransactionsPreview);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Link } from 'react-router-dom';\r\nimport { TextButton, InfoWidget } from '@ds/react-components';\r\nimport Table from 'components/ui/Table';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport moment from 'moment';\r\n\r\nconst styles = (theme) => ({\r\n textGray: {\r\n color: theme.palette.xpl.text.secondary,\r\n },\r\n textBlack: {\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n textBold: {\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n gridCell: {\r\n height: '40px',\r\n width: '100%',\r\n },\r\n table: {\r\n color: theme.palette.xpl.text.primary,\r\n tableLayout: 'fixed',\r\n },\r\n loader: {\r\n height: 150,\r\n width: '100%',\r\n },\r\n});\r\n\r\nconst getCallNotesForDisplay = (callNotes, localisation, classes) => {\r\n return callNotes.map((cNote) => {\r\n let callNote = { ...cNote };\r\n const dateFormat = localisation.locales.dateTimeFormat;\r\n\r\n let { notes } = callNote;\r\n\r\n callNote.notesFld = (\r\n \r\n \r\n \r\n {notes}\r\n \r\n \r\n \r\n \r\n by {callNote.fullName}\r\n \r\n \r\n \r\n );\r\n\r\n callNote.callHowFld = (\r\n \r\n \r\n {localisation.prompts.callHow[callNote.callHow]}\r\n \r\n \r\n );\r\n\r\n callNote.callWhenFld = (\r\n \r\n \r\n {moment(callNote.callWhen).format(dateFormat)}\r\n \r\n \r\n );\r\n\r\n return callNote;\r\n });\r\n};\r\n\r\nconst tableMetadata = [\r\n {\r\n id: 'callHow',\r\n renderingField: 'callHowFld',\r\n width: '15%',\r\n numeric: false,\r\n disablePadding: false,\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'notes',\r\n renderingField: 'notesFld',\r\n width: '60%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'callWhen',\r\n renderingField: 'callWhenFld',\r\n width: '25%',\r\n numeric: false,\r\n disablePadding: false,\r\n alignment: 'left',\r\n },\r\n];\r\n\r\nconst ActivitiesPreview = (props) => {\r\n const { classes, customerDetails, localisation } = props;\r\n const { adfitNo, callNotes } = customerDetails;\r\n const activities =\r\n callNotes && getCallNotesForDisplay(callNotes, localisation, classes);\r\n return (\r\n \r\n View All\r\n \r\n }\r\n isLoading={!adfitNo || callNotes == null}\r\n contentLoader={}\r\n classes={{ root: classes.root }}>\r\n \r\n \r\n );\r\n};\r\n\r\nActivitiesPreview.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n customerDetails: PropTypes.object,\r\n};\r\n\r\nexport default withStyles(styles)(ActivitiesPreview);\r\n","import { Collapse, styled } from '@material-ui/core';\r\nimport { ReactComponent as ArrowDownIcon } from 'assets/icons/ic-arrow-down.svg';\r\nimport { ReactComponent as ArrowUpIcon } from 'assets/icons/ic-arrow-up.svg';\r\nimport { TextButton } from '@ds/react-components';\r\n\r\nexport const Container = styled('div')({});\r\n\r\nexport const Collapsible = styled(Collapse)(({ theme }) => ({\r\n borderRadius: '6px',\r\n backgroundColor: theme.palette.xpl.background,\r\n padding: '10px 16px 10px 16px',\r\n marginBottom: '19px',\r\n}));\r\n\r\nconst getArrowStyles = (theme) => ({\r\n width: '8px',\r\n height: '4px',\r\n color: theme.palette.xpl.secondary.default,\r\n marginLeft: '8px',\r\n});\r\n\r\nexport const ExpandMoreIcon = styled(ArrowDownIcon)(({ theme }) => ({\r\n ...getArrowStyles(theme),\r\n}));\r\n\r\nexport const ExpandLessIcon = styled(ArrowUpIcon)(({ theme }) => ({\r\n ...getArrowStyles(theme),\r\n}));\r\n\r\nexport const RowRightTextButton = styled(TextButton)(({ theme }) => ({\r\n color: theme.palette.xpl.text.primary,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n textAlign: 'right',\r\n}));\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useToggle from 'hooks/useToggle';\r\nimport { InfoWidget } from '@ds/react-components';\r\nimport moment from 'moment';\r\nimport {\r\n RowRightText,\r\n RowLeftText,\r\n RowContainer,\r\n} from '../common/InfoRowComponents';\r\n\r\nimport * as Styled from './GuarantorDetails.styled';\r\n\r\nconst GuarantorDetails = (props) => {\r\n const { localisation, guarantorInfo } = props;\r\n\r\n const [expandContact, toggleExpandContact] = useToggle(false);\r\n\r\n const { dateFormat } = localisation.locales;\r\n\r\n const formattedDateOfBirth = useMemo(() => {\r\n if (!guarantorInfo) return null;\r\n const { dob } = guarantorInfo;\r\n return dob ? moment(dob).format(dateFormat) : null;\r\n }, [guarantorInfo, dateFormat]);\r\n\r\n const formattedDateSigned = useMemo(() => {\r\n if (!guarantorInfo) return null;\r\n const { dated } = guarantorInfo;\r\n return dated ? moment(dated).format(dateFormat) : null;\r\n }, [guarantorInfo, dateFormat]);\r\n\r\n if (!guarantorInfo) {\r\n return <> ;\r\n }\r\n\r\n const { name, relation, address, phHm, phWk } = guarantorInfo;\r\n\r\n return (\r\n \r\n \r\n \r\n {'Guarantor name'} \r\n {name || '-'} \r\n \r\n \r\n {'Relationship'} \r\n {relation || '-'} \r\n \r\n \r\n {'Date of birth'} \r\n {formattedDateOfBirth || '-'} \r\n \r\n\r\n \r\n {'Contact'} \r\n {phHm && phWk ? (\r\n \r\n {phHm || phWk}\r\n {expandContact ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ) : (\r\n {phHm || phWk || '-'}\r\n )}\r\n \r\n\r\n \r\n {phHm && (\r\n \r\n {'Home'}\r\n {phHm}\r\n \r\n )}\r\n {phWk && (\r\n \r\n {'Work'} \r\n {phWk}\r\n \r\n )}\r\n \r\n\r\n \r\n {'Address'} \r\n {address || '-'} \r\n \r\n \r\n {'Date signed'} \r\n {formattedDateSigned || '-'} \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nGuarantorDetails.propTypes = {\r\n localisation: PropTypes.object.isRequired,\r\n guarantorInfo: PropTypes.shape({\r\n name: PropTypes.string,\r\n address: PropTypes.string,\r\n dated: PropTypes.string,\r\n phHm: PropTypes.string,\r\n phWk: PropTypes.string,\r\n relation: PropTypes.string,\r\n dob: PropTypes.string,\r\n }),\r\n};\r\n\r\nGuarantorDetails.defaultProps = {\r\n guarantorInfo: null,\r\n};\r\n\r\nexport default GuarantorDetails;\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Grid, withStyles } from '@material-ui/core';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport CustomerActions from './CustomerActions';\r\nimport PersonalInformationPreview from './PersonalInformationPreview';\r\nimport EmergencyContactPreview from './EmergencyContactPreview';\r\nimport AdditionalInfoPreview from './AdditionalInfoPreview';\r\nimport PaymentSummaryPreview from './PaymentSummaryPreview';\r\nimport UpcomingPaymentPreview from './UpcomingPaymentPreview';\r\nimport TransactionsPreview from './TransactionsPreview';\r\nimport ActivitiesPreview from './ActivitiesPreview';\r\nimport GuarantorDetails from './GuarantorDetails';\r\n\r\nconst styles = (theme) => ({\r\n root: {},\r\n actionButton: {\r\n marginRight: 10,\r\n },\r\n});\r\n\r\nconst CustomerDetails = (props) => {\r\n const {\r\n classes,\r\n customerDetails,\r\n localisation,\r\n permissions,\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n getActivePayMethod,\r\n getNextPaymentAmount,\r\n getAllTransactions,\r\n getCallNotes,\r\n getMembershipDue,\r\n guarantorDetails,\r\n getGuarantorDetailsByAdfitNo,\r\n getDefaultFeeDue,\r\n } = props;\r\n\r\n const { adfitNo } = useParams();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await Promise.all([\r\n getPersonalInfo(adfitNo),\r\n getBalanceToSettle(adfitNo),\r\n getActivePayMethod(adfitNo),\r\n getNextPaymentAmount(adfitNo),\r\n getAllTransactions(adfitNo),\r\n getMembershipDue(adfitNo),\r\n getCallNotes(adfitNo),\r\n getGuarantorDetailsByAdfitNo(adfitNo),\r\n getDefaultFeeDue(adfitNo),\r\n ]);\r\n })();\r\n }, [\r\n adfitNo,\r\n getAllTransactions,\r\n getNextPaymentAmount,\r\n getActivePayMethod,\r\n getBalanceToSettle,\r\n getPersonalInfo,\r\n getCallNotes,\r\n getMembershipDue,\r\n getGuarantorDetailsByAdfitNo,\r\n getDefaultFeeDue,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n {guarantorDetails && guarantorDetails.name && (\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\nCustomerDetails.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n localisation: PropTypes.object,\r\n customerDetails: PropTypes.object,\r\n permissions: PropTypes.array.isRequired,\r\n getActivePayMethod: PropTypes.func.isRequired,\r\n getPersonalInfo: PropTypes.func.isRequired,\r\n getBalanceToSettle: PropTypes.func.isRequired,\r\n getNextPaymentAmount: PropTypes.func.isRequired,\r\n getAllTransactions: PropTypes.func.isRequired,\r\n getCallNotes: PropTypes.func.isRequired,\r\n getGuarantorDetailsByAdfitNo: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(CustomerDetails);\r\n","import { compose } from 'redux';\r\nimport withRouteParams from 'hoc/withRouteParams';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n getActivePayMethod,\r\n getCallNotes,\r\n getNextPaymentAmount,\r\n getAllTransactions,\r\n getMembershipDue,\r\n getDefaultFeeDue,\r\n} from 'ducks/customerDetails';\r\nimport { getGuarantorDetailsByAdfitNo } from 'ducks/guarantorDetails';\r\nimport { selectEntitiesByAdfitNo } from 'selectors/common';\r\nimport withScrollableTopTabs from 'hoc/withScrollableTopTabs';\r\nimport customerPageTopTabs from 'constants/customerPageTopTabs';\r\nimport CustomerDetails from './CustomerDetails';\r\n\r\nconst mapStateToProps = (state, ownProps) => ({\r\n customerDetails:\r\n state.customerDetails.adfitNo === ownProps.routeParams.adfitNo\r\n ? state.customerDetails\r\n : {},\r\n localisation: state.localisation,\r\n permissions: state.auth.permissions,\r\n guarantorDetails: selectEntitiesByAdfitNo(\r\n state.guarantorDetails,\r\n ownProps.routeParams.adfitNo\r\n ),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n getActivePayMethod,\r\n getNextPaymentAmount,\r\n getAllTransactions,\r\n getCallNotes,\r\n getMembershipDue,\r\n getDefaultFeeDue,\r\n getGuarantorDetailsByAdfitNo,\r\n};\r\n\r\nexport default compose(\r\n withScrollableTopTabs(customerPageTopTabs, 0, ['adfitNo']),\r\n withRouteParams,\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(CustomerDetails);\r\n","import { createReducer, makeActionCreator } from 'utils/reduxCreators';\r\nimport {\r\n fetchAccountInfo,\r\n fetchAllTransactions,\r\n downloadTransactionsService,\r\n} from 'services/transactions';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_ALL_TRANSACTIONS =\r\n 'transactions/RECEIVED_ALL_TRANSACTIONS';\r\nexport const RECEIVED_ACCOUNT_INFOR = 'transactions/RECEIVED_ACCOUNT_INFOR';\r\nexport const DOWNLOADED_ALL_TRANSACTIONS =\r\n 'transactions/DOWNLOADED_ALL_TRANSACTIONS';\r\nexport const REST_TRANSACTION_PAGE = 'transactions/REST_TRANSACTION_PAGE';\r\n\r\nconst initialState = {\r\n accountInfor: {},\r\n transactions: {},\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_ACCOUNT_INFOR]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n accountInfor: payload,\r\n };\r\n },\r\n [RECEIVED_ALL_TRANSACTIONS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n transactions: payload,\r\n };\r\n },\r\n [DOWNLOADED_ALL_TRANSACTIONS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n downloaded: payload,\r\n };\r\n },\r\n [REST_TRANSACTION_PAGE]: (state) => {\r\n return {\r\n ...state,\r\n transactions: {},\r\n accountInfor: {},\r\n };\r\n },\r\n});\r\n\r\nexport const getAccountInfo = (adfitNo) => async (dispatch) => {\r\n try {\r\n dispatch(updateAppLoading(true));\r\n const result = await fetchAccountInfo(adfitNo);\r\n dispatch({ type: RECEIVED_ACCOUNT_INFOR, payload: result });\r\n dispatch(updateAppLoading(false));\r\n } catch (err) {\r\n dispatch(updateAppLoading(false));\r\n throw err;\r\n }\r\n};\r\n\r\nexport const getAllTransactions = (adfitNo) => async (dispatch) => {\r\n try {\r\n dispatch(updateAppLoading(true));\r\n const result = await fetchAllTransactions(adfitNo);\r\n dispatch({ type: RECEIVED_ALL_TRANSACTIONS, payload: result });\r\n dispatch(updateAppLoading(false));\r\n } catch (err) {\r\n dispatch(updateAppLoading(false));\r\n throw err;\r\n }\r\n};\r\n\r\nexport const downloadTransactions = (adfitNo) => async (dispatch) => {\r\n try {\r\n dispatch(updateAppLoading(true));\r\n await downloadTransactionsService(adfitNo);\r\n dispatch({ type: DOWNLOADED_ALL_TRANSACTIONS, payload: {} });\r\n dispatch(updateAppLoading(false));\r\n } catch (err) {\r\n dispatch(updateAppLoading(false));\r\n throw err;\r\n }\r\n};\r\n\r\nexport const resetTransPage = makeActionCreator(REST_TRANSACTION_PAGE);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"Shape\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\");\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"UID\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n id: \"Customers-Transactions3-1-(Filters-Tick1)\",\n transform: \"translate(-1233.000000, -331.000000)\",\n fill: \"currentColor\"\n}, React.createElement(\"g\", {\n id: \"Filters\",\n transform: \"translate(250.000000, 220.000000)\"\n}, React.createElement(\"g\", {\n id: \"btns\",\n transform: \"translate(969.000000, 98.000000)\"\n}, React.createElement(\"g\", {\n id: \"btn-filter\"\n}, React.createElement(\"g\", {\n id: \"filter\",\n transform: \"translate(14.000000, 13.000000)\"\n}, React.createElement(\"path\", {\n d: \"M12.6861865,0 L1.31405764,0 C0.148174826,0 -0.440071268,1.41451953 0.38598342,2.24057422 L4.81249904,6.66864844 L4.81249904,11.375 C4.81249904,11.7881094 5.00699514,12.1771289 5.33749904,12.46875 L7.08749904,13.7557109 C7.94262014,14.3533086 9.18749904,13.7977656 9.18749904,12.7057109 L9.18749904,6.66864844 L13.6142608,2.24057422 C14.4386475,1.4161875 13.8543936,0 12.6861865,0 Z M7.87499904,6.125 L7.87499904,12.6875 L6.12499904,11.375 L6.12499904,6.125 L1.31249904,1.3125 L12.687499,1.3125 L7.87499904,6.125 Z\",\n id: \"Shape\"\n})))))));\n\nvar SvgIcFilter = function SvgIcFilter(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: \"14px\",\n height: \"14px\",\n fill: \"currentColor\",\n stroke: \"currentColor\",\n viewBox: \"0 0 14 14\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? React.createElement(\"title\", null, title) : null, _ref3, _ref4);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcFilter, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-filter.b55d92f2.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport { DatePicker, TextButton, FilledButton } from '@ds/react-components';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { ReactComponent as FilterIcon } from 'assets/icons/ic-filter.svg';\r\n\r\nconst styles = (theme) => ({\r\n filterButton: {\r\n height: '42px',\r\n width: '98px',\r\n whiteSpace: 'nowrap',\r\n },\r\n filterIcon: {\r\n fontSize: '14px',\r\n marginRight: '8px',\r\n },\r\n clearButton: {\r\n height: '42px',\r\n width: '85px',\r\n color: theme.palette.xpl.text.primary,\r\n whiteSpace: 'nowrap',\r\n fontSize: '14px',\r\n fontWeight: '500',\r\n textDecoration: 'none',\r\n },\r\n datePicker: {\r\n width: '100%',\r\n },\r\n containerGrid: {\r\n padding: '20px 8px 8px 25px',\r\n flexGrow: 1,\r\n },\r\n buttonsGrid: {\r\n marginTop: '25px',\r\n [theme.breakpoints.down('md')]: {\r\n marginTop: '8px',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n },\r\n});\r\n\r\nconst Filter = (props) => {\r\n const {\r\n classes,\r\n handleStartDateChange,\r\n startDate,\r\n startDateHelperText,\r\n handleEndDateChange,\r\n endDate,\r\n localisation,\r\n endDateHelperText,\r\n handleFilterClick,\r\n handleClearClick,\r\n } = props;\r\n\r\n const { dateFormat } = localisation.locales;\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 Clear\r\n \r\n \r\n <>\r\n \r\n {'Filter'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(Filter);\r\n","const tableMetadata = [\r\n {\r\n id: 'transDate',\r\n renderingField: 'transDateStr',\r\n width: '10%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Date',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'paymentType',\r\n renderingField: 'paymentTypeStr',\r\n width: '20%',\r\n numeric: false,\r\n disablePadding: false,\r\n label: 'Payment method',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'transcode',\r\n renderingField: 'transcodeStr',\r\n width: '20%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Description',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'amount',\r\n renderingField: 'amountFld',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: false,\r\n disablePadding: false,\r\n label: 'Amount',\r\n alignment: 'left',\r\n },\r\n {\r\n id: 'errorCode',\r\n renderingField: 'errorCodeStr',\r\n width: '10%',\r\n numeric: false,\r\n hideInMobile: true,\r\n disablePadding: false,\r\n label: 'Details',\r\n alignment: 'left',\r\n },\r\n];\r\n\r\nexport default tableMetadata;\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { useRouteMatch, useParams } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport { Divider, Grid, Typography, withStyles } from '@material-ui/core';\r\nimport { OutlinedButton, Tag, BackgroundPaper } from '@ds/react-components';\r\nimport Table from 'components/ui/Table';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport { groupTransactionsByPaymentId } from 'utils/transactions';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport Filter from './Filter';\r\nimport tableMetadata from './tableMetaData';\r\n\r\nconst styles = (theme) => ({\r\n divider: {\r\n height: 1,\r\n color: theme.palette.common.black,\r\n },\r\n data: {\r\n height: 40,\r\n },\r\n dataLeft: {\r\n '& p': {\r\n color: theme.palette.common.black,\r\n fontSize: '20px',\r\n },\r\n },\r\n dataRight: {\r\n '& p': {\r\n textAlign: 'right',\r\n fontSize: '16px',\r\n color: theme.palette.common.black,\r\n paddingRight: '20px',\r\n },\r\n },\r\n head: {\r\n backgroundColor: theme.palette.common.white,\r\n padding: '20px 8px 8px 25px',\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n\r\n nameHead: {\r\n padding: '20px 0px 30px 0px',\r\n },\r\n amountPos: {\r\n color: theme.palette.common.success,\r\n },\r\n amountNeg: {\r\n color: theme.palette.common.error,\r\n },\r\n paymentType: {\r\n color: theme.palette.common.primary,\r\n },\r\n totalPaid: {\r\n fontWeight: theme.palette.common.boldFont,\r\n },\r\n});\r\n\r\nconst Transactions = (props) => {\r\n const {\r\n getAllTransactions,\r\n getAccountInfo,\r\n transactions,\r\n downloadTransactions,\r\n localisation,\r\n classes,\r\n resetTransPage,\r\n } = props;\r\n\r\n const [transactionsState, setTransactionState] = useState({\r\n currentPage: 0,\r\n startDate: null,\r\n endDate: null,\r\n transactions: {},\r\n adfitNo: '',\r\n getTrans: false,\r\n startDateHelperText: '',\r\n endDateHelperText: '',\r\n });\r\n\r\n const match = useRouteMatch();\r\n const params = useParams();\r\n\r\n useEffect(() => {\r\n let matchSplit = match.url.split('/');\r\n let tab = matchSplit.length === 4 ? matchSplit[3] : '';\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n tab: tab,\r\n adfitNo: params.adfitNo,\r\n }));\r\n getAccountInfo(params.adfitNo);\r\n getAllTransactions(params.adfitNo);\r\n }, [params.adfitNo, match.url, getAccountInfo, getAllTransactions]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n resetTransPage();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const handlePageClick = (data) => {\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n currentPage: data.selected,\r\n }));\r\n };\r\n\r\n const checkValidTranDate = (\r\n momentFromDate,\r\n momentToDate,\r\n transactionDate\r\n ) => {\r\n const momentTransactionDate = moment(transactionDate);\r\n\r\n const isFromValid =\r\n momentFromDate && momentFromDate.isValid()\r\n ? momentTransactionDate.isSameOrAfter(momentFromDate, 'days')\r\n : true;\r\n\r\n const isToValid =\r\n momentToDate && momentToDate.isValid()\r\n ? momentTransactionDate.isSameOrBefore(momentToDate, 'days')\r\n : true;\r\n\r\n return isFromValid && isToValid;\r\n };\r\n\r\n const handleFilterClick = () => {\r\n let transData = transactions.transactions;\r\n let { accountInfor } = transactions;\r\n let filteredTrans = [];\r\n const { startDate, endDate } = transactionsState;\r\n\r\n if (!startDate && !endDate) {\r\n filteredTrans = transData;\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n transactions: {\r\n transactions: filteredTrans,\r\n accountInfor: accountInfor,\r\n },\r\n }));\r\n return;\r\n }\r\n\r\n transData.forEach((tran) => {\r\n let validTranDate = checkValidTranDate(\r\n startDate,\r\n endDate,\r\n tran.transDate\r\n );\r\n\r\n if (validTranDate) {\r\n filteredTrans.push(tran);\r\n\r\n return;\r\n }\r\n });\r\n\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n transactions: { transactions: filteredTrans, accountInfor: accountInfor },\r\n }));\r\n };\r\n\r\n const validateDate = (momentDate, dateFormat) => {\r\n if (!momentDate) return '';\r\n const formatText = (dateFormat || 'DD/MM/YYYY').toUpperCase();\r\n return !momentDate.isValid()\r\n ? `Please enter a valid date ('${formatText}')`\r\n : '';\r\n };\r\n\r\n const handleStartDateChange = (date) => {\r\n let helperText = validateDate(date, localisation.locales.datePickerFormat);\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n startDateHelperText: helperText,\r\n startDate: date,\r\n }));\r\n };\r\n\r\n const handleEndDateChange = (date) => {\r\n let helperText = validateDate(date, localisation.locales.datePickerFormat);\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n endDateHelperText: helperText,\r\n endDate: date,\r\n }));\r\n };\r\n\r\n const handleClearClick = () => {\r\n let transData = transactions.transactions;\r\n let { accountInfor } = transactions;\r\n setTransactionState((prevState) => ({\r\n ...prevState,\r\n startDate: null,\r\n endDate: null,\r\n transactions: { transactions: transData, accountInfor: accountInfor },\r\n }));\r\n };\r\n\r\n const handleOnClick = () => {\r\n downloadTransactions(transactionsState.adfitNo);\r\n };\r\n\r\n const amountFld = (amount, classes, localisation) => (\r\n \r\n {amount < 0 ? '-' : '+'}\r\n {numberToCurrency(Math.abs(amount), localisation)}\r\n \r\n );\r\n\r\n // eslint-disable-next-line no-prototype-builtins\r\n const transData = transactionsState.transactions.hasOwnProperty(\r\n 'transactions'\r\n )\r\n ? transactionsState.transactions\r\n : transactions;\r\n\r\n const { name } = Array.isArray(transData.accountInfor)\r\n ? transData.accountInfor[0]\r\n : {};\r\n const { adfitNo } = Array.isArray(transData.accountInfor)\r\n ? transData.accountInfor[0]\r\n : {};\r\n const { total } = Array.isArray(transData.accountInfor)\r\n ? transData.accountInfor[0]\r\n : {};\r\n\r\n const trans = Array.isArray(transData.transactions)\r\n ? transData.transactions\r\n : [];\r\n const groupedTransactions = groupTransactionsByPaymentId(trans);\r\n const createRowItems = (transactions, classes, localisation) => {\r\n const { dateFormat } = localisation.locales;\r\n let result = transactions.map((item, index) => {\r\n // Date\r\n item.transDateStr = (\r\n \r\n {moment(item.transDate).format(dateFormat)}\r\n \r\n );\r\n\r\n // Payment method\r\n item.paymentTypeStr = (\r\n \r\n {localisation.prompts.paymentType[item.paymentType] || 'Other'}\r\n \r\n );\r\n\r\n // Description\r\n if (item.isCombinedPayment) {\r\n item.transcodeStr = 'Combined payment';\r\n item.__childrens.forEach((childItem) => {\r\n childItem.transcodeStr =\r\n localisation.prompts.transactionCode[childItem.transcode];\r\n childItem.amountFld = amountFld(\r\n childItem.amount,\r\n classes,\r\n localisation\r\n );\r\n });\r\n } else {\r\n item.transcodeStr =\r\n localisation.prompts.transactionCode[item.transcode];\r\n }\r\n\r\n // Amount\r\n item.amountFld = amountFld(item.amount, classes, localisation);\r\n\r\n // Details\r\n item.errorCodeStr = localisation.prompts.transErrorCode[item.errorCode];\r\n if (item.retryCount > 0) {\r\n item.errorCodeStr = 'Payment Retry';\r\n }\r\n\r\n return item;\r\n });\r\n return result;\r\n };\r\n\r\n const data = useMemo(\r\n () => createRowItems(groupedTransactions, classes, localisation),\r\n [classes, createRowItems, groupedTransactions, localisation, trans]\r\n );\r\n\r\n const totalAmount =\r\n total == null ? parseFloat(0).toFixed(2) : parseFloat(total).toFixed(2);\r\n const displayName = adfitNo ? name + ', ' + adfitNo : '';\r\n return (\r\n \r\n \r\n \r\n {displayName}\r\n \r\n \r\n \r\n {'Download All'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Transactions\r\n \r\n\r\n \r\n \r\n Total paid ${totalAmount}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {trans.length} Results Found\r\n
    \r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nTransactions.propTypes = {\r\n getAllTransactions: PropTypes.func.isRequired,\r\n getAccountInfo: PropTypes.func.isRequired,\r\n transactions: PropTypes.object,\r\n downloadTransactions: PropTypes.func.isRequired,\r\n localisation: PropTypes.object.isRequired,\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(Transactions);\r\n","import { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport {\r\n getAccountInfo,\r\n getAllTransactions,\r\n downloadTransactions,\r\n resetTransPage,\r\n} from 'ducks/transactions';\r\nimport withScrollableTopTabs from 'hoc/withScrollableTopTabs';\r\nimport customerPageTopTabs from 'constants/customerPageTopTabs';\r\nimport Transactions from './Transactions';\r\n\r\nconst mapStateToProps = (state) => ({\r\n localisation: state.localisation,\r\n permissions: state.auth.permissions,\r\n transactions: state.transactions,\r\n token: state.auth.accessToken,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getAccountInfo,\r\n getAllTransactions,\r\n downloadTransactions,\r\n resetTransPage,\r\n};\r\n\r\nexport default compose(\r\n withScrollableTopTabs(customerPageTopTabs, 2, ['adfitNo']),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(Transactions);\r\n","import moment from 'moment';\r\n\r\nexport const suspensionDateStatus = {\r\n Future: 'Future',\r\n Ongoing: 'Ongoing',\r\n Expired: 'Expired',\r\n};\r\n\r\nexport const defaultStartDate = moment().add(1, 'days');\r\n\r\nexport const parameterDateFormat = 'YYYY-MM-DD';\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchSuspensionInfo = async (adfitNo, suspensionStartDate) => {\r\n const url = `v1.0/accounts/${adfitNo}/suspensions/Information?suspensionStartDate=${suspensionStartDate}`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const postSuspension = async (adfitNo, data) => {\r\n const url = `v1.0/accounts/${adfitNo}/suspensions`;\r\n const kyClient = await getKyClient();\r\n return kyClient\r\n .post(url, {\r\n json: data,\r\n })\r\n .json();\r\n};\r\n\r\nexport const fetchSuspension = async (adfitNo, scheduleSuspenseId) => {\r\n const url = `v1.0/accounts/${adfitNo}/suspensions/${scheduleSuspenseId}`;\r\n const kyClient = await getKyClient();\r\n return kyClient.get(url).json();\r\n};\r\n\r\nexport const putSuspension = async (adfitNo, scheduleSuspenseId, data) => {\r\n const url = `v1.0/accounts/${adfitNo}/suspensions/${scheduleSuspenseId}`;\r\n const kyClient = await getKyClient();\r\n return kyClient\r\n .put(url, {\r\n json: data,\r\n })\r\n .json();\r\n};\r\n","import { suspensionDateStatus } from 'constants/suspensionConstants';\r\nimport { createReducer, makeActionCreator } from 'utils/reduxCreators';\r\nimport { fetchSuspensionInfo, fetchSuspension } from 'services/suspensions';\r\nimport { updateAppLoading } from './meta';\r\n\r\nexport const RECEIVED_SUSPENSION_INFO = 'suspensions/RECEIVED_SUSPENSION_INFO';\r\nexport const RECEIVED_SUSPENSION = 'suspensions/RECEIVED_SUSPENSION';\r\nexport const UPDATE_SUSPENSION_RULE_LOADER =\r\n 'suspensions/UPDATE_SUSPENSION_RULE_LOADER';\r\n\r\nconst initialState = {\r\n suspensionInfo: {},\r\n currentSuspension: {},\r\n hasSuspensionRuleForAccount: false,\r\n canChargeForSuspension: false,\r\n suspensionRuleLoading: false,\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [RECEIVED_SUSPENSION_INFO]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n },\r\n [RECEIVED_SUSPENSION]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n currentSuspension: payload,\r\n };\r\n },\r\n [UPDATE_SUSPENSION_RULE_LOADER]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n suspensionRuleLoading: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const getSuspensionInfo = (\r\n adfitNo,\r\n canSuspendIgnoreSuspensionRules,\r\n suspensionStartDate,\r\n isMandatedSuspension\r\n) => async (dispatch) => {\r\n dispatch(updateSuspensionRuleLoading(true));\r\n try {\r\n const suspensionInfo = await fetchSuspensionInfo(\r\n adfitNo,\r\n suspensionStartDate\r\n );\r\n dispatch(updateSuspensionRuleLoading(false));\r\n const {\r\n allowedSuspensionPeriod,\r\n remainingSuspensionPeriod,\r\n suspensionFee,\r\n } = suspensionInfo;\r\n\r\n const hasSuspensionRuleForAccount = !(\r\n allowedSuspensionPeriod === null &&\r\n remainingSuspensionPeriod === null &&\r\n suspensionFee === null\r\n );\r\n\r\n dispatch({\r\n type: RECEIVED_SUSPENSION_INFO,\r\n payload: {\r\n suspensionInfo,\r\n hasSuspensionRuleForAccount,\r\n //In the following three situations, users can disregard the suspension rule and charge for suspension.\r\n //1. The user has the \"CanSuspendIgnoreSuspensionRules\" permission.\r\n //2. The facility account of the suspended user does not have a suspension rule set.\r\n //3. The modified suspension is mandated.This situation only occurs on the editing page; suspensions added through SS NEW are always non-mandated.\r\n canChargeForSuspension:\r\n canSuspendIgnoreSuspensionRules ||\r\n !hasSuspensionRuleForAccount ||\r\n isMandatedSuspension,\r\n },\r\n });\r\n } catch (e) {\r\n dispatch(updateSuspensionRuleLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n\r\nexport const getSuspension = (adfitNo, scheduleSuspenseId) => async (\r\n dispatch\r\n) => {\r\n dispatch(updateAppLoading(true));\r\n try {\r\n const suspension = await fetchSuspension(adfitNo, scheduleSuspenseId);\r\n dispatch(updateAppLoading(false));\r\n dispatch({\r\n type: RECEIVED_SUSPENSION,\r\n payload: {\r\n ...suspension,\r\n isFuture:\r\n suspension.suspensionDateStatus === suspensionDateStatus.Future,\r\n isOngoing:\r\n suspension.suspensionDateStatus === suspensionDateStatus.Ongoing,\r\n isExpired:\r\n suspension.suspensionDateStatus === suspensionDateStatus.Expired,\r\n },\r\n });\r\n return Promise.resolve(suspension);\r\n } catch (e) {\r\n dispatch(updateAppLoading(false));\r\n // Important to throw it back as it gets caught by the middleware.\r\n throw e;\r\n }\r\n};\r\n\r\nexport const updateSuspensionRuleLoading = makeActionCreator(\r\n UPDATE_SUSPENSION_RULE_LOADER\r\n);\r\n","import { parameterDateFormat } from 'constants/suspensionConstants';\r\n\r\nexport const SuspensionAlertMessageSessionStorageKey = 'SuspensionAlertMessage';\r\n\r\nexport const setSuspensionAlertMessage = (obj) => {\r\n sessionStorage.setItem(\r\n SuspensionAlertMessageSessionStorageKey,\r\n JSON.stringify(obj)\r\n );\r\n};\r\n\r\nexport const getSuspensionAlertMessage = () => {\r\n return JSON.parse(\r\n sessionStorage.getItem(SuspensionAlertMessageSessionStorageKey)\r\n );\r\n};\r\n\r\nexport const removeSuspensionAlertMessage = () => {\r\n sessionStorage.removeItem(SuspensionAlertMessageSessionStorageKey);\r\n};\r\n\r\nexport const setSuspensionWarningMessage = (title) => {\r\n setSuspensionAlertMessage({\r\n variant: 'warning',\r\n title:\r\n title ||\r\n 'The suspension does not exist or you do not have permission to access it.',\r\n });\r\n};\r\n\r\nexport const getSuspensionFormData = (formValues, defaultValues) => {\r\n const {\r\n suspensionFee,\r\n chargeForSuspension,\r\n suspensionPaymentFrequency,\r\n } = defaultValues;\r\n const formData = {\r\n suspensionStartDate:\r\n formValues.suspensionStartDate &&\r\n formValues.suspensionStartDate.format(parameterDateFormat),\r\n suspensionEndDate:\r\n formValues.suspensionEndDate &&\r\n formValues.suspensionEndDate.format(parameterDateFormat),\r\n chargeForSuspension:\r\n formValues.chargeForSuspension === undefined\r\n ? chargeForSuspension\r\n : formValues.chargeForSuspension,\r\n suspensionFee:\r\n formValues.suspensionFee === undefined\r\n ? suspensionFee\r\n : formValues.suspensionFee,\r\n suspensionPaymentFrequency:\r\n formValues.suspensionPaymentFrequency === undefined\r\n ? suspensionPaymentFrequency\r\n : formValues.suspensionPaymentFrequency,\r\n suspensionReason: formValues.suspensionReason,\r\n };\r\n return formData;\r\n};\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\n\r\nconst styles = (theme) => ({\r\n RowLeftText: {\r\n color: theme.palette.xpl.text.secondary,\r\n textAlign: 'left',\r\n display: 'inline-block',\r\n width: '200px',\r\n },\r\n RowRightText: {\r\n color: theme.palette.xpl.text.primary,\r\n textAlign: 'left',\r\n },\r\n TextRow: {\r\n padding: '4px 0',\r\n },\r\n});\r\nconst InfoWidgetTextRow = (props) => {\r\n const { classes, title, value } = props;\r\n return (\r\n
    \r\n {title}\r\n {value}\r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(InfoWidgetTextRow);\r\n","import moment from 'moment';\r\nimport React from 'react';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport { roundToTwoDecimals } from 'utils/numbers';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport { InfoWidget } from '@ds/react-components';\r\nimport InfoWidgetTextRow from '../common/InfoWidgetTextRow';\r\n\r\nconst AccountDetails = (props) => {\r\n const { accountDetails, localisation } = props;\r\n const { dateFormat } = localisation.locales;\r\n const {\r\n balanceToSettle,\r\n startDate,\r\n finishDate,\r\n numOfTerm,\r\n termType,\r\n billNext,\r\n } = accountDetails;\r\n\r\n const loaderStyle = {\r\n height: '150',\r\n width: '100%',\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\nexport default AccountDetails;\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 0C2.68652 0 0 2.68749 0 6C0 9.31444 2.68652 12 6 12C9.31348 12 12 9.31444 12 6C12 2.68749 9.31348 0 6 0ZM6 2.66129C6.56119 2.66129 7.01613 3.11623 7.01613 3.67742C7.01613 4.23861 6.56119 4.69355 6 4.69355C5.43881 4.69355 4.98387 4.23861 4.98387 3.67742C4.98387 3.11623 5.43881 2.66129 6 2.66129ZM7.35484 8.80645C7.35484 8.96678 7.22485 9.09677 7.06452 9.09677H4.93548C4.77515 9.09677 4.64516 8.96678 4.64516 8.80645V8.22581C4.64516 8.06548 4.77515 7.93548 4.93548 7.93548H5.22581V6.3871H4.93548C4.77515 6.3871 4.64516 6.2571 4.64516 6.09677V5.51613C4.64516 5.3558 4.77515 5.22581 4.93548 5.22581H6.48387C6.6442 5.22581 6.77419 5.3558 6.77419 5.51613V7.93548H7.06452C7.22485 7.93548 7.35484 8.06548 7.35484 8.22581V8.80645Z\",\n fill: \"#6A6D7D\"\n});\n\nvar SvgInfoFillCircle = function SvgInfoFillCircle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 12,\n height: 12,\n viewBox: \"0 0 12 12\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgInfoFillCircle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/info-fill-circle.d79e1a6d.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport * as moment from 'moment';\r\nimport { ReactComponent as InfoIcon } from 'assets/icons/info-fill-circle.svg';\r\n\r\nconst styles = (theme) => ({\r\n Note: {\r\n color: theme.palette.xpl.text.secondary,\r\n marginTop: '20px',\r\n fontSize: '12px',\r\n },\r\n Icon: {\r\n width: '12px',\r\n height: '12px',\r\n marginRight: '6px',\r\n verticalAlign: '-10%',\r\n },\r\n});\r\nconst SuspensionRulesNote = (props) => {\r\n const { classes, nextAnniversaryStartDate } = props;\r\n return (\r\n
    \r\n \r\n Note: Remaining Suspension Period reset on{' '}\r\n {moment(nextAnniversaryStartDate).format('DD/MM/YYYY')}.\r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionRulesNote);\r\n","import React from 'react';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport { roundToTwoDecimals } from 'utils/numbers';\r\nimport { InfoWidget } from '@ds/react-components';\r\nimport { List as ListLoader } from 'react-content-loader';\r\nimport InfoWidgetTextRow from '../common/InfoWidgetTextRow';\r\nimport SuspensionRulesNote from './SuspensionRulesNote';\r\n\r\nconst SuspensionRules = (props) => {\r\n const { suspensionInfo, localisation, suspensionRuleLoading } = props;\r\n\r\n const {\r\n allowedSuspensionPeriod,\r\n suspensionFee,\r\n nextAnniversaryStartDate,\r\n currentAnniversaryRemainingSuspension,\r\n } = suspensionInfo;\r\n\r\n const loaderStyle = {\r\n height: '130',\r\n width: '100%',\r\n };\r\n\r\n return (\r\n }>\r\n {suspensionFee !== null ? (\r\n \r\n ) : null}\r\n {allowedSuspensionPeriod !== null ? (\r\n <>\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default SuspensionRules;\r\n","import React, { useState } from 'react';\r\nimport { Alert } from '@ds/react-components';\r\nimport { withStyles } from '@material-ui/core';\r\nimport * as moment from 'moment';\r\n\r\nconst styles = (theme) => ({\r\n Title: {\r\n margin: '0px',\r\n fontWeight: '500',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n },\r\n Content: {\r\n color: theme.palette.xpl.text.secondary,\r\n textAlign: 'left',\r\n fontSize: '12px',\r\n },\r\n List: {\r\n listStyleType: 'disc',\r\n margin: '0px',\r\n padding: '0px 0px 0px 20px',\r\n },\r\n //TODO: Need update Alert in ds-react lib, then we can remove the style.\r\n Alert: {\r\n borderLeftWidth: '0px',\r\n backgroundColor: theme.palette.xpl.message.information.background,\r\n '& h3': {\r\n color: theme.palette.common.black,\r\n },\r\n '& svg': {\r\n color: theme.palette.common.black,\r\n },\r\n },\r\n});\r\n\r\nconst PleaseNote = (props) => {\r\n const { classes, localisation } = props;\r\n const { dateFormat } = localisation.locales;\r\n const [showPleaseNote, setShowPleaseNote] = useState(true);\r\n return (\r\n <>\r\n {showPleaseNote ? (\r\n {\r\n setShowPleaseNote(false);\r\n }}\r\n role=\"banner\"\r\n variant=\"success\">\r\n

    Please Note

    \r\n
    \r\n
    Suspension finish dates are inclusive.
    \r\n
    \r\n
    This means:
    \r\n
      \r\n
    • \r\n To suspend a client for one week from tomorrow, enter a start\r\n date of {moment().add(1, 'days').format(dateFormat)} and an end\r\n date of {moment().add(1, 'weeks').format(dateFormat)}.\r\n
    • \r\n
    • \r\n To suspend a client for one month from tomorrow, enter a start\r\n date of {moment().add(1, 'days').format(dateFormat)} and an end\r\n date of {moment().add(1, 'months').format(dateFormat)}.\r\n
    • \r\n
    • \r\n Suspensions not in line with payment schedule will result in\r\n pro-rata payments.\r\n
    • \r\n
    \r\n
    \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(PleaseNote);\r\n","import { isNullOrUndefined } from './misc';\r\n\r\nexport const compareCaseIgnored = (value1, value2) => {\r\n if (isNullOrUndefined(value1) || isNullOrUndefined(value2)) return false;\r\n return value1.toLowerCase() === value2.toLowerCase();\r\n};\r\n\r\nexport const isEmptyString = (value) => {\r\n return isNullOrUndefined(value) || value === '';\r\n};\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { Alert } from '@ds/react-components';\r\nimport { isEmptyString } from 'utils/strings';\r\n\r\nconst styles = (theme) => ({\r\n Title: {\r\n margin: '0px',\r\n fontWeight: '500',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n },\r\n List: {\r\n listStyleType: 'disc',\r\n margin: '0px',\r\n padding: '0px 0px 0px 20px',\r\n },\r\n});\r\n\r\nconst FormErrorAlert = (props) => {\r\n const { classes, errorMsg, setErrorMsg } = props;\r\n const { message, errors } = errorMsg;\r\n\r\n return (\r\n <>\r\n {!isEmptyString(errorMsg) ? (\r\n {\r\n setErrorMsg('');\r\n }}\r\n role=\"banner\"\r\n variant=\"error\">\r\n {typeof errorMsg === 'string' && errorMsg}\r\n {typeof errorMsg === 'object' ? (\r\n <>\r\n {' '}\r\n
    {message}
    \r\n
      \r\n {errors &&\r\n errors.map((error, index) => (\r\n
    • {`${error.message}`}
    • \r\n ))}\r\n
    \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(FormErrorAlert);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Typography, Grid, withStyles } from '@material-ui/core';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport { setSuspensionWarningMessage } from 'utils/suspensions';\r\nimport AccountDetails from './AccountDetailsPreview';\r\nimport SuspensionRules from './SuspensionRulesPreview';\r\nimport PleaseNote from './PleaseNotePreview';\r\nimport FormErrorAlert from './common/FormErrorAlert';\r\n\r\nconst styles = (theme) => ({\r\n item1: {\r\n [theme.breakpoints.up('lg')]: {\r\n order: 1,\r\n },\r\n order: 2,\r\n },\r\n item2: {\r\n [theme.breakpoints.up('lg')]: {\r\n order: 2,\r\n },\r\n order: 1,\r\n },\r\n nameHead: {\r\n padding: '15px 0px 33px 0px',\r\n fontSize: '32px',\r\n },\r\n});\r\n\r\nconst SuspensionLayout = (props) => {\r\n const [errorMsg, setErrorMsg] = useState('');\r\n const {\r\n title,\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n customerDetails,\r\n suspensionInfo,\r\n localisation,\r\n updateAppLoading,\r\n canChargeForSuspension,\r\n hasSuspensionRuleForAccount,\r\n suspensionRuleLoading,\r\n canSuspendIgnoreSuspensionRules,\r\n canManageSuspensions,\r\n classes,\r\n } = props;\r\n\r\n const { adfitNo } = useParams();\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n await Promise.all([\r\n getPersonalInfo(adfitNo),\r\n getBalanceToSettle(adfitNo),\r\n ]);\r\n })();\r\n }, [\r\n adfitNo,\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n canSuspendIgnoreSuspensionRules,\r\n ]);\r\n //if no permission, redirect user to payments page\r\n useEffect(() => {\r\n if (!canManageSuspensions && !canSuspendIgnoreSuspensionRules) {\r\n setSuspensionWarningMessage();\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n }\r\n }, [canManageSuspensions, canSuspendIgnoreSuspensionRules, adfitNo, history]);\r\n\r\n const accountDetails = {\r\n billNext: customerDetails.billNext,\r\n finishDate: customerDetails.finishDate,\r\n startDate: customerDetails.startDate,\r\n numOfTerm: customerDetails.numOfTerm,\r\n termType: customerDetails.termType,\r\n balanceToSettle: customerDetails.balanceToSettle,\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {React.cloneElement(props.children, {\r\n canSuspendIgnoreSuspensionRules,\r\n setErrorMsg,\r\n suspensionInfo,\r\n localisation,\r\n hasSuspensionRuleForAccount,\r\n updateAppLoading,\r\n canChargeForSuspension,\r\n accountDetails,\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {hasSuspensionRuleForAccount ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionLayout);\r\n","export default {\r\n Weekly: { label: 'Weekly', value: 'WK' },\r\n Fortnightly: { label: 'Fortnightly', value: 'FN' },\r\n FourWeekly: { label: 'Four-Weekly', value: 'FW' },\r\n Monthly: { label: 'Monthly', value: 'MN' },\r\n BiMonthly: { label: 'Bi-Monthly', value: 'BM' },\r\n Quarterly: { label: 'Quarterly', value: 'QT' },\r\n OneOff: { label: 'One-Off', value: 'OF' },\r\n};\r\n","import React from 'react';\r\n\r\nconst ChargeForSuspensionChx = (props) => {\r\n const { classes, register, disabled = false } = props;\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default ChargeForSuspensionChx;\r\n","import React from 'react';\r\nimport { Dropdown } from '@ds/react-components';\r\nimport { Controller } from 'react-hook-form';\r\nimport frequencyTypes from 'constants/frequencyTypes';\r\n\r\nconst SuspensionPaymentFrequencyDdl = (props) => {\r\n const { classes, control, disabled = false } = props;\r\n const options = Object.values(frequencyTypes);\r\n\r\n return (\r\n
    \r\n {\r\n return (\r\n {\r\n onChange(e.value);\r\n }}\r\n value={options.filter((option) => option.value === value)}\r\n isSearchable={false}\r\n isDisabled={disabled}\r\n />\r\n );\r\n }}\r\n />\r\n
    \r\n );\r\n};\r\n\r\nexport default SuspensionPaymentFrequencyDdl;\r\n","import React from 'react';\r\nimport { Input as FormInput } from '@ds/react-components';\r\nimport classNames from 'classnames';\r\n\r\nconst SuspensionFeeTxt = (props) => {\r\n const { classes, register, errors, disabled = false } = props;\r\n const maxSuspensionFee = 999999.99;\r\n\r\n return (\r\n \r\n
    \r\n \r\n parseFloat(value) <= maxSuspensionFee ||\r\n `Suspension fee cannot exceed ${maxSuspensionFee}`,\r\n },\r\n })}\r\n type=\"number\"\r\n error={errors.suspensionFee && errors.suspensionFee.message}\r\n step=\".01\">\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default SuspensionFeeTxt;\r\n","const styles = (theme) => ({\r\n Container: {\r\n padding: '0 0 8px 0',\r\n },\r\n FormItem: {\r\n width: '48%',\r\n padding: '0 0 16px 0',\r\n '& fieldset': {\r\n padding: '0px',\r\n margin: '0px',\r\n border: '0px',\r\n },\r\n },\r\n FormItemDisableBorder: {\r\n '& :hover': {\r\n borderColor: theme.palette.xpl.stoke,\r\n },\r\n },\r\n Checkbox: {\r\n accentColor: theme.palette.xpl.secondary.default,\r\n width: '16px',\r\n height: '16px',\r\n verticalAlign: 'middle',\r\n borderRadius: '4px',\r\n },\r\n Label: {\r\n fontWeight: '400',\r\n fontSize: '12px',\r\n padding: '0 0 0 9px',\r\n verticalAlign: 'middle',\r\n color: theme.palette.common.darkerText,\r\n },\r\n Select: {\r\n '& div[class$=\"control\"]': {\r\n height: '40px',\r\n },\r\n },\r\n});\r\n\r\nexport default styles;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { useWatch } from 'react-hook-form';\r\nimport frequencyTypes from 'constants/frequencyTypes';\r\nimport ChargeForSuspensionChx from './components/ChargeForSuspensionChx';\r\nimport SuspensionPaymentFrequencyDdl from './components/SuspensionPaymentFrequencyDdl';\r\nimport SuspensionFeeTxt from './components/SuspensionFeeTxt';\r\nimport styles from './components/styles';\r\n\r\nconst SuspensionChargeOption = (props) => {\r\n const {\r\n classes,\r\n register,\r\n control,\r\n setValue,\r\n canChargeForSuspension,\r\n currentSuspension,\r\n suspensionInfo,\r\n errors,\r\n } = props;\r\n const [\r\n disableSuspensionFeeAndFrequency,\r\n setDisableSuspensionFeeAndFrequency,\r\n ] = useState(true);\r\n const { isFuture } = currentSuspension;\r\n const enableCharegeForSuspension =\r\n (canChargeForSuspension || suspensionInfo.suspensionFee === null) &&\r\n isFuture;\r\n\r\n const watchChargeForSuspension = useWatch({\r\n control,\r\n name: 'chargeForSuspension',\r\n });\r\n\r\n useEffect(() => {\r\n //when change for suspension checkbox is disabled, the suspension fee and frequency are disabled as well.\r\n if (enableCharegeForSuspension) {\r\n if (!watchChargeForSuspension) {\r\n setValue('suspensionFee', 0);\r\n setValue('suspensionPaymentFrequency', frequencyTypes.OneOff.value);\r\n } else {\r\n const { suspensionFee, suspensionPaymentFrequency } = currentSuspension;\r\n setValue('suspensionFee', suspensionFee);\r\n setValue('suspensionPaymentFrequency', suspensionPaymentFrequency);\r\n }\r\n setDisableSuspensionFeeAndFrequency(!watchChargeForSuspension);\r\n }\r\n }, [\r\n watchChargeForSuspension,\r\n enableCharegeForSuspension,\r\n setValue,\r\n currentSuspension,\r\n ]);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionChargeOption);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\n\r\nconst styles = (theme) => ({\r\n Container: {\r\n paddingBottom: '30px',\r\n },\r\n Label: {\r\n color: theme.palette.common.darkerText,\r\n display: 'block',\r\n padding: '0px',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n marginBottom: '4px',\r\n },\r\n Textarea: {\r\n resize: 'none',\r\n width: '100%',\r\n height: '160px',\r\n borderRadius: '6px',\r\n padding: '12px',\r\n fontSize: '15px',\r\n borderColor: theme.palette.xpl.stoke,\r\n '&:focus': {\r\n outline: 'none',\r\n borderColor: theme.palette.xpl.secondary.default,\r\n },\r\n },\r\n});\r\nconst SuspensionReasonTextarea = (props) => {\r\n const { classes, register } = props;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionReasonTextarea);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.2857 2.25H12.5714V0.28125C12.5714 0.126563 12.4429 0 12.2857 0H11.7143C11.5571 0 11.4286 0.126563 11.4286 0.28125V2.25H4.57143V0.28125C4.57143 0.126563 4.44286 0 4.28571 0H3.71429C3.55714 0 3.42857 0.126563 3.42857 0.28125V2.25H1.71429C0.767857 2.25 0 3.00586 0 3.9375V16.3125C0 17.2441 0.767857 18 1.71429 18H14.2857C15.2321 18 16 17.2441 16 16.3125V3.9375C16 3.00586 15.2321 2.25 14.2857 2.25ZM14.8571 16.3125C14.8571 16.6219 14.6 16.875 14.2857 16.875H1.71429C1.4 16.875 1.14286 16.6219 1.14286 16.3125V6.75H14.8571V16.3125ZM14.8571 5.625H1.14286V3.9375C1.14286 3.62812 1.4 3.375 1.71429 3.375H14.2857C14.6 3.375 14.8571 3.62812 14.8571 3.9375V5.625ZM4 13.5H7.42857C7.74286 13.5 8 13.2469 8 12.9375V9.5625C8 9.25313 7.74286 9 7.42857 9H4C3.68571 9 3.42857 9.25313 3.42857 9.5625V12.9375C3.42857 13.2469 3.68571 13.5 4 13.5ZM4.57143 10.125H6.85714V12.375H4.57143V10.125Z\"\n});\n\nvar SvgIcCalendarDay = function SvgIcCalendarDay(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 16,\n height: 18,\n viewBox: \"0 0 16 18\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcCalendarDay, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-calendar-day.f95838c3.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState } from 'react';\r\nimport { DatePicker } from '@ds/react-components';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport { ReactComponent as CalendarIcon } from 'assets/icons/ic-calendar-day.svg';\r\nimport { IconButton, InputAdornment } from '@material-ui/core';\r\n\r\nconst TextFieldComponent = (props) => {\r\n const { InputProps, value, clearDate } = props;\r\n\r\n return (\r\n \r\n {clearDate && value ? (\r\n {\r\n e.stopPropagation();\r\n clearDate && clearDate();\r\n }}>\r\n \r\n \r\n ) : null}\r\n \r\n \r\n ),\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst SuspensionDatePicker = (props) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n return (\r\n setOpen(false)}\r\n onClick={(e) => {\r\n setOpen(!open);\r\n }}\r\n TextFieldComponent={TextFieldComponent}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport default SuspensionDatePicker;\r\n","import React, { useState } from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { defaultStartDate } from 'constants/suspensionConstants';\r\nimport { Controller } from 'react-hook-form';\r\nimport SuspensionDatePicker from './SuspensionDatePicker';\r\n\r\nconst styles = (theme) => ({\r\n Container: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n padding: '0 0 24px 0',\r\n '& >div': {\r\n width: '48%',\r\n },\r\n '& input': {\r\n cursor: 'pointer',\r\n },\r\n '& .MuiFormControl-root': {\r\n width: '100%',\r\n },\r\n '& .MuiInputAdornment-root': {\r\n color: theme.palette.xpl.secondary.default,\r\n },\r\n //The size of ripple of clear button\r\n '& .MuiIconButton-root,.MuiTouchRipple-root,.MuiIconButton-root:hover': {\r\n height: '39px',\r\n width: '39px',\r\n },\r\n },\r\n Highlight: {\r\n '& .MuiInputBase-root': {\r\n borderColor: theme.palette.xpl.secondary.default,\r\n },\r\n },\r\n});\r\nconst SuspensionDateRangePicker = (props) => {\r\n const {\r\n classes,\r\n control,\r\n setValue,\r\n localisation,\r\n getValues,\r\n errors,\r\n disableStartDate,\r\n canChargeForSuspension,\r\n minEndDate,\r\n maxEndDate,\r\n handleSelectStartDate,\r\n allowedSuspensionPeriod,\r\n } = props;\r\n\r\n const dateDisplayFormat = localisation.locales.dateFormat;\r\n const [highlightEndDate, setHighlightEndDate] = useState(false);\r\n\r\n // This variable is used to control the end date.\r\n // The end date calendar will be restricted from displaying all dates when the following conditions are simultaneously met:\r\n // 1. User cannot charge against suspension rule.\r\n // 2. allowedSuspensionPeriod of the suspension rule is configured.\r\n const isEndDateCalendarRestricted =\r\n !canChargeForSuspension && allowedSuspensionPeriod !== null;\r\n\r\n return (\r\n
    \r\n
    \r\n (\r\n {\r\n onChange(e);\r\n if (getValues('suspensionEndDate') !== null) {\r\n setValue('suspensionEndDate', null);\r\n setHighlightEndDate(true);\r\n }\r\n }}\r\n onAccept={handleSelectStartDate}\r\n format={dateDisplayFormat}\r\n label=\"Start Date\"\r\n minDate={defaultStartDate}\r\n /*Only in Edit page, the start date can be disabled when the existing start date is less than today*/\r\n disabled={disableStartDate}\r\n />\r\n )}\r\n />\r\n
    \r\n
    \r\n (\r\n {\r\n onChange(e);\r\n setHighlightEndDate(false);\r\n }}\r\n format={dateDisplayFormat}\r\n error={\r\n errors.suspensionEndDate && errors.suspensionEndDate.message\r\n }\r\n label=\"End Date\"\r\n clearDate={(e) => {\r\n setValue('suspensionEndDate', null);\r\n }}\r\n minDate={minEndDate}\r\n /*When maxDate is undefined, the datepicker will ignore this prop*/\r\n maxDate={isEndDateCalendarRestricted ? maxEndDate : undefined}\r\n />\r\n )}\r\n />\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionDateRangePicker);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { OutlinedButton } from '@ds/react-components';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\n\r\nconst styles = (theme) => ({\r\n CancelBtn: {\r\n marginLeft: '8px',\r\n },\r\n});\r\n\r\nconst SuspensionFormCancelButton = (props) => {\r\n const { isDisabled, classes } = props;\r\n\r\n const history = useHistory();\r\n const { adfitNo } = useParams();\r\n const onCancelBtnClick = (e) => {\r\n e.preventDefault();\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n };\r\n return (\r\n \r\n Cancel\r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionFormCancelButton);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { FilledButton } from '@ds/react-components';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { useForm, useWatch } from 'react-hook-form';\r\nimport { putSuspension as updateSuspension } from 'services/suspensions';\r\nimport {\r\n setSuspensionAlertMessage,\r\n getSuspensionFormData,\r\n} from 'utils/suspensions';\r\nimport * as moment from 'moment';\r\nimport SuspensionChargeOptionForEdit from '../common/SuspensionChargeOption/SuspensionChargeOptionForEdit';\r\nimport SuspensionReasonTextarea from '../common/SuspensionReasonTextarea';\r\nimport SuspensionDateRangePicker from '../common/SuspensionDateRangePicker';\r\nimport SuspensionFormCancelButton from '../common/SuspensionFormCancelButton';\r\n\r\nconst EditSuspensionForm = (props) => {\r\n const {\r\n setErrorMsg,\r\n updateAppLoading,\r\n suspensionInfo,\r\n localisation,\r\n currentSuspension,\r\n canChargeForSuspension,\r\n handleSelectStartDate,\r\n } = props;\r\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\r\n const { adfitNo, scheduleSuspenseId } = useParams();\r\n const history = useHistory();\r\n const { remainingSuspensionPeriod, allowedSuspensionPeriod } = suspensionInfo;\r\n const {\r\n handleSubmit,\r\n register,\r\n control,\r\n setValue,\r\n errors,\r\n getValues,\r\n reset,\r\n } = useForm();\r\n\r\n //set up form default values\r\n useEffect(() => {\r\n reset({\r\n ...currentSuspension,\r\n suspensionStartDate:\r\n currentSuspension.suspensionStartDate &&\r\n moment(currentSuspension.suspensionStartDate),\r\n suspensionEndDate:\r\n currentSuspension.suspensionEndDate &&\r\n moment(currentSuspension.suspensionEndDate),\r\n });\r\n }, [currentSuspension, reset]);\r\n\r\n const watchSuspensionStartDate = useWatch({\r\n control,\r\n name: 'suspensionStartDate',\r\n });\r\n\r\n //Submit the form\r\n const onSubmitHandler = (data) => {\r\n const formData = getSuspensionFormData(data, currentSuspension);\r\n setIsSubmittingForm(true);\r\n updateAppLoading(true);\r\n updateSuspension(adfitNo, scheduleSuspenseId, formData)\r\n .then((res) => {\r\n updateAppLoading(false);\r\n const suspensionAlertMessage = {\r\n variant: 'success',\r\n title: 'Suspension updated successfully.',\r\n response: res,\r\n };\r\n setSuspensionAlertMessage(suspensionAlertMessage);\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n })\r\n .catch((err) => {\r\n setIsSubmittingForm(false);\r\n updateAppLoading(false);\r\n const result = err.response.json();\r\n result\r\n .then((error) => {\r\n setErrorMsg(error);\r\n })\r\n .catch((error) => {\r\n setErrorMsg(error);\r\n });\r\n });\r\n };\r\n\r\n const editableSuspensionPeriod =\r\n (moment(currentSuspension.suspensionEndDate).diff(\r\n moment(currentSuspension.suspensionStartDate),\r\n 'days'\r\n ) || 0) + (remainingSuspensionPeriod > 0 ? remainingSuspensionPeriod : 0);\r\n const canSuspendDays =\r\n editableSuspensionPeriod > allowedSuspensionPeriod * 7\r\n ? allowedSuspensionPeriod * 7\r\n : editableSuspensionPeriod;\r\n\r\n return (\r\n
    \r\n 0\r\n ? moment(watchSuspensionStartDate).add(canSuspendDays, 'days')\r\n : undefined\r\n }\r\n {...{\r\n canChargeForSuspension,\r\n allowedSuspensionPeriod,\r\n localisation,\r\n control,\r\n setValue,\r\n getValues,\r\n errors,\r\n handleSelectStartDate,\r\n }}\r\n />\r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditSuspensionForm;\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { useWatch } from 'react-hook-form';\r\nimport ChargeForSuspensionChx from './components/ChargeForSuspensionChx';\r\nimport SuspensionPaymentFrequencyDdl from './components/SuspensionPaymentFrequencyDdl';\r\nimport SuspensionFeeTxt from './components/SuspensionFeeTxt';\r\nimport styles from './components/styles';\r\n\r\nconst SuspensionChargeOption = (props) => {\r\n const { classes, register, control, errors } = props;\r\n\r\n const watchChargeForSuspension = useWatch({\r\n control,\r\n name: 'chargeForSuspension',\r\n });\r\n\r\n return (\r\n
    \r\n \r\n {watchChargeForSuspension ? (\r\n <>\r\n \r\n \r\n \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(SuspensionChargeOption);\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { FilledButton } from '@ds/react-components';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { useForm, useWatch } from 'react-hook-form';\r\nimport * as moment from 'moment';\r\nimport { postSuspension } from 'services/suspensions';\r\nimport { defaultStartDate } from 'constants/suspensionConstants';\r\nimport {\r\n setSuspensionAlertMessage,\r\n getSuspensionFormData,\r\n} from 'utils/suspensions';\r\nimport frequencyTypes from 'constants/frequencyTypes';\r\nimport SuspensionChargeOptionForAdd from '../common/SuspensionChargeOption/SuspensionChargeOptionForAdd';\r\nimport SuspensionReasonTextarea from '../common/SuspensionReasonTextarea';\r\nimport SuspensionDateRangePicker from '../common/SuspensionDateRangePicker';\r\nimport SuspensionFormCancelButton from '../common/SuspensionFormCancelButton';\r\n\r\nconst AddSuspensionForm = (props) => {\r\n const {\r\n canSuspendIgnoreSuspensionRules,\r\n suspensionInfo,\r\n localisation,\r\n hasSuspensionRuleForAccount,\r\n updateAppLoading,\r\n setErrorMsg,\r\n canChargeForSuspension,\r\n handleSelectStartDate,\r\n accountDetails,\r\n } = props;\r\n\r\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\r\n const { adfitNo } = useParams();\r\n const history = useHistory();\r\n const {\r\n remainingSuspensionPeriod,\r\n suspensionFee,\r\n allowedSuspensionPeriod,\r\n } = suspensionInfo;\r\n const {\r\n handleSubmit,\r\n register,\r\n control,\r\n setValue,\r\n errors,\r\n getValues,\r\n reset,\r\n } = useForm();\r\n const { startDate } = accountDetails;\r\n const accountNotStarted = startDate\r\n ? moment().isBefore(moment(startDate))\r\n : false;\r\n //set up form default values\r\n const formDefaultValues = useMemo(() => {\r\n const chargeForSuspensionDefault =\r\n hasSuspensionRuleForAccount && suspensionFee !== null;\r\n return canSuspendIgnoreSuspensionRules\r\n ? {\r\n suspensionStartDate: accountNotStarted\r\n ? moment(startDate)\r\n : defaultStartDate,\r\n suspensionEndDate: null,\r\n suspensionReason: null,\r\n chargeForSuspension: false,\r\n suspensionFee: 0,\r\n suspensionPaymentFrequency: frequencyTypes.OneOff.value,\r\n }\r\n : {\r\n suspensionStartDate: accountNotStarted\r\n ? moment(startDate)\r\n : defaultStartDate,\r\n suspensionEndDate: null,\r\n suspensionReason: null,\r\n chargeForSuspension: chargeForSuspensionDefault,\r\n suspensionFee: chargeForSuspensionDefault ? suspensionFee : 0,\r\n suspensionPaymentFrequency: chargeForSuspensionDefault\r\n ? frequencyTypes.Weekly.value\r\n : frequencyTypes.OneOff.value,\r\n };\r\n }, [\r\n accountNotStarted,\r\n hasSuspensionRuleForAccount,\r\n suspensionFee,\r\n canSuspendIgnoreSuspensionRules,\r\n startDate,\r\n ]);\r\n useEffect(() => {\r\n reset(formDefaultValues);\r\n }, [formDefaultValues, reset]);\r\n\r\n const watchSuspensionStartDate = useWatch({\r\n control,\r\n name: 'suspensionStartDate',\r\n });\r\n\r\n //Submit the form\r\n const onSubmitHandler = (data) => {\r\n const formData = getSuspensionFormData(data, formDefaultValues);\r\n\r\n setIsSubmittingForm(true);\r\n updateAppLoading(true);\r\n postSuspension(adfitNo, formData)\r\n .then((res) => {\r\n updateAppLoading(false);\r\n const suspensionAlertMessage = {\r\n variant: 'success',\r\n title: 'Suspension added successfully.',\r\n response: res,\r\n };\r\n setSuspensionAlertMessage(suspensionAlertMessage);\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n })\r\n .catch((err) => {\r\n setIsSubmittingForm(false);\r\n updateAppLoading(false);\r\n console.error(err);\r\n const result = err.response.json();\r\n result.then((errorObj) => {\r\n setErrorMsg(errorObj);\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
    \r\n 0\r\n ? moment(watchSuspensionStartDate).add(\r\n remainingSuspensionPeriod - 1,\r\n 'days'\r\n )\r\n : undefined\r\n }\r\n {...{\r\n canChargeForSuspension,\r\n allowedSuspensionPeriod,\r\n handleSelectStartDate,\r\n localisation,\r\n control,\r\n setValue,\r\n getValues,\r\n errors,\r\n }}\r\n />\r\n {canChargeForSuspension || suspensionFee === null ? (\r\n \r\n ) : null}\r\n \r\n \r\n Add\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddSuspensionForm;\r\n","import React from 'react';\r\nimport { compose } from 'redux';\r\nimport withRouteParams from 'hoc/withRouteParams';\r\nimport { connect } from 'react-redux';\r\nimport { useParams, Redirect } from 'react-router-dom';\r\nimport { getPersonalInfo, getBalanceToSettle } from 'ducks/customerDetails';\r\nimport { updateAppLoading } from 'ducks/meta';\r\nimport { getSuspensionInfo, getSuspension } from 'ducks/suspensions';\r\nimport withScrollableTopTabs from 'hoc/withScrollableTopTabs';\r\nimport customerPageTopTabs from 'constants/customerPageTopTabs';\r\nimport permissionTypes from 'constants/permissionTypes';\r\nimport { AddSuspensionPage, EditSuspensionPage } from './Suspension';\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const canSuspendIgnoreSuspensionRules = state.auth.permissions.includes(\r\n permissionTypes.canSuspendIgnoreSuspensionRules\r\n );\r\n const canManageSuspensions = state.auth.permissions.includes(\r\n permissionTypes.canManageSuspensions\r\n );\r\n return {\r\n customerDetails:\r\n state.customerDetails.adfitNo === ownProps.routeParams.adfitNo\r\n ? state.customerDetails\r\n : {},\r\n suspensionInfo: state.suspensions.suspensionInfo,\r\n hasSuspensionRuleForAccount: state.suspensions.hasSuspensionRuleForAccount,\r\n canChargeForSuspension: state.suspensions.canChargeForSuspension,\r\n suspensionRuleLoading: state.suspensions.suspensionRuleLoading,\r\n currentSuspension: state.suspensions.currentSuspension,\r\n localisation: state.localisation,\r\n canSuspendIgnoreSuspensionRules,\r\n canManageSuspensions,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n getPersonalInfo,\r\n getBalanceToSettle,\r\n getSuspensionInfo,\r\n getSuspension,\r\n updateAppLoading,\r\n};\r\n\r\nexport const AddSuspension = compose(\r\n withScrollableTopTabs(customerPageTopTabs, 1, ['adfitNo']),\r\n withRouteParams,\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(AddSuspensionPage);\r\n\r\nexport const EditSuspension = compose(\r\n withScrollableTopTabs(customerPageTopTabs, 1, ['adfitNo']),\r\n withRouteParams,\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(EditSuspensionPage);\r\n\r\nexport const RedirectToSuspensionsPage = () => {\r\n const { adfitNo } = useParams();\r\n return ;\r\n};\r\n","import React, { useEffect, useCallback } from 'react';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { setSuspensionWarningMessage } from 'utils/suspensions';\r\nimport * as moment from 'moment';\r\nimport {\r\n suspensionDateStatus,\r\n defaultStartDate,\r\n parameterDateFormat,\r\n} from 'constants/suspensionConstants';\r\nimport SuspensionLayout from './SuspensionLayout';\r\nimport EditSuspensionForm from './EditSuspensionForm';\r\nimport AddSuspensionForm from './AddSuspensionForm';\r\n\r\nexport const AddSuspensionPage = (props) => {\r\n const {\r\n getSuspensionInfo,\r\n canSuspendIgnoreSuspensionRules,\r\n hasSuspensionRuleForAccount,\r\n } = props;\r\n const { adfitNo } = useParams();\r\n\r\n const handleSelectStartDate = useCallback(\r\n (startDate) =>\r\n getSuspensionInfo(\r\n adfitNo,\r\n canSuspendIgnoreSuspensionRules,\r\n startDate.format(parameterDateFormat),\r\n false\r\n ),\r\n [adfitNo, canSuspendIgnoreSuspensionRules, getSuspensionInfo]\r\n );\r\n //Load suspension rule\r\n useEffect(() => {\r\n handleSelectStartDate(defaultStartDate);\r\n }, [handleSelectStartDate]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const EditSuspensionPage = (props) => {\r\n const {\r\n getSuspension,\r\n currentSuspension,\r\n getSuspensionInfo,\r\n canSuspendIgnoreSuspensionRules,\r\n hasSuspensionRuleForAccount,\r\n } = props;\r\n const { adfitNo, scheduleSuspenseId } = useParams();\r\n const history = useHistory();\r\n const { mandate } = currentSuspension;\r\n const handleSelectStartDate = useCallback(\r\n (startDate) =>\r\n getSuspensionInfo(\r\n adfitNo,\r\n canSuspendIgnoreSuspensionRules,\r\n startDate.format(parameterDateFormat),\r\n mandate\r\n ),\r\n [adfitNo, canSuspendIgnoreSuspensionRules, getSuspensionInfo, mandate]\r\n );\r\n\r\n useEffect(() => {\r\n getSuspension(adfitNo, scheduleSuspenseId)\r\n .then((res) => {\r\n if (res === '') {\r\n setSuspensionWarningMessage();\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n } else {\r\n //Today is greater than Suspension end date\r\n if (res.suspensionDateStatus === suspensionDateStatus.Expired) {\r\n setSuspensionWarningMessage('This suspension has expired.');\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n } else {\r\n //Load suspension rule\r\n handleSelectStartDate(moment(res.suspensionStartDate));\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n setSuspensionWarningMessage();\r\n history.push(`/Customers/${adfitNo}/Payments/Suspensions`);\r\n });\r\n }, [\r\n adfitNo,\r\n scheduleSuspenseId,\r\n getSuspension,\r\n history,\r\n handleSelectStartDate,\r\n mandate,\r\n ]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import { isNotEmptyArray } from 'utils/misc';\r\nimport { getKyClient } from './client';\r\n\r\nexport const fetchCancellationReasons = async (adfitNo) => {\r\n const url = `v1.0/accounts/${adfitNo}/customcancelreasons`;\r\n const kyClient = await getKyClient();\r\n const result = await kyClient.get(url).json();\r\n return isNotEmptyArray(result)\r\n ? result.map(({ reasonName }) => reasonName)\r\n : result;\r\n};\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchCancellationReasons } from 'services/cancellationReasons';\r\nimport { isNotEmptyArray } from 'utils/misc';\r\n\r\nexport const UPDATE_CANCELLATION_REASONS =\r\n 'cancellation/UPDATE_CANCELLATION_REASON';\r\nexport const UPDATE_CURRENT_ADFIT_NO = 'cancellation/UPDATE_CURRENT_USER';\r\n\r\nconst initialState = {\r\n entities: null,\r\n currentAccountAdfitNo: null,\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [UPDATE_CANCELLATION_REASONS]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n entities: payload,\r\n };\r\n },\r\n [UPDATE_CURRENT_ADFIT_NO]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n currentAccountAdfitNo: payload,\r\n };\r\n },\r\n});\r\n\r\nexport const forceGetCancelReasons = (adfitNo) => async (dispatch) => {\r\n const formatCancelReason = (reasons) => {\r\n if (!isNotEmptyArray(reasons)) return reasons;\r\n\r\n return reasons.map((reason) => ({\r\n label: reason,\r\n value: reason,\r\n }));\r\n };\r\n\r\n const result = await fetchCancellationReasons(adfitNo);\r\n\r\n dispatch({\r\n type: UPDATE_CANCELLATION_REASONS,\r\n payload: formatCancelReason(result),\r\n });\r\n dispatch({\r\n type: UPDATE_CURRENT_ADFIT_NO,\r\n payload: adfitNo,\r\n });\r\n};\r\n\r\nexport const checkAndGetCancellationReasons =\r\n (adfitNo) => async (dispatch, getState) => {\r\n const {\r\n cancellationReasons: { currentAccountAdfitNo },\r\n } = getState();\r\n if (currentAccountAdfitNo && currentAccountAdfitNo === adfitNo) {\r\n return;\r\n }\r\n return dispatch(forceGetCancelReasons(adfitNo));\r\n };\r\n","import ky from 'ky';\r\n\r\nexport const wait = (ms = 1000) => {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n};\r\n\r\n/*\r\n * taskFn: A async function that throws an error when a retry has to be made.\r\n * interval: The max wait time in milliseconds between each retry.\r\n * retries: The max retries that need to be made before failing. Must be greater than zero.\r\n */\r\nexport const poll = async (taskFn, interval = 5000, retries = 1) => {\r\n let retriesRemaining = retries;\r\n do {\r\n try {\r\n return await taskFn();\r\n } catch (err) {\r\n // If an http error like ( 200 or 500) we assume that the server is not available and break out.\r\n if (err instanceof ky.HTTPError) {\r\n throw new Error('Something went wrong');\r\n }\r\n retriesRemaining = retriesRemaining - 1;\r\n await wait(interval);\r\n }\r\n } while (retriesRemaining >= 0);\r\n //If all the retries failed throw an error.\r\n throw new Error('Max retries reached');\r\n};\r\n","//All the stuff related to accounts which specifically doesn't have it's own table in the db ( calculated on the fly) can be put here.\r\nimport { createReducer, makeActionCreator } from 'utils/reduxCreators';\r\nimport {\r\n fetchBalanceToSettle,\r\n fetchEstimatedFinalBillDate,\r\n fetchOutstandingDsFee,\r\n fetchBalanceToSettleWithoutCancelFee,\r\n} from 'services/accountDetails';\r\n\r\n// Outstanding DsFee is different from DsFeeDue. Outstanding considers any future payments in that pay cycle as well.\r\nexport const UPDATE_OUTSTANDING_DS_FEE = 'accountMeta/OUTSTANDING_DS_FEE';\r\nexport const UPDATE_ESTIMATED_FINAL_BILL_DATE =\r\n 'accountMeta/ESTIMATED_FINAL_BILL_DATE';\r\nexport const UPDATE_BALANCE_TO_SETTLE = 'accountMeta/BALANCE_TO_SETTLE';\r\nexport const UPDATE_BALANCE_TO_SETTLE_WITHOUT_CANCEL_FEE =\r\n 'accountMeta/BALANCE_TO_SETTLE_WITHOUT_CANCEL_Fee';\r\n\r\nconst initialState = {\r\n estimatedFinalBillDate: {\r\n entities: null,\r\n currentAccountAdfitNo: '',\r\n },\r\n outstandingDsFee: {\r\n entities: null,\r\n currentAccountAdfitNo: '',\r\n },\r\n balanceToSettle: {\r\n entities: null,\r\n currentAccountAdfitNo: '',\r\n },\r\n balanceToSettleWithoutCancelFee: {\r\n entities: null,\r\n currentAccountAdfitNo: '',\r\n },\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [UPDATE_ESTIMATED_FINAL_BILL_DATE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n estimatedFinalBillDate: {\r\n entities: payload.finalDate,\r\n currentAccountAdfitNo: payload.adfitNo,\r\n },\r\n };\r\n },\r\n [UPDATE_OUTSTANDING_DS_FEE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n outstandingDsFee: {\r\n entities: payload.fee,\r\n currentAccountAdfitNo: payload.adfitNo,\r\n },\r\n };\r\n },\r\n [UPDATE_BALANCE_TO_SETTLE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n balanceToSettle: {\r\n entities: payload.balance,\r\n currentAccountAdfitNo: payload.adfitNo,\r\n },\r\n };\r\n },\r\n [UPDATE_BALANCE_TO_SETTLE_WITHOUT_CANCEL_FEE]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n balanceToSettleWithoutCancelFee: {\r\n entities: payload.balance,\r\n currentAccountAdfitNo: payload.adfitNo,\r\n },\r\n };\r\n },\r\n});\r\n\r\n// Final bill date actions.\r\n\r\nexport const updateFinalBillDate = makeActionCreator(\r\n UPDATE_ESTIMATED_FINAL_BILL_DATE\r\n);\r\n\r\nexport const getEstimatedFinalBillDate = (adfitNo) => async (dispatch) => {\r\n const finalBillDate = await fetchEstimatedFinalBillDate(adfitNo);\r\n dispatch(\r\n updateFinalBillDate({\r\n finalDate: finalBillDate,\r\n adfitNo,\r\n })\r\n );\r\n};\r\n\r\n// Outstanding DsFee Actions\r\n\r\nexport const updateOutstandingDsFee = makeActionCreator(\r\n UPDATE_OUTSTANDING_DS_FEE\r\n);\r\n\r\nexport const getOutstandingDsFee = (adfitNo) => async (dispatch) => {\r\n const { dsFeeDue } = await fetchOutstandingDsFee(adfitNo);\r\n dispatch(\r\n updateOutstandingDsFee({\r\n adfitNo,\r\n fee: dsFeeDue,\r\n })\r\n );\r\n};\r\n\r\n// Balance to settle\r\nexport const updateBalanceToSettle = makeActionCreator(\r\n UPDATE_BALANCE_TO_SETTLE\r\n);\r\n\r\nexport const getBalanceToSettle = (adfitNo) => async (dispatch) => {\r\n const result = await fetchBalanceToSettle(adfitNo);\r\n dispatch(\r\n updateBalanceToSettle({\r\n adfitNo,\r\n balance: result,\r\n })\r\n );\r\n};\r\n\r\n// Balance to settle without cancellation fee. Mainly used in cancellation.\r\n\r\nexport const updateBalanceToSettleWithOutCancelFee = makeActionCreator(\r\n UPDATE_BALANCE_TO_SETTLE_WITHOUT_CANCEL_FEE\r\n);\r\n\r\nexport const getBalanceToSettleWithoutCancelFee =\r\n (adfitNo) => async (dispatch) => {\r\n const result = await fetchBalanceToSettleWithoutCancelFee(adfitNo);\r\n dispatch(\r\n updateBalanceToSettleWithOutCancelFee({\r\n adfitNo,\r\n balance: result,\r\n })\r\n );\r\n };\r\n","import { getKyClient } from './client';\r\n\r\nexport const fetchFacilityById = async (facilityId) => {\r\n const url = `v1.0/facilities/${facilityId}`;\r\n const kyClient = await getKyClient();\r\n return await kyClient.get(url).json();\r\n};\r\n","import { normalize } from 'normalizr';\r\nimport { makeActionCreator } from 'utils/reduxCreators';\r\n\r\nexport const ADD_NORMALIZED_ENTITIES = 'normalizer/ADD_ENTITIES';\r\nexport const SET_NORMALIZED_ENTITIES = 'normalizer/SET_ENTITIES';\r\n\r\n// Use this when entities must be completely replaced.\r\nexport const setEntities = makeActionCreator(SET_NORMALIZED_ENTITIES);\r\n\r\n// Use this when entities must be deep merged instead of complete replacement.\r\nexport const setEntitiesWithNormalisation = (payload, schema) => {\r\n if (payload === null) throw new Error('Cannot normalise a null payload.');\r\n return setEntities(normalize(payload, schema));\r\n};\r\n\r\n// Use this when entities must be deep merged instead of complete replacement.\r\nexport const addEntities = makeActionCreator(ADD_NORMALIZED_ENTITIES);\r\n\r\n// Use this when entities must be deep merged instead of complete replacement.\r\nexport const addEntitiesWithNormalisation = (payload, schema) => {\r\n if (payload === null) throw new Error('Cannot normalise a null payload.');\r\n return addEntities(normalize(payload, schema));\r\n};\r\n","import { schema } from 'normalizr';\r\n\r\nexport const facilitySchema = new schema.Entity(\r\n 'facilities',\r\n {},\r\n {\r\n idAttribute: 'facilityId',\r\n }\r\n);\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport { fetchFacilityById } from 'services/facilities';\r\nimport {\r\n setEntitiesWithNormalisation,\r\n SET_NORMALIZED_ENTITIES,\r\n} from './normalizer';\r\nimport { facilitySchema } from './schemas';\r\n\r\nconst initialState = {\r\n entities: {},\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [SET_NORMALIZED_ENTITIES]: (state, { payload }) => {\r\n if (payload.entities.facilities) {\r\n return {\r\n ...state,\r\n entities: {\r\n ...payload.entities.facilities,\r\n },\r\n };\r\n }\r\n return state;\r\n },\r\n});\r\n\r\nexport const getFacilityById = (facilityId) => async (dispatch, getState) => {\r\n const facility = await fetchFacilityById(facilityId);\r\n dispatch(setEntitiesWithNormalisation(facility, facilitySchema));\r\n};\r\n\r\nexport const getFacilityByAdfitNo = (adfitNo) => async (dispatch, getState) => {\r\n const { customerDetails } = getState();\r\n //Ask for an api that can get the facility by the adfitNo directly.\r\n if (customerDetails.adfitNo !== adfitNo) {\r\n throw new Error('Different Account loaded');\r\n }\r\n const { facility: facilityId } = customerDetails;\r\n return dispatch(getFacilityById(facilityId));\r\n};\r\n","import { createSelector } from 'reselect';\r\n\r\nconst getCustomerDetails = (state, adfitNo) =>\r\n state.customerDetails &&\r\n (state.customerDetails.adfitNo === adfitNo ? state.customerDetails : null);\r\n\r\nconst getFacilities = (state) => state.facilities.entities;\r\n\r\nexport const makeSelectFacilityByAdfitNo = () => {\r\n return createSelector(\r\n [getCustomerDetails, getFacilities],\r\n (account, facilities) => {\r\n if (!account) return null;\r\n const { facility: facilityId } = account;\r\n return facilities[facilityId];\r\n }\r\n );\r\n};\r\n","export default {\r\n CANCEL_STRAIGHT_DOWN: 0,\r\n SET_TO_TERM: 1,\r\n COLLECT_OVERDUE: 2,\r\n COLLECT_DS_FEE: 3,\r\n COLLECT_CANCELLATION_FEE: 4,\r\n WITH_NOTICE_PERIOD: 5,\r\n CHARGE_BACK_DS_FEE: 6,\r\n};\r\n","import PropTypes from 'prop-types';\r\n\r\nconst commonPropTypes = {\r\n cancellationReasons: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n })\r\n ),\r\n localisation: PropTypes.object.isRequired,\r\n isUpdatingAccount: PropTypes.bool.isRequired,\r\n onFormSubmit: PropTypes.func.isRequired,\r\n adfitNo: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n recentNotClearedPayment: PropTypes.bool.isRequired,\r\n estimatedFinalBillDate: PropTypes.string,\r\n account: PropTypes.shape({\r\n outsideTerm: PropTypes.bool.isRequired,\r\n cancelFee: PropTypes.number.isRequired,\r\n overdueAmount: PropTypes.number.isRequired,\r\n facility: PropTypes.string.isRequired,\r\n isTermIdentified: PropTypes.bool.isRequired,\r\n hasPy: PropTypes.bool.isRequired,\r\n }).isRequired,\r\n balanceToSettleWithoutCancelFee: PropTypes.number,\r\n facility: PropTypes.shape({\r\n name: PropTypes.string,\r\n industryType: PropTypes.string.isRequired,\r\n }).isRequired,\r\n cancelDaysNotice: PropTypes.number.isRequired,\r\n permissions: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nexport default commonPropTypes;\r\n","import { styled } from '@material-ui/core';\r\n\r\nexport const LabelContainer = styled('div')({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n verticalAlign: 'top',\r\n});\r\n\r\nexport const SubLabelContainer = styled('div')(({ theme }) => ({\r\n fontSize: '12px',\r\n color: theme.palette.common.lightText,\r\n}));\r\n\r\nexport const SubLabel = styled('p')({\r\n padding: 0,\r\n margin: 0,\r\n});\r\n\r\nexport const Label = styled('p')({\r\n fontSize: '14px',\r\n padding: 0,\r\n margin: 0,\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Controller } from 'react-hook-form';\r\nimport { isNotEmptyArray } from 'utils/misc';\r\nimport { RadioButton, RadioButtonGroup } from '@ds/react-components';\r\nimport * as Styled from './CancellationType.styled';\r\n\r\nconst CancellationType = (props) => {\r\n const { cancellationOptions, formControl } = props;\r\n\r\n return (\r\n (\r\n {\r\n onChange(parseInt(newValue));\r\n }}\r\n value={value}>\r\n \r\n {cancellationOptions.map(\r\n ({ label, subLabels, value: optionValue }) => (\r\n \r\n \r\n {label}\r\n \r\n \r\n {subLabels.map((val, index) => (\r\n {val}\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\nCancellationType.propTypes = {\r\n cancellationOptions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n subLabels: PropTypes.arrayOf[PropTypes.string],\r\n value: PropTypes.oneOfType[(PropTypes.string, PropTypes.number)],\r\n })\r\n ).isRequired,\r\n formControl: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default CancellationType;\r\n","import ContentLoader from 'react-content-loader';\r\nimport React from 'react';\r\nimport { BackgroundPaper } from '@ds/react-components';\r\nimport { styled, Typography } from '@material-ui/core';\r\n\r\nexport const AccountName = styled((props) => (\r\n \r\n))(({ theme }) => ({\r\n marginTop: '18px',\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const Paper = styled(BackgroundPaper)({\r\n maxWidth: '910px',\r\n minHeight: '50px',\r\n marginTop: '18px',\r\n height: 'fit-content',\r\n});\r\n\r\nexport const PaperHeader = styled('div')(({ theme }) => ({\r\n padding: '18px 32px',\r\n borderBottom: `1px solid ${theme.palette.common.athensGray}`,\r\n textAlign: 'left',\r\n color: theme.palette.common.black,\r\n fontWeight: 'normal',\r\n}));\r\n\r\nexport const PaperBody = styled('div')({\r\n padding: '18px 32px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nexport const PaperHeaderText = styled((props) => (\r\n \r\n))({\r\n fontWeight: '400',\r\n});\r\n\r\nexport const LoaderHeader = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const CancellationLoaderContainer = styled('div')(({ theme }) => ({\r\n maxWidth: '280px',\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: '400px',\r\n },\r\n}));\r\n\r\n// created at - http://danilowoz.com/create-content-loader/\r\nexport const CancellationLoader = (props) => (\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 { styled } from '@material-ui/core';\r\nimport { FilledButton, OutlinedButton, Dropdown } from '@ds/react-components';\r\nimport {\r\n Paper,\r\n PaperBody,\r\n PaperHeader,\r\n PaperHeaderText,\r\n} from '../../../Cancellation.styled';\r\n\r\nexport { Paper, PaperHeader, PaperHeaderText };\r\n\r\nexport const PaperBodyOverload = styled(({ loading, ...other }) => (\r\n \r\n))(({ loading }) => ({\r\n padding: '2px 32px 16px 32px',\r\n opacity: loading ? 0.5 : 1,\r\n pointerEvents: loading ? 'none' : 'initial',\r\n}));\r\n\r\nexport const ActionButtonContainer = styled('div')({\r\n display: 'flex',\r\n marginTop: '18px',\r\n});\r\n\r\nexport const BackButton = styled(OutlinedButton)({\r\n marginLeft: '16px',\r\n});\r\n\r\nexport const ConfirmSubmissionButton = styled(FilledButton)({\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport const InputWrapper = styled('div')({\r\n margin: '16px 0',\r\n});\r\n\r\nexport const CancelReasonDropdown = styled(Dropdown)({\r\n maxWidth: '390px',\r\n});\r\n\r\nexport const LoadingConfirmTextContainer = styled('div')({\r\n marginLeft: '1px',\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\nimport { Controller } from 'react-hook-form';\r\nimport { isNotEmptyArray } from 'utils/misc';\r\nimport CancellationType from '../CancellationType';\r\nimport * as Styled from './FormLayout.styled';\r\n\r\nconst FormLayout = (props) => {\r\n const {\r\n children,\r\n onSubmit,\r\n cancellationReasons,\r\n formControl,\r\n isSubmittingForm,\r\n adfitNo,\r\n cancellationOptions,\r\n dataTestId,\r\n } = props;\r\n\r\n const history = useHistory();\r\n\r\n return (\r\n
    \r\n \r\n \r\n {'Cancel Account'}\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n {isNotEmptyArray(cancellationReasons) && (\r\n \r\n (\r\n \r\n onChange(selectedObject ? selectedObject.value : null)\r\n }\r\n isSearchable={false}\r\n isDisabled={isSubmittingForm}\r\n isClearable={true}\r\n />\r\n )}\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {isSubmittingForm ? (\r\n <>\r\n \r\n {'Confirm'}\r\n \r\n \r\n \r\n ) : (\r\n 'Confirm'\r\n )}\r\n \r\n history.push(`/Customers/${adfitNo}/Overview`)}\r\n type={'none'}\r\n >\r\n {'Back'}\r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nFormLayout.InputWrapper = Styled.InputWrapper;\r\n\r\nFormLayout.propTypes = {\r\n onSubmit: PropTypes.func.isRequired,\r\n formControl: PropTypes.object.isRequired,\r\n cancellationReasons: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n })\r\n ),\r\n cancellationOptions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n subLabel: PropTypes.string,\r\n value: PropTypes.number,\r\n })\r\n ).isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n isSubmittingForm: PropTypes.bool,\r\n adfitNo: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n dataTestId: PropTypes.string,\r\n};\r\n\r\nFormLayout.defaultProps = {\r\n isSubmittingForm: false,\r\n cancellationReasons: [],\r\n dataTestId: 'form-layout',\r\n};\r\n\r\nexport default FormLayout;\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 23C0 10.3021 10.2983 0 23 0C35.7017 0 46 10.3021 46 23C46 35.7054 35.7017 46 23 46C10.2983 46 0 35.7054 0 23ZM43.0323 23.0001C43.0323 11.878 34.0012 2.96784 23 2.96784C11.9268 2.96784 2.96777 11.945 2.96777 23.0001C2.96777 34.077 11.9411 43.0324 23 43.0324C34.0725 43.0324 43.0323 34.0634 43.0323 23.0001ZM21.9342 11.1291H24.0654C24.6981 11.1291 25.2037 11.656 25.1773 12.2883L24.5281 27.869C24.5033 28.4651 24.0129 28.9355 23.4162 28.9355H22.5834C21.9868 28.9355 21.4963 28.465 21.4715 27.869L20.8223 12.2883C20.796 11.656 21.3015 11.1291 21.9342 11.1291ZM20.4033 33.3871C20.4033 31.9529 21.5659 30.7903 23.0001 30.7903C24.4343 30.7903 25.5969 31.9529 25.5969 33.3871C25.5969 34.8212 24.4343 35.9839 23.0001 35.9839C21.5659 35.9839 20.4033 34.8212 20.4033 33.3871Z\",\n fill: \"currentColor\"\n});\n\nvar SvgIcAlert = function SvgIcAlert(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 18,\n height: 18,\n viewBox: \"0 0 46 46\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcAlert, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-alert.2971da09.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport { styled, Dialog, Typography, withStyles } from '@material-ui/core';\r\nimport { OutlinedButton } from '@ds/react-components';\r\nimport { ReactComponent as AlertIcon } from 'assets/icons/ic-alert.svg';\r\n\r\nexport const ConfirmDialog = withStyles({\r\n paperScrollPaper: {\r\n maxWidth: '300px',\r\n },\r\n root: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n },\r\n})(Dialog);\r\n\r\nexport const DialogContentContainer = styled('div')({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: '28px',\r\n});\r\n\r\nexport const DangerIcon = styled(AlertIcon)({\r\n width: '46px',\r\n height: '46px',\r\n color: '#CF3341',\r\n});\r\n\r\nexport const Title = styled((props) => (\r\n \r\n))(({ theme }) => ({\r\n fontWeight: 'bold',\r\n color: theme.palette.common.black,\r\n marginTop: '12px',\r\n display: 'inline-block',\r\n}));\r\n\r\nexport const ContentTextContainer = styled('div')({\r\n textAlign: 'center',\r\n marginTop: '8px',\r\n display: 'inline-block',\r\n width: '100%',\r\n});\r\n\r\nexport const ContentText = styled((props) => (\r\n \r\n))(({ theme }) => ({\r\n fontWeight: 'normal',\r\n color: theme.palette.common.lightText,\r\n padding: 0,\r\n}));\r\n\r\nexport const ActionButtonContainer = styled('div')({\r\n display: 'flex',\r\n marginTop: '18px',\r\n});\r\n\r\nexport const NoButton = styled(OutlinedButton)({\r\n marginLeft: '16px',\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FilledButton } from '@ds/react-components';\r\n\r\nimport * as Styled from './ConfirmationModal.styled';\r\n\r\nconst ConfirmationModal = (props) => {\r\n const { isOpen, onCancelAccountClick, onCloseClick, displayText } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {'Confirmation'}\r\n \r\n {displayText.map((text) => (\r\n {text} \r\n ))}\r\n \r\n \r\n \r\n {'Confirm'}\r\n \r\n \r\n {'Cancel'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nConfirmationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onCancelAccountClick: PropTypes.func.isRequired,\r\n onCloseClick: PropTypes.func.isRequired,\r\n displayText: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nConfirmationModal.defaultProps = {\r\n displayText: [],\r\n};\r\n\r\nexport default ConfirmationModal;\r\n","export default {\r\n HEALTH: 'HE',\r\n FITNESS: 'FN',\r\n};\r\n","import { roundToTwoDecimals } from 'utils/numbers';\r\nimport { checkIfNzHealthAndFitness } from './cancellationUtils';\r\n\r\n// Cancellation Fee Validator\r\nexport const getCancellationFeeValidators = (\r\n getOtherFormValues,\r\n {\r\n cancelFee: cancelFeeLimit,\r\n balanceToSettleWithoutCancelFee,\r\n industryType,\r\n country,\r\n isBiPartite,\r\n }\r\n) => {\r\n const isNzHealthAndFitness = checkIfNzHealthAndFitness(industryType, country);\r\n\r\n // If the cancellation fee limit is zero or null then the maximum amount is 500.\r\n const cancelFeeCheckLimit = cancelFeeLimit || 500;\r\n\r\n return {\r\n //Cancellation fee minimum value has to $1 for it be processed.\r\n nonNzHealthAndFitness: (value) => {\r\n if (isNzHealthAndFitness) return true;\r\n //Skip other threshold when account is biPartite by assigning minComparisonAmount to balanceToSettleWithoutCancelFee\r\n const minComparisonAmount = isBiPartite\r\n ? balanceToSettleWithoutCancelFee\r\n : Math.min(cancelFeeCheckLimit, balanceToSettleWithoutCancelFee);\r\n\r\n switch (minComparisonAmount) {\r\n case cancelFeeCheckLimit:\r\n return (\r\n value <= cancelFeeCheckLimit ||\r\n `Cancellation fee must not exceed $${cancelFeeCheckLimit.toFixed(\r\n 2\r\n )}`\r\n );\r\n case balanceToSettleWithoutCancelFee:\r\n if (!balanceToSettleWithoutCancelFee) return true;\r\n return (\r\n value <= balanceToSettleWithoutCancelFee ||\r\n `Cancellation fee must not exceed the balance to settle amount of $${balanceToSettleWithoutCancelFee.toFixed(\r\n 2\r\n )}`\r\n );\r\n default:\r\n return true;\r\n }\r\n },\r\n // If NZ HnF industry then the cancellation fee has to be less than $150 and less than 25% of balance to settle.\r\n nzHealthAndFitness: (value) => {\r\n if (!isNzHealthAndFitness) return true;\r\n const nzHfLimit = 150;\r\n //Skip other threshold when account is biPartite by assigning minComparisonAmount to balanceToSettleWithoutCancelFee\r\n const minComparisonAmount = isBiPartite\r\n ? balanceToSettleWithoutCancelFee\r\n : Math.min(\r\n cancelFeeCheckLimit,\r\n 0.25 * balanceToSettleWithoutCancelFee,\r\n nzHfLimit\r\n );\r\n switch (minComparisonAmount) {\r\n case cancelFeeCheckLimit:\r\n return (\r\n value <= cancelFeeCheckLimit ||\r\n `Cancellation fee must not exceed $${cancelFeeCheckLimit.toFixed(\r\n 2\r\n )}`\r\n );\r\n case nzHfLimit:\r\n return (\r\n value <= nzHfLimit || `Cancellation fee must not exceed $150.00`\r\n );\r\n\r\n case 0.25 * balanceToSettleWithoutCancelFee:\r\n // If the balance to settle is $1, then it might contradict the minimum value being $1. This is expected behaviour.\r\n return (\r\n value <=\r\n roundToTwoDecimals(0.25 * balanceToSettleWithoutCancelFee) ||\r\n `Cancellation fee must not exceed $${roundToTwoDecimals(\r\n 0.25 * balanceToSettleWithoutCancelFee\r\n )} which is 25% of the balance to settle amount`\r\n );\r\n case balanceToSettleWithoutCancelFee:\r\n // If the balance to settle is $1, then it might contradict the minimum value being $1. This is expected behaviour.\r\n return (\r\n value <= roundToTwoDecimals(balanceToSettleWithoutCancelFee) ||\r\n `Cancellation fee must not exceed the balance to settle amount of $${roundToTwoDecimals(\r\n balanceToSettleWithoutCancelFee\r\n )}`\r\n );\r\n default:\r\n return true;\r\n }\r\n },\r\n };\r\n};\r\n","import { compareCaseIgnored } from 'utils/strings';\r\nimport industryTypes from 'constants/industryTypes';\r\nimport { isNullOrUndefined } from 'utils/misc';\r\n\r\n// Standard of 10 days for NZ account and 30 for rest of the world.\r\nexport const getCancelDaysNotice = (configuredDaysNotice, country) => {\r\n // Zero is a valid value.\r\n if (!isNullOrUndefined(configuredDaysNotice)) return configuredDaysNotice;\r\n if (compareCaseIgnored(country.trim(), 'NZ')) return 10;\r\n return 30;\r\n};\r\n\r\nexport const checkIfNzHealthAndFitness = (industryType, country) =>\r\n (compareCaseIgnored(industryType, industryTypes.HEALTH) ||\r\n compareCaseIgnored(industryType, industryTypes.FITNESS)) &&\r\n compareCaseIgnored(country.trim(), 'NZ');\r\n","import { styled } from '@material-ui/core';\r\nimport { Alert, Input, FormLabel } from '@ds/react-components';\r\n\r\nexport const FormContainer = styled('div')({});\r\n\r\nexport const InfoAlert = styled(Alert)({\r\n marginTop: '18px',\r\n maxWidth: '910px',\r\n});\r\n\r\nexport const FormInput = styled(Input)({\r\n maxWidth: '380px',\r\n});\r\n\r\nexport const LabelContainer = styled('div')({\r\n marginBottom: '8px',\r\n});\r\n\r\nexport const CancellationFeeLabel = styled(FormLabel)({\r\n marginBottom: 0,\r\n});\r\n\r\nexport const CancellationFeeSideText = styled('span')(({ theme }) => ({\r\n fontSize: '12px',\r\n color: theme.palette.common.lightText,\r\n fontStyle: 'italic',\r\n lineHeight: '17px',\r\n fontWeight: '400',\r\n textShadow: 0,\r\n}));\r\n\r\nexport const CancellationFeeSubLabel = styled('p')(({ theme }) => ({\r\n fontSize: '12px',\r\n color: theme.palette.common.lightText,\r\n padding: '0',\r\n margin: 0,\r\n lineHeight: '14px',\r\n}));\r\n","import { styled } from '@material-ui/core';\r\nimport { DatePicker } from '@ds/react-components';\r\n\r\nexport const NoticePeriodWrapper = styled('div')({});\r\n\r\nexport const NoticePeriodStartDatePicker = styled(DatePicker)({\r\n width: '166px',\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormError } from '@ds/react-components';\r\nimport moment from 'moment';\r\n\r\nimport * as Styled from './NoticePeriod.styled';\r\n\r\nconst NoticePeriod = (props) => {\r\n const {\r\n cancelDaysNotice,\r\n formControl,\r\n isSubmittingForm,\r\n dateDisplayFormat,\r\n noticeErrors,\r\n } = props;\r\n\r\n // If the cancel days is zero this option is still shown.\r\n const maxPastDate = useMemo(\r\n () =>\r\n cancelDaysNotice === 0\r\n ? moment()\r\n : moment().subtract(cancelDaysNotice, 'days').add(1, 'days'), //Includes the start date as a notice day as well.\r\n [cancelDaysNotice]\r\n );\r\n\r\n const getInvalidDateMessage = () =>\r\n `Please select a date from ${maxPastDate.format(\r\n dateDisplayFormat\r\n )} to ${moment().format(dateDisplayFormat)}`;\r\n\r\n return (\r\n \r\n value.isValid() || getInvalidDateMessage(),\r\n notInFuture: (value) =>\r\n value.isSameOrBefore(moment(), 'days') || getInvalidDateMessage(),\r\n greaterThanMaxPastDate: (value) =>\r\n value.isSameOrAfter(maxPastDate, 'days') ||\r\n getInvalidDateMessage(),\r\n },\r\n }}\r\n render={({ onChange, value, onBlur }) => (\r\n \r\n )}\r\n />\r\n {noticeErrors && noticeErrors.message && (\r\n {noticeErrors.message}\r\n )}\r\n \r\n );\r\n};\r\n\r\nNoticePeriod.propTypes = {\r\n cancelDaysNotice: PropTypes.number.isRequired,\r\n formControl: PropTypes.object.isRequired,\r\n isSubmittingForm: PropTypes.bool.isRequired,\r\n dateDisplayFormat: PropTypes.string.isRequired,\r\n noticeErrors: PropTypes.object,\r\n dataTestId: PropTypes.string,\r\n};\r\n\r\nNoticePeriod.defaultProps = {\r\n dataTestId: 'cancel-form-notice-period',\r\n};\r\n\r\nexport default NoticePeriod;\r\n","import { styled, withStyles } from '@material-ui/core';\r\nimport { Checkbox } from '@ds/react-components';\r\n\r\nexport const DeclarationContainer = styled('div')({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'flex-start',\r\n margin: '12px 0 0 0',\r\n});\r\n\r\nexport const DeclarationText = styled('p')(({ theme }) => ({\r\n fontSize: '14px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n wordBreak: 'break-word',\r\n margin: 0,\r\n}));\r\n\r\nexport const DeclareCheckbox = withStyles((theme) => ({\r\n label: {\r\n color: theme.palette.common.black,\r\n fontWeight: 'bold',\r\n },\r\n root: {\r\n marginTop: '10px',\r\n },\r\n}))(Checkbox);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormError } from '@ds/react-components';\r\n\r\nimport * as Styled from './CancelFeeDeclaration.styled';\r\n\r\nconst CancelFeeDeclaration = (props) => {\r\n const {\r\n formControl,\r\n cancelFeeLimit,\r\n cancellationFeeValue,\r\n cancellationFeeError,\r\n declarationError,\r\n } = props;\r\n\r\n return !cancelFeeLimit ? (\r\n (\r\n \r\n \r\n {'The Facility agrees that in the event of a dispute arising that is directly or indirectly related ' +\r\n 'to the imposition of this fee, it will, within 48 hours of a request by Debitsuccess, provide Debitsuccess with the evidence required to substantiate the customer’s acceptance of this fee. In addition, the Facility agrees that it will be solely responsible to the customer for any ' +\r\n 'and all losses, costs, actions, demands, expenses or other liabilities arising, as a result of the imposition of this fee.'}\r\n \r\n onChange(event.target.checked)}\r\n disabled={!cancellationFeeValue || !!cancellationFeeError}\r\n onBlur={onBlur}\r\n />\r\n {declarationError && declarationError.message && (\r\n {declarationError.message}\r\n )}\r\n \r\n )}\r\n />\r\n ) : (\r\n \r\n );\r\n};\r\n\r\nCancelFeeDeclaration.propTypes = {\r\n cancelFeeLimit: PropTypes.number,\r\n formControl: PropTypes.object,\r\n cancellationFeeValue: PropTypes.number, //The value entered in the cancellation fee input.\r\n cancellationFeeError: PropTypes.object,\r\n declarationError: PropTypes.shape({\r\n message: PropTypes.string,\r\n }),\r\n};\r\n\r\nexport default CancelFeeDeclaration;\r\n","import { styled } from '@material-ui/core';\r\nimport { Alert } from '@ds/react-components';\r\n\r\nexport const InfoAlert = styled(Alert)({\r\n marginTop: '18px',\r\n maxWidth: '910px',\r\n});\r\n","import React from 'react';\r\nimport { Alert } from '@ds/react-components';\r\nimport * as Styled from './NoPermissionError.styled';\r\n\r\nconst NoPermissionError = (props) => {\r\n return (\r\n \r\n \r\n {'We are sorry, but you do not have permission to cancel this account.'}\r\n \r\n \r\n );\r\n};\r\n\r\nNoPermissionError.propTypes = {};\r\n\r\nexport default NoPermissionError;\r\n","import React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport moment from 'moment';\r\nimport {\r\n numberToCurrency,\r\n isNullOrUndefined,\r\n isNotEmptyArray,\r\n} from 'utils/misc';\r\nimport { convertToFloat } from 'utils/numbers';\r\nimport cancellationTypes from 'constants/cancellationTypes';\r\nimport permissionTypes from 'constants/permissionTypes';\r\n\r\nimport commonPropTypes from '../common/commonPropTypes';\r\nimport FormLayout from '../common/FormLayout';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport { getCancellationFeeValidators } from '../common/validators';\r\n\r\nimport * as Styled from '../CancellationForm.styled';\r\nimport NoticePeriod from '../common/NoticePeriod';\r\nimport CancelFeeDeclaration from '../common/CancelFeeDeclaration';\r\nimport NoPermissionError from '../common/NoPermissionError';\r\n\r\nconst OverdueForm = (props) => {\r\n const {\r\n cancellationReasons,\r\n onFormSubmit,\r\n isUpdatingAccount,\r\n adfitNo,\r\n estimatedFinalBillDate,\r\n localisation,\r\n outstandingDsFee,\r\n account,\r\n facility,\r\n balanceToSettleWithoutCancelFee,\r\n cancelDaysNotice,\r\n permissions,\r\n } = props;\r\n\r\n const {\r\n outsideTerm,\r\n cancelFee,\r\n country,\r\n overdueAmount,\r\n isFixedTerm,\r\n isTermIdentified,\r\n hasPy,\r\n isBiPartite,\r\n } = account;\r\n\r\n const { industryType } = facility;\r\n\r\n const { dateFormat } = localisation.locales;\r\n\r\n const cancellationOptions = useMemo(() => {\r\n const endOfTermOption =\r\n // should be inside term and term should be identified\r\n // and only if has no PY and is outside term and TermType is Payment i.e. term not identified\r\n !outsideTerm || (!hasPy && outsideTerm && !isTermIdentified)\r\n ? [\r\n {\r\n label: 'Cancel at the end of the term',\r\n subLabels: [\r\n ...(estimatedFinalBillDate && hasPy\r\n ? [\r\n `Estimated date of final payment is ${moment(\r\n estimatedFinalBillDate\r\n ).format(dateFormat)}`,\r\n ]\r\n : []),\r\n 'Any overdues might defer the cancellation',\r\n ],\r\n value: cancellationTypes.SET_TO_TERM,\r\n },\r\n ]\r\n : [];\r\n\r\n const noticerPeriodOption =\r\n outsideTerm && !isFixedTerm && isTermIdentified\r\n ? [\r\n {\r\n label: `Cancel after ${cancelDaysNotice} days notice`,\r\n subLabels: [\r\n ...(estimatedFinalBillDate && hasPy\r\n ? [\r\n `Estimated date of final payment is ${moment(\r\n estimatedFinalBillDate\r\n ).format(dateFormat)}`,\r\n ]\r\n : []),\r\n 'Any overdues might defer the cancellation',\r\n ],\r\n value: cancellationTypes.WITH_NOTICE_PERIOD,\r\n },\r\n ]\r\n : [];\r\n\r\n //If the user has only one permission then show these options.\r\n if (\r\n permissions.includes(permissionTypes.canSetToTerm) &&\r\n !permissions.includes(permissionTypes.canCancelAllAccounts)\r\n ) {\r\n return [...endOfTermOption, ...noticerPeriodOption];\r\n }\r\n return [\r\n {\r\n label: 'Waive overdue amount and cancel',\r\n subLabels: [\r\n `Debitsuccess fee of ${numberToCurrency(\r\n isNullOrUndefined(outstandingDsFee) ? 0 : outstandingDsFee,\r\n localisation\r\n )} will be charged to the business`,\r\n ],\r\n value: cancellationTypes.CHARGE_BACK_DS_FEE,\r\n },\r\n //Do not delete this commented code. This is tested code but this option must be hidden temporarily(courtesy of genius product planning).\r\n // ...(outstandingDsFee\r\n // ? [\r\n // {\r\n // label: 'Collect Debitsuccess fee and cancel',\r\n // subLabels: [\r\n // `Debitsuccess fee of ${numberToCurrency(\r\n // outstandingDsFee,\r\n // localisation\r\n // )} will be charged to the customer`,\r\n // ],\r\n // value: cancellationTypes.COLLECT_DS_FEE,\r\n // },\r\n // ]\r\n // : []),\r\n {\r\n label: 'Collect overdue amount and cancel',\r\n subLabels: [\r\n `Overdue amount of ${numberToCurrency(\r\n overdueAmount,\r\n localisation\r\n )} will be charged to the customer`,\r\n ],\r\n value: cancellationTypes.COLLECT_OVERDUE,\r\n },\r\n ...endOfTermOption,\r\n ...noticerPeriodOption,\r\n ];\r\n }, [\r\n localisation,\r\n estimatedFinalBillDate,\r\n outsideTerm,\r\n outstandingDsFee,\r\n overdueAmount,\r\n dateFormat,\r\n cancelDaysNotice,\r\n isFixedTerm,\r\n permissions,\r\n ]);\r\n\r\n //State for the confirmation Modal.\r\n const [confirmationModalState, setConfirmationModalState] = useState({\r\n isOpen: false,\r\n displayText: [],\r\n });\r\n\r\n const { handleSubmit, control, watch, errors, getValues, setValue } = useForm(\r\n {\r\n defaultValues: {\r\n cancellationOption: isNotEmptyArray(cancellationOptions)\r\n ? cancellationOptions[0].value\r\n : undefined,\r\n cancelReason: null,\r\n cancellationFee: null,\r\n noticeStartDate: moment(),\r\n cancellationFeeDeclaration: false,\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n }\r\n );\r\n\r\n const watchCancellationOption = watch('cancellationOption');\r\n\r\n const watchCancellationFee = watch('cancellationFee');\r\n\r\n const onValidSubmit = useCallback(\r\n (data) => {\r\n // Open the confirmation modal if required.\r\n if (\r\n data.cancellationOption === cancellationTypes.COLLECT_DS_FEE ||\r\n data.cancellationOption === cancellationTypes.CHARGE_BACK_DS_FEE\r\n ) {\r\n setConfirmationModalState({\r\n isOpen: true,\r\n displayText: [\r\n 'By selecting this option you agree to waive fees owed to your business.',\r\n ],\r\n });\r\n return;\r\n }\r\n onFormSubmit(cancellationOptions, data);\r\n },\r\n [cancellationOptions, onFormSubmit]\r\n );\r\n\r\n const onConfirmModal = useCallback(() => {\r\n const data = getValues();\r\n setConfirmationModalState({\r\n displayText: [],\r\n isOpen: false,\r\n });\r\n onFormSubmit(cancellationOptions, data);\r\n }, [getValues, cancellationOptions, onFormSubmit]);\r\n\r\n const onCancelConfirmModal = useCallback(() => {\r\n setConfirmationModalState({\r\n isOpen: false,\r\n displayText: [],\r\n });\r\n }, [setConfirmationModalState]);\r\n\r\n const isEstimatedFinalBillDateToday = useMemo(\r\n () => moment(estimatedFinalBillDate).isSame(moment(), 'days'),\r\n [estimatedFinalBillDate]\r\n );\r\n\r\n if (!isNotEmptyArray(cancellationOptions)) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n
    \r\n {!outsideTerm &&\r\n hasPy &&\r\n !isEstimatedFinalBillDateToday &&\r\n watchCancellationOption === cancellationTypes.COLLECT_OVERDUE && (\r\n \r\n (\r\n <>\r\n \r\n \r\n {'Cancellation fee '}\r\n \r\n {'(Optional)'}\r\n \r\n \r\n \r\n {\r\n 'Cancellation fee is in addition to the overdue amount'\r\n }\r\n \r\n \r\n\r\n {\r\n onBlur(event);\r\n //Reset the declaration checkbox if on blur no cancellation fee is entered.\r\n // Done because the field is optional.\r\n if (!value)\r\n setValue('cancellationFeeDeclaration', false);\r\n }}\r\n disabled={isUpdatingAccount}\r\n value={isNullOrUndefined(value) ? '' : value}\r\n onChange={(event) => {\r\n if (event.target.validity.valid) {\r\n onChange(convertToFloat(event.target.value));\r\n }\r\n }}\r\n startAdornment={'$'}\r\n showStartAdornmentDivider={true}\r\n showInlineIcons={false}\r\n error={\r\n errors.cancellationFee && errors.cancellationFee.message\r\n }\r\n />\r\n \r\n )}\r\n />\r\n \r\n \r\n )}\r\n\r\n {watchCancellationOption === cancellationTypes.WITH_NOTICE_PERIOD && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nOverdueForm.propTypes = {\r\n ...commonPropTypes,\r\n outstandingDsFee: PropTypes.number,\r\n};\r\n\r\nOverdueForm.defaultProps = {\r\n estimatedFinalBillDate: null,\r\n outstandingDsFee: null,\r\n};\r\n\r\nexport default OverdueForm;\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport moment from 'moment';\r\nimport { convertToFloat } from 'utils/numbers';\r\nimport { isNotEmptyArray, isNullOrUndefined } from 'utils/misc';\r\nimport cancellationTypes from 'constants/cancellationTypes';\r\nimport permissionTypes from 'constants/permissionTypes';\r\nimport FormLayout from '../common/FormLayout';\r\nimport commonPropTypes from '../common/commonPropTypes';\r\nimport { getCancellationFeeValidators } from '../common/validators';\r\nimport NoticePeriod from '../common/NoticePeriod';\r\nimport CancelFeeDeclaration from '../common/CancelFeeDeclaration';\r\nimport NoPermissionError from '../common/NoPermissionError';\r\n\r\nimport * as Styled from '../CancellationForm.styled';\r\n\r\nconst NoOverdueForm = (props) => {\r\n const {\r\n cancellationReasons,\r\n onFormSubmit,\r\n isUpdatingAccount,\r\n adfitNo,\r\n estimatedFinalBillDate,\r\n localisation,\r\n recentNotClearedPayment,\r\n account,\r\n balanceToSettleWithoutCancelFee,\r\n facility,\r\n cancelDaysNotice,\r\n permissions,\r\n } = props;\r\n\r\n const {\r\n outsideTerm,\r\n cancelFee,\r\n country,\r\n isFixedTerm,\r\n isTermIdentified,\r\n hasPy,\r\n isBiPartite,\r\n } = account;\r\n\r\n const { industryType } = facility;\r\n\r\n const { dateFormat } = localisation.locales;\r\n\r\n const cancellationOptions = useMemo(() => {\r\n const endOfTermOption =\r\n !outsideTerm && isTermIdentified\r\n ? [\r\n {\r\n label: 'Cancel at the end of the term',\r\n subLabels: [\r\n ...(estimatedFinalBillDate && hasPy\r\n ? [\r\n `Estimated final payment date ${moment(\r\n estimatedFinalBillDate\r\n ).format(dateFormat)}`,\r\n ]\r\n : []),\r\n ],\r\n value: cancellationTypes.SET_TO_TERM,\r\n },\r\n ]\r\n : [];\r\n\r\n const noticerPeriodOption =\r\n //An account can be set to term and can still be active outside term when there are suspensions in between or an overdue amount is pending to be collected.\r\n // In that case notice period doesn't apply.\r\n outsideTerm && !isFixedTerm && isTermIdentified\r\n ? [\r\n {\r\n label: `Cancel after ${cancelDaysNotice} days notice period`,\r\n value: cancellationTypes.WITH_NOTICE_PERIOD,\r\n subLabels: [],\r\n },\r\n ]\r\n : [];\r\n\r\n //If only has CanSetToTerm permission then display below options.\r\n if (\r\n permissions.includes(permissionTypes.canSetToTerm) &&\r\n !permissions.includes(permissionTypes.canCancelAllAccounts)\r\n ) {\r\n return [...endOfTermOption, ...noticerPeriodOption];\r\n }\r\n\r\n //Display all the options.\r\n return [\r\n {\r\n label: 'Cancel immediately',\r\n subLabels: [\r\n ...(recentNotClearedPayment\r\n ? ['Payment will not be re-attempted upon reversal']\r\n : []),\r\n ],\r\n value: cancellationTypes.CANCEL_STRAIGHT_DOWN,\r\n },\r\n // Estimated final bill date is today then this option should be hidden.\r\n ...(!outsideTerm &&\r\n hasPy &&\r\n balanceToSettleWithoutCancelFee > 0 &&\r\n !moment(estimatedFinalBillDate).isSame(moment(), 'days')\r\n ? [\r\n {\r\n label: 'Collect cancellation fee and cancel',\r\n subLabels: [],\r\n value: cancellationTypes.COLLECT_CANCELLATION_FEE,\r\n },\r\n ]\r\n : []),\r\n ...endOfTermOption,\r\n ...noticerPeriodOption,\r\n ];\r\n }, [\r\n dateFormat,\r\n estimatedFinalBillDate,\r\n recentNotClearedPayment,\r\n outsideTerm,\r\n cancelDaysNotice,\r\n balanceToSettleWithoutCancelFee,\r\n isFixedTerm,\r\n permissions,\r\n ]);\r\n\r\n const { handleSubmit, control, watch, errors, getValues } = useForm({\r\n defaultValues: {\r\n cancellationOption: isNotEmptyArray(cancellationOptions)\r\n ? cancellationOptions[0].value\r\n : undefined,\r\n cancelReason: null,\r\n cancellationFee: null,\r\n noticeStartDate: moment(),\r\n cancellationFeeDeclaration: false,\r\n },\r\n mode: 'onBlur',\r\n reValidateMode: 'onBlur',\r\n });\r\n\r\n const watchCancellationOption = watch('cancellationOption');\r\n //Won't rerender unless watched.\r\n const watchCancellationFee = watch('cancellationFee');\r\n\r\n const onValidSubmit = useCallback(\r\n (data) => {\r\n onFormSubmit(cancellationOptions, data);\r\n },\r\n [cancellationOptions, onFormSubmit]\r\n );\r\n\r\n if (!isNotEmptyArray(cancellationOptions)) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {isTermIdentified &&\r\n watchCancellationOption ===\r\n cancellationTypes.COLLECT_CANCELLATION_FEE && (\r\n \r\n (\r\n {\r\n if (event.target.validity.valid) {\r\n onChange(convertToFloat(event.target.value));\r\n }\r\n }}\r\n startAdornment={'$'}\r\n showStartAdornmentDivider={true}\r\n showInlineIcons={false}\r\n labelId={'cancellationFeeId'}\r\n label={'Cancellation fee'}\r\n onBlur={onBlur}\r\n error={\r\n errors.cancellationFee && errors.cancellationFee.message\r\n }\r\n />\r\n )}\r\n />\r\n \r\n \r\n )}\r\n {watchCancellationOption === cancellationTypes.WITH_NOTICE_PERIOD && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nNoOverdueForm.propTypes = {\r\n ...commonPropTypes,\r\n};\r\n\r\nNoOverdueForm.defaultProps = {\r\n estimatedFinalBillDate: null,\r\n balanceToSettleWithoutCancelFee: null,\r\n};\r\n\r\nexport default NoOverdueForm;\r\n","import { styled } from '@material-ui/core';\r\nimport { Alert, OutlinedButton, FormLabel } from '@ds/react-components';\r\n\r\nimport {\r\n Paper,\r\n PaperBody,\r\n PaperHeader,\r\n PaperHeaderText,\r\n} from '../../Cancellation.styled';\r\n\r\nexport const InfoAlert = styled(Alert)({\r\n marginTop: '18px',\r\n maxWidth: '910px',\r\n});\r\n\r\nexport const InfoAlertMessage = styled(Alert.AlertMessage)({\r\n fontWeight: 'bold',\r\n});\r\n\r\nexport { Paper, PaperHeader, PaperHeaderText };\r\n\r\nexport const PaperBodyOverload = styled(PaperBody)({\r\n padding: '2px 32px 16px 32px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n});\r\n\r\nexport const BodySectionWrapper = styled('div')({\r\n margin: '16px 0px',\r\n});\r\n\r\nexport const InfoLabel = styled(FormLabel)(({ theme }) => ({\r\n color: theme.palette.common.lightText,\r\n}));\r\n\r\nexport const InfoText = styled('div')(({ theme }) => ({\r\n fontSize: '14px',\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const InfoSubTextContainer = styled('div')(({ theme }) => ({\r\n fontSize: '12px',\r\n marginTop: '4px',\r\n color: '#BEBEBE',\r\n}));\r\n\r\nexport const InfoSubText = styled('p')({\r\n padding: 0,\r\n margin: 0,\r\n});\r\n\r\nexport const BackButton = styled(OutlinedButton)({\r\n marginTop: '18px',\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport moment from 'moment';\r\nimport useToggle from 'hooks/useToggle';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport { numberToCurrency } from 'utils/misc';\r\nimport { roundToTwoDecimals } from 'utils/numbers';\r\nimport cancellationTypes from 'constants/cancellationTypes';\r\n\r\nimport * as Styled from './CancellationInfo.styled';\r\n\r\nconst CancellationInfo = (props) => {\r\n const {\r\n account,\r\n adfitNo,\r\n cancellationOption,\r\n cancellationFee,\r\n localisation,\r\n noticeStartDate,\r\n } = props;\r\n\r\n const { cancelReason, customCancelReason } = account;\r\n\r\n const { dateFormat } = localisation.locales;\r\n\r\n const [isSuccessAlertOpen, toggleSuccessAlert] = useToggle(true);\r\n\r\n const formattedNoticeStartDate = useMemo(() => {\r\n if (!noticeStartDate) return '-';\r\n return moment(noticeStartDate).format(dateFormat);\r\n }, [dateFormat, noticeStartDate]);\r\n\r\n const alertMessages = useMemo(() => {\r\n if (!cancellationOption) return [];\r\n\r\n const { value } = cancellationOption;\r\n\r\n switch (value) {\r\n case cancellationTypes.COLLECT_DS_FEE:\r\n return [\r\n 'Cancellation set up complete!',\r\n 'Account will be cancelled after the Debitsuccess fee is collected.',\r\n ];\r\n case cancellationTypes.COLLECT_OVERDUE:\r\n return [\r\n 'Cancellation was set up successfully.',\r\n `Account will be cancelled after the overdue amount ${\r\n cancellationFee ? 'and the cancellation fee' : ''\r\n } is collected.`,\r\n ];\r\n case cancellationTypes.COLLECT_CANCELLATION_FEE:\r\n return [\r\n 'Cancellation set up complete!',\r\n 'Account will be cancelled after the cancellation fee is collected.',\r\n ];\r\n case cancellationTypes.WITH_NOTICE_PERIOD ||\r\n cancellationTypes.SET_TO_TERM:\r\n return [\r\n 'Cancellation set up complete!',\r\n 'Reversals, overdues, suspensions or catch ups may delay the final payment date.',\r\n ];\r\n default:\r\n return ['Account was cancelled successfully.'];\r\n }\r\n }, [cancellationOption, cancellationFee]);\r\n\r\n return (\r\n
    \r\n {isSuccessAlertOpen && (\r\n \r\n {alertMessages.map((val, index) => (\r\n {val}\r\n ))}\r\n \r\n )}\r\n \r\n \r\n {'Cancel Account'}\r\n \r\n \r\n {cancellationOption && (\r\n \r\n {'Cancellation type'}\r\n {cancellationOption.label}\r\n \r\n {cancellationOption.subLabels &&\r\n cancellationOption.subLabels.map((val, index) => (\r\n {val}\r\n ))}\r\n \r\n \r\n )}\r\n {cancellationOption &&\r\n (cancellationOption.value === cancellationTypes.COLLECT_OVERDUE ||\r\n cancellationOption.value ===\r\n cancellationTypes.COLLECT_CANCELLATION_FEE) && (\r\n \r\n {'Cancellation fee'}\r\n \r\n {!cancellationFee\r\n ? '-'\r\n : `${numberToCurrency(\r\n roundToTwoDecimals(cancellationFee),\r\n localisation\r\n )}`}\r\n \r\n \r\n )}\r\n {cancellationOption &&\r\n cancellationOption.value ===\r\n cancellationTypes.WITH_NOTICE_PERIOD && (\r\n \r\n {'Start notice period on'}\r\n {formattedNoticeStartDate}\r\n \r\n )}\r\n\r\n \r\n {'Cancellation reason'}\r\n \r\n {customCancelReason\r\n ? customCancelReason\r\n : !cancelReason || cancelReason === 'Facility Request'\r\n ? 'Business request'\r\n : cancelReason}\r\n \r\n \r\n \r\n \r\n \r\n {'Back'}\r\n \r\n
    \r\n );\r\n};\r\n\r\nCancellationInfo.propTypes = {\r\n account: PropTypes.object.isRequired,\r\n adfitNo: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n cancellationOption: PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n subLabels: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n value: PropTypes.number.isRequired,\r\n }),\r\n cancellationFee: PropTypes.number,\r\n localisation: PropTypes.object,\r\n noticeStartDate: PropTypes.string,\r\n cancelDaysNotice: PropTypes.number,\r\n};\r\n\r\nCancellationInfo.defaultProps = {\r\n cancellationFee: null,\r\n noticeStartDate: null,\r\n cancelDaysNotice: null,\r\n};\r\n\r\nexport default CancellationInfo;\r\n","import React, { useMemo, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Alert } from '@ds/react-components';\r\nimport { numberToCurrency, isNotEmptyArray } from 'utils/misc';\r\nimport cancellationTypes from 'constants/cancellationTypes';\r\nimport OverdueForm from './OverdueForm';\r\nimport NoOverdueForm from './NoOverdueForm';\r\nimport CancellationInfo from './CancellationInfo';\r\nimport { getCancelDaysNotice } from './common/cancellationUtils';\r\n\r\nimport * as Styled from './CancellationForm.styled';\r\n\r\nconst CancellationForm = (props) => {\r\n const {\r\n cancellationReasons,\r\n account,\r\n localisation,\r\n adfitNo,\r\n cancelAccount,\r\n pendingPaymentAmount,\r\n estimatedFinalBillDate,\r\n outstandingDsFee,\r\n balanceToSettleWithoutCancelFee,\r\n facility,\r\n permissions,\r\n } = props;\r\n const { overdueAmount, country, daysNotice } = account;\r\n\r\n const [isUpdatingAccount, setIsUpdatingAccount] = useState(false);\r\n\r\n const [submissionError, setSubmissionError] = useState('');\r\n\r\n // The data is used to show the summary of the cancellation once the form is submitted.\r\n const [submittedInfo, setSubmittedInfo] = useState(null);\r\n\r\n const cancelDaysNotice = getCancelDaysNotice(daysNotice, country);\r\n\r\n const onFormSubmit = useCallback(\r\n async (cancellationOptions, data) => {\r\n setIsUpdatingAccount(true);\r\n setSubmissionError('');\r\n\r\n //Add any missing values.\r\n const formattedData = {\r\n ...data,\r\n cancelReason: !data.cancelReason\r\n ? 'Facility Request'\r\n : data.cancelReason,\r\n //server does not accept a zero value cancellation fee.\r\n cancellationFee:\r\n data.cancellationOption === cancellationTypes.COLLECT_OVERDUE &&\r\n !data.cancellationFee\r\n ? undefined\r\n : data.cancellationFee,\r\n //passing true to toIsoString method makes sure that the date is not converted to utc format.\r\n noticeStartDate:\r\n data.noticeStartDate && data.noticeStartDate.toISOString(true),\r\n cancelDaysNotice,\r\n };\r\n\r\n try {\r\n await cancelAccount(adfitNo, formattedData);\r\n setSubmittedInfo({\r\n ...formattedData,\r\n cancellationOption: cancellationOptions.find(\r\n (option) => option.value === data.cancellationOption\r\n ),\r\n });\r\n } catch (err) {\r\n setSubmissionError(\r\n err.message || 'Something went wrong. Please try again.'\r\n );\r\n setIsUpdatingAccount(false);\r\n window.scroll(0, 0);\r\n }\r\n },\r\n [\r\n cancelAccount,\r\n adfitNo,\r\n setSubmissionError,\r\n setIsUpdatingAccount,\r\n cancelDaysNotice,\r\n ]\r\n );\r\n\r\n const hasPendingPaymentAmount = useMemo(() => {\r\n return pendingPaymentAmount !== 0;\r\n }, [pendingPaymentAmount]);\r\n\r\n const noteAlerts = useMemo(() => {\r\n const getOverdueAlert = () =>\r\n overdueAmount > 0\r\n ? [\r\n `This account has an overdue amount of ${numberToCurrency(\r\n overdueAmount,\r\n localisation\r\n )}.`,\r\n ]\r\n : [];\r\n\r\n const getRecentPayAlert = () => {\r\n return hasPendingPaymentAmount\r\n ? [\r\n `Total payment of ${numberToCurrency(\r\n Math.abs(pendingPaymentAmount),\r\n localisation\r\n )} was attempted for this customer and is pending.`,\r\n ]\r\n : [];\r\n };\r\n\r\n const noteAlerts = [...getOverdueAlert(), ...getRecentPayAlert()];\r\n return isNotEmptyArray(noteAlerts) ? noteAlerts : null;\r\n }, [overdueAmount, localisation, hasPendingPaymentAmount]);\r\n\r\n if (submittedInfo) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {!!submissionError && (\r\n \r\n \r\n {submissionError}\r\n \r\n \r\n )}\r\n {!!noteAlerts && (\r\n \r\n {noteAlerts.map((alertMessage, index) => (\r\n {`${\r\n noteAlerts.length > 1 ? '• ' : ''\r\n } ${alertMessage}`}\r\n ))}\r\n \r\n )}\r\n {/*Though the below two forms might seem very similar in look and feel, there are too many implementation differences hence treating them as separate forms*/}\r\n {overdueAmount <= 0 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nCancellationForm.propTypes = {\r\n cancellationReasons: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n })\r\n ).isRequired,\r\n account: PropTypes.object.isRequired,\r\n transactions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n amount: PropTypes.number.isRequired,\r\n cleared: PropTypes.bool,\r\n })\r\n ).isRequired,\r\n facility: PropTypes.shape({\r\n name: PropTypes.string,\r\n industryType: PropTypes.string.isRequired,\r\n }).isRequired,\r\n localisation: PropTypes.object.isRequired,\r\n adfitNo: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n estimatedFinalBillDate: PropTypes.string,\r\n outstandingDsFee: PropTypes.number,\r\n cancelAccount: PropTypes.func.isRequired,\r\n permissions: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n balanceToSettleWithoutCancelFee: PropTypes.number,\r\n};\r\n\r\nCancellationForm.defaultProps = {\r\n outstandingDsFee: null,\r\n balanceToSettleWithoutCancelFee: null,\r\n};\r\n\r\nexport default CancellationForm;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useParams, Redirect } from 'react-router-dom';\r\nimport permissionTypes from 'constants/permissionTypes';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport CancellationForm from './CancellationForm';\r\n\r\nimport * as Styled from './Cancellation.styled';\r\n\r\nconst Cancellation = (props) => {\r\n const {\r\n getCancellationReasons,\r\n getAccountInfo,\r\n getTransactions,\r\n getPendingPaymentAmount,\r\n getEstimatedFinalBillDate,\r\n getOutstandingDsFee,\r\n getBalanceToSettleWithoutCancelFee,\r\n cancellationReasons,\r\n getFacilityByAdfitNo,\r\n account,\r\n transactions,\r\n pendingPaymentAmount,\r\n localisation,\r\n cancelAccount,\r\n estimatedFinalBillDate,\r\n outstandingDsFee,\r\n balanceToSettleWithoutCancelFee,\r\n facility,\r\n permissions,\r\n } = props;\r\n\r\n const [isLoaded, setIsLoaded] = useState(false);\r\n\r\n const [wasAccountActiveAtStart, setAccountActiveAtStart] = useState(true);\r\n\r\n const { adfitNo } = useParams();\r\n\r\n const { isActive, name, firstName } = account;\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setIsLoaded(false);\r\n\r\n const restOfPromises = [\r\n getCancellationReasons(adfitNo),\r\n getTransactions(adfitNo),\r\n getPendingPaymentAmount(adfitNo),\r\n getEstimatedFinalBillDate(adfitNo),\r\n getOutstandingDsFee(adfitNo),\r\n getBalanceToSettleWithoutCancelFee(adfitNo),\r\n ];\r\n\r\n await getAccountInfo(adfitNo);\r\n const accountDependentPromises = [getFacilityByAdfitNo(adfitNo)];\r\n await Promise.all([...restOfPromises, ...accountDependentPromises]);\r\n setIsLoaded(true);\r\n } catch (e) {\r\n console.warn(e);\r\n }\r\n })();\r\n }, [\r\n setIsLoaded,\r\n adfitNo,\r\n getCancellationReasons,\r\n getAccountInfo,\r\n getTransactions,\r\n getEstimatedFinalBillDate,\r\n getOutstandingDsFee,\r\n getFacilityByAdfitNo,\r\n getBalanceToSettleWithoutCancelFee,\r\n ]);\r\n\r\n // Useful to redirect the account if it was not active to begin with.\r\n useEffect(() => {\r\n if (!account) return;\r\n setAccountActiveAtStart(isActive);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isLoaded]);\r\n\r\n if (!isLoaded) {\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 //if the account is already cancelled do not show the form.\r\n if (!isActive && !wasAccountActiveAtStart) {\r\n return ;\r\n }\r\n\r\n //if the account has no permissions then redirect as well.\r\n if (\r\n !permissions.includes(permissionTypes.canSetToTerm) &&\r\n !permissions.includes(permissionTypes.canCancelAllAccounts)\r\n ) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {`${\r\n name || firstName\r\n }, ${adfitNo}`}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nCancellation.propTypes = {\r\n cancellationReasons: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n })\r\n ),\r\n localisation: PropTypes.object.isRequired,\r\n account: PropTypes.object,\r\n estimatedFinalBillDate: PropTypes.string,\r\n outstandingDsFee: PropTypes.number,\r\n balanceToSettleWithoutCancelFee: PropTypes.number,\r\n transactions: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n amount: PropTypes.number.isRequired,\r\n cleared: PropTypes.bool,\r\n })\r\n ),\r\n facility: PropTypes.shape({\r\n name: PropTypes.string,\r\n industryType: PropTypes.string.isRequired,\r\n }),\r\n getCancellationReasons: PropTypes.func.isRequired,\r\n getAccountInfo: PropTypes.func.isRequired,\r\n cancelAccount: PropTypes.func.isRequired,\r\n getTransactions: PropTypes.func.isRequired,\r\n getEstimatedFinalBillDate: PropTypes.func.isRequired,\r\n getOutstandingDsFee: PropTypes.func.isRequired,\r\n getBalanceToSettleWithoutCancelFee: PropTypes.func.isRequired,\r\n getFacilityByAdfitNo: PropTypes.func.isRequired,\r\n permissions: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nCancellation.defaultProps = {\r\n cancellationReasons: [],\r\n account: null,\r\n transactions: [],\r\n finalPaymentDate: null,\r\n outstandingDsFee: null,\r\n balanceToSettle: null,\r\n balanceToSettleWithoutCancelFee: null,\r\n estimatedFinalBillDate: '',\r\n};\r\n\r\nCancellation.displayName = 'Cancellation';\r\n\r\nexport default Cancellation;\r\n","import withRouteParams from 'hoc/withRouteParams';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport { checkAndGetCancellationReasons } from 'ducks/cancellationReasons';\r\nimport {\r\n getPersonalInfo,\r\n getTransactions,\r\n getPendingPaymentAmount,\r\n} from 'ducks/customerDetails';\r\nimport { cancelAccount } from 'ducks/accounts';\r\nimport {\r\n getEstimatedFinalBillDate,\r\n getOutstandingDsFee,\r\n getBalanceToSettleWithoutCancelFee,\r\n} from 'ducks/accountMeta';\r\nimport { getFacilityByAdfitNo } from 'ducks/facilities';\r\nimport { selectEntitiesByAdfitNo } from 'selectors/common';\r\nimport { makeSelectFacilityByAdfitNo } from 'selectors/facilities';\r\nimport withScrollableTopTabs from 'hoc/withScrollableTopTabs';\r\nimport customerPageTopTabs from 'constants/customerPageTopTabs';\r\nimport Cancellation from './Cancellation';\r\n\r\nconst makeMapStateToProps = () => {\r\n const selectFacilityByAdfitNo = makeSelectFacilityByAdfitNo();\r\n\r\n return (state, ownProps) => {\r\n const { adfitNo } = ownProps.routeParams;\r\n return {\r\n cancellationReasons: selectEntitiesByAdfitNo(\r\n state.cancellationReasons,\r\n adfitNo\r\n ),\r\n account: state.customerDetails,\r\n localisation: state.localisation,\r\n transactions: state.customerDetails.lastest3Transactions,\r\n pendingPaymentAmount: state.customerDetails.pendingPaymentAmount,\r\n estimatedFinalBillDate: selectEntitiesByAdfitNo(\r\n state.accountMeta.estimatedFinalBillDate,\r\n adfitNo\r\n ),\r\n outstandingDsFee: selectEntitiesByAdfitNo(\r\n state.accountMeta.outstandingDsFee,\r\n adfitNo\r\n ),\r\n balanceToSettleWithoutCancelFee: selectEntitiesByAdfitNo(\r\n state.accountMeta.balanceToSettleWithoutCancelFee,\r\n adfitNo\r\n ),\r\n facility: selectFacilityByAdfitNo(state, adfitNo),\r\n permissions: state.auth.permissions,\r\n };\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n getCancellationReasons: checkAndGetCancellationReasons,\r\n getAccountInfo: getPersonalInfo,\r\n getTransactions,\r\n getPendingPaymentAmount,\r\n cancelAccount,\r\n getEstimatedFinalBillDate,\r\n getOutstandingDsFee,\r\n getBalanceToSettleWithoutCancelFee,\r\n getFacilityByAdfitNo,\r\n};\r\n\r\nexport default compose(\r\n withScrollableTopTabs(customerPageTopTabs, 0, ['adfitNo']),\r\n withRouteParams,\r\n connect(makeMapStateToProps, mapDispatchToProps)\r\n)(Cancellation);\r\n","// This file has some of the actions for customer details.\r\n//TODO The customer details file needs to be broken down in to multiple ducks file based on the backend resource and this is part of the migration. Like accounts, transactions etc.\r\nimport {\r\n postCancelAccount,\r\n checkAccountCancelStatus,\r\n} from 'services/accountDetails';\r\nimport { getPersonalInfo } from 'ducks/customerDetails';\r\nimport { poll } from 'utils/poll';\r\n\r\nexport const cancelAccount = (adfitNo, data) => async (dispatch, getState) => {\r\n const { accessToken } = getState().auth;\r\n\r\n const response = await postCancelAccount(adfitNo, data);\r\n\r\n if (!response.headers.has('location')) {\r\n throw new Error('');\r\n }\r\n\r\n const location = response.headers.get('location');\r\n\r\n const { errorMessage } = await poll(\r\n async () => {\r\n const statusResult = await checkAccountCancelStatus(\r\n location,\r\n accessToken\r\n );\r\n\r\n //Keep polling if the result is submitted by throwing error.\r\n if (\r\n !statusResult ||\r\n statusResult.currentState.toLowerCase() === 'submitted'\r\n ) {\r\n throw new Error('');\r\n }\r\n return statusResult;\r\n },\r\n 5000,\r\n 10\r\n );\r\n\r\n if (errorMessage) {\r\n throw new Error(errorMessage);\r\n }\r\n\r\n //check if we are still in the same page.\r\n const currentAdfitNo = getState().customerDetails.adfitNo;\r\n if (currentAdfitNo === adfitNo) {\r\n await dispatch(getPersonalInfo(adfitNo));\r\n }\r\n};\r\n","import React from 'react';\r\nimport { useParams, useRouteMatch } from 'react-router-dom';\r\nimport IFramePage from 'components/core/IFramePage';\r\nimport { oldSelfServiceLink } from 'config';\r\n\r\nconst subTab = {\r\n Payments: 'Scheduledx20Payments',\r\n Transactions: 'Transactions',\r\n Variations: 'Variations',\r\n Contract: 'Contract',\r\n PaymentMethod: 'Variations',\r\n Activities: 'Callx20History',\r\n};\r\n\r\nconst CustomerEmbedFrame = (props) => {\r\n const params = useParams();\r\n const { url } = useRouteMatch();\r\n const matchSplit = url.split('/');\r\n const tab = matchSplit.length === 4 ? matchSplit[3] : '';\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nCustomerEmbedFrame.propTypes = {};\r\n\r\nexport default CustomerEmbedFrame;\r\n","import React, { useState } from 'react';\r\nimport { withStyles } from '@material-ui/core';\r\nimport { Alert } from '@ds/react-components';\r\nimport PageWrapper from 'components/ui/PageWrapper';\r\nimport {\r\n getSuspensionAlertMessage,\r\n removeSuspensionAlertMessage,\r\n} from 'utils/suspensions';\r\n\r\nconst styles = (theme) => ({\r\n Container: {\r\n paddingBottom: '0px',\r\n },\r\n Title: {\r\n margin: '0px',\r\n fontWeight: '500',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n },\r\n Warning: {\r\n color: theme.palette.common.black,\r\n },\r\n List: {\r\n listStyleType: 'disc',\r\n margin: '0px',\r\n padding: '0px 0px 0px 20px',\r\n },\r\n //TODO: Need update Alert in ds-react lib, then we can remove the style.\r\n success: {\r\n borderLeftColor: theme.palette.xpl.green600,\r\n backgroundColor: theme.palette.xpl.message.positive.background,\r\n color: theme.palette.common.black,\r\n '& h3': {\r\n color: theme.palette.common.black,\r\n },\r\n '& svg': {\r\n color: theme.palette.xpl.green600,\r\n },\r\n },\r\n});\r\n\r\nconst SuspensionAlertMessage = (props) => {\r\n const { classes } = props;\r\n const message = getSuspensionAlertMessage();\r\n const [showAlert, setShowAlert] = useState(!!message);\r\n const warnings = message?.response?.warnings || [];\r\n removeSuspensionAlertMessage();\r\n\r\n return (\r\n <>\r\n {showAlert ? (\r\n \r\n setShowAlert(false)}>\r\n

    {message?.title}

    \r\n {warnings.length > 0 ? (\r\n <>\r\n
    \r\n
    warning
    \r\n
      \r\n {warnings.map((warning, index) => (\r\n
    • {warning}
    • \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\nexport default withStyles(styles)(SuspensionAlertMessage);\r\n","import React from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport IFramePage from 'components/core/IFramePage';\r\nimport { oldSelfServiceLink } from 'config';\r\nimport SuspensionAlertMessage from './SuspensionAlertMessage';\r\n\r\nconst CustomerEmbedFrame = (props) => {\r\n const { adfitNo, subTab = '' } = useParams();\r\n let appendedQuery;\r\n switch (subTab.toLowerCase()) {\r\n case 'suspensions':\r\n appendedQuery = '&subTab=Suspensions';\r\n break;\r\n case 'oneoffpayments':\r\n appendedQuery = '&subTab=Onex2doffx20Payments';\r\n break;\r\n case 'regularpayments':\r\n appendedQuery = '&subTab=Regularx20Payments';\r\n break;\r\n default:\r\n appendedQuery = '';\r\n }\r\n\r\n const frameLink = `${oldSelfServiceLink}/Customer/Detail?debitsuccessId=${adfitNo}&activeTab=Scheduledx20Payments${appendedQuery}&HideMenu=true`;\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCustomerEmbedFrame.propTypes = {};\r\n\r\nexport default CustomerEmbedFrame;\r\n","import CustomerSearch from 'components/pages/CustomerSearch';\r\nimport CustomerDetails from 'components/pages/CustomerDetails';\r\nimport Transactions from 'components/pages/Transactions';\r\nimport {\r\n AddSuspension,\r\n EditSuspension,\r\n RedirectToSuspensionsPage,\r\n} from 'components/pages/Suspensions';\r\nimport Cancellation from 'components/pages/Cancellation';\r\nimport CustomerEmbedFrame from 'components/pages/CustomerEmbedFrame';\r\nimport PaymentsEmbedFrame from 'components/pages/CustomerEmbedFrame/PaymentsEmbedFrame';\r\nimport CustomerDetailsRedirect from 'components/pages/CustomerDetailsRedirect';\r\nimport withScrollableTopTabs from 'hoc/withScrollableTopTabs';\r\nimport customerPageTopTabs from 'constants/customerPageTopTabs';\r\n\r\n// Must be in decreasing order of the path length.\r\nconst routes = [\r\n {\r\n path: '/Customers/:adfitNo/Payments',\r\n component: [\r\n {\r\n path: '/Customers/:adfitNo/Payments/:subTab',\r\n ignoreForBreadCrumb: true,\r\n component: withScrollableTopTabs(customerPageTopTabs, 1, ['adfitNo'])(\r\n PaymentsEmbedFrame\r\n ),\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Payments',\r\n component: withScrollableTopTabs(customerPageTopTabs, 1, ['adfitNo'])(\r\n PaymentsEmbedFrame\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Suspensions',\r\n component: [\r\n {\r\n path: '/Customers/:adfitNo/Suspensions/Add',\r\n component: AddSuspension,\r\n breadCrumbName: 'Add',\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Suspensions/Edit',\r\n breadCrumbName: 'Edit',\r\n component: [\r\n {\r\n path: '/Customers/:adfitNo/Suspensions/Edit/:scheduleSuspenseId',\r\n component: EditSuspension,\r\n ignoreForBreadCrumb: true,\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Suspensions/Edit',\r\n component: RedirectToSuspensionsPage,\r\n },\r\n ],\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Suspensions',\r\n component: RedirectToSuspensionsPage,\r\n },\r\n ],\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Transactions',\r\n component: Transactions,\r\n },\r\n {\r\n path: '/Customers/:adfitNo/PaymentMethod',\r\n component: withScrollableTopTabs(customerPageTopTabs, 3, ['adfitNo'])(\r\n CustomerEmbedFrame\r\n ),\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Activities',\r\n component: withScrollableTopTabs(customerPageTopTabs, 4, ['adfitNo'])(\r\n CustomerEmbedFrame\r\n ),\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Variations',\r\n component: withScrollableTopTabs(customerPageTopTabs, 5, ['adfitNo'])(\r\n CustomerEmbedFrame\r\n ),\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Contract',\r\n component: withScrollableTopTabs(customerPageTopTabs, 6, ['adfitNo'])(\r\n CustomerEmbedFrame\r\n ),\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Overview',\r\n component: [\r\n {\r\n path: '/Customers/:adfitNo/Overview/AccountCancellation',\r\n component: Cancellation,\r\n breadCrumbName: 'Account Cancellation',\r\n },\r\n {\r\n path: '/Customers/:adfitNo/Overview',\r\n component: CustomerDetails,\r\n breadCrumbName: 'Overview',\r\n },\r\n ],\r\n },\r\n {\r\n path: '/Customers/:adfitNo',\r\n component: CustomerDetailsRedirect,\r\n ignoreForBreadCrumb: true,\r\n },\r\n {\r\n path: '/Customers',\r\n component: CustomerSearch,\r\n },\r\n];\r\n\r\nexport default routes;\r\n","import TermsAndConditions from 'components/pages/TermsAndConditions';\r\nimport HomePage from 'components/pages/HomePage';\r\nimport { oldSelfServiceLink } from 'config';\r\nimport IframePage from 'components/core/IFramePage';\r\nimport CustomerDetailsRedirect from 'components/pages/CustomerDetailsRedirect';\r\nimport SuspensionRuleList from 'components/pages/SuspensionRules/List';\r\nimport SuspensionRuleDetail from 'components/pages/SuspensionRules/Detail/SuspensionRuleDetail';\r\nimport SsoGroupList from 'components/pages/SsoGroupManangement/List';\r\nimport SsoGroupEdit from 'components/pages/SsoGroupManangement/Edit';\r\nimport SsoGroupAdd from 'components/pages/SsoGroupManangement/Add';\r\nimport customerRoutes from './customerRoutes';\r\n\r\n// Must be in decreasing order of the path length. Must use arrays for nested paths or can mess up the bread crumbs.\r\nconst layoutRoutes = [\r\n {\r\n path: '/',\r\n exact: true,\r\n component: HomePage,\r\n ignoreForBreadCrumb: true,\r\n },\r\n {\r\n path: '/Terms',\r\n component: TermsAndConditions,\r\n },\r\n {\r\n path: '/Customers',\r\n component: customerRoutes,\r\n },\r\n {\r\n path: '/Customer/Detail',\r\n component: CustomerDetailsRedirect,\r\n },\r\n {\r\n path: '/Reports',\r\n frameSrc: oldSelfServiceLink + '/Reports/Home',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/OmgSettings',\r\n frameSrc: oldSelfServiceLink + '/OMG/OmgSettings/List',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/BrandTemplates',\r\n frameSrc: oldSelfServiceLink + '/OMG/BrandTemplates/List',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/AccountTemplates',\r\n frameSrc: oldSelfServiceLink + '/OMG/AccountTemplates/List',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/BulkBusinessIdUpdate',\r\n frameSrc: oldSelfServiceLink + '/BulkAccountUpdates/Upload',\r\n component: IframePage,\r\n breadCrumbName: 'Bulk BusinessId Update',\r\n },\r\n {\r\n path: '/InvoiceUpload',\r\n frameSrc: oldSelfServiceLink + '/CustomerInvoice/Upload',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/UploadCCBuckets',\r\n frameSrc: oldSelfServiceLink + '/Service/UploadCCBuckets',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/Forms',\r\n frameSrc: oldSelfServiceLink + '/Document/List',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/UserManagement',\r\n frameSrc: oldSelfServiceLink + '/Administration/WebUsersManager',\r\n component: IframePage,\r\n breadCrumbName: 'User Management',\r\n },\r\n {\r\n path: '/GroupManagement',\r\n frameSrc:\r\n oldSelfServiceLink + '/Administration/WebGroupsManager?uid={#userId}',\r\n component: IframePage,\r\n breadCrumbName: 'Group Management',\r\n },\r\n {\r\n path: '/Settings',\r\n frameSrc: oldSelfServiceLink + '/Administration/Settings',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/SuspensionRules/:facilityAccountId/Edit',\r\n component: SuspensionRuleDetail,\r\n },\r\n {\r\n path: '/SuspensionRules',\r\n component: SuspensionRuleList,\r\n breadCrumbName: 'Suspension Rules',\r\n },\r\n {\r\n path: '/SsoGroupManagement/Add',\r\n component: SsoGroupAdd,\r\n },\r\n {\r\n path: '/SsoGroupManagement/:ssoGroupId/Edit',\r\n component: SsoGroupEdit,\r\n },\r\n {\r\n path: '/SsoGroupManagement',\r\n component: SsoGroupList,\r\n breadCrumbName: 'SSO Group Management',\r\n },\r\n {\r\n path: '/MyProfile',\r\n\r\n frameSrc:\r\n oldSelfServiceLink +\r\n '/Administration/WebUserProfile/Edit?userId={#userId}',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/MySettings',\r\n frameSrc:\r\n oldSelfServiceLink +\r\n '/Administration/WebUserProfile/EditUserSettings?userId={#userId}',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/Help',\r\n frameSrc: oldSelfServiceLink + '/Help/List',\r\n component: IframePage,\r\n },\r\n {\r\n path: '/',\r\n component: HomePage,\r\n ignoreForBreadCrumb: true,\r\n }, //all other route will be redirected to route, has to be last one\r\n];\r\n\r\nexport default layoutRoutes;\r\n","import React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport AppLayout from 'components/core/AppLayout';\r\n\r\nexport const renderNestedLayoutRoutes = (routesList) => {\r\n if (!routesList) return null;\r\n return routesList.map((routeEntry, index) => {\r\n const { component: RouteComponent, path, frameSrc, exact } = routeEntry;\r\n\r\n if (Array.isArray(RouteComponent)) {\r\n return (\r\n \r\n {renderNestedLayoutRoutes(RouteComponent)}\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {frameSrc ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n );\r\n });\r\n};\r\n\r\n// Replace the path like /Customers/:adfitNo with param { adfitNo: '1234' }\r\nexport const replacePathParams = (path, params) => {\r\n if (!params || !path) return path;\r\n return Object.keys(params).reduce(\r\n (accumulator, currentValue) =>\r\n accumulator.replace(`:${currentValue}`, params[currentValue]),\r\n path\r\n );\r\n};\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 8L4.43886 4.49618L1 1\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIcArrowRight = function SvgIcArrowRight(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return React.createElement(\"svg\", _extends({\n width: 6,\n height: 9,\n viewBox: \"0 0 6 9\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return React.createElement(SvgIcArrowRight, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/ic-arrow-right.af64a385.svg\";\nexport { ForwardRef as ReactComponent };","import { styled } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\nimport { ReactComponent as ArrowRight } from 'assets/icons/ic-arrow-right.svg';\r\n\r\nexport const Container = styled('div')(({ theme }) => ({\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex',\r\n },\r\n '& a:last-child': {\r\n color: theme.palette.xpl.text.primary,\r\n },\r\n '& svg': {\r\n color: theme.palette.xpl.dm.text.secondary,\r\n },\r\n}));\r\n\r\nexport const LinkContainer = styled(Link)(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n color: theme.palette.xpl.text.secondary,\r\n}));\r\n\r\nexport const ArrowRightIcon = styled(ArrowRight)(({ theme }) => ({\r\n margin: '0 20px',\r\n color: theme.palette.xpl.text.secondary,\r\n}));\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport flattenDeep from 'lodash.flattendeep';\r\nimport PropTypes from 'prop-types';\r\nimport { useRouteMatch, useParams } from 'react-router-dom';\r\nimport { replacePathParams } from 'utils/routes';\r\n\r\nimport * as Styled from './BreadCrumbs.styled';\r\n\r\nconst BreadCrumbs = React.memo((props) => {\r\n const { routesList } = props;\r\n\r\n const { path } = useRouteMatch();\r\n\r\n const params = useParams();\r\n\r\n //If the breadcrumb name is not present then get it from the path.\r\n const getBreadCrumbNameFromPath = useCallback((givenPath, params) => {\r\n const splitPaths = replacePathParams(givenPath, params)\r\n .split('/')\r\n .filter((i) => i !== '');\r\n return splitPaths[splitPaths.length - 1];\r\n }, []);\r\n\r\n //Generate bread crumbs recursively based on the routes array.\r\n const breadCrumbEntries = useMemo(() => {\r\n const getBreadCrumbEntries = (routeEntries, currentPath) =>\r\n routeEntries\r\n .filter((entry) => new RegExp(entry.path, 'i').test(currentPath))\r\n .map((entry) => {\r\n if (entry.ignoreForBreadCrumb) {\r\n return null;\r\n }\r\n if (Array.isArray(entry.component)) {\r\n return getBreadCrumbEntries(entry.component, currentPath);\r\n }\r\n //Replace any params.\r\n const { breadCrumbName, path: routePath } = entry;\r\n return {\r\n name:\r\n breadCrumbName || getBreadCrumbNameFromPath(routePath, params),\r\n url: replacePathParams(routePath, params),\r\n };\r\n })\r\n .filter((val) => !!val);\r\n\r\n return flattenDeep(getBreadCrumbEntries(routesList, path)).reverse();\r\n }, [path, params, routesList, getBreadCrumbNameFromPath]);\r\n\r\n return (\r\n \r\n {breadCrumbEntries &&\r\n breadCrumbEntries.map(({ name, url }, index) => (\r\n \r\n {name}\r\n {index < breadCrumbEntries.length - 1 && }\r\n \r\n ))}\r\n \r\n );\r\n});\r\n\r\nBreadCrumbs.displayName = 'BreadCrumbs';\r\n\r\nBreadCrumbs.propTypes = {\r\n routesList: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n breadCrumbName: PropTypes.string,\r\n path: PropTypes.string.isRequired,\r\n component: PropTypes.oneOfType([\r\n PropTypes.object,\r\n PropTypes.array,\r\n PropTypes.func,\r\n ]),\r\n ignoreForBreadCrumb: PropTypes.bool,\r\n })\r\n ).isRequired,\r\n};\r\n\r\nexport default BreadCrumbs;\r\n","import { styled, Menu, MenuItem } from '@material-ui/core';\r\nimport { IconButton } from '@ds/react-components';\r\n\r\n//This acts as a placeholder for other elements to be placed below this.\r\nexport const TopBarStaticContainer = styled('div')({\r\n width: '100%',\r\n height: '64px',\r\n});\r\n\r\n//The height of the fixed container and the height of the static container must be same.\r\nexport const TopBarFixedContainer = styled('div')(({ theme, sidebar }) => ({\r\n width: sidebar ? `calc(100% - ${theme.dimension.sideBarWidth}px)` : '100%',\r\n padding: '12px 40px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: theme.palette.common.white,\r\n transition: theme.transitions.create(['width', 'margin'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: sidebar\r\n ? theme.transitions.duration.enteringScreen\r\n : theme.transitions.duration.leavingScreen,\r\n }),\r\n boxShadow: '0 1px 5px 0 rgba(0, 0, 0, 0.05)',\r\n position: 'fixed',\r\n top: 0,\r\n left: sidebar ? theme.dimension.sideBarWidth : 0,\r\n justifyContent: 'space-between',\r\n height: '64px',\r\n zIndex: theme.zIndex.drawer + 1,\r\n}));\r\n\r\nexport const FlexGrower = styled('div')({\r\n flexGrow: 1,\r\n});\r\n\r\nexport const DrawerMenuOpenButton = styled(IconButton)(({ sidebar }) => ({\r\n display: sidebar ? 'none' : 'block',\r\n marginLeft: '12px',\r\n marginRight: '36px',\r\n}));\r\n\r\nexport const ProfileMenuContainer = styled('div')(({ menuopen }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n cursor: 'pointer',\r\n paddingRight: menuopen ? '17px' : '0px', //Fix for disappearing scroll bar\r\n}));\r\n\r\nexport const ProfileName = styled('p')({\r\n fontSize: '14px',\r\n margin: '0 0 0 10px',\r\n});\r\n\r\nexport const ProfileMenu = styled(Menu)(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n}));\r\n\r\nexport const ProfileMenuItem = styled(MenuItem)(({ theme, line }) => ({\r\n color: theme.palette.common.black,\r\n borderBottom: line ? `1px solid ${theme.palette.common.athensGray} ` : 'none',\r\n}));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport HamBurgerMenuIcon from '@material-ui/icons/Menu';\r\nimport layoutRoutes from 'components/core/AppRoutes/layoutRoutes';\r\nimport BreadCrumbs from './BreadCrumbs';\r\n\r\nimport * as Styled from './TopBar.styled';\r\n\r\nconst TopBar = (props) => {\r\n const { isSideBarOpen, handleSideBarOpen } = props;\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\nTopBar.propTypes = {\r\n isSideBarOpen: PropTypes.bool.isRequired,\r\n handleSideBarOpen: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TopBar;\r\n","import { styled } from '@material-ui/core/styles';\r\n\r\nexport const AppContainer = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n width: '100%',\r\n}));\r\n\r\nexport const VerticalContentContainer = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n}));\r\n\r\n// Not using 'main' tag here as it is not supported by IE11.\r\nexport const PageContainer = styled('div')({});\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { setSideBarOpenPreference } from 'utils/userPreferences';\r\nimport profileMenuEntries from 'constants/profileMenuEntries';\r\nimport sideMenuEntries from 'constants/sideMenuEntries';\r\nimport SideMenu from './SideMenu';\r\nimport TopBar from './TopBar';\r\n\r\nimport * as Styled from './AppLayout.styled';\r\n\r\nconst AppLayout = (props) => {\r\n const {\r\n children,\r\n permissions,\r\n profileName,\r\n isSideBarOpen,\r\n featureFlags,\r\n updateIsSideBarOpen,\r\n } = props;\r\n\r\n const handleSideBarClose = useCallback(() => {\r\n setSideBarOpenPreference(false);\r\n updateIsSideBarOpen(false);\r\n }, [updateIsSideBarOpen]);\r\n\r\n const handleSideBarOpen = useCallback(() => {\r\n setSideBarOpenPreference(true);\r\n updateIsSideBarOpen(true);\r\n }, [updateIsSideBarOpen]);\r\n\r\n useEffect(() => {\r\n window.scroll(0, 0);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nAppLayout.propTypes = {\r\n permissions: PropTypes.arrayOf(PropTypes.string),\r\n profileName: PropTypes.string,\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n isSideBarOpen: PropTypes.bool.isRequired,\r\n updateIsSideBarOpen: PropTypes.func.isRequired,\r\n};\r\n\r\nAppLayout.defaultProps = {};\r\n\r\nexport default AppLayout;\r\n","import { connect } from 'react-redux';\r\nimport { updateIsSideBarOpen } from 'ducks/meta';\r\nimport AppLayout from './AppLayout';\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n permissions: state.auth.permissions,\r\n userId: state.auth.userId,\r\n profileName: state.auth.fullName,\r\n localisation: state.localisation,\r\n isSideBarOpen: state.meta.isSideBarOpen,\r\n featureFlags: state.featureFlags,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateIsSideBarOpen,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppLayout);\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Redirect, Switch, useLocation } from 'react-router-dom';\r\nimport { getUserTcPreference, setRequestedPath } from 'utils/userPreferences';\r\nimport AppLayout from 'components/core/AppLayout';\r\nimport TermsAndConditions from 'components/pages/TermsAndConditions';\r\n\r\nconst PrivateRoutesWrapper = (props) => {\r\n const { isAuthenticated, hasAcceptedTC, userId, checkLogin, children } =\r\n props;\r\n const { pathname, search = '' } = useLocation();\r\n const [hasCheckedLogin, setHasCheckedLogin] = useState(false);\r\n\r\n useEffect(() => {\r\n (async function () {\r\n setRequestedPath(pathname, search);\r\n // Wait till the action is completed. Helps prevent calling login function in each reload.\r\n await checkLogin();\r\n setHasCheckedLogin(true);\r\n })();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pathname]);\r\n\r\n if (!hasCheckedLogin) {\r\n return null;\r\n }\r\n\r\n if (!isAuthenticated) {\r\n return ;\r\n }\r\n\r\n // The http effect is not immediate, so checking the local storage.\r\n if (!(hasAcceptedTC || getUserTcPreference(userId)))\r\n return (\r\n \r\n \r\n \r\n );\r\n return {children};\r\n};\r\n\r\nPrivateRoutesWrapper.propTypes = {\r\n isAuthenticated: PropTypes.bool,\r\n hasAcceptedTC: PropTypes.bool,\r\n userId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n checkLogin: PropTypes.func.isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n};\r\n\r\nexport default PrivateRoutesWrapper;\r\n","import React, { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport Login from 'components/pages/Login';\r\nimport LoginCallback from 'components/pages/LoginCallback';\r\nimport Error from 'components/pages/Error';\r\nimport Logout from 'components/pages/Logout';\r\nimport PrivateRoutesWrapper from 'components/core/PrivateRoutesWrapper';\r\nimport { renderNestedLayoutRoutes } from 'utils/routes';\r\nimport layoutRoutes from './layoutRoutes';\r\n\r\nconst AppRoutes = (props) => {\r\n const {\r\n isAuthenticated,\r\n hasAcceptedTC,\r\n userId,\r\n checkLogin,\r\n getFeatureFlags,\r\n } = props;\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n await Promise.all([getFeatureFlags()]);\r\n } catch (e) {\r\n console.warn(e);\r\n }\r\n })();\r\n }, [getFeatureFlags]);\r\n\r\n return (\r\n \r\n {/*Public routes*/}\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 {/* Private routes with layout*/}\r\n \r\n \r\n {renderNestedLayoutRoutes(layoutRoutes)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAppRoutes.propTypes = {\r\n isAuthenticated: PropTypes.bool,\r\n hasAcceptedTC: PropTypes.bool,\r\n userId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n checkLogin: PropTypes.func.isRequired,\r\n};\r\n\r\nAppRoutes.defaultProps = {\r\n isAuthenticated: false,\r\n hasAcceptedTC: true,\r\n userId: null,\r\n};\r\n\r\nexport default AppRoutes;\r\n","import { connect } from 'react-redux';\r\nimport { checkLogin } from 'ducks/auth';\r\nimport { getFeatureFlags } from 'ducks/featureFlags';\r\nimport AppRoutes from './AppRoutes';\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n userId: state.auth.userId,\r\n isAuthenticated: state.auth.isAuthenticated,\r\n hasAcceptedTC: state.auth.hasAcceptedTC,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n checkLogin: checkLogin,\r\n getFeatureFlags,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppRoutes);\r\n","import { styled } from '@material-ui/core';\r\n\r\nexport const AlertContainer = styled('div')({\r\n padding: '16px 24px',\r\n});\r\n\r\nexport const AlertTitle = styled('div')(({ theme }) => ({\r\n color: theme.palette.common.black,\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n marginBottom: '16px',\r\n}));\r\n\r\nexport const AlertContent = styled('div')(({ theme }) => ({\r\n color: theme.palette.common.lightText,\r\n marginBottom: '16px',\r\n}));\r\n\r\nexport const AlertFooter = styled('div')({\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { Link } from 'react-router-dom';\r\nimport { TextButton } from '@ds/react-components';\r\n\r\nimport * as Styled from './HttpAlertDialog.styled';\r\n\r\nconst HttpAlertDialog = (props) => {\r\n const { httpError, localisation, resetHttpError } = props;\r\n\r\n const getAjaxErrorMessage = () => {\r\n const prompt = localisation.prompts;\r\n if (!httpError) return prompt.ajaxError_Generic;\r\n const { status } = httpError;\r\n return prompt['ajaxError_' + status] || prompt.ajaxError_Generic;\r\n };\r\n\r\n const alert = {\r\n showAlert: httpError != null,\r\n title: localisation.prompts.ajaxErrorTitle,\r\n text: getAjaxErrorMessage(),\r\n redirectUrl: '/LogOut',\r\n buttonText: 'Sign Out',\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {alert.title}\r\n \r\n \r\n {alert.text}\r\n \r\n \r\n \r\n \r\n {alert.buttonText}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nHttpAlertDialog.propTypes = {\r\n httpError: PropTypes.shape({\r\n status: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\r\n .isRequired,\r\n }),\r\n resetHttpError: PropTypes.func.isRequired,\r\n localisation: PropTypes.shape({\r\n prompts: PropTypes.object.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nHttpAlertDialog.defaultProps = {\r\n httpError: null,\r\n};\r\n\r\nexport default HttpAlertDialog;\r\n","import { connect } from 'react-redux';\r\nimport { resetHttpError } from 'ducks/meta';\r\nimport HttpAlertDialog from './HttpAlertDialog';\r\n\r\nconst mapStateToProps = (state) => ({\r\n httpError: state.meta.httpError,\r\n localisation: state.localisation,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n resetHttpError,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HttpAlertDialog);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport BounceLoader from 'react-spinners/BounceLoader';\r\n\r\nconst styles = (theme) => ({\r\n spinner: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'fixed',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n lef: 0,\r\n zIndex: 2500,\r\n cursor: 'pointer',\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n },\r\n});\r\n\r\nconst AppLoading = (props) => {\r\n const { classes, appLoading } = props;\r\n return appLoading ? (\r\n
    \r\n \r\n
    \r\n ) : null;\r\n};\r\n\r\nAppLoading.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n show: PropTypes.bool,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(AppLoading);\r\n","import { connect } from 'react-redux';\r\nimport AppLoading from './AppLoading';\r\n\r\nconst mapStateToProps = (state) => ({\r\n appLoading: state.meta.appLoading,\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AppLoading);\r\n","import { createReducer } from 'utils/reduxCreators';\r\nimport * as config from 'config';\r\nimport { prompts, locales } from 'localisation/root';\r\n\r\nexport const LOCALISATIONS_LOADED = 'localisation/LOCALISATIONS_LOADED';\r\n\r\nconst initialState = {\r\n prompts: prompts,\r\n locales: locales,\r\n};\r\n\r\nexport default createReducer(initialState, {\r\n [LOCALISATIONS_LOADED]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n prompts: { ...prompts, ...payload.prompts },\r\n locales: { ...locales, ...payload.locales },\r\n };\r\n },\r\n});\r\n\r\nexport const loadLocalisationConfigs = () => async (dispatch, getState) => {\r\n const conf = config;\r\n //load region specific localisation config based on locale, overriding root localisation\r\n const localisationsFile = await import(\r\n `../localisation/${conf.locale}/index.js`\r\n );\r\n dispatch({ type: LOCALISATIONS_LOADED, payload: localisationsFile });\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport AppRoutes from 'components/core/AppRoutes';\r\nimport { basePath } from 'config';\r\nimport HttpAlertDialog from 'components/core/HttpAlertDialog';\r\nimport AppLoading from 'components/core/AppLoading';\r\nimport { loadLocalisationConfigs } from 'ducks/localisation';\r\nimport { MuiPickersUtilsProvider } from '@ds/react-components';\r\nimport moment from 'moment';\r\nimport MomentUtils from '@date-io/moment';\r\n\r\nmoment.locale('en');\r\n\r\nconst App = (props) => {\r\n const { loadLocalisationConfigs } = props;\r\n useEffect(() => {\r\n loadLocalisationConfigs();\r\n }, [loadLocalisationConfigs]);\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\nexport default connect(null, {\r\n loadLocalisationConfigs,\r\n})(App);\r\n","import thunk from 'redux-thunk';\r\nimport apiFailureMiddleware from './apiFailure';\r\n\r\n// apiFailureMiddleware must come before the thunk.\r\n\r\nconst middlewares = [apiFailureMiddleware, thunk];\r\n\r\nexport default middlewares;\r\n","import ky from 'ky';\r\nimport { updateHttpError } from 'ducks/meta';\r\n\r\nconst apiFailureMiddleware = (store) => (next) => (action) => {\r\n // If not an async action then no need to check for api errors.\r\n if (typeof action !== 'function') {\r\n return next(action);\r\n }\r\n const result = next(action);\r\n // Async function returning promise will throw the error.\r\n if (result instanceof Promise) {\r\n return result.catch((err) => {\r\n if (err instanceof ky.HTTPError) {\r\n const { response } = err;\r\n store.dispatch(updateHttpError(response.clone()));\r\n }\r\n throw err;\r\n });\r\n }\r\n return result;\r\n};\r\n\r\nexport default apiFailureMiddleware;\r\n","import { combineReducers } from 'redux';\r\nimport metaReducer from './meta';\r\nimport authReducer from './auth';\r\nimport localisationReducer from './localisation';\r\nimport customerDetailsReducer from './customerDetails';\r\nimport transactionsReducer from './transactions';\r\nimport accountSearchReducer from './accountSearchResult';\r\nimport cancellationReasonReducers from './cancellationReasons';\r\nimport accountMetaReducer from './accountMeta';\r\nimport facilitiesReducer from './facilities';\r\nimport guarantorReducer from './guarantorDetails';\r\nimport featureFlagsReducer from './featureFlags';\r\nimport suspensionRulesReducer from './suspensionRules';\r\nimport suspensionReducer from './suspensions';\r\nimport ssoGroupsReducer from './ssoGroupManagement';\r\n\r\n// Follows the pattern mentioned here - https://github.com/erikras/ducks-modular-redux\r\n\r\nconst getRootReducer = () =>\r\n combineReducers({\r\n meta: metaReducer,\r\n auth: authReducer,\r\n localisation: localisationReducer,\r\n customerDetails: customerDetailsReducer,\r\n transactions: transactionsReducer,\r\n accountSearchResult: accountSearchReducer,\r\n cancellationReasons: cancellationReasonReducers,\r\n accountMeta: accountMetaReducer,\r\n facilities: facilitiesReducer,\r\n guarantorDetails: guarantorReducer,\r\n featureFlags: featureFlagsReducer,\r\n suspensions: suspensionReducer,\r\n suspensionRules: suspensionRulesReducer,\r\n ssoGroups: ssoGroupsReducer,\r\n });\r\n\r\nexport default getRootReducer;\r\n","import { applyMiddleware, compose, createStore } from 'redux';\r\nimport middlewares from 'middlewares';\r\nimport getRootReducer from 'ducks';\r\nimport { initialState as metaInitialState } from 'ducks/meta';\r\nimport { getSideBarOpenPreference } from './utils/userPreferences';\r\n\r\nconst getSideBarInitialState = () => {\r\n try {\r\n const closeSideBarAtWidth = 600; //sm\r\n const isNotMobile =\r\n window.innerWidth > closeSideBarAtWidth &&\r\n window.outerWidth > closeSideBarAtWidth;\r\n return !!(isNotMobile || getSideBarOpenPreference());\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nconst getInitialState = () => {\r\n return {\r\n meta: {\r\n ...metaInitialState,\r\n isSideBarOpen: getSideBarInitialState(),\r\n },\r\n };\r\n};\r\n\r\nexport default function configureStore() {\r\n // In development, use the browser's Redux dev tools extension if installed\r\n const enhancers = [];\r\n const isDevelopment = process.env.NODE_ENV === 'development';\r\n if (\r\n isDevelopment &&\r\n typeof window !== 'undefined' &&\r\n window.__REDUX_DEVTOOLS_EXTENSION__\r\n ) {\r\n enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n return createStore(\r\n getRootReducer(),\r\n getInitialState(),\r\n compose(applyMiddleware(...middlewares), ...enhancers)\r\n );\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { MuiThemeProvider } from '@material-ui/core/styles';\r\nimport { defaultTheme } from '@ds/react-components';\r\nimport GlobalStyles from 'styles/GlobalStyles';\r\nimport App from './App.js';\r\nimport configureStore from './configureStore';\r\n\r\nconst store = configureStore();\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n"],"sourceRoot":""}