@posiwise/admin-module 0.0.237 → 0.0.238
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.
|
@@ -7,7 +7,7 @@ import { Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
|
7
7
|
import * as i13$2 from '@angular-magic/ngx-gp-autocomplete';
|
|
8
8
|
import { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';
|
|
9
9
|
import * as i1 from '@posiwise/admin-module-utils';
|
|
10
|
-
import { AppAdmin, PAYOUT_PROVIDERS, DEFAULT_PAYOUT_PROVIDER, isKnownPayoutProvider, clearPayoutValidators, patchPayoutDetails, applyPayoutValidators,
|
|
10
|
+
import { AppAdmin, PAYOUT_PROVIDERS, DEFAULT_PAYOUT_PROVIDER, isKnownPayoutProvider, clearPayoutValidators, patchPayoutDetails, applyPayoutValidators, payoutProviderDefinition, buildPayoutDetails, AdminService, AdminDataService } from '@posiwise/admin-module-utils';
|
|
11
11
|
import { AppConfigService } from '@posiwise/app-config-service';
|
|
12
12
|
import * as i5$2 from '@posiwise/app-loader';
|
|
13
13
|
import { AppLoaderModule } from '@posiwise/app-loader';
|
|
@@ -6901,16 +6901,8 @@ class AgentDetailsComponent extends AppBaseComponent {
|
|
|
6901
6901
|
applyPayoutValidators(this.form, provider);
|
|
6902
6902
|
this.cdr.markForCheck();
|
|
6903
6903
|
}
|
|
6904
|
-
/** Only the selected rail's fields — a SWIFT code and a domestic routing
|
|
6905
|
-
* code are alternatives, never both. */
|
|
6906
6904
|
get payoutFields() {
|
|
6907
|
-
return
|
|
6908
|
-
}
|
|
6909
|
-
/** The rail dropdown changes which fields are required, so validators are
|
|
6910
|
-
* re-pointed exactly as on a provider change. */
|
|
6911
|
-
onTransferMethodChange() {
|
|
6912
|
-
applyPayoutValidators(this.form, this.form.get('payout_provider').value);
|
|
6913
|
-
this.cdr.markForCheck();
|
|
6905
|
+
return payoutProviderDefinition(this.form.get('payout_provider').value).fields;
|
|
6914
6906
|
}
|
|
6915
6907
|
updateDetails() {
|
|
6916
6908
|
this.submitted = true;
|
|
@@ -6970,7 +6962,7 @@ class AgentDetailsComponent extends AppBaseComponent {
|
|
|
6970
6962
|
super.ngOnDestroy();
|
|
6971
6963
|
}
|
|
6972
6964
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AgentDetailsComponent, deps: [{ token: i1.AdminService }, { token: i1$1.GroupService }, { token: i2.NgbDatepickerConfig }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6973
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AgentDetailsComponent, isStandalone: false, selector: "pw-agent-details", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 mt-4 d-flex\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <span id=\"subscription-agents-ambassador-label\" class=\"pw-label-style\">Ambassador</span>\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n [attr.aria-labelledby]=\"'subscription-agents-ambassador-label'\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-percentage\">Percentage</label>\n <input type=\"text\"\n id=\"subscription-agents-percentage\"\n class=\"form-control\"\n formControlName=\"percentage\" name=\"input_percentage_1\"/>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-end_date\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-end_date\"\n name=\"end_date\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render.\n Gated on the API response (AI54) \u2014 the control defaults to PayPal, so\n rendering it early would assert the wrong payout method as fact. -->\n @if (!payoutLoaded) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-payout_provider\" class=\"pw-label-style\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n </div>\n\n @if (!payoutProviderSupported) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-9 col-md-6\">\n <div class=\"alert alert-warning mb-0\">\n {{ 'Admin.Subscriptions.Payout.UnsupportedProvider' | transloco }}\n </div>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n @for (field of (payoutProviderSupported ? payoutFields : []); track field.control) {\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label [attr.for]=\"'subscription-agents-' + field.control\">\n {{ field.labelKey | transloco }}\n </label>\n <!-- Gated on `touched`, not `submitted`: @ValidateForm returns before\n the method body runs when the form is invalid, so `submitted`\n never becomes true on a failed submit. The decorator does call\n markAllAsTouched(). -->\n @if (field.options) {\n <!-- The rail drives which fields below are required, so a change\n has to re-point the validators, not just repaint. -->\n <p-select\n [inputId]=\"'subscription-agents-' + field.control\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"field.options\"\n optionLabel=\"labelKey\"\n optionValue=\"value\"\n [formControlName]=\"field.control\"\n (onChange)=\"onTransferMethodChange()\">\n <ng-template let-option pTemplate=\"item\">{{ option.labelKey | transloco }}</ng-template>\n <ng-template let-option pTemplate=\"selectedItem\">{{ option.labelKey | transloco }}</ng-template>\n </p-select>\n } @else {\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-' + field.control\"\n [formControlName]=\"field.control\"\n [attr.aria-invalid]=\"form.get(field.control).touched && form.get(field.control).invalid\"\n [ngClass]=\"{'is-invalid': form.get(field.control).touched && form.get(field.control).errors}\"\n autocomplete=\"off\"/>\n }\n @if (form.get(field.control).touched && form.get(field.control).errors?.required) {\n <div class=\"invalid-feedback d-block\">\n {{ 'Admin.Subscriptions.Payout.FieldRequired' | transloco }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4$2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i14.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
|
|
6965
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AgentDetailsComponent, isStandalone: false, selector: "pw-agent-details", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 mt-4 d-flex\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <span id=\"subscription-agents-ambassador-label\" class=\"pw-label-style\">Ambassador</span>\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n [attr.aria-labelledby]=\"'subscription-agents-ambassador-label'\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-percentage\">Percentage</label>\n <input type=\"text\"\n id=\"subscription-agents-percentage\"\n class=\"form-control\"\n formControlName=\"percentage\" name=\"input_percentage_1\"/>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-end_date\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-end_date\"\n name=\"end_date\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render.\n Gated on the API response (AI54) \u2014 the control defaults to PayPal, so\n rendering it early would assert the wrong payout method as fact. -->\n @if (!payoutLoaded) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-payout_provider\" class=\"pw-label-style\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n </div>\n\n @if (!payoutProviderSupported) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-9 col-md-6\">\n <div class=\"alert alert-warning mb-0\">\n {{ 'Admin.Subscriptions.Payout.UnsupportedProvider' | transloco }}\n </div>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n @for (field of (payoutProviderSupported ? payoutFields : []); track field.control) {\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label [attr.for]=\"'subscription-agents-' + field.control\">\n {{ field.labelKey | transloco }}\n </label>\n <!-- Gated on `touched`, not `submitted`: @ValidateForm returns before\n the method body runs when the form is invalid, so `submitted`\n never becomes true on a failed submit. The decorator does call\n markAllAsTouched(). -->\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-' + field.control\"\n [formControlName]=\"field.control\"\n [attr.aria-invalid]=\"form.get(field.control).touched && form.get(field.control).invalid\"\n [ngClass]=\"{'is-invalid': form.get(field.control).touched && form.get(field.control).errors}\"\n autocomplete=\"off\"/>\n @if (form.get(field.control).touched && form.get(field.control).errors?.required) {\n <div class=\"invalid-feedback d-block\">\n {{ 'Admin.Subscriptions.Payout.FieldRequired' | transloco }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "component", type: i4$2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i14.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
|
|
6974
6966
|
}
|
|
6975
6967
|
__decorate([
|
|
6976
6968
|
ValidateForm('form'),
|
|
@@ -6980,7 +6972,7 @@ __decorate([
|
|
|
6980
6972
|
], AgentDetailsComponent.prototype, "updateDetails", null);
|
|
6981
6973
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AgentDetailsComponent, decorators: [{
|
|
6982
6974
|
type: Component,
|
|
6983
|
-
args: [{ selector: 'pw-agent-details', standalone: false, template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 mt-4 d-flex\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <span id=\"subscription-agents-ambassador-label\" class=\"pw-label-style\">Ambassador</span>\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n [attr.aria-labelledby]=\"'subscription-agents-ambassador-label'\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-percentage\">Percentage</label>\n <input type=\"text\"\n id=\"subscription-agents-percentage\"\n class=\"form-control\"\n formControlName=\"percentage\" name=\"input_percentage_1\"/>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-end_date\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-end_date\"\n name=\"end_date\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render.\n Gated on the API response (AI54) \u2014 the control defaults to PayPal, so\n rendering it early would assert the wrong payout method as fact. -->\n @if (!payoutLoaded) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-payout_provider\" class=\"pw-label-style\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n </div>\n\n @if (!payoutProviderSupported) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-9 col-md-6\">\n <div class=\"alert alert-warning mb-0\">\n {{ 'Admin.Subscriptions.Payout.UnsupportedProvider' | transloco }}\n </div>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n @for (field of (payoutProviderSupported ? payoutFields : []); track field.control) {\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label [attr.for]=\"'subscription-agents-' + field.control\">\n {{ field.labelKey | transloco }}\n </label>\n <!-- Gated on `touched`, not `submitted`: @ValidateForm returns before\n the method body runs when the form is invalid, so `submitted`\n never becomes true on a failed submit. The decorator does call\n markAllAsTouched(). -->\n
|
|
6975
|
+
args: [{ selector: 'pw-agent-details', standalone: false, template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 mt-4 d-flex\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <span id=\"subscription-agents-ambassador-label\" class=\"pw-label-style\">Ambassador</span>\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n [attr.aria-labelledby]=\"'subscription-agents-ambassador-label'\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-percentage\">Percentage</label>\n <input type=\"text\"\n id=\"subscription-agents-percentage\"\n class=\"form-control\"\n formControlName=\"percentage\" name=\"input_percentage_1\"/>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-end_date\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-end_date\"\n name=\"end_date\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render.\n Gated on the API response (AI54) \u2014 the control defaults to PayPal, so\n rendering it early would assert the wrong payout method as fact. -->\n @if (!payoutLoaded) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"subscription-agents-payout_provider\" class=\"pw-label-style\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n </div>\n\n @if (!payoutProviderSupported) {\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-9 col-md-6\">\n <div class=\"alert alert-warning mb-0\">\n {{ 'Admin.Subscriptions.Payout.UnsupportedProvider' | transloco }}\n </div>\n </div>\n </div>\n }\n\n <div class=\"row\" [hidden]=\"!payoutLoaded\">\n @for (field of (payoutProviderSupported ? payoutFields : []); track field.control) {\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label [attr.for]=\"'subscription-agents-' + field.control\">\n {{ field.labelKey | transloco }}\n </label>\n <!-- Gated on `touched`, not `submitted`: @ValidateForm returns before\n the method body runs when the form is invalid, so `submitted`\n never becomes true on a failed submit. The decorator does call\n markAllAsTouched(). -->\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-' + field.control\"\n [formControlName]=\"field.control\"\n [attr.aria-invalid]=\"form.get(field.control).touched && form.get(field.control).invalid\"\n [ngClass]=\"{'is-invalid': form.get(field.control).touched && form.get(field.control).errors}\"\n autocomplete=\"off\"/>\n @if (form.get(field.control).touched && form.get(field.control).errors?.required) {\n <div class=\"invalid-feedback d-block\">\n {{ 'Admin.Subscriptions.Payout.FieldRequired' | transloco }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n" }]
|
|
6984
6976
|
}], ctorParameters: () => [{ type: i1.AdminService }, { type: i1$1.GroupService }, { type: i2.NgbDatepickerConfig }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { updateDetails: [] } });
|
|
6985
6977
|
|
|
6986
6978
|
class SubscriptionProductsComponent extends AppBaseComponent {
|
|
@@ -7494,14 +7486,8 @@ class SubscriptionAgentsListComponent extends AppBaseComponent {
|
|
|
7494
7486
|
}
|
|
7495
7487
|
this.filteredUsers = values;
|
|
7496
7488
|
}
|
|
7497
|
-
/** Only the selected rail's fields — see visiblePayoutFields. */
|
|
7498
7489
|
get payoutFields() {
|
|
7499
|
-
return
|
|
7500
|
-
}
|
|
7501
|
-
/** The rail changes which fields are required, so it re-syncs validators
|
|
7502
|
-
* exactly as a provider change does. */
|
|
7503
|
-
onTransferMethodChange() {
|
|
7504
|
-
this.syncPayoutValidators();
|
|
7490
|
+
return payoutProviderDefinition(this.formEmbassador.get('payout_provider').value).fields;
|
|
7505
7491
|
}
|
|
7506
7492
|
/**
|
|
7507
7493
|
* This form creates ONE agent per selected ambassador, but a payout
|
|
@@ -7512,7 +7498,19 @@ class SubscriptionAgentsListComponent extends AppBaseComponent {
|
|
|
7512
7498
|
* their destination on the edit screen.
|
|
7513
7499
|
*/
|
|
7514
7500
|
get isSingleAmbassadorSelected() {
|
|
7515
|
-
return
|
|
7501
|
+
return this.selectedAmbassadorCount === 1;
|
|
7502
|
+
}
|
|
7503
|
+
/**
|
|
7504
|
+
* Only a genuine MULTI-selection gets the bulk hint. Gating it on
|
|
7505
|
+
* `!isSingleAmbassadorSelected` also caught the zero-selected case, so a
|
|
7506
|
+
* blank form explained bulk-add behaviour before anything had been picked —
|
|
7507
|
+
* and the message then vanished the moment one ambassador was chosen.
|
|
7508
|
+
*/
|
|
7509
|
+
get isBulkAmbassadorSelection() {
|
|
7510
|
+
return this.selectedAmbassadorCount > 1;
|
|
7511
|
+
}
|
|
7512
|
+
get selectedAmbassadorCount() {
|
|
7513
|
+
return (this.formEmbassador.get('email').value ?? []).length;
|
|
7516
7514
|
}
|
|
7517
7515
|
onPayoutProviderChange(_provider) {
|
|
7518
7516
|
this.syncPayoutValidators();
|
|
@@ -7599,11 +7597,11 @@ class SubscriptionAgentsListComponent extends AppBaseComponent {
|
|
|
7599
7597
|
});
|
|
7600
7598
|
}
|
|
7601
7599
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SubscriptionAgentsListComponent, deps: [{ token: i1.AdminService }, { token: i2.NgbDateParserFormatter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i3$2.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7602
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: SubscriptionAgentsListComponent, isStandalone: false, selector: "pw-subscription-agents-list", usesInheritance: true, ngImport: i0, template: "@if (!newEmbass) {\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\n @if (!isLoaded) {\n <p-progressSpinner> </p-progressSpinner>\n }\n </div>\n <div class=\"primeng-datatable-container actions-collapsed table-responsive mt-0\"\n [class.hideTable]=\"totalUnfilteredCount === 0\">\n <p-table #dt\n [value]=\"allAgents\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"subscription-agents-list-search\"\n name=\"subscription-agents-list-search\"\n [(ngModel)]=\"searchText\"\n pInputText\n placeholder=\"Search ambassadors...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" />\n </p-iconfield>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li pTooltip=\"Edit\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscriptions/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li pTooltip=\"Delete\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n (keydown.enter)=\"onDelete(agent?.user_id)\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n @if (totalRecords !== 0) {\n <pw-records-summary [showing]=\"dt?.value?.length ?? 0\" [total]=\"totalRecords\" />\n }\n </div>\n @if (totalRecords === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n }\n}\n@if (newEmbass) {\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n class=\"mt-4\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" id=\"input_percentage_2\" name=\"input_percentage_2\"/>\n </div>\n <div class=\"col\">\n <label for=\"subscription-agents-list-endDate\" class=\"visually-hidden\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-list-endDate\"\n name=\"endDate\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"endDate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.open()\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render. -->\n <div class=\"row mt-3\">\n <!-- Explicit responsive columns, not a bare `col`: Bootstrap's auto\n columns never wrap, so with a dozen Airwallex fields in this row\n each one collapsed to ~24px at mobile width. -->\n <div class=\"col-12 col-sm-6 col-md-4 col-lg-3 mb-2\">\n <label for=\"subscription-agents-list-payout_provider\" class=\"visually-hidden\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-list-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n @if (isSingleAmbassadorSelected) {\n @for (field of payoutFields; track field.control) {\n <div class=\"col-12 col-sm-6 col-md-4 col-lg-3 mb-2\">\n <label [attr.for]=\"'subscription-agents-list-' + field.control\" class=\"visually-hidden\">\n {{ field.labelKey | transloco }}\n </label>\n @if (field.options) {\n <p-select\n [inputId]=\"'subscription-agents-list-' + field.control\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"field.options\"\n optionLabel=\"labelKey\"\n optionValue=\"value\"\n [formControlName]=\"field.control\"\n (onChange)=\"onTransferMethodChange()\">\n <ng-template let-option pTemplate=\"item\">{{ option.labelKey | transloco }}</ng-template>\n <ng-template let-option pTemplate=\"selectedItem\">{{ option.labelKey | transloco }}</ng-template>\n </p-select>\n } @else {\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-list-' + field.control\"\n [formControlName]=\"field.control\"\n [placeholder]=\"field.labelKey | transloco\"\n autocomplete=\"off\"/>\n }\n </div>\n }\n }\n </div>\n @if (!isSingleAmbassadorSelected) {\n <div class=\"row mt-2\">\n <div class=\"col\">\n <small class=\"text-muted\">\n {{ 'Admin.Subscriptions.Payout.BulkHint' | transloco }}\n </small>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"text-center mt-4\">\n <button type=\"button\"\n (click)=\"newEmbass = false\"\n class=\"btn btn-sm btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-sm btn-primary me-2\">Add Ambassador</button>\n </div>\n </form>\n}\n", styles: ["#mainFrom{padding-bottom:144px}.input-group>.form-control{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.input-group>.btn{border-top-left-radius:0;border-bottom-left-radius:0}\n"], dependencies: [{ kind: "component", type: i3$3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i4$2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i6$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i7.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["hostName", "iconPosition", "styleClass"] }, { kind: "component", type: i8.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["hostName", "styleClass"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3$2.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "component", type: i3$2.RecordsSummaryComponent, selector: "pw-records-summary", inputs: ["showing", "total"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }] }); }
|
|
7600
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: SubscriptionAgentsListComponent, isStandalone: false, selector: "pw-subscription-agents-list", usesInheritance: true, ngImport: i0, template: "@if (!newEmbass) {\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\n @if (!isLoaded) {\n <p-progressSpinner> </p-progressSpinner>\n }\n </div>\n <div class=\"primeng-datatable-container actions-collapsed table-responsive mt-0\"\n [class.hideTable]=\"totalUnfilteredCount === 0\">\n <p-table #dt\n [value]=\"allAgents\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"subscription-agents-list-search\"\n name=\"subscription-agents-list-search\"\n [(ngModel)]=\"searchText\"\n pInputText\n placeholder=\"Search ambassadors...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" />\n </p-iconfield>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li pTooltip=\"Edit\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscriptions/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li pTooltip=\"Delete\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n (keydown.enter)=\"onDelete(agent?.user_id)\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n @if (totalRecords !== 0) {\n <pw-records-summary [showing]=\"dt?.value?.length ?? 0\" [total]=\"totalRecords\" />\n }\n </div>\n @if (totalRecords === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n }\n}\n@if (newEmbass) {\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n class=\"mt-4\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" id=\"input_percentage_2\" name=\"input_percentage_2\"/>\n </div>\n <div class=\"col\">\n <label for=\"subscription-agents-list-endDate\" class=\"visually-hidden\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-list-endDate\"\n name=\"endDate\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"endDate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.open()\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render. -->\n <div class=\"row mt-3\">\n <!-- Half-width from sm up, matching the Percentage / End Date row above;\n full width on mobile. Explicit breakpoints rather than a bare `col`,\n which never wraps - with three items in this row that would leave\n each ~33% on desktop and unusably narrow on a phone. -->\n <div class=\"col-12 col-sm-6 mb-2\">\n <label for=\"subscription-agents-list-payout_provider\" class=\"visually-hidden\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-list-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n @if (isSingleAmbassadorSelected) {\n @for (field of payoutFields; track field.control) {\n <div class=\"col-12 col-sm-6 mb-2\">\n <label [attr.for]=\"'subscription-agents-list-' + field.control\" class=\"visually-hidden\">\n {{ field.labelKey | transloco }}\n </label>\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-list-' + field.control\"\n [formControlName]=\"field.control\"\n [placeholder]=\"field.labelKey | transloco\"\n autocomplete=\"off\"/>\n </div>\n }\n }\n </div>\n @if (isBulkAmbassadorSelection) {\n <div class=\"row mt-2\">\n <div class=\"col\">\n <small class=\"text-muted\">\n {{ 'Admin.Subscriptions.Payout.BulkHint' | transloco }}\n </small>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"text-center mt-4\">\n <button type=\"button\"\n (click)=\"newEmbass = false\"\n class=\"btn btn-sm btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-sm btn-primary me-2\">Add Ambassador</button>\n </div>\n </form>\n}\n", styles: ["#mainFrom{padding-bottom:144px}.input-group>.form-control{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.input-group>.btn{border-top-left-radius:0;border-bottom-left-radius:0}\n"], dependencies: [{ kind: "component", type: i3$3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i4$2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i6$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i7.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["hostName", "iconPosition", "styleClass"] }, { kind: "component", type: i8.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["hostName", "styleClass"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3$2.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "component", type: i3$2.RecordsSummaryComponent, selector: "pw-records-summary", inputs: ["showing", "total"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }] }); }
|
|
7603
7601
|
}
|
|
7604
7602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SubscriptionAgentsListComponent, decorators: [{
|
|
7605
7603
|
type: Component,
|
|
7606
|
-
args: [{ selector: 'pw-subscription-agents-list', standalone: false, template: "@if (!newEmbass) {\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\n @if (!isLoaded) {\n <p-progressSpinner> </p-progressSpinner>\n }\n </div>\n <div class=\"primeng-datatable-container actions-collapsed table-responsive mt-0\"\n [class.hideTable]=\"totalUnfilteredCount === 0\">\n <p-table #dt\n [value]=\"allAgents\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"subscription-agents-list-search\"\n name=\"subscription-agents-list-search\"\n [(ngModel)]=\"searchText\"\n pInputText\n placeholder=\"Search ambassadors...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" />\n </p-iconfield>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li pTooltip=\"Edit\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscriptions/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li pTooltip=\"Delete\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n (keydown.enter)=\"onDelete(agent?.user_id)\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n @if (totalRecords !== 0) {\n <pw-records-summary [showing]=\"dt?.value?.length ?? 0\" [total]=\"totalRecords\" />\n }\n </div>\n @if (totalRecords === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n }\n}\n@if (newEmbass) {\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n class=\"mt-4\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" id=\"input_percentage_2\" name=\"input_percentage_2\"/>\n </div>\n <div class=\"col\">\n <label for=\"subscription-agents-list-endDate\" class=\"visually-hidden\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-list-endDate\"\n name=\"endDate\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"endDate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.open()\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render. -->\n <div class=\"row mt-3\">\n <!--
|
|
7604
|
+
args: [{ selector: 'pw-subscription-agents-list', standalone: false, template: "@if (!newEmbass) {\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\n @if (!isLoaded) {\n <p-progressSpinner> </p-progressSpinner>\n }\n </div>\n <div class=\"primeng-datatable-container actions-collapsed table-responsive mt-0\"\n [class.hideTable]=\"totalUnfilteredCount === 0\">\n <p-table #dt\n [value]=\"allAgents\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"subscription-agents-list-search\"\n name=\"subscription-agents-list-search\"\n [(ngModel)]=\"searchText\"\n pInputText\n placeholder=\"Search ambassadors...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" />\n </p-iconfield>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li pTooltip=\"Edit\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscriptions/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li pTooltip=\"Delete\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n class=\"me-2 me-sm-3\"\n (keydown.enter)=\"onDelete(agent?.user_id)\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n @if (totalRecords !== 0) {\n <pw-records-summary [showing]=\"dt?.value?.length ?? 0\" [total]=\"totalRecords\" />\n }\n </div>\n @if (totalRecords === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n }\n}\n@if (newEmbass) {\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n class=\"mt-4\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete appendTo=\"body\" [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n optionLabel=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search ambassadors...\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" id=\"input_percentage_2\" name=\"input_percentage_2\"/>\n </div>\n <div class=\"col\">\n <label for=\"subscription-agents-list-endDate\" class=\"visually-hidden\">End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"subscription-agents-list-endDate\"\n name=\"endDate\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"endDate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.open()\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Payout destination (#951): the provider drives which fields render. -->\n <div class=\"row mt-3\">\n <!-- Half-width from sm up, matching the Percentage / End Date row above;\n full width on mobile. Explicit breakpoints rather than a bare `col`,\n which never wraps - with three items in this row that would leave\n each ~33% on desktop and unusably narrow on a phone. -->\n <div class=\"col-12 col-sm-6 mb-2\">\n <label for=\"subscription-agents-list-payout_provider\" class=\"visually-hidden\">\n {{ 'Admin.Subscriptions.Payout.Provider' | transloco }}\n </label>\n <p-select\n inputId=\"subscription-agents-list-payout_provider\"\n appendTo=\"body\"\n styleClass=\"w-100\"\n [options]=\"payoutProviders\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"payout_provider\"\n (onChange)=\"onPayoutProviderChange($event.value)\">\n </p-select>\n </div>\n @if (isSingleAmbassadorSelected) {\n @for (field of payoutFields; track field.control) {\n <div class=\"col-12 col-sm-6 mb-2\">\n <label [attr.for]=\"'subscription-agents-list-' + field.control\" class=\"visually-hidden\">\n {{ field.labelKey | transloco }}\n </label>\n <input type=\"text\"\n class=\"form-control\"\n [id]=\"'subscription-agents-list-' + field.control\"\n [formControlName]=\"field.control\"\n [placeholder]=\"field.labelKey | transloco\"\n autocomplete=\"off\"/>\n </div>\n }\n }\n </div>\n @if (isBulkAmbassadorSelection) {\n <div class=\"row mt-2\">\n <div class=\"col\">\n <small class=\"text-muted\">\n {{ 'Admin.Subscriptions.Payout.BulkHint' | transloco }}\n </small>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"text-center mt-4\">\n <button type=\"button\"\n (click)=\"newEmbass = false\"\n class=\"btn btn-sm btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-sm btn-primary me-2\">Add Ambassador</button>\n </div>\n </form>\n}\n", styles: ["#mainFrom{padding-bottom:144px}.input-group>.form-control{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.input-group>.btn{border-top-left-radius:0;border-bottom-left-radius:0}\n"] }]
|
|
7607
7605
|
}], ctorParameters: () => [{ type: i1.AdminService }, { type: i2.NgbDateParserFormatter }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i3$2.ConfirmDialogService }] });
|
|
7608
7606
|
|
|
7609
7607
|
class SubscriptionDetailsComponent extends AppBaseComponent {
|