@croeminc/croem-card-widget 0.6.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/Constants.d.ts +8 -0
  2. package/README.md +125 -0
  3. package/esm2020/Constants.mjs +9 -0
  4. package/esm2020/croeminc-croem-card-widget.mjs +5 -0
  5. package/esm2020/lib/card-widget/Add-card-widget/add-card-widget/add-card-widget.component.mjs +195 -0
  6. package/esm2020/lib/card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component.mjs +149 -0
  7. package/esm2020/lib/card-widget/Update-card-widget/update-card-widget/update-card-widget.component.mjs +267 -0
  8. package/esm2020/lib/croem-card-widget.component.mjs +77 -0
  9. package/esm2020/lib/croem-card-widget.module.mjs +48 -0
  10. package/esm2020/lib/croem-card-widget.service.mjs +62 -0
  11. package/esm2020/lib/dynamic-form-builder/dynamic-form-fields/dropdown.mjs +32 -0
  12. package/esm2020/lib/dynamic-form-builder/dynamic-form-fields/textbox.mjs +21 -0
  13. package/esm2020/lib/dynamic-form-builder/field-builder.component.mjs +24 -0
  14. package/esm2020/lib/dynamic-form-builder/interfaces/CardModeEnum.mjs +7 -0
  15. package/esm2020/lib/dynamic-form-builder/interfaces/FormFields.Interface.mjs +2 -0
  16. package/esm2020/lib/dynamic-form-builder/interfaces/InputParams.Interface.mjs +2 -0
  17. package/esm2020/lib/dynamic-form-builder/interfaces/apiResponse.Interface.mjs +2 -0
  18. package/esm2020/lib/localizations/en.mjs +16 -0
  19. package/esm2020/lib/localizations/es.mjs +16 -0
  20. package/esm2020/lib/localizations/language.interface.mjs +2 -0
  21. package/esm2020/public-api.mjs +11 -0
  22. package/fesm2015/croeminc-croem-card-widget.mjs +876 -0
  23. package/fesm2015/croeminc-croem-card-widget.mjs.map +1 -0
  24. package/fesm2020/croeminc-croem-card-widget.mjs +868 -0
  25. package/fesm2020/croeminc-croem-card-widget.mjs.map +1 -0
  26. package/index.d.ts +5 -0
  27. package/lib/card-widget/Add-card-widget/add-card-widget/add-card-widget.component.d.ts +61 -0
  28. package/lib/card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component.d.ts +43 -0
  29. package/lib/card-widget/Update-card-widget/update-card-widget/update-card-widget.component.d.ts +64 -0
  30. package/lib/croem-card-widget.component.d.ts +49 -0
  31. package/lib/croem-card-widget.module.d.ts +16 -0
  32. package/lib/croem-card-widget.service.d.ts +11 -0
  33. package/lib/dynamic-form-builder/dynamic-form-fields/dropdown.d.ts +19 -0
  34. package/lib/dynamic-form-builder/dynamic-form-fields/textbox.d.ts +12 -0
  35. package/lib/dynamic-form-builder/field-builder.component.d.ts +14 -0
  36. package/lib/dynamic-form-builder/interfaces/CardModeEnum.d.ts +5 -0
  37. package/lib/dynamic-form-builder/interfaces/FormFields.Interface.d.ts +14 -0
  38. package/lib/dynamic-form-builder/interfaces/InputParams.Interface.d.ts +17 -0
  39. package/lib/dynamic-form-builder/interfaces/apiResponse.Interface.d.ts +24 -0
  40. package/lib/localizations/en.d.ts +2 -0
  41. package/lib/localizations/es.d.ts +2 -0
  42. package/lib/localizations/language.interface.d.ts +15 -0
  43. package/package.json +48 -0
  44. package/public-api.d.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"croeminc-croem-card-widget.mjs","sources":["../../../projects/croem-card-widget/src/lib/localizations/en.ts","../../../projects/croem-card-widget/src/lib/localizations/es.ts","../../../projects/croem-card-widget/src/lib/croem-card-widget.service.ts","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/interfaces/CardModeEnum.ts","../../../projects/croem-card-widget/src/Constants.ts","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/dynamic-form-fields/textbox.ts","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/dynamic-form-fields/textbox.html","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/dynamic-form-fields/dropdown.ts","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/dynamic-form-fields/dropdown.html","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/field-builder.component.ts","../../../projects/croem-card-widget/src/lib/dynamic-form-builder/field-builder.component.html","../../../projects/croem-card-widget/src/lib/card-widget/Add-card-widget/add-card-widget/add-card-widget.component.ts","../../../projects/croem-card-widget/src/lib/card-widget/Add-card-widget/add-card-widget/add-card-widget.component.html","../../../projects/croem-card-widget/src/lib/card-widget/Update-card-widget/update-card-widget/update-card-widget.component.ts","../../../projects/croem-card-widget/src/lib/card-widget/Update-card-widget/update-card-widget/update-card-widget.component.html","../../../projects/croem-card-widget/src/lib/card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component.ts","../../../projects/croem-card-widget/src/lib/card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component.html","../../../projects/croem-card-widget/src/lib/croem-card-widget.component.ts","../../../projects/croem-card-widget/src/lib/croem-card-widget.component.html","../../../projects/croem-card-widget/src/lib/croem-card-widget.module.ts","../../../projects/croem-card-widget/src/public-api.ts","../../../projects/croem-card-widget/src/croeminc-croem-card-widget.ts"],"sourcesContent":["import { Language } from \"./language.interface\";\r\n\r\nexport const LANG_EN: Language = { \r\n CardNumber: \"Card Number\",\r\n CardHolderName: \"Card Holder Name\",\r\n ExpiryDate: \"Expiry Date\",\r\n CardType: \"Card Type\",\r\n DoYouWishTo:\"Do you wish to proceed with this request?\",\r\n RequestCancelled:\"The request has been cancelled.\",\r\n APIKeyNull:\"APIKey is NULL\",\r\n lblSave:\"Save\",\r\n CVV:\"CVV\",\r\n ValidThru:\"Valid Thru\",\r\n Proceed:\"Proceed to Pay\",\r\n TokenEmpty:\"Token is Empty\",\r\n Update:\"Update\"\r\n};\r\n","import { Language } from \"./language.interface\";\r\n\r\nexport const LANG_ES:Language = {\r\n CardNumber: \"Número de tarjeta\",\r\n CardHolderName:\"Nombre del titular de la tarjeta\",\r\n ExpiryDate: \"Fecha de caducidad\",\r\n CardType: \"Tipo de tarjeta\",\r\n RequestCancelled:\"La solicitud ha sido cancelada.\",\r\n DoYouWishTo:\"¿Desea continuar con esta solicitud?\",\r\n APIKeyNull:\"APIKey es nula\",\r\n lblSave:\"Ahorrar\",\r\n CVV:\"CVV\",\r\n ValidThru:\"Valid Thru\",\r\n Proceed:\"Proceda a pagar\",\r\n TokenEmpty:\"El token está vacío.\",\r\n Update:\"Actualizar\"\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { LANG_EN } from './localizations/en';\r\nimport { LANG_ES } from './localizations/es';\r\nimport { Language } from './localizations/language.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CroemCardWidgetService {\r\n\r\n currentLang!: Language;\r\n\r\n constructor() { }\r\n\r\n async CardPayment(data: any, language: string, apiUrl: string, encryptedString: string): Promise<any> {\r\n const queryString = `?request=${encodeURIComponent(encryptedString)}`;\r\n const fullUrl = apiUrl + queryString;\r\n if (language === 'en') {\r\n this.currentLang = LANG_EN;\r\n } else if (language === 'es') {\r\n this.currentLang = LANG_ES;\r\n }\r\n data.isSale = false;\r\n if (data.APIKey != null) {\r\n return this.apiCall(fullUrl)\r\n } else {\r\n throw new Error(this.currentLang[\"APIKeyNull\"]);\r\n }\r\n }\r\n async addUpdateCardAPICall(apiUrl: string, encryptedString: string): Promise<any> {\r\n const queryString = `?request=${encodeURIComponent(encryptedString)}`;\r\n const fullUrl = apiUrl + queryString;\r\n return this.apiCall(fullUrl)\r\n }\r\n async apiCall(fullUrl: string) {\r\n var response\r\n try {\r\n if (fullUrl.includes('GetCreditCard')) {\r\n response = await fetch(fullUrl, {\r\n method: 'GET'\r\n });\r\n }\r\n else {\r\n response = await fetch(fullUrl, {\r\n method: 'POST'\r\n });\r\n }\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! Status: ${response.status}`);\r\n }\r\n const responseText = await response.text();\r\n return JSON.parse(responseText);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n return error\r\n }\r\n }\r\n}\r\n","export enum CardMode \r\n{\r\n Add = '0', \r\n Edit = '1',\r\n Show = '2'\r\n}","export const constants = {\r\n urls: {\r\n updateDTRUrl: \"api/UIComponentApi/UpdateCreditCard\",\r\n addDTRUrl: \"api/UIComponentApi/CreateCreditCard\",\r\n paymentDTRUrl: \"api/UIComponentApi/PerformTransaction\",\r\n getCardInfoByToken: \"api/UIComponentApi/GetCreditCard\"\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Fields } from '../interfaces/FormFields.Interface';\r\n \r\n@Component({\r\n selector: 'textbox',\r\n templateUrl: `./textbox.html`\r\n})\r\nexport class TextBoxComponent {\r\n\r\n @Input() field!: Fields;\r\n @Input() form!: FormGroup;\r\n get isValid() { return this.form.controls[this.field.name].valid; }\r\n get isDirty() { return this.form.controls[this.field.name].dirty; }\r\n\r\n constructor() {\r\n }\r\n}","<div [formGroup]=\"form\">\r\n <input \r\n *ngIf=\"!field.multiline\" \r\n [attr.type]=\"field.type\"\r\n class=\"form-control\" \r\n [id]=\"field.name\" \r\n [name]=\"field.name\"\r\n [formControlName]=\"field.name\"\r\n [placeholder]=\"field.placeholder\" >\r\n\r\n <textarea *ngIf=\"field.multiline\" [formControlName]=\"field.name\" [id]=\"field.name\"\r\n rows=\"9\" class=\"form-control\" [placeholder]=\"field.placeholder\"></textarea>\r\n \r\n</div> ","import { Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Fields } from '../interfaces/FormFields.Interface';\r\n\r\n@Component({\r\n selector: 'dropdown',\r\n templateUrl: `./dropdown.html`\r\n})\r\nexport class DropDownComponent {\r\n @Input() field!: Fields;\r\n @Input() form!: FormGroup;\r\n originalOptions: { key: string; label: string }[] | undefined;\r\n\r\n ngOnInit() {\r\n this.originalOptions = this.field.options ? [...this.field.options] : undefined;\r\n }\r\n\r\n filterOptions(options: { key: string; label: string }[] | undefined, event: Event): any[] {\r\n\r\n const searchTerm = (event.target as HTMLInputElement).value;\r\n if (options) {\r\n return options.filter(opt => opt.label.toLowerCase().includes(searchTerm.toLowerCase()));\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n constructor() {\r\n\r\n }\r\n}","<div [formGroup]=\"form\">\r\n <ng-select [placeholder]=\"'Select a ' + field.label\" [formControlName]=\"field.name\" [id]=\"field.name\"\r\n [searchable]=\"false\" class=\"custom-ng-select\" [readonly]=\"field.disable\">\r\n <ng-template ng-header-tmp>\r\n <input class=\"custom-ng-select-search\" style=\"width: 100%; line-height: 24px\" type=\"text\"\r\n (input)=\"field.options = filterOptions(originalOptions, $event)\" [formControlName]=\"field.name\"\r\n placeholder=\"\" />\r\n </ng-template>\r\n\r\n <ng-option *ngFor=\"let opt of field.options\" [value]=\"opt.key\" aria-readonly=\"true\">{{opt.label}}</ng-option>\r\n </ng-select>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Fields } from './interfaces/FormFields.Interface';\r\n\r\n@Component({\r\n selector: 'field-builder',\r\n templateUrl: \"./field-builder.component.html\",\r\n \r\n})\r\nexport class FieldBuilderComponent implements OnInit {\r\n @Input() field!:Fields;\r\n @Input() form!:FormGroup;\r\n get isValid() { return this.form.controls[this.field.name].valid; }\r\n get isDirty() { return this.form.controls[this.field.name].dirty; }\r\n \r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","<div class=\"form-group row\" [formGroup]=\"form\">\r\n <label class=\"col-md-12 form-control-label\" [attr.for]=\"field.name\">\r\n {{field.label}}\r\n <strong class=\"text-danger\" *ngIf=\"field.required\">*</strong>\r\n </label>\r\n <div class=\"col-md-12\" [ngSwitch]=\"field.type\">\r\n <textbox *ngSwitchCase=\"'text'\" [field]=\"field\" [form]=\"form\"></textbox>\r\n <dropdown *ngSwitchCase=\"'dropdown'\" [field]=\"field\" [form]=\"form\"></dropdown>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, FormControl, AbstractControl } from '@angular/forms';\r\nimport * as cardValidator from \"card-validator\";\r\nimport { CroemCardWidgetService } from '../../../croem-card-widget.service';\r\nimport { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';\r\nimport { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';\r\nimport { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';\r\nimport { LANG_EN } from '../../../localizations/en';\r\nimport { LANG_ES } from '../../../localizations/es';\r\nimport { Language } from '../../../localizations/language.interface';\r\nimport { constants } from '../../../../Constants';\r\n\r\n\r\ndeclare function encryptedString(key: any, s: any): string;\r\ndeclare function initializeKey(exponent: any, modulus: any): any;\r\n\r\n@Component({\r\n selector: 'lib-add-card-widget',\r\n templateUrl: './add-card-widget.component.html',\r\n styleUrls: ['./add-card-widget.component.css']\r\n})\r\nexport class AddCardWidgetComponent {\r\n\r\n @Input() inputParamsForWidgetForAdd!: InputParamsForWidget;\r\n @Output() widgetResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() fieldResponseEmitter = new EventEmitter<{ [x: string]: AbstractControl<any, any>; }>();\r\n @Output() loader = new EventEmitter<boolean>();\r\n @Input() fields: Fields[] = [];\r\n\r\n dynamicFields: { [key: string]: [any, any[]] } = {};\r\n encryptedString!: string\r\n addCardResponse!: apiResponseInterface;\r\n showLoader: boolean = false;\r\n cardInfoResponse!: apiResponseInterface\r\n cardNumber!: string;\r\n validityDate!: string;\r\n name!: string;\r\n showInputErrorNumber: boolean = true\r\n showInputErrorDate: boolean = true\r\n showInputErrorName: boolean = true\r\n\r\n currentLang!: Language;\r\n\r\n public month!: string\r\n public year!: string\r\n public valid!: boolean\r\n public maxLength!: number;\r\n public maxExpYear!: number;\r\n cardForm!: FormGroup;\r\n form!: FormGroup;\r\n CroemCardWidgetService!: CroemCardWidgetService;\r\n\r\n constructor(private formBuilder: FormBuilder, private croemCardService: CroemCardWidgetService) {\r\n this.maxLength = 19;\r\n this.maxExpYear = 28;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n this.switchLanguage(this.inputParamsForWidgetForAdd.Culture);\r\n\r\n //---Dynamic Form creation innitializing form group(i.e cardForm) to pass onto the dynamic form builder component ------\r\n for (const field of this.fields) {\r\n const validators = [];\r\n if (field.required) {\r\n validators.push(Validators.required);\r\n }\r\n this.dynamicFields[field.name] = [field.value || null, validators];\r\n }\r\n\r\n const predefinedControls = {\r\n name: ['', [Validators.required]],\r\n cardNumber: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(19)]],\r\n validityDate: ['', [Validators.required, Validators.minLength(5)]],\r\n };\r\n this.cardForm = this.formBuilder.group({\r\n ...predefinedControls,\r\n ...this.dynamicFields\r\n });\r\n\r\n let fieldsContrls: { [key: string]: FormControl | FormGroup } = {};\r\n\r\n for (let f of this.fields) {\r\n if (f.type !== 'checkbox') {\r\n fieldsContrls[f.name] = new FormControl(f.value || '', Validators.required);\r\n } else {\r\n let opts: { [key: string]: FormControl } = {};\r\n if (f.options) {\r\n\r\n for (let opt of f.options) {\r\n opts[opt.key] = new FormControl(opt.label);\r\n }\r\n }\r\n fieldsContrls[f.name] = new FormGroup(opts);\r\n }\r\n }\r\n }\r\n //---localization To add a new property to this go localization dir and add your property insdei en.ts and es.ts ------\r\n switchLanguage(language: string) {\r\n if (language === 'en') {\r\n this.currentLang = LANG_EN;\r\n } else if (language === 'es') {\r\n this.currentLang = LANG_ES;\r\n }\r\n }\r\n\r\n createCard() {\r\n this.addCard()\r\n }\r\n\r\n async addCard() {\r\n\r\n try {\r\n this.showLoader = true;\r\n this.loader.emit(this.showLoader)\r\n\r\n const apiUrl = this.inputParamsForWidgetForAdd.DtrUrl + constants.urls.addDTRUrl;\r\n //----encryption-------\r\n var encode = this.encoding(); //--encoding parameters \r\n this.encryptedString = this.innitializeKey(encode); //--innitializing DSA key\r\n\r\n this.addCardResponse = await this.croemCardService.addUpdateCardAPICall(apiUrl, this.encryptedString); //--API Call to add card in DTR\r\n\r\n this.showLoader = false;\r\n \r\n\r\n this.fieldResponseEmitter.emit(this.cardForm.controls);\r\n this.widgetResponseEmitter.emit(this.addCardResponse);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n this.showLoader = false;\r\n this.widgetResponseEmitter.emit(this.addCardResponse)\r\n }\r\n }\r\n\r\n encoding() {\r\n return this.cardForm.value.cardNumber + \"\\\\\" +\r\n this.cardForm.value.name + \"\\\\\" +\r\n this.cardForm.value.validityDate.substring(0, 2) + \"\\\\\" +\r\n this.cardForm.value.validityDate.substring(3) + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForAdd.APIKey + \"\\\\\" +\r\n this.inputParamsForWidgetForAdd.Culture + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n (this.inputParamsForWidgetForAdd.IsSale ?? false) + \"\\\\\" +\r\n (this.inputParamsForWidgetForAdd.Amount ?? \"0\") + \"\\\\\" +\r\n (this.inputParamsForWidgetForAdd.ProductDetails ?? \"0\") + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n (this.inputParamsForWidgetForAdd.Itbms ?? \"0\") + \"\\\\\" +\r\n this.inputParamsForWidgetForAdd.Mode\r\n }\r\n innitializeKey(encode: string) {\r\n var key = initializeKey(this.inputParamsForWidgetForAdd.Keys.EncKey1, this.inputParamsForWidgetForAdd.Keys.EncKey2);\r\n return encryptedString(key, encode)\r\n }\r\n\r\n formatDate(event: Event) {\r\n let input = (event.target as HTMLInputElement).value;\r\n input = input.replace(/\\D/g, '');\r\n\r\n const month = this.formatMonth(input.substring(0, 2));\r\n const year = input.substring(2, 4);\r\n\r\n const formattedDate = month + (year ? '/' + year : '');\r\n (event.target as HTMLInputElement).value = formattedDate;\r\n\r\n this.cardForm.controls['validityDate'].setValue(formattedDate);\r\n this.validityDate = this.cardForm.controls['validityDate'].value;\r\n\r\n this.validateDate();\r\n }\r\n\r\n private formatMonth(month: string): string {\r\n const validMonth = parseInt(month, 10);\r\n return (validMonth > 1 && validMonth <= 9) ? '0' + validMonth : month;\r\n }\r\n\r\n\r\n maskCardNumber(): string {\r\n if (this.cardNumber && this.cardNumber.length > 0) {\r\n const maskedNumber = '•'.repeat(Math.max(0, this.cardNumber.length - 4)) + this.cardNumber.slice(-4);\r\n return maskedNumber.replace(/(•{4})/g, '$1 ');\r\n }\r\n else {\r\n return '•••• •••• •••• ••••';\r\n }\r\n }\r\n maskName(): string {\r\n return this.name ? this.name : 'Your Name';\r\n }\r\n maskDate() {\r\n return this.validityDate ? this.validityDate : '••/••';\r\n }\r\n\r\n validateDate() {\r\n if (!this.inputParamsForWidgetForAdd.IsSale) {\r\n this.showInputErrorDate = cardValidator.expirationDate(this.validityDate, this.maxExpYear).isValid;\r\n }\r\n else {\r\n this.showInputErrorDate = true\r\n }\r\n }\r\n validateNumber() {\r\n const valid = cardValidator.number(this.cardNumber).isValid;\r\n this.showInputErrorNumber = valid\r\n }\r\n bindNumber(event: Event) {\r\n this.cardNumber = (event.target as HTMLInputElement).value;\r\n this.validateNumber()\r\n }\r\n bindName(event: Event) {\r\n this.name = (event.target as HTMLInputElement).value;\r\n this.validateName()\r\n }\r\n restControl(controlname: string) {\r\n const control = this.cardForm.get(controlname);\r\n control!.reset();\r\n }\r\n validateName() {\r\n if (this.name.length > 4) {\r\n this.showInputErrorName = true;\r\n }\r\n else {\r\n this.showInputErrorName = false;\r\n }\r\n }\r\n}","<form class=\"container-fluid py-3\" [formGroup]=\"cardForm\" *ngIf=\"(inputParamsForWidgetForAdd.APIKey)\">\r\n <div class=\"p-0\">\r\n <div class=\"d-flex justify-content-center mb-4\">\r\n <div class=\"card\">\r\n <div class=\"card-inner\">\r\n <div class=\"front\">\r\n <!-- Top Bar: Chip & Brand Logo -->\r\n <div class=\"card-top-bar\">\r\n <div class=\"chip\"></div>\r\n <div class=\"card-brand\">\r\n <span class=\"brand-text\">SECURE CARD</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Middle Bar: Card Number -->\r\n <div class=\"card-number-display\">\r\n <span>{{maskCardNumber()}}</span>\r\n </div>\r\n\r\n <!-- Bottom Bar: Cardholder Name & Expiration Date -->\r\n <div class=\"card-bottom-bar\">\r\n <div class=\"card-holder-info\">\r\n <label class=\"card-label\">CARDHOLDER</label>\r\n <span class=\"card-value\">{{maskName()}}</span>\r\n </div>\r\n <div class=\"card-expiry-info\">\r\n <label class=\"card-label\">{{currentLang[\"ValidThru\"]}}</label>\r\n <span class=\"card-value\">{{maskDate()}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dynamic Form Fields -->\r\n <div class=\"dynamic-fields-container mb-3\">\r\n <div *ngFor=\"let field of fields\" class=\"mb-3\">\r\n <field-builder [field]=\"field\" [form]=\"cardForm\"></field-builder>\r\n </div>\r\n </div>\r\n\r\n <!-- Static Form Fields -->\r\n <div class=\"card-form-fields\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"card-number\" class=\"form-label-custom\">\r\n {{currentLang[\"CardNumber\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control-custom\" type=\"text\" id=\"card-number\"\r\n [class.inputError]=\"!showInputErrorNumber\" [placeholder]=\"currentLang['CardNumber']\"\r\n formControlName=\"cardNumber\" (input)=\"bindNumber($event)\" [maxlength]=\"maxLength\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"name\" class=\"form-label-custom\">\r\n {{currentLang[\"CardHolderName\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control-custom\" type=\"text\" id=\"name\"\r\n [placeholder]=\"currentLang['CardHolderName']\" [class.inputError]=\"!showInputErrorName\"\r\n (input)=\"bindName($event)\" formControlName=\"name\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"validity-date\" class=\"form-label-custom\">\r\n {{currentLang[\"ExpiryDate\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper date-wrapper\">\r\n <input class=\"form-control-custom\" type=\"text\" id=\"validity-date\"\r\n [class.inputError]=\"!showInputErrorDate\" placeholder=\"MM/YY\"\r\n formControlName=\"validityDate\" (input)=\"formatDate($event)\" />\r\n <span class=\"calendar-icon\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions-custom\">\r\n <button class=\"btn-submit\" type=\"submit\" [disabled]=\"!cardForm.valid\" (click)=\"createCard()\">\r\n <span class=\"btn-text\">{{currentLang[\"lblSave\"]}}</span>\r\n </button>\r\n </div>\r\n</form>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, FormControl, AbstractControl } from '@angular/forms';\r\nimport * as cardValidator from \"card-validator\";\r\nimport { CroemCardWidgetService } from '../../../croem-card-widget.service';\r\nimport { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';\r\nimport { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';\r\nimport { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';\r\nimport { LANG_EN } from '../../../localizations/en';\r\nimport { LANG_ES } from '../../../localizations/es';\r\nimport { Language } from '../../../localizations/language.interface';\r\nimport { constants } from '../../../../Constants';\r\nimport { CardMode } from '../../../dynamic-form-builder/interfaces/CardModeEnum';\r\n\r\ndeclare function encryptedString(key: any, s: any): string;\r\ndeclare function initializeKey(exponent: any, modulus: any): any;\r\n@Component({\r\n selector: 'lib-update-card-widget',\r\n templateUrl: './update-card-widget.component.html',\r\n styleUrls: ['./update-card-widget.component.css']\r\n})\r\nexport class UpdateCardWidgetComponent {\r\n\r\n @Input() inputParamsForWidgetForUpdate!: InputParamsForWidget;\r\n @Output() widgetResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() getWidgetDataResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() fieldResponseEmitter = new EventEmitter<{ [x: string]: AbstractControl<any, any>; }>();\r\n @Output() loader = new EventEmitter<boolean>();\r\n @Input() fields: Fields[] = [];\r\n\r\n dynamicFields: { [key: string]: [any, any[]] } = {};\r\n encryptedString!: string\r\n updateCardResponse!: apiResponseInterface;\r\n showLoader: boolean = false;\r\n cardInfoResponse!: apiResponseInterface\r\n cardNumber!: string;\r\n validityDate!: string;\r\n name!: string;\r\n showInputErrorDate: boolean = true\r\n showInputErrorName: boolean = true\r\n currentLang!: Language;\r\n CardMode = CardMode;\r\n public month!: string\r\n public year!: string\r\n public valid!: boolean\r\n public maxLength!: number;\r\n public maxExpYear!: number;\r\n cardForm!: FormGroup;\r\n CroemCardWidgetService!: CroemCardWidgetService;\r\n\r\n constructor(private formBuilder: FormBuilder, private croemCardService: CroemCardWidgetService) {\r\n this.maxLength = 19;\r\n this.maxExpYear = 28;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n this.switchLanguage(this.inputParamsForWidgetForUpdate.Culture);\r\n this.getCardDetails()\r\n //---Dynamic Form creation innitializing form group(i.e cardForm) to pass onto the dynamic form builder component ------\r\n for (const field of this.fields) {\r\n const validators = [];\r\n if (field.required) {\r\n validators.push(Validators.required);\r\n }\r\n this.dynamicFields[field.name] = [field.value || null, validators];\r\n }\r\n\r\n const predefinedControls = {\r\n name: ['', [Validators.required]],\r\n validityDate: ['', [Validators.required, Validators.minLength(5)]],\r\n };\r\n\r\n this.cardForm = this.formBuilder.group({\r\n ...predefinedControls,\r\n ...this.dynamicFields\r\n });\r\n\r\n let fieldsContrls: { [key: string]: FormControl | FormGroup } = {};\r\n\r\n for (let f of this.fields) {\r\n if (f.type !== 'checkbox') {\r\n fieldsContrls[f.name] = new FormControl(f.value || '', Validators.required);\r\n } else {\r\n let opts: { [key: string]: FormControl } = {};\r\n if (f.options) {\r\n\r\n for (let opt of f.options) {\r\n opts[opt.key] = new FormControl(opt.label);\r\n }\r\n }\r\n fieldsContrls[f.name] = new FormGroup(opts);\r\n }\r\n }\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n for (const field of this.fields) {\r\n const validators = [];\r\n if (field.required) {\r\n validators.push(Validators.required);\r\n }\r\n this.dynamicFields[field.name] = [field.value || null, validators];\r\n }\r\n let fieldsContrls: { [key: string]: FormControl | FormGroup } = {};\r\n\r\n for (let f of this.fields) {\r\n if (f.type !== 'checkbox') {\r\n fieldsContrls[f.name] = new FormControl(f.value || '', Validators.required);\r\n } else {\r\n let opts: { [key: string]: FormControl } = {};\r\n if (f.options) {\r\n\r\n for (let opt of f.options) {\r\n opts[opt.key] = new FormControl(opt.label);\r\n }\r\n }\r\n fieldsContrls[f.name] = new FormGroup(opts);\r\n }\r\n }\r\n\r\n }\r\n //---localization To add a new property to this go localization dir and add your property insdei en.ts and es.ts ------\r\n switchLanguage(language: string) {\r\n if (language === 'en') {\r\n this.currentLang = LANG_EN;\r\n } else if (language === 'es') {\r\n this.currentLang = LANG_ES;\r\n }\r\n }\r\n\r\n UpdateCardDetails() {\r\n this.EditCardDetails()\r\n }\r\n async getCardDetails() {\r\n this.showLoader = true;\r\n this.loader.emit(this.showLoader)\r\n try {\r\n const apiUrl = this.inputParamsForWidgetForUpdate.DtrUrl + constants.urls.getCardInfoByToken;\r\n\r\n //----encryption-------\r\n var encode = this.encodingForGet(); //--encoding parameters \r\n this.encryptedString = this.innitializeKey(encode); //--innitializing DSA key\r\n\r\n var getCardResponse = await this.croemCardService.addUpdateCardAPICall(apiUrl, this.encryptedString); //--API Call to add card in DTR\r\n this.showLoader = false;\r\n this.updateCardResponse = getCardResponse;\r\n this.updateName(\r\n getCardResponse.ResponseData.CardHolderName || getCardResponse.ResponseData.CardholderName,\r\n getCardResponse.ResponseData.ExpirationDate,\r\n getCardResponse.ResponseData.Number\r\n );\r\n this.getWidgetDataResponseEmitter.emit(this.updateCardResponse);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n this.showLoader = false;\r\n this.getWidgetDataResponseEmitter.emit(this.updateCardResponse)\r\n }\r\n }\r\n async EditCardDetails() {\r\n\r\n try {\r\n this.showLoader = true;\r\n this.loader.emit(this.showLoader)\r\n\r\n const apiUrl = this.inputParamsForWidgetForUpdate.DtrUrl + constants.urls.updateDTRUrl;\r\n\r\n //----encryption-------\r\n var encode = this.encoding(); //--encoding parameters \r\n this.encryptedString = this.innitializeKey(encode); //--innitializing DSA key\r\n\r\n this.updateCardResponse = await this.croemCardService.addUpdateCardAPICall(apiUrl, this.encryptedString); //--API Call to add card in DTR\r\n\r\n this.showLoader = false;\r\n\r\n this.fieldResponseEmitter.emit(this.cardForm.controls);\r\n this.widgetResponseEmitter.emit(this.updateCardResponse);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n this.showLoader = false;\r\n this.widgetResponseEmitter.emit(this.updateCardResponse)\r\n }\r\n }\r\n updateName(newName: string, newDate: string, newNumber: string = '') {\r\n if (newDate.length === 4) {\r\n newDate = newDate.substring(0, 2) + '/' + newDate.substring(2);\r\n }\r\n this.cardForm.patchValue({\r\n name: newName,\r\n validityDate: newDate\r\n });\r\n this.name = newName;\r\n this.validityDate = newDate;\r\n if (newNumber) {\r\n this.cardNumber = newNumber;\r\n }\r\n }\r\n\r\n maskCardNumber(): string {\r\n if (this.cardNumber && this.cardNumber.length > 0) {\r\n const maskedNumber = '•'.repeat(Math.max(0, this.cardNumber.length - 4)) + this.cardNumber.slice(-4);\r\n return maskedNumber.replace(/(•{4})/g, '$1 ');\r\n }\r\n else {\r\n return '•••• •••• •••• ••••';\r\n }\r\n }\r\n encodingForGet() {\r\n return \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Token + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.APIKey + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Culture + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.IsSale + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Amount + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.ProductDetails + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Itbms + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Mode\r\n }\r\n encoding() {\r\n return \"\" + \"\\\\\" +\r\n this.cardForm.value.name + \"\\\\\" +\r\n this.cardForm.value.validityDate.substring(0, 2) + \"\\\\\" +\r\n this.cardForm.value.validityDate.substring(3) + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Token + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.APIKey + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Culture + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n (this.inputParamsForWidgetForUpdate.IsSale ?? false) + \"\\\\\" +\r\n (this.inputParamsForWidgetForUpdate.Amount ?? \"0\") + \"\\\\\" +\r\n (this.inputParamsForWidgetForUpdate.ProductDetails ?? \"0\") + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n (this.inputParamsForWidgetForUpdate.Itbms ?? \"0\") + \"\\\\\" +\r\n this.inputParamsForWidgetForUpdate.Mode\r\n }\r\n innitializeKey(encode: string) {\r\n var key = initializeKey(this.inputParamsForWidgetForUpdate.Keys.EncKey1, this.inputParamsForWidgetForUpdate.Keys.EncKey2);\r\n return encryptedString(key, encode)\r\n }\r\n\r\n formatDate(event: Event) {\r\n let input = (event.target as HTMLInputElement).value;\r\n input = input.replace(/\\D/g, '');\r\n\r\n const month = this.formatMonth(input.substring(0, 2));\r\n const year = input.substring(2, 4);\r\n\r\n const formattedDate = month + (year ? '/' + year : '');\r\n (event.target as HTMLInputElement).value = formattedDate;\r\n\r\n this.cardForm.controls['validityDate'].setValue(formattedDate);\r\n this.validityDate = this.cardForm.controls['validityDate'].value;\r\n this.validateDate();\r\n }\r\n\r\n private formatMonth(month: string): string {\r\n const validMonth = parseInt(month, 10);\r\n return (validMonth > 1 && validMonth <= 9) ? '0' + validMonth : month;\r\n }\r\n\r\n maskName(): string {\r\n return this.name ? this.name : 'Your Name';\r\n }\r\n maskDate() {\r\n return this.validityDate ? this.validityDate : '••/••';\r\n }\r\n\r\n validateDate() {\r\n if (!this.inputParamsForWidgetForUpdate.IsSale) {\r\n this.showInputErrorDate = cardValidator.expirationDate(this.validityDate, this.maxExpYear).isValid;\r\n }\r\n else {\r\n this.showInputErrorDate = true\r\n }\r\n }\r\n\r\n bindName(event: Event) {\r\n this.name = (event.target as HTMLInputElement).value;\r\n this.validateName()\r\n }\r\n bindDate(event: Event) {\r\n this.validityDate = (event.target as HTMLInputElement).value;;\r\n }\r\n validateName() {\r\n if (this.name.length > 4) {\r\n this.showInputErrorName = true;\r\n }\r\n else {\r\n this.showInputErrorName = false;\r\n }\r\n }\r\n}\r\n","<form class=\"container-fluid py-3\" [formGroup]=\"cardForm\" *ngIf=\"(inputParamsForWidgetForUpdate.APIKey)\">\r\n <div class=\"p-0\">\r\n <div class=\"d-flex justify-content-center mb-4\">\r\n <div class=\"card\">\r\n <div class=\"card-inner\">\r\n <div class=\"front\">\r\n <!-- Top Bar: Chip & Brand Logo -->\r\n <div class=\"card-top-bar\">\r\n <div class=\"chip\"></div>\r\n <div class=\"card-brand\">\r\n <span class=\"brand-text\">SECURE CARD</span>\r\n </div>\r\n </div>\r\n \r\n <!-- Middle Bar: Card Number (Masked) -->\r\n <div class=\"card-number-display\">\r\n <span>{{maskCardNumber()}}</span>\r\n </div>\r\n \r\n <!-- Bottom Bar: Cardholder Name & Expiration Date -->\r\n <div class=\"card-bottom-bar\">\r\n <div class=\"card-holder-info\">\r\n <label class=\"card-label\">CARDHOLDER</label>\r\n <span class=\"card-value\">{{maskName()}}</span>\r\n </div>\r\n <div class=\"card-expiry-info\">\r\n <label class=\"card-label\">{{currentLang[\"ValidThru\"]}}</label>\r\n <span class=\"card-value\">{{maskDate()}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dynamic Form Fields -->\r\n <div class=\"dynamic-fields-container mb-3\">\r\n <div *ngFor=\"let field of fields\" class=\"mb-3\">\r\n <field-builder [field]=\"field\" [form]=\"cardForm\"></field-builder>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Static Form Fields -->\r\n <div class=\"card-form-fields\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"name\" class=\"form-label-custom\">\r\n {{currentLang[\"CardHolderName\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control-custom\" type=\"text\" id=\"name\" [placeholder]=\"currentLang['CardHolderName']\"\r\n [class.inputError]=\"!showInputErrorName\" (input)=\"bindName($event)\" formControlName=\"name\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col-6\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"validity-date\" class=\"form-label-custom\">\r\n {{currentLang[\"ExpiryDate\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper date-wrapper\">\r\n <input class=\"form-control-custom\" type=\"text\" id=\"validity-date\"\r\n [class.inputError]=\"!showInputErrorDate\" placeholder=\"MM/YY\"\r\n formControlName=\"validityDate\" (input)=\"formatDate($event)\" />\r\n <span class=\"calendar-icon\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-actions-custom\">\r\n <button class=\"btn-submit\" *ngIf=\"(inputParamsForWidgetForUpdate.Mode==CardMode.Edit)\" type=\"submit\" [disabled]=\"!cardForm.valid\"\r\n (click)=\"UpdateCardDetails()\">\r\n <span class=\"btn-text\">{{currentLang[\"Update\"]}}</span>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport * as cardValidator from \"card-validator\";\r\nimport { CroemCardWidgetService } from '../../../croem-card-widget.service';\r\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';\r\nimport { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';\r\nimport { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';\r\nimport { LANG_EN } from '../../../localizations/en';\r\nimport { LANG_ES } from '../../../localizations/es';\r\nimport { Language } from '../../../localizations/language.interface';\r\nimport { constants } from '../../../../Constants';\r\n\r\ndeclare function encryptedString(key: any, s: any): string;\r\ndeclare function initializeKey(exponent: any, modulus: any): any;\r\n@Component({\r\n selector: 'lib-payment-card-widget',\r\n templateUrl: './payment-card-widget.component.html',\r\n styleUrls: ['./payment-card-widget.component.css']\r\n})\r\nexport class PaymentCardWidgetComponent {\r\n @Input() inputParamsForWidgetForPayment!: InputParamsForWidget;\r\n @Output() widgetResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() fieldResponseEmitter = new EventEmitter<{ [x: string]: AbstractControl<any, any>; }>();\r\n @Output() loader = new EventEmitter<boolean>();\r\n @Output() HandleError = new EventEmitter<string>();\r\n @Input() fields: Fields[] = [];\r\n\r\n paidCardResponse!: apiResponseInterface;\r\n CroemCardWidgetService!: CroemCardWidgetService;\r\n cardForm!: FormGroup;\r\n dynamicFields: { [key: string]: [any, any[]] } = {};\r\n currentLang!: Language;\r\n\r\n encryptedString!: string\r\n showLoader!: boolean;\r\n showCVVPrepend: boolean = false;\r\n cvv!: string;\r\n showInputError: boolean = true\r\n\r\n constructor(private formBuilder: FormBuilder, private croemCardService: CroemCardWidgetService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.switchLanguage(this.inputParamsForWidgetForPayment.Culture);\r\n\r\n //---Dynamic Form creation innitializing form group(i.e cardForm) to pass onto the dynamic form builder component ------\r\n for (const field of this.fields) {\r\n const validators = [];\r\n if (field.required) {\r\n validators.push(Validators.required);\r\n }\r\n this.dynamicFields[field.name] = [field.value || null, validators];\r\n }\r\n\r\n const predefinedControls = {\r\n cvv: ['', [Validators.required, Validators.maxLength(4)]]\r\n };\r\n\r\n this.cardForm = this.formBuilder.group({\r\n ...predefinedControls,\r\n ...this.dynamicFields\r\n });\r\n\r\n let fieldsContrls: { [key: string]: FormControl | FormGroup } = {};\r\n\r\n for (let f of this.fields) {\r\n if (f.type !== 'checkbox') {\r\n fieldsContrls[f.name] = new FormControl(f.value || '', Validators.required);\r\n } else {\r\n let opts: { [key: string]: FormControl } = {};\r\n if (f.options) {\r\n\r\n for (let opt of f.options) {\r\n opts[opt.key] = new FormControl(opt.label);\r\n }\r\n }\r\n fieldsContrls[f.name] = new FormGroup(opts);\r\n }\r\n }\r\n }\r\n\r\n makePayment() {\r\n\r\n this.makeTransactionWithToken()\r\n }\r\n\r\n switchLanguage(language: string) {\r\n if (language === 'en') {\r\n this.currentLang = LANG_EN;\r\n } else if (language === 'es') {\r\n this.currentLang = LANG_ES;\r\n }\r\n }\r\n\r\n async makeTransactionWithToken() {\r\n\r\n try {\r\n this.showLoader = true;\r\n this.loader.emit(this.showLoader)\r\n const apiUrl = this.inputParamsForWidgetForPayment.DtrUrl + constants.urls.paymentDTRUrl;\r\n\r\n\r\n //----encryption-------\r\n var encode = this.encoding(); //--encoding parameters \r\n this.encryptedString = this.innitializeKey(encode); //--innitializing DSA key\r\n //-----request-------- \r\n this.paidCardResponse = await this.croemCardService.CardPayment(this.inputParamsForWidgetForPayment, this.inputParamsForWidgetForPayment.Culture, apiUrl, this.encryptedString); //--API Call to make sale through cardToken in DTR\r\n\r\n\r\n this.showLoader = false;\r\n\r\n this.fieldResponseEmitter.emit(this.cardForm.controls);//emmiting controls\r\n this.widgetResponseEmitter.emit(this.paidCardResponse); // emitting response\r\n\r\n }\r\n catch (error) {\r\n console.log(error);\r\n this.showLoader = false;\r\n this.widgetResponseEmitter.emit(this.paidCardResponse)\r\n }\r\n }\r\n\r\n encoding() {\r\n return \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.Token + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.APIKey + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.Culture + \"\\\\\" +\r\n this.cardForm.value.cvv + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.IsSale + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.Amount + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.ProductDetails + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n \"\" + \"\\\\\" +\r\n this.inputParamsForWidgetForPayment.Itbms + \"\\\\\" +\r\n \"\"\r\n }\r\n innitializeKey(encode: string) {\r\n var key = initializeKey(this.inputParamsForWidgetForPayment.Keys.EncKey1, this.inputParamsForWidgetForPayment.Keys.EncKey2);\r\n return encryptedString(key, encode)\r\n }\r\n\r\n bindCVV(event: Event) {\r\n const inputElement = event.target as HTMLInputElement;\r\n const numericValue = inputElement.value.replace(/\\D/g, ''); // Remove non-numeric characters\r\n this.cvv = numericValue; // Update form control value\r\n inputElement.value = numericValue; // Update input value to remove non-numeric characters\r\n this.validateCvv()\r\n }\r\n validateCvv() {\r\n this.showCVVPrepend = false\r\n if (cardValidator.cvv(this.cvv, 4).isValid || cardValidator.cvv(this.cvv).isValid) {\r\n this.showInputError = true\r\n }\r\n else {\r\n this.showInputError = false\r\n }\r\n if (this.cvv) {\r\n this.showCVVPrepend = true\r\n }\r\n }\r\n}\r\n","<form class=\"container-fluid py-3\" [formGroup]=\"cardForm\" *ngIf=\"(inputParamsForWidgetForPayment.APIKey)\">\r\n <div class=\"p-0\">\r\n <!-- Dynamic Form Fields -->\r\n <div class=\"dynamic-fields-container mb-3\">\r\n <div *ngFor=\"let field of fields\" class=\"mb-3\">\r\n <field-builder [field]=\"field\" [form]=\"cardForm\"></field-builder>\r\n </div>\r\n </div>\r\n\r\n <!-- CVV and Proceed Fields -->\r\n <div class=\"payment-fields-custom\">\r\n <div class=\"row align-items-end\">\r\n <div class=\"col-12 mb-3 mb-md-0\">\r\n <div class=\"form-group-custom\">\r\n <label for=\"cvv\" class=\"form-label-custom\">\r\n {{currentLang[\"CVV\"]}} <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"input-wrapper cvv-wrapper\">\r\n <input class=\"form-control-custom\" type=\"password\" id=\"cvv\" [class.inputError]=\"!showInputError\"\r\n placeholder=\"CVV\" pattern=\"[0-9]*\" formControlName=\"cvv\" (input)=\"bindCVV($event)\" minlength=\"3\"\r\n maxlength=\"4\" />\r\n <span *ngIf=\"!showCVVPrepend\" class=\"cvv-icon\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12\">\r\n <button class=\"btn-submit-custom w-100 py-3\" type=\"submit\" [disabled]=\"!cardForm.valid\" (click)=\"makePayment()\">\r\n <span class=\"btn-text\">{{currentLang[\"Proceed\"]}}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, AbstractControl } from '@angular/forms';\r\nimport { LANG_EN } from './localizations/en'\r\nimport { LANG_ES } from './localizations/es'\r\nimport { Fields } from './dynamic-form-builder/interfaces/FormFields.Interface';\r\nimport { InputParamsForWidget } from './dynamic-form-builder/interfaces/InputParams.Interface';\r\nimport { apiResponseInterface } from './dynamic-form-builder/interfaces/apiResponse.Interface';\r\nimport { Language } from './localizations/language.interface';\r\nimport { CardMode } from './dynamic-form-builder/interfaces/CardModeEnum';\r\n@Component({\r\n selector: 'lib-croem-card-widget',\r\n templateUrl: \"./croem-card-widget.component.html\",\r\n styleUrls: [\"./croem-card-widget.component.css\"],\r\n\r\n})\r\nexport class CroemCardWidgetComponent {\r\n @Input() inputParamsForWidget!: InputParamsForWidget;\r\n @Output() widgetResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() getWidgetDataResponseEmitter = new EventEmitter<apiResponseInterface>();\r\n @Output() fieldResponseEmitter = new EventEmitter<{ [x: string]: AbstractControl<any, any>; }>();\r\n @Output() HandleError = new EventEmitter<string>();\r\n @Output() loader = new EventEmitter<boolean>();\r\n @Input() fields: Fields[] = [];\r\n\r\n //-------------new updated-code---------------------//\r\n handleError(data:string){\r\n this.HandleError.emit(data);\r\n }\r\n handleApiResponse(data: apiResponseInterface): void {\r\n this.widgetResponseEmitter.emit(data);\r\n }\r\n getFormFields(data: { [x: string]: AbstractControl<any, any>; }) {\r\n this.fieldResponseEmitter.emit(data);\r\n } \r\n getUpdateApiResponse(data: apiResponseInterface): void {\r\n this.getWidgetDataResponseEmitter.emit(data);\r\n }\r\n showloader(loader:boolean):void{\r\n this.loader.emit(loader)\r\n }\r\n //==================================================//\r\n encryptedString!: string\r\n isSale!: boolean\r\n showLoader: boolean = false;\r\n cardInfoResponse!: apiResponseInterface\r\n cardNumber!: string;\r\n cvv!: string;\r\n validityDate!: string;\r\n name!: string;\r\n\r\n currentLang!: Language;\r\n\r\n public month!: string\r\n public year!: string\r\n public valid!: boolean\r\n public maxLength!: number;\r\n public maxCvvLength!: number;\r\n public maxExpYear!: number;\r\n cardForm!: FormGroup;\r\n form!: FormGroup;\r\n updateShow!:boolean\r\n constructor() {\r\n\r\n }\r\n ngOnInit() {\r\n if(((this.inputParamsForWidget.Mode==CardMode.Edit) || (this.inputParamsForWidget.Mode==CardMode.Show)) && (!this.inputParamsForWidget.IsSale)){\r\n this.updateShow=true\r\n }\r\n this.switchLanguage(this.inputParamsForWidget.Culture);\r\n if (!this.inputParamsForWidget.APIKey) {\r\n this.HandleError.emit(\"ApiKey404\");\r\n }\r\n }\r\n getFields() {\r\n return this.fields;\r\n }\r\n\r\n switchLanguage(language: string) {\r\n if (language === 'en') {\r\n this.currentLang = LANG_EN;\r\n } else if (language === 'es') {\r\n this.currentLang = LANG_ES;\r\n }\r\n }\r\n}\r\n","<lib-add-card-widget *ngIf=\"(this.inputParamsForWidget.APIKey)&&(inputParamsForWidget.Mode=='0')\"\r\n [inputParamsForWidgetForAdd]=\"inputParamsForWidget\" [fields]=\"getFields()\" (loader)=showloader($event)\r\n (widgetResponseEmitter)=\"handleApiResponse($event)\"\r\n (fieldResponseEmitter)=\"getFormFields($event)\"></lib-add-card-widget>\r\n\r\n\r\n<lib-payment-card-widget\r\n *ngIf=\"(this.inputParamsForWidget.APIKey)&&(inputParamsForWidget.Token)&&(inputParamsForWidget.IsSale)\" (HandleError)=\"handleError($event)\"\r\n [inputParamsForWidgetForPayment]=\"inputParamsForWidget\" [fields]=\"getFields()\"\r\n (widgetResponseEmitter)=\"handleApiResponse($event)\" (loader)=showloader($event)\r\n (fieldResponseEmitter)=\"getFormFields($event)\"></lib-payment-card-widget>\r\n\r\n\r\n<lib-update-card-widget\r\n *ngIf=\"updateShow\"\r\n [inputParamsForWidgetForUpdate]=\"inputParamsForWidget\" [fields]=\"getFields()\" (loader)=showloader($event)\r\n (widgetResponseEmitter)=\"handleApiResponse($event)\" (getWidgetDataResponseEmitter)=\"getUpdateApiResponse($event)\"\r\n (fieldResponseEmitter)=\"getFormFields($event)\"></lib-update-card-widget>\r\n ","import { NgModule } from '@angular/core';\r\nimport { CroemCardWidgetComponent } from './croem-card-widget.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FieldBuilderComponent } from './dynamic-form-builder/field-builder.component';\r\nimport { CroemCardWidgetService } from './croem-card-widget.service';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { TextBoxComponent } from './dynamic-form-builder/dynamic-form-fields/textbox';\r\nimport { DropDownComponent } from './dynamic-form-builder/dynamic-form-fields/dropdown';\r\nimport { AddCardWidgetComponent } from './card-widget/Add-card-widget/add-card-widget/add-card-widget.component';\r\nimport { UpdateCardWidgetComponent } from './card-widget/Update-card-widget/update-card-widget/update-card-widget.component';\r\nimport { PaymentCardWidgetComponent } from './card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n CroemCardWidgetComponent,\r\n FieldBuilderComponent,\r\n FieldBuilderComponent,\r\n TextBoxComponent,\r\n DropDownComponent,\r\n AddCardWidgetComponent,\r\n UpdateCardWidgetComponent,\r\n PaymentCardWidgetComponent,\r\n \r\n ],\r\n providers:[CroemCardWidgetService],\r\n imports: [\r\n FormsModule, ReactiveFormsModule,CommonModule, NgSelectModule \r\n\r\n ],\r\n exports: [\r\n CroemCardWidgetComponent\r\n ]\r\n})\r\nexport class CroemCardWidgetModule { }\r\n","/*\r\n * Public API Surface of croem-card-widget\r\n */\r\n\r\nexport * from './lib/croem-card-widget.service';\r\nexport * from './lib/croem-card-widget.component';\r\nexport * from './lib/croem-card-widget.module';\r\nexport * from './lib/dynamic-form-builder/interfaces/InputParams.Interface'\r\nexport * from './lib/dynamic-form-builder/interfaces/apiResponse.Interface'\r\nexport * from './lib/dynamic-form-builder/interfaces/FormFields.Interface'\r\nexport * from './Constants'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i3.TextBoxComponent","i4.DropDownComponent","i2.CroemCardWidgetService","i4.FieldBuilderComponent","i1","i2.AddCardWidgetComponent","i3.UpdateCardWidgetComponent","i4.PaymentCardWidgetComponent"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@croeminc/croem-card-widget" />
5
+ export * from './public-api';
@@ -0,0 +1,61 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';
3
+ import { CroemCardWidgetService } from '../../../croem-card-widget.service';
4
+ import { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';
5
+ import { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';
6
+ import { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';
7
+ import { Language } from '../../../localizations/language.interface';
8
+ import * as i0 from "@angular/core";
9
+ export declare class AddCardWidgetComponent {
10
+ private formBuilder;
11
+ private croemCardService;
12
+ inputParamsForWidgetForAdd: InputParamsForWidget;
13
+ widgetResponseEmitter: EventEmitter<apiResponseInterface>;
14
+ fieldResponseEmitter: EventEmitter<{
15
+ [x: string]: AbstractControl<any, any>;
16
+ }>;
17
+ loader: EventEmitter<boolean>;
18
+ fields: Fields[];
19
+ dynamicFields: {
20
+ [key: string]: [any, any[]];
21
+ };
22
+ encryptedString: string;
23
+ addCardResponse: apiResponseInterface;
24
+ showLoader: boolean;
25
+ cardInfoResponse: apiResponseInterface;
26
+ cardNumber: string;
27
+ validityDate: string;
28
+ name: string;
29
+ showInputErrorNumber: boolean;
30
+ showInputErrorDate: boolean;
31
+ showInputErrorName: boolean;
32
+ currentLang: Language;
33
+ month: string;
34
+ year: string;
35
+ valid: boolean;
36
+ maxLength: number;
37
+ maxExpYear: number;
38
+ cardForm: FormGroup;
39
+ form: FormGroup;
40
+ CroemCardWidgetService: CroemCardWidgetService;
41
+ constructor(formBuilder: FormBuilder, croemCardService: CroemCardWidgetService);
42
+ ngOnInit(): void;
43
+ switchLanguage(language: string): void;
44
+ createCard(): void;
45
+ addCard(): Promise<void>;
46
+ encoding(): string;
47
+ innitializeKey(encode: string): string;
48
+ formatDate(event: Event): void;
49
+ private formatMonth;
50
+ maskCardNumber(): string;
51
+ maskName(): string;
52
+ maskDate(): string;
53
+ validateDate(): void;
54
+ validateNumber(): void;
55
+ bindNumber(event: Event): void;
56
+ bindName(event: Event): void;
57
+ restControl(controlname: string): void;
58
+ validateName(): void;
59
+ static ɵfac: i0.ɵɵFactoryDeclaration<AddCardWidgetComponent, never>;
60
+ static ɵcmp: i0.ɵɵComponentDeclaration<AddCardWidgetComponent, "lib-add-card-widget", never, { "inputParamsForWidgetForAdd": "inputParamsForWidgetForAdd"; "fields": "fields"; }, { "widgetResponseEmitter": "widgetResponseEmitter"; "fieldResponseEmitter": "fieldResponseEmitter"; "loader": "loader"; }, never, never, false, never>;
61
+ }
@@ -0,0 +1,43 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { CroemCardWidgetService } from '../../../croem-card-widget.service';
3
+ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
4
+ import { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';
5
+ import { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';
6
+ import { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';
7
+ import { Language } from '../../../localizations/language.interface';
8
+ import * as i0 from "@angular/core";
9
+ export declare class PaymentCardWidgetComponent {
10
+ private formBuilder;
11
+ private croemCardService;
12
+ inputParamsForWidgetForPayment: InputParamsForWidget;
13
+ widgetResponseEmitter: EventEmitter<apiResponseInterface>;
14
+ fieldResponseEmitter: EventEmitter<{
15
+ [x: string]: AbstractControl<any, any>;
16
+ }>;
17
+ loader: EventEmitter<boolean>;
18
+ HandleError: EventEmitter<string>;
19
+ fields: Fields[];
20
+ paidCardResponse: apiResponseInterface;
21
+ CroemCardWidgetService: CroemCardWidgetService;
22
+ cardForm: FormGroup;
23
+ dynamicFields: {
24
+ [key: string]: [any, any[]];
25
+ };
26
+ currentLang: Language;
27
+ encryptedString: string;
28
+ showLoader: boolean;
29
+ showCVVPrepend: boolean;
30
+ cvv: string;
31
+ showInputError: boolean;
32
+ constructor(formBuilder: FormBuilder, croemCardService: CroemCardWidgetService);
33
+ ngOnInit(): void;
34
+ makePayment(): void;
35
+ switchLanguage(language: string): void;
36
+ makeTransactionWithToken(): Promise<void>;
37
+ encoding(): string;
38
+ innitializeKey(encode: string): string;
39
+ bindCVV(event: Event): void;
40
+ validateCvv(): void;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<PaymentCardWidgetComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<PaymentCardWidgetComponent, "lib-payment-card-widget", never, { "inputParamsForWidgetForPayment": "inputParamsForWidgetForPayment"; "fields": "fields"; }, { "widgetResponseEmitter": "widgetResponseEmitter"; "fieldResponseEmitter": "fieldResponseEmitter"; "loader": "loader"; "HandleError": "HandleError"; }, never, never, false, never>;
43
+ }
@@ -0,0 +1,64 @@
1
+ import { EventEmitter, SimpleChanges } from '@angular/core';
2
+ import { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';
3
+ import { CroemCardWidgetService } from '../../../croem-card-widget.service';
4
+ import { Fields } from '../../../dynamic-form-builder/interfaces/FormFields.Interface';
5
+ import { InputParamsForWidget } from '../../../dynamic-form-builder/interfaces/InputParams.Interface';
6
+ import { apiResponseInterface } from '../../../dynamic-form-builder/interfaces/apiResponse.Interface';
7
+ import { Language } from '../../../localizations/language.interface';
8
+ import { CardMode } from '../../../dynamic-form-builder/interfaces/CardModeEnum';
9
+ import * as i0 from "@angular/core";
10
+ export declare class UpdateCardWidgetComponent {
11
+ private formBuilder;
12
+ private croemCardService;
13
+ inputParamsForWidgetForUpdate: InputParamsForWidget;
14
+ widgetResponseEmitter: EventEmitter<apiResponseInterface>;
15
+ getWidgetDataResponseEmitter: EventEmitter<apiResponseInterface>;
16
+ fieldResponseEmitter: EventEmitter<{
17
+ [x: string]: AbstractControl<any, any>;
18
+ }>;
19
+ loader: EventEmitter<boolean>;
20
+ fields: Fields[];
21
+ dynamicFields: {
22
+ [key: string]: [any, any[]];
23
+ };
24
+ encryptedString: string;
25
+ updateCardResponse: apiResponseInterface;
26
+ showLoader: boolean;
27
+ cardInfoResponse: apiResponseInterface;
28
+ cardNumber: string;
29
+ validityDate: string;
30
+ name: string;
31
+ showInputErrorDate: boolean;
32
+ showInputErrorName: boolean;
33
+ currentLang: Language;
34
+ CardMode: typeof CardMode;
35
+ month: string;
36
+ year: string;
37
+ valid: boolean;
38
+ maxLength: number;
39
+ maxExpYear: number;
40
+ cardForm: FormGroup;
41
+ CroemCardWidgetService: CroemCardWidgetService;
42
+ constructor(formBuilder: FormBuilder, croemCardService: CroemCardWidgetService);
43
+ ngOnInit(): void;
44
+ ngOnChanges(changes: SimpleChanges): void;
45
+ switchLanguage(language: string): void;
46
+ UpdateCardDetails(): void;
47
+ getCardDetails(): Promise<void>;
48
+ EditCardDetails(): Promise<void>;
49
+ updateName(newName: string, newDate: string, newNumber?: string): void;
50
+ maskCardNumber(): string;
51
+ encodingForGet(): string;
52
+ encoding(): string;
53
+ innitializeKey(encode: string): string;
54
+ formatDate(event: Event): void;
55
+ private formatMonth;
56
+ maskName(): string;
57
+ maskDate(): string;
58
+ validateDate(): void;
59
+ bindName(event: Event): void;
60
+ bindDate(event: Event): void;
61
+ validateName(): void;
62
+ static ɵfac: i0.ɵɵFactoryDeclaration<UpdateCardWidgetComponent, never>;
63
+ static ɵcmp: i0.ɵɵComponentDeclaration<UpdateCardWidgetComponent, "lib-update-card-widget", never, { "inputParamsForWidgetForUpdate": "inputParamsForWidgetForUpdate"; "fields": "fields"; }, { "widgetResponseEmitter": "widgetResponseEmitter"; "getWidgetDataResponseEmitter": "getWidgetDataResponseEmitter"; "fieldResponseEmitter": "fieldResponseEmitter"; "loader": "loader"; }, never, never, false, never>;
64
+ }
@@ -0,0 +1,49 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { FormGroup, AbstractControl } from '@angular/forms';
3
+ import { Fields } from './dynamic-form-builder/interfaces/FormFields.Interface';
4
+ import { InputParamsForWidget } from './dynamic-form-builder/interfaces/InputParams.Interface';
5
+ import { apiResponseInterface } from './dynamic-form-builder/interfaces/apiResponse.Interface';
6
+ import { Language } from './localizations/language.interface';
7
+ import * as i0 from "@angular/core";
8
+ export declare class CroemCardWidgetComponent {
9
+ inputParamsForWidget: InputParamsForWidget;
10
+ widgetResponseEmitter: EventEmitter<apiResponseInterface>;
11
+ getWidgetDataResponseEmitter: EventEmitter<apiResponseInterface>;
12
+ fieldResponseEmitter: EventEmitter<{
13
+ [x: string]: AbstractControl<any, any>;
14
+ }>;
15
+ HandleError: EventEmitter<string>;
16
+ loader: EventEmitter<boolean>;
17
+ fields: Fields[];
18
+ handleError(data: string): void;
19
+ handleApiResponse(data: apiResponseInterface): void;
20
+ getFormFields(data: {
21
+ [x: string]: AbstractControl<any, any>;
22
+ }): void;
23
+ getUpdateApiResponse(data: apiResponseInterface): void;
24
+ showloader(loader: boolean): void;
25
+ encryptedString: string;
26
+ isSale: boolean;
27
+ showLoader: boolean;
28
+ cardInfoResponse: apiResponseInterface;
29
+ cardNumber: string;
30
+ cvv: string;
31
+ validityDate: string;
32
+ name: string;
33
+ currentLang: Language;
34
+ month: string;
35
+ year: string;
36
+ valid: boolean;
37
+ maxLength: number;
38
+ maxCvvLength: number;
39
+ maxExpYear: number;
40
+ cardForm: FormGroup;
41
+ form: FormGroup;
42
+ updateShow: boolean;
43
+ constructor();
44
+ ngOnInit(): void;
45
+ getFields(): Fields[];
46
+ switchLanguage(language: string): void;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<CroemCardWidgetComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<CroemCardWidgetComponent, "lib-croem-card-widget", never, { "inputParamsForWidget": "inputParamsForWidget"; "fields": "fields"; }, { "widgetResponseEmitter": "widgetResponseEmitter"; "getWidgetDataResponseEmitter": "getWidgetDataResponseEmitter"; "fieldResponseEmitter": "fieldResponseEmitter"; "HandleError": "HandleError"; "loader": "loader"; }, never, never, false, never>;
49
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./croem-card-widget.component";
3
+ import * as i2 from "./dynamic-form-builder/field-builder.component";
4
+ import * as i3 from "./dynamic-form-builder/dynamic-form-fields/textbox";
5
+ import * as i4 from "./dynamic-form-builder/dynamic-form-fields/dropdown";
6
+ import * as i5 from "./card-widget/Add-card-widget/add-card-widget/add-card-widget.component";
7
+ import * as i6 from "./card-widget/Update-card-widget/update-card-widget/update-card-widget.component";
8
+ import * as i7 from "./card-widget/Pay-card-widget/payment-card-widget/payment-card-widget.component";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "@angular/common";
11
+ import * as i10 from "@ng-select/ng-select";
12
+ export declare class CroemCardWidgetModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<CroemCardWidgetModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CroemCardWidgetModule, [typeof i1.CroemCardWidgetComponent, typeof i2.FieldBuilderComponent, typeof i2.FieldBuilderComponent, typeof i3.TextBoxComponent, typeof i4.DropDownComponent, typeof i5.AddCardWidgetComponent, typeof i6.UpdateCardWidgetComponent, typeof i7.PaymentCardWidgetComponent], [typeof i8.FormsModule, typeof i8.ReactiveFormsModule, typeof i9.CommonModule, typeof i10.NgSelectModule], [typeof i1.CroemCardWidgetComponent]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<CroemCardWidgetModule>;
16
+ }
@@ -0,0 +1,11 @@
1
+ import { Language } from './localizations/language.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CroemCardWidgetService {
4
+ currentLang: Language;
5
+ constructor();
6
+ CardPayment(data: any, language: string, apiUrl: string, encryptedString: string): Promise<any>;
7
+ addUpdateCardAPICall(apiUrl: string, encryptedString: string): Promise<any>;
8
+ apiCall(fullUrl: string): Promise<any>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<CroemCardWidgetService, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<CroemCardWidgetService>;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { FormGroup } from '@angular/forms';
2
+ import { Fields } from '../interfaces/FormFields.Interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DropDownComponent {
5
+ field: Fields;
6
+ form: FormGroup;
7
+ originalOptions: {
8
+ key: string;
9
+ label: string;
10
+ }[] | undefined;
11
+ ngOnInit(): void;
12
+ filterOptions(options: {
13
+ key: string;
14
+ label: string;
15
+ }[] | undefined, event: Event): any[];
16
+ constructor();
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropDownComponent, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropDownComponent, "dropdown", never, { "field": "field"; "form": "form"; }, {}, never, never, false, never>;
19
+ }
@@ -0,0 +1,12 @@
1
+ import { FormGroup } from '@angular/forms';
2
+ import { Fields } from '../interfaces/FormFields.Interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class TextBoxComponent {
5
+ field: Fields;
6
+ form: FormGroup;
7
+ get isValid(): boolean;
8
+ get isDirty(): boolean;
9
+ constructor();
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextBoxComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextBoxComponent, "textbox", never, { "field": "field"; "form": "form"; }, {}, never, never, false, never>;
12
+ }
@@ -0,0 +1,14 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { Fields } from './interfaces/FormFields.Interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class FieldBuilderComponent implements OnInit {
6
+ field: Fields;
7
+ form: FormGroup;
8
+ get isValid(): boolean;
9
+ get isDirty(): boolean;
10
+ constructor();
11
+ ngOnInit(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldBuilderComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldBuilderComponent, "field-builder", never, { "field": "field"; "form": "form"; }, {}, never, never, false, never>;
14
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum CardMode {
2
+ Add = "0",
3
+ Edit = "1",
4
+ Show = "2"
5
+ }
@@ -0,0 +1,14 @@
1
+ export interface Fields {
2
+ type: 'dropdown' | 'text' | "checkbox";
3
+ name: string;
4
+ label: string;
5
+ value: string;
6
+ required: boolean;
7
+ multiline?: boolean;
8
+ placeholder: string;
9
+ options?: {
10
+ key: string;
11
+ label: string;
12
+ }[];
13
+ disable: boolean;
14
+ }
@@ -0,0 +1,17 @@
1
+ export interface InputParamsForWidget {
2
+ APIKey: string;
3
+ Culture: string;
4
+ Amount?: string;
5
+ Token?: string;
6
+ ProductDetails?: string;
7
+ IsSale?: boolean;
8
+ Itbms?: string;
9
+ Keys: {
10
+ EncKey1: string;
11
+ EncKey2: string;
12
+ };
13
+ DtrUrl?: string;
14
+ ServiceNo?: string;
15
+ TerminalID?: string;
16
+ Mode?: string;
17
+ }
@@ -0,0 +1,24 @@
1
+ export interface apiResponseInterface {
2
+ IsSuccess: boolean;
3
+ Message: string;
4
+ ResponseData: {
5
+ ResponseCode: string;
6
+ ResponseDescription: string;
7
+ SaleDetails?: {
8
+ TransactionId: number;
9
+ Code: string | null;
10
+ RequestDate: string | null;
11
+ ResponseDate: string | null;
12
+ Description: string | null;
13
+ Amount: string | null;
14
+ };
15
+ TokenDetails?: {
16
+ Id: number;
17
+ AccountNumber: string;
18
+ CardNumber: string;
19
+ SecureCardNumber: string;
20
+ CardHolderName: string;
21
+ AccountToken: string;
22
+ };
23
+ };
24
+ }
@@ -0,0 +1,2 @@
1
+ import { Language } from "./language.interface";
2
+ export declare const LANG_EN: Language;
@@ -0,0 +1,2 @@
1
+ import { Language } from "./language.interface";
2
+ export declare const LANG_ES: Language;