{"version":3,"file":"js/6c97f7445aabfca9cc34.chunk.js","mappings":"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","sources":["webpack:///./features/location/types/CountryCode.ts","webpack:///./legacy/features/companies/bankLogin/bankLoginSource.ts","webpack:///./legacy/services/flexSelectDataService.ts","webpack:///./legacy/services/pagination.ts","webpack:///./legacy/services/xhrService.ts","webpack:///./legacy/utils/dotnetcore.ts","webpack:///./legacy/modals/manage/popup.ts","webpack:///./legacy/utils/popupManager.ts","webpack:///./legacy/features/companies/emailMoneyTransfers/VoidChequeEftDialog.tsx","webpack:///./legacy/modals/styled/paymentTransactionError.ts","webpack:///./legacy/services/emailMoneyTransfer.ts","webpack:///./legacy/viewmodels/emailmoneytransfer/steps.ts","webpack:///./legacy/viewmodels/viewModels.ts","webpack:///./utils/invalidateReactQueriesFromDurandal.ts"],"sourcesContent":["enum CountryCode {\n None = '',\n Canada = 'CA',\n UnitedStates = 'US',\n Australia = 'AU',\n Austria = 'AT',\n Belgium = 'BE',\n Brazil = 'BR',\n China = 'CN',\n Croatia = 'HR',\n Cyprus = 'CY',\n Denmark = 'DK',\n Estonia = 'EE',\n Finland = 'FI',\n France = 'FR',\n Germany = 'DE',\n Greece = 'GR',\n HongKong = 'HK',\n India = 'IN',\n Ireland = 'IE',\n Israel = 'IL',\n Italy = 'IT',\n Japan = 'JP',\n Latvia = 'LV',\n Lithuania = 'LT',\n Malta = 'MT',\n Mexico = 'MX',\n Netherlands = 'NL',\n NewZealand = 'NZ',\n Norway = 'NO',\n Philippines = 'PH',\n Poland = 'PL',\n Portugal = 'PT',\n RussianFederation = 'RU',\n Singapore = 'SG',\n Slovakia = 'SK',\n Slovenia = 'SI',\n SouthAfrica = 'ZA',\n SouthKorea = 'KR',\n Spain = 'ES',\n Sweden = 'SE',\n Switzerland = 'CH',\n Taiwan = 'TW',\n UnitedArabEmirates = 'AE',\n UnitedKingdom = 'UK',\n}\n\nexport default CountryCode;\n","enum BankLoginSource {\n Onboarding = 'Onboarding',\n AddBankAccount = 'AddBankAccount',\n EmailMoneyTransfer = 'EmailMoneyTransfer',\n PaymentRequest = 'PaymentRequest',\n}\n\nexport default BankLoginSource;\n","import * as app from 'durandal/app';\n\nexport class FlexSelectDataService {\n public queryPromiseCallback: (searchQuery: string, flexselect: any) => JQueryPromise;\n\n public querySecondaryPromiseCallback: (searchQuery: string, flexselect: any) => Promise;\n\n private secondaryCachePromises: Array>> = [];\n\n // All flexselects that are using this service right now will be in here\n public flexselects: Array = [];\n\n public selectCallback: (paymentToUpdate: any, newValue: any, flexSelect: any) => void;\n\n public flexSelectTextUpdatedCallback: (searchQuery: string, flexSelect: any) => void;\n\n private queuedSearchQuery: string = null;\n\n private searchStatus = 'loaded';\n\n public appEventsClearCache: Array = []; // Clear cached items when any of these events happen in the app\n\n private cachePromises: Array>> = [];\n\n private appEventsClearCacheEvents: Array = [];\n\n public cacheEnabled = true;\n\n /**\n * How long to wait between searches\n */\n public bounceTimeout = 50;\n\n /**\n * If set then items will be reduced through this function (Can this to remove duplicates for example)\n */\n public itemsReducerFunction: any;\n\n public attached() {\n // Clear cache on realtime events\n $.each(this.appEventsClearCache, (index, appEventClearCache) => {\n const clearCacheEvent = app.on(appEventClearCache).then(() => {\n this.clearCache();\n });\n this.appEventsClearCacheEvents.push(clearCacheEvent);\n });\n\n let searchItemsPrimary: Array = [];\n let searchItemsSecondary: Array = [];\n\n let bounceTimeout: number | null = null;\n let secondaryBounceTimeout: number | null = null;\n\n const flexSelectTextUpdatedCallback = (searchQuery: string, flexSelect: any) => {\n searchQuery = $.trim(searchQuery);\n this.queuedSearchQuery = searchQuery;\n\n const deferred = $.Deferred();\n\n const updateFlexselectItems = () => {\n const getItems = () => {\n const items = [...searchItemsPrimary, ...searchItemsSecondary];\n\n if (this.itemsReducerFunction) {\n return items.reduce(this.itemsReducerFunction, []);\n }\n\n return items;\n };\n\n flexSelect.updateItems(getItems());\n };\n\n // Primary search\n if (bounceTimeout) {\n clearTimeout(bounceTimeout);\n }\n\n const trimmedSearchQuery = $.trim(searchQuery);\n\n // If result is already cached we don't need to add a bounce timeout\n const isCached = this.cacheEnabled && !!this.cachePromises[trimmedSearchQuery];\n const searchBounceTimeout = isCached ? 0 : this.bounceTimeout;\n\n bounceTimeout = window.setTimeout(() => {\n this.searchStatus = 'loading';\n this.queryDataFromPromse(searchQuery, flexSelect).then((dataResults: any) => {\n // The results of the query match what was searched last\n if (searchQuery == this.queuedSearchQuery) {\n searchItemsPrimary = dataResults;\n\n updateFlexselectItems();\n deferred.resolve(dataResults);\n\n this.searchStatus = 'loaded';\n }\n });\n }, searchBounceTimeout);\n\n // Allows for additional secondary query (This is a seprate query)\n if (secondaryBounceTimeout) {\n clearTimeout(secondaryBounceTimeout);\n }\n\n // If result is already cached we don't need to add a bounce timeout\n const isSecondarySearchCached =\n this.cacheEnabled && !!this.secondaryCachePromises[trimmedSearchQuery];\n const secondarySearchBounceTimeout = isSecondarySearchCached ? 0 : this.bounceTimeout;\n\n secondaryBounceTimeout = window.setTimeout(() => {\n if (this.querySecondaryPromiseCallback) {\n const getQueryPromise = () => {\n if (this.cacheEnabled && !!this.secondaryCachePromises[trimmedSearchQuery]) {\n return this.secondaryCachePromises[trimmedSearchQuery];\n }\n\n const queryPromise = this.querySecondaryPromiseCallback(trimmedSearchQuery, flexSelect);\n\n if (this.cacheEnabled) {\n this.secondaryCachePromises[trimmedSearchQuery] = queryPromise;\n }\n\n return queryPromise;\n };\n\n getQueryPromise().then((dataResults: any) => {\n searchItemsSecondary = dataResults;\n\n updateFlexselectItems();\n });\n }\n }, secondarySearchBounceTimeout);\n\n return deferred.promise();\n };\n\n this.flexSelectTextUpdatedCallback = flexSelectTextUpdatedCallback.bind(this);\n }\n\n public queryDataFromPromse(searchQuery: string, flexSelect: any): JQueryPromise> {\n searchQuery = $.trim(searchQuery);\n if (!this.cacheEnabled) {\n return this.queryPromiseCallback(searchQuery, flexSelect);\n }\n\n if (!this.cachePromises[searchQuery]) {\n this.cachePromises[searchQuery] = this.queryPromiseCallback(searchQuery, flexSelect).fail(\n () => {\n this.cachePromises[searchQuery] = null;\n }\n );\n }\n\n return this.cachePromises[searchQuery];\n }\n\n public detached() {\n $.each(this.appEventsClearCacheEvents, (index, appEventsClearCacheEvent) => {\n appEventsClearCacheEvent.off();\n });\n\n this.clearCache();\n }\n\n public clearCache() {\n this.cachePromises = [];\n\n this.secondaryCachePromises = [];\n\n $.each(this.flexselects, (index, flexselect) => {\n flexselect.updateItems([]);\n });\n }\n\n public addFlexSelect(flexSelect: any) {\n this.flexselects.push(flexSelect);\n }\n\n public removeFlexSelect(flexSelectToRemove: any) {\n this.flexselects = $.grep(this.flexselects, (value) => value != flexSelectToRemove);\n }\n\n // We can clear labels of any flexselect by the value that is bound to it. All items in this array are visible on frontend\n public clearFlexSelectByBoundValue(boundToValue) {\n $.each(this.flexselects, (index, flexselect) => {\n if (flexselect.settings.value == boundToValue) {\n flexselect.setInitialValue(null);\n }\n });\n }\n\n // Query data set with \"\" and if there is just 1 item in the array we'll force the value of itemToUpdate to that\n public setQueryEmptySingle(itemToUpdate: KnockoutObservable) {\n return this.queryDataFromPromse('', null).then((results) => {\n if (results.length == 1) {\n itemToUpdate(results[0]);\n }\n });\n }\n}\n","import * as ko from 'knockout';\n\nexport class PaginationKnockoutModel {\n public page = ko.observable(0);\n\n public resultsPerPage = ko.observable(50);\n\n public totalPages = ko.observable(0);\n\n public totalResults = ko.observable(0);\n\n public rangeStart = ko.observable(0);\n\n public rangeEnd = ko.observable(0);\n\n private maxVisibleNumbers = 3; // 3 in each direction so 0,1,2,[3],4,5,6 if we are on page 3\n\n public setContentRange(contentRangeHeader: ContentRangeHeader) {\n this.rangeStart(contentRangeHeader.rangeStart);\n this.rangeEnd(contentRangeHeader.rangeEnd);\n this.totalResults(contentRangeHeader.size);\n this.totalPages(Math.ceil(contentRangeHeader.size / this.resultsPerPage()));\n }\n\n public navigatePage(page: number) {\n this.page(page);\n }\n\n public visiblePageNumbers = ko.pureComputed({\n read: (): Array => {\n const visibleRanges: Array = [];\n\n for (\n let i = this.page() - this.maxVisibleNumbers;\n i <= this.page() + this.maxVisibleNumbers;\n i += 1\n ) {\n if (i >= 0 && i < this.totalPages()) {\n visibleRanges.push(i);\n }\n }\n return visibleRanges;\n },\n deferEvaluation: true,\n });\n\n public isFirstPage = ko.pureComputed({\n read: (): boolean => this.page() == 0,\n deferEvaluation: true,\n });\n\n public isLastPage = ko.pureComputed({\n read: (): boolean => this.page() == this.totalPages() - 1,\n deferEvaluation: true,\n });\n\n public nextPageIsLastPage = ko.pureComputed({\n read: (): boolean => this.page() == this.totalPages() - 2,\n deferEvaluation: true,\n });\n\n public hasMoreNextVisiblePages = ko.pureComputed({\n read: (): boolean => this.page() + this.maxVisibleNumbers < this.totalPages() - 1,\n deferEvaluation: true,\n });\n\n public hasMorePreviousVisiblePages = ko.pureComputed({\n read: (): boolean => this.page() - this.maxVisibleNumbers > 0,\n deferEvaluation: true,\n });\n\n public lastPageNumber = ko.pureComputed({\n read: (): number => this.totalPages() - 1,\n deferEvaluation: true,\n });\n\n public previousPageIsFirstPage = ko.pureComputed({\n read: (): boolean => this.page() - 1 == 0,\n deferEvaluation: true,\n });\n\n public nextInSetOfPageNumbers = ko.pureComputed({\n read: (): number => this.page() + this.maxVisibleNumbers + 1,\n deferEvaluation: true,\n });\n\n public previousInSetOfPageNumbers = ko.pureComputed({\n read: (): number => this.page() - this.maxVisibleNumbers,\n deferEvaluation: true,\n });\n}\nexport class ContentRangeHeader {\n public unit: string;\n\n public rangeStart: number;\n\n public rangeEnd: number;\n\n public size: number;\n\n public static fromString(contentRange: string): ContentRangeHeader {\n const contentRangeGroups = /^bytes ([0-9]+)-([0-9]+)\\/([0-9]+)$/g.exec(contentRange);\n\n const contentRangeHeader = new ContentRangeHeader();\n contentRangeHeader.rangeStart = Number.parseInt(contentRangeGroups[1], 10);\n contentRangeHeader.rangeEnd = Number.parseInt(contentRangeGroups[2], 10);\n contentRangeHeader.size = Number.parseInt(contentRangeGroups[3], 10);\n\n return contentRangeHeader;\n }\n}\n","import * as paginationService from '@/legacy/services/pagination';\nimport { SessionTimeoutService } from '@/legacy/services/sessionTimeout';\nimport * as plootoUtils from '@/legacy/utils/plooto';\n\nexport class PromiseWithXhr {\n public dataPromise: JQueryPromise;\n\n public xhr: JQueryXHR;\n\n public getXhr: () => JQueryXHR;\n\n public contentRange: paginationService.ContentRangeHeader;\n\n // Allows us to process data before we return it back\n public dataProcessCallback: (data: any) => T;\n\n constructor() {\n this.dataPromise = $.Deferred();\n }\n\n public abort() {\n if (this.xhr) {\n this.xhr.abort();\n }\n }\n}\n\n/** @deprecated Use `ApiService` instead. */\nexport class XhrService {\n /**\n * This will re-try the xhr if there is a login error\n * @deprecated Use `ApiService` instead.\n */\n public initiatePromiseWithXhr(promiseWithXhr: PromiseWithXhr): JQueryPromise {\n let retryCounter = 0;\n\n const executeXhr = () => {\n promiseWithXhr.xhr = promiseWithXhr.getXhr();\n return promiseWithXhr.xhr.then((data, textStatus, jqXHR: JQueryXHR) => {\n if (data && data.error && data.type == 'invalid.authentication') {\n return SessionTimeoutService.showTimeout().then((loginResponse) => {\n if (loginResponse) {\n // Prevent infinite loop (if somehow we get invalid.authentication 3 times in a row after after successful login)\n retryCounter += 1;\n if (retryCounter > 3) {\n return (promiseWithXhr.dataPromise as any).reject(data);\n }\n\n return executeXhr(); // re-try this method\n }\n return undefined;\n });\n }\n\n if (plootoUtils.IsNullOrUndefined(data) || data.error === true) {\n return (promiseWithXhr.dataPromise as any).reject(data);\n }\n\n // add content range header to our object if one exists\n const contentRangeHeader = jqXHR.getResponseHeader('content-range');\n if (contentRangeHeader) {\n promiseWithXhr.contentRange = paginationService.ContentRangeHeader.fromString(\n jqXHR.getResponseHeader('content-range')\n );\n }\n\n if (promiseWithXhr.dataProcessCallback) {\n const dataCallbackResults = promiseWithXhr.dataProcessCallback(data);\n (promiseWithXhr.dataPromise as any).resolve(dataCallbackResults);\n } else {\n (promiseWithXhr.dataPromise as any).resolve(data);\n }\n\n retryCounter = 0; // Reset retry count\n return undefined;\n });\n };\n return executeXhr();\n }\n}\nexport const Instance = new XhrService();\n","/**\n * This class is just like URLSearchParams, except that it does not percent-encode parameter names.\n * For example, URLSearchParams may produce this:\n *\n * filter%5B0%5D.value=im+a+flower\n *\n * whereas this class will produce:\n *\n * filter[0].value=im+a+flower\n *\n * .NET Core 6's default query binder does not decode query parameter names, and this is our\n * work-around to avoid changing APIs to POST, or implementing our own model binder (which is\n * high-risk).\n */\nclass URLSearchParamsWithoutKeyEncoding extends URLSearchParams {\n /**\n * Returns a string containing a query string suitable for use in a URL, but without encoding\n * parameter names. Does not include the question mark. */\n toString(): string {\n return Array.from(this.entries())\n .map(([key, value]) => `${key}=${encodeURIComponent(value).replaceAll('%20', '+')}`)\n .join('&');\n }\n}\n\nfunction serializeValue(into: URLSearchParamsWithoutKeyEncoding, value: unknown, key: string) {\n if (Array.isArray(value)) {\n value.forEach((item, index) => serializeValue(into, item, `${key}[${index}]`));\n } else if (Object.prototype.toString.call(value) === '[object Object]') {\n Object.keys(value).forEach((name) => serializeValue(into, value[name], `${key}.${name}`));\n } else if (value == null) {\n into.append(key, '');\n } else {\n into.append(key, String(value));\n }\n}\n\n// We use interfaces and classes throughout legacy code, which are not assignable to Record, but are indeed compatible as far as we care. Provide an overload to handle this.\n\n/** Similar to $.param(obj), but uses URLSearchParamsWithoutKeyEncoding for final stringifying. */\nfunction serializeQueryWithoutKeyEncoding(data: Record): string | undefined;\nfunction serializeQueryWithoutKeyEncoding(data: object): string | undefined;\n\nfunction serializeQueryWithoutKeyEncoding(\n data: Record | null\n): string | undefined {\n if (data == null) {\n return undefined;\n }\n const params = new URLSearchParamsWithoutKeyEncoding();\n Object.keys(data).forEach((key) => serializeValue(params, data[key], key));\n return params.toString();\n}\n\nexport { URLSearchParamsWithoutKeyEncoding, serializeQueryWithoutKeyEncoding };\n","import * as dialog from 'plugins/dialog';\n\nimport BaseModal from '@/legacy/modals/BaseModal';\n\ndeclareModules({\n 'modals/manage/popup.html': () => import('@/legacy/modals/manage/popup.html'),\n});\n\nclass ManagePayee extends BaseModal {\n view = 'modals/manage/popup';\n\n public params: any;\n\n /** Used to prevent a call cycle when trying to close a popup. */\n public isClosing = false;\n\n private static lastScrollTop = 0;\n\n public Close(): void {\n // Restore scroll position\n $('#scroll-container').css({ height: 'auto', overflow: 'initial' });\n $(window).scrollTop(ManagePayee.lastScrollTop);\n\n const addedDialog = dialog.getDialog(this) as any;\n $(addedDialog.host)\n .css('position', 'fixed')\n .addClass('scale-out')\n .animate(\n {\n opacity: 0,\n },\n 300,\n () => {\n dialog.close(this);\n }\n );\n }\n\n public static show(view: string, params: any = undefined): ManagePayee {\n // Store scroll position (Content can be massive but the popup is small)\n ManagePayee.lastScrollTop = $(window).scrollTop();\n $('#scroll-container')\n .height($(window).height())\n .css('overflow', 'hidden')\n .scrollTop(ManagePayee.lastScrollTop);\n $(window).scrollTop(0);\n\n const dialogOptions = new ManagePayee();\n dialogOptions.params = params;\n dialogOptions.view = view;\n dialog.show(dialogOptions, undefined, 'modal');\n\n const addedDialog = dialog.getDialog(dialogOptions) as any;\n $(addedDialog.host).addClass('manage-modal-host');\n $(addedDialog.host).data('modal', dialogOptions);\n return dialogOptions;\n }\n\n public getView() {\n return this.view;\n }\n\n public resizeWrapper() {\n $(window).trigger('resize');\n }\n}\n\nexport default ManagePayee;\n","import * as app from 'durandal/app';\nimport * as router from 'plugins/router';\n\nimport popupModal from '@/legacy/modals/manage/popup';\n\nexport interface IModalOptions {\n fragmentUrl: string;\n modalHtmlPath: string;\n successCallback?: (any) => void;\n modalParamsCallback?: () => any;\n}\n\nexport class PopupManager {\n private activateModal: ModalOptions;\n\n private visiblePopupModal: popupModal = null;\n\n private getBaseDialogUrl: () => string;\n\n public get baseDialogUrl(): string {\n return this.getBaseDialogUrl?.() ?? '';\n }\n\n public set baseDialogUrl(value: string | (() => string)) {\n if (typeof value === 'function') {\n // If the route hosting the dialog has a dynamic route segment (e.g. /foo/:name/dialog/bar),\n // the caller needs to be able to provide the _current_ pathname on the fly. We accept a\n // getter-function to enable this.\n this.getBaseDialogUrl = value;\n } else if (typeof value === 'string') {\n // However, the rest of the app sticks to constant paths, and those are fine too.\n this.getBaseDialogUrl = () => value;\n } else {\n this.getBaseDialogUrl = undefined;\n }\n }\n\n private modalNavigationSubscription = null;\n\n public modals: Array = [];\n\n public attached() {\n this.modalNavigationSubscription = app\n .on('router:navigation:complete')\n .then((instance, instruction, router0) => {\n // close existing modals\n if (router0.activeInstruction().fragment.indexOf('/dialog/') === -1) {\n this.closeExistingModal();\n }\n\n // see if we landed on any dialog page\n this.CheckModalNavigation();\n });\n\n this.CheckModalNavigation();\n }\n\n public detached() {\n this.closeExistingModal();\n if (this.modalNavigationSubscription != null) {\n this.modalNavigationSubscription.off();\n this.modalNavigationSubscription = null;\n }\n }\n\n public AddModal(dialogToAdd: IModalOptions) {\n this.modals.push(dialogToAdd);\n }\n\n public Show(fragmentUrl: string) {\n $('html, body').animate({ scrollTop: 0 }, 300);\n router.navigate(this.baseDialogUrl + fragmentUrl);\n }\n\n public closeExistingModal() {\n if (this.visiblePopupModal == null) {\n return;\n }\n\n const currentFragment = router.activeInstruction().fragment;\n\n if (currentFragment === this.baseDialogUrl && !this.visiblePopupModal.isClosing) {\n this.visiblePopupModal.params?.goBackCallback();\n }\n\n this.visiblePopupModal.Close();\n this.visiblePopupModal = null;\n\n $('.mainContent').slideDown(100);\n }\n\n private showModalWithSafeClose(modalHtmlPath: string, componentParams: any) {\n const thisPopupModal = popupModal.show(modalHtmlPath, {\n ...componentParams,\n goBackCallback: (...args) => {\n thisPopupModal.isClosing = true;\n return componentParams.goBackCallback(...args);\n },\n success: (...args) => {\n thisPopupModal.isClosing = true;\n return componentParams.success(...args);\n },\n });\n return thisPopupModal;\n }\n\n public CheckModalNavigation() {\n $.each(this.modals, (index, modal) => {\n if (\n router.activeInstruction().fragment.indexOf(this.baseDialogUrl + modal.fragmentUrl) === 0\n ) {\n this.closeExistingModal();\n\n const activateModal = modal;\n\n let componentParams: any = {};\n if (activateModal.modalParamsCallback != null) {\n componentParams = activateModal.modalParamsCallback();\n }\n\n // Allows to override the default go bakc implementation\n if (!componentParams.goBackCallback) {\n componentParams.goBackCallback = () => {\n this.GoBack();\n };\n }\n componentParams.success = (params) => {\n router.navigate(this.baseDialogUrl);\n if (activateModal.successCallback != null) {\n activateModal.successCallback(params);\n }\n };\n\n this.visiblePopupModal = this.showModalWithSafeClose(modal.modalHtmlPath, componentParams);\n }\n });\n if (this.visiblePopupModal != null) {\n let slideInterval = null;\n slideInterval = setInterval(() => {\n if ($('.manage-modal-host .plooto-content-wrapper').length > 0) {\n $('.mainContent').slideUp(700);\n clearInterval(slideInterval);\n }\n }, 10);\n }\n }\n\n // Allows you to force show a model (without any url changes)\n public forceShow(modal) {\n const activateModal = modal;\n\n let componentParams: any = {};\n if (activateModal.modalParamsCallback != null) {\n componentParams = activateModal.modalParamsCallback();\n }\n\n if (!activateModal.goBackCallback) {\n componentParams.goBackCallback = () => {\n this.GoBack();\n };\n } else {\n componentParams.goBackCallback = activateModal.goBackCallback;\n }\n\n if (!activateModal.success) {\n componentParams.success = (params) => {\n router.navigate(this.baseDialogUrl);\n if (activateModal.successCallback != null) {\n activateModal.successCallback(params);\n }\n };\n } else {\n componentParams.success = activateModal.success;\n }\n\n this.visiblePopupModal = this.showModalWithSafeClose(modal.modalHtmlPath, componentParams);\n }\n\n public GoBack() {\n router.navigate(this.baseDialogUrl);\n }\n}\n","import { memo } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport AccountBalanceIcon from '@mui/icons-material/AccountBalance';\nimport AssignmentIcon from '@mui/icons-material/Assignment';\nimport { Button, DialogContent, Paper, Stack, Typography } from '@mui/material';\n\nimport Dialog from '@/components/dialogs/Dialog';\n\nconst classes = {\n card: {\n alignItems: 'center',\n border: 1,\n borderColor: 'grey.500',\n display: 'flex',\n flexDirection: 'column',\n height: 256,\n justifyContent: 'space-between',\n padding: 2,\n width: 216,\n },\n};\n\ninterface Props {\n isOpen?: boolean;\n onConnectBankAccountClick: () => void;\n onDialogClose: () => void;\n onEnterBankAccountDetailsClick: () => void;\n}\n\nconst VoidChequeEftDialog = ({\n isOpen,\n onConnectBankAccountClick,\n onDialogClose,\n onEnterBankAccountDetailsClick,\n}: Props) => (\n }\n >\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n);\n\nexport default memo(VoidChequeEftDialog);\n","import * as dialog from 'plugins/dialog';\n\nimport BaseModal from '@/legacy/modals/BaseModal';\nimport * as paymentService from '@/legacy/services/company/payment';\n\ndeclareModules({\n 'modals/styled/paymentTransactionError.html': () =>\n import('@/legacy/modals/styled/paymentTransactionError.html'),\n});\n\nclass ViewModelParams {\n public title: string;\n\n public body: string;\n\n public transactionError: string;\n}\n\nclass StyledModal extends BaseModal {\n view = 'modals/styled/paymentTransactionError';\n\n public static ViewModelParams: typeof ViewModelParams = ViewModelParams;\n\n public params: ViewModelParams;\n\n public transactionErrorDescription: string;\n\n public transactionErrorTitle: string;\n\n constructor(params: ViewModelParams) {\n super();\n this.params = params;\n\n this.transactionErrorTitle = paymentService.Instance.getTransactionErrorTitle(\n params.transactionError,\n false\n );\n this.transactionErrorDescription = paymentService.Instance.getTransactionErrorDescription(\n params.transactionError,\n false\n );\n }\n\n public close(): void {\n dialog.close(this);\n }\n\n public continueModal(): void {\n dialog.close(this, true);\n }\n\n public static show(params: ViewModelParams): JQueryPromise {\n return dialog.show(new StyledModal(params));\n }\n}\n\nexport default StyledModal;\n","import * as system from 'durandal/system';\n\nimport * as userService from '@/legacy/services/user';\nimport * as plootoUtils from '@/legacy/utils/plooto';\n\nconst API_PREFIX = 'v1';\n\nexport class EmailMoneyTransferViewModel {\n public id: string;\n\n public securityQuestion: number;\n\n public status: string;\n\n public skipSecurityQuestions: boolean;\n\n public prefillFromName: string;\n\n public prefillCountry: string;\n\n public prefillCurrency: string;\n\n public payeeEmailKey: string;\n\n public bankDetailsRequired: boolean;\n\n public isSecondaryBankLoginEnabled: boolean;\n\n public companyCountry: string;\n\n public companyName: string;\n}\n\nexport class EmailMoneyTransferDetailsViewModel {\n public amount: number;\n\n public from: string;\n\n public country: string;\n\n public currency: string;\n\n public expiry: string;\n\n public canReuseAccount: string;\n\n public lastBankDisplayName: string;\n\n public maskedAccountNumber: string;\n}\nexport class EmailMoneyTransferBankingDetailsViewModel {\n public amount: number;\n\n public from: string;\n\n public country: string;\n\n public currency: string;\n\n public expiry: string;\n}\n\nexport class EmailMoneyTransferConfirmationViewModel {\n public bankName: string;\n\n public selectedAccountName: string;\n\n public requiresConfirmation: boolean;\n\n public optedIntoMarketingCommunications: boolean;\n}\n\nexport class EmailMoneyTransferService {\n private userService: userService.UserService;\n\n constructor() {\n this.userService = userService.Instance;\n }\n\n public GetByEmailKey(emailKey: string): JQueryPromise {\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedGet(\n `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/emailMoneyTransfers/${emailKey}`\n )\n .done((emailMoneyTransfer) => {\n if (\n plootoUtils.IsNullOrUndefined(emailMoneyTransfer) ||\n emailMoneyTransfer.error === true\n ) {\n dfd.reject(emailMoneyTransfer);\n return;\n }\n dfd.resolve(emailMoneyTransfer);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public AnswerSecurityQuestion(\n emailKey: string,\n securityAnswer: string\n ): JQueryPromise {\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedPost(\n `${\n import.meta.env.APP_URLS_API_URL\n }/${API_PREFIX}/emailMoneyTransfers/${emailKey}/answerSecurityQuestion`,\n {\n securityAnswer,\n }\n )\n .done((emailMoneyTransferDetails) => {\n if (\n plootoUtils.IsNullOrUndefined(emailMoneyTransferDetails) ||\n emailMoneyTransferDetails.error === true\n ) {\n dfd.reject(emailMoneyTransferDetails);\n return;\n }\n dfd.resolve(emailMoneyTransferDetails);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public SubmitBankingInformation(\n emailKey: string,\n submitData: any\n ): JQueryPromise {\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedPost(\n `${\n import.meta.env.APP_URLS_API_URL\n }/${API_PREFIX}/emailMoneyTransfers/${emailKey}/submitBankingInformation`,\n submitData\n )\n .done((emailMoneyTransferDetails) => {\n if (\n plootoUtils.IsNullOrUndefined(emailMoneyTransferDetails) ||\n emailMoneyTransferDetails.error === true\n ) {\n dfd.reject(emailMoneyTransferDetails);\n return;\n }\n dfd.resolve(emailMoneyTransferDetails);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n}\n\nexport const Instance = new EmailMoneyTransferService();\n","import * as app from 'durandal/app';\nimport * as system from 'durandal/system';\nimport * as router from 'plugins/router';\nimport * as ko from 'knockout';\n\nimport { LegacyFeatureFlag } from '@/features/feature-flags';\nimport LocationService from '@/features/location/services/locationService';\nimport BankLoginSource from '@/legacy/features/companies/bankLogin/bankLoginSource';\nimport SecondaryBankLoginFragment from '@/legacy/features/companies/bankLogin/secondary/SecondaryBankLoginFragment';\nimport { SecondaryBankAccountDetailsAddModel } from '@/legacy/features/companies/bankLogin/secondary/viewModels';\nimport VoidChequeEftDialog from '@/legacy/features/companies/emailMoneyTransfers/VoidChequeEftDialog';\nimport paymentTransactionErrorModal from '@/legacy/modals/styled/paymentTransactionError';\nimport titleMessageModal from '@/legacy/modals/styled/titleMessage';\nimport * as companyService from '@/legacy/services/company';\nimport * as bankLoginService from '@/legacy/services/company/bankLogin';\nimport * as payeeService from '@/legacy/services/company/payee';\nimport * as emailMoneyTransferService from '@/legacy/services/emailMoneyTransfer';\nimport * as flexSelectDataService from '@/legacy/services/flexSelectDataService';\nimport * as banksInfoService from '@/legacy/services/info/banks';\nimport * as plootoUtils from '@/legacy/utils/plooto';\nimport * as popupManager from '@/legacy/utils/popupManager';\nimport * as addModels from '@/legacy/viewmodels/addModels';\n\ndeclareModules({\n 'components/user/bank/bankInformationFields': () =>\n import('@/legacy/components/user/bank/bankInformationFields'),\n 'components/user/bank/bankInformationFields.html': () =>\n import('@/legacy/components/user/bank/bankInformationFields.html'),\n 'components/user/bank/bankValidation/bankSelection': () =>\n import('@/legacy/components/user/bank/bankValidation/bankSelection'),\n 'components/user/bank/bankValidation/bankSelection.html': () =>\n import('@/legacy/components/user/bank/bankValidation/bankSelection.html'),\n 'components/user/bank/bankValidation/bankValidationWrapper': () =>\n import('@/legacy/components/user/bank/bankValidation/bankValidationWrapper'),\n 'components/user/bank/bankValidation/bankValidationWrapper.html': () =>\n import('@/legacy/components/user/bank/bankValidation/bankValidationWrapper.html'),\n 'modals/manage/bankLoginDetails.html': () =>\n import('@/legacy/modals/manage/bankLoginDetails.html'),\n});\n\nexport enum EmailMoneyTransferStep {\n Question,\n BankDetails,\n Confirmation,\n Success,\n Filled,\n Error,\n ReuseBank,\n}\nexport class ViewModel {\n public router: DurandalRouter;\n\n public EmailMoneyTransferStep: typeof EmailMoneyTransferStep = EmailMoneyTransferStep;\n\n private emailMoneyTransferService: emailMoneyTransferService.EmailMoneyTransferService =\n emailMoneyTransferService.Instance;\n\n public status = ko.observable('loading');\n\n private emailKey: string;\n\n public currentStep = ko.observable(EmailMoneyTransferStep.Question);\n\n public companyService = companyService.Instance;\n\n public emailMoneyTransfer: emailMoneyTransferService.EmailMoneyTransferViewModel;\n\n public emailMoneyTransferDetails: emailMoneyTransferService.EmailMoneyTransferDetailsViewModel;\n\n public account: payeeService.PayeeAccount;\n\n public bankName: string;\n\n public selectedAccountName: string;\n\n public reuseAccount = ko.observable(null);\n\n public reuseForFuturePayments = ko.observable(null);\n\n public bypassReusedInformation = ko.observable(false);\n\n public optIntoMarketingCommunications = ko.observable(false);\n\n public optedIntoMarketingCommunications: boolean;\n\n public institution: KnockoutObservable = ko.observable('');\n\n public routingNumber: KnockoutObservable = ko.observable('');\n\n public bankDetailsType: KnockoutObservable = ko.observable('SelectBankingProvider');\n\n public statesAvailable = ko.observable();\n\n public profileData: any; // payee data such as phone number, address\n\n public bankingSubmitData: addModels.EmailMoneyTransferBankAddModel;\n\n public errorDescription: string;\n\n public errorTitle: string;\n\n public voidChequeText = ko.observable(null);\n\n private selectedAccount: bankLoginService.SelectedAccountBindingModel = null;\n\n public validateBankingInformation = true;\n\n private popupManager: popupManager.PopupManager = null;\n\n private bankAddModal: any; // This is the modal for entering bank credentials\n\n public bankProvider = ko.observable(null);\n\n public bankLoginSource = BankLoginSource.EmailMoneyTransfer;\n\n public isSecondaryBankEnabled = false;\n\n public isSecondaryBankLoginModalVisible = ko.observable(false);\n\n private secondaryBankAccountDetailsAddModel: SecondaryBankAccountDetailsAddModel = null;\n\n public companyCountry = ko.observable(null);\n\n public companyName = ko.observable(null);\n\n public countrySelect = ko.observable(null);\n\n public countryFlexSelectDataService: flexSelectDataService.FlexSelectDataService;\n\n public uniqueFormIdentifier = ko.observable(plootoUtils.GenerateRandomCharacters(8));\n\n public companyCountrySubscription: KnockoutSubscription;\n\n public getUniquieIdentifier = (propertyName: string): string =>\n `${this.uniqueFormIdentifier()}${propertyName}`;\n\n public bankCountryUniqueIdentifier = this.getUniquieIdentifier('bankCountry');\n\n public react = {\n fragments: {\n SecondaryBankLoginFragment,\n VoidChequeEftDialog,\n },\n };\n\n public showVoidChequeEftDialog = ko.observable(false);\n\n constructor() {\n this.ResetClientData();\n\n this.router = router;\n this.account.country('CA');\n this.profileData = {};\n this.bindCountryFlexSelect();\n }\n\n public activate(emailKey: string) {\n this.AddPopupManager();\n\n const routeStep = this.GetRouteStep();\n\n if (this.currentStep() != routeStep) {\n this.currentStep(routeStep);\n }\n\n if (routeStep == EmailMoneyTransferStep.Question) {\n this.updateCurrentStep();\n }\n if (this.emailMoneyTransfer && this.emailMoneyTransfer.status == 'FILLED') {\n this.currentStep(EmailMoneyTransferStep.Filled);\n }\n\n // If we're looking at a new email transfer reset all client-entered data\n if (this.emailKey && emailKey === this.emailKey) {\n return;\n }\n\n this.ResetClientData();\n this.emailKey = emailKey;\n\n this.emailMoneyTransferService\n .GetByEmailKey(emailKey)\n .then((emailMoneyTransfer) => {\n this.account.securityAnswer('');\n if (emailMoneyTransfer.prefillCountry) {\n this.account.country(emailMoneyTransfer.prefillCountry);\n }\n if (emailMoneyTransfer.prefillCurrency) {\n this.account.currency(emailMoneyTransfer.prefillCurrency);\n }\n\n this.isSecondaryBankEnabled =\n emailMoneyTransfer.isSecondaryBankLoginEnabled ||\n plootoUtils.IsFeatureEnabled(LegacyFeatureFlag.SECONDARY_BANK_LOGIN);\n\n this.emailMoneyTransfer = emailMoneyTransfer;\n\n this.companyCountry(this.emailMoneyTransfer.companyCountry);\n this.companyName(this.emailMoneyTransfer.companyName);\n this.updateCurrentStep();\n\n this.status('loaded');\n })\n .fail((error) => {\n this.HandleError(error);\n });\n }\n\n public country: KnockoutComputed = ko.pureComputed({\n read: () => this.account.country(),\n write: (value: string) => {\n this.account.country(value);\n LocationService.getCountrySupportedStates(this.account.country()).then((states) => {\n this.statesAvailable(states);\n });\n },\n deferEvaluation: true,\n });\n\n private updateCurrentStep() {\n if (this.emailMoneyTransfer) {\n if (this.emailMoneyTransfer.status === 'FILLED') {\n this.currentStep(EmailMoneyTransferStep.Filled);\n } else if (this.emailMoneyTransfer.skipSecurityQuestions) {\n this.reuseAccount(false);\n this.reuseForFuturePayments(false);\n this.account.securityAnswer(null);\n this.currentStep(EmailMoneyTransferStep.BankDetails);\n }\n }\n }\n\n public attached(view: HTMLElement, parent: HTMLElement): void {\n $('body').addClass('email-transfer');\n this.popupManager.attached();\n this.countryFlexSelectDataService.attached();\n }\n\n public detached(): void {\n $('body').removeClass('email-transfer');\n this.popupManager.detached();\n this.countryFlexSelectDataService?.detached();\n this.companyCountrySubscription?.dispose();\n }\n\n public canActivate(emailKey: string): any {\n const routeStep = this.GetRouteStep();\n // If we're looking at a different email transfer go back to the question\n if (\n this.emailKey &&\n emailKey != this.emailKey &&\n routeStep != EmailMoneyTransferStep.Question\n ) {\n return { redirect: this.GetStepUrl(emailKey, EmailMoneyTransferStep.Question) };\n }\n\n if (!this.emailKey || this.emailKey === emailKey) {\n const fixedRoute = this.GetFixedRouteStep(emailKey);\n if (fixedRoute) {\n return { redirect: fixedRoute };\n }\n }\n return true;\n }\n\n private ResetClientData() {\n this.status('loading');\n this.emailMoneyTransfer = null;\n this.emailKey = null;\n this.emailMoneyTransferDetails = null;\n this.bankingSubmitData = null;\n this.account = new payeeService.PayeeAccount(null, {} as any);\n }\n\n private GetRouteStep() {\n const routeParts = router.activeInstruction().fragment.split('/');\n const routeStep = routeParts[routeParts.length - 1];\n\n switch (routeStep) {\n case 'bankDetails':\n return EmailMoneyTransferStep.BankDetails;\n case 'reuseBank':\n return EmailMoneyTransferStep.ReuseBank;\n case 'confirmation':\n return EmailMoneyTransferStep.Confirmation;\n case 'success':\n return EmailMoneyTransferStep.Success;\n case 'error':\n return EmailMoneyTransferStep.Error;\n }\n\n return EmailMoneyTransferStep.Question;\n }\n\n // Ensure that each step can be accessible\n private GetFixedRouteStep(emailKey: string) {\n const routeStep = this.GetRouteStep();\n\n switch (routeStep) {\n case EmailMoneyTransferStep.BankDetails:\n if (!this.emailMoneyTransferDetails) {\n return this.GetStepUrl(emailKey, EmailMoneyTransferStep.Question);\n }\n break;\n case EmailMoneyTransferStep.ReuseBank:\n if (!this.emailMoneyTransferDetails) {\n return this.GetStepUrl(emailKey, EmailMoneyTransferStep.Question);\n }\n break;\n case EmailMoneyTransferStep.Confirmation:\n if (!this.bankingSubmitData) {\n return this.GetStepUrl(emailKey, EmailMoneyTransferStep.Question);\n }\n break;\n case EmailMoneyTransferStep.Success:\n if (!this.bankingSubmitData) {\n return this.GetStepUrl(emailKey, EmailMoneyTransferStep.Question);\n }\n break;\n }\n return null;\n }\n\n public AnswerStepTransferQuestion(form: HTMLFormElement) {\n if (!plootoUtils.ValidateForm(form)) {\n return;\n }\n\n plootoUtils.DisableForm(form);\n plootoUtils.HandleFormSubmit(form);\n\n this.emailMoneyTransferService\n .AnswerSecurityQuestion(this.emailKey, this.account.securityAnswer())\n .then((emailMoneyTransferDetails) => {\n this.emailMoneyTransferDetails = emailMoneyTransferDetails;\n this.account.country(emailMoneyTransferDetails.country);\n this.account.currency(emailMoneyTransferDetails.currency);\n this.reuseAccount(false);\n this.reuseForFuturePayments(true);\n if (this.emailMoneyTransferDetails.canReuseAccount) {\n this.reuseAccount(null);\n this.ActivateStep(EmailMoneyTransferStep.ReuseBank);\n } else {\n this.ActivateStep(EmailMoneyTransferStep.BankDetails);\n }\n\n plootoUtils.EnableForm(form);\n })\n .fail((error) => {\n this.HandleSubmitError(form, error);\n });\n }\n\n public SubmitBankingInformation(form: HTMLFormElement) {\n const submitData: any = {};\n\n // Form is not present on a new secondary bank login (as a user clicks a button that opens up a dialog)\n if (form) {\n if (!plootoUtils.ValidateForm(form)) {\n return;\n }\n\n const formData = $(form).serializeArray();\n $.each(formData, (i, field: any) => {\n submitData[field.name] = field.value;\n });\n\n plootoUtils.DisableForm(form);\n plootoUtils.HandleFormSubmit(form);\n }\n\n submitData.institutionOther = undefined;\n submitData.securityAnswer = this.account.securityAnswer();\n\n const emailMoneyTransferBankAddModel = {\n securityAnswer: submitData.securityAnswer,\n\n reuseAccount: this.reuseAccount(),\n bypassReusedInformation: this.bypassReusedInformation(),\n } as addModels.EmailMoneyTransferBankAddModel;\n\n if (this.secondaryBankAccountDetailsAddModel) {\n emailMoneyTransferBankAddModel.accountDetails = this.secondaryBankAccountDetailsAddModel;\n\n // for EMT since currency and country is specified by the company we know what they are.\n // In the backend we will throw if the currency of account doesn't match the EMT currency.\n emailMoneyTransferBankAddModel.accountDetails.country = this.account.country();\n emailMoneyTransferBankAddModel.accountDetails.currency = this.account.currency();\n } else if (this.selectedAccount) {\n const verifiedBankAccountDetailsAddModel = new addModels.VerifiedBankAccountDetailsAddModel();\n verifiedBankAccountDetailsAddModel.country = this.account.country();\n verifiedBankAccountDetailsAddModel.currency = this.account.currency();\n\n verifiedBankAccountDetailsAddModel.storageToken = this.selectedAccount.storageToken;\n verifiedBankAccountDetailsAddModel.selectedBankAccountId =\n this.selectedAccount.selectedBankAccountId;\n verifiedBankAccountDetailsAddModel.sessionToken = this.selectedAccount.sessionToken;\n\n emailMoneyTransferBankAddModel.accountDetails = verifiedBankAccountDetailsAddModel;\n } else {\n switch (this.account.country()) {\n case 'US':\n emailMoneyTransferBankAddModel.accountDetails = {\n currency: 'USD',\n country: 'US',\n accountNumber: submitData.accountNumber,\n routingNumber: submitData.routingNumber,\n validate: this.validateBankingInformation,\n } as addModels.UsBankAccountDetailsAddModel;\n break;\n case 'CA':\n emailMoneyTransferBankAddModel.accountDetails = {\n currency: this.account.currency(),\n country: 'CA',\n accountNumber: submitData.accountNumber,\n institution: submitData.institution,\n transit: submitData.transit,\n validate: this.validateBankingInformation,\n } as addModels.CanadianBankAccountDetailsAddModel;\n break;\n }\n }\n\n this.bankingSubmitData = emailMoneyTransferBankAddModel;\n this.bankingSubmitData.confirmed = false;\n\n this.emailMoneyTransferService\n .SubmitBankingInformation(this.emailKey, this.bankingSubmitData)\n .then((viewModel) => {\n this.bankName = viewModel.bankName;\n this.selectedAccountName = viewModel.selectedAccountName;\n this.optedIntoMarketingCommunications = viewModel.optedIntoMarketingCommunications;\n\n this.ActivateStep(EmailMoneyTransferStep.Confirmation);\n\n plootoUtils.EnableForm(form);\n })\n .fail((errorInfo) => {\n this.isSecondaryBankLoginModalVisible(false); // Hide modal for bank login on any error\n this.HandleSubmitError(form, errorInfo);\n if (errorInfo.error && errorInfo.type) {\n switch (errorInfo.type) {\n case 'region.unsupported':\n app.showMessage(errorInfo.message, 'Account Error');\n break;\n case 'invalid.parameter': {\n // if user has been warned about invalid bank account once, dont re-validate bank info next time\n const invalidAccountError = $.grep(\n errorInfo.fields,\n (errorField: any) => errorField.name == 'accountNumber'\n );\n if (invalidAccountError.length > 0) {\n this.validateBankingInformation = false;\n }\n break;\n }\n }\n }\n });\n }\n\n public SubmitConfirmation(form: HTMLFormElement) {\n plootoUtils.DisableForm(form);\n plootoUtils.HandleFormSubmit(form);\n\n this.bankingSubmitData.confirmed = true;\n this.bankingSubmitData.reuseForFuturePayments = this.reuseForFuturePayments();\n this.bankingSubmitData.optInToMarketingCommunications = this.optIntoMarketingCommunications();\n this.emailMoneyTransferService\n .SubmitBankingInformation(this.emailKey, this.bankingSubmitData)\n .then(() => {\n this.emailMoneyTransfer.status = 'FILLED';\n this.ActivateStep(EmailMoneyTransferStep.Success);\n\n plootoUtils.EnableForm(form);\n })\n .fail((error) => {\n if (error && error.type == 'region.unsupported') {\n app.showMessage(error.message, 'Account Error');\n return;\n }\n this.HandleSubmitError(form, error);\n });\n }\n\n public useAnotherBankAccount() {\n this.bankDetailsType('SelectBankingProvider');\n this.routingNumber(null);\n this.institution(null);\n this.currentStep(EmailMoneyTransferStep.BankDetails);\n }\n\n private GetStepUrl(emailKey: string, step: EmailMoneyTransferStep) {\n let stepUrl = '';\n switch (step) {\n case EmailMoneyTransferStep.Question:\n stepUrl = '';\n break;\n case EmailMoneyTransferStep.BankDetails:\n stepUrl = 'bankDetails';\n break;\n case EmailMoneyTransferStep.ReuseBank:\n stepUrl = 'reuseBank';\n break;\n case EmailMoneyTransferStep.Confirmation:\n stepUrl = 'confirmation';\n break;\n case EmailMoneyTransferStep.Success:\n stepUrl = 'success';\n break;\n case EmailMoneyTransferStep.Error:\n stepUrl = 'error';\n break;\n }\n return `emailmoneytransfer/accept/${emailKey}/${stepUrl}`;\n }\n\n private HandleSubmitError(form: HTMLFormElement, error: any) {\n plootoUtils.EnableForm(form);\n plootoUtils.HandleFormError(form, error);\n\n this.HandleError(error);\n }\n\n private HandleError(error: any) {\n if (error && error.type) {\n switch (error.type) {\n case 'region.unsupported':\n return;\n case 'blacklisted.account':\n this.DisplayError(\n 'This account cannot be created at this time. Please contact compliance@plooto.com.',\n 'Account Error'\n );\n return;\n case 'bankLogin.timeout':\n titleMessageModal.show({\n title: 'Session Timed Out',\n message: 'Bank provider session timed out. Please try again.',\n svgIconSymbolLarge: 'svg-warning-large',\n } as any);\n this.backToBankDetails();\n return;\n case 'invalid.securityAnswer':\n titleMessageModal.show({\n title: 'Invalid Security Answer',\n message:\n 'Please double-check your security answer. If you do not know the answer to this security question please contact the sender.',\n svgIconSymbolLarge: 'svg-warning-large',\n } as any);\n return;\n case 'addAccount.notSufficientInfo':\n this.currentStep(EmailMoneyTransferStep.BankDetails); // Take person back to void check step as this can happen on confirmation page\n this.forceVoidChequeInput(\n 'The selected account did not return certain information that is mandatory in order to be used by Plooto. Please verify your account by entering your cheque details instead.'\n );\n return;\n case 'invalid.securityAnswerEmpty':\n this.DisplayError(\n 'Security question is missing. Please contact your payer to add security question/answer to this transfer.',\n 'Incomplete Transfer'\n );\n return;\n case 'invalid.reusedInformation':\n paymentTransactionErrorModal\n .show({\n title: 'Bank Details Confirmation',\n transactionError: error.transactionError,\n svgIconSymbolLarge: 'svg-warning-large',\n continueButtonLabel: 'I Understand',\n } as any)\n .then((modalResponse) => {\n if (modalResponse) {\n this.bypassReusedInformation(true);\n }\n });\n return;\n case 'invalid.payment.status':\n this.DisplayError(\n 'Invalid email transfer status. Payment status must be PENDING.',\n 'Expired Email Transfer'\n );\n return;\n case 'already.completed':\n this.DisplayError(\n 'This email transfer information is already complete',\n 'Expired Email Transfer'\n );\n return;\n case 'invalid.bankCurrency':\n this.DisplayError(error.message, 'Expired Email Transfer');\n return;\n case 'invalid.account':\n this.DisplayError(\n 'Your account country does not match payee account country',\n 'Invalid Entry'\n );\n return;\n case 'invalid.attempts':\n this.DisplayError(\n 'Too many invalid answers. Please contact the sender to update security question & answer to unlock this email transfer.',\n 'Email Transfer Locked'\n );\n return;\n case 'invalid.emailMoneyTransfer':\n this.DisplayError(\n 'Email transfer not found. Please double-check your email link.',\n 'Invalid Email Transfer'\n );\n return;\n case 'invalid.payeeAccount.deleted':\n this.DisplayError(\n 'The email money transfer account associated with this payment has been deleted. Please contact the sender for assistance.',\n 'Email Money Transfer Account Deleted'\n );\n return;\n case 'invalid.emailMoneyTransfer.expired':\n this.DisplayError(\n 'Email money transfer expired. Please double-check your email for expiry dates.',\n 'Expired Email Transfer'\n );\n return;\n case 'invalid.payment':\n this.DisplayError(\n 'Email transfer was recalled or voided. Please check your email for details.',\n 'Expired/Voided Transfer'\n );\n return;\n\n case 'invalid.companyCapabilities':\n this.DisplayError(\n \"It looks like this payment isn't ready to be accepted yet. Contact the sender of this payment for further details.\",\n 'Payment Pending...'\n );\n return;\n case 'invalid.parameter':\n return;\n }\n }\n\n titleMessageModal.show({\n title: 'Unknown error',\n message: `Error occurred with this email money transfer. Please try again later. (${\n error && error.type ? error.type : 'no.error.type'\n })`,\n svgIconSymbolLarge: 'svg-warning-large',\n } as any);\n }\n\n private DisplayError(errorDescription: string, errorTitle: string) {\n this.errorDescription = errorDescription;\n this.errorTitle = errorTitle;\n this.currentStep(EmailMoneyTransferStep.Error);\n }\n\n private ActivateStep(step: EmailMoneyTransferStep) {\n // Reset answer once we get to confirmation or error page\n if (step == EmailMoneyTransferStep.Success || step == EmailMoneyTransferStep.Error) {\n this.account.securityAnswer('');\n } else if (step == EmailMoneyTransferStep.BankDetails) {\n this.bankDetailsType('SelectBankingProvider');\n }\n router.navigate(this.GetStepUrl(this.emailKey, step));\n }\n\n public JSBindReuseAccountToggle(_, event): any {\n this.reuseAccount(Boolean(Number(event.target.value)));\n }\n\n public BankingInformationExists() {\n return (\n !this.emailMoneyTransfer.skipSecurityQuestions &&\n ((this.emailMoneyTransferDetails.canReuseAccount && this.reuseAccount() !== null) ||\n !this.emailMoneyTransferDetails.canReuseAccount)\n );\n }\n\n public backToBankDetails() {\n router.navigate(this.GetStepUrl(this.emailKey, EmailMoneyTransferStep.BankDetails));\n }\n\n public viewMyPayments() {\n router.navigate(`contacts/mypayments/${this.emailMoneyTransfer.payeeEmailKey}`);\n }\n\n public bankAccountSelected(\n selectedAccount: bankLoginService.SelectedAccountBindingModel,\n form: HTMLFormElement\n ) {\n this.selectedAccount = selectedAccount;\n\n this.SubmitBankingInformation(form);\n }\n\n public SubmitReuseBank(form: HTMLFormElement) {\n if (this.reuseAccount() === false) {\n this.ActivateStep(EmailMoneyTransferStep.BankDetails);\n return;\n }\n this.SubmitBankingInformation(form);\n }\n\n public forceVoidChequeInput(voidChequeText: string, country: string = null) {\n this.hideSelectDepositMethod();\n\n this.voidChequeText(voidChequeText);\n if (country) {\n this.account.country(country);\n }\n this.selectedAccount = null; // Clear previously selected account (Yodlee)\n\n this.secondaryBankAccountDetailsAddModel = null; // Clear previously selected secondary bank account (Flinks)\n this.isSecondaryBankLoginModalVisible(false); // Hide the popup for bank login dialog\n\n this.bankDetailsType('ManualEntry');\n }\n\n public bankingProviderSelected(bankProvider: banksInfoService.BankingProvider) {\n this.bankProvider(bankProvider);\n\n // User selected \"Other / My bank is not listed above\"\n if (!bankProvider) {\n this.forceVoidChequeInput(null);\n return;\n }\n\n // User selected bank that did not support login\n if (!bankProvider.bankInfo.supportsBankLogin) {\n this.forceVoidChequeInput(null);\n return;\n }\n\n // User selected bank that supports login. We'll force a popup without changing the url\n this.bankAddModal.modalParamsCallback = () => ({\n bankIdentifier: bankProvider.providerId,\n bankCountry: bankProvider.country,\n forceVoidChequeCallback: (voidChequeText: string) => {\n this.forceVoidChequeInput(voidChequeText, null);\n this.popupManager.closeExistingModal();\n },\n\n bankLoginFormType: 'EmailMoneyTransfer',\n bankLoginRelatedId: this.emailMoneyTransfer.id,\n });\n this.popupManager.forceShow(this.bankAddModal);\n }\n\n public shouldHideCountry() {\n if (this.emailMoneyTransfer.bankDetailsRequired) {\n return false;\n }\n\n return true;\n }\n\n public showSelectDepositMethod(): void {\n this.showVoidChequeEftDialog(true);\n }\n\n public hideSelectDepositMethod(): void {\n this.showVoidChequeEftDialog(false);\n }\n\n public showSecondaryBankLogin() {\n this.isSecondaryBankLoginModalVisible(true);\n }\n\n public async accountSelectedCallback(\n secondaryBankAccountDetailsAddModel: SecondaryBankAccountDetailsAddModel\n ) {\n console.log('account selected:', secondaryBankAccountDetailsAddModel);\n this.secondaryBankAccountDetailsAddModel = secondaryBankAccountDetailsAddModel;\n\n this.SubmitBankingInformation(null);\n }\n\n public closeNewBankDialog() {\n this.isSecondaryBankLoginModalVisible(false);\n }\n\n public handleEnterBankAccountDetailsClick(): void {\n this.forceVoidChequeInput(null);\n }\n\n public shouldShowBankInfo() {\n const accountDetails = this.bankingSubmitData.accountDetails as any;\n if (!accountDetails) {\n return false;\n }\n\n // Don't show bank info when using Yodlee to connect (Only show bank name)\n if (accountDetails.selectedBankAccountId) {\n return false;\n }\n\n // Don't show bank info (transit,account number etc) when using Flinks to connect (Only show bank name)\n if (this.secondaryBankAccountDetailsAddModel) {\n return false;\n }\n\n return true;\n }\n\n private AddPopupManager() {\n this.popupManager = new popupManager.PopupManager();\n\n // Special modal without a dialog url\n const bankAddModal = {\n modalHtmlPath: 'modals/manage/bankLoginDetails.html',\n\n success: (selectedAccount: bankLoginService.SelectedAccountBindingModel) => {\n const formSubmitBankingInformation = $(\n '#form-submit-banking-information'\n )[0] as HTMLFormElement;\n this.bankAccountSelected(selectedAccount, formSubmitBankingInformation);\n\n this.popupManager.closeExistingModal();\n },\n\n goBackCallback: () => {\n this.popupManager.closeExistingModal();\n },\n };\n this.popupManager.AddModal(bankAddModal as any);\n\n this.bankAddModal = bankAddModal;\n }\n\n private bindCountryFlexSelect() {\n // Set default country for bank selection\n const setDefaultCountry = () => {\n this.companyCountrySubscription = this.companyCountry.subscribe((companyCountry) => {\n switch (companyCountry) {\n case 'CA':\n this.countrySelect({ value: 'CA', text: 'Canada' });\n break;\n\n case 'US':\n this.countrySelect({ value: 'US', text: 'United States' });\n break;\n }\n });\n };\n\n const initializeCountrySelectionFlexSelect = () => {\n // Country selection\n const countryFlexSelectDataService = new flexSelectDataService.FlexSelectDataService();\n countryFlexSelectDataService.queryPromiseCallback = (searchQuery, flexSelect) =>\n system\n .defer>((dfd) => {\n const countries = LocationService.getPrimaryCountries();\n const filteredItems = [];\n countries.forEach((country) => {\n if (\n !searchQuery ||\n (searchQuery &&\n (country.text.toLowerCase().indexOf(searchQuery.toLowerCase()) >= 0 ||\n country.value.toLowerCase().indexOf(searchQuery.toLowerCase()) === 0))\n ) {\n filteredItems.push(country);\n }\n });\n\n dfd.resolve(filteredItems);\n })\n .promise();\n\n countryFlexSelectDataService.selectCallback = (\n filterToUpdate: any,\n koFilterValueValue: KnockoutObservable,\n newFilterValue: any\n ) => {\n if (this.countrySelect() && this.countrySelect().value == newFilterValue.value) {\n return;\n }\n\n koFilterValueValue(newFilterValue);\n\n this.countrySelect(newFilterValue);\n this.account.country(newFilterValue.value);\n };\n\n this.countryFlexSelectDataService = countryFlexSelectDataService;\n };\n\n setDefaultCountry();\n initializeCountrySelectionFlexSelect();\n }\n}\n","import * as ko from 'knockout';\n\nimport BillTrackingCategories from '@/features/accounting-software/types/BillTrackingCategories';\nimport { CreditCardPayableStatus } from '@/features/pay-by-card/types';\nimport { UserIdentityProgressSteps } from '@/legacy/components/user/onboarding/enums/UserIdentityProgressSteps';\nimport { VerifyCompanyStep } from '@/legacy/components/user/onboardingWizard/company/enums';\nimport { OnboardingStep } from '@/legacy/features/companies/onboarding/enums';\nimport { FundAccountLimitTierViewModel } from '@/legacy/services/company/fundAccounts/models';\n\n// Bank view models\n\nexport class KOBankAccountDetailsViewModel {\n public currency = ko.observable('');\n\n public country = ko.observable('');\n\n public maskedAccountNumber = ko.observable('');\n\n public extendedCurrency = ko.observable();\n\n public accountHolderName = ko.observable('');\n\n constructor(info: any) {\n ko.mapping.fromJS(\n info,\n {\n ignore: ['maskedAccountNumberShort'],\n },\n // @ts-expect-error: 'this' is not assignable to parameter of type 'KnockoutObservable'\n this\n );\n }\n\n public maskedAccountNumberShort = ko.pureComputed({\n read: () => {\n if (!this.maskedAccountNumber()) {\n return '';\n }\n return this.maskedAccountNumber().length > 6\n ? this.maskedAccountNumber().substring(\n this.maskedAccountNumber().length - 6,\n this.maskedAccountNumber().length\n )\n : this.maskedAccountNumber();\n },\n deferEvaluation: true,\n });\n}\n\nexport class KOCanadianBankAccountDetailsViewModel extends KOBankAccountDetailsViewModel {\n public institution = ko.observable('');\n\n public transit = ko.observable('');\n\n constructor(info: any) {\n super(info);\n\n // @ts-expect-error: 'this' is not assignable to parameter of type 'KnockoutObservable'\n ko.mapping.fromJS(info, {}, this);\n }\n}\nexport class KOUsBankAccountDetailsViewModel extends KOBankAccountDetailsViewModel {\n public routingNumber = ko.observable('');\n\n constructor(info: any) {\n super(info);\n\n // @ts-expect-error: 'this' is not assignable to parameter of type 'KnockoutObservable'\n ko.mapping.fromJS(info, {}, this);\n }\n}\nexport class KOMicroDepositViewModel {\n public validated = ko.observable(false);\n\n public sent = ko.observable(false);\n\n public error = ko.observable(null);\n\n public codeSentDate = ko.observable('');\n\n public codeReceivedDate = ko.observable('');\n\n public validationDate = ko.observable('');\n\n public status = ko.observable('');\n\n constructor(info: any) {\n // @ts-expect-error: 'this' is not assignable to parameter of type 'KnockoutObservable'\n ko.mapping.fromJS(info, {}, this);\n }\n}\nexport class MicroDepositViewModel {\n public validated: boolean;\n\n public sent: boolean;\n\n public sending: boolean;\n\n public codeSentDate: string;\n\n public codeReceivedDate: string;\n\n public validationDate: string;\n}\n\n// Payment view models\nexport class Money {\n amount: number;\n\n currency: string;\n}\nexport class PaymentFee {\n regularFee: Money;\n\n discount: Money;\n\n finalFee: Money;\n\n finalExchangedFee: Money;\n\n thirdPartyFee: Money;\n\n paidByPayer: boolean;\n}\n\nexport class PreProcessSourcePayment {\n identifier: string;\n\n memo: string;\n\n amount: number;\n}\n\nexport interface FileAttachmentDetails {\n fileName: string;\n uniqueFileId: string;\n fileType: string;\n}\n\nexport interface AccountingSoftwareBillAttachmentDetail {\n name: string;\n contentType: string;\n url: string;\n}\n\nexport class PaymentPreProcessViewModel {\n companyId: string;\n\n payee: PayeeViewModel;\n\n payeeAccount: PayeeAccountViewModel;\n\n source: FundAccountViewModel;\n\n amount: number;\n\n exchangeRateId: string;\n\n exchangeRate: number;\n\n exchangedAmount: number; // Amount after it was multiplied by exchange rate\n\n memo: string;\n\n currency: string;\n\n sourceCurrency: string;\n\n freeTransactionUsed: boolean;\n\n date: string;\n\n estimatedDate: string;\n\n estimatedDepositDate: string;\n\n sourcePayments: Array;\n\n fee: PaymentFee;\n\n recurringInterval: any;\n\n paymentFileAttachments: Array;\n}\n\nexport class PaymentPreProcessCollectionViewModel {\n payments: Array;\n\n transactionId: string;\n}\n\n// Payment request view models\nexport class PaymentUpdatedDestinationAccountViewModel {\n payeeAccountId: string;\n\n status: number;\n}\n\n// eID models\nexport class InteractiveQueryOption {\n public number: number;\n\n public text: string;\n}\nexport class InteractiveQuery {\n public questionNumber: number;\n\n public questionText: string;\n\n public options: Array;\n\n public answer: string;\n}\nexport class PersonalIdentityVerificationQuestionSetViewModel {\n public questions: Array;\n}\n// Answer classes\nexport class InteractiveQueryAnswer {\n public questionNumber: number;\n\n public selectedOptionNumber: number;\n}\nexport class InteractiveQueryAnswersOptions {\n public answers: Array = [];\n}\n\nexport class BusinessInformationBoardOfDirector {\n public fullName: string;\n\n public id: string;\n}\n\nexport class BusinessInformationStatusViewModel {\n public status: string;\n\n public boardOfDirectors: Array;\n}\n\nexport class RecurringPlanDetailsViewModel {\n public companyId: string;\n\n public intervalNumber: number;\n\n public interval: string;\n\n public duration: number;\n\n public startDay: number;\n\n public lastDebitDate: string;\n\n public nextDebitDate: string;\n\n public status: string;\n\n public statusDate: string;\n}\n\nexport enum RecurringPlanStatus {\n ACTIVE = 0,\n PAUSED = 50,\n CANCELLED = 100,\n}\n\nexport enum TaxType {\n PayrollSourceDeductions,\n CorporationIncomeTax,\n GstHst,\n}\n\nexport class CompanyMembershipDetailsViewModel {\n public companyId: string;\n\n public outstandingEmailMoneyTransfers: number;\n\n public paymentsRequringApprovals: number;\n\n public staffAssigned: number;\n\n public pendingFundAccounts: number;\n\n public hasCompanyCapabilities: boolean;\n}\nexport class PayeeAccountRequiredField {\n public name: string;\n\n public description: string;\n\n public required: boolean;\n\n public type: string;\n}\nexport class PayeeAccountRequiredFieldsViewModel {\n public accountFields: Array;\n\n public bankFields: Array;\n}\nexport class ItemsWithFiltersBindingModel {\n public filters: Array;\n\n public page: number;\n\n public resultsPerPage: number;\n}\nexport class PayablesWithFiltersBindingModel extends ItemsWithFiltersBindingModel {\n public searchText: string;\n}\nexport class ReceivablesWithFiltersBindingModel extends ItemsWithFiltersBindingModel {\n public searchQuery: string;\n}\nexport class FundAccountsWithFiltersBindingModel extends ItemsWithFiltersBindingModel {\n public includeLimitTiers: boolean;\n}\n\nexport class RecurringPlanViewModel {\n public id: string;\n\n public companyId: string;\n\n public intervalNumber: number;\n\n public interval: string;\n\n public duration: number;\n\n public startFromDate: string;\n\n public nextDebitDate: string;\n\n public firstDebitDate: string;\n\n public startDay: number;\n\n public status: string;\n\n public statusDate: string;\n}\n\nexport enum DirectDebitAccountType {\n Manual,\n VerifiedBank,\n}\n// //////////////////////////////////////////////\nexport enum PaymentDestinations {\n PaymentDestinationUniversalPayee = 'PaymentDestinationUniversalPayee',\n PaymentDestinationBankAccount = 'PaymentDestinationBankAccount',\n PaymentDestinationEmailMoneyTransfer = 'PaymentDestinationEmailMoneyTransfer',\n PaymentDestinationEmptyPayee = 'PaymentDestinationEmptyPayee',\n}\n\nexport class PaymentDestination {\n public payeeId: string;\n\n public payeeName: string;\n\n public displayName: string;\n\n public currency: string | null;\n\n public country: string | null;\n\n public discriminator: PaymentDestinations;\n\n public isNetworkPayee: boolean;\n\n public vendorAccountNumber: string;\n\n public canUseLateProcessingWindow: boolean;\n\n public creditCardPayableStatus: CreditCardPayableStatus;\n\n constructor(payeeId: string) {\n this.payeeId = payeeId;\n }\n}\nexport abstract class PaymentDestinationPayeeAccount extends PaymentDestination {\n public payeeAccountId: string;\n}\n\nexport class PaymentDestinationUniversalPayee extends PaymentDestination {\n public universalPayeeId: string;\n}\nexport class PaymentDestinationBankAccount extends PaymentDestinationPayeeAccount {\n public isMailedCheck: boolean;\n}\n\nexport class PaymentDestinationEmailMoneyTransfer extends PaymentDestinationPayeeAccount {\n public bankDetailsRequired: boolean;\n}\nexport class PaymentDestinationEmptyPayee extends PaymentDestination {}\n\n// ///////////////////////////////////////////////\nexport enum PaymentSources {\n PaymentSourceUsBankAccount = 'PaymentSourceUsBankAccount',\n PaymentSourceCaBankAccount = 'PaymentSourceCaBankAccount',\n PaymentSourceIachBankAccount = 'PaymentSourceIachBankAccount',\n PaymentSourceWallet = 'PaymentSourceWallet',\n PaymentSourceFundAccount = 'PaymentSourceFundAccount',\n PaymentSourceBankAccount = 'PaymentSourceBankAccount',\n PaymentSourceCreditCard = 'PaymentSourceCreditCard',\n}\nexport class PaymentSource {\n public accountId: string;\n\n public displayName: string;\n\n public country: string;\n\n public currency: string;\n\n public expiryYear: number;\n\n public expiryMonth: number;\n\n public discriminator: PaymentSources;\n\n constructor(accountId: string) {\n this.accountId = accountId;\n }\n}\n\nexport abstract class PaymentSourceFundAccount extends PaymentSource {\n public accountId: string;\n}\nexport class PaymentSourceBankAccount extends PaymentSourceFundAccount {}\nexport class PaymentSourceUsBankAccount extends PaymentSourceBankAccount {}\nexport class PaymentSourceCaBankAccount extends PaymentSourceBankAccount {}\nexport class PaymentSourceIachBankAccount extends PaymentSourceFundAccount {}\nexport class PaymentSourceWallet extends PaymentSourceFundAccount {}\n\nexport class AccountingSoftwareMap {\n public accountId: string;\n\n public displayName: string;\n\n public currency: string;\n}\n\nexport class FundAccountViewModel {\n public id: string | undefined;\n\n public companyId: string;\n\n public deleted: boolean;\n\n public locked: boolean;\n\n public type: string;\n\n public additionalAccountApprovers: Array;\n\n public numberOfApprovers: number;\n\n public country: string;\n\n public currency: string;\n\n public name: string;\n\n public displayName: string;\n\n public displayAccountName: string;\n\n public displayType: string;\n\n public fundAccountLimitTiers: Array;\n\n constructor(id?: string) {\n this.id = id;\n }\n\n public setData(json: any): void {\n this.id = json.id;\n this.companyId = json.companyId;\n this.deleted = json.deleted;\n this.locked = json.locked;\n this.type = json.type;\n this.additionalAccountApprovers = json.additionalAccountApprovers;\n this.numberOfApprovers = json.numberOfApprovers;\n this.country = json.country;\n this.currency = json.currency;\n this.name = json.name;\n this.displayName = json.displayName;\n this.displayAccountName = json.displayAccountName;\n this.displayType = json.displayType;\n }\n}\n\nexport class BankAccountViewModel extends FundAccountViewModel {\n public name: string;\n\n public bank: string;\n\n public identityValidated: boolean;\n\n public microDeposit: MicroDepositViewModel;\n\n public universalPayee: any;\n\n public accountDetails: BankAccountDetailsViewModel;\n}\n\nexport class AdyenFundAccountViewModel extends FundAccountViewModel {\n public expiryMonth: number;\n\n public expiryYear: number;\n\n public creditCardBrandType: string;\n\n public accountHolderName: string;\n\n public registeredBusinessName: string;\n}\n\nexport class BankAccountDetailsViewModel {}\n\nexport class PayeeViewModel {\n public id: string;\n\n public companyId: string;\n\n public address: string;\n\n public country: string;\n\n public city: string;\n\n public contact: string;\n\n public email: string;\n\n public phone: string;\n\n public name: string;\n\n public state: string;\n\n public suite: string;\n\n public zipCode: string;\n\n public deleted: boolean;\n\n public lastModified: string;\n\n public currency: string;\n\n public universalPayeeId: string;\n\n public type: string;\n\n public padStatus: string;\n\n public displayName: string;\n\n public printNameOnCheckAs: string;\n\n public displayNameWithPad: string;\n\n public isNetworkPayee: boolean;\n\n constructor(id: string) {\n this.id = id;\n }\n}\nexport class PayeeAccountViewModel {\n public id: string;\n\n public payeeId: string;\n\n public name: string;\n\n public bank: string;\n\n public currency: string;\n\n public discriminator: string;\n\n public country: string;\n\n public deleted: boolean;\n\n public emailMoneyTransfer: boolean;\n\n public securityQuestion: string;\n\n public bankDetailsRequired: boolean;\n\n public containsAccountInformation: boolean;\n\n public checkPrintNameOnCheckAs: string;\n\n public checkAddress: string;\n\n public checkSuite: string;\n\n public checkState: string;\n\n public checkCity: string;\n\n public checkZipCode: string;\n\n public checkCountry: string;\n\n public displayName: string;\n\n public displayFullName: string;\n\n public displayAccountName: string;\n\n public accountDetails: any;\n}\nexport class PaymentImportViewModel {\n public memo: string;\n\n public billId: string;\n\n public billCurrency: string;\n\n public source: PaymentSource;\n\n public destination: PaymentDestination;\n\n public vendor: any;\n\n public amount: number;\n\n public hasAttachments: boolean;\n\n public alternativeDestinations: Array;\n\n public dueDate: Date;\n\n public fileAttachments: Array = [];\n\n public billTrackingCategories: BillTrackingCategories;\n}\nexport class InvoiceImportViewModel {\n public memo: string;\n\n public invoiceId: string;\n\n public date: string;\n\n public source: PaymentSource;\n\n public customer: any;\n\n public amount: number;\n\n public payee: PayeeViewModel;\n\n public alternativePayees: Array;\n\n public hasAttachments: boolean;\n\n public currency: string;\n}\nexport class DropdownOption {\n public value: any;\n\n public text: any;\n\n public imageUrl: string; // Small image besides each dropdown option (optional)\n\n constructor(value: any, text: any) {\n this.value = value;\n this.text = text;\n }\n}\n\nexport enum PendingApprovalType {\n Payment,\n QueuedAutomaticPayment,\n}\n\nexport class EmailVerifiedBindingModel {\n public email: string;\n\n public loginCode: string;\n}\n\nexport class EmailVerifiedViewModel {\n public email: string;\n\n public loginCode: string;\n}\n\nexport interface PaymentLineItemViewModel {\n id: string;\n paymentId: string;\n memo: string;\n amount: number;\n currency: string;\n}\n\nexport enum PaymentApprovalStatus {\n Approved = 'approved',\n Rejected = 'rejected',\n}\n\nexport interface RequiredPaymentApprovalViewModel {\n userId: string;\n status: PaymentApprovalStatus | null;\n date: string | null;\n email: string | null;\n phone: string | null;\n fullName: string;\n limitTierRequireApproval: boolean | null;\n initiatedPayment: boolean;\n satisfiedApproval: boolean;\n decisionMemo: string | null;\n}\n\nexport interface PendingApprovalViewModel {\n contactName: string;\n\n amount: number;\n\n currency: string;\n\n date: string;\n\n discriminator:\n | 'PlootoPaymentPendingApprovalViewModel'\n | 'PlootoPaymentPendingApprovalViewModelWithApproverDetails'\n | 'QueuedAutomaticPaymentPendingApprovalViewModel';\n\n hasAttachments: boolean;\n\n accountDisplayName: string;\n\n paymentLineItems: Array; // PendingApprovalViewModel[]\n\n numberOfRemainingRequiredApprovals: number;\n\n paymentId: string; // PlootoPaymentPendingApprovalViewModel\n\n accountingSoftwareBillId: string; // QueuedAutomaticPaymentPendingApprovalViewModel\n\n accountId?: string; // PlootoPaymentPendingApprovalViewModelWithApproverDetails\n\n approvers?: Array; // PlootoPaymentPendingApprovalViewModelWithApproverDetails\n}\n\n// Onboarding Wizard\n\nexport enum OnboardingWizardCardState {\n Incomplete,\n Completed,\n}\n\nexport interface CompanyOnboardingCardState {\n stepType: VerifyCompanyStep;\n state: OnboardingWizardCardState;\n isActiveStep: boolean;\n title: string;\n mobileTitle: string;\n}\n\nexport interface IdentityVerificationOnboardingCardState {\n stepType: UserIdentityProgressSteps;\n state: OnboardingWizardCardState;\n isActiveStep: boolean;\n title: string;\n mobileTitle: string;\n}\n\n// Private Messages\nexport class PrivateMessagesFilterBindingModel {\n messageDirection: string;\n\n orderBy: string;\n\n limit: number;\n\n filter: boolean;\n}\n\nexport class OnboardingStepDetail {\n title: string;\n\n subtitle: string;\n\n onboardingStep: OnboardingStep;\n\n isCurrentStep: boolean;\n\n isCompleted: boolean;\n\n highlightOnboardingSteps: Array;\n}\n\nexport class CompanyOwnerInformationViewModel {\n id: string;\n\n fullName: string;\n\n email: string;\n}\n\nexport class ServiceSubscriptionQuestionnaireBindingModel {\n reason: string;\n\n question: string;\n\n questionAnswer: string;\n\n comments: string;\n}\n\nexport class UsCompanyIncorporationDetailsViewModel {\n state: DropdownOption;\n\n corporationNumber: string;\n\n corporationNumberType: string;\n}\n\nexport class UniversalPayeeViewModel {\n public id: string;\n\n public name: string;\n\n public phone: string;\n\n public address: string;\n\n public unit: string;\n\n public city: string;\n\n public zipCode: string;\n\n public country: string;\n\n public state: string;\n}\n","import { QueryClient } from '@tanstack/react-query';\n\nimport { queryClient } from '@/providers/PlootoPlatformProvider.caches';\n\n/**\n * Invalidates a TanStack Query via a QueryKey. Equivalent to the following:\n *\n * @example\n * // from a React component\n * const queryClient = useQueryClient();\n * queryClient.invalidateQueries(['Company', companyId]);\n *\n * // from a Durandal viewmodel\n * invalidateReactQueriesFromDurandal(['Company', companyId]);\n */\nexport const invalidateReactQueriesFromDurandal: QueryClient['invalidateQueries'] =\n queryClient.invalidateQueries.bind(queryClient);\n"],"names":["CountryCode","BankLoginSource","FlexSelectDataService","secondaryCachePromises","flexselects","queuedSearchQuery","searchStatus","appEventsClearCache","cachePromises","appEventsClearCacheEvents","cacheEnabled","bounceTimeout","attached","$","each","index","appEventClearCache","clearCacheEvent","app","then","clearCache","push","searchItemsPrimary","searchItemsSecondary","secondaryBounceTimeout","flexSelectTextUpdatedCallback","searchQuery","flexSelect","trim","deferred","Deferred","updateFlexselectItems","getItems","items","itemsReducerFunction","reduce","updateItems","clearTimeout","trimmedSearchQuery","searchBounceTimeout","window","setTimeout","queryDataFromPromse","dataResults","resolve","secondarySearchBounceTimeout","querySecondaryPromiseCallback","getQueryPromise","queryPromise","promise","bind","queryPromiseCallback","fail","detached","appEventsClearCacheEvent","off","flexselect","addFlexSelect","removeFlexSelect","flexSelectToRemove","grep","value","clearFlexSelectByBoundValue","boundToValue","settings","setInitialValue","setQueryEmptySingle","itemToUpdate","results","length","PaginationKnockoutModel","page","ko","resultsPerPage","totalPages","totalResults","rangeStart","rangeEnd","maxVisibleNumbers","setContentRange","contentRangeHeader","size","Math","ceil","navigatePage","visiblePageNumbers","read","visibleRanges","i","deferEvaluation","isFirstPage","isLastPage","nextPageIsLastPage","hasMoreNextVisiblePages","hasMorePreviousVisiblePages","lastPageNumber","previousPageIsFirstPage","nextInSetOfPageNumbers","previousInSetOfPageNumbers","ContentRangeHeader","fromString","contentRange","contentRangeGroups","exec","Number","parseInt","PromiseWithXhr","constructor","dataPromise","abort","xhr","XhrService","initiatePromiseWithXhr","promiseWithXhr","retryCounter","executeXhr","getXhr","data","textStatus","jqXHR","error","type","SessionTimeoutService","showTimeout","loginResponse","reject","plootoUtils","getResponseHeader","paginationService","dataProcessCallback","dataCallbackResults","Instance","URLSearchParamsWithoutKeyEncoding","URLSearchParams","toString","Array","from","entries","map","key","encodeURIComponent","replaceAll","join","serializeValue","into","isArray","forEach","item","Object","prototype","call","keys","name","append","String","serializeQueryWithoutKeyEncoding","params","declareModules","modals/manage/popup.html","ManagePayee","BaseModal","view","isClosing","lastScrollTop","Close","css","height","overflow","scrollTop","addedDialog","dialog","host","addClass","animate","opacity","show","undefined","dialogOptions","getView","resizeWrapper","trigger","PopupManager","visiblePopupModal","baseDialogUrl","getBaseDialogUrl","modalNavigationSubscription","modals","instance","instruction","router0","activeInstruction","fragment","indexOf","closeExistingModal","CheckModalNavigation","AddModal","dialogToAdd","Show","fragmentUrl","router","goBackCallback","slideDown","showModalWithSafeClose","modalHtmlPath","componentParams","thisPopupModal","popupModal","args","success","modal","activateModal","modalParamsCallback","GoBack","successCallback","slideInterval","setInterval","slideUp","clearInterval","forceShow","classes","card","alignItems","border","borderColor","display","flexDirection","justifyContent","padding","width","VoidChequeEftDialog","isOpen","onConnectBankAccountClick","onDialogClose","onEnterBankAccountDetailsClick","_jsx","Dialog","title","FormattedMessage","id","defaultMessage","children","_DialogContent","_jsxs","_Stack","direction","xs","md","gap","_Paper","sx","elevation","AccountBalanceIcon","color","fontSize","_Typography","variant","fontWeight","align","_Button","onClick","AssignmentIcon","memo","modals/styled/paymentTransactionError.html","ViewModelParams","StyledModal","transactionErrorTitle","paymentService","getTransactionErrorTitle","transactionError","transactionErrorDescription","getTransactionErrorDescription","close","continueModal","API_PREFIX","EmailMoneyTransferViewModel","EmailMoneyTransferDetailsViewModel","EmailMoneyTransferBankingDetailsViewModel","EmailMoneyTransferConfirmationViewModel","EmailMoneyTransferService","userService","GetByEmailKey","emailKey","system","dfd","AuthorizedGet","create","globalThis","import_meta_env","APP_URLS_API_URL","done","emailMoneyTransfer","AnswerSecurityQuestion","securityAnswer","AuthorizedPost","emailMoneyTransferDetails","SubmitBankingInformation","submitData","components/user/bank/bankInformationFields","components/user/bank/bankInformationFields.html","components/user/bank/bankValidation/bankSelection","components/user/bank/bankValidation/bankSelection.html","components/user/bank/bankValidation/bankValidationWrapper","components/user/bank/bankValidation/bankValidationWrapper.html","modals/manage/bankLoginDetails.html","EmailMoneyTransferStep","ViewModel","emailMoneyTransferService","status","currentStep","Question","companyService","reuseAccount","reuseForFuturePayments","bypassReusedInformation","optIntoMarketingCommunications","institution","routingNumber","bankDetailsType","statesAvailable","voidChequeText","selectedAccount","validateBankingInformation","popupManager","bankProvider","bankLoginSource","EmailMoneyTransfer","isSecondaryBankEnabled","isSecondaryBankLoginModalVisible","secondaryBankAccountDetailsAddModel","companyCountry","companyName","countrySelect","uniqueFormIdentifier","getUniquieIdentifier","propertyName","bankCountryUniqueIdentifier","react","fragments","SecondaryBankLoginFragment","showVoidChequeEftDialog","ResetClientData","account","country","profileData","bindCountryFlexSelect","activate","AddPopupManager","routeStep","GetRouteStep","updateCurrentStep","Filled","prefillCountry","prefillCurrency","currency","isSecondaryBankLoginEnabled","LegacyFeatureFlag","SECONDARY_BANK_LOGIN","HandleError","write","LocationService","getCountrySupportedStates","states","skipSecurityQuestions","BankDetails","parent","countryFlexSelectDataService","removeClass","companyCountrySubscription","dispose","canActivate","redirect","GetStepUrl","fixedRoute","GetFixedRouteStep","bankingSubmitData","payeeService","routeParts","split","ReuseBank","Confirmation","Success","Error","AnswerStepTransferQuestion","form","canReuseAccount","ActivateStep","HandleSubmitError","formData","serializeArray","field","institutionOther","emailMoneyTransferBankAddModel","accountDetails","verifiedBankAccountDetailsAddModel","addModels","storageToken","selectedBankAccountId","sessionToken","accountNumber","validate","transit","confirmed","viewModel","bankName","selectedAccountName","optedIntoMarketingCommunications","errorInfo","message","fields","errorField","SubmitConfirmation","optInToMarketingCommunications","useAnotherBankAccount","step","stepUrl","DisplayError","titleMessageModal","svgIconSymbolLarge","backToBankDetails","forceVoidChequeInput","paymentTransactionErrorModal","continueButtonLabel","modalResponse","errorDescription","errorTitle","JSBindReuseAccountToggle","_","event","Boolean","target","BankingInformationExists","viewMyPayments","payeeEmailKey","bankAccountSelected","SubmitReuseBank","hideSelectDepositMethod","bankingProviderSelected","bankInfo","supportsBankLogin","bankAddModal","bankIdentifier","providerId","bankCountry","forceVoidChequeCallback","bankLoginFormType","bankLoginRelatedId","shouldHideCountry","bankDetailsRequired","showSelectDepositMethod","showSecondaryBankLogin","accountSelectedCallback","console","log","closeNewBankDialog","handleEnterBankAccountDetailsClick","shouldShowBankInfo","formSubmitBankingInformation","setDefaultCountry","subscribe","text","initializeCountrySelectionFlexSelect","flexSelectDataService","countries","getPrimaryCountries","filteredItems","toLowerCase","selectCallback","filterToUpdate","koFilterValueValue","newFilterValue","KOBankAccountDetailsViewModel","maskedAccountNumber","extendedCurrency","accountHolderName","info","fromJS","ignore","maskedAccountNumberShort","substring","KOCanadianBankAccountDetailsViewModel","observable","mapping","KOUsBankAccountDetailsViewModel","KOMicroDepositViewModel","validated","sent","codeSentDate","codeReceivedDate","validationDate","MicroDepositViewModel","Money","PaymentFee","PreProcessSourcePayment","PaymentPreProcessViewModel","PaymentPreProcessCollectionViewModel","PaymentUpdatedDestinationAccountViewModel","InteractiveQueryOption","InteractiveQuery","PersonalIdentityVerificationQuestionSetViewModel","InteractiveQueryAnswer","InteractiveQueryAnswersOptions","answers","BusinessInformationBoardOfDirector","BusinessInformationStatusViewModel","RecurringPlanDetailsViewModel","RecurringPlanStatus","TaxType","CompanyMembershipDetailsViewModel","PayeeAccountRequiredField","PayeeAccountRequiredFieldsViewModel","ItemsWithFiltersBindingModel","PayablesWithFiltersBindingModel","ReceivablesWithFiltersBindingModel","FundAccountsWithFiltersBindingModel","RecurringPlanViewModel","DirectDebitAccountType","PaymentDestinations","PaymentDestination","payeeId","PaymentDestinationPayeeAccount","PaymentDestinationUniversalPayee","PaymentDestinationBankAccount","PaymentDestinationEmailMoneyTransfer","PaymentDestinationEmptyPayee","PaymentSources","PaymentSource","accountId","PaymentSourceFundAccount","PaymentSourceBankAccount","PaymentSourceUsBankAccount","PaymentSourceCaBankAccount","PaymentSourceIachBankAccount","PaymentSourceWallet","AccountingSoftwareMap","FundAccountViewModel","setData","json","companyId","deleted","locked","additionalAccountApprovers","numberOfApprovers","displayName","displayAccountName","displayType","BankAccountViewModel","AdyenFundAccountViewModel","BankAccountDetailsViewModel","PayeeViewModel","PayeeAccountViewModel","PaymentImportViewModel","fileAttachments","InvoiceImportViewModel","DropdownOption","PendingApprovalType","EmailVerifiedBindingModel","EmailVerifiedViewModel","PaymentApprovalStatus","OnboardingWizardCardState","PrivateMessagesFilterBindingModel","OnboardingStepDetail","CompanyOwnerInformationViewModel","ServiceSubscriptionQuestionnaireBindingModel","UsCompanyIncorporationDetailsViewModel","UniversalPayeeViewModel","invalidateReactQueriesFromDurandal","queryClient","invalidateQueries"],"sourceRoot":""}