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
JavaScript
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