@posiwise/smart-crm 0.0.51 → 0.0.54
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.
- package/fesm2022/posiwise-smart-crm.mjs +439 -271
- package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
- package/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.d.ts +6 -0
- package/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.d.ts +28 -7
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +4 -0
- package/lib/shared/interface/crm-account.interface.d.ts +6 -0
- package/lib/shared/interface/crm-opportunity.interface.d.ts +7 -0
- package/package.json +3 -5
- package/esm2022/index.mjs +0 -52
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +0 -210
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +0 -191
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +0 -612
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +0 -71
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +0 -330
- package/esm2022/lib/private/components/smart-crm-actions/smart-crm-actions.component.mjs +0 -267
- package/esm2022/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.mjs +0 -12
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +0 -103
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +0 -126
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +0 -35
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +0 -88
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +0 -120
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +0 -79
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +0 -107
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +0 -97
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +0 -156
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +0 -99
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +0 -125
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +0 -197
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +0 -481
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +0 -297
- package/esm2022/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.mjs +0 -12
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.mjs +0 -226
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.mjs +0 -102
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.mjs +0 -100
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +0 -27
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.mjs +0 -78
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.mjs +0 -153
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +0 -227
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +0 -146
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +0 -79
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +0 -269
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +0 -155
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +0 -60
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.mjs +0 -18
- package/esm2022/lib/private/components/smart-crm-media/smart-crm-social-media/smart-crm-social-media.component.mjs +0 -12
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +0 -236
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +0 -376
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +0 -483
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +0 -219
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.mjs +0 -14
- package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +0 -99
- package/esm2022/lib/private/smart-crm-private.module.mjs +0 -356
- package/esm2022/lib/private/smart-crm-private.routing.module.mjs +0 -318
- package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +0 -56
- package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +0 -57
- package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +0 -38
- package/esm2022/lib/public/smart-crm-public.module.mjs +0 -46
- package/esm2022/lib/public/smart-crm-public.routing.module.mjs +0 -44
- package/esm2022/lib/shared/interface/crm-account.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-action.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-contact.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-lead.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-opportunity.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-source.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-stages.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/crm-widget.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/smart-crm-module.interface.mjs +0 -2
- package/esm2022/lib/shared/models/smart-crm.model.mjs +0 -191
- package/esm2022/lib/shared/routers/routers.mjs +0 -24
- package/esm2022/posiwise-smart-crm.mjs +0 -5
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, Injector } from '@angular/core';
|
|
2
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
3
|
-
import { PAGE_SIZE } from '@posiwise/common-utilities';
|
|
4
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
5
|
-
import { CrmService } from '@posiwise/smart-crm-shared';
|
|
6
|
-
import { ROUTERS } from '../../../../shared/routers/routers';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@posiwise/smart-crm-shared";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@angular/forms";
|
|
11
|
-
import * as i4 from "primeng/inputtext";
|
|
12
|
-
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
-
import * as i6 from "@posiwise/directives";
|
|
14
|
-
import * as i7 from "@angular/router";
|
|
15
|
-
import * as i8 from "primeng/table";
|
|
16
|
-
import * as i9 from "primeng/api";
|
|
17
|
-
import * as i10 from "primeng/progressspinner";
|
|
18
|
-
import * as i11 from "@posiwise/shared-components";
|
|
19
|
-
import * as i12 from "@jsverse/transloco";
|
|
20
|
-
export class SmartCrmWidgetsComponent extends AppBaseComponent {
|
|
21
|
-
constructor(injector, crmService, cdr) {
|
|
22
|
-
super(injector);
|
|
23
|
-
this.crmService = crmService;
|
|
24
|
-
this.cdr = cdr;
|
|
25
|
-
this.page = 1;
|
|
26
|
-
this.data = {
|
|
27
|
-
crm_widget_relationships: [],
|
|
28
|
-
object_count: 0,
|
|
29
|
-
unfiltered_count: 0
|
|
30
|
-
};
|
|
31
|
-
this.positions = [];
|
|
32
|
-
this.searchText = '';
|
|
33
|
-
this.loading = true;
|
|
34
|
-
this.hasAccess = false;
|
|
35
|
-
this.isLoaded = false;
|
|
36
|
-
this.routers = ROUTERS;
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.getUserSubscription().subscribe(subscription => {
|
|
40
|
-
this.subscription = subscription;
|
|
41
|
-
if (this.subscription?.id) {
|
|
42
|
-
this.hasAccess = this.hasAdminAccess(this.subscription?.id);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
ngAfterViewChecked() {
|
|
47
|
-
this.cdr.detectChanges();
|
|
48
|
-
}
|
|
49
|
-
onLazyLoad(event) {
|
|
50
|
-
const pageDetails = HelperService.onTableLazyLoad(event);
|
|
51
|
-
this.page = pageDetails.page;
|
|
52
|
-
this.getAllSubscriptionWidgets({
|
|
53
|
-
page: this.page,
|
|
54
|
-
page_size: PAGE_SIZE,
|
|
55
|
-
order_by: pageDetails.sortField,
|
|
56
|
-
order_direction: pageDetails.sortOrder,
|
|
57
|
-
search: this.searchText
|
|
58
|
-
});
|
|
59
|
-
this.getWidgetPositions();
|
|
60
|
-
}
|
|
61
|
-
/** Function to get all widgets */
|
|
62
|
-
getAllSubscriptionWidgets(paging) {
|
|
63
|
-
this.getUserSubscriptionId().subscribe(response => {
|
|
64
|
-
this.subscriptionId = response;
|
|
65
|
-
if (response) {
|
|
66
|
-
this.crmService
|
|
67
|
-
.getAllSubscriptionWidgets(this.subscriptionId, paging)
|
|
68
|
-
.subscribe(res => {
|
|
69
|
-
this.getAllWidgets();
|
|
70
|
-
this.data = res;
|
|
71
|
-
})
|
|
72
|
-
.add(() => {
|
|
73
|
-
this.isLoaded = true;
|
|
74
|
-
this.loading = false;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/** Function to get all widgets */
|
|
80
|
-
getAllWidgets() {
|
|
81
|
-
this.crmService.getAllWidgets(this.subscriptionId).subscribe(widgets => {
|
|
82
|
-
this.allWidgets = widgets.crm_widgets ?? [];
|
|
83
|
-
this.data.crm_widget_relationships?.forEach(subscriptionWidget => {
|
|
84
|
-
this.allWidgets?.forEach(widget => {
|
|
85
|
-
if (subscriptionWidget.crm_widget_id === widget.id) {
|
|
86
|
-
subscriptionWidget['crm_widget'] = widget.name;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/** Function to delete widget */
|
|
93
|
-
onDelete(id) {
|
|
94
|
-
HelperService.raiseDeletePopup().then(res => {
|
|
95
|
-
if (res.value) {
|
|
96
|
-
this.crmService
|
|
97
|
-
.deleteSubscriptionWidget(id, this.subscription?.id)
|
|
98
|
-
.subscribe(() => {
|
|
99
|
-
this.getAllSubscriptionWidgets({
|
|
100
|
-
page: this.page,
|
|
101
|
-
page_size: PAGE_SIZE,
|
|
102
|
-
search: this.searchText
|
|
103
|
-
});
|
|
104
|
-
this.toast.success(this.translation.translate('Crm.Widgets.DeletedMessage'));
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
/** Function to get positions */
|
|
110
|
-
getWidgetPositions() {
|
|
111
|
-
this.crmService.getWidgetPositions(this.subscriptionId).subscribe(response => {
|
|
112
|
-
this.positions = response;
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
ngOnDestroy() {
|
|
116
|
-
super.ngOnDestroy();
|
|
117
|
-
}
|
|
118
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmWidgetsComponent, deps: [{ token: i0.Injector }, { token: i1.CrmService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
119
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmWidgetsComponent, selector: "pw-smart-crm-widgets", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>{{ 'Crm.Widgets.Config.Description' | transloco }}</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.widgetsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Widgets.AddWidgets' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_widget_relationships\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"crm_widget_id\">\n {{ 'Crm.Widgets.CrmWidget' | transloco }}\n <p-sortIcon field=\"crm_widget_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"position\">\n {{ 'Crm.Widgets.Position' | transloco }}\n <p-sortIcon field=\"position\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Widgets.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-widget>\n <tr>\n <td data-head=\"Crm Widget\">{{ widget.crm_widget }}</td>\n <td data-head=\"Position\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: positions,\n item: widget?.position\n }\"\n color=\"default\">{{ widget.position }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: widget?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!widget?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.widgetsDetails,\n widget.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (keydown.enter)=\"onDelete(widget.id)\"\n (keydown.space)=\"onDelete(widget.id)\"\n (click)=\"onDelete(widget.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\"*ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Widgets.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i6.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "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", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], 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: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i8.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i12.TranslocoPipe, name: "transloco" }] }); }
|
|
120
|
-
}
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmWidgetsComponent, decorators: [{
|
|
122
|
-
type: Component,
|
|
123
|
-
args: [{ selector: 'pw-smart-crm-widgets', template: "<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>{{ 'Crm.Widgets.Config.Description' | transloco }}</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.widgetsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Widgets.AddWidgets' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_widget_relationships\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"crm_widget_id\">\n {{ 'Crm.Widgets.CrmWidget' | transloco }}\n <p-sortIcon field=\"crm_widget_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"position\">\n {{ 'Crm.Widgets.Position' | transloco }}\n <p-sortIcon field=\"position\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Widgets.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-widget>\n <tr>\n <td data-head=\"Crm Widget\">{{ widget.crm_widget }}</td>\n <td data-head=\"Position\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: positions,\n item: widget?.position\n }\"\n color=\"default\">{{ widget.position }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: widget?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!widget?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.widgetsDetails,\n widget.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (keydown.enter)=\"onDelete(widget.id)\"\n (keydown.space)=\"onDelete(widget.id)\"\n (click)=\"onDelete(widget.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\"*ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Widgets.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n" }]
|
|
124
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CrmService }, { type: i0.ChangeDetectorRef }] });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQXdCLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU14RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTTdELE1BQU0sT0FBTyx3QkFDVCxTQUFRLGdCQUFnQjtJQXlCeEIsWUFDSSxRQUFrQixFQUNELFVBQXNCLEVBQ3RCLEdBQXNCO1FBRXZDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF6Qm5DLFNBQUksR0FBRyxDQUFDLENBQUM7UUFFakIsU0FBSSxHQUFzQjtZQUN0Qix3QkFB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d0I7a0JBSnBDLFNBQVM7K0JBQ0ksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQQUdFX1NJWkUsIFBhZ2luZywgU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBDcm1TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL3NtYXJ0LWNybS1zaGFyZWQnO1xuXG5pbXBvcnQgeyBGaWx0ZXJlZERhdGEgfSBmcm9tICdsaWJzL3NtYXJ0LWNybS9zcmMvbGliL3NoYXJlZC9pbnRlcmZhY2Uvc21hcnQtY3JtLW1vZHVsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgQ3JtV2lkZ2V0UmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS13aWRnZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0td2lkZ2V0cycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS13aWRnZXRzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTbWFydENybVdpZGdldHNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXG57XG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcblxuICAgIGRhdGE6IENybVdpZGdldFJlc3BvbnNlID0ge1xuICAgICAgICBjcm1fd2lkZ2V0X3JlbGF0aW9uc2hpcHM6IFtdLFxuICAgICAgICBvYmplY3RfY291bnQ6IDAsXG4gICAgICAgIHVuZmlsdGVyZWRfY291bnQ6IDBcbiAgICB9O1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGFsbFdpZGdldHM6IEZpbHRlcmVkRGF0YVtdO1xuICAgIHBvc2l0aW9ucyA9IFtdO1xuXG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgbG9hZGluZyA9IHRydWU7XG4gICAgaGFzQWNjZXNzID0gZmFsc2U7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQWNjZXNzID0gdGhpcy5oYXNBZG1pbkFjY2Vzcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldEFsbFN1YnNjcmlwdGlvbldpZGdldHMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRXaWRnZXRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IGFsbCB3aWRnZXRzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxTdWJzY3JpcHRpb25XaWRnZXRzKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsU3Vic2NyaXB0aW9uV2lkZ2V0cyh0aGlzLnN1YnNjcmlwdGlvbklkLCBwYWdpbmcpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsV2lkZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IGFsbCB3aWRnZXRzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxXaWRnZXRzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWxsV2lkZ2V0cyh0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFdpZGdldHMgPSB3aWRnZXRzLmNybV93aWRnZXRzID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLmNybV93aWRnZXRfcmVsYXRpb25zaGlwcz8uZm9yRWFjaChzdWJzY3JpcHRpb25XaWRnZXQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsV2lkZ2V0cz8uZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uV2lkZ2V0LmNybV93aWRnZXRfaWQgPT09IHdpZGdldC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uV2lkZ2V0Wydjcm1fd2lkZ2V0J10gPSB3aWRnZXQubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBkZWxldGUgd2lkZ2V0ICovXG4gICAgb25EZWxldGUoaWQ6IG51bWJlcikge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLnJhaXNlRGVsZXRlUG9wdXAoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVTdWJzY3JpcHRpb25XaWRnZXQoaWQsIHRoaXMuc3Vic2NyaXB0aW9uPy5pZClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN1YnNjcmlwdGlvbldpZGdldHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0NybS5XaWRnZXRzLkRlbGV0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IHBvc2l0aW9ucyAqL1xuICAgIHByaXZhdGUgZ2V0V2lkZ2V0UG9zaXRpb25zKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0V2lkZ2V0UG9zaXRpb25zKHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItM1wiPlxuICAgIDxwPnt7ICdDcm0uV2lkZ2V0cy5Db25maWcuRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvIH19PC9wPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICBkYXRhLWN5PVwiYWRkLWNvbnRhY3RcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMud2lkZ2V0c0RldGFpbHMgKyAnYWRkJ11cIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICB7eyAnQ3JtLldpZGdldHMuQWRkV2lkZ2V0cycgfCB0cmFuc2xvY28gfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciB0YWJsZS1yZXNwb25zaXZlXCJcbiAgICAgIFtjbGFzcy5oaWRlVGFibGVdPVwiZGF0YS51bmZpbHRlcmVkX2NvdW50ID09PSAwXCI+XG4gICAgICA8cC10YWJsZSAjZHRcbiAgICAgICAgW3ZhbHVlXT1cImRhdGEuY3JtX3dpZGdldF9yZWxhdGlvbnNoaXBzXCJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiXG4gICAgICAgIFtsYXp5XT1cInRydWVcIlxuICAgICAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cImRhdGEub2JqZWN0X2NvdW50XCJcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtmaWx0ZXJEZWxheV09XCIxMDAwXCJcbiAgICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcbiAgICAgICAgW2N1c3RvbVNvcnRdPVwidHJ1ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzb3VyY2UuLi5cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdy05MFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiY3JtX3dpZGdldF9pZFwiPlxuICAgICAgICAgICAgICB7eyAnQ3JtLldpZGdldHMuQ3JtV2lkZ2V0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImNybV93aWRnZXRfaWRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgIHt7ICdDcm0uV2lkZ2V0cy5Qb3NpdGlvbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJwb3NpdGlvblwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwidmlzaWJsZVwiPlxuICAgICAgICAgICAgICB7eyAnQ3JtLldpZGdldHMuVmlzaWJsZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJ2aXNpYmxlXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgICBsZXQtd2lkZ2V0PlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDcm0gV2lkZ2V0XCI+e3sgd2lkZ2V0LmNybV93aWRnZXQgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIFthcHBEeW5hbWljQmFkZ2VdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNBcnJheTogcG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogd2lkZ2V0Py5wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImRlZmF1bHRcIj57eyB3aWRnZXQucG9zaXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlZpc2libGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogd2lkZ2V0Py52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyAhIXdpZGdldD8udmlzaWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmUgbGlzdC1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy53aWRnZXRzRGV0YWlscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVsZXRlKHdpZGdldC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkRlbGV0ZSh3aWRnZXQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKHdpZGdldC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9wLXRhYmxlPlxuICAgICAgPGRpdiAqbmdJZj1cImRhdGEub2JqZWN0X2NvdW50ID09PSAwICYmIGRhdGEudW5maWx0ZXJlZF9jb3VudCAhPT0gMFwiPlxuICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnfCB0cmFuc2xvY29cIiBbZGVzY3JpcHRpb25dPVwiJ1NlYXJjaC5Ob0RhdGFEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiA+XG4gICAgPC9wdy1uby1kYXRhPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIipuZ0lmPVwiZGF0YS5vYmplY3RfY291bnQgIT09IDBcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyBkYXRhLm9iamVjdF9jb3VudCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDAgJiYgaXNMb2FkZWRcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0NybS5XaWRnZXRzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuIl19
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core';
|
|
3
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
-
import { CommonService, GeoService } from '@posiwise/common-services';
|
|
5
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
6
|
-
import { CrmService } from '@posiwise/smart-crm-shared';
|
|
7
|
-
import { ValidateForm } from '@posiwise/utils';
|
|
8
|
-
import { map } from 'rxjs';
|
|
9
|
-
import { AppSmartCrm } from '../../../../shared/models/smart-crm.model';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@posiwise/common-services";
|
|
12
|
-
import * as i2 from "@posiwise/smart-crm-shared";
|
|
13
|
-
import * as i3 from "@angular/common";
|
|
14
|
-
import * as i4 from "@angular/forms";
|
|
15
|
-
import * as i5 from "ngx-ui-switch";
|
|
16
|
-
import * as i6 from "@posiwise/directives";
|
|
17
|
-
import * as i7 from "@angular-magic/ngx-gp-autocomplete";
|
|
18
|
-
import * as i8 from "primeng/dropdown";
|
|
19
|
-
import * as i9 from "primeng/multiselect";
|
|
20
|
-
import * as i10 from "primeng/progressspinner";
|
|
21
|
-
import * as i11 from "primeng/autocomplete";
|
|
22
|
-
import * as i12 from "@posiwise/shared-components";
|
|
23
|
-
import * as i13 from "@ng-bootstrap/ng-bootstrap";
|
|
24
|
-
import * as i14 from "@jsverse/transloco";
|
|
25
|
-
export class SmartCrmContactDetailsComponent extends AppBaseComponent {
|
|
26
|
-
/** Function to get form controls */
|
|
27
|
-
get f() {
|
|
28
|
-
return this.form.controls;
|
|
29
|
-
}
|
|
30
|
-
constructor(commonService, crmService, cdr, geoService, injector) {
|
|
31
|
-
super(injector);
|
|
32
|
-
this.commonService = commonService;
|
|
33
|
-
this.crmService = crmService;
|
|
34
|
-
this.cdr = cdr;
|
|
35
|
-
this.geoService = geoService;
|
|
36
|
-
this.countryNames = [];
|
|
37
|
-
this.filteredAccounts = [];
|
|
38
|
-
this.potentials = [];
|
|
39
|
-
this.labels = [];
|
|
40
|
-
this.submitted = false;
|
|
41
|
-
this.buttonBusy = false;
|
|
42
|
-
this.isLoading = true;
|
|
43
|
-
this.form = AppSmartCrm.getContactsForm();
|
|
44
|
-
}
|
|
45
|
-
ngOnInit() {
|
|
46
|
-
this.route.params.subscribe(data => {
|
|
47
|
-
this.id = Number(data['id']);
|
|
48
|
-
if (!Number(data['id'])) {
|
|
49
|
-
this.isLoading = false;
|
|
50
|
-
}
|
|
51
|
-
this.accountId = Number(data['accountId']);
|
|
52
|
-
});
|
|
53
|
-
this.countries$ = this.geoService.getCountries();
|
|
54
|
-
this.countries$.subscribe(res => {
|
|
55
|
-
this.countryNames = res;
|
|
56
|
-
});
|
|
57
|
-
this.departments$ = this.commonService.getOrganizationDepartments();
|
|
58
|
-
this.form.get('crm_account_id').setValue(null);
|
|
59
|
-
this.getUserSubscriptionId().subscribe(response => {
|
|
60
|
-
this.subscriptionId = response;
|
|
61
|
-
this.crmSources$ = this.crmService.getAllAccountSource(this.subscriptionId).pipe(map(res => ({
|
|
62
|
-
crm_sources: [
|
|
63
|
-
{ label: 'Select CRM Source', value: null },
|
|
64
|
-
...(res?.crm_sources ?? []).map(item => ({
|
|
65
|
-
label: item.name,
|
|
66
|
-
value: item.id
|
|
67
|
-
}))
|
|
68
|
-
]
|
|
69
|
-
})));
|
|
70
|
-
this.getDefaultValues(this.subscriptionId);
|
|
71
|
-
if (this.subscriptionId) {
|
|
72
|
-
this.getAccountsBySubscription();
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
handleAddressChange(event) {
|
|
77
|
-
this.form.get('location').setValue(event.formatted_address);
|
|
78
|
-
}
|
|
79
|
-
onSearchCountry(event) {
|
|
80
|
-
let values = [];
|
|
81
|
-
if (event.query) {
|
|
82
|
-
values = this.countryNames.filter((x) => {
|
|
83
|
-
return x.name.toLowerCase().includes(event.query.toLowerCase());
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
this.countryNames.forEach(item => {
|
|
87
|
-
values.push(item);
|
|
88
|
-
});
|
|
89
|
-
this.filteredCountries = values;
|
|
90
|
-
}
|
|
91
|
-
/** Function to get the list of accounts by subscriptionId */
|
|
92
|
-
getAccountsBySubscription() {
|
|
93
|
-
this.crmService.getAccountsBySubscription(this.subscriptionId).subscribe(res => {
|
|
94
|
-
this.accounts = res.accounts;
|
|
95
|
-
if (this.id) {
|
|
96
|
-
this.isLoading = false;
|
|
97
|
-
this.getContactDetails(this.id);
|
|
98
|
-
}
|
|
99
|
-
else if (this.accountId) {
|
|
100
|
-
const accountData = this.accounts.find(x => x.id === this.accountId);
|
|
101
|
-
this.form.get('crm_account_id').patchValue(accountData);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
/** Function to execute on form submission */
|
|
106
|
-
onSave() {
|
|
107
|
-
this.submitted = true;
|
|
108
|
-
this.buttonBusy = true;
|
|
109
|
-
this.form.get('crm_account_id').setValue(this.form.get('crm_account_id').value.id);
|
|
110
|
-
this.form.get('country').setValue(this.form.get('country').value?.code ?? null);
|
|
111
|
-
this.form.value.crm_account_id = Number(this.form.value.crm_account_id);
|
|
112
|
-
const data = { ...this.form.value };
|
|
113
|
-
data.dob = HelperService.dateFormat(this.form.get('dob').value);
|
|
114
|
-
const sub$ = this.id
|
|
115
|
-
? this.crmService.updateContact(this.subscriptionId, this.id, data)
|
|
116
|
-
: this.crmService.postNewContact(this.subscriptionId, data);
|
|
117
|
-
sub$.subscribe(() => {
|
|
118
|
-
this.back();
|
|
119
|
-
this.toast.success(this.translation.translate('Crm.ContactMessage.UpdatedMessage'));
|
|
120
|
-
}).add(() => {
|
|
121
|
-
this.submitted = true;
|
|
122
|
-
this.buttonBusy = false;
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
/** Function to get the specific contact details on edit form */
|
|
126
|
-
getContactDetails(id) {
|
|
127
|
-
this.crmService.getContactById(this.subscriptionId, id).subscribe(response => {
|
|
128
|
-
this.isLoading = false;
|
|
129
|
-
this.cdr.markForCheck();
|
|
130
|
-
this.data = response;
|
|
131
|
-
let dobObject;
|
|
132
|
-
if (response.dob) {
|
|
133
|
-
dobObject = {
|
|
134
|
-
year: Number(response.dob.substring(0, 4)),
|
|
135
|
-
month: Number(response.dob.substring(5, 7)),
|
|
136
|
-
day: Number(response.dob.substring(8, 10))
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
this.form.patchValue(response);
|
|
140
|
-
this.form.patchValue({ dob: dobObject });
|
|
141
|
-
this.countryNames.forEach(x => {
|
|
142
|
-
if (x['code'] === response['country']) {
|
|
143
|
-
this.form.get('country').patchValue(x);
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
this.accounts.forEach(account => {
|
|
147
|
-
if (this.data.crm_account_id === account.id) {
|
|
148
|
-
this.form.get('crm_account_id').patchValue(account);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
/** search accounts */
|
|
154
|
-
search(event) {
|
|
155
|
-
let data = [];
|
|
156
|
-
if (event.query) {
|
|
157
|
-
data = this.accounts.filter((x) => {
|
|
158
|
-
return x.name.toLowerCase().includes(event.query.toLowerCase());
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
this.accounts.forEach(element => {
|
|
163
|
-
data.push(element);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
this.filteredAccounts = data;
|
|
167
|
-
}
|
|
168
|
-
getDefaultValues(id) {
|
|
169
|
-
this.crmService.getCrmContactDefaultValues(id).subscribe(res => {
|
|
170
|
-
this.potentials = res['potential'];
|
|
171
|
-
const label = res['labels'];
|
|
172
|
-
label.forEach(val => {
|
|
173
|
-
const data = {
|
|
174
|
-
label: val,
|
|
175
|
-
value: val
|
|
176
|
-
};
|
|
177
|
-
this.labels.push(data);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
ngOnDestroy() {
|
|
182
|
-
super.ngOnDestroy();
|
|
183
|
-
}
|
|
184
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmContactDetailsComponent, deps: [{ token: i1.CommonService }, { token: i2.CrmService }, { token: i0.ChangeDetectorRef }, { token: i1.GeoService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
185
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmContactDetailsComponent, selector: "pw-smart-crm-contact-details", usesInheritance: true, ngImport: i0, template: "<div class=\"me-auto col-xs-6\">\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=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.ContactMessage.Contact' | transloco }}:\n {{ isLoading ? '' :\n (data?.first_name\n ? data?.first_name + ' ' + data.last_name\n : ('Label.AddNew' | transloco))\n }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\"\n name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\"\n name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\"\n name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Email' | transloco\"\n name=\"email\"\n errorMsg=\"{{\n f['email']?.errors?.required ? 'Please enter email' : 'Please Enter valid email'\n }}\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"email\"\n id=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerified' | transloco\"\n class=\"nowrap\"\n name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\"\n name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\"\n name=\"linkedin_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_url\"\n id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Account\">{{ 'Crm.ContactMessage.Account' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Department' | transloco\"\n name=\"department_id\"\n *ngIf=\"departments$ | async as departments\">\n <p-dropdown\n [options]=\"departments['organization_departments']\"\n formControlName=\"department_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['department_id'].errors }\"\n [placeholder]=\"'Select Department'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label for=\"potential\">{{ 'Crm.ContactMessage.Potential' | transloco }}</label>\n <p-dropdown\n [options]=\"potentials\"\n formControlName=\"potential\"\n [placeholder]=\"'Select Potential'\">\n </p-dropdown>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label for=\"contact\">{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\"\n *ngIf=\"crmSources$ | async as source\">\n <label for=\"source\">{{ 'Crm.ContactMessage.Source' | transloco }}</label>\n <p-dropdown\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\"\n id=\"country\"\n [options]=\"source['crm_sources']\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"crm_source_id\"\n placeholder=\"select crm source\">\n </p-dropdown>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4 mt-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\"\n name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "directive", type: i6.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i9.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i12.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i13.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: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
186
|
-
}
|
|
187
|
-
__decorate([
|
|
188
|
-
ValidateForm('form'),
|
|
189
|
-
__metadata("design:type", Function),
|
|
190
|
-
__metadata("design:paramtypes", []),
|
|
191
|
-
__metadata("design:returntype", void 0)
|
|
192
|
-
], SmartCrmContactDetailsComponent.prototype, "onSave", null);
|
|
193
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmContactDetailsComponent, decorators: [{
|
|
194
|
-
type: Component,
|
|
195
|
-
args: [{ selector: 'pw-smart-crm-contact-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"me-auto col-xs-6\">\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=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.ContactMessage.Contact' | transloco }}:\n {{ isLoading ? '' :\n (data?.first_name\n ? data?.first_name + ' ' + data.last_name\n : ('Label.AddNew' | transloco))\n }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\"\n name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\"\n name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\"\n name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Email' | transloco\"\n name=\"email\"\n errorMsg=\"{{\n f['email']?.errors?.required ? 'Please enter email' : 'Please Enter valid email'\n }}\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"email\"\n id=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerified' | transloco\"\n class=\"nowrap\"\n name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\"\n name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\"\n name=\"linkedin_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_url\"\n id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Account\">{{ 'Crm.ContactMessage.Account' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Department' | transloco\"\n name=\"department_id\"\n *ngIf=\"departments$ | async as departments\">\n <p-dropdown\n [options]=\"departments['organization_departments']\"\n formControlName=\"department_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['department_id'].errors }\"\n [placeholder]=\"'Select Department'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label for=\"potential\">{{ 'Crm.ContactMessage.Potential' | transloco }}</label>\n <p-dropdown\n [options]=\"potentials\"\n formControlName=\"potential\"\n [placeholder]=\"'Select Potential'\">\n </p-dropdown>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label for=\"contact\">{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\"\n *ngIf=\"crmSources$ | async as source\">\n <label for=\"source\">{{ 'Crm.ContactMessage.Source' | transloco }}</label>\n <p-dropdown\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\"\n id=\"country\"\n [options]=\"source['crm_sources']\"\n optionLabel=\"label\"\n optionValue=\"value\"\n formControlName=\"crm_source_id\"\n placeholder=\"select crm source\">\n </p-dropdown>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4 mt-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\"\n name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n" }]
|
|
196
|
-
}], ctorParameters: () => [{ type: i1.CommonService }, { type: i2.CrmService }, { type: i0.ChangeDetectorRef }, { type: i1.GeoService }, { type: i0.Injector }], propDecorators: { onSave: [] } });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29udGFjdHMvc21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscy9zbWFydC1jcm0tY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1jb250YWN0cy9zbWFydC1jcm0tY29udGFjdC1kZXRhaWxzL3NtYXJ0LWNybS1jb250YWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBTXZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU94RSxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsZ0JBQWdCO0lBMEJqRSxvQ0FBb0M7SUFDcEMsSUFBSSxDQUFDO1FBQ0QsT0FB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TDNDLFNBQVM7K0JBQ0ksOEJBQThCLG1CQUV2Qix1QkFBdUIsQ0FBQyxNQUFNOzJMQWtIL0MsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlLCBHZW9TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb3VudHJ5LCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBDcm1TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL3NtYXJ0LWNybS1zaGFyZWQnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5nYkRhdGVTdHJ1Y3QgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbmltcG9ydCB7IENybUFjY291bnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY2NvdW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDcm1Db250YWN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tY29udGFjdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwU21hcnRDcm0gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzL3NtYXJ0LWNybS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS1jb250YWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQ29udGFjdERldGFpbHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgY291bnRyaWVzJDogT2JzZXJ2YWJsZTxDb3VudHJ5W10+O1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBpZDogbnVtYmVyO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgYWNjb3VudElkOiBudW1iZXI7XG5cbiAgICB1c2VyOiBVc2VyO1xuICAgIGRhdGE6IENybUNvbnRhY3Q7XG5cbiAgICBhY2NvdW50czogQ3JtQWNjb3VudFtdO1xuICAgIGNvdW50cnlOYW1lcyA9IFtdO1xuICAgIGZpbHRlcmVkQ291bnRyaWVzOiBDb3VudHJ5W107XG4gICAgZmlsdGVyZWRBY2NvdW50czogQ3JtQWNjb3VudFtdID0gW107XG5cbiAgICBkZXBhcnRtZW50cyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBjcm1Tb3VyY2VzJDogT2JzZXJ2YWJsZTx1bmtub3duPjtcblxuICAgIHBvdGVudGlhbHMgPSBbXTtcbiAgICBsYWJlbHMgPSBbXTtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBmb3JtIGNvbnRyb2xzICovXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2VvU2VydmljZTogR2VvU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwU21hcnRDcm0uZ2V0Q29udGFjdHNGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICBpZiAoIU51bWJlcihkYXRhWydpZCddKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjY291bnRJZCA9IE51bWJlcihkYXRhWydhY2NvdW50SWQnXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLmdlb1NlcnZpY2UuZ2V0Q291bnRyaWVzKCk7XG4gICAgICAgIHRoaXMuY291bnRyaWVzJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVzID0gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50cyQgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGVwYXJ0bWVudHMoKTtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS5zZXRWYWx1ZShudWxsKTtcblxuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb25JZCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLmNybVNvdXJjZXMkID0gdGhpcy5jcm1TZXJ2aWNlLmdldEFsbEFjY291bnRTb3VyY2UodGhpcy5zdWJzY3JpcHRpb25JZCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGNybV9zb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnU2VsZWN0IENSTSBTb3VyY2UnLCB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHJlcz8uY3JtX3NvdXJjZXMgPz8gW10pLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcyh0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50c0J5U3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUFkZHJlc3NDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnbG9jYXRpb24nKS5zZXRWYWx1ZShldmVudC5mb3JtYXR0ZWRfYWRkcmVzcyk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hDb3VudHJ5KGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmNvdW50cnlOYW1lcy5maWx0ZXIoKHg6IENvdW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQucXVlcnkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY291bnRyeU5hbWVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb3VudHJpZXMgPSB2YWx1ZXM7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCB0aGUgbGlzdCBvZiBhY2NvdW50cyBieSBzdWJzY3JpcHRpb25JZCAqL1xuICAgIHByaXZhdGUgZ2V0QWNjb3VudHNCeVN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFjY291bnRzQnlTdWJzY3JpcHRpb24odGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRzID0gcmVzLmFjY291bnRzO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udGFjdERldGFpbHModGhpcy5pZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudERhdGEgPSB0aGlzLmFjY291bnRzLmZpbmQoeCA9PiB4LmlkID09PSB0aGlzLmFjY291bnRJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS5wYXRjaFZhbHVlKGFjY291bnREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZm9ybSBzdWJtaXNzaW9uICovXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykuc2V0VmFsdWUodGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS52YWx1ZS5pZCk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NvdW50cnknKS5zZXRWYWx1ZSh0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5JykudmFsdWU/LmNvZGUgPz8gbnVsbCk7XG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZS5jcm1fYWNjb3VudF9pZCA9IE51bWJlcih0aGlzLmZvcm0udmFsdWUuY3JtX2FjY291bnRfaWQpO1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcbiAgICAgICAgZGF0YS5kb2IgPSBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQodGhpcy5mb3JtLmdldCgnZG9iJykudmFsdWUpO1xuICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgPyB0aGlzLmNybVNlcnZpY2UudXBkYXRlQ29udGFjdCh0aGlzLnN1YnNjcmlwdGlvbklkLCB0aGlzLmlkLCBkYXRhKVxuICAgICAgICAgICAgOiB0aGlzLmNybVNlcnZpY2UucG9zdE5ld0NvbnRhY3QodGhpcy5zdWJzY3JpcHRpb25JZCwgZGF0YSk7XG4gICAgICAgIHN1YiQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdDcm0uQ29udGFjdE1lc3NhZ2UuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCB0aGUgc3BlY2lmaWMgY29udGFjdCBkZXRhaWxzIG9uIGVkaXQgZm9ybSAqL1xuICAgIHByaXZhdGUgZ2V0Q29udGFjdERldGFpbHMoaWQpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldENvbnRhY3RCeUlkKHRoaXMuc3Vic2NyaXB0aW9uSWQsIGlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZG9iT2JqZWN0OiBOZ2JEYXRlU3RydWN0O1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRvYikge1xuICAgICAgICAgICAgICAgIGRvYk9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogTnVtYmVyKHJlc3BvbnNlLmRvYi5zdWJzdHJpbmcoMCwgNCkpLFxuICAgICAgICAgICAgICAgICAgICBtb250aDogTnVtYmVyKHJlc3BvbnNlLmRvYi5zdWJzdHJpbmcoNSwgNykpLFxuICAgICAgICAgICAgICAgICAgICBkYXk6IE51bWJlcihyZXNwb25zZS5kb2Iuc3Vic3RyaW5nKDgsIDEwKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBkb2I6IGRvYk9iamVjdCB9KTtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHhbJ2NvZGUnXSA9PT0gcmVzcG9uc2VbJ2NvdW50cnknXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5JykucGF0Y2hWYWx1ZSh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudHMuZm9yRWFjaChhY2NvdW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmNybV9hY2NvdW50X2lkID09PSBhY2NvdW50LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykucGF0Y2hWYWx1ZShhY2NvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIHNlYXJjaCBhY2NvdW50cyAqL1xuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICBsZXQgZGF0YSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmFjY291bnRzLmZpbHRlcigoeDogQ3JtQWNjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRBY2NvdW50cyA9IGRhdGE7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFZhbHVlcyhpZCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0Q3JtQ29udGFjdERlZmF1bHRWYWx1ZXMoaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxzID0gcmVzWydwb3RlbnRpYWwnXTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcmVzWydsYWJlbHMnXTtcbiAgICAgICAgICAgIGxhYmVsLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02XCI+XG4gIDxhIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byBUYXJnZXRcIlxuICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gIDxoMyBjbGFzcz1cIm0tc3ViaGVhZGVyX190aXRsZSBtLXN1YmhlYWRlcl9fdGl0bGUtLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7ICdDcm0uQ29udGFjdE1lc3NhZ2UuQ29udGFjdCcgfCB0cmFuc2xvY28gfX06XG4gICAgICB7eyBpc0xvYWRpbmcgPyAnJyA6XG4gICAgICAgICAgICAgICAoZGF0YT8uZmlyc3RfbmFtZVxuICAgICAgICAgICAgICAgICAgICA/IGRhdGE/LmZpcnN0X25hbWUgKyAnICcgKyBkYXRhLmxhc3RfbmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICgnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbykpXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvZGl2PlxuPGRpdiBjbGFzcz1cInAtMiBtdC0zXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQ29udGFjdE1lc3NhZ2UuRmlyc3ROYW1lJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImZpcnN0X25hbWVcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLkNvbnRhY3RNZXNzYWdlLkZpcnN0TmFtZUVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3RfbmFtZVwiXG4gICAgICAgICAgICBpZD1cImZpcnN0X25hbWVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydmaXJzdF9uYW1lJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQ29udGFjdE1lc3NhZ2UuTGFzdE5hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibGFzdF9uYW1lXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5Db250YWN0TWVzc2FnZS5MYXN0TmFtZUVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFzdF9uYW1lXCJcbiAgICAgICAgICAgIGlkPVwibGFzdF9uYW1lXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbGFzdF9uYW1lJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuTG9jYXRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Mb2NhdGlvbkVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiPlxuICAgICAgICAgIDxpbnB1dCBuZ3gtZ3AtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAjcGxhY2VzPVwibmd4LXBsYWNlc1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAob25BZGRyZXNzQ2hhbmdlKT1cImhhbmRsZUFkZHJlc3NDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2xvY2F0aW9uJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtc20tNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCIgZm9yPVwiQ291bnRyeVwiPnt7ICdDcm0uQWNjb3VudE1lc3NhZ2UuQ291bnRyeScgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICA8cC1hdXRvQ29tcGxldGUgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeVwiXG4gICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImZpbHRlcmVkQ291bnRyaWVzXCJcbiAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2hDb3VudHJ5KCRldmVudClcIlxuICAgICAgICAgIGRhdGFLZXk9XCJjb2RlXCJcbiAgICAgICAgICBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDb3VudHJ5XCJcbiAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiYgZlsnY291bnRyeSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQ29udGFjdE1lc3NhZ2UuSGVhZGxpbmUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiaGVhZGxpbmVcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLkNvbnRhY3RNZXNzYWdlLkhlYWRsaW5lRXJyb3JNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJoZWFkbGluZVwiXG4gICAgICAgICAgICBpZD1cImhlYWRsaW5lXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnaGVhZGxpbmUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5Db250YWN0TWVzc2FnZS5UZWwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwidGVsXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5Db250YWN0TWVzc2FnZS5UZWxFcnJvck1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRlbFwiXG4gICAgICAgICAgICBpZD1cInRlbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RlbCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkNvbnRhY3RNZXNzYWdlLkVtYWlsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImVtYWlsXCJcbiAgICAgICAgICBlcnJvck1zZz1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgICBmWydlbWFpbCddPy5lcnJvcnM/LnJlcXVpcmVkID8gJ1BsZWFzZSBlbnRlciBlbWFpbCcgOiAnUGxlYXNlIEVudGVyIHZhbGlkIGVtYWlsJ1xuICAgICAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICBpZD1cImVtYWlsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZW1haWwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkNvbnRhY3RNZXNzYWdlLkVtYWlsVmVyaWZpZWQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgIGNsYXNzPVwibm93cmFwXCJcbiAgICAgICAgICAgIG5hbWU9XCJlbWFpbF92ZXJpZmllZFwiPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbF92ZXJpZmllZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJlbWFpbF92ZXJpZmllZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZW1haWxfdmVyaWZpZWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5Db250YWN0TWVzc2FnZS5MaW5rZWRJblVybCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJsaW5rZWRpbl91cmxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGlua2VkaW5fdXJsXCJcbiAgICAgICAgICAgIGlkPVwibGlua2VkaW5fdXJsXCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtc20tNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCIgZm9yPVwiQWNjb3VudFwiPnt7ICdDcm0uQ29udGFjdE1lc3NhZ2UuQWNjb3VudCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRBY2NvdW50c1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX2FjY291bnRfaWRcIlxuICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgZmllbGQ9XCJuYW1lXCJcbiAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFjY291bnRzXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5Db250YWN0TWVzc2FnZS5EZXBhcnRtZW50JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImRlcGFydG1lbnRfaWRcIlxuICAgICAgICAgICpuZ0lmPVwiZGVwYXJ0bWVudHMkIHwgYXN5bmMgYXMgZGVwYXJ0bWVudHNcIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZGVwYXJ0bWVudHNbJ29yZ2FuaXphdGlvbl9kZXBhcnRtZW50cyddXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydkZXBhcnRtZW50X2lkJ10uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgRGVwYXJ0bWVudCdcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIj5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cInBvdGVudGlhbFwiPnt7ICdDcm0uQ29udGFjdE1lc3NhZ2UuUG90ZW50aWFsJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgW29wdGlvbnNdPVwicG90ZW50aWFsc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicG90ZW50aWFsXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBQb3RlbnRpYWwnXCI+XG4gICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJjb250YWN0XCI+e3sgJ0NybS5Db250YWN0TWVzc2FnZS5MYWJlbHMnIHwgdHJhbnNsb2NvIH19IDwvbGFiZWw+XG4gICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImxhYmVsc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxzXCJcbiAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiXG4gICAgICAgICpuZ0lmPVwiY3JtU291cmNlcyQgfCBhc3luYyBhcyBzb3VyY2VcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cInNvdXJjZVwiPnt7ICdDcm0uQ29udGFjdE1lc3NhZ2UuU291cmNlJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3NvdXJjZV9pZCddLmVycm9ycyB9XCJcbiAgICAgICAgaWQ9XCJjb3VudHJ5XCJcbiAgICAgICAgW29wdGlvbnNdPVwic291cmNlWydjcm1fc291cmNlcyddXCJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJzZWxlY3QgY3JtIHNvdXJjZVwiPlxuICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTQgbXQtM1wiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkNvbnRhY3RNZXNzYWdlLkRhdGVPZkJpcnRoJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImRvYlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZC1tbW0teXl5eVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvYlwiXG4gICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLlN1Ym1pdCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
|