{"version":3,"sources":["./node_modules/@ionic/core/dist/esm/theme-ff3fc52f.js","./node_modules/@ionic/core/dist/esm/framework-delegate-bda125fb.js","./node_modules/@capacitor/clipboard/dist/esm/web.js","./node_modules/@capacitor/clipboard/dist/esm/index.js","./src/app/modals/account-pos-integration-vend/account-pos-integration-vend.page.html","./src/app/modals/account-pos-integration-vend/account-pos-integration-vend.page.ts","./node_modules/@ionic/core/dist/esm/spinner-configs-cd7845af.js","./node_modules/@ionic/core/dist/esm/button-active-e272e3f1.js","./node_modules/@ionic/core/dist/esm/haptic-27b3f981.js"],"names":["hostContext","selector","el","closest","createColorClasses","color","cssClassMap","length","Object","assign","getClassMap","classes","map","undefined","Array","isArray","split","filter","c","trim","getClassList","forEach","SCHEME","openURL","async","url","ev","direction","animation","test","router","document","querySelector","preventDefault","push","attachComponent","delegate","container","component","cssClasses","componentProps","attachViewToDom","HTMLElement","Error","ownerDocument","createElement","classList","add","appendChild","Promise","resolve","detachComponent","element","removeViewFromDom","parentElement","remove","options","navigator","clipboard","this","unavailable","string","writeText","image","ClipboardItem","blob","fetch","clipboardItemInput","type","write","err","readText","clipboardItems","read","types","clipboardBlob","getType","value","_getBlobData","text","reject","reader","FileReader","includes","readAsDataURL","readAsText","onloadend","result","onerror","e","Clipboard","web","AccountPosIntegrationVendPage","modalController","loadingController","alertController","toastController","apiService","authService","spinner","account","loadAccount","presentSpinner","then","isLoggedIn","getAccount","dismiss","catch","error","status","presentAlert","navigate","replaceUrl","window","location","reload","id","toString","secret","presentToast","message","create","showBackdrop","present","header","sub_header","alert","subHeader","buttons","cssClass","duration","close","copyURL","SPINNERS","dur","circles","fn","index","total","animationDelay","angle","Math","PI","r","style","sin","cos","step","elmDuration","cx","cy","fill","viewBox","transform","_","lines","y1","y2","createButtonActiveGesture","isButton","currentTouchedButton","initialTouchedButton","activateButtonAtPoint","x","y","hapticFeedbackFn","target","elementFromPoint","clearActiveButton","setActiveButton","button","buttonToModify","dispatchClick","click","gestureName","threshold","onStart","currentX","currentY","onMove","onEnd","HapticEngine","win","Capacitor","isPluginAvailable","Plugins","Haptics","getEngine","isCordova","TapticEngine","isCapacitor","engine","toUpperCase","impact","notification","selectionStart","gestureSelectionStart","selectionChanged","gestureSelectionChanged","selectionEnd","gestureSelectionEnd","hapticSelection","selection","hapticSelectionStart","hapticSelectionChanged","hapticSelectionEnd","hapticImpact"],"mappings":"6FAAA,sIAAMA,EAAc,CAACC,EAAUC,IACG,OAAzBA,EAAGC,QAAQF,GAKdG,EAAqB,CAACC,EAAOC,IACR,iBAAVD,GAAsBA,EAAME,OAAS,EAAKC,OAAOC,OAAO,CAAE,aAAa,EAAM,CAAC,aAAaJ,MAAU,GAAQC,GAAeA,EAYvII,EAAeC,IACnB,MAAMC,EAAM,GAEZ,MAbmB,CAACD,QACJE,IAAZF,GACYG,MAAMC,QAAQJ,GAAWA,EAAUA,EAAQK,MAAM,MAE5DC,OAAOC,GAAU,MAALA,GACZN,IAAIM,GAAKA,EAAEC,QACXF,OAAOC,GAAW,KAANA,GAEV,GAIPE,CAAaT,GAASU,QAAQH,GAAKN,EAAIM,IAAK,GACrCN,GAEHU,EAAS,uBACTC,EAAUC,MAAOC,EAAKC,EAAIC,EAAWC,KACzC,GAAW,MAAPH,GAA0B,MAAXA,EAAI,KAAeH,EAAOO,KAAKJ,GAAM,CACtD,MAAMK,EAASC,SAASC,cAAc,cACtC,GAAIF,EAIF,OAHU,MAANJ,GACFA,EAAGO,iBAEEH,EAAOI,KAAKT,EAAKE,EAAWC,GAGvC,OAAO,I,kCCnCT,gFAEA,MAAMO,EAAkBX,MAAOY,EAAUC,EAAWC,EAAWC,EAAYC,KACzE,GAAIJ,EACF,OAAOA,EAASK,gBAAgBJ,EAAWC,EAAWE,EAAgBD,GAExE,GAAyB,iBAAdD,KAA4BA,aAAqBI,aAC1D,MAAM,IAAIC,MAAM,iCAElB,MAAMzC,EAA2B,iBAAdoC,EACfD,EAAUO,eAAiBP,EAAUO,cAAcC,cAAcP,GACjEA,EASJ,OARIC,GACFA,EAAWlB,QAAQH,GAAKhB,EAAG4C,UAAUC,IAAI7B,IAEvCsB,GACFhC,OAAOC,OAAOP,EAAIsC,GAEpBH,EAAUW,YAAY9C,SAChB,IAAI+C,QAAQC,GAAW,YAAiBhD,EAAIgD,IAC3ChD,GAEHiD,EAAkB,CAACf,EAAUgB,KACjC,GAAIA,EAAS,CACX,GAAIhB,EAEF,OAAOA,EAASiB,kBADED,EAAQE,cACmBF,GAE/CA,EAAQG,SAEV,OAAON,QAAQC,Y,8FC7BV,MAAM,UAAqB,IAC9B,YAAYM,GACR,GAAyB,oBAAdC,YAA8BA,UAAUC,UAC/C,MAAMC,KAAKC,YAAY,+CAE3B,QAAuB/C,IAAnB2C,EAAQK,aACFF,KAAKG,UAAUN,EAAQK,aAE5B,GAAIL,EAAQ/B,UACPkC,KAAKG,UAAUN,EAAQ/B,SAE5B,KAAI+B,EAAQO,MAgBb,MAAM,IAAIpB,MAAM,oBAfhB,GAA6B,oBAAlBqB,cAWP,MAAML,KAAKC,YAAY,oEAVvB,IACI,MAAMK,cAAoBC,MAAMV,EAAQO,QAAQE,OAC1CE,EAAqB,IAAIH,cAAc,CAAE,CAACC,EAAKG,MAAOH,UACtDR,UAAUC,UAAUW,MAAM,CAACF,IAErC,MAAOG,GACH,MAAM,IAAI3B,MAAM,2BAWhC,aACI,GAAyB,oBAAdc,YAA8BA,UAAUC,UAC/C,MAAMC,KAAKC,YAAY,+CAE3B,GAA6B,oBAAlBI,cAaP,OAAOL,KAAKY,WAZZ,IACI,MAAMC,QAAuBf,UAAUC,UAAUe,OAC3CL,EAAOI,EAAe,GAAGE,MAAM,GAC/BC,QAAsBH,EAAe,GAAGI,QAAQR,GAEtD,MAAO,CAAES,YADUlB,KAAKmB,aAAaH,EAAeP,GAC9BA,QAE1B,MAAOE,GACH,OAAOX,KAAKY,YAOxB,iBACI,GAAyB,oBAAdd,YACNA,UAAUC,YACVD,UAAUC,UAAUa,SACrB,MAAMZ,KAAKC,YAAY,wDAG3B,MAAO,CAAEiB,YADUpB,UAAUC,UAAUa,WACjBH,KAAM,cAEhC,gBAAgBW,GACZ,GAAyB,oBAAdtB,YACNA,UAAUC,YACVD,UAAUC,UAAUI,UACrB,MAAMH,KAAKC,YAAY,6DAErBH,UAAUC,UAAUI,UAAUiB,GAExC,aAAaJ,EAAeP,GACxB,OAAO,IAAInB,QAAQ,CAACC,EAAS8B,KACzB,MAAMC,EAAS,IAAIC,WACfd,EAAKe,SAAS,SACdF,EAAOG,cAAcT,GAGrBM,EAAOI,WAAWV,GAEtBM,EAAOK,UAAY,KAEfpC,EADU+B,EAAOM,SAGrBN,EAAOO,QAAUC,IACbT,EAAOS,OChFvB,MAAMC,EAAY,YAAe,YAAa,CAC1CC,IAAK,IAAM,IAAI,I,iHC6CP,oBACI,oBAAW,QAAoG,OACnH,Q,oBADe,0H,6ECpCpB,Y,MAAMC,EAKT,YACY9D,EACA+D,EACAC,EACAC,EACAC,EACAC,EACAC,GANA,KAAApE,SACA,KAAA+D,kBACA,KAAAC,oBACA,KAAAC,kBACA,KAAAC,kBACA,KAAAC,aACA,KAAAC,cAVZ,KAAAC,QAAU,KACV,KAAAC,QAAU,KAYV,WACIzC,KAAK0C,cAGT,cACI,OAAO,IAAIpD,QAAc,CAACC,EAAS8B,KAC/BrB,KAAK2C,eAAe,mBAAmBC,KAAK,KACxC5C,KAAKuC,YAAYM,aAAaD,KAAK,KAC/B5C,KAAKsC,WAAWQ,aAAaF,KAAMH,IAC3BA,IACAzC,KAAKyC,QAAUA,EACfzC,KAAKwC,QAAQO,UACbxD,OAGPyD,MAAOC,IACJjD,KAAKwC,QAAQO,UACQ,MAAjBE,EAAMC,OACNlD,KAAKmD,aAAa,UAAW,gBAAiB,uEACtB,MAAjBF,EAAMC,OACblD,KAAKmD,aAAa,UAAW,2BAA4B,mDACjC,MAAjBF,EAAMC,QAAmC,IAAjBD,EAAMC,QACrClD,KAAKmD,aAAa,UAAW,cAAe,qEAEhD9B,QAGP2B,MAAM,KACHhD,KAAKwC,QAAQO,UACb/C,KAAK7B,OAAOiF,SAAS,CAAC,UAAW,CAAEC,YAAY,IAAQT,KAAK,KACxDU,OAAOC,SAASC,iBAOpC,QACIxD,KAAKkC,gBAAgBa,UAGzB,UACIhB,EAAUrB,MAAM,CAACR,OAAQ,sDAAwDF,KAAKyC,QAAQgB,GAAGC,WAAa,oBAAsB1D,KAAKyC,QAAQkB,OAAOD,aAAad,KAAK,KACtK5C,KAAK4D,aAAa,6BAIpB,eAAeC,G,kDACjB7D,KAAKwC,cAAgBxC,KAAKmC,kBAAkB2B,OAAO,CAC/CD,QAASA,EACTE,cAAc,UAEZ/D,KAAKwC,QAAQwB,YAGjB,aAAaC,EAAQC,EAAYL,G,kDACnC,MAAMM,QAAcnE,KAAKoC,gBAAgB0B,OAAO,CAC5CG,OAAQA,EACRG,UAAWF,EACXL,QAASA,EACTQ,QAAS,CAAC,cAERF,EAAMH,YAGV,aAAaH,G,yDACK7D,KAAKqC,gBAAgByB,OAAO,CAC5CQ,SAAU,qBACVT,QAASA,EACTU,SAAU,OAERP,a,6CAtFD/B,GAA6B,wE,uBAA7BA,EAA6B,wSDb1C,qBACI,sBACI,wBACI,uBAAY,+BAAS,EAAAuC,UACjB,oBACJ,OACJ,OACA,oBAAW,8BAAmB,OAClC,OACJ,OAEA,sBACI,qBAEI,kBACI,mBACI,aAAG,4CAAgC,OACvC,OACJ,OAEA,mBACI,mBACI,aAAG,0CAA8B,OACrC,OACJ,OAEA,mBACI,mBACI,aAAG,qCAAyB,OAChC,OACJ,OAEA,mBACI,mBACI,aAAG,2DAA+C,OACtD,OACJ,OAEA,mBACI,mBACI,aAAG,wCAA4B,aAAG,mBAAO,OAAI,OACjD,OACJ,OAEA,mBACI,qBACI,aAAG,6DAAiD,OACxD,OACA,2BAGA,qBACI,wBAAY,+BAAS,EAAAC,YACjB,qBACA,gBAAM,gBAAI,OACd,OACJ,OACJ,OAEA,mBACI,mBACI,aAAG,sCAA0B,OACjC,OACJ,OAEA,mBACI,mBACI,aAAG,gFAAoE,OAC3E,OACJ,OAEJ,OACJ,Q,MApEyB,+BAAyB,iBA4ClB,gCAKH,iC,wNCxCtB,I,kCCbP,sCA2GMC,EA3GW,CACf,QAAW,CACTC,IAAK,IACLC,QAAS,EACTC,GAAI,CAACF,EAAKG,EAAOC,KACf,MAAMC,EAAqBL,EAAMG,EAAQC,EAASJ,EAA3B,KACjBM,EAAQ,EAAIC,KAAKC,GAAKL,EAAQC,EACpC,MAAO,CACLK,EAAG,EACHC,MAAO,CACL,IAAU,EAAIH,KAAKI,IAAIL,GAAhB,KACP,KAAW,EAAIC,KAAKK,IAAIN,GAAhB,KACR,kBAAmBD,MAK3B,QAAW,CACTL,IAAK,IACLC,QAAS,EACTC,GAAI,CAACF,EAAKG,EAAOC,KACf,MAAMS,EAAOV,EAAQC,EACfC,EAAqBL,EAAMa,EAAQb,EAAlB,KACjBM,EAAQ,EAAIC,KAAKC,GAAKK,EAC5B,MAAO,CACLJ,EAAG,EACHC,MAAO,CACL,IAAU,EAAIH,KAAKI,IAAIL,GAAhB,KACP,KAAW,EAAIC,KAAKK,IAAIN,GAAhB,KACR,kBAAmBD,MAK3B,SAAY,CACVL,IAAK,KACLc,aAAa,EACbb,QAAS,EACTC,GAAI,KACK,CACLO,EAAG,GACHM,GAAI,GACJC,GAAI,GACJC,KAAM,OACNC,QAAS,cACTC,UAAW,iBACXT,MAAO,MAIb,SAAY,CACVV,IAAK,IACLC,QAAS,EACTC,GAAI,KACK,CACLO,EAAG,GACHC,MAAO,MAIb,KAAQ,CACNV,IAAK,IACLC,QAAS,EACTC,GAAI,CAACkB,EAAGjB,KAEC,CACLM,EAAG,EACHC,MAAO,CACL,KAAW,EAAK,EAAIP,EAAZ,KACR,mBALqB,IAAMA,EAAS,SAU5C,MAAS,CACPH,IAAK,IACLqB,MAAO,GACPnB,GAAI,CAACF,EAAKG,EAAOC,KAGR,CACLkB,GAAI,GACJC,GAAI,GACJb,MAAO,CACL,UANc,UAAU,GAAKP,GAASA,EAAQ,EAAI,KAAO,WAOzD,kBANuBH,EAAMG,EAAQC,EAASJ,EAA3B,SAW3B,cAAe,CACbA,IAAK,IACLqB,MAAO,GACPnB,GAAI,CAACF,EAAKG,EAAOC,KAGR,CACLkB,GAAI,GACJC,GAAI,GACJb,MAAO,CACL,UANc,UAAU,GAAKP,GAASA,EAAQ,EAAI,KAAO,WAOzD,kBANuBH,EAAMG,EAAQC,EAASJ,EAA3B,W,kCC/F7B,wEAIA,MAAMwB,EAA4B,CAAC5J,EAAI6J,KACrC,IAAIC,EACAC,EACJ,MAAMC,EAAwB,CAACC,EAAGC,EAAGC,KACnC,GAAwB,oBAAbtI,SACT,OAEF,MAAMuI,EAASvI,SAASwI,iBAAiBJ,EAAGC,GACvCE,GAAWP,EAASO,GAIrBA,IAAWN,IACbQ,IACAC,EAAgBH,EAAQD,IALxBG,KAQEC,EAAkB,CAACC,EAAQL,KAC/BL,EAAuBU,EAClBT,IACHA,EAAuBD,GAEzB,MAAMW,EAAiBX,EACvB,YAAU,IAAMW,EAAe7H,UAAUC,IAAI,kBAC7CsH,KAEIG,EAAoB,CAACI,GAAgB,KACzC,IAAKZ,EACH,OAEF,MAAMW,EAAiBX,EACvB,YAAU,IAAMW,EAAe7H,UAAUS,OAAO,kBAS5CqH,GAAiBX,IAAyBD,GAC5CA,EAAqBa,QAEvBb,OAAuBnJ,GAEzB,OAAO,wBAAc,CACnBX,KACA4K,YAAa,mBACbC,UAAW,EACXC,QAAStJ,GAAMwI,EAAsBxI,EAAGuJ,SAAUvJ,EAAGwJ,SAAU,KAC/DC,OAAQzJ,GAAMwI,EAAsBxI,EAAGuJ,SAAUvJ,EAAGwJ,SAAU,KAC9DE,MAAO,KACLZ,GAAkB,GAClB,cACAP,OAAuBpJ,O,kCC1D7B,sKAAMwK,EAAe,CACnB,YACE,MAAMC,EAAMrE,OACZ,OAAQqE,EAAgB,cAAMA,EAAIC,WAAaD,EAAIC,UAAUC,kBAAkB,YAAcF,EAAIC,UAAUE,QAAQC,SAErH,YACE,QAAS/H,KAAKgI,aAEhBC,UAAS,MACE3E,OAAO4E,aAElBC,YAAW,MACG7E,OACCsE,UAEf,OAAO/H,GACL,MAAMuI,EAASpI,KAAKgI,YACpB,IAAKI,EACH,OAEF,MAAM/C,EAAQrF,KAAKmI,cAAgBtI,EAAQwF,MAAMgD,cAAgBxI,EAAQwF,MACzE+C,EAAOE,OAAO,CAAEjD,WAElB,aAAaxF,GACX,MAAMuI,EAASpI,KAAKgI,YACpB,IAAKI,EACH,OAEF,MAAM/C,EAAQrF,KAAKmI,cAAgBtI,EAAQwF,MAAMgD,cAAgBxI,EAAQwF,MACzE+C,EAAOG,aAAa,CAAElD,WAExB,YACErF,KAAKsI,OAAO,CAAEjD,MAAO,WAEvB,iBACE,MAAM+C,EAASpI,KAAKgI,YACfI,IAGDpI,KAAKmI,cACPC,EAAOI,iBAGPJ,EAAOK,0BAGX,mBACE,MAAML,EAASpI,KAAKgI,YACfI,IAGDpI,KAAKmI,cACPC,EAAOM,mBAGPN,EAAOO,4BAGX,eACE,MAAMP,EAASpI,KAAKgI,YACfI,IAGDpI,KAAKmI,cACPC,EAAOQ,eAGPR,EAAOS,yBAQPC,EAAkB,KACtBpB,EAAaqB,aAKTC,EAAuB,KAC3BtB,EAAac,kBAKTS,EAAyB,KAC7BvB,EAAagB,oBAMTQ,EAAqB,KACzBxB,EAAakB,gBAMTO,EAAgBtJ,IACpB6H,EAAaY,OAAOzI","file":"common.75eecdff94ea2bd61d18.js","sourcesContent":["const hostContext = (selector, el) => {\n return el.closest(selector) !== null;\n};\n/**\n * Create the mode and color classes for the component based on the classes passed in\n */\nconst createColorClasses = (color, cssClassMap) => {\n return (typeof color === 'string' && color.length > 0) ? Object.assign({ 'ion-color': true, [`ion-color-${color}`]: true }, cssClassMap) : cssClassMap;\n};\nconst getClassList = (classes) => {\n if (classes !== undefined) {\n const array = Array.isArray(classes) ? classes : classes.split(' ');\n return array\n .filter(c => c != null)\n .map(c => c.trim())\n .filter(c => c !== '');\n }\n return [];\n};\nconst getClassMap = (classes) => {\n const map = {};\n getClassList(classes).forEach(c => map[c] = true);\n return map;\n};\nconst SCHEME = /^[a-z][a-z0-9+\\-.]*:/;\nconst openURL = async (url, ev, direction, animation) => {\n if (url != null && url[0] !== '#' && !SCHEME.test(url)) {\n const router = document.querySelector('ion-router');\n if (router) {\n if (ev != null) {\n ev.preventDefault();\n }\n return router.push(url, direction, animation);\n }\n }\n return false;\n};\n\nexport { createColorClasses as c, getClassMap as g, hostContext as h, openURL as o };\n","import { c as componentOnReady } from './helpers-cf6e85ee.js';\n\nconst attachComponent = async (delegate, container, component, cssClasses, componentProps) => {\n if (delegate) {\n return delegate.attachViewToDom(container, component, componentProps, cssClasses);\n }\n if (typeof component !== 'string' && !(component instanceof HTMLElement)) {\n throw new Error('framework delegate is missing');\n }\n const el = (typeof component === 'string')\n ? container.ownerDocument && container.ownerDocument.createElement(component)\n : component;\n if (cssClasses) {\n cssClasses.forEach(c => el.classList.add(c));\n }\n if (componentProps) {\n Object.assign(el, componentProps);\n }\n container.appendChild(el);\n await new Promise(resolve => componentOnReady(el, resolve));\n return el;\n};\nconst detachComponent = (delegate, element) => {\n if (element) {\n if (delegate) {\n const container = element.parentElement;\n return delegate.removeViewFromDom(container, element);\n }\n element.remove();\n }\n return Promise.resolve();\n};\n\nexport { attachComponent as a, detachComponent as d };\n","import { WebPlugin } from '@capacitor/core';\nexport class ClipboardWeb extends WebPlugin {\n async write(options) {\n if (typeof navigator === 'undefined' || !navigator.clipboard) {\n throw this.unavailable('Clipboard API not available in this browser');\n }\n if (options.string !== undefined) {\n await this.writeText(options.string);\n }\n else if (options.url) {\n await this.writeText(options.url);\n }\n else if (options.image) {\n if (typeof ClipboardItem !== 'undefined') {\n try {\n const blob = await (await fetch(options.image)).blob();\n const clipboardItemInput = new ClipboardItem({ [blob.type]: blob });\n await navigator.clipboard.write([clipboardItemInput]);\n }\n catch (err) {\n throw new Error('Failed to write image');\n }\n }\n else {\n throw this.unavailable('Writing images to the clipboard is not supported in this browser');\n }\n }\n else {\n throw new Error('Nothing to write');\n }\n }\n async read() {\n if (typeof navigator === 'undefined' || !navigator.clipboard) {\n throw this.unavailable('Clipboard API not available in this browser');\n }\n if (typeof ClipboardItem !== 'undefined') {\n try {\n const clipboardItems = await navigator.clipboard.read();\n const type = clipboardItems[0].types[0];\n const clipboardBlob = await clipboardItems[0].getType(type);\n const data = await this._getBlobData(clipboardBlob, type);\n return { value: data, type };\n }\n catch (err) {\n return this.readText();\n }\n }\n else {\n return this.readText();\n }\n }\n async readText() {\n if (typeof navigator === 'undefined' ||\n !navigator.clipboard ||\n !navigator.clipboard.readText) {\n throw this.unavailable('Reading from clipboard not supported in this browser');\n }\n const text = await navigator.clipboard.readText();\n return { value: text, type: 'text/plain' };\n }\n async writeText(text) {\n if (typeof navigator === 'undefined' ||\n !navigator.clipboard ||\n !navigator.clipboard.writeText) {\n throw this.unavailable('Writting to clipboard not supported in this browser');\n }\n await navigator.clipboard.writeText(text);\n }\n _getBlobData(clipboardBlob, type) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n if (type.includes('image')) {\n reader.readAsDataURL(clipboardBlob);\n }\n else {\n reader.readAsText(clipboardBlob);\n }\n reader.onloadend = () => {\n const r = reader.result;\n resolve(r);\n };\n reader.onerror = e => {\n reject(e);\n };\n });\n }\n}\n//# sourceMappingURL=web.js.map","import { registerPlugin } from '@capacitor/core';\nimport { ClipboardWeb } from './web';\nconst Clipboard = registerPlugin('Clipboard', {\n web: () => new ClipboardWeb(),\n});\nexport * from './definitions';\nexport { Clipboard };\n//# sourceMappingURL=index.js.map","\n \n \n \n \n \n \n Add Fundpay to Vend\n \n\n\n\n \n\n \n \n

1. Login to Vend in your browser

\n
\n
\n\n \n \n

2. Go to Setup > Payment Types

\n
\n
\n\n \n \n

3. Click Add Payment Type

\n
\n
\n\n \n \n

4. Choose Other Payment Method, and Begin Setup

\n
\n
\n\n \n \n

5. Change the Name field to Fundpay

\n
\n
\n\n \n \n

6. In the Gateway field, enter the following URL:

\n
\n \n https://integration.fundpay.co.nz/vend?merchant_id={{account.id}}&merchant_secret={{account.secret}}\n \n \n \n \n Copy\n \n \n
\n\n \n \n

7. Click Save Payment Type

\n
\n
\n\n \n \n

8. Fundpay will now display as a payment type on your Vend register.

\n
\n
\n\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { AlertController, ModalController, LoadingController, ToastController } from '@ionic/angular';\nimport { APIService } from '../../services/api.service';\nimport { AuthService } from '../../services/auth.service';\nimport { Router } from '@angular/router';\nimport { Clipboard } from '@capacitor/clipboard';\n\n@Component({\n selector: 'app-account-pos-integration-vend',\n templateUrl: './account-pos-integration-vend.page.html',\n styleUrls: ['./account-pos-integration-vend.page.scss'],\n})\n\nexport class AccountPosIntegrationVendPage implements OnInit {\n\n spinner = null;\n account = null;\n\n constructor(\n private router: Router,\n private modalController: ModalController,\n private loadingController: LoadingController,\n private alertController: AlertController,\n private toastController: ToastController,\n private apiService: APIService,\n private authService: AuthService,\n ) { }\n\n ngOnInit() {\n this.loadAccount();\n }\n\n loadAccount() {\n return new Promise((resolve, reject) => {\n this.presentSpinner(\"Loading account\").then(() => {\n this.authService.isLoggedIn().then(() => {\n this.apiService.getAccount().then((account) => {\n if (account) {\n this.account = account;\n this.spinner.dismiss();\n resolve();\n }\n })\n .catch((error) => {\n this.spinner.dismiss();\n if (error.status === 400) {\n this.presentAlert(\"Problem\", \"Unknown error\", \"Unfortunately something went wrong when trying to get your account.\");\n } else if (error.status === 403) {\n this.presentAlert(\"Problem\", \"Insufficient permissions\", \"You don't have permission to view your account.\");\n } else if (error.status === 404 || error.status === 0) {\n this.presentAlert(\"Problem\", \"Unavailable\", \"Unfortunately we're unable to retrieve your account at this time.\");\n }\n reject();\n });\n })\n .catch(() => {\n this.spinner.dismiss();\n this.router.navigate([\"logout\"], { replaceUrl: true }).then(() => {\n window.location.reload();\n });\n });\n });\n })\n }\n\n close() {\n this.modalController.dismiss();\n }\n\n copyURL(){\n Clipboard.write({string: 'https://integration.fundpay.co.nz/vend?merchant_id=' + this.account.id.toString() + '&merchant_secret=' + this.account.secret.toString()}).then(() => {\n this.presentToast('URL copied to clipboard');\n })\n }\n\n async presentSpinner(message) {\n this.spinner = await this.loadingController.create({\n message: message,\n showBackdrop: false,\n });\n await this.spinner.present();\n }\n\n async presentAlert(header, sub_header, message) {\n const alert = await this.alertController.create({\n header: header,\n subHeader: sub_header,\n message: message,\n buttons: ['OK']\n });\n await alert.present();\n }\n\n async presentToast(message) {\n const toast = await this.toastController.create({\n cssClass: 'toast-notification',\n message: message,\n duration: 2000\n });\n toast.present();\n }\n\n}\n","const spinners = {\n 'bubbles': {\n dur: 1000,\n circles: 9,\n fn: (dur, index, total) => {\n const animationDelay = `${(dur * index / total) - dur}ms`;\n const angle = 2 * Math.PI * index / total;\n return {\n r: 5,\n style: {\n 'top': `${9 * Math.sin(angle)}px`,\n 'left': `${9 * Math.cos(angle)}px`,\n 'animation-delay': animationDelay,\n }\n };\n }\n },\n 'circles': {\n dur: 1000,\n circles: 8,\n fn: (dur, index, total) => {\n const step = index / total;\n const animationDelay = `${(dur * step) - dur}ms`;\n const angle = 2 * Math.PI * step;\n return {\n r: 5,\n style: {\n 'top': `${9 * Math.sin(angle)}px`,\n 'left': `${9 * Math.cos(angle)}px`,\n 'animation-delay': animationDelay,\n }\n };\n }\n },\n 'circular': {\n dur: 1400,\n elmDuration: true,\n circles: 1,\n fn: () => {\n return {\n r: 20,\n cx: 48,\n cy: 48,\n fill: 'none',\n viewBox: '24 24 48 48',\n transform: 'translate(0,0)',\n style: {}\n };\n }\n },\n 'crescent': {\n dur: 750,\n circles: 1,\n fn: () => {\n return {\n r: 26,\n style: {}\n };\n }\n },\n 'dots': {\n dur: 750,\n circles: 3,\n fn: (_, index) => {\n const animationDelay = -(110 * index) + 'ms';\n return {\n r: 6,\n style: {\n 'left': `${9 - (9 * index)}px`,\n 'animation-delay': animationDelay,\n }\n };\n }\n },\n 'lines': {\n dur: 1000,\n lines: 12,\n fn: (dur, index, total) => {\n const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`;\n const animationDelay = `${(dur * index / total) - dur}ms`;\n return {\n y1: 17,\n y2: 29,\n style: {\n 'transform': transform,\n 'animation-delay': animationDelay,\n }\n };\n }\n },\n 'lines-small': {\n dur: 1000,\n lines: 12,\n fn: (dur, index, total) => {\n const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`;\n const animationDelay = `${(dur * index / total) - dur}ms`;\n return {\n y1: 12,\n y2: 20,\n style: {\n 'transform': transform,\n 'animation-delay': animationDelay,\n }\n };\n }\n }\n};\nconst SPINNERS = spinners;\n\nexport { SPINNERS as S };\n","import { c as writeTask } from './index-3ccd7557.js';\nimport { createGesture } from './index-f49d994d.js';\nimport { h as hapticSelectionEnd, a as hapticSelectionStart, b as hapticSelectionChanged } from './haptic-27b3f981.js';\n\nconst createButtonActiveGesture = (el, isButton) => {\n let currentTouchedButton;\n let initialTouchedButton;\n const activateButtonAtPoint = (x, y, hapticFeedbackFn) => {\n if (typeof document === 'undefined') {\n return;\n }\n const target = document.elementFromPoint(x, y);\n if (!target || !isButton(target)) {\n clearActiveButton();\n return;\n }\n if (target !== currentTouchedButton) {\n clearActiveButton();\n setActiveButton(target, hapticFeedbackFn);\n }\n };\n const setActiveButton = (button, hapticFeedbackFn) => {\n currentTouchedButton = button;\n if (!initialTouchedButton) {\n initialTouchedButton = currentTouchedButton;\n }\n const buttonToModify = currentTouchedButton;\n writeTask(() => buttonToModify.classList.add('ion-activated'));\n hapticFeedbackFn();\n };\n const clearActiveButton = (dispatchClick = false) => {\n if (!currentTouchedButton) {\n return;\n }\n const buttonToModify = currentTouchedButton;\n writeTask(() => buttonToModify.classList.remove('ion-activated'));\n /**\n * Clicking on one button, but releasing on another button\n * does not dispatch a click event in browsers, so we\n * need to do it manually here. Some browsers will\n * dispatch a click if clicking on one button, dragging over\n * another button, and releasing on the original button. In that\n * case, we need to make sure we do not cause a double click there.\n */\n if (dispatchClick && initialTouchedButton !== currentTouchedButton) {\n currentTouchedButton.click();\n }\n currentTouchedButton = undefined;\n };\n return createGesture({\n el,\n gestureName: 'buttonActiveDrag',\n threshold: 0,\n onStart: ev => activateButtonAtPoint(ev.currentX, ev.currentY, hapticSelectionStart),\n onMove: ev => activateButtonAtPoint(ev.currentX, ev.currentY, hapticSelectionChanged),\n onEnd: () => {\n clearActiveButton(true);\n hapticSelectionEnd();\n initialTouchedButton = undefined;\n }\n });\n};\n\nexport { createButtonActiveGesture as c };\n","const HapticEngine = {\n getEngine() {\n const win = window;\n return (win.TapticEngine) || (win.Capacitor && win.Capacitor.isPluginAvailable('Haptics') && win.Capacitor.Plugins.Haptics);\n },\n available() {\n return !!this.getEngine();\n },\n isCordova() {\n return !!window.TapticEngine;\n },\n isCapacitor() {\n const win = window;\n return !!win.Capacitor;\n },\n impact(options) {\n const engine = this.getEngine();\n if (!engine) {\n return;\n }\n const style = this.isCapacitor() ? options.style.toUpperCase() : options.style;\n engine.impact({ style });\n },\n notification(options) {\n const engine = this.getEngine();\n if (!engine) {\n return;\n }\n const style = this.isCapacitor() ? options.style.toUpperCase() : options.style;\n engine.notification({ style });\n },\n selection() {\n this.impact({ style: 'light' });\n },\n selectionStart() {\n const engine = this.getEngine();\n if (!engine) {\n return;\n }\n if (this.isCapacitor()) {\n engine.selectionStart();\n }\n else {\n engine.gestureSelectionStart();\n }\n },\n selectionChanged() {\n const engine = this.getEngine();\n if (!engine) {\n return;\n }\n if (this.isCapacitor()) {\n engine.selectionChanged();\n }\n else {\n engine.gestureSelectionChanged();\n }\n },\n selectionEnd() {\n const engine = this.getEngine();\n if (!engine) {\n return;\n }\n if (this.isCapacitor()) {\n engine.selectionEnd();\n }\n else {\n engine.gestureSelectionEnd();\n }\n }\n};\n/**\n * Trigger a selection changed haptic event. Good for one-time events\n * (not for gestures)\n */\nconst hapticSelection = () => {\n HapticEngine.selection();\n};\n/**\n * Tell the haptic engine that a gesture for a selection change is starting.\n */\nconst hapticSelectionStart = () => {\n HapticEngine.selectionStart();\n};\n/**\n * Tell the haptic engine that a selection changed during a gesture.\n */\nconst hapticSelectionChanged = () => {\n HapticEngine.selectionChanged();\n};\n/**\n * Tell the haptic engine we are done with a gesture. This needs to be\n * called lest resources are not properly recycled.\n */\nconst hapticSelectionEnd = () => {\n HapticEngine.selectionEnd();\n};\n/**\n * Use this to indicate success/failure/warning to the user.\n * options should be of the type `{ style: 'light' }` (or `medium`/`heavy`)\n */\nconst hapticImpact = (options) => {\n HapticEngine.impact(options);\n};\n\nexport { hapticSelectionStart as a, hapticSelectionChanged as b, hapticSelection as c, hapticImpact as d, hapticSelectionEnd as h };\n"],"sourceRoot":"webpack:///"}