UNPKG

seerbit-angular

Version:

<p align="center"> <img width="500" valign="top" src="https://res.cloudinary.com/dpejkbof5/image/upload/v1620323718/Seerbit_logo_png_ddcor4.png" data-canonical-src="https://res.cloudinary.com/dpejkbof5/image/upload/v1620323718/Seerbit_logo_png_ddcor4.png"

235 lines (228 loc) 9.79 kB
import * as i0 from '@angular/core'; import { Injectable, EventEmitter, Directive, Input, Output, HostListener, Component, NgModule } from '@angular/core'; import * as i2 from '@angular/common'; import { CommonModule } from '@angular/common'; class SeerbitService { constructor() { } loadScript() { return new Promise(resolve => { if (window.SeerbitPay && typeof window.SeerbitPay.pay === 'function') { resolve(); return; } const script = window.document.createElement('script'); window.document.head.appendChild(script); const onLoadFunc = () => { script.removeEventListener('load', onLoadFunc); resolve(); }; script.addEventListener('load', onLoadFunc); script.setAttribute('src', 'https://checkout.seerbitapi.com/api/v2/seerbit.js'); }); } getSeerBitOptions(obj) { return { amount: obj.amount, tranref: obj.tranref, public_key: obj.public_key, currency: obj.currency || 'NGN', callbackurl: obj.callbackurl || '', country: obj.country, description: obj.description, email: obj.email || '', mobile_no: obj.mobile_no || '', full_name: obj.full_name || '', setAmountByCustomer: obj.setAmountByCustomer || false, close_prompt: obj.close_prompt || false, close_on_success: obj.close_on_success || false, customization: obj.customization || null, tokenize: obj.tokenize || false, planId: obj.planId || '' }; } checkInput(obj) { if (!obj.public_key) { return 'SeerBit: Please insert a your public key'; } if (!obj.amount) { return 'SeerBit: Transaction amount cannot be empty'; } if (!obj.tranref) { return 'SeerBit: Transaction ref cannot be empty'; } return ''; } /** @nocollapse */ static ɵfac = function SeerbitService_Factory(t) { return new (t || SeerbitService)(); }; /** @nocollapse */ static ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: SeerbitService, factory: SeerbitService.ɵfac, providedIn: 'root' }); } (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SeerbitService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], function () { return []; }, null); })(); class SeerBitButtonDirective { seerBitService; options; callback = new EventEmitter(); close = new EventEmitter(); validationError = new EventEmitter(); _options; closeFn; callbackFn; errorFn; constructor(seerBitService) { this.seerBitService = seerBitService; } async pay() { const errorText = this.validateInput(this.options); this.generateOptions(this.options); if (errorText) { console.error(errorText); this.validationError.emit(errorText); return errorText; } await this.seerBitService.loadScript(); window.SeerbitPay(this._options, this.callbackFn, this.closeFn); } generateOptions(obj) { this._options = this.seerBitService.getSeerBitOptions(obj); this.closeFn = (...response) => { if (this.close.observers.length) { this.close.emit(...response); } }; this.callbackFn = (response, closeModal) => { this.callback.emit({ response, closeModal }); }; } validateInput(obj) { if (!this.callback.observers.length) { return 'SeerBit: Insert a callback function like so (callback)=\'PaymentComplete($event)\' to check payment status'; } return this.seerBitService.checkInput(obj); } async buttonClick() { this.pay(); } /** @nocollapse */ static ɵfac = function SeerBitButtonDirective_Factory(t) { return new (t || SeerBitButtonDirective)(i0.ɵɵdirectiveInject(SeerbitService)); }; /** @nocollapse */ static ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: SeerBitButtonDirective, selectors: [["", "seerbit-ng", ""]], hostBindings: function SeerBitButtonDirective_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("click", function SeerBitButtonDirective_click_HostBindingHandler() { return ctx.buttonClick(); }); } }, inputs: { options: "options" }, outputs: { callback: "callback", close: "close", validationError: "validationError" } }); } (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SeerBitButtonDirective, [{ type: Directive, args: [{ selector: '[seerbit-ng]' }] }], function () { return [{ type: SeerbitService }]; }, { options: [{ type: Input }], callback: [{ type: Output }], close: [{ type: Output }], validationError: [{ type: Output }], buttonClick: [{ type: HostListener, args: ['click'] }] }); })(); const _c0 = ["*"]; class SeerBitComponent { seerBitService; class; style; options; callback = new EventEmitter(); close = new EventEmitter(); validationError = new EventEmitter(); // tslint:disable-next-line:variable-name _options; closeFn; callbackFn; constructor(seerBitService) { this.seerBitService = seerBitService; } generateOptions(obj) { this._options = this.seerBitService.getSeerBitOptions(obj); this.closeFn = (...response) => { if (this.close.observers.length) { this.close.emit(...response); } }; this.callbackFn = (response, closeModal) => { this.callback.emit({ response, closeModal }); }; } validateInput(obj) { if (!this.callback.observers.length) { return 'SeerBit: Insert a callback output like so (callback)=\'PaymentComplete($event)\' to check payment status'; } return this.seerBitService.checkInput(obj); } async buttonClick() { this.pay(); } async pay() { const errorText = this.validateInput(this.options); this.generateOptions(this.options); if (errorText) { this.validationError.emit(errorText); return errorText; } await this.seerBitService.loadScript(); window.SeerbitPay(this._options, this.callbackFn, this.closeFn); } /** @nocollapse */ static ɵfac = function SeerBitComponent_Factory(t) { return new (t || SeerBitComponent)(i0.ɵɵdirectiveInject(SeerbitService)); }; /** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SeerBitComponent, selectors: [["seerbit-ng"]], hostBindings: function SeerBitComponent_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("click", function SeerBitComponent_click_HostBindingHandler() { return ctx.buttonClick(); }); } }, inputs: { class: "class", style: "style", options: "options" }, outputs: { callback: "callback", close: "close", validationError: "validationError" }, ngContentSelectors: _c0, decls: 2, vars: 2, consts: [[3, "ngClass", "ngStyle"]], template: function SeerBitComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵelementStart(0, "button", 0); i0.ɵɵprojection(1); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("ngClass", ctx.class)("ngStyle", ctx.style); } }, dependencies: [i2.NgClass, i2.NgStyle], encapsulation: 2 }); } (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SeerBitComponent, [{ type: Component, args: [{ selector: 'seerbit-ng', template: `<button [ngClass]="class" [ngStyle]="style"><ng-content></ng-content></button>` }] }], function () { return [{ type: SeerbitService }]; }, { class: [{ type: Input }], style: [{ type: Input }], options: [{ type: Input }], callback: [{ type: Output }], close: [{ type: Output }], validationError: [{ type: Output }], buttonClick: [{ type: HostListener, args: ['click'] }] }); })(); class NgSeerBitModule { /** @nocollapse */ static ɵfac = function NgSeerBitModule_Factory(t) { return new (t || NgSeerBitModule)(); }; /** @nocollapse */ static ɵmod = /** @pureOrBreakMyCode */ i0.ɵɵdefineNgModule({ type: NgSeerBitModule }); /** @nocollapse */ static ɵinj = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjector({ imports: [CommonModule] }); } (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgSeerBitModule, [{ type: NgModule, args: [{ declarations: [SeerBitButtonDirective, SeerBitComponent], imports: [CommonModule], exports: [SeerBitButtonDirective, SeerBitComponent] }] }], null, null); })(); (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(NgSeerBitModule, { declarations: [SeerBitButtonDirective, SeerBitComponent], imports: [CommonModule], exports: [SeerBitButtonDirective, SeerBitComponent] }); })(); /** * Generated bundle index. Do not edit. */ export { NgSeerBitModule, SeerBitButtonDirective, SeerBitComponent }; //# sourceMappingURL=seerbit-angular.mjs.map