@posiwise/admin-module 0.0.227 → 0.0.228

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.
@@ -9,6 +9,8 @@ import { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';
9
9
  import * as i1 from '@posiwise/admin-module-utils';
10
10
  import { AppAdmin, AdminService, AdminDataService } from '@posiwise/admin-module-utils';
11
11
  import { AppConfigService } from '@posiwise/app-config-service';
12
+ import * as i5$2 from '@posiwise/app-loader';
13
+ import { AppLoaderModule } from '@posiwise/app-loader';
12
14
  import * as i1$1 from '@posiwise/common-services';
13
15
  import { PermissionService, ValidationService, FormHelperService, PrimeNgHelper, SubscriptionService } from '@posiwise/common-services';
14
16
  import { CoreTranslocoModule } from '@posiwise/core-transloco';
@@ -147,6 +149,8 @@ const baseUrl = '/admin';
147
149
  const ROUTERS = {
148
150
  globalConfigDetails: `${baseUrl}/global-config/`,
149
151
  adminCredentialsDetails: `${baseUrl}/credentials/`,
152
+ adminOauthClients: `${baseUrl}/oauth-clients/list`,
153
+ adminOauthClientsDetails: `${baseUrl}/oauth-clients/`,
150
154
  subscriptionCredentialDetails: `${baseUrl}/credentials/subscription/`,
151
155
  newsletter: `${baseUrl}/newsletter`,
152
156
  mailerDetails: `${baseUrl}/mailers/`,
@@ -4961,6 +4965,182 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
4961
4965
  args: [{ selector: 'pw-newsletter', template: `<pw-tabs [items]="items"></pw-tabs>`, standalone: false, styles: [".text-truncate{max-width:150px}.card-body{min-height:65vh}\n"] }]
4962
4966
  }], ctorParameters: () => [{ type: i0.Injector }] });
4963
4967
 
4968
+ class OauthClientsComponent extends AppBaseComponent {
4969
+ constructor(oauthClientService, injector, cdr, confirmDialog) {
4970
+ super(injector);
4971
+ this.oauthClientService = oauthClientService;
4972
+ this.cdr = cdr;
4973
+ this.confirmDialog = confirmDialog;
4974
+ this.clients = [];
4975
+ this.loading = true;
4976
+ this.isLoaded = false;
4977
+ this.routers = ROUTERS;
4978
+ }
4979
+ ngOnInit() {
4980
+ this.loadClients();
4981
+ }
4982
+ loadClients() {
4983
+ this.isLoaded = false;
4984
+ this.loading = true;
4985
+ this.oauthClientService
4986
+ .getAll()
4987
+ .subscribe((response) => {
4988
+ this.clients = response?.mcp_oauth_clients ?? [];
4989
+ })
4990
+ .add(() => {
4991
+ this.loading = false;
4992
+ this.isLoaded = true;
4993
+ this.cdr.markForCheck();
4994
+ });
4995
+ }
4996
+ onDelete(client) {
4997
+ this.confirmDialog
4998
+ .confirmDelete({
4999
+ textKey: 'Common.Confirm.Delete.Text',
5000
+ textParams: { name: client?.name }
5001
+ })
5002
+ .then(ok => {
5003
+ if (!ok) {
5004
+ return;
5005
+ }
5006
+ this.oauthClientService.delete(client.id).subscribe(() => {
5007
+ this.toast.success(this.translation.translate('Admin.OauthClients.DeletedMessage'));
5008
+ this.loadClients();
5009
+ });
5010
+ });
5011
+ }
5012
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsComponent, deps: [{ token: i1.McpOauthClientService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i3$1.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
5013
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: OauthClientsComponent, isStandalone: false, selector: "pw-oauth-clients", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">{{ 'Admin.OauthClients.Title' | transloco }}</h2>\n <button class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-oauth-client\"\n [routerLink]=\"[routers.adminOauthClientsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Add' | transloco }}\n </button>\n </div>\n</div>\n@if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </div>\n}\n@if (isLoaded) {\n @if (clients.length > 0) {\n <div class=\"primeng-datatable-container mt table-responsive\">\n <p-table [value]=\"clients\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">{{ 'Admin.OauthClients.Platform' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.ClientId' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.ClientSecret' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.RedirectUris' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.Scopes' | transloco }}</th>\n <th scope=\"col\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-client>\n <tr>\n <td data-head=\"Platform\">{{ client.name }}</td>\n <td data-head=\"Client ID\">{{ client.client_id }}</td>\n <td data-head=\"Client Secret\">{{ client.client_secret_masked }}</td>\n <td data-head=\"Redirect URIs\">{{ client.redirect_uris }}</td>\n <td data-head=\"Scopes\">{{ client.scopes }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li [ngbTooltip]=\"'Admin.OauthClients.Edit' | transloco\"\n class=\"me-2 me-sm-3\"\n data-cy=\"edit-oauth-client\"\n [routerLink]=\"[routers.adminOauthClientsDetails + 'edit/' + client.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li [ngbTooltip]=\"'Admin.OauthClients.Delete' | transloco\" class=\"me-2 me-sm-3\">\n <i (click)=\"onDelete(client)\"\n (keydown.enter)=\"onDelete(client)\"\n (keydown.space)=\"onDelete(client)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n } @else {\n <pw-no-data [withImage]=\"true\"\n [message]=\"'Admin.OauthClients.NoDataMessage' | transloco\"></pw-no-data>\n }\n}\n", dependencies: [{ kind: "component", type: i3$2.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: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3$1.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
5014
+ }
5015
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsComponent, decorators: [{
5016
+ type: Component,
5017
+ args: [{ selector: 'pw-oauth-clients', standalone: false, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">{{ 'Admin.OauthClients.Title' | transloco }}</h2>\n <button class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-oauth-client\"\n [routerLink]=\"[routers.adminOauthClientsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Add' | transloco }}\n </button>\n </div>\n</div>\n@if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </div>\n}\n@if (isLoaded) {\n @if (clients.length > 0) {\n <div class=\"primeng-datatable-container mt table-responsive\">\n <p-table [value]=\"clients\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">{{ 'Admin.OauthClients.Platform' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.ClientId' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.ClientSecret' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.RedirectUris' | transloco }}</th>\n <th scope=\"col\">{{ 'Admin.OauthClients.Scopes' | transloco }}</th>\n <th scope=\"col\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-client>\n <tr>\n <td data-head=\"Platform\">{{ client.name }}</td>\n <td data-head=\"Client ID\">{{ client.client_id }}</td>\n <td data-head=\"Client Secret\">{{ client.client_secret_masked }}</td>\n <td data-head=\"Redirect URIs\">{{ client.redirect_uris }}</td>\n <td data-head=\"Scopes\">{{ client.scopes }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li [ngbTooltip]=\"'Admin.OauthClients.Edit' | transloco\"\n class=\"me-2 me-sm-3\"\n data-cy=\"edit-oauth-client\"\n [routerLink]=\"[routers.adminOauthClientsDetails + 'edit/' + client.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li [ngbTooltip]=\"'Admin.OauthClients.Delete' | transloco\" class=\"me-2 me-sm-3\">\n <i (click)=\"onDelete(client)\"\n (keydown.enter)=\"onDelete(client)\"\n (keydown.space)=\"onDelete(client)\"\n class=\"fa fa-trash delete-icon\"\n aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n } @else {\n <pw-no-data [withImage]=\"true\"\n [message]=\"'Admin.OauthClients.NoDataMessage' | transloco\"></pw-no-data>\n }\n}\n" }]
5018
+ }], ctorParameters: () => [{ type: i1.McpOauthClientService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i3$1.ConfirmDialogService }] });
5019
+
5020
+ class OauthClientsDetailsComponent extends AppBaseComponent {
5021
+ constructor(fb, oauthClientService, injector, cdr) {
5022
+ super(injector);
5023
+ this.fb = fb;
5024
+ this.oauthClientService = oauthClientService;
5025
+ this.cdr = cdr;
5026
+ this.submitting = false;
5027
+ /** Set in edit mode — the record being edited. null while creating. */
5028
+ this.editId = null;
5029
+ /** Gates the form in edit mode until the client is fetched (AI54). */
5030
+ this.loading = false;
5031
+ /** Set once the client is created — the secret is shown ONCE here, never re-fetchable. */
5032
+ this.createdClient = null;
5033
+ this.routers = ROUTERS;
5034
+ this.form = this.fb.group({
5035
+ name: ['', Validators.required],
5036
+ redirect_uris: ['', Validators.required],
5037
+ scopes: ['mcp:read,mcp:write'],
5038
+ client_id: ['']
5039
+ });
5040
+ }
5041
+ ngOnInit() {
5042
+ const id = this.route.snapshot.paramMap.get('id');
5043
+ if (id) {
5044
+ this.editId = Number(id);
5045
+ this.loadClient(this.editId);
5046
+ }
5047
+ }
5048
+ /** In edit mode the client_id is immutable and is not part of the editable form. */
5049
+ loadClient(id) {
5050
+ this.loading = true;
5051
+ this.oauthClientService
5052
+ .getAll()
5053
+ .subscribe((response) => {
5054
+ const client = (response?.mcp_oauth_clients ?? []).find(c => c.id === id);
5055
+ if (!client) {
5056
+ this.toast.error(this.translation.translate('Admin.OauthClients.NotFound'));
5057
+ this.backToList();
5058
+ return;
5059
+ }
5060
+ this.form.patchValue({
5061
+ name: client.name,
5062
+ redirect_uris: client.redirect_uris,
5063
+ scopes: client.scopes
5064
+ });
5065
+ })
5066
+ .add(() => {
5067
+ this.loading = false;
5068
+ this.cdr.markForCheck();
5069
+ });
5070
+ }
5071
+ onSubmit() {
5072
+ if (this.form.invalid) {
5073
+ this.form.markAllAsTouched();
5074
+ return;
5075
+ }
5076
+ this.editId === null ? this.createClient() : this.updateClient(this.editId);
5077
+ }
5078
+ createClient() {
5079
+ this.submitting = true;
5080
+ this.oauthClientService
5081
+ .create(this.form.value)
5082
+ .subscribe((res) => {
5083
+ this.createdClient = res?.data ?? null;
5084
+ this.toast.success(this.translation.translate('Admin.OauthClients.CreatedMessage'));
5085
+ })
5086
+ .add(() => {
5087
+ this.submitting = false;
5088
+ this.cdr.markForCheck();
5089
+ });
5090
+ }
5091
+ updateClient(id) {
5092
+ this.submitting = true;
5093
+ const { name, redirect_uris, scopes } = this.form.value;
5094
+ this.oauthClientService
5095
+ .update(id, { name, redirect_uris, scopes })
5096
+ .subscribe(() => {
5097
+ this.toast.success(this.translation.translate('Admin.OauthClients.UpdatedMessage'));
5098
+ this.backToList();
5099
+ })
5100
+ .add(() => {
5101
+ this.submitting = false;
5102
+ this.cdr.markForCheck();
5103
+ });
5104
+ }
5105
+ copy(value) {
5106
+ navigator.clipboard?.writeText(value).then(() => {
5107
+ this.toast.success(this.translation.translate('Admin.OauthClients.Copied'));
5108
+ });
5109
+ }
5110
+ backToList() {
5111
+ this.router.navigate([this.routers.adminOauthClients]);
5112
+ }
5113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsDetailsComponent, deps: [{ token: i9.FormBuilder }, { token: i1.McpOauthClientService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
5114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: OauthClientsDetailsComponent, isStandalone: false, selector: "pw-oauth-clients-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a [routerLink]=\"[routers.adminOauthClients]\" class=\"previous\" aria-label=\"Back to MCP OAuth Clients list\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"mt-3\">\n {{ (editId ? 'Admin.OauthClients.EditTitle' : 'Admin.OauthClients.AddTitle') | transloco }}\n </h3>\n </div>\n\n <pw-loader [isVisible]=\"loading\"></pw-loader>\n\n <div class=\"p-2 mt-3\">\n @if (!createdClient && !loading) {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-name\" class=\"form-label\">\n {{ 'Admin.OauthClients.Platform' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.Platform' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-name\" type=\"text\" class=\"form-control\" formControlName=\"name\" pInputText\n [placeholder]=\"'Admin.OauthClients.PlatformPlaceholder' | transloco\" />\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-redirect\" class=\"form-label\">\n {{ 'Admin.OauthClients.RedirectUris' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.RedirectUris' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-redirect\" type=\"text\" class=\"form-control\" formControlName=\"redirect_uris\" pInputText\n [placeholder]=\"'Admin.OauthClients.RedirectUrisPlaceholder' | transloco\" />\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-scopes\" class=\"form-label\">\n {{ 'Admin.OauthClients.Scopes' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.Scopes' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-scopes\" type=\"text\" class=\"form-control\" formControlName=\"scopes\" pInputText />\n </div>\n @if (!editId) {\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-client-id\" class=\"form-label\">\n {{ 'Admin.OauthClients.ClientIdOptional' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.ClientId' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-client-id\" type=\"text\" class=\"form-control\" formControlName=\"client_id\" pInputText\n [placeholder]=\"'Admin.OauthClients.ClientIdPlaceholder' | transloco\" />\n </div>\n }\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-2\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-secondary me-2\" (click)=\"backToList()\">\n {{ 'Admin.OauthClients.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"submitting\">\n {{ (editId ? 'Admin.OauthClients.Save' : 'Admin.OauthClients.Create') | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n } @else if (createdClient) {\n <div class=\"alert alert-warning\" role=\"alert\">\n {{ 'Admin.OauthClients.SecretOnceWarning' | transloco }}\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6 mb-3\">\n <label class=\"form-label\">{{ 'Admin.OauthClients.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\" class=\"form-control\" [value]=\"createdClient.client_id\" readonly />\n <button type=\"button\" class=\"btn btn-outline-primary\" (click)=\"copy(createdClient.client_id)\">\n <i class=\"fa fa-copy\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Copy' | transloco }}\n </button>\n </div>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label class=\"form-label\">{{ 'Admin.OauthClients.ClientSecret' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\" class=\"form-control\" [value]=\"createdClient.client_secret\" readonly />\n <button type=\"button\" class=\"btn btn-outline-primary\" (click)=\"copy(createdClient.client_secret)\">\n <i class=\"fa fa-copy\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Copy' | transloco }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"backToList()\">\n {{ 'Admin.OauthClients.Done' | transloco }}\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i6$1.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: "directive", type: i5$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i5$2.AppLoaderComponent, selector: "pw-loader", inputs: ["isVisible", "closeOnOutsideClick", "autoCloseTimeOut"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
5115
+ }
5116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsDetailsComponent, decorators: [{
5117
+ type: Component,
5118
+ args: [{ selector: 'pw-oauth-clients-details', standalone: false, template: "<div class=\"container-fluid pw-tab\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a [routerLink]=\"[routers.adminOauthClients]\" class=\"previous\" aria-label=\"Back to MCP OAuth Clients list\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"mt-3\">\n {{ (editId ? 'Admin.OauthClients.EditTitle' : 'Admin.OauthClients.AddTitle') | transloco }}\n </h3>\n </div>\n\n <pw-loader [isVisible]=\"loading\"></pw-loader>\n\n <div class=\"p-2 mt-3\">\n @if (!createdClient && !loading) {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-name\" class=\"form-label\">\n {{ 'Admin.OauthClients.Platform' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.Platform' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-name\" type=\"text\" class=\"form-control\" formControlName=\"name\" pInputText\n [placeholder]=\"'Admin.OauthClients.PlatformPlaceholder' | transloco\" />\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-redirect\" class=\"form-label\">\n {{ 'Admin.OauthClients.RedirectUris' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.RedirectUris' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-redirect\" type=\"text\" class=\"form-control\" formControlName=\"redirect_uris\" pInputText\n [placeholder]=\"'Admin.OauthClients.RedirectUrisPlaceholder' | transloco\" />\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-scopes\" class=\"form-label\">\n {{ 'Admin.OauthClients.Scopes' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.Scopes' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-scopes\" type=\"text\" class=\"form-control\" formControlName=\"scopes\" pInputText />\n </div>\n @if (!editId) {\n <div class=\"col-lg-6 mb-3\">\n <label for=\"oc-client-id\" class=\"form-label\">\n {{ 'Admin.OauthClients.ClientIdOptional' | transloco }}\n <span class=\"tooltip-wrap ms-1\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.OauthClients.Tooltip.ClientId' | transloco\" tooltipPosition=\"top\">\n <i class=\"far fa-info-circle text-muted\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"oc-client-id\" type=\"text\" class=\"form-control\" formControlName=\"client_id\" pInputText\n [placeholder]=\"'Admin.OauthClients.ClientIdPlaceholder' | transloco\" />\n </div>\n }\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-2\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-secondary me-2\" (click)=\"backToList()\">\n {{ 'Admin.OauthClients.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"submitting\">\n {{ (editId ? 'Admin.OauthClients.Save' : 'Admin.OauthClients.Create') | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n } @else if (createdClient) {\n <div class=\"alert alert-warning\" role=\"alert\">\n {{ 'Admin.OauthClients.SecretOnceWarning' | transloco }}\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6 mb-3\">\n <label class=\"form-label\">{{ 'Admin.OauthClients.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\" class=\"form-control\" [value]=\"createdClient.client_id\" readonly />\n <button type=\"button\" class=\"btn btn-outline-primary\" (click)=\"copy(createdClient.client_id)\">\n <i class=\"fa fa-copy\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Copy' | transloco }}\n </button>\n </div>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <label class=\"form-label\">{{ 'Admin.OauthClients.ClientSecret' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\" class=\"form-control\" [value]=\"createdClient.client_secret\" readonly />\n <button type=\"button\" class=\"btn btn-outline-primary\" (click)=\"copy(createdClient.client_secret)\">\n <i class=\"fa fa-copy\" aria-hidden=\"true\"></i> {{ 'Admin.OauthClients.Copy' | transloco }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"backToList()\">\n {{ 'Admin.OauthClients.Done' | transloco }}\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n" }]
5119
+ }], ctorParameters: () => [{ type: i9.FormBuilder }, { type: i1.McpOauthClientService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }] });
5120
+
5121
+ class OauthClientsTabsComponent {
5122
+ constructor() {
5123
+ this.items = [
5124
+ {
5125
+ id: 'oauth-clients',
5126
+ label: 'MCP OAuth Clients',
5127
+ icon: 'fas fa-robot',
5128
+ routerLink: ['/admin/oauth-clients/list']
5129
+ }
5130
+ ];
5131
+ }
5132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.6", type: OauthClientsTabsComponent, isStandalone: false, selector: "pw-oauth-clients-tabs", ngImport: i0, template: `<pw-tabs [items]="items"></pw-tabs>`, isInline: true, dependencies: [{ kind: "component", type: i3$1.PwTabsComponent, selector: "pw-tabs", inputs: ["items", "withSubscription"] }] }); }
5134
+ }
5135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: OauthClientsTabsComponent, decorators: [{
5136
+ type: Component,
5137
+ args: [{
5138
+ selector: 'pw-oauth-clients-tabs',
5139
+ template: `<pw-tabs [items]="items"></pw-tabs>`,
5140
+ standalone: false
5141
+ }]
5142
+ }] });
5143
+
4964
5144
  class PermissionsDetailsComponent extends AppBaseComponent {
4965
5145
  constructor(adminService, injector, cdr) {
4966
5146
  super(injector);
@@ -8255,11 +8435,11 @@ class InviteUsersComponent extends AppBaseComponent {
8255
8435
  super.ngOnDestroy();
8256
8436
  }
8257
8437
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: InviteUsersComponent, deps: [{ token: i9.UntypedFormBuilder }, { token: i1.AdminService }, { token: i1$1.ProductService }, { token: i0.Injector }, { token: i1$1.CommonService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
8258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: InviteUsersComponent, isStandalone: false, selector: "pw-invite-users", viewQueries: [{ propertyName: "refProduct", first: true, predicate: ["refProduct"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard user-details\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">Invite New User</h3>\n <p>Here you can send an invitation to a new user to try any of our products</p>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.FirstName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.FirstName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"first_name\"\n controlId=\"invite-first_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.FirstName' | transloco\">\n <input type=\"text\"\n id=\"invite-first_name\"\n class=\"form-control\"\n formControlName=\"first_name\"\n [ngClass]=\"{\n 'is-invalid':\n form.get('first_name').touched && form.get('first_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.LastName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.LastName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"last_name\"\n controlId=\"invite-last_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.LastName' | transloco\">\n <input type=\"text\"\n id=\"invite-last_name\"\n class=\"form-control\"\n formControlName=\"last_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('last_name').touched && form.get('last_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Email' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Email' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"email\"\n controlId=\"invite-email\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Email' | transloco\">\n <input type=\"text\"\n id=\"invite-email\"\n class=\"form-control\"\n formControlName=\"email\"\n [ngClass]=\"{\n 'is-invalid': form.get('email').touched && form.get('email').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SubscriptionProduct' | transloco\"\n name=\"product_id\"\n controlId=\"invite-product_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete appendTo=\"body\" #refProduct\n [suggestions]=\"filteredProducts\"\n [ariaLabelledBy]=\"'invite-product_id-label'\"\n [ariaLabel]=\"'Label.Product' | transloco\"\n formControlName=\"product_id\"\n dataKey=\"id\"\n optionLabel=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n [type]=\"'search'\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n (onClear)=\"onProductClear($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search products...\"\n [inputStyle]=\"\n form.get('product_id').touched && form.get('product_id').invalid\n ? { border: '1px solid #ff586b' }\n : {}\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container label=\"{{'Label.Seats' | transloco}}{{unitsText}}\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Units' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"units\"\n controlId=\"invite-units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Units' | transloco\">\n <input type=\"number\"\n id=\"invite-units\"\n class=\"form-control\"\n formControlName=\"units\"\n [ngClass]=\"{\n 'is-invalid': form.get('units').touched && form.get('units').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n controlId=\"invite-min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n id=\"invite-min_units\"\n min=\"0\"\n [max]=\"form.get('units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n @if (organizationIndustries$ | async; as industries) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\" controlId=\"invite-organization_industry_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_industry_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationIndustry' | transloco\"\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationSizes$ | async; as sizes) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationSize' | transloco\"\n name=\"organization_size_id\" controlId=\"invite-organization_size_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_size_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationSize' | transloco\"\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationTypes$ | async; as types) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\" controlId=\"invite-organization_type_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_type_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationType' | transloco\"\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Organization.OrganizationName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationName'| transloco\"\n class=\"col-md-6 p-0\"\n name=\"name\" controlId=\"invite-organization-name\">\n <input type=\"text\"\n id=\"invite-organization-name\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{\n 'is-invalid': form.get('name').touched && form.get('name').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <input type=\"button\"\n class=\"btn btn-secondary me-3\"\n value=\"Cancel\"\n (click)=\"form.reset(); totalRecordsUnFiltered = 0; back()\" />\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonBusy\"\n class=\"btn btn-primary\">Invite</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>", styles: ["@charset \"UTF-8\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255);--public-btn-radius: 24px}\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: i5.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: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "component", type: i3$1.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "controlId", "useAriaLabelledbyOnly", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i11.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
8438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: InviteUsersComponent, isStandalone: false, selector: "pw-invite-users", viewQueries: [{ propertyName: "refProduct", first: true, predicate: ["refProduct"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard user-details\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">{{ 'Admin.Subscriptions.InviteNewUser' | transloco }}</h3>\n <p>{{ 'Admin.Subscriptions.InviteNewUserDescription' | transloco }}</p>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n\n <h3>{{ 'Admin.Subscriptions.Section.UserDetails' | transloco }}</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.FirstName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.FirstName' | transloco\"\n name=\"first_name\"\n controlId=\"invite-first_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.FirstName' | transloco\">\n <input type=\"text\"\n id=\"invite-first_name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.InviteFirstName' | transloco\"\n formControlName=\"first_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('first_name').touched && form.get('first_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.LastName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.LastName' | transloco\"\n name=\"last_name\"\n controlId=\"invite-last_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.LastName' | transloco\">\n <input type=\"text\"\n id=\"invite-last_name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.InviteLastName' | transloco\"\n formControlName=\"last_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('last_name').touched && form.get('last_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.Email' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Email' | transloco\"\n name=\"email\"\n controlId=\"invite-email\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Email' | transloco\">\n <input type=\"text\"\n id=\"invite-email\"\n class=\"form-control\"\n [placeholder]=\"'Label.EmailPlaceholder' | transloco\"\n formControlName=\"email\"\n [ngClass]=\"{\n 'is-invalid': form.get('email').touched && form.get('email').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n\n <h3>{{ 'Admin.Subscriptions.Section.ProductSeats' | transloco }}</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SubscriptionProduct' | transloco\"\n name=\"product_id\"\n controlId=\"invite-product_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete appendTo=\"body\" #refProduct\n [suggestions]=\"filteredProducts\"\n [ariaLabelledBy]=\"'invite-product_id-label'\"\n [ariaLabel]=\"'Label.Product' | transloco\"\n formControlName=\"product_id\"\n dataKey=\"id\"\n optionLabel=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n [type]=\"'search'\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n (onClear)=\"onProductClear($event)\"\n styleClass=\"w-100\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.SearchProducts' | transloco\"\n [inputStyleClass]=\"form.get('product_id').touched && form.get('product_id').invalid ? 'is-invalid' : ''\"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container label=\"{{'Label.Seats' | transloco}}{{unitsText}}\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Units' | transloco\"\n name=\"units\"\n controlId=\"invite-units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Units' | transloco\">\n <input type=\"number\"\n id=\"invite-units\"\n class=\"form-control\"\n formControlName=\"units\"\n [ngClass]=\"{\n 'is-invalid': form.get('units').touched && form.get('units').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n controlId=\"invite-min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n id=\"invite-min_units\"\n min=\"0\"\n [max]=\"form.get('units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n </div>\n\n <h3>{{ 'Admin.Subscriptions.Section.Organization' | transloco }}</h3>\n <div class=\"row\">\n @if (organizationIndustries$ | async; as industries) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n controlId=\"invite-organization_industry_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_industry_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationIndustry' | transloco\"\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationIndustry' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationSizes$ | async; as sizes) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationSize' | transloco\"\n name=\"organization_size_id\"\n controlId=\"invite-organization_size_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_size_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationSize' | transloco\"\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationSize' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationTypes$ | async; as types) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n controlId=\"invite-organization_type_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_type_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationType' | transloco\"\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationType' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationName' | transloco\"\n name=\"name\"\n controlId=\"invite-organization-name\">\n <input type=\"text\"\n id=\"invite-organization-name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.Organization' | transloco\"\n formControlName=\"name\"\n [ngClass]=\"{\n 'is-invalid': form.get('name').touched && form.get('name').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button type=\"button\"\n class=\"btn btn-secondary me-3\"\n (click)=\"form.reset(); totalRecordsUnFiltered = 0; back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Invite' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255);--public-btn-radius: 24px}:host form>h3{display:block;border-top:1px solid #e2e5ea;margin-top:2rem;padding-top:1.25rem}:host form>h3:first-child{border-top:0;margin-top:.5rem;padding-top:0}\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: i5.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: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "component", type: i3$1.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "controlId", "useAriaLabelledbyOnly", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i11.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
8259
8439
  }
8260
8440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: InviteUsersComponent, decorators: [{
8261
8441
  type: Component,
8262
- args: [{ selector: 'pw-invite-users', standalone: false, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard user-details\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">Invite New User</h3>\n <p>Here you can send an invitation to a new user to try any of our products</p>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.FirstName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.FirstName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"first_name\"\n controlId=\"invite-first_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.FirstName' | transloco\">\n <input type=\"text\"\n id=\"invite-first_name\"\n class=\"form-control\"\n formControlName=\"first_name\"\n [ngClass]=\"{\n 'is-invalid':\n form.get('first_name').touched && form.get('first_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.LastName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.LastName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"last_name\"\n controlId=\"invite-last_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.LastName' | transloco\">\n <input type=\"text\"\n id=\"invite-last_name\"\n class=\"form-control\"\n formControlName=\"last_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('last_name').touched && form.get('last_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Email' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Email' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"email\"\n controlId=\"invite-email\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Email' | transloco\">\n <input type=\"text\"\n id=\"invite-email\"\n class=\"form-control\"\n formControlName=\"email\"\n [ngClass]=\"{\n 'is-invalid': form.get('email').touched && form.get('email').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SubscriptionProduct' | transloco\"\n name=\"product_id\"\n controlId=\"invite-product_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete appendTo=\"body\" #refProduct\n [suggestions]=\"filteredProducts\"\n [ariaLabelledBy]=\"'invite-product_id-label'\"\n [ariaLabel]=\"'Label.Product' | transloco\"\n formControlName=\"product_id\"\n dataKey=\"id\"\n optionLabel=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n [type]=\"'search'\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n (onClear)=\"onProductClear($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search products...\"\n [inputStyle]=\"\n form.get('product_id').touched && form.get('product_id').invalid\n ? { border: '1px solid #ff586b' }\n : {}\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container label=\"{{'Label.Seats' | transloco}}{{unitsText}}\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Units' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"units\"\n controlId=\"invite-units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Units' | transloco\">\n <input type=\"number\"\n id=\"invite-units\"\n class=\"form-control\"\n formControlName=\"units\"\n [ngClass]=\"{\n 'is-invalid': form.get('units').touched && form.get('units').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n controlId=\"invite-min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n id=\"invite-min_units\"\n min=\"0\"\n [max]=\"form.get('units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n @if (organizationIndustries$ | async; as industries) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\" controlId=\"invite-organization_industry_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_industry_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationIndustry' | transloco\"\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationSizes$ | async; as sizes) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationSize' | transloco\"\n name=\"organization_size_id\" controlId=\"invite-organization_size_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_size_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationSize' | transloco\"\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationTypes$ | async; as types) {\n <div class=\"mb-3 col-sm-4\"\n >\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\" controlId=\"invite-organization_type_id\" [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType'| transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_type_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationType' | transloco\"\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Organization.OrganizationName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationName'| transloco\"\n class=\"col-md-6 p-0\"\n name=\"name\" controlId=\"invite-organization-name\">\n <input type=\"text\"\n id=\"invite-organization-name\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{\n 'is-invalid': form.get('name').touched && form.get('name').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <input type=\"button\"\n class=\"btn btn-secondary me-3\"\n value=\"Cancel\"\n (click)=\"form.reset(); totalRecordsUnFiltered = 0; back()\" />\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonBusy\"\n class=\"btn btn-primary\">Invite</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>", styles: ["@charset \"UTF-8\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255);--public-btn-radius: 24px}\n"] }]
8442
+ args: [{ selector: 'pw-invite-users', standalone: false, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard user-details\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">{{ 'Admin.Subscriptions.InviteNewUser' | transloco }}</h3>\n <p>{{ 'Admin.Subscriptions.InviteNewUserDescription' | transloco }}</p>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n\n <h3>{{ 'Admin.Subscriptions.Section.UserDetails' | transloco }}</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.FirstName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.FirstName' | transloco\"\n name=\"first_name\"\n controlId=\"invite-first_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.FirstName' | transloco\">\n <input type=\"text\"\n id=\"invite-first_name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.InviteFirstName' | transloco\"\n formControlName=\"first_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('first_name').touched && form.get('first_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.LastName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.LastName' | transloco\"\n name=\"last_name\"\n controlId=\"invite-last_name\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.LastName' | transloco\">\n <input type=\"text\"\n id=\"invite-last_name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.InviteLastName' | transloco\"\n formControlName=\"last_name\"\n [ngClass]=\"{\n 'is-invalid': form.get('last_name').touched && form.get('last_name').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.Email' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Email' | transloco\"\n name=\"email\"\n controlId=\"invite-email\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Email' | transloco\">\n <input type=\"text\"\n id=\"invite-email\"\n class=\"form-control\"\n [placeholder]=\"'Label.EmailPlaceholder' | transloco\"\n formControlName=\"email\"\n [ngClass]=\"{\n 'is-invalid': form.get('email').touched && form.get('email').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n\n <h3>{{ 'Admin.Subscriptions.Section.ProductSeats' | transloco }}</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SubscriptionProduct' | transloco\"\n name=\"product_id\"\n controlId=\"invite-product_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete appendTo=\"body\" #refProduct\n [suggestions]=\"filteredProducts\"\n [ariaLabelledBy]=\"'invite-product_id-label'\"\n [ariaLabel]=\"'Label.Product' | transloco\"\n formControlName=\"product_id\"\n dataKey=\"id\"\n optionLabel=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n [type]=\"'search'\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n (onClear)=\"onProductClear($event)\"\n styleClass=\"w-100\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.SearchProducts' | transloco\"\n [inputStyleClass]=\"form.get('product_id').touched && form.get('product_id').invalid ? 'is-invalid' : ''\"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container label=\"{{'Label.Seats' | transloco}}{{unitsText}}\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Units' | transloco\"\n name=\"units\"\n controlId=\"invite-units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Units' | transloco\">\n <input type=\"number\"\n id=\"invite-units\"\n class=\"form-control\"\n formControlName=\"units\"\n [ngClass]=\"{\n 'is-invalid': form.get('units').touched && form.get('units').invalid\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n controlId=\"invite-min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n id=\"invite-min_units\"\n min=\"0\"\n [max]=\"form.get('units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n </div>\n\n <h3>{{ 'Admin.Subscriptions.Section.Organization' | transloco }}</h3>\n <div class=\"row\">\n @if (organizationIndustries$ | async; as industries) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n controlId=\"invite-organization_industry_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_industry_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationIndustry' | transloco\"\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationIndustry' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationSizes$ | async; as sizes) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationSize' | transloco\"\n name=\"organization_size_id\"\n controlId=\"invite-organization_size_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_size_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationSize' | transloco\"\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationSize' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n @if (organizationTypes$ | async; as types) {\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n controlId=\"invite-organization_type_id\"\n [useAriaLabelledbyOnly]=\"true\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType' | transloco\">\n <p-select\n [ariaLabelledBy]=\"'invite-organization_type_id-label'\"\n [ariaLabel]=\"'Organization.OrganizationType' | transloco\"\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.OrganizationType' | transloco\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-select>\n </pw-input-container>\n </div>\n }\n <div class=\"mb-3 col-12 col-md-4\">\n <pw-input-container [label]=\"'Organization.OrganizationName' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationName' | transloco\"\n name=\"name\"\n controlId=\"invite-organization-name\">\n <input type=\"text\"\n id=\"invite-organization-name\"\n class=\"form-control\"\n [placeholder]=\"'Admin.Subscriptions.Placeholder.Organization' | transloco\"\n formControlName=\"name\"\n [ngClass]=\"{\n 'is-invalid': form.get('name').touched && form.get('name').invalid\n }\" />\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button type=\"button\"\n class=\"btn btn-secondary me-3\"\n (click)=\"form.reset(); totalRecordsUnFiltered = 0; back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n [disabled]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Invite' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255);--public-btn-radius: 24px}:host form>h3{display:block;border-top:1px solid #e2e5ea;margin-top:2rem;padding-top:1.25rem}:host form>h3:first-child{border-top:0;margin-top:.5rem;padding-top:0}\n"] }]
8263
8443
  }], ctorParameters: () => [{ type: i9.UntypedFormBuilder }, { type: i1.AdminService }, { type: i1$1.ProductService }, { type: i0.Injector }, { type: i1$1.CommonService }, { type: i0.ChangeDetectorRef }], propDecorators: { refProduct: [{
8264
8444
  type: ViewChild,
8265
8445
  args: ['refProduct']
@@ -11658,6 +11838,46 @@ const routes = [
11658
11838
  }
11659
11839
  ]
11660
11840
  },
11841
+ {
11842
+ path: 'oauth-clients',
11843
+ data: {
11844
+ title: 'MCP OAuth Clients',
11845
+ permission: 'Pages.Admin'
11846
+ },
11847
+ children: [
11848
+ {
11849
+ path: '',
11850
+ component: OauthClientsTabsComponent,
11851
+ children: [
11852
+ {
11853
+ path: '',
11854
+ redirectTo: 'list',
11855
+ pathMatch: 'full'
11856
+ },
11857
+ {
11858
+ path: 'list',
11859
+ component: OauthClientsComponent
11860
+ }
11861
+ ]
11862
+ },
11863
+ {
11864
+ path: 'add',
11865
+ component: OauthClientsDetailsComponent,
11866
+ data: {
11867
+ title: 'Add MCP OAuth Client',
11868
+ permission: 'Pages.Admin'
11869
+ }
11870
+ },
11871
+ {
11872
+ path: 'edit/:id',
11873
+ component: OauthClientsDetailsComponent,
11874
+ data: {
11875
+ title: 'Edit MCP OAuth Client',
11876
+ permission: 'Pages.Admin'
11877
+ }
11878
+ }
11879
+ ]
11880
+ },
11661
11881
  {
11662
11882
  path: 'tracking',
11663
11883
  component: TrackingComponent,
@@ -11839,6 +12059,9 @@ class AdminModule {
11839
12059
  SubscriptionCredentialsDetailsComponent,
11840
12060
  CredentialsDetailsComponent,
11841
12061
  CredentialsTabComponent,
12062
+ OauthClientsTabsComponent,
12063
+ OauthClientsComponent,
12064
+ OauthClientsDetailsComponent,
11842
12065
  AhoyEventsComponent,
11843
12066
  TrackingComponent,
11844
12067
  AhoyMessagesComponent,
@@ -11868,7 +12091,7 @@ class AdminModule {
11868
12091
  MultiSelectModule,
11869
12092
  InputTextModule,
11870
12093
  IconFieldModule,
11871
- InputIconModule, i1$2.NgxDaterangepickerMd, NgxJsonViewerModule,
12094
+ InputIconModule, AppLoaderModule, i1$2.NgxDaterangepickerMd, NgxJsonViewerModule,
11872
12095
  DatePickerModule,
11873
12096
  PlotlyViaCDNModule,
11874
12097
  FileUploadModule,
@@ -11906,7 +12129,8 @@ class AdminModule {
11906
12129
  },
11907
12130
  deps: [AppConfigService]
11908
12131
  }
11909
- ], imports: [primeNgModules, NgxDaterangepickerMd.forRoot(),
12132
+ ], imports: [primeNgModules, AppLoaderModule,
12133
+ NgxDaterangepickerMd.forRoot(),
11910
12134
  NgxJsonViewerModule,
11911
12135
  DatePickerModule,
11912
12136
  PlotlyViaCDNModule,
@@ -12024,6 +12248,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
12024
12248
  SubscriptionCredentialsDetailsComponent,
12025
12249
  CredentialsDetailsComponent,
12026
12250
  CredentialsTabComponent,
12251
+ OauthClientsTabsComponent,
12252
+ OauthClientsComponent,
12253
+ OauthClientsDetailsComponent,
12027
12254
  AhoyEventsComponent,
12028
12255
  TrackingComponent,
12029
12256
  AhoyMessagesComponent,
@@ -12049,6 +12276,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
12049
12276
  ],
12050
12277
  imports: [
12051
12278
  ...primeNgModules,
12279
+ AppLoaderModule,
12052
12280
  NgxDaterangepickerMd.forRoot(),
12053
12281
  NgxJsonViewerModule,
12054
12282
  DatePickerModule,