digipay-utility-payment 0.0.5 → 0.0.7

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.
@@ -198,6 +198,9 @@ class UserService {
198
198
  getUserByIdUsingJava(id, params = {}) {
199
199
  return this.http.get(`${this.baseUrl}/user/user_detail/${id}`, { params, headers: this.defaultHeaders });
200
200
  }
201
+ getUserConfig(params = {}) {
202
+ return this.http.get(`${this.baseUrl}/user/user_config`, { params, headers: this.defaultHeaders });
203
+ }
201
204
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
202
205
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UserService, providedIn: 'root' });
203
206
  }
@@ -240,6 +243,28 @@ class WalletService {
240
243
  getWalletUsingJava(params = {}) {
241
244
  return this.http.get(`${this.baseUrl}/transaction/wallet`, { params, headers: this.defaultHeaders });
242
245
  }
246
+ calculateCharges(params = {}) {
247
+ return this.http.post(`${this.baseUrl}/transaction/calculate_charges`, params, {
248
+ headers: this.defaultHeaders,
249
+ });
250
+ }
251
+ calculateAgentCharges(params = {}) {
252
+ return this.http.post(`${this.baseUrl}/transaction/agent_calculate_charges`, params, {
253
+ headers: this.defaultHeaders,
254
+ });
255
+ }
256
+ getAgentChargesListUsingJava(params = {}) {
257
+ return this.http.get(`${this.baseUrl}/agent_profile_threshold/agent_charges`, {
258
+ params,
259
+ headers: this.defaultHeaders,
260
+ });
261
+ }
262
+ getAgentChargeDetailsByIdUsingJava(params) {
263
+ return this.http.get(`${this.baseUrl}/agent_profile_threshold/agent_charges_detail`, {
264
+ params,
265
+ headers: this.defaultHeaders,
266
+ });
267
+ }
243
268
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WalletService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
244
269
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WalletService, providedIn: 'root' });
245
270
  }
@@ -676,6 +701,9 @@ class TranslationService {
676
701
  COMMON_LABEL_PLEASE_ENTER: 'Please enter',
677
702
  COMMON_LABEL_AMOUNT_MUST_BE_BETWEEN: 'Amount must be between',
678
703
  COMMON_LABEL_AND: 'and',
704
+ STATUS_UPDATED_SUCCESSFULLY: 'Status updated successfully',
705
+ TOP_UP_COMPANY_BILL_PAYMENT_WORKFLOW_SCREEN_MAPPING_DATA_NOT_FOUND: 'Top-up company bill payment workflow screen mapping data not found',
706
+ BILL_NOT_FOUND: 'Bill not found'
679
707
  };
680
708
  translate(key) {
681
709
  return TranslationService.LABELS[key] ?? key;
@@ -1173,7 +1201,7 @@ class VendorProvidersComponent {
1173
1201
  this.destroy$.unsubscribe();
1174
1202
  }
1175
1203
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: VendorProvidersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1176
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: VendorProvidersComponent, isStandalone: true, selector: "sdk-vendor-providers", ngImport: i0, template: "<div class=\"content vendor-providers-content\">\n <header class=\"page-header vendor-providers-page-header d-flex align-items-center justify-content-start container-fluid\">\n <h1 class=\"page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n </header>\n\n <section class=\"page-content container-fluid\">\n <div class=\"card vendor-providers-card\">\n <div class=\"card-header vendor-providers-card-header\">\n <h4 class=\"card-title vendor-providers-category-title m-0\">{{vendorCategory?.category_name}}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\">\n <div class=\"card-body vendor-providers-card-body\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 vendor-providers-select-col\">\n @if (loadingState) {\n <div class=\"provider-select-wrapper text-center\">\n <div class=\"shimmer shimmer-effect mx-auto\" style=\"height: 20px; width: 100px; margin-bottom: 0.5rem;\"></div>\n <div class=\"shimmer shimmer-effect provider-shimmer-select\" style=\"margin: 0 auto;\"></div>\n </div>\n } @else {\n <div class=\"provider-select-wrapper d-flex align-items-center justify-content-center flex-wrap gap-2\">\n @if (currentVendorKey == \"airtime_credit\" || currentVendorKey == \"airtime_data\") {\n <label class=\"provider-label mb-0\">{{ 'LABEL_OPERATOR' | translate }}</label>\n <ng-select\n name=\"utilityVendorOperator\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_OPERATOR' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n } @else {\n <label class=\"provider-label mb-0\">{{ 'LABEL_PROVIDER' | translate }}</label>\n <ng-select\n name=\"utilityVendorProvider\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_PROVIDER' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n }\n </div>\n }\n </div>\n\n @if (recentTxnArray.length > 0) {\n <div class=\"col-12 mt-2 vendor-providers-recent-section\">\n <div class=\"border-bottom pb-2 mb-2\">\n <h4 class=\"card-title vendor-providers-recent-title font-weight-600 m-0 text-dark\">\n {{ 'LABEL_RECENT_TRANSACTIONS' | translate }}\n </h4>\n </div>\n <div class=\"row g-2\">\n @for (obj of recentTxnArray; track obj) {\n <a (click)=\"handleRecentTxnClick(obj)\">\n <div class=\"card services-box text-center equal-height\">\n <div class=\"card-body\">\n <div class=\"icon\">\n @if (obj?.payment_request?.vendor_provider_image) {\n <img loading=\"lazy\"\n class=\"vendor-recent-txn-icon\"\n [src]=\"obj?.payment_request?.vendor_provider_image\"\n alt=\"\" />\n } @else {\n <i class=\"align-middle fa fa-bookmark vendor-recent-txn-fallback-icon\"></i>\n }\n </div>\n <h5 class=\"font-weight-600 vendor-recent-txn-name mb-1 mt-2\">{{\n obj?.payment_request?.provider_name || \"-\" }}</h5>\n <h6 class=\"m-0 mb-0 vendor-recent-txn-meta text-muted\">{{\n obj?.payment_request?.account_number }}</h6>\n <h6 class=\"m-0 vendor-recent-txn-meta text-muted\">{{obj?.receiver_amount || 0.00 |\n price: { currency } }}</h6>\n </div>\n </div>\n </a>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer vendor-providers-footer bg-light d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">{{'COMMON_LABEL_CANCEL' | translate}}</button>\n <button type=\"button\" (click)=\"navigateToWorkFlow()\" class=\"btn btn-primary btn-sm\">{{'COMMON_LABEL_NEXT' | translate}}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .vendor-providers-content {\n overflow: visible;\n min-height: auto;\n }\n\n .vendor-providers-page-header {\n margin-bottom: 0.5rem;\n }\n\n .vendor-providers-select-col {\n margin-top: 0;\n }\n\n .vendor-providers-card {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n overflow: visible;\n min-height: 0;\n }\n\n .vendor-providers-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.5rem 0.75rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: #212529;\n }\n\n .vendor-providers-category-title {\n font-size: 0.95rem;\n font-weight: 600;\n }\n\n .vendor-providers-card-body {\n padding: 0.65rem 0.75rem;\n overflow: visible;\n min-height: 0;\n }\n\n .page-title {\n font-size: 1rem;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .provider-select-wrapper {\n padding: 0.15rem 0;\n }\n\n .provider-label {\n font-weight: 500;\n font-size: 0.8rem;\n color: #495057;\n }\n\n .provider-select {\n width: 100%;\n max-width: 190px;\n min-width: 0;\n font-size: 0.75rem;\n }\n\n .provider-select ::ng-deep .ng-select-container {\n align-items: center;\n min-height: 26px;\n height: 26px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n\n .provider-select ::ng-deep .ng-value-container {\n padding-left: 0.4rem;\n padding-top: 0;\n padding-right: 0;\n }\n\n .provider-select ::ng-deep .ng-value-container .ng-value {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-input {\n top: 0;\n padding-left: 0.4rem;\n }\n\n .provider-select ::ng-deep .ng-input > input {\n font-size: 0.75rem;\n min-height: 24px;\n padding: 0.1rem 0;\n }\n\n .provider-select ::ng-deep .ng-placeholder {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-arrow-wrapper {\n width: 20px;\n padding-right: 0.35rem;\n }\n\n .provider-select ::ng-deep .ng-clear-wrapper {\n width: 18px;\n }\n\n .provider-shimmer-select {\n height: 26px;\n width: 100%;\n max-width: 190px;\n }\n\n .vendor-providers-footer {\n padding: 0.35rem 0.6rem;\n }\n\n .vendor-providers-footer .btn {\n font-size: 0.75rem;\n padding: 0.2rem 0.55rem;\n line-height: 1.2;\n border-radius: 4px;\n }\n\n .vendor-providers-recent-title {\n font-size: 0.9rem;\n }\n\n .vendor-providers-recent-section .card-body {\n padding: 0.65rem 0.5rem;\n }\n\n .vendor-recent-txn-icon {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n object-fit: cover;\n }\n\n .vendor-recent-txn-fallback-icon {\n font-size: 1.1rem;\n color: #6c757d;\n }\n\n .vendor-recent-txn-name {\n font-size: 0.8rem;\n line-height: 1.25;\n }\n\n .vendor-recent-txn-meta {\n font-size: 0.72rem;\n line-height: 1.2;\n }\n\n .shimmer-effect {\n border-radius: 10px;\n background-color: #F6F7F8;\n background-image: linear-gradient(to right, #F6F7F8 0, #EDEEF1 20%, #F6F7F8 40%, #F6F7F8 100%);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n</style>\n", styles: [".vendor-providers-content{overflow:visible;min-height:auto}.vendor-providers-page-header{margin-bottom:.5rem}.vendor-providers-select-col{margin-top:0}.vendor-providers-card{border:1px solid #e9ecef;border-radius:8px;box-shadow:0 1px 4px #0000000d;overflow:visible;min-height:0}.vendor-providers-card-header{background:#f8f9fa;border-bottom:1px solid #e9ecef;padding:.5rem .75rem;font-weight:600;font-size:.9rem;color:#212529}.vendor-providers-category-title{font-size:.95rem;font-weight:600}.vendor-providers-card-body{padding:.65rem .75rem;overflow:visible;min-height:0}.page-title{font-size:1rem;font-weight:600;color:#1a1a1a}.provider-select-wrapper{padding:.15rem 0}.provider-label{font-weight:500;font-size:.8rem;color:#495057}.provider-select{width:100%;max-width:190px;min-width:0;font-size:.75rem}.provider-select ::ng-deep .ng-select-container{align-items:center;min-height:26px;height:26px;font-size:.75rem;border-radius:4px}.provider-select ::ng-deep .ng-value-container{padding-left:.4rem;padding-top:0;padding-right:0}.provider-select ::ng-deep .ng-value-container .ng-value{font-size:.75rem;line-height:1.2}.provider-select ::ng-deep .ng-input{top:0;padding-left:.4rem}.provider-select ::ng-deep .ng-input>input{font-size:.75rem;min-height:24px;padding:.1rem 0}.provider-select ::ng-deep .ng-placeholder{font-size:.75rem;line-height:1.2}.provider-select ::ng-deep .ng-arrow-wrapper{width:20px;padding-right:.35rem}.provider-select ::ng-deep .ng-clear-wrapper{width:18px}.provider-shimmer-select{height:26px;width:100%;max-width:190px}.vendor-providers-footer{padding:.35rem .6rem}.vendor-providers-footer .btn{font-size:.75rem;padding:.2rem .55rem;line-height:1.2;border-radius:4px}.vendor-providers-recent-title{font-size:.9rem}.vendor-providers-recent-section .card-body{padding:.65rem .5rem}.vendor-recent-txn-icon{width:36px;height:36px;border-radius:50%;object-fit:cover}.vendor-recent-txn-fallback-icon{font-size:1.1rem;color:#6c757d}.vendor-recent-txn-name{font-size:.8rem;line-height:1.25}.vendor-recent-txn-meta{font-size:.72rem;line-height:1.2}.shimmer-effect{border-radius:10px;background-color:#f6f7f8;background-image:linear-gradient(to right,#f6f7f8 0,#edeef1 20%,#f6f7f8 40% 100%);background-position:0 0;background-repeat:no-repeat;background-size:1000px 1000px;animation:shimmerEffect 1s linear infinite forwards}.shimmer{display:inline-block;width:100%;height:12px}@keyframes shimmerEffect{0%{background-position:-1000px 0}to{background-position:1000px 0}}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i1$1.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "tabFocusOnClearButton", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyBootstrapModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PricePipe, name: "price" }] });
1204
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: VendorProvidersComponent, isStandalone: true, selector: "sdk-vendor-providers", ngImport: i0, template: "<div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>Utilities</h1>\n </div>\n </div>\n </header>\n\n <section class=\"page-content container-fluid\">\n\n <div class=\"card m-0 border-0\">\n <div class=\"card-header p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">{{vendorCategory?.category_name}}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\">\n <div class=\"card-body\">\n <div class=\"mt-3\">\n <div class=\"row\">\n <div class=\"col-xl-10 offset-xl-1\">\n @if (loadingState) {\n <div class=\"form-group form-row\">\n <div class=\"control-label text-md-right col-md-4 col-lg-3\">\n <div class=\"shimmer shimmer-effect\" style=\"height: 20px; width: 80px; margin-top: 8px;\"></div>\n </div>\n <div class=\"col-md-5\">\n <div class=\"shimmer shimmer-effect\" style=\"height: 38px; width: 100%;\"></div>\n </div>\n </div>\n } @else {\n @if (currentVendorKey == \"airtime_credit\" || currentVendorKey == \"airtime_data\" ) {\n <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">\n {{'LABEL_OPERATOR' | translate}}\n </label>\n <div class=\"col-md-5\">\n <ng-select \n [placeholder]=\"'LABEL_SELECT_OPERATOR' | translate\" \n bindLabel=\"provider_name\"\n bindValue=\"id\" \n [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div>\n } @else {\n <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">\n {{'LABEL_PROVIDER' | translate}}\n </label>\n <div class=\"col-md-5\">\n <ng-select \n [placeholder]=\"'LABEL_SELECT_PROVIDER' | translate\" \n bindLabel=\"provider_name\"\n bindValue=\"id\" \n [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div>\n }\n }\n </div>\n\n @if (recentTxnArray.length > 0) {\n <div class=\"col-xl-12\">\n <div class=\"border-bottom p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">\n {{'LABEL_RECENT_TRANSACTIONS' | translate}}</h4>\n </div>\n </div>\n <div class=\"row\">\n @for (obj of recentTxnArray; track obj) {\n <a (click)=\"handleRecentTxnClick(obj)\">\n <div class=\"card services-box text-center equal-height\">\n <div class=\"card-body\">\n <div class=\"icon\">\n @if (obj?.payment_request?.vendor_provider_image) {\n <img loading=\"lazy\"\n style=\"width: 50px; height: 50px; border-radius: 50%;\"\n [src]=\"obj?.payment_request?.vendor_provider_image\"\n alt=\"\" />\n } @else {\n <i class=\"align-middle fa fa-2x fa-bookmark\"></i>\n }\n </div>\n <h5 class=\"font-weight-600 mb-2 mt-3\">{{\n obj?.payment_request?.provider_name || \"-\" }}</h5>\n <h6 class=\"m-0 mb-1 text-muted\">{{\n obj?.payment_request?.account_number }}</h6>\n <h6 class=\"m-0 text-muted\">{{obj?.receiver_amount || 0.00 |\n price: { currency } }}</h6>\n </div>\n </div>\n </a>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"card-footer bg-light text-right\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"back()\">{{'COMMON_LABEL_CANCEL' | translate}}</button>\n <button type=\"button\" (click)=\"navigateToWorkFlow()\"\n class=\"btn btn-primary\">{{'COMMON_LABEL_NEXT' |translate}}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .shimmer-effect {\n border-radius: 10px;\n background-color: #F6F7F8;\n background-image: linear-gradient(to right, #F6F7F8 0, #EDEEF1 20%, #F6F7F8 40%, #F6F7F8 100%);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n</style>", styles: [".shimmer-effect{border-radius:10px;background-color:#f6f7f8;background-image:linear-gradient(to right,#f6f7f8 0,#edeef1 20%,#f6f7f8 40% 100%);background-position:0 0;background-repeat:no-repeat;background-size:1000px 1000px;animation:shimmerEffect 1s linear infinite forwards}.shimmer{display:inline-block;width:100%;height:12px}@keyframes shimmerEffect{0%{background-position:-1000px 0}to{background-position:1000px 0}}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i1$1.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "tabFocusOnClearButton", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyBootstrapModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PricePipe, name: "price" }] });
1177
1205
  }
1178
1206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: VendorProvidersComponent, decorators: [{
1179
1207
  type: Component,
@@ -1184,7 +1212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
1184
1212
  ReactiveFormsModule,
1185
1213
  FormlyBootstrapModule,
1186
1214
  FormlyModule
1187
- ], template: "<div class=\"content vendor-providers-content\">\n <header class=\"page-header vendor-providers-page-header d-flex align-items-center justify-content-start container-fluid\">\n <h1 class=\"page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n </header>\n\n <section class=\"page-content container-fluid\">\n <div class=\"card vendor-providers-card\">\n <div class=\"card-header vendor-providers-card-header\">\n <h4 class=\"card-title vendor-providers-category-title m-0\">{{vendorCategory?.category_name}}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\">\n <div class=\"card-body vendor-providers-card-body\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 vendor-providers-select-col\">\n @if (loadingState) {\n <div class=\"provider-select-wrapper text-center\">\n <div class=\"shimmer shimmer-effect mx-auto\" style=\"height: 20px; width: 100px; margin-bottom: 0.5rem;\"></div>\n <div class=\"shimmer shimmer-effect provider-shimmer-select\" style=\"margin: 0 auto;\"></div>\n </div>\n } @else {\n <div class=\"provider-select-wrapper d-flex align-items-center justify-content-center flex-wrap gap-2\">\n @if (currentVendorKey == \"airtime_credit\" || currentVendorKey == \"airtime_data\") {\n <label class=\"provider-label mb-0\">{{ 'LABEL_OPERATOR' | translate }}</label>\n <ng-select\n name=\"utilityVendorOperator\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_OPERATOR' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n } @else {\n <label class=\"provider-label mb-0\">{{ 'LABEL_PROVIDER' | translate }}</label>\n <ng-select\n name=\"utilityVendorProvider\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_PROVIDER' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n }\n </div>\n }\n </div>\n\n @if (recentTxnArray.length > 0) {\n <div class=\"col-12 mt-2 vendor-providers-recent-section\">\n <div class=\"border-bottom pb-2 mb-2\">\n <h4 class=\"card-title vendor-providers-recent-title font-weight-600 m-0 text-dark\">\n {{ 'LABEL_RECENT_TRANSACTIONS' | translate }}\n </h4>\n </div>\n <div class=\"row g-2\">\n @for (obj of recentTxnArray; track obj) {\n <a (click)=\"handleRecentTxnClick(obj)\">\n <div class=\"card services-box text-center equal-height\">\n <div class=\"card-body\">\n <div class=\"icon\">\n @if (obj?.payment_request?.vendor_provider_image) {\n <img loading=\"lazy\"\n class=\"vendor-recent-txn-icon\"\n [src]=\"obj?.payment_request?.vendor_provider_image\"\n alt=\"\" />\n } @else {\n <i class=\"align-middle fa fa-bookmark vendor-recent-txn-fallback-icon\"></i>\n }\n </div>\n <h5 class=\"font-weight-600 vendor-recent-txn-name mb-1 mt-2\">{{\n obj?.payment_request?.provider_name || \"-\" }}</h5>\n <h6 class=\"m-0 mb-0 vendor-recent-txn-meta text-muted\">{{\n obj?.payment_request?.account_number }}</h6>\n <h6 class=\"m-0 vendor-recent-txn-meta text-muted\">{{obj?.receiver_amount || 0.00 |\n price: { currency } }}</h6>\n </div>\n </div>\n </a>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer vendor-providers-footer bg-light d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">{{'COMMON_LABEL_CANCEL' | translate}}</button>\n <button type=\"button\" (click)=\"navigateToWorkFlow()\" class=\"btn btn-primary btn-sm\">{{'COMMON_LABEL_NEXT' | translate}}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .vendor-providers-content {\n overflow: visible;\n min-height: auto;\n }\n\n .vendor-providers-page-header {\n margin-bottom: 0.5rem;\n }\n\n .vendor-providers-select-col {\n margin-top: 0;\n }\n\n .vendor-providers-card {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n overflow: visible;\n min-height: 0;\n }\n\n .vendor-providers-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.5rem 0.75rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: #212529;\n }\n\n .vendor-providers-category-title {\n font-size: 0.95rem;\n font-weight: 600;\n }\n\n .vendor-providers-card-body {\n padding: 0.65rem 0.75rem;\n overflow: visible;\n min-height: 0;\n }\n\n .page-title {\n font-size: 1rem;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .provider-select-wrapper {\n padding: 0.15rem 0;\n }\n\n .provider-label {\n font-weight: 500;\n font-size: 0.8rem;\n color: #495057;\n }\n\n .provider-select {\n width: 100%;\n max-width: 190px;\n min-width: 0;\n font-size: 0.75rem;\n }\n\n .provider-select ::ng-deep .ng-select-container {\n align-items: center;\n min-height: 26px;\n height: 26px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n\n .provider-select ::ng-deep .ng-value-container {\n padding-left: 0.4rem;\n padding-top: 0;\n padding-right: 0;\n }\n\n .provider-select ::ng-deep .ng-value-container .ng-value {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-input {\n top: 0;\n padding-left: 0.4rem;\n }\n\n .provider-select ::ng-deep .ng-input > input {\n font-size: 0.75rem;\n min-height: 24px;\n padding: 0.1rem 0;\n }\n\n .provider-select ::ng-deep .ng-placeholder {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-arrow-wrapper {\n width: 20px;\n padding-right: 0.35rem;\n }\n\n .provider-select ::ng-deep .ng-clear-wrapper {\n width: 18px;\n }\n\n .provider-shimmer-select {\n height: 26px;\n width: 100%;\n max-width: 190px;\n }\n\n .vendor-providers-footer {\n padding: 0.35rem 0.6rem;\n }\n\n .vendor-providers-footer .btn {\n font-size: 0.75rem;\n padding: 0.2rem 0.55rem;\n line-height: 1.2;\n border-radius: 4px;\n }\n\n .vendor-providers-recent-title {\n font-size: 0.9rem;\n }\n\n .vendor-providers-recent-section .card-body {\n padding: 0.65rem 0.5rem;\n }\n\n .vendor-recent-txn-icon {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n object-fit: cover;\n }\n\n .vendor-recent-txn-fallback-icon {\n font-size: 1.1rem;\n color: #6c757d;\n }\n\n .vendor-recent-txn-name {\n font-size: 0.8rem;\n line-height: 1.25;\n }\n\n .vendor-recent-txn-meta {\n font-size: 0.72rem;\n line-height: 1.2;\n }\n\n .shimmer-effect {\n border-radius: 10px;\n background-color: #F6F7F8;\n background-image: linear-gradient(to right, #F6F7F8 0, #EDEEF1 20%, #F6F7F8 40%, #F6F7F8 100%);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n</style>\n" }]
1215
+ ], template: "<div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>Utilities</h1>\n </div>\n </div>\n </header>\n\n <section class=\"page-content container-fluid\">\n\n <div class=\"card m-0 border-0\">\n <div class=\"card-header p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">{{vendorCategory?.category_name}}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\">\n <div class=\"card-body\">\n <div class=\"mt-3\">\n <div class=\"row\">\n <div class=\"col-xl-10 offset-xl-1\">\n @if (loadingState) {\n <div class=\"form-group form-row\">\n <div class=\"control-label text-md-right col-md-4 col-lg-3\">\n <div class=\"shimmer shimmer-effect\" style=\"height: 20px; width: 80px; margin-top: 8px;\"></div>\n </div>\n <div class=\"col-md-5\">\n <div class=\"shimmer shimmer-effect\" style=\"height: 38px; width: 100%;\"></div>\n </div>\n </div>\n } @else {\n @if (currentVendorKey == \"airtime_credit\" || currentVendorKey == \"airtime_data\" ) {\n <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">\n {{'LABEL_OPERATOR' | translate}}\n </label>\n <div class=\"col-md-5\">\n <ng-select \n [placeholder]=\"'LABEL_SELECT_OPERATOR' | translate\" \n bindLabel=\"provider_name\"\n bindValue=\"id\" \n [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div>\n } @else {\n <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">\n {{'LABEL_PROVIDER' | translate}}\n </label>\n <div class=\"col-md-5\">\n <ng-select \n [placeholder]=\"'LABEL_SELECT_PROVIDER' | translate\" \n bindLabel=\"provider_name\"\n bindValue=\"id\" \n [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div>\n }\n }\n </div>\n\n @if (recentTxnArray.length > 0) {\n <div class=\"col-xl-12\">\n <div class=\"border-bottom p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">\n {{'LABEL_RECENT_TRANSACTIONS' | translate}}</h4>\n </div>\n </div>\n <div class=\"row\">\n @for (obj of recentTxnArray; track obj) {\n <a (click)=\"handleRecentTxnClick(obj)\">\n <div class=\"card services-box text-center equal-height\">\n <div class=\"card-body\">\n <div class=\"icon\">\n @if (obj?.payment_request?.vendor_provider_image) {\n <img loading=\"lazy\"\n style=\"width: 50px; height: 50px; border-radius: 50%;\"\n [src]=\"obj?.payment_request?.vendor_provider_image\"\n alt=\"\" />\n } @else {\n <i class=\"align-middle fa fa-2x fa-bookmark\"></i>\n }\n </div>\n <h5 class=\"font-weight-600 mb-2 mt-3\">{{\n obj?.payment_request?.provider_name || \"-\" }}</h5>\n <h6 class=\"m-0 mb-1 text-muted\">{{\n obj?.payment_request?.account_number }}</h6>\n <h6 class=\"m-0 text-muted\">{{obj?.receiver_amount || 0.00 |\n price: { currency } }}</h6>\n </div>\n </div>\n </a>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"card-footer bg-light text-right\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"back()\">{{'COMMON_LABEL_CANCEL' | translate}}</button>\n <button type=\"button\" (click)=\"navigateToWorkFlow()\"\n class=\"btn btn-primary\">{{'COMMON_LABEL_NEXT' |translate}}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .shimmer-effect {\n border-radius: 10px;\n background-color: #F6F7F8;\n background-image: linear-gradient(to right, #F6F7F8 0, #EDEEF1 20%, #F6F7F8 40%, #F6F7F8 100%);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n</style>" }]
1188
1216
  }], ctorParameters: () => [] });
1189
1217
 
1190
1218
  class NoDataComponent {
@@ -1235,7 +1263,7 @@ class FormlyHorizontalWrapperComponent extends FieldWrapper {
1235
1263
  <em class="text-danger">*</em>
1236
1264
  }
1237
1265
  </label>
1238
- <div class="col-md-8">
1266
+ <div class="col-md-5">
1239
1267
  <ng-template #fieldComponent></ng-template>
1240
1268
  @if (showError) {
1241
1269
  <div class="invalid-feedback d-block">
@@ -1260,7 +1288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
1260
1288
  <em class="text-danger">*</em>
1261
1289
  }
1262
1290
  </label>
1263
- <div class="col-md-8">
1291
+ <div class="col-md-5">
1264
1292
  <ng-template #fieldComponent></ng-template>
1265
1293
  @if (showError) {
1266
1294
  <div class="invalid-feedback d-block">
@@ -1383,25 +1411,435 @@ class CommonLoaderComponent {
1383
1411
  message = 'Please wait...';
1384
1412
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: CommonLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1385
1413
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: CommonLoaderComponent, isStandalone: true, selector: "sdk-common-loader", inputs: { message: "message" }, ngImport: i0, template: `
1386
- <div class="d-flex align-items-center justify-content-center py-4">
1387
- <div class="spinner-border mr-2" role="status">
1388
- <span class="sr-only">Loading...</span>
1389
- </div>
1390
- <span>{{ message }}</span>
1414
+ <div class="loader-container">
1415
+ <div class="loader-logo">
1416
+ <div class="sk-chase">
1417
+ <div class="sk-chase-dot"></div>
1418
+ <div class="sk-chase-dot"></div>
1419
+ <div class="sk-chase-dot"></div>
1420
+ <div class="sk-chase-dot"></div>
1421
+ <div class="sk-chase-dot"></div>
1422
+ <div class="sk-chase-dot"></div>
1423
+ </div>
1424
+ {{message}}
1391
1425
  </div>
1392
- `, isInline: true });
1426
+ </div>
1427
+
1428
+
1429
+ <style>
1430
+ /*Loader*/
1431
+ .loader-container {
1432
+ position: fixed;
1433
+ z-index: 2000;
1434
+ top: 0;
1435
+ left: 0;
1436
+ bottom: 0;
1437
+ right: 0;
1438
+ background-color: rgba(255, 255, 255, 0.6);
1439
+ }
1440
+
1441
+ .loader-logo {
1442
+ position: absolute;
1443
+ top: 50%;
1444
+ left: 0;
1445
+ right: 0;
1446
+ margin: 0 auto;
1447
+ z-index: 5;
1448
+ -webkit-transform: translateY(-50%);
1449
+ -moz-transform: translateY(-50%);
1450
+ -ms-transform: translateY(-50%);
1451
+ -o-transform: translateY(-50%);
1452
+ transform: translateY(-50%);
1453
+ text-align: center;
1454
+ font-size: 17px;
1455
+ font-weight: 500;
1456
+ }
1457
+
1458
+ /*Loader Spinner*/
1459
+ .loader-container .spinner {
1460
+ margin: 0 auto;
1461
+ width: 70px;
1462
+ height: 55px;
1463
+ text-align: center;
1464
+ font-size: 20px;
1465
+ }
1466
+
1467
+ .loader-container .spinner>div {
1468
+ background-color: #333;
1469
+ height: 100%;
1470
+ width: 6px;
1471
+ display: inline-block;
1472
+ -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;
1473
+ animation: sk-stretchdelay 1.2s infinite ease-in-out;
1474
+ }
1475
+
1476
+ .loader-container .spinner .rect2 {
1477
+ -webkit-animation-delay: -1.1s;
1478
+ animation-delay: -1.1s;
1479
+ }
1480
+
1481
+ .loader-container .spinner .rect3 {
1482
+ -webkit-animation-delay: -1.0s;
1483
+ animation-delay: -1.0s;
1484
+ }
1485
+
1486
+ .loader-container .spinner .rect4 {
1487
+ -webkit-animation-delay: -0.9s;
1488
+ animation-delay: -0.9s;
1489
+ }
1490
+
1491
+ .loader-container .spinner .rect5 {
1492
+ -webkit-animation-delay: -0.8s;
1493
+ animation-delay: -0.8s;
1494
+ }
1495
+
1496
+ @-webkit-keyframes sk-stretchdelay {
1497
+
1498
+ 0%,
1499
+ 40%,
1500
+ 100% {
1501
+ -webkit-transform: scaleY(0.4)
1502
+ }
1503
+
1504
+ 20% {
1505
+ -webkit-transform: scaleY(1.0)
1506
+ }
1507
+ }
1508
+
1509
+ @keyframes sk-stretchdelay {
1510
+
1511
+ 0%,
1512
+ 40%,
1513
+ 100% {
1514
+ transform: scaleY(0.4);
1515
+ -webkit-transform: scaleY(0.4);
1516
+ }
1517
+
1518
+ 20% {
1519
+ transform: scaleY(1.0);
1520
+ -webkit-transform: scaleY(1.0);
1521
+ }
1522
+ }
1523
+
1524
+ /*Loader sk-chase*/
1525
+ .sk-chase {
1526
+ width: 55px;
1527
+ height: 55px;
1528
+ position: relative;
1529
+ margin: 0 auto 20px;
1530
+ animation: sk-chase 2.5s infinite linear both;
1531
+ }
1532
+
1533
+ .sk-chase-dot {
1534
+ width: 100%;
1535
+ height: 100%;
1536
+ position: absolute;
1537
+ left: 0;
1538
+ top: 0;
1539
+ animation: sk-chase-dot 2.0s infinite ease-in-out both;
1540
+ }
1541
+
1542
+ .sk-chase-dot:before {
1543
+ content: '';
1544
+ display: block;
1545
+ width: 25%;
1546
+ height: 25%;
1547
+ background-color: #212121;
1548
+ border-radius: 100%;
1549
+ animation: sk-chase-dot-before 2.0s infinite ease-in-out both;
1550
+ }
1551
+
1552
+ .sk-chase-dot:nth-child(1) {
1553
+ animation-delay: -1.1s;
1554
+ }
1555
+
1556
+ .sk-chase-dot:nth-child(2) {
1557
+ animation-delay: -1.0s;
1558
+ }
1559
+
1560
+ .sk-chase-dot:nth-child(3) {
1561
+ animation-delay: -0.9s;
1562
+ }
1563
+
1564
+ .sk-chase-dot:nth-child(4) {
1565
+ animation-delay: -0.8s;
1566
+ }
1567
+
1568
+ .sk-chase-dot:nth-child(5) {
1569
+ animation-delay: -0.7s;
1570
+ }
1571
+
1572
+ .sk-chase-dot:nth-child(6) {
1573
+ animation-delay: -0.6s;
1574
+ }
1575
+
1576
+ .sk-chase-dot:nth-child(1):before {
1577
+ animation-delay: -1.1s;
1578
+ }
1579
+
1580
+ .sk-chase-dot:nth-child(2):before {
1581
+ animation-delay: -1.0s;
1582
+ }
1583
+
1584
+ .sk-chase-dot:nth-child(3):before {
1585
+ animation-delay: -0.9s;
1586
+ }
1587
+
1588
+ .sk-chase-dot:nth-child(4):before {
1589
+ animation-delay: -0.8s;
1590
+ }
1591
+
1592
+ .sk-chase-dot:nth-child(5):before {
1593
+ animation-delay: -0.7s;
1594
+ }
1595
+
1596
+ .sk-chase-dot:nth-child(6):before {
1597
+ animation-delay: -0.6s;
1598
+ }
1599
+
1600
+ @keyframes sk-chase {
1601
+ 100% {
1602
+ transform: rotate(360deg);
1603
+ }
1604
+ }
1605
+
1606
+ @keyframes sk-chase-dot {
1607
+
1608
+ 80%,
1609
+ 100% {
1610
+ transform: rotate(360deg);
1611
+ }
1612
+ }
1613
+
1614
+ @keyframes sk-chase-dot-before {
1615
+ 50% {
1616
+ transform: scale(0.4);
1617
+ }
1618
+
1619
+ 100%,
1620
+ 0% {
1621
+ transform: scale(1.0);
1622
+ }
1623
+ }
1624
+ </style>
1625
+ `, isInline: true, styles: [".loader-container{position:fixed;z-index:2000;inset:0;background-color:#fff9}.loader-logo{position:absolute;top:50%;left:0;right:0;margin:0 auto;z-index:5;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:17px;font-weight:500}.loader-container .spinner{margin:0 auto;width:70px;height:55px;text-align:center;font-size:20px}.loader-container .spinner>div{background-color:#333;height:100%;width:6px;display:inline-block;-webkit-animation:sk-stretchdelay 1.2s infinite ease-in-out;animation:sk-stretchdelay 1.2s infinite ease-in-out}.loader-container .spinner .rect2{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.loader-container .spinner .rect3{-webkit-animation-delay:-1s;animation-delay:-1s}.loader-container .spinner .rect4{-webkit-animation-delay:-.9s;animation-delay:-.9s}.loader-container .spinner .rect5{-webkit-animation-delay:-.8s;animation-delay:-.8s}@-webkit-keyframes sk-stretchdelay{0%,40%,to{-webkit-transform:scaleY(.4)}20%{-webkit-transform:scaleY(1)}}@keyframes sk-stretchdelay{0%,40%,to{transform:scaleY(.4);-webkit-transform:scaleY(.4)}20%{transform:scaleY(1);-webkit-transform:scaleY(1)}}.sk-chase{width:55px;height:55px;position:relative;margin:0 auto 20px;animation:sk-chase 2.5s infinite linear both}.sk-chase-dot{width:100%;height:100%;position:absolute;left:0;top:0;animation:sk-chase-dot 2s infinite ease-in-out both}.sk-chase-dot:before{content:\"\";display:block;width:25%;height:25%;background-color:#212121;border-radius:100%;animation:sk-chase-dot-before 2s infinite ease-in-out both}.sk-chase-dot:nth-child(1){animation-delay:-1.1s}.sk-chase-dot:nth-child(2){animation-delay:-1s}.sk-chase-dot:nth-child(3){animation-delay:-.9s}.sk-chase-dot:nth-child(4){animation-delay:-.8s}.sk-chase-dot:nth-child(5){animation-delay:-.7s}.sk-chase-dot:nth-child(6){animation-delay:-.6s}.sk-chase-dot:nth-child(1):before{animation-delay:-1.1s}.sk-chase-dot:nth-child(2):before{animation-delay:-1s}.sk-chase-dot:nth-child(3):before{animation-delay:-.9s}.sk-chase-dot:nth-child(4):before{animation-delay:-.8s}.sk-chase-dot:nth-child(5):before{animation-delay:-.7s}.sk-chase-dot:nth-child(6):before{animation-delay:-.6s}@keyframes sk-chase{to{transform:rotate(360deg)}}@keyframes sk-chase-dot{80%,to{transform:rotate(360deg)}}@keyframes sk-chase-dot-before{50%{transform:scale(.4)}to,0%{transform:scale(1)}}\n"] });
1393
1626
  }
1394
1627
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: CommonLoaderComponent, decorators: [{
1395
1628
  type: Component,
1396
1629
  args: [{
1397
1630
  selector: 'sdk-common-loader',
1398
1631
  template: `
1399
- <div class="d-flex align-items-center justify-content-center py-4">
1400
- <div class="spinner-border mr-2" role="status">
1401
- <span class="sr-only">Loading...</span>
1402
- </div>
1403
- <span>{{ message }}</span>
1632
+ <div class="loader-container">
1633
+ <div class="loader-logo">
1634
+ <div class="sk-chase">
1635
+ <div class="sk-chase-dot"></div>
1636
+ <div class="sk-chase-dot"></div>
1637
+ <div class="sk-chase-dot"></div>
1638
+ <div class="sk-chase-dot"></div>
1639
+ <div class="sk-chase-dot"></div>
1640
+ <div class="sk-chase-dot"></div>
1641
+ </div>
1642
+ {{message}}
1404
1643
  </div>
1644
+ </div>
1645
+
1646
+
1647
+ <style>
1648
+ /*Loader*/
1649
+ .loader-container {
1650
+ position: fixed;
1651
+ z-index: 2000;
1652
+ top: 0;
1653
+ left: 0;
1654
+ bottom: 0;
1655
+ right: 0;
1656
+ background-color: rgba(255, 255, 255, 0.6);
1657
+ }
1658
+
1659
+ .loader-logo {
1660
+ position: absolute;
1661
+ top: 50%;
1662
+ left: 0;
1663
+ right: 0;
1664
+ margin: 0 auto;
1665
+ z-index: 5;
1666
+ -webkit-transform: translateY(-50%);
1667
+ -moz-transform: translateY(-50%);
1668
+ -ms-transform: translateY(-50%);
1669
+ -o-transform: translateY(-50%);
1670
+ transform: translateY(-50%);
1671
+ text-align: center;
1672
+ font-size: 17px;
1673
+ font-weight: 500;
1674
+ }
1675
+
1676
+ /*Loader Spinner*/
1677
+ .loader-container .spinner {
1678
+ margin: 0 auto;
1679
+ width: 70px;
1680
+ height: 55px;
1681
+ text-align: center;
1682
+ font-size: 20px;
1683
+ }
1684
+
1685
+ .loader-container .spinner>div {
1686
+ background-color: #333;
1687
+ height: 100%;
1688
+ width: 6px;
1689
+ display: inline-block;
1690
+ -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;
1691
+ animation: sk-stretchdelay 1.2s infinite ease-in-out;
1692
+ }
1693
+
1694
+ .loader-container .spinner .rect2 {
1695
+ -webkit-animation-delay: -1.1s;
1696
+ animation-delay: -1.1s;
1697
+ }
1698
+
1699
+ .loader-container .spinner .rect3 {
1700
+ -webkit-animation-delay: -1.0s;
1701
+ animation-delay: -1.0s;
1702
+ }
1703
+
1704
+ .loader-container .spinner .rect4 {
1705
+ -webkit-animation-delay: -0.9s;
1706
+ animation-delay: -0.9s;
1707
+ }
1708
+
1709
+ .loader-container .spinner .rect5 {
1710
+ -webkit-animation-delay: -0.8s;
1711
+ animation-delay: -0.8s;
1712
+ }
1713
+
1714
+ @-webkit-keyframes sk-stretchdelay {
1715
+
1716
+ 0%,
1717
+ 40%,
1718
+ 100% {
1719
+ -webkit-transform: scaleY(0.4)
1720
+ }
1721
+
1722
+ 20% {
1723
+ -webkit-transform: scaleY(1.0)
1724
+ }
1725
+ }
1726
+
1727
+ @keyframes sk-stretchdelay {
1728
+
1729
+ 0%,
1730
+ 40%,
1731
+ 100% {
1732
+ transform: scaleY(0.4);
1733
+ -webkit-transform: scaleY(0.4);
1734
+ }
1735
+
1736
+ 20% {
1737
+ transform: scaleY(1.0);
1738
+ -webkit-transform: scaleY(1.0);
1739
+ }
1740
+ }
1741
+
1742
+ /*Loader sk-chase*/
1743
+ .sk-chase {
1744
+ width: 55px;
1745
+ height: 55px;
1746
+ position: relative;
1747
+ margin: 0 auto 20px;
1748
+ animation: sk-chase 2.5s infinite linear both;
1749
+ }
1750
+
1751
+ .sk-chase-dot {
1752
+ width: 100%;
1753
+ height: 100%;
1754
+ position: absolute;
1755
+ left: 0;
1756
+ top: 0;
1757
+ animation: sk-chase-dot 2.0s infinite ease-in-out both;
1758
+ }
1759
+
1760
+ .sk-chase-dot:before {
1761
+ content: '';
1762
+ display: block;
1763
+ width: 25%;
1764
+ height: 25%;
1765
+ background-color: #212121;
1766
+ border-radius: 100%;
1767
+ animation: sk-chase-dot-before 2.0s infinite ease-in-out both;
1768
+ }
1769
+
1770
+ .sk-chase-dot:nth-child(1) {
1771
+ animation-delay: -1.1s;
1772
+ }
1773
+
1774
+ .sk-chase-dot:nth-child(2) {
1775
+ animation-delay: -1.0s;
1776
+ }
1777
+
1778
+ .sk-chase-dot:nth-child(3) {
1779
+ animation-delay: -0.9s;
1780
+ }
1781
+
1782
+ .sk-chase-dot:nth-child(4) {
1783
+ animation-delay: -0.8s;
1784
+ }
1785
+
1786
+ .sk-chase-dot:nth-child(5) {
1787
+ animation-delay: -0.7s;
1788
+ }
1789
+
1790
+ .sk-chase-dot:nth-child(6) {
1791
+ animation-delay: -0.6s;
1792
+ }
1793
+
1794
+ .sk-chase-dot:nth-child(1):before {
1795
+ animation-delay: -1.1s;
1796
+ }
1797
+
1798
+ .sk-chase-dot:nth-child(2):before {
1799
+ animation-delay: -1.0s;
1800
+ }
1801
+
1802
+ .sk-chase-dot:nth-child(3):before {
1803
+ animation-delay: -0.9s;
1804
+ }
1805
+
1806
+ .sk-chase-dot:nth-child(4):before {
1807
+ animation-delay: -0.8s;
1808
+ }
1809
+
1810
+ .sk-chase-dot:nth-child(5):before {
1811
+ animation-delay: -0.7s;
1812
+ }
1813
+
1814
+ .sk-chase-dot:nth-child(6):before {
1815
+ animation-delay: -0.6s;
1816
+ }
1817
+
1818
+ @keyframes sk-chase {
1819
+ 100% {
1820
+ transform: rotate(360deg);
1821
+ }
1822
+ }
1823
+
1824
+ @keyframes sk-chase-dot {
1825
+
1826
+ 80%,
1827
+ 100% {
1828
+ transform: rotate(360deg);
1829
+ }
1830
+ }
1831
+
1832
+ @keyframes sk-chase-dot-before {
1833
+ 50% {
1834
+ transform: scale(0.4);
1835
+ }
1836
+
1837
+ 100%,
1838
+ 0% {
1839
+ transform: scale(1.0);
1840
+ }
1841
+ }
1842
+ </style>
1405
1843
  `,
1406
1844
  standalone: true,
1407
1845
  }]
@@ -2508,7 +2946,7 @@ class WorkFlowComponent {
2508
2946
  },
2509
2947
  ],
2510
2948
  }),
2511
- ], ngImport: i0, template: "\n\n@if (showWorkflowComponent) {\n \n <sdk-bill-workflow \n [selectedBill]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n \n \n}@else { \n <div class=\"content work-flow-content\">\n <header class=\"page-header work-flow-page-header d-flex align-items-center justify-content-between container-fluid\">\n <h1 class=\"page-title work-flow-page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"back()\">\n <i class=\"fas fa-angle-left me-1\"></i>{{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </header>\n \n <section class=\"page-content container-fluid work-flow-section\">\n \n <div class=\"card work-flow-card m-0\">\n <div class=\"card-header work-flow-card-header\">\n <h4 class=\"card-title work-flow-card-title m-0 text-dark\">{{ vendorProvider?.provider_name }}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal work-flow-form\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body work-flow-card-body\">\n <div class=\"work-flow-fields\">\n @if (fieldsArray.length > 0) {\n <div class=\"row justify-content-center\">\n <div class=\"col-12 work-flow-form-column\">\n <!-- <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">Provider</label>\n <div class=\"col-md-5\">\n <ng-select placeholder=\"Select Provider\" bindLabel=\"provider_name\"\n bindValue=\"id\" [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div> -->\n <!-- <pre>{{fieldsArray|json}}</pre> -->\n <formly-form [fields]=\"fieldsArray\" [model]=\"fieldsModel\" [form]=\"detailsForm\">\n </formly-form>\n </div>\n </div>\n }\n \n @if (fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer work-flow-footer bg-light d-flex justify-content-end flex-wrap gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n @if (buttonData) {\n <button type=\"submit\" class=\"btn btn-primary btn-sm\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\"\n [disabled]=\"showLoader || !detailsForm.valid\">\n {{ buttonData?.field_title }}\n </button>\n }\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n </div>\n}\n\n<style>\n .work-flow-content {\n overflow: visible;\n }\n\n .work-flow-page-header {\n margin-bottom: 0.5rem;\n }\n\n .work-flow-page-title {\n font-size: 0.95rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-section {\n max-width: 100%;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n }\n\n /* Narrow card: less empty chrome */\n .work-flow-card {\n max-width: 440px;\n margin-left: auto;\n margin-right: auto;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n overflow: visible;\n }\n\n .work-flow-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.4rem 0.6rem;\n }\n\n .work-flow-card-title {\n font-size: 0.85rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-card-body {\n padding: 0.85rem 0.75rem 1rem;\n border-bottom: 1px solid #e9ecef;\n }\n\n .work-flow-fields {\n margin-top: 0;\n }\n\n .work-flow-form-column {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n padding-left: 0;\n padding-right: 0;\n }\n\n .work-flow-footer {\n padding: 0.45rem 0.6rem;\n border-top: 1px solid #e9ecef;\n background: #fafbfc !important;\n }\n\n .work-flow-footer .btn {\n font-size: 0.7rem;\n padding: 0.18rem 0.45rem;\n line-height: 1.15;\n border-radius: 3px;\n }\n\n /*\n * Reference layout: each row centered in the card; compact inputs (~25\u201330% of card);\n * labels right-aligned next to the field.\n */\n .work-flow-card-body ::ng-deep formly-field {\n display: block;\n width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n margin-bottom: 0.65rem;\n align-items: center;\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .control-label {\n flex: 0 0 8rem;\n max-width: 8rem;\n min-width: 8rem;\n font-size: 0.72rem;\n font-weight: 500;\n color: #3d5a80;\n padding-top: 0;\n padding-right: 0.45rem;\n margin-bottom: 0;\n text-align: right;\n white-space: nowrap;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .col-md-8 {\n flex: 1 1 auto;\n max-width: none;\n width: auto;\n min-width: 0;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n display: block;\n width: 100%;\n max-width: 200px;\n box-sizing: border-box;\n font-size: 0.72rem;\n min-height: 26px;\n height: 26px;\n padding: 0.15rem 0.4rem;\n border-radius: 4px;\n line-height: 1.2;\n border: 1px solid #d8dee6;\n background-color: #fff;\n color: #334155;\n }\n\n .work-flow-card-body ::ng-deep .form-control::placeholder {\n color: #94a3b8;\n opacity: 1;\n font-size: 0.7rem;\n }\n\n .work-flow-card-body ::ng-deep textarea.form-control {\n height: auto !important;\n min-height: 3.25rem;\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .invalid-feedback {\n font-size: 0.65rem;\n margin-top: 0.1rem;\n }\n\n @media (max-width: 400px) {\n .work-flow-card {\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n max-width: 100%;\n }\n }\n\n</style>", styles: [".work-flow-content{overflow:visible}.work-flow-page-header{margin-bottom:.5rem}.work-flow-page-title{font-size:.95rem;font-weight:600;color:#1e3a5f}.work-flow-section{max-width:100%;padding-left:.75rem;padding-right:.75rem}.work-flow-card{max-width:440px;margin-left:auto;margin-right:auto;border:1px solid #e9ecef;border-radius:6px;box-shadow:0 1px 3px #0000000f;overflow:visible}.work-flow-card-header{background:#f8f9fa;border-bottom:1px solid #e9ecef;padding:.4rem .6rem}.work-flow-card-title{font-size:.85rem;font-weight:600;color:#1e3a5f}.work-flow-card-body{padding:.85rem .75rem 1rem;border-bottom:1px solid #e9ecef}.work-flow-fields{margin-top:0}.work-flow-form-column{max-width:100%;margin-left:0;margin-right:0;padding-left:0;padding-right:0}.work-flow-footer{padding:.45rem .6rem;border-top:1px solid #e9ecef;background:#fafbfc!important}.work-flow-footer .btn{font-size:.7rem;padding:.18rem .45rem;line-height:1.15;border-radius:3px}.work-flow-card-body ::ng-deep formly-field{display:block;width:100%}.work-flow-card-body ::ng-deep .form-group.form-row{max-width:100%;margin-left:0;margin-right:0;margin-bottom:.65rem;align-items:center;flex-wrap:nowrap;justify-content:flex-start}.work-flow-card-body ::ng-deep .form-group.form-row>.control-label{flex:0 0 8rem;max-width:8rem;min-width:8rem;font-size:.72rem;font-weight:500;color:#3d5a80;padding-top:0;padding-right:.45rem;margin-bottom:0;text-align:right;white-space:nowrap}.work-flow-card-body ::ng-deep .form-group.form-row>.col-md-8{flex:1 1 auto;max-width:none;width:auto;min-width:0}.work-flow-card-body ::ng-deep .form-control{display:block;width:100%;max-width:200px;box-sizing:border-box;font-size:.72rem;min-height:26px;height:26px;padding:.15rem .4rem;border-radius:4px;line-height:1.2;border:1px solid #d8dee6;background-color:#fff;color:#334155}.work-flow-card-body ::ng-deep .form-control::placeholder{color:#94a3b8;opacity:1;font-size:.7rem}.work-flow-card-body ::ng-deep textarea.form-control{height:auto!important;min-height:3.25rem;max-width:100%}.work-flow-card-body ::ng-deep .invalid-feedback{font-size:.65rem;margin-top:.1rem}@media (max-width: 400px){.work-flow-card{max-width:100%}.work-flow-card-body ::ng-deep .form-control{max-width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyBootstrapModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1$2.LegacyFormlyForm, selector: "formly-form" }, { kind: "component", type: NoDataComponent, selector: "sdk-no-data", inputs: ["title", "icon"] }, { kind: "component", type: BillWorkflowComponent, selector: "sdk-bill-workflow", inputs: ["billData", "selectedBill"], outputs: ["workflowCompleted"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2949
+ ], ngImport: i0, template: "\n\n@if (showWorkflowComponent) {\n \n <sdk-bill-workflow \n [selectedBill]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n \n \n}@else { \n <div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>{{ 'LABEL_UTILITIES' | translate }}</h1>\n </div>\n </div>\n </header>\n \n <section class=\"page-content container-fluid\">\n \n <div class=\"card m-0 border-0\">\n <div class=\"card-header p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">{{ vendorProvider?.provider_name }}\n </h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body\">\n <div class=\"mt-3\">\n @if (fieldsArray.length > 0) {\n <div class=\"row\">\n <div class=\"col-xl-5 offset-xl-3\">\n <!-- <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">Provider</label>\n <div class=\"col-md-5\">\n <ng-select placeholder=\"Select Provider\" bindLabel=\"provider_name\"\n bindValue=\"id\" [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div> -->\n <!-- <pre>{{fieldsArray|json}}</pre> -->\n <formly-form [fields]=\"fieldsArray\" [model]=\"fieldsModel\" [form]=\"detailsForm\">\n </formly-form>\n </div>\n </div>\n }\n \n @if (fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer bg-light text-right\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"back()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n @if (buttonData) {\n <button type=\"submit\" class=\"btn btn-primary\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\"\n [disabled]=\"showLoader\">\n {{ buttonData?.field_title }}\n </button>\n }\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n </div>\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyBootstrapModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1$2.LegacyFormlyForm, selector: "formly-form" }, { kind: "component", type: NoDataComponent, selector: "sdk-no-data", inputs: ["title", "icon"] }, { kind: "component", type: BillWorkflowComponent, selector: "sdk-bill-workflow", inputs: ["billData", "selectedBill"], outputs: ["workflowCompleted"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
2512
2950
  }
2513
2951
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WorkFlowComponent, decorators: [{
2514
2952
  type: Component,
@@ -2558,7 +2996,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
2558
2996
  },
2559
2997
  ],
2560
2998
  }),
2561
- ], template: "\n\n@if (showWorkflowComponent) {\n \n <sdk-bill-workflow \n [selectedBill]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n \n \n}@else { \n <div class=\"content work-flow-content\">\n <header class=\"page-header work-flow-page-header d-flex align-items-center justify-content-between container-fluid\">\n <h1 class=\"page-title work-flow-page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"back()\">\n <i class=\"fas fa-angle-left me-1\"></i>{{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </header>\n \n <section class=\"page-content container-fluid work-flow-section\">\n \n <div class=\"card work-flow-card m-0\">\n <div class=\"card-header work-flow-card-header\">\n <h4 class=\"card-title work-flow-card-title m-0 text-dark\">{{ vendorProvider?.provider_name }}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal work-flow-form\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body work-flow-card-body\">\n <div class=\"work-flow-fields\">\n @if (fieldsArray.length > 0) {\n <div class=\"row justify-content-center\">\n <div class=\"col-12 work-flow-form-column\">\n <!-- <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">Provider</label>\n <div class=\"col-md-5\">\n <ng-select placeholder=\"Select Provider\" bindLabel=\"provider_name\"\n bindValue=\"id\" [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div> -->\n <!-- <pre>{{fieldsArray|json}}</pre> -->\n <formly-form [fields]=\"fieldsArray\" [model]=\"fieldsModel\" [form]=\"detailsForm\">\n </formly-form>\n </div>\n </div>\n }\n \n @if (fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer work-flow-footer bg-light d-flex justify-content-end flex-wrap gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n @if (buttonData) {\n <button type=\"submit\" class=\"btn btn-primary btn-sm\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\"\n [disabled]=\"showLoader || !detailsForm.valid\">\n {{ buttonData?.field_title }}\n </button>\n }\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n </div>\n}\n\n<style>\n .work-flow-content {\n overflow: visible;\n }\n\n .work-flow-page-header {\n margin-bottom: 0.5rem;\n }\n\n .work-flow-page-title {\n font-size: 0.95rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-section {\n max-width: 100%;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n }\n\n /* Narrow card: less empty chrome */\n .work-flow-card {\n max-width: 440px;\n margin-left: auto;\n margin-right: auto;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n overflow: visible;\n }\n\n .work-flow-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.4rem 0.6rem;\n }\n\n .work-flow-card-title {\n font-size: 0.85rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-card-body {\n padding: 0.85rem 0.75rem 1rem;\n border-bottom: 1px solid #e9ecef;\n }\n\n .work-flow-fields {\n margin-top: 0;\n }\n\n .work-flow-form-column {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n padding-left: 0;\n padding-right: 0;\n }\n\n .work-flow-footer {\n padding: 0.45rem 0.6rem;\n border-top: 1px solid #e9ecef;\n background: #fafbfc !important;\n }\n\n .work-flow-footer .btn {\n font-size: 0.7rem;\n padding: 0.18rem 0.45rem;\n line-height: 1.15;\n border-radius: 3px;\n }\n\n /*\n * Reference layout: each row centered in the card; compact inputs (~25\u201330% of card);\n * labels right-aligned next to the field.\n */\n .work-flow-card-body ::ng-deep formly-field {\n display: block;\n width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n margin-bottom: 0.65rem;\n align-items: center;\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .control-label {\n flex: 0 0 8rem;\n max-width: 8rem;\n min-width: 8rem;\n font-size: 0.72rem;\n font-weight: 500;\n color: #3d5a80;\n padding-top: 0;\n padding-right: 0.45rem;\n margin-bottom: 0;\n text-align: right;\n white-space: nowrap;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .col-md-8 {\n flex: 1 1 auto;\n max-width: none;\n width: auto;\n min-width: 0;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n display: block;\n width: 100%;\n max-width: 200px;\n box-sizing: border-box;\n font-size: 0.72rem;\n min-height: 26px;\n height: 26px;\n padding: 0.15rem 0.4rem;\n border-radius: 4px;\n line-height: 1.2;\n border: 1px solid #d8dee6;\n background-color: #fff;\n color: #334155;\n }\n\n .work-flow-card-body ::ng-deep .form-control::placeholder {\n color: #94a3b8;\n opacity: 1;\n font-size: 0.7rem;\n }\n\n .work-flow-card-body ::ng-deep textarea.form-control {\n height: auto !important;\n min-height: 3.25rem;\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .invalid-feedback {\n font-size: 0.65rem;\n margin-top: 0.1rem;\n }\n\n @media (max-width: 400px) {\n .work-flow-card {\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n max-width: 100%;\n }\n }\n\n</style>" }]
2999
+ ], template: "\n\n@if (showWorkflowComponent) {\n \n <sdk-bill-workflow \n [selectedBill]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n \n \n}@else { \n <div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>{{ 'LABEL_UTILITIES' | translate }}</h1>\n </div>\n </div>\n </header>\n \n <section class=\"page-content container-fluid\">\n \n <div class=\"card m-0 border-0\">\n <div class=\"card-header p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">{{ vendorProvider?.provider_name }}\n </h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body\">\n <div class=\"mt-3\">\n @if (fieldsArray.length > 0) {\n <div class=\"row\">\n <div class=\"col-xl-5 offset-xl-3\">\n <!-- <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">Provider</label>\n <div class=\"col-md-5\">\n <ng-select placeholder=\"Select Provider\" bindLabel=\"provider_name\"\n bindValue=\"id\" [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div> -->\n <!-- <pre>{{fieldsArray|json}}</pre> -->\n <formly-form [fields]=\"fieldsArray\" [model]=\"fieldsModel\" [form]=\"detailsForm\">\n </formly-form>\n </div>\n </div>\n }\n \n @if (fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer bg-light text-right\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"back()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n @if (buttonData) {\n <button type=\"submit\" class=\"btn btn-primary\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\"\n [disabled]=\"showLoader\">\n {{ buttonData?.field_title }}\n </button>\n }\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n </div>\n}" }]
2562
3000
  }], ctorParameters: () => [] });
2563
3001
 
2564
3002
  const REGION_COMMUNE_DATA = {
@@ -3438,6 +3876,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
3438
3876
  }], ctorParameters: () => [] });
3439
3877
 
3440
3878
  class UserProfileService {
3879
+ http = inject(HttpClient);
3880
+ config = inject(PaymentsConfigService);
3881
+ authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });
3882
+ get baseUrl() {
3883
+ return this.config.getConfig()?.baseUrl ?? '';
3884
+ }
3885
+ get defaultHeaders() {
3886
+ const cfg = this.config.getConfig();
3887
+ const fromConfig = (cfg?.defaultHeaders ?? {});
3888
+ const fromAuth = this.buildAuthHeaders();
3889
+ return { ...fromAuth, ...fromConfig };
3890
+ }
3891
+ buildAuthHeaders() {
3892
+ const headers = {};
3893
+ if (!this.authProvider)
3894
+ return headers;
3895
+ const token = this.authProvider.getToken();
3896
+ const companyId = this.authProvider.getCompanyId();
3897
+ const userId = this.authProvider.getUserId();
3898
+ if (token)
3899
+ headers['Authorization'] = token.startsWith('Bearer ') ? token : `Bearer ${token}`;
3900
+ if (companyId != null)
3901
+ headers['companyid'] = String(companyId);
3902
+ if (userId != null)
3903
+ headers['userid'] = String(userId);
3904
+ return headers;
3905
+ }
3906
+ getProfileProductsDetailsUsingJava(params = {}) {
3907
+ return this.http.get(`${this.baseUrl}/profile_threshold/profile_products`, {
3908
+ params,
3909
+ headers: this.defaultHeaders,
3910
+ });
3911
+ }
3912
+ getProfileProductChargesUsingJava(params = {}) {
3913
+ return this.http.get(`${this.baseUrl}/profile_threshold/profile_product_charges`, {
3914
+ params,
3915
+ headers: this.defaultHeaders,
3916
+ });
3917
+ }
3918
+ getUserProfileUsingJava(params = {}) {
3919
+ return this.http.get(`${this.baseUrl}/profile_threshold/user_profile`, {
3920
+ params,
3921
+ headers: this.defaultHeaders,
3922
+ });
3923
+ }
3924
+ getAgentProfileById(id, params = {}) {
3925
+ return this.http.get(`${this.baseUrl}/agent_profile_threshold/agent_profile/${id}`, {
3926
+ params,
3927
+ headers: this.defaultHeaders,
3928
+ });
3929
+ }
3930
+ getAgentProfileProductDetailsUsingJava(params = {}) {
3931
+ return this.http.get(`${this.baseUrl}/agent_profile_threshold/agent_profile_products`, {
3932
+ params,
3933
+ headers: this.defaultHeaders,
3934
+ });
3935
+ }
3936
+ getAgentUserProfile(params = {}) {
3937
+ return this.http.get(`${this.baseUrl}/agent_profile_threshold/agent_user_profiles`, {
3938
+ params,
3939
+ headers: this.defaultHeaders,
3940
+ });
3941
+ }
3441
3942
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UserProfileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3442
3943
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UserProfileService, providedIn: 'root' });
3443
3944
  }
@@ -3766,14 +4267,134 @@ var AuthenticationMethod;
3766
4267
  AuthenticationMethod["OTP"] = "OTP";
3767
4268
  })(AuthenticationMethod || (AuthenticationMethod = {}));
3768
4269
 
3769
- async function checkUserProfiles(_args) {
3770
- return null;
4270
+ async function checkUserProfiles(data) {
4271
+ const params = {};
4272
+ const userType = data?.userType;
4273
+ let profileData = {};
4274
+ let productExists = false;
4275
+ params['user_id'] = data?.userId ?? null;
4276
+ params['wallet_id'] = data?.walletId ?? null;
4277
+ params['currency_id'] = data?.currencyId ?? null;
4278
+ if (userType === USER_TYPES.AGENT) {
4279
+ const agentProfileResponse = await firstValueFrom(data.userProfileService.getAgentUserProfile(params));
4280
+ const userProfileData = agentProfileResponse?.data?.agent_user_profile;
4281
+ const profile = Array.isArray(userProfileData)
4282
+ ? userProfileData[0]
4283
+ : userProfileData
4284
+ ? userProfileData
4285
+ : null;
4286
+ if (isNotNull(profile)) {
4287
+ const profileId = (profileData['profileId'] = profile?.agent_profile_id);
4288
+ const agentProfileByIdResponse = await firstValueFrom(data.userProfileService.getAgentProfileById(profileId));
4289
+ profileData =
4290
+ isNotNull(agentProfileByIdResponse?.data?.agent_profile) && agentProfileByIdResponse?.success
4291
+ ? { ...agentProfileByIdResponse.data.agent_profile }
4292
+ : null;
4293
+ const productDetailsResponse = await firstValueFrom(data.userProfileService.getAgentProfileProductDetailsUsingJava({
4294
+ agent_profile_id: profileId,
4295
+ product_code: data?.product_code,
4296
+ }));
4297
+ productExists =
4298
+ isNotNull(productDetailsResponse?.data?.agent_profile_product) &&
4299
+ productDetailsResponse?.success;
4300
+ }
4301
+ }
4302
+ else {
4303
+ params['user_type'] = data?.userType ?? null;
4304
+ const userProfileResponse = await firstValueFrom(data.userProfileService.getUserProfileUsingJava(params));
4305
+ const userProfileData = isNotNull(userProfileResponse?.data?.user_profile)
4306
+ ? userProfileResponse.data.user_profile
4307
+ : null;
4308
+ if (isNotNull(userProfileData)) {
4309
+ const profileId = (profileData['id'] = userProfileData?.profile_id);
4310
+ const productDetailsResponse = await firstValueFrom(data.userProfileService.getProfileProductsDetailsUsingJava({
4311
+ profile_id: profileId,
4312
+ product_code: data?.product_code,
4313
+ }));
4314
+ productExists =
4315
+ isNotNull(productDetailsResponse?.data?.profile_product) && productDetailsResponse?.success;
4316
+ }
4317
+ }
4318
+ return productExists ? profileData : null;
3771
4319
  }
3772
- async function calculateCharges(_args) {
3773
- return null;
4320
+ async function calculateCharges(chargeParams) {
4321
+ const walletService = chargeParams.walletService;
4322
+ const userType = chargeParams.userType;
4323
+ let calculatedCharges = null;
4324
+ let calculateChargeResponse = null;
4325
+ let chargeListResponse = null;
4326
+ let agentChargeDetailsResponse = null;
4327
+ let profileProductChargesResponse = null;
4328
+ const params = {};
4329
+ params['wallet_id'] = chargeParams.walletId ?? null;
4330
+ params['currency_id'] = chargeParams.currencyId ?? null;
4331
+ params['product_code'] = chargeParams.productCode ?? null;
4332
+ params['txn_amount'] = chargeParams.amount ?? null;
4333
+ if (userType === USER_TYPES.AGENT) {
4334
+ params['tree_id'] = chargeParams.tree_id ?? null;
4335
+ params['tree_level_id'] = chargeParams.tree_level_id ?? null;
4336
+ calculateChargeResponse = await firstValueFrom(walletService.calculateAgentCharges(params));
4337
+ const listParams = {
4338
+ tree_id: chargeParams.tree_id ?? null,
4339
+ tree_level_id: chargeParams.tree_level_id ?? null,
4340
+ currency_id: chargeParams.currencyId ?? null,
4341
+ };
4342
+ chargeListResponse = await firstValueFrom(walletService.getAgentChargesListUsingJava(listParams));
4343
+ const agentChargeId = chargeListResponse?.success
4344
+ ? chargeListResponse?.data?.agent_charges?.[0]?.id
4345
+ : null;
4346
+ if (agentChargeId && chargeParams.productCode) {
4347
+ agentChargeDetailsResponse = await firstValueFrom(walletService.getAgentChargeDetailsByIdUsingJava({
4348
+ agent_charges_id: agentChargeId,
4349
+ product_code: chargeParams.productCode,
4350
+ }));
4351
+ }
4352
+ }
4353
+ else {
4354
+ params['profile_id'] = chargeParams.profileId ?? null;
4355
+ calculateChargeResponse = await firstValueFrom(walletService.calculateCharges(params));
4356
+ const userProfileService = chargeParams.userProfileService;
4357
+ const profileId = chargeParams.profileId;
4358
+ const productCode = chargeParams.productCode;
4359
+ if (userProfileService && profileId && productCode) {
4360
+ profileProductChargesResponse = await firstValueFrom(userProfileService.getProfileProductChargesUsingJava({
4361
+ profile_id: profileId,
4362
+ product_code: productCode,
4363
+ }));
4364
+ }
4365
+ }
4366
+ calculatedCharges =
4367
+ isNotNull(calculateChargeResponse?.data?.charges_info) && calculateChargeResponse?.success
4368
+ ? calculateChargeResponse.data.charges_info
4369
+ : null;
4370
+ const result = calculatedCharges ? { ...calculatedCharges } : null;
4371
+ if (result && userType === USER_TYPES.AGENT && agentChargeDetailsResponse?.success) {
4372
+ const raw = agentChargeDetailsResponse?.data?.agent_charge_detail ??
4373
+ agentChargeDetailsResponse?.data?.agent_charge_details;
4374
+ const detail = Array.isArray(raw) ? raw[0] : raw;
4375
+ if (detail?.allow_shared_charges) {
4376
+ result.allow_shared_charges = detail.allow_shared_charges;
4377
+ result.share_charge_config_id = detail.share_charge_config_id ?? null;
4378
+ }
4379
+ }
4380
+ if (result && userType !== USER_TYPES.AGENT && profileProductChargesResponse?.success) {
4381
+ const raw = profileProductChargesResponse?.data?.profile_product_charges ??
4382
+ profileProductChargesResponse?.data?.profile_product_charges;
4383
+ const detail = Array.isArray(raw) ? raw[0] : raw;
4384
+ if (detail?.allow_shared_charges) {
4385
+ result.allow_shared_charges = detail.allow_shared_charges;
4386
+ result.share_charge_config_id = detail.share_charge_config_id ?? null;
4387
+ }
4388
+ }
4389
+ return result;
3774
4390
  }
3775
- async function getUserConfigDetails(_args) {
3776
- return null;
4391
+ async function getUserConfigDetails(userConfigDetails) {
4392
+ const params = {};
4393
+ if (userConfigDetails?.userId) {
4394
+ params['user_id'] = userConfigDetails.userId;
4395
+ }
4396
+ const userConfig = await firstValueFrom(userConfigDetails.userService.getUserConfig(params));
4397
+ return userConfig?.data?.user_config?.[0];
3777
4398
  }
3778
4399
 
3779
4400
  /// <reference path="../globals.d.ts" />
@@ -4055,10 +4676,13 @@ class TopupAndBillpaymentReviewComponent extends TransactionClass {
4055
4676
  this.userDetail();
4056
4677
  }
4057
4678
  async calculatCharge() {
4679
+ const cfg = (this.paymentsConfigService.getConfig() ?? {});
4680
+ const cfgHeaders = (cfg?.defaultHeaders ?? {});
4681
+ const userId = (cfgHeaders["userid"] ?? cfgHeaders["userId"] ?? cfg?.userId ?? "").toString().trim();
4058
4682
  this.showLoader = true;
4059
4683
  let profileDetails = {
4060
4684
  "userProfileService": this.userprofileService,
4061
- "userId": this.dataService.getWalletUserAccountId(),
4685
+ "userId": userId,
4062
4686
  "walletId": this.walletId,
4063
4687
  "userType": USER_TYPES.AGENT,
4064
4688
  "currencyId": this.currencyId,
@@ -5243,12 +5867,24 @@ class UtilityPaymentsContainerComponent {
5243
5867
  }
5244
5868
  buildRuntimeConfig(value) {
5245
5869
  const normalizedBaseUrl = (value.baseUrl ?? '').trim().replace(/\/+$/, '');
5246
- const token = (value.token ?? '').trim();
5247
- const companyId = (value.companyId ?? '').trim();
5248
- const userId = (value.userId ?? '').trim();
5870
+ const incomingHeaders = (value.defaultHeaders ?? {});
5871
+ const normalizedExtraHeaders = Object.entries(incomingHeaders).reduce((acc, [key, rawValue]) => {
5872
+ if (['Authorization', 'authorization', 'companyid', 'companyId', 'userid', 'userId'].includes(key)) {
5873
+ return acc;
5874
+ }
5875
+ const normalizedValue = this.normalizeHeaderValue(rawValue);
5876
+ if (normalizedValue) {
5877
+ acc[key] = normalizedValue;
5878
+ }
5879
+ return acc;
5880
+ }, {});
5881
+ const token = this.normalizeHeaderValue(value.token ?? incomingHeaders['Authorization'] ?? incomingHeaders['authorization']);
5882
+ const companyId = this.normalizeHeaderValue(value.companyId ?? incomingHeaders['companyid'] ?? incomingHeaders['companyId']);
5883
+ const userId = this.normalizeHeaderValue(value.userId ?? incomingHeaders['userid'] ?? incomingHeaders['userId']);
5249
5884
  return {
5250
5885
  baseUrl: normalizedBaseUrl,
5251
5886
  defaultHeaders: {
5887
+ ...normalizedExtraHeaders,
5252
5888
  ...(token ? { Authorization: token.includes(' ') ? token : `Bearer ${token}` } : {}),
5253
5889
  ...(companyId ? { companyid: companyId } : {}),
5254
5890
  ...(userId ? { userid: userId } : {}),
@@ -5256,18 +5892,18 @@ class UtilityPaymentsContainerComponent {
5256
5892
  };
5257
5893
  }
5258
5894
  normalizeConfig(inputConfig) {
5259
- const formValue = this.configForm.getRawValue();
5260
5895
  const incomingHeaders = (inputConfig?.defaultHeaders ?? {});
5261
- const tokenFromIncoming = incomingHeaders['Authorization'] ?? inputConfig?.token ?? '';
5262
- const companyIdFromIncoming = incomingHeaders['companyid'] ?? inputConfig?.companyId ?? '';
5263
- const userIdFromIncoming = incomingHeaders['userid'] ?? inputConfig?.userId ?? '';
5264
5896
  return this.buildRuntimeConfig({
5265
- baseUrl: inputConfig?.baseUrl ?? formValue.baseUrl ?? '',
5266
- token: tokenFromIncoming || formValue.token || '',
5267
- companyId: companyIdFromIncoming || formValue.companyId || '',
5268
- userId: userIdFromIncoming || formValue.userId || '',
5897
+ baseUrl: inputConfig?.baseUrl ?? '',
5898
+ token: inputConfig?.token ?? incomingHeaders['Authorization'] ?? incomingHeaders['authorization'] ?? '',
5899
+ companyId: inputConfig?.companyId ?? incomingHeaders['companyid'] ?? incomingHeaders['companyId'] ?? '',
5900
+ userId: inputConfig?.userId ?? incomingHeaders['userid'] ?? incomingHeaders['userId'] ?? '',
5901
+ defaultHeaders: incomingHeaders,
5269
5902
  });
5270
5903
  }
5904
+ normalizeHeaderValue(value) {
5905
+ return value == null ? '' : String(value).trim();
5906
+ }
5271
5907
  loadRuntimeConfigFromStorage() {
5272
5908
  try {
5273
5909
  const raw = localStorage.getItem(this.runtimeConfigStorageKey);
@@ -5394,7 +6030,7 @@ class UtilityPaymentsContainerComponent {
5394
6030
  }
5395
6031
  }
5396
6032
  </div>
5397
- `, isInline: true, styles: [":host{display:block}:host ::ng-deep .sdk-utility-payments-container{font-size:13px;line-height:1.3}:host ::ng-deep .content{padding:.75rem!important}:host ::ng-deep .page-header{margin-bottom:.6rem!important}:host ::ng-deep .page-header h1{font-size:1.25rem!important;margin-bottom:.25rem!important}:host ::ng-deep sdk-utilities .utilities-title{font-size:1.875rem!important;font-weight:700!important;line-height:1.2!important;letter-spacing:-.02em}:host ::ng-deep .card{border-radius:8px}:host ::ng-deep .card-header{padding:.6rem .9rem!important}:host ::ng-deep .card-title{font-size:1rem!important;margin-bottom:0!important}:host ::ng-deep .card-body{padding:.8rem!important}:host ::ng-deep .form-control,:host ::ng-deep .ng-select .ng-select-container{min-height:34px!important;font-size:13px!important}:host ::ng-deep .form-label,:host ::ng-deep label{font-size:13px!important;margin-bottom:.25rem!important}:host ::ng-deep .btn{font-size:13px!important;padding:.3rem .65rem!important}:host ::ng-deep .work-flow-card{max-width:400px!important;width:100%!important;margin-left:auto!important;margin-right:auto!important}:host ::ng-deep .work-flow-page-header .page-title,:host ::ng-deep .work-flow-page-header h1{font-size:.95rem!important}:host ::ng-deep .work-flow-card .card-header{padding:.4rem .6rem!important}:host ::ng-deep .work-flow-card .card-title{font-size:.85rem!important}:host ::ng-deep .work-flow-card .card-body{padding:.55rem .65rem .7rem!important}:host ::ng-deep .work-flow-card .form-group.form-row{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center!important;margin-bottom:.55rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>label.control-label{flex:0 0 8.5rem!important;max-width:8.5rem!important;width:8.5rem!important;margin-bottom:0!important;padding-top:0!important;text-align:right!important;font-size:.72rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>.col-md-8{flex:1 1 auto!important;max-width:none!important;width:auto!important}:host ::ng-deep .work-flow-card .form-control{min-height:26px!important;height:26px!important;max-width:200px!important;width:100%!important;font-size:.72rem!important;padding:.1rem .35rem!important}:host ::ng-deep .work-flow-card textarea.form-control{height:auto!important;min-height:3rem!important;max-width:100%!important}:host ::ng-deep .work-flow-card .work-flow-footer .btn{font-size:.7rem!important;padding:.15rem .45rem!important}:host ::ng-deep .vendor-products-shell>.card-body{padding:1.25rem 1.35rem 1.5rem!important}:host ::ng-deep .vendor-products-shell .vendor-product-card .form-control{min-height:auto!important;height:auto!important;max-width:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: UtilitiesComponent, selector: "sdk-utilities" }, { kind: "component", type: VendorProvidersComponent, selector: "sdk-vendor-providers" }, { kind: "component", type: WorkFlowComponent, selector: "sdk-work-flow" }, { kind: "component", type: RegionCommuneComponent, selector: "sdk-region-commune" }, { kind: "component", type: VendorProductsComponent, selector: "sdk-vendor-products", inputs: ["billData"], outputs: ["workflowCompleted"] }, { kind: "component", type: VendorPlansComponent, selector: "sdk-vendor-plans" }, { kind: "component", type: ViewBillsComponent, selector: "sdk-view-bills" }, { kind: "component", type: TopupAndBillpaymentReviewComponent, selector: "sdk-topup-and-billpayment-review" }] });
6033
+ `, isInline: true, styles: [":host{display:block}:host ::ng-deep .sdk-utility-payments-container{font-size:13px;line-height:1.3}:host ::ng-deep .content{padding:.25rem!important}:host ::ng-deep .page-header{margin-bottom:.6rem!important}:host ::ng-deep .page-header h1{font-size:1.75rem!important;margin-bottom:.25rem!important}:host ::ng-deep sdk-utilities .utilities-title{font-size:1.875rem!important;font-weight:700!important;line-height:1.2!important;letter-spacing:-.02em}:host ::ng-deep .card{border-radius:8px}:host ::ng-deep .card-header{padding:.6rem .9rem!important}:host ::ng-deep .card-title{font-size:1rem!important;margin-bottom:0!important}:host ::ng-deep .card-body{padding:.8rem!important}:host ::ng-deep .form-control,:host ::ng-deep .ng-select .ng-select-container{min-height:34px!important;font-size:13px!important}:host ::ng-deep .form-label,:host ::ng-deep label{font-size:13px!important;margin-bottom:.25rem!important}:host ::ng-deep .btn{font-size:13px!important;padding:.3rem .65rem!important}:host ::ng-deep .work-flow-card{max-width:400px!important;width:100%!important;margin-left:auto!important;margin-right:auto!important}:host ::ng-deep .work-flow-page-header .page-title,:host ::ng-deep .work-flow-page-header h1{font-size:.95rem!important}:host ::ng-deep .work-flow-card .card-header{padding:.4rem .6rem!important}:host ::ng-deep .work-flow-card .card-title{font-size:.85rem!important}:host ::ng-deep .work-flow-card .card-body{padding:.55rem .65rem .7rem!important}:host ::ng-deep .work-flow-card .form-group.form-row{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center!important;margin-bottom:.55rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>label.control-label{flex:0 0 8.5rem!important;max-width:8.5rem!important;width:8.5rem!important;margin-bottom:0!important;padding-top:0!important;text-align:right!important;font-size:.72rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>.col-md-8{flex:1 1 auto!important;max-width:none!important;width:auto!important}:host ::ng-deep .work-flow-card .form-control{min-height:26px!important;height:26px!important;max-width:200px!important;width:60%!important;font-size:.72rem!important;padding:.1rem .35rem!important}:host ::ng-deep .work-flow-card textarea.form-control{height:auto!important;min-height:3rem!important;max-width:100%!important}:host ::ng-deep .work-flow-card .work-flow-footer .btn{font-size:.7rem!important;padding:.15rem .45rem!important}:host ::ng-deep .vendor-products-shell>.card-body{padding:1.25rem 1.35rem 1.5rem!important}:host ::ng-deep .vendor-products-shell .vendor-product-card .form-control{min-height:auto!important;height:auto!important;max-width:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: UtilitiesComponent, selector: "sdk-utilities" }, { kind: "component", type: VendorProvidersComponent, selector: "sdk-vendor-providers" }, { kind: "component", type: WorkFlowComponent, selector: "sdk-work-flow" }, { kind: "component", type: RegionCommuneComponent, selector: "sdk-region-commune" }, { kind: "component", type: VendorProductsComponent, selector: "sdk-vendor-products", inputs: ["billData"], outputs: ["workflowCompleted"] }, { kind: "component", type: VendorPlansComponent, selector: "sdk-vendor-plans" }, { kind: "component", type: ViewBillsComponent, selector: "sdk-view-bills" }, { kind: "component", type: TopupAndBillpaymentReviewComponent, selector: "sdk-topup-and-billpayment-review" }] });
5398
6034
  }
5399
6035
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UtilityPaymentsContainerComponent, decorators: [{
5400
6036
  type: Component,
@@ -5494,7 +6130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
5494
6130
  }
5495
6131
  }
5496
6132
  </div>
5497
- `, styles: [":host{display:block}:host ::ng-deep .sdk-utility-payments-container{font-size:13px;line-height:1.3}:host ::ng-deep .content{padding:.75rem!important}:host ::ng-deep .page-header{margin-bottom:.6rem!important}:host ::ng-deep .page-header h1{font-size:1.25rem!important;margin-bottom:.25rem!important}:host ::ng-deep sdk-utilities .utilities-title{font-size:1.875rem!important;font-weight:700!important;line-height:1.2!important;letter-spacing:-.02em}:host ::ng-deep .card{border-radius:8px}:host ::ng-deep .card-header{padding:.6rem .9rem!important}:host ::ng-deep .card-title{font-size:1rem!important;margin-bottom:0!important}:host ::ng-deep .card-body{padding:.8rem!important}:host ::ng-deep .form-control,:host ::ng-deep .ng-select .ng-select-container{min-height:34px!important;font-size:13px!important}:host ::ng-deep .form-label,:host ::ng-deep label{font-size:13px!important;margin-bottom:.25rem!important}:host ::ng-deep .btn{font-size:13px!important;padding:.3rem .65rem!important}:host ::ng-deep .work-flow-card{max-width:400px!important;width:100%!important;margin-left:auto!important;margin-right:auto!important}:host ::ng-deep .work-flow-page-header .page-title,:host ::ng-deep .work-flow-page-header h1{font-size:.95rem!important}:host ::ng-deep .work-flow-card .card-header{padding:.4rem .6rem!important}:host ::ng-deep .work-flow-card .card-title{font-size:.85rem!important}:host ::ng-deep .work-flow-card .card-body{padding:.55rem .65rem .7rem!important}:host ::ng-deep .work-flow-card .form-group.form-row{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center!important;margin-bottom:.55rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>label.control-label{flex:0 0 8.5rem!important;max-width:8.5rem!important;width:8.5rem!important;margin-bottom:0!important;padding-top:0!important;text-align:right!important;font-size:.72rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>.col-md-8{flex:1 1 auto!important;max-width:none!important;width:auto!important}:host ::ng-deep .work-flow-card .form-control{min-height:26px!important;height:26px!important;max-width:200px!important;width:100%!important;font-size:.72rem!important;padding:.1rem .35rem!important}:host ::ng-deep .work-flow-card textarea.form-control{height:auto!important;min-height:3rem!important;max-width:100%!important}:host ::ng-deep .work-flow-card .work-flow-footer .btn{font-size:.7rem!important;padding:.15rem .45rem!important}:host ::ng-deep .vendor-products-shell>.card-body{padding:1.25rem 1.35rem 1.5rem!important}:host ::ng-deep .vendor-products-shell .vendor-product-card .form-control{min-height:auto!important;height:auto!important;max-width:none!important}\n"] }]
6133
+ `, styles: [":host{display:block}:host ::ng-deep .sdk-utility-payments-container{font-size:13px;line-height:1.3}:host ::ng-deep .content{padding:.25rem!important}:host ::ng-deep .page-header{margin-bottom:.6rem!important}:host ::ng-deep .page-header h1{font-size:1.75rem!important;margin-bottom:.25rem!important}:host ::ng-deep sdk-utilities .utilities-title{font-size:1.875rem!important;font-weight:700!important;line-height:1.2!important;letter-spacing:-.02em}:host ::ng-deep .card{border-radius:8px}:host ::ng-deep .card-header{padding:.6rem .9rem!important}:host ::ng-deep .card-title{font-size:1rem!important;margin-bottom:0!important}:host ::ng-deep .card-body{padding:.8rem!important}:host ::ng-deep .form-control,:host ::ng-deep .ng-select .ng-select-container{min-height:34px!important;font-size:13px!important}:host ::ng-deep .form-label,:host ::ng-deep label{font-size:13px!important;margin-bottom:.25rem!important}:host ::ng-deep .btn{font-size:13px!important;padding:.3rem .65rem!important}:host ::ng-deep .work-flow-card{max-width:400px!important;width:100%!important;margin-left:auto!important;margin-right:auto!important}:host ::ng-deep .work-flow-page-header .page-title,:host ::ng-deep .work-flow-page-header h1{font-size:.95rem!important}:host ::ng-deep .work-flow-card .card-header{padding:.4rem .6rem!important}:host ::ng-deep .work-flow-card .card-title{font-size:.85rem!important}:host ::ng-deep .work-flow-card .card-body{padding:.55rem .65rem .7rem!important}:host ::ng-deep .work-flow-card .form-group.form-row{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center!important;margin-bottom:.55rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>label.control-label{flex:0 0 8.5rem!important;max-width:8.5rem!important;width:8.5rem!important;margin-bottom:0!important;padding-top:0!important;text-align:right!important;font-size:.72rem!important}:host ::ng-deep .work-flow-card .form-group.form-row>.col-md-8{flex:1 1 auto!important;max-width:none!important;width:auto!important}:host ::ng-deep .work-flow-card .form-control{min-height:26px!important;height:26px!important;max-width:200px!important;width:60%!important;font-size:.72rem!important;padding:.1rem .35rem!important}:host ::ng-deep .work-flow-card textarea.form-control{height:auto!important;min-height:3rem!important;max-width:100%!important}:host ::ng-deep .work-flow-card .work-flow-footer .btn{font-size:.7rem!important;padding:.15rem .45rem!important}:host ::ng-deep .vendor-products-shell>.card-body{padding:1.25rem 1.35rem 1.5rem!important}:host ::ng-deep .vendor-products-shell .vendor-product-card .form-control{min-height:auto!important;height:auto!important;max-width:none!important}\n"] }]
5498
6134
  }], propDecorators: { config: [{
5499
6135
  type: Input
5500
6136
  }] } });