@adlfe/campaign-management-library 2.12.0 → 2.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adlfe-campaign-management-library.d.ts +11 -14
- package/adlfe-campaign-management-library.metadata.json +1 -1
- package/bundles/adlfe-campaign-management-library.umd.js +453 -343
- package/bundles/adlfe-campaign-management-library.umd.js.map +1 -1
- package/bundles/adlfe-campaign-management-library.umd.min.js +2 -2
- package/bundles/adlfe-campaign-management-library.umd.min.js.map +1 -1
- package/esm2015/adlfe-campaign-management-library.js +12 -15
- package/esm2015/lib/campaign-management/components/input-numeric/input-numeric.component.js +8 -2
- package/esm2015/lib/campaign-management/models/contact-category-dto.model.js +1 -1
- package/esm2015/lib/campaign-management/models/general-information-wa-req.model.js +37 -9
- package/esm2015/lib/campaign-management/models/template-wa.model.js +1 -1
- package/esm2015/lib/campaign-management/modules/campaign-index/component/filter-in-list-of-campaign/filter-in-list-of-campaign.component.js +1 -1
- package/esm2015/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +329 -267
- package/esm2015/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +6 -12
- package/esm2015/lib/campaign-management/modules/new-campaign/new-campaign.component.js +14 -9
- package/esm2015/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +34 -38
- package/esm2015/lib/core/const/validation-message.const.js +2 -1
- package/esm2015/public-api.js +6 -1
- package/esm5/adlfe-campaign-management-library.js +12 -15
- package/esm5/lib/campaign-management/components/input-numeric/input-numeric.component.js +8 -2
- package/esm5/lib/campaign-management/models/contact-category-dto.model.js +1 -1
- package/esm5/lib/campaign-management/models/general-information-wa-req.model.js +38 -9
- package/esm5/lib/campaign-management/models/template-wa.model.js +1 -1
- package/esm5/lib/campaign-management/modules/campaign-index/component/filter-in-list-of-campaign/filter-in-list-of-campaign.component.js +1 -1
- package/esm5/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +342 -268
- package/esm5/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +6 -12
- package/esm5/lib/campaign-management/modules/new-campaign/new-campaign.component.js +18 -9
- package/esm5/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +35 -41
- package/esm5/lib/core/const/validation-message.const.js +2 -1
- package/esm5/public-api.js +6 -1
- package/fesm2015/adlfe-campaign-management-library.js +423 -329
- package/fesm2015/adlfe-campaign-management-library.js.map +1 -1
- package/fesm5/adlfe-campaign-management-library.js +440 -332
- package/fesm5/adlfe-campaign-management-library.js.map +1 -1
- package/lib/campaign-management/components/input-numeric/input-numeric.component.d.ts +2 -0
- package/lib/campaign-management/models/contact-category-dto.model.d.ts +0 -1
- package/lib/campaign-management/models/general-information-wa-req.model.d.ts +5 -0
- package/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.d.ts +10 -6
- package/lib/campaign-management/modules/new-campaign/new-campaign.component.d.ts +1 -0
- package/lib/core/const/validation-message.const.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __decorate, __param } from 'tslib';
|
|
1
|
+
import { __decorate, __param, __awaiter } from 'tslib';
|
|
2
2
|
import { Component, EventEmitter, Output, Input, NgModule, ContentChild, forwardRef, NgZone, Directive, ɵɵdefineInjectable, ɵɵinject, Injectable, Inject, ViewChild } from '@angular/core';
|
|
3
3
|
import { MapsAPILoader, AgmCoreModule } from '@agm/core';
|
|
4
4
|
import { CommonModule, DatePipe } from '@angular/common';
|
|
@@ -33,7 +33,7 @@ import { AngularEditorModule } from '@kolkov/angular-editor';
|
|
|
33
33
|
import { NgbPaginationModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
|
|
34
34
|
import * as echarts from 'echarts';
|
|
35
35
|
import { Subject, fromEvent, of } from 'rxjs';
|
|
36
|
-
import { debounceTime, takeUntil, tap
|
|
36
|
+
import { debounceTime, takeUntil, tap } from 'rxjs/operators';
|
|
37
37
|
import { MatChipsModule } from '@angular/material/chips';
|
|
38
38
|
import { MatNativeDateModule } from '@angular/material/core';
|
|
39
39
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
@@ -250,13 +250,19 @@ __decorate([
|
|
|
250
250
|
__decorate([
|
|
251
251
|
Input()
|
|
252
252
|
], InputNumericComponent.prototype, "maxLength", void 0);
|
|
253
|
+
__decorate([
|
|
254
|
+
Input()
|
|
255
|
+
], InputNumericComponent.prototype, "suffix", void 0);
|
|
256
|
+
__decorate([
|
|
257
|
+
Input()
|
|
258
|
+
], InputNumericComponent.prototype, "hint", void 0);
|
|
253
259
|
__decorate([
|
|
254
260
|
ContentChild('suffix')
|
|
255
261
|
], InputNumericComponent.prototype, "suffixTmpl", void 0);
|
|
256
262
|
InputNumericComponent = InputNumericComponent_1 = __decorate([
|
|
257
263
|
Component({
|
|
258
264
|
selector: 'app-input[type=numeric]',
|
|
259
|
-
template: "<div class=\"grid\">\r\n <mat-form-field class=\"w-full\" appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label *ngIf=\"label\">\r\n <span>{{ label }}</span>\r\n </mat-label>\r\n <input\r\n type=\"text\"\r\n [id]=\"identifier\"\r\n [attr.data-testid]=\"identifier\"\r\n matInput\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"formControl\"\r\n (input)=\"handleInput($event)\"\r\n [attr.maxlength]=\"maxLength\"\r\n />\r\n <span *ngIf=\"suffixTmpl\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"suffixTmpl\"></ng-container>\r\n </span>\r\n </mat-form-field>\r\n <mat-error align=\"end\" class=\"leading-zero\" *ngIf=\"isInvalid\">\r\n <small class=\"text-xs\">\r\n {{ errors?.message }}\r\n </small>\r\n </mat-error>\r\n</div>\r\n",
|
|
265
|
+
template: "<div class=\"grid\">\r\n <mat-form-field class=\"w-full\" appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label *ngIf=\"label\">\r\n <span>{{ label }}</span>\r\n </mat-label>\r\n <input\r\n type=\"text\"\r\n [id]=\"identifier\"\r\n [attr.data-testid]=\"identifier\"\r\n matInput\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"formControl\"\r\n (input)=\"handleInput($event)\"\r\n [attr.maxlength]=\"maxLength\"\r\n />\r\n <span *ngIf=\"suffixTmpl\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"suffixTmpl\"></ng-container>\r\n </span>\r\n\r\n <span *ngIf=\"suffix\" matSuffix>\r\n {{ suffix }}\r\n </span>\r\n </mat-form-field>\r\n <mat-hint *ngIf=\"hint\">\r\n {{ hint }}\r\n </mat-hint>\r\n\r\n <mat-error align=\"end\" class=\"leading-zero\" *ngIf=\"isInvalid\">\r\n <small class=\"text-xs\">\r\n {{ errors?.message }}\r\n </small>\r\n </mat-error>\r\n</div>\r\n",
|
|
260
266
|
providers: [
|
|
261
267
|
{
|
|
262
268
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -1380,6 +1386,7 @@ const GeneralInformationWAMessageValidationConst = {
|
|
|
1380
1386
|
catalogue: [{ type: 'required', message: 'Catalog is required' }],
|
|
1381
1387
|
product: [{ type: 'required', message: 'Product is required' }],
|
|
1382
1388
|
body: [{ type: 'maxlength', message: 'Maximum character 100' }],
|
|
1389
|
+
paramName: [{ type: 'required', message: 'Variable Name is required' }],
|
|
1383
1390
|
};
|
|
1384
1391
|
const GeneralInformationEmailMessageValidationConst = {
|
|
1385
1392
|
channel: [{ type: 'required', message: 'Message Type is required' }],
|
|
@@ -1662,7 +1669,7 @@ FilterInListOfCampaignComponent = __decorate([
|
|
|
1662
1669
|
Component({
|
|
1663
1670
|
selector: 'lib-filter-in-list-of-campaign',
|
|
1664
1671
|
template: "<p class=\"font-16px font-bold\">Filter</p>\r\n\r\n<form [formGroup]=\"form\" class=\"contact-filter\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-70\">\r\n <mat-label>Business Name</mat-label>\r\n <mat-select placeholder=\"Select Business Name\" formControlName=\"businessName\">\r\n <div class=\"select-search\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n (searchRes)=\"businessNameSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option value=\"\"> --- select none --- </mat-option>\r\n <mat-option\r\n *ngFor=\"let option of filteredBusinessNameOption\"\r\n [value]=\"option.id\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"!filteredBusinessNameOption.length\" disabled>\r\n No data found\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-70\">\r\n <mat-label>Channel</mat-label>\r\n\r\n <mat-select placeholder=\"Select the Channel\" formControlName=\"medium\">\r\n <mat-option value=\"\"> --- select none --- </mat-option>\r\n <mat-option\r\n *ngFor=\"let option of filteredChannelOption\"\r\n [value]=\"option.value\"\r\n (click)=\"getTemplateOptionService()\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n <mat-option *ngIf=\"!filteredChannelOption.length\" disabled>\r\n No data found\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Template Name</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"templateName\"\r\n placeholder=\"Select template\"\r\n [complete]=\"isHaveNextTemplateOption === false\"\r\n [compareWith]=\"templateSelectedDisplay\"\r\n (infiniteScroll)=\"getNextTemplateBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('templateName').value?.name\"\r\n (searchRes)=\"templateSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of templateOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingTemplateOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-70\">\r\n <mat-label>Status</mat-label>\r\n\r\n <mat-select placeholder=\"Select the Status\" formControlName=\"status\">\r\n <div class=\"select-search\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n (searchRes)=\"statusSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option value=\"\"> --- select none --- </mat-option>\r\n <mat-option\r\n *ngFor=\"let option of filteredStatusOption\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n <mat-option *ngIf=\"!filteredStatusOption.length\" disabled>\r\n No data found\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label> Start Date </mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"startDatePicker\"\r\n formControlName=\"startDate\"\r\n class=\"mat-datepicker-input\"\r\n (dateChange)=\"validateBackDate()\"\r\n />\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"startDatePicker\">\r\n </mat-datepicker-toggle>\r\n <mat-icon\r\n *ngIf=\"form.get('startDate').value\"\r\n matDatepickerToggleIcon\r\n (click)=\"clearDate()\"\r\n >clear</mat-icon\r\n >\r\n <mat-datepicker #startDatePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-12\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label> End Date </mat-label>\r\n <input\r\n matInput\r\n [min]=\"form.get('startDate').value\"\r\n [matDatepicker]=\"endDatePicker\"\r\n formControlName=\"endDate\"\r\n class=\"mat-datepicker-input\"\r\n (dateChange)=\"validateBackDate()\"\r\n />\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"endDatePicker\"> </mat-datepicker-toggle>\r\n <mat-icon\r\n *ngIf=\"form.get('endDate').value\"\r\n matDatepickerToggleIcon\r\n (click)=\"clearDate()\"\r\n >clear</mat-icon\r\n >\r\n <mat-datepicker #endDatePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div style=\"display: flex; flex: 1; width: 100%\">\r\n <button\r\n mat-stroked-button\r\n color=\"primary-telin\"\r\n class=\"telin-font-color w-48\"\r\n style=\"width: 100%; margin-bottom: 10px\"\r\n (click)=\"onReset()\"\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n <div class=\"d-flex justify-content-between\">\r\n <button mat-stroked-button color=\"secondary-telin\" class=\"w-48\" (click)=\"onCancel()\">\r\n Cancel\r\n </button>\r\n\r\n <button mat-flat-button color=\"primary-telin-blue2\" class=\"w-48\" (click)=\"onApply()\">\r\n Apply\r\n </button>\r\n </div>\r\n </div>\r\n</form>\r\n",
|
|
1665
|
-
styles: [".contact-filter .platform{display
|
|
1672
|
+
styles: [".contact-filter .platform{display:grid;grid-gap:5px;grid-template-columns:auto 1fr auto}.button-row{margin:8px 8px 8px 0}.mat-datepicker-input{width:85%}.mat-icon{position:relative;float:right;top:-7px;cursor:pointer;color:rgba(0,0,0,.54)}.select-search{margin:20px}"]
|
|
1666
1673
|
}),
|
|
1667
1674
|
Injectable({
|
|
1668
1675
|
providedIn: 'root',
|
|
@@ -2377,14 +2384,12 @@ class FailoverAccountReqModel {
|
|
|
2377
2384
|
|
|
2378
2385
|
class GeneralInformationWAReqModel {
|
|
2379
2386
|
clone(source) {
|
|
2380
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
2381
|
-
/* Source Mapping */
|
|
2387
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
2382
2388
|
if (((_a = source) === null || _a === void 0 ? void 0 : _a.media) === 'IMAGE' ||
|
|
2383
2389
|
((_b = source) === null || _b === void 0 ? void 0 : _b.media) === 'VIDEO' ||
|
|
2384
2390
|
((_c = source) === null || _c === void 0 ? void 0 : _c.media) === 'DOCUMENT') {
|
|
2385
2391
|
source.channel = source.media;
|
|
2386
2392
|
}
|
|
2387
|
-
/* ./ Source Mapping */
|
|
2388
2393
|
if (source.campaignName) {
|
|
2389
2394
|
this.name = source.campaignName;
|
|
2390
2395
|
}
|
|
@@ -2416,6 +2421,12 @@ class GeneralInformationWAReqModel {
|
|
|
2416
2421
|
fileName: source.fileName,
|
|
2417
2422
|
};
|
|
2418
2423
|
}
|
|
2424
|
+
if (source.buttonParams && Array.isArray(source.buttonParams)) {
|
|
2425
|
+
this.buttonParams = source.buttonParams.map((btn) => ({
|
|
2426
|
+
label: btn.label,
|
|
2427
|
+
payload: btn.payload ? btn.payload : btn.label,
|
|
2428
|
+
}));
|
|
2429
|
+
}
|
|
2419
2430
|
if (source.template) {
|
|
2420
2431
|
this.template = {
|
|
2421
2432
|
id: source.template.ID,
|
|
@@ -2423,12 +2434,21 @@ class GeneralInformationWAReqModel {
|
|
|
2423
2434
|
lang: source.template.lang,
|
|
2424
2435
|
headerUrl: source.targetURL,
|
|
2425
2436
|
header: (_g = (_f = source.paramHeader) === null || _f === void 0 ? void 0 : _f.map((t) => t.name), (_g !== null && _g !== void 0 ? _g : [])),
|
|
2426
|
-
data: (
|
|
2427
|
-
|
|
2437
|
+
data: ((_h = source.variables) === null || _h === void 0 ? void 0 : _h.length) ? source.variables.map((v) => v.paramName)
|
|
2438
|
+
: (_k = (_j = source.paramBody) === null || _j === void 0 ? void 0 : _j.map((t) => t.name), (_k !== null && _k !== void 0 ? _k : [])),
|
|
2439
|
+
button: (_l = source.paramButton) === null || _l === void 0 ? void 0 : _l.reduce((result, each) => {
|
|
2428
2440
|
var _a;
|
|
2429
2441
|
result.push((_a = each.name.map((t) => t.name), (_a !== null && _a !== void 0 ? _a : [])));
|
|
2430
2442
|
return result;
|
|
2431
2443
|
}, []),
|
|
2444
|
+
buttonParams: source.buttonParams
|
|
2445
|
+
? source.buttonParams.map((btn) => {
|
|
2446
|
+
return {
|
|
2447
|
+
label: btn.label,
|
|
2448
|
+
payload: btn.payload ? btn.payload : btn.label,
|
|
2449
|
+
};
|
|
2450
|
+
})
|
|
2451
|
+
: [],
|
|
2432
2452
|
};
|
|
2433
2453
|
if (source.template.category === 'AUTHENTICATION')
|
|
2434
2454
|
this.template = {
|
|
@@ -2437,6 +2457,7 @@ class GeneralInformationWAReqModel {
|
|
|
2437
2457
|
header: null,
|
|
2438
2458
|
data: [source.otpValue],
|
|
2439
2459
|
button: [[source.otpValue]],
|
|
2460
|
+
buttonParams: [],
|
|
2440
2461
|
};
|
|
2441
2462
|
if (source.template.ID)
|
|
2442
2463
|
this.template.id = source.template.ID;
|
|
@@ -2444,11 +2465,25 @@ class GeneralInformationWAReqModel {
|
|
|
2444
2465
|
if (this.type === 'utility') {
|
|
2445
2466
|
this.type = 'template';
|
|
2446
2467
|
this.category = 'utility';
|
|
2447
|
-
|
|
2468
|
+
const mappedVariables = ((_o = (_m = source) === null || _m === void 0 ? void 0 : _m.variables) === null || _o === void 0 ? void 0 : _o.length) ? source.variables.map((v) => v.paramName)
|
|
2469
|
+
: [];
|
|
2470
|
+
if ((_p = source) === null || _p === void 0 ? void 0 : _p.isUseExistingTemplate) {
|
|
2471
|
+
this.template = Object.assign(Object.assign({}, source.template), { data: mappedVariables.length > 0 ? mappedVariables : source.template.data || [] });
|
|
2472
|
+
}
|
|
2473
|
+
else {
|
|
2474
|
+
this.template = {
|
|
2475
|
+
name: '',
|
|
2476
|
+
lang: 'id',
|
|
2477
|
+
header: null,
|
|
2478
|
+
button: null,
|
|
2479
|
+
data: mappedVariables,
|
|
2480
|
+
buttonParams: [],
|
|
2481
|
+
};
|
|
2482
|
+
}
|
|
2448
2483
|
this.isNeedSave = source.isNeedSave;
|
|
2449
2484
|
this.ttlSeconds = source.ttl;
|
|
2450
|
-
if ((
|
|
2451
|
-
this.text = (_r = (
|
|
2485
|
+
if ((_q = source) === null || _q === void 0 ? void 0 : _q.isUseExistingTemplate) {
|
|
2486
|
+
this.text = ((_r = source) === null || _r === void 0 ? void 0 : _r.text) || ((_u = (_t = (_s = source) === null || _s === void 0 ? void 0 : _s.template) === null || _t === void 0 ? void 0 : _t.body) === null || _u === void 0 ? void 0 : _u.text);
|
|
2452
2487
|
}
|
|
2453
2488
|
}
|
|
2454
2489
|
return this;
|
|
@@ -2708,13 +2743,18 @@ let NewCampaignComponent = class NewCampaignComponent {
|
|
|
2708
2743
|
return (_h = (_g = body) === null || _g === void 0 ? void 0 : _g.split(/\\n|\n/).join('<br />').split(/\\t|\t/).join(' '), (_h !== null && _h !== void 0 ? _h : ''));
|
|
2709
2744
|
}
|
|
2710
2745
|
saveGeneralInformationService() {
|
|
2711
|
-
|
|
2712
|
-
this.
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2746
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2747
|
+
if (!this.onCheckTwilioCounterValid()) {
|
|
2748
|
+
this.toastr.error('Segment cannot more than 10');
|
|
2749
|
+
this.isSubmit = false;
|
|
2750
|
+
return;
|
|
2751
|
+
}
|
|
2752
|
+
const bodyReq = new GeneralInformationWAReqModel().clone(Object.assign({}, this.generalInformationData));
|
|
2753
|
+
const payloadValue = bodyReq.convert();
|
|
2754
|
+
this.saveGeneralInformation(payloadValue);
|
|
2755
|
+
});
|
|
2756
|
+
}
|
|
2757
|
+
saveGeneralInformation(payloadValue) {
|
|
2718
2758
|
if (payloadValue.template && this.generalInformationData.template) {
|
|
2719
2759
|
payloadValue.template.type =
|
|
2720
2760
|
payloadValue.template.type || this.generalInformationData.template.category;
|
|
@@ -3845,7 +3885,6 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
3845
3885
|
{ label: 'Create New', value: false },
|
|
3846
3886
|
{ label: 'Use existing template', value: true },
|
|
3847
3887
|
];
|
|
3848
|
-
this.isUtility = true;
|
|
3849
3888
|
this.isCheckUtility = false;
|
|
3850
3889
|
this.updateGeneralInformationForm = new EventEmitter();
|
|
3851
3890
|
}
|
|
@@ -3876,13 +3915,11 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
3876
3915
|
this.initValidation();
|
|
3877
3916
|
this.getAccountOptionService(((_c = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form) === null || _c === void 0 ? void 0 : _c.medium) === 'WA'
|
|
3878
3917
|
? (_g = (_f = (_e = (_d = this.getCampaignStorage) === null || _d === void 0 ? void 0 : _d.generalInformation) === null || _e === void 0 ? void 0 : _e.form) === null || _f === void 0 ? void 0 : _f.from) === null || _g === void 0 ? void 0 : _g.name : '');
|
|
3879
|
-
this.listenBodyChange();
|
|
3880
3918
|
/* this.setCurrentLocation(); */
|
|
3881
3919
|
}
|
|
3882
3920
|
get getCampaignStorage() {
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
: {};
|
|
3921
|
+
const campaignData = localStorage.getItem('telin.campaign');
|
|
3922
|
+
return campaignData ? JSON.parse(campaignData) : {};
|
|
3886
3923
|
}
|
|
3887
3924
|
initForm() {
|
|
3888
3925
|
this.form = new FormGroup({
|
|
@@ -3910,6 +3947,10 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
3910
3947
|
isUseExistingTemplate: new FormControl(false),
|
|
3911
3948
|
isNeedSave: new FormControl(false),
|
|
3912
3949
|
ttl: new FormControl(null),
|
|
3950
|
+
isDownloadVariableXLS: new FormControl(false),
|
|
3951
|
+
variables: new FormArray([]),
|
|
3952
|
+
useXlsx: new FormControl(false),
|
|
3953
|
+
buttonParams: new FormArray([]),
|
|
3913
3954
|
});
|
|
3914
3955
|
this.form.valueChanges.subscribe(() => {
|
|
3915
3956
|
setTimeout(() => {
|
|
@@ -3924,132 +3965,150 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
3924
3965
|
this.form.disable();
|
|
3925
3966
|
}
|
|
3926
3967
|
initEdit() {
|
|
3927
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;
|
|
3928
|
-
|
|
3929
|
-
|
|
3968
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10;
|
|
3969
|
+
const storageData = this.getCampaignStorage;
|
|
3970
|
+
const formValues = (_b = (_a = storageData) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
|
|
3971
|
+
if (!storageData ||
|
|
3972
|
+
Object.entries(storageData).length === 0 ||
|
|
3973
|
+
((_c = formValues) === null || _c === void 0 ? void 0 : _c.medium) !== 'WA') {
|
|
3930
3974
|
return;
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
this.
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
this.
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
this.
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
.
|
|
3948
|
-
.
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
this.form
|
|
3957
|
-
.get('isNeedSave')
|
|
3958
|
-
.setValue(!!((_5 = (_4 = (_3 = this.getCampaignStorage) === null || _3 === void 0 ? void 0 : _3.generalInformation) === null || _4 === void 0 ? void 0 : _4.form) === null || _5 === void 0 ? void 0 : _5.isNeedSave));
|
|
3959
|
-
this.form.get('ttl').setValue((_8 = (_7 = (_6 = this.getCampaignStorage) === null || _6 === void 0 ? void 0 : _6.generalInformation) === null || _7 === void 0 ? void 0 : _7.form) === null || _8 === void 0 ? void 0 : _8.ttl);
|
|
3960
|
-
this.isHaveTemplateParam = this.form.get('isUpload').value;
|
|
3961
|
-
this.getTemplateOptionService(null, (_9 = this.form.get('template').value) === null || _9 === void 0 ? void 0 : _9.name);
|
|
3975
|
+
}
|
|
3976
|
+
(_d = this.getControl('channel')) === null || _d === void 0 ? void 0 : _d.setValue((_e = formValues) === null || _e === void 0 ? void 0 : _e.channel);
|
|
3977
|
+
(_f = this.getControl('media')) === null || _f === void 0 ? void 0 : _f.setValue((_g = formValues) === null || _g === void 0 ? void 0 : _g.media);
|
|
3978
|
+
(_h = this.getControl('from')) === null || _h === void 0 ? void 0 : _h.setValue((_j = formValues) === null || _j === void 0 ? void 0 : _j.from);
|
|
3979
|
+
(_k = this.getControl('text')) === null || _k === void 0 ? void 0 : _k.setValue((_l = formValues) === null || _l === void 0 ? void 0 : _l.text);
|
|
3980
|
+
(_m = this.getControl('targetURL')) === null || _m === void 0 ? void 0 : _m.setValue((_o = formValues) === null || _o === void 0 ? void 0 : _o.targetURL);
|
|
3981
|
+
(_p = this.getControl('fileName')) === null || _p === void 0 ? void 0 : _p.setValue((_r = (_q = formValues) === null || _q === void 0 ? void 0 : _q.fileName, (_r !== null && _r !== void 0 ? _r : (_s = this.getControl('targetURL')) === null || _s === void 0 ? void 0 : _s.value)));
|
|
3982
|
+
(_t = this.getControl('template')) === null || _t === void 0 ? void 0 : _t.setValue((_u = formValues) === null || _u === void 0 ? void 0 : _u.template);
|
|
3983
|
+
(_v = this.getControl('isUpload')) === null || _v === void 0 ? void 0 : _v.setValue((_w = formValues) === null || _w === void 0 ? void 0 : _w.isUpload);
|
|
3984
|
+
(_x = this.getControl('fileId')) === null || _x === void 0 ? void 0 : _x.setValue((_y = formValues) === null || _y === void 0 ? void 0 : _y.fileId);
|
|
3985
|
+
(_z = this.getControl('otpValue')) === null || _z === void 0 ? void 0 : _z.setValue((_0 = formValues) === null || _0 === void 0 ? void 0 : _0.otpValue);
|
|
3986
|
+
(_1 = this.getControl('isUseExistingTemplate')) === null || _1 === void 0 ? void 0 : _1.setValue(!!((_2 = formValues) === null || _2 === void 0 ? void 0 : _2.templateName));
|
|
3987
|
+
(_3 = this.getControl('isNeedSave')) === null || _3 === void 0 ? void 0 : _3.setValue(!!((_4 = formValues) === null || _4 === void 0 ? void 0 : _4.isNeedSave));
|
|
3988
|
+
(_5 = this.getControl('ttl')) === null || _5 === void 0 ? void 0 : _5.setValue((_6 = formValues) === null || _6 === void 0 ? void 0 : _6.ttl);
|
|
3989
|
+
const savedVariables = (_7 = formValues) === null || _7 === void 0 ? void 0 : _7.variables;
|
|
3990
|
+
if (savedVariables && Array.isArray(savedVariables) && savedVariables.length > 0) {
|
|
3991
|
+
this.variables.clear();
|
|
3992
|
+
savedVariables.forEach((item) => {
|
|
3993
|
+
this.variables.push(new FormGroup({
|
|
3994
|
+
paramName: new FormControl({ value: item.paramName || '', disabled: this.isReadOnlyMode }, Validators$1.required),
|
|
3995
|
+
}));
|
|
3996
|
+
});
|
|
3997
|
+
}
|
|
3998
|
+
this.isHaveTemplateParam = (_8 = this.getControl('isUpload')) === null || _8 === void 0 ? void 0 : _8.value;
|
|
3999
|
+
this.getTemplateOptionService(null, (_10 = (_9 = this.getControl('template')) === null || _9 === void 0 ? void 0 : _9.value) === null || _10 === void 0 ? void 0 : _10.name);
|
|
3962
4000
|
}
|
|
3963
4001
|
initValidation() {
|
|
4002
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17;
|
|
4003
|
+
if (!this.form)
|
|
4004
|
+
return;
|
|
3964
4005
|
for (const key in this.form.controls) {
|
|
3965
|
-
this.form.controls[key]
|
|
3966
|
-
|
|
4006
|
+
if (this.form.controls[key]) {
|
|
4007
|
+
this.form.controls[key].clearValidators();
|
|
4008
|
+
this.form.controls[key].updateValueAndValidity();
|
|
4009
|
+
}
|
|
3967
4010
|
}
|
|
3968
|
-
this.
|
|
4011
|
+
(_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.setValidators(Validators$1.required);
|
|
3969
4012
|
if (this.getIsText) {
|
|
3970
|
-
this.
|
|
3971
|
-
this.
|
|
3972
|
-
this.
|
|
3973
|
-
this.
|
|
4013
|
+
(_b = this.getControl('from')) === null || _b === void 0 ? void 0 : _b.setValidators(Validators$1.required);
|
|
4014
|
+
(_c = this.getControl('text')) === null || _c === void 0 ? void 0 : _c.setValidators(Validators$1.required);
|
|
4015
|
+
(_d = this.getControl('from')) === null || _d === void 0 ? void 0 : _d.updateValueAndValidity();
|
|
4016
|
+
(_e = this.getControl('text')) === null || _e === void 0 ? void 0 : _e.updateValueAndValidity();
|
|
3974
4017
|
}
|
|
3975
4018
|
else if (this.getIsMedia) {
|
|
3976
|
-
this.
|
|
3977
|
-
this.
|
|
3978
|
-
this.
|
|
3979
|
-
this.
|
|
3980
|
-
this.
|
|
3981
|
-
this.
|
|
4019
|
+
(_f = this.getControl('media')) === null || _f === void 0 ? void 0 : _f.setValidators(Validators$1.required);
|
|
4020
|
+
(_g = this.getControl('from')) === null || _g === void 0 ? void 0 : _g.setValidators(Validators$1.required);
|
|
4021
|
+
(_h = this.getControl('fileName')) === null || _h === void 0 ? void 0 : _h.setValidators(Validators$1.required);
|
|
4022
|
+
(_j = this.getControl('media')) === null || _j === void 0 ? void 0 : _j.updateValueAndValidity();
|
|
4023
|
+
(_k = this.getControl('from')) === null || _k === void 0 ? void 0 : _k.updateValueAndValidity();
|
|
4024
|
+
(_l = this.getControl('fileName')) === null || _l === void 0 ? void 0 : _l.updateValueAndValidity();
|
|
3982
4025
|
}
|
|
3983
4026
|
else if (this.getIsTemplate) {
|
|
3984
|
-
this.
|
|
3985
|
-
this.
|
|
3986
|
-
this.
|
|
3987
|
-
this.
|
|
3988
|
-
this.
|
|
3989
|
-
this.
|
|
3990
|
-
this.
|
|
3991
|
-
this.
|
|
3992
|
-
this.
|
|
3993
|
-
this.
|
|
4027
|
+
(_m = this.getControl('from')) === null || _m === void 0 ? void 0 : _m.setValidators(Validators$1.required);
|
|
4028
|
+
(_o = this.getControl('template')) === null || _o === void 0 ? void 0 : _o.setValidators(Validators$1.required);
|
|
4029
|
+
(_p = this.getControl('paramHeader')) === null || _p === void 0 ? void 0 : _p.setValidators(Validators$1.required);
|
|
4030
|
+
(_q = this.getControl('paramBody')) === null || _q === void 0 ? void 0 : _q.setValidators(Validators$1.required);
|
|
4031
|
+
(_r = this.getControl('paramButton')) === null || _r === void 0 ? void 0 : _r.setValidators(Validators$1.required);
|
|
4032
|
+
(_s = this.getControl('from')) === null || _s === void 0 ? void 0 : _s.updateValueAndValidity();
|
|
4033
|
+
(_t = this.getControl('template')) === null || _t === void 0 ? void 0 : _t.updateValueAndValidity();
|
|
4034
|
+
(_u = this.getControl('paramHeader')) === null || _u === void 0 ? void 0 : _u.updateValueAndValidity();
|
|
4035
|
+
(_v = this.getControl('paramBody')) === null || _v === void 0 ? void 0 : _v.updateValueAndValidity();
|
|
4036
|
+
(_w = this.getControl('paramButton')) === null || _w === void 0 ? void 0 : _w.updateValueAndValidity();
|
|
3994
4037
|
}
|
|
3995
4038
|
else if (this.getIsCatalogue) {
|
|
3996
|
-
this.
|
|
3997
|
-
this.
|
|
3998
|
-
this.
|
|
3999
|
-
this.
|
|
4000
|
-
this.
|
|
4001
|
-
this.
|
|
4002
|
-
this.
|
|
4003
|
-
this.
|
|
4004
|
-
this.
|
|
4005
|
-
this.
|
|
4039
|
+
(_x = this.getControl('from')) === null || _x === void 0 ? void 0 : _x.setValidators(Validators$1.required);
|
|
4040
|
+
(_y = this.getControl('category')) === null || _y === void 0 ? void 0 : _y.setValidators(Validators$1.required);
|
|
4041
|
+
(_z = this.getControl('catalogue')) === null || _z === void 0 ? void 0 : _z.setValidators(Validators$1.required);
|
|
4042
|
+
(_0 = this.getControl('product')) === null || _0 === void 0 ? void 0 : _0.setValidators(Validators$1.required);
|
|
4043
|
+
(_1 = this.getControl('body')) === null || _1 === void 0 ? void 0 : _1.setValidators(Validators$1.maxLength(100));
|
|
4044
|
+
(_2 = this.getControl('from')) === null || _2 === void 0 ? void 0 : _2.updateValueAndValidity();
|
|
4045
|
+
(_3 = this.getControl('category')) === null || _3 === void 0 ? void 0 : _3.updateValueAndValidity();
|
|
4046
|
+
(_4 = this.getControl('catalogue')) === null || _4 === void 0 ? void 0 : _4.updateValueAndValidity();
|
|
4047
|
+
(_5 = this.getControl('product')) === null || _5 === void 0 ? void 0 : _5.updateValueAndValidity();
|
|
4048
|
+
(_6 = this.getControl('body')) === null || _6 === void 0 ? void 0 : _6.updateValueAndValidity();
|
|
4006
4049
|
}
|
|
4007
4050
|
else if (this.getIsUtility) {
|
|
4008
|
-
this.
|
|
4009
|
-
this.
|
|
4010
|
-
|
|
4011
|
-
.
|
|
4012
|
-
|
|
4051
|
+
(_7 = this.getControl('from')) === null || _7 === void 0 ? void 0 : _7.setValidators(Validators$1.required);
|
|
4052
|
+
(_8 = this.getControl('text')) === null || _8 === void 0 ? void 0 : _8.setValidators([
|
|
4053
|
+
Validators$1.required,
|
|
4054
|
+
Validators$1.maxLength(1024),
|
|
4055
|
+
]);
|
|
4056
|
+
(_9 = this.getControl('ttl')) === null || _9 === void 0 ? void 0 : _9.setValidators([
|
|
4013
4057
|
Validators.min(30, 'Minimum TTL 30'),
|
|
4014
4058
|
Validators.max(43200, 'Maximum TTL 43200'),
|
|
4015
4059
|
]);
|
|
4016
|
-
this.
|
|
4017
|
-
this.
|
|
4018
|
-
this.
|
|
4060
|
+
(_10 = this.getControl('from')) === null || _10 === void 0 ? void 0 : _10.updateValueAndValidity();
|
|
4061
|
+
(_11 = this.getControl('text')) === null || _11 === void 0 ? void 0 : _11.updateValueAndValidity();
|
|
4062
|
+
(_12 = this.getControl('ttl')) === null || _12 === void 0 ? void 0 : _12.updateValueAndValidity();
|
|
4063
|
+
(_13 = this.getControl('variables')) === null || _13 === void 0 ? void 0 : _13.updateValueAndValidity();
|
|
4019
4064
|
}
|
|
4020
4065
|
else {
|
|
4021
|
-
this.
|
|
4022
|
-
this.
|
|
4023
|
-
this.
|
|
4024
|
-
this.
|
|
4066
|
+
(_14 = this.getControl('from')) === null || _14 === void 0 ? void 0 : _14.setValidators(Validators$1.required);
|
|
4067
|
+
(_15 = this.getControl('text')) === null || _15 === void 0 ? void 0 : _15.setValidators(Validators$1.required);
|
|
4068
|
+
(_16 = this.getControl('from')) === null || _16 === void 0 ? void 0 : _16.updateValueAndValidity();
|
|
4069
|
+
(_17 = this.getControl('text')) === null || _17 === void 0 ? void 0 : _17.updateValueAndValidity();
|
|
4025
4070
|
}
|
|
4026
4071
|
}
|
|
4027
4072
|
formReset(_isMediaType = false) {
|
|
4073
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
4028
4074
|
if (!_isMediaType) {
|
|
4029
|
-
this.
|
|
4030
|
-
this.
|
|
4075
|
+
(_a = this.getControl('media')) === null || _a === void 0 ? void 0 : _a.reset();
|
|
4076
|
+
(_b = this.getControl('from')) === null || _b === void 0 ? void 0 : _b.reset();
|
|
4077
|
+
}
|
|
4078
|
+
(_c = this.getControl('text')) === null || _c === void 0 ? void 0 : _c.reset();
|
|
4079
|
+
(_d = this.getControl('fileName')) === null || _d === void 0 ? void 0 : _d.reset();
|
|
4080
|
+
(_e = this.getControl('targetURL')) === null || _e === void 0 ? void 0 : _e.reset();
|
|
4081
|
+
(_f = this.getControl('fileType')) === null || _f === void 0 ? void 0 : _f.reset();
|
|
4082
|
+
(_g = this.getControl('file')) === null || _g === void 0 ? void 0 : _g.reset();
|
|
4083
|
+
(_h = this.getControl('latitude')) === null || _h === void 0 ? void 0 : _h.reset();
|
|
4084
|
+
(_j = this.getControl('longitude')) === null || _j === void 0 ? void 0 : _j.reset();
|
|
4085
|
+
(_k = this.getControl('template')) === null || _k === void 0 ? void 0 : _k.reset();
|
|
4086
|
+
(_l = this.getControl('category')) === null || _l === void 0 ? void 0 : _l.reset();
|
|
4087
|
+
(_m = this.getControl('product')) === null || _m === void 0 ? void 0 : _m.reset();
|
|
4088
|
+
(_o = this.getControl('catalogue')) === null || _o === void 0 ? void 0 : _o.reset();
|
|
4089
|
+
(_p = this.getControl('body')) === null || _p === void 0 ? void 0 : _p.reset();
|
|
4090
|
+
(_q = this.getControl('otpValue')) === null || _q === void 0 ? void 0 : _q.reset();
|
|
4091
|
+
(_r = this.getControl('variables')) === null || _r === void 0 ? void 0 : _r.reset();
|
|
4092
|
+
const paramHeader = this.getControl('paramHeader');
|
|
4093
|
+
if (paramHeader) {
|
|
4094
|
+
paramHeader.clear();
|
|
4095
|
+
paramHeader.reset();
|
|
4096
|
+
}
|
|
4097
|
+
const paramBody = this.getControl('paramBody');
|
|
4098
|
+
if (paramBody) {
|
|
4099
|
+
paramBody.clear();
|
|
4100
|
+
paramBody.reset();
|
|
4101
|
+
}
|
|
4102
|
+
const paramButton = this.getControl('paramButton');
|
|
4103
|
+
if (paramButton) {
|
|
4104
|
+
paramButton.clear();
|
|
4105
|
+
paramButton.reset();
|
|
4031
4106
|
}
|
|
4032
|
-
this.form.get('text').reset();
|
|
4033
|
-
this.form.get('fileName').reset();
|
|
4034
|
-
this.form.get('targetURL').reset();
|
|
4035
|
-
this.form.get('fileType').reset();
|
|
4036
|
-
this.form.get('file').reset();
|
|
4037
|
-
this.form.get('latitude').reset();
|
|
4038
|
-
this.form.get('longitude').reset();
|
|
4039
|
-
this.form.get('template').reset();
|
|
4040
|
-
this.form.get('category').reset();
|
|
4041
|
-
this.form.get('product').reset();
|
|
4042
|
-
this.form.get('catalogue').reset();
|
|
4043
|
-
this.form.get('body').reset();
|
|
4044
|
-
this.form.get('otpValue').reset();
|
|
4045
|
-
this.form.get('paramHeader').controls = [];
|
|
4046
|
-
this.form.get('paramHeader').reset();
|
|
4047
|
-
this.form.get('paramBody').controls = [];
|
|
4048
|
-
this.form.get('paramBody').reset();
|
|
4049
|
-
this.form.get('paramButton').controls = [];
|
|
4050
|
-
this.form.get('paramButton').reset();
|
|
4051
4107
|
this.initValidation();
|
|
4052
4108
|
}
|
|
4109
|
+
getControl(controlName) {
|
|
4110
|
+
return this.form ? this.form.get(controlName) : null;
|
|
4111
|
+
}
|
|
4053
4112
|
initParam(_name, _value, _type) {
|
|
4054
4113
|
return {
|
|
4055
4114
|
name: _name,
|
|
@@ -4070,52 +4129,17 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4070
4129
|
const subs = this.apiAdapterService
|
|
4071
4130
|
.executeApiRequest(parameterList, '/admin/account', 'GET')
|
|
4072
4131
|
.subscribe((resp) => {
|
|
4132
|
+
var _a;
|
|
4073
4133
|
if (!resp.data)
|
|
4074
4134
|
return;
|
|
4075
4135
|
this.accountOption = isInfinite ? [...this.accountOption, ...resp.data] : resp.data;
|
|
4076
|
-
this.isHaveNextAccountOption = resp.haveNext;
|
|
4136
|
+
this.isHaveNextAccountOption = (_a = resp.haveNext, (_a !== null && _a !== void 0 ? _a : true));
|
|
4077
4137
|
this.isLoadingAccountOption = false;
|
|
4078
4138
|
});
|
|
4079
4139
|
this.subscribers.push(subs);
|
|
4080
4140
|
}
|
|
4081
|
-
listenBodyChange() {
|
|
4082
|
-
var _a;
|
|
4083
|
-
(_a = this.form
|
|
4084
|
-
.get('text')) === null || _a === void 0 ? void 0 : _a.valueChanges.pipe(debounceTime(1000), distinctUntilChanged()).subscribe(() => {
|
|
4085
|
-
if (!this.getIsUtility)
|
|
4086
|
-
return;
|
|
4087
|
-
this.validateText();
|
|
4088
|
-
});
|
|
4089
|
-
}
|
|
4090
|
-
validateText(account) {
|
|
4091
|
-
var _a, _b;
|
|
4092
|
-
this.isCheckUtility = true;
|
|
4093
|
-
const { from, text } = this.form.value;
|
|
4094
|
-
if (!text || !from)
|
|
4095
|
-
return;
|
|
4096
|
-
if (!((_a = from) === null || _a === void 0 ? void 0 : _a.directSendEnabled))
|
|
4097
|
-
return;
|
|
4098
|
-
const headers = new HttpHeaders()
|
|
4099
|
-
.set('Authorization', 'Bearer ' + localStorage.getItem('telin.accessToken'))
|
|
4100
|
-
.set('Access-Control-Allow-Origin', '*');
|
|
4101
|
-
this.httpClient
|
|
4102
|
-
.post(`${environment.api}/message/direct-send/${(_b = (from || account)) === null || _b === void 0 ? void 0 : _b.id}`, {
|
|
4103
|
-
type: 'text',
|
|
4104
|
-
text: { body: text },
|
|
4105
|
-
}, { headers })
|
|
4106
|
-
.subscribe({
|
|
4107
|
-
next: (response) => {
|
|
4108
|
-
var _a;
|
|
4109
|
-
this.isUtility = ((_a = response) === null || _a === void 0 ? void 0 : _a.category) === 'UTILITY';
|
|
4110
|
-
this.isCheckUtility = false;
|
|
4111
|
-
},
|
|
4112
|
-
error: () => {
|
|
4113
|
-
this.isCheckUtility = false;
|
|
4114
|
-
},
|
|
4115
|
-
});
|
|
4116
|
-
}
|
|
4117
4141
|
getTemplateOptionService(event = null, filter = '', isInfinite = false) {
|
|
4118
|
-
var _a, _b, _c, _d;
|
|
4142
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
4119
4143
|
this.isLoadingTemplateOption = true;
|
|
4120
4144
|
const parameterList = [
|
|
4121
4145
|
this.initParam('pageNo', this.pageNoTemplateOption, 'number'),
|
|
@@ -4123,31 +4147,31 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4123
4147
|
this.initParam('platform', 'WA', 'string'),
|
|
4124
4148
|
this.initParam('filter', filter, 'string'),
|
|
4125
4149
|
this.initParam('status', 'APPROVED', 'string'),
|
|
4126
|
-
this.initParam('clientId', (_a = this.
|
|
4127
|
-
this.initParam('wabaId', (
|
|
4150
|
+
this.initParam('clientId', (_c = (_b = (_a = this.getControl('from')) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.clientId, (_c !== null && _c !== void 0 ? _c : '')), 'string'),
|
|
4151
|
+
this.initParam('wabaId', (_f = (_e = (_d = this.getControl('from')) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.wabaId, (_f !== null && _f !== void 0 ? _f : '')), 'string'),
|
|
4128
4152
|
];
|
|
4129
4153
|
if (this.isReadOnlyMode)
|
|
4130
4154
|
parameterList.push(this.initParam('summary', true, 'string'));
|
|
4131
|
-
const messageType = (
|
|
4155
|
+
const messageType = (_g = this.form.value) === null || _g === void 0 ? void 0 : _g.channel;
|
|
4132
4156
|
if (messageType === 'utility') {
|
|
4133
4157
|
parameterList.push(this.initParam('isDirectSend', true, 'string'));
|
|
4134
4158
|
}
|
|
4135
4159
|
const subs = this.apiAdapterService
|
|
4136
4160
|
.executeApiRequest(parameterList, '/message/template', 'GET')
|
|
4137
4161
|
.subscribe((resp) => {
|
|
4138
|
-
var _a;
|
|
4139
|
-
this.templateOption
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
this.isHaveNextTemplateOption = resp.haveNext;
|
|
4162
|
+
var _a, _b, _c, _d, _e, _f;
|
|
4163
|
+
const currentOptions = this.templateOption || [];
|
|
4164
|
+
const newData = resp.data || [];
|
|
4165
|
+
this.templateOption = isInfinite ? [...currentOptions, ...newData] : newData;
|
|
4166
|
+
this.isHaveNextTemplateOption = (_a = resp.haveNext, (_a !== null && _a !== void 0 ? _a : true));
|
|
4143
4167
|
this.isLoadingTemplateOption = false;
|
|
4144
|
-
const template = (
|
|
4168
|
+
const template = (_b = this.templateOption) === null || _b === void 0 ? void 0 : _b.find((t) => { var _a, _b; return t.ID === ((_b = (_a = this.getControl('template')) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.ID); });
|
|
4145
4169
|
if (template) {
|
|
4146
|
-
this.
|
|
4147
|
-
if (this.
|
|
4148
|
-
return this.updateDownloadCSV(this.
|
|
4170
|
+
(_c = this.getControl('template')) === null || _c === void 0 ? void 0 : _c.patchValue(template);
|
|
4171
|
+
if ((_d = this.getControl('isUpload')) === null || _d === void 0 ? void 0 : _d.value)
|
|
4172
|
+
return this.updateDownloadCSV((_e = this.getControl('isUpload')) === null || _e === void 0 ? void 0 : _e.value);
|
|
4149
4173
|
}
|
|
4150
|
-
this.updateTemplate(this.
|
|
4174
|
+
this.updateTemplate((_f = this.getControl('template')) === null || _f === void 0 ? void 0 : _f.value);
|
|
4151
4175
|
});
|
|
4152
4176
|
this.subscribers.push(subs);
|
|
4153
4177
|
}
|
|
@@ -4190,29 +4214,29 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4190
4214
|
this.form.get('paramButton').push(form);
|
|
4191
4215
|
}
|
|
4192
4216
|
get getIsText() {
|
|
4193
|
-
var _a;
|
|
4194
|
-
return (this.
|
|
4195
|
-
((
|
|
4217
|
+
var _a, _b, _c;
|
|
4218
|
+
return (((_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.value) &&
|
|
4219
|
+
((_c = (_b = this.getControl('channel')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'text');
|
|
4196
4220
|
}
|
|
4197
4221
|
get getIsMedia() {
|
|
4198
|
-
var _a;
|
|
4199
|
-
return (this.
|
|
4200
|
-
((
|
|
4222
|
+
var _a, _b, _c;
|
|
4223
|
+
return (((_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.value) &&
|
|
4224
|
+
((_c = (_b = this.getControl('channel')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'media');
|
|
4201
4225
|
}
|
|
4202
4226
|
get getIsTemplate() {
|
|
4203
|
-
var _a;
|
|
4204
|
-
return (this.
|
|
4205
|
-
((
|
|
4227
|
+
var _a, _b, _c;
|
|
4228
|
+
return (((_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.value) &&
|
|
4229
|
+
((_c = (_b = this.getControl('channel')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'template');
|
|
4206
4230
|
}
|
|
4207
4231
|
get getIsCatalogue() {
|
|
4208
|
-
var _a;
|
|
4209
|
-
return (this.
|
|
4210
|
-
((
|
|
4232
|
+
var _a, _b, _c;
|
|
4233
|
+
return (((_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.value) &&
|
|
4234
|
+
((_c = (_b = this.getControl('channel')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'catalogue');
|
|
4211
4235
|
}
|
|
4212
4236
|
get getIsUtility() {
|
|
4213
|
-
var _a;
|
|
4214
|
-
return (this.
|
|
4215
|
-
((
|
|
4237
|
+
var _a, _b, _c;
|
|
4238
|
+
return (((_a = this.getControl('channel')) === null || _a === void 0 ? void 0 : _a.value) &&
|
|
4239
|
+
((_c = (_b = this.getControl('channel')) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'utility');
|
|
4216
4240
|
}
|
|
4217
4241
|
getNextAccountBatch() {
|
|
4218
4242
|
if (!this.isHaveNextAccountOption)
|
|
@@ -4237,6 +4261,7 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4237
4261
|
: '';
|
|
4238
4262
|
}
|
|
4239
4263
|
onFileSelected(event) {
|
|
4264
|
+
var _a, _b, _c, _d, _e, _f;
|
|
4240
4265
|
const file = event.target.files;
|
|
4241
4266
|
const accept = this.extFileAccepted.split('/');
|
|
4242
4267
|
let matchType = accept[0];
|
|
@@ -4252,20 +4277,21 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4252
4277
|
this.toastr.error('Upload media failed, max size 10mb');
|
|
4253
4278
|
return;
|
|
4254
4279
|
}
|
|
4255
|
-
this.
|
|
4256
|
-
this.
|
|
4257
|
-
this.
|
|
4258
|
-
this.
|
|
4259
|
-
this.
|
|
4280
|
+
(_a = this.getControl('file')) === null || _a === void 0 ? void 0 : _a.setValue(file[0]);
|
|
4281
|
+
(_b = this.getControl('fileType')) === null || _b === void 0 ? void 0 : _b.setValue('image');
|
|
4282
|
+
(_c = this.getControl('fileName')) === null || _c === void 0 ? void 0 : _c.setValue(file[0].name);
|
|
4283
|
+
(_d = this.getControl('targetURL')) === null || _d === void 0 ? void 0 : _d.setValidators(Validators$1.required);
|
|
4284
|
+
(_e = this.getControl('targetURL')) === null || _e === void 0 ? void 0 : _e.updateValueAndValidity();
|
|
4260
4285
|
if (file[0].type.indexOf('video') > -1)
|
|
4261
|
-
this.
|
|
4286
|
+
(_f = this.getControl('fileType')) === null || _f === void 0 ? void 0 : _f.setValue('video');
|
|
4262
4287
|
this.uploadMediaService();
|
|
4263
4288
|
}
|
|
4264
4289
|
uploadMediaService() {
|
|
4290
|
+
var _a;
|
|
4265
4291
|
const parameterList = [
|
|
4266
4292
|
{
|
|
4267
4293
|
name: 'file',
|
|
4268
|
-
value: this.
|
|
4294
|
+
value: (_a = this.getControl('file')) === null || _a === void 0 ? void 0 : _a.value,
|
|
4269
4295
|
in: 'formData',
|
|
4270
4296
|
type: 'object',
|
|
4271
4297
|
},
|
|
@@ -4273,74 +4299,84 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4273
4299
|
const subs = this.apiAdapterService
|
|
4274
4300
|
.executeApiRequest(parameterList, '/message/media', 'POST')
|
|
4275
4301
|
.subscribe((resp) => {
|
|
4276
|
-
|
|
4277
|
-
this.
|
|
4278
|
-
this.
|
|
4279
|
-
this.
|
|
4302
|
+
var _a, _b, _c, _d;
|
|
4303
|
+
(_a = this.getControl('targetURL')) === null || _a === void 0 ? void 0 : _a.clearValidators();
|
|
4304
|
+
(_b = this.getControl('targetURL')) === null || _b === void 0 ? void 0 : _b.updateValueAndValidity();
|
|
4305
|
+
(_c = this.getControl('targetURL')) === null || _c === void 0 ? void 0 : _c.setValue(resp.data.targetURL);
|
|
4306
|
+
(_d = this.getControl('file')) === null || _d === void 0 ? void 0 : _d.reset();
|
|
4280
4307
|
this.toastr.success('Upload media success');
|
|
4281
4308
|
});
|
|
4282
4309
|
this.subscribers.push(subs);
|
|
4283
4310
|
}
|
|
4311
|
+
get buttonParamsControls() {
|
|
4312
|
+
return this.form.get('buttonParams').controls;
|
|
4313
|
+
}
|
|
4314
|
+
get isUsingExcelBulk() {
|
|
4315
|
+
var _a;
|
|
4316
|
+
return ((_a = this.getControl('isUpload')) === null || _a === void 0 ? void 0 : _a.value) || false;
|
|
4317
|
+
}
|
|
4284
4318
|
updateTemplate(template) {
|
|
4285
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;
|
|
4319
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34;
|
|
4286
4320
|
this.isShowParameter = false;
|
|
4287
4321
|
if (!template)
|
|
4288
4322
|
return;
|
|
4323
|
+
const buttonParamsArray = this.form.get('buttonParams');
|
|
4324
|
+
buttonParamsArray.clear();
|
|
4325
|
+
if (template && template.buttons && template.buttons.length > 0) {
|
|
4326
|
+
const quickReplyButtons = template.buttons.filter((btn) => btn.type === 'QUICK_REPLY');
|
|
4327
|
+
quickReplyButtons.forEach((btn) => {
|
|
4328
|
+
buttonParamsArray.push(new FormGroup({
|
|
4329
|
+
label: new FormControl(btn.text),
|
|
4330
|
+
payload: new FormControl('', [Validators$1.maxLength(256)]),
|
|
4331
|
+
}));
|
|
4332
|
+
});
|
|
4333
|
+
}
|
|
4289
4334
|
this.isHaveTemplateParam =
|
|
4290
|
-
((_a = template.header
|
|
4291
|
-
((
|
|
4292
|
-
((
|
|
4293
|
-
if (['image', 'video', 'document'].includes((
|
|
4294
|
-
this.form
|
|
4295
|
-
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
((
|
|
4303
|
-
? this.
|
|
4304
|
-
: this.form.get('paramHeader').clearValidators();
|
|
4305
|
-
((_v = template.body.examples) === null || _v === void 0 ? void 0 : _v.length) > 0
|
|
4306
|
-
? this.form.get('paramBody').setValidators(Validators$1.required)
|
|
4307
|
-
: this.form.get('paramBody').clearValidators();
|
|
4308
|
-
((_w = template.buttons) === null || _w === void 0 ? void 0 : _w.length) > 0
|
|
4309
|
-
? this.form.get('paramButton').setValidators(Validators$1.required)
|
|
4310
|
-
: this.form.get('paramButton').clearValidators();
|
|
4335
|
+
(_c = (_b = (_a = template.header) === null || _a === void 0 ? void 0 : _a.examples) === null || _b === void 0 ? void 0 : _b.length, (_c !== null && _c !== void 0 ? _c : 0)) > 0 ||
|
|
4336
|
+
(_f = (_e = (_d = template.body) === null || _d === void 0 ? void 0 : _d.examples) === null || _e === void 0 ? void 0 : _e.length, (_f !== null && _f !== void 0 ? _f : 0)) > 0 ||
|
|
4337
|
+
(_h = (_g = template.buttons) === null || _g === void 0 ? void 0 : _g.length, (_h !== null && _h !== void 0 ? _h : 0)) > 0;
|
|
4338
|
+
if (['image', 'video', 'document'].includes((_l = (_k = (_j = template) === null || _j === void 0 ? void 0 : _j.header) === null || _k === void 0 ? void 0 : _k.type) === null || _l === void 0 ? void 0 : _l.toLowerCase())) {
|
|
4339
|
+
(_m = this.getControl('fileName')) === null || _m === void 0 ? void 0 : _m.setValue((_t = (_q = (_p = (_o = this.getCampaignStorage) === null || _o === void 0 ? void 0 : _o.generalInformation) === null || _p === void 0 ? void 0 : _p.form.fileName, (_q !== null && _q !== void 0 ? _q : (_s = (_r = this.getCampaignStorage) === null || _r === void 0 ? void 0 : _r.generalInformation) === null || _s === void 0 ? void 0 : _s.form.targetURL)), (_t !== null && _t !== void 0 ? _t : template.header.url)));
|
|
4340
|
+
(_u = this.getControl('targetURL')) === null || _u === void 0 ? void 0 : _u.setValue((_x = (_w = (_v = this.getCampaignStorage) === null || _v === void 0 ? void 0 : _v.generalInformation) === null || _w === void 0 ? void 0 : _w.form.targetURL, (_x !== null && _x !== void 0 ? _x : template.header.url)));
|
|
4341
|
+
this.fileTypeChange((_0 = (_z = (_y = template) === null || _y === void 0 ? void 0 : _y.header) === null || _z === void 0 ? void 0 : _z.type) === null || _0 === void 0 ? void 0 : _0.toLowerCase());
|
|
4342
|
+
}
|
|
4343
|
+
(_2 = (_1 = template.header.examples) === null || _1 === void 0 ? void 0 : _1.length, (_2 !== null && _2 !== void 0 ? _2 : 0)) > 0
|
|
4344
|
+
? (_3 = this.getControl('paramHeader')) === null || _3 === void 0 ? void 0 : _3.setValidators(Validators$1.required) : (_4 = this.getControl('paramHeader')) === null || _4 === void 0 ? void 0 : _4.clearValidators();
|
|
4345
|
+
(_6 = (_5 = template.body.examples) === null || _5 === void 0 ? void 0 : _5.length, (_6 !== null && _6 !== void 0 ? _6 : 0)) > 0
|
|
4346
|
+
? (_7 = this.getControl('paramBody')) === null || _7 === void 0 ? void 0 : _7.setValidators(Validators$1.required) : (_8 = this.getControl('paramBody')) === null || _8 === void 0 ? void 0 : _8.clearValidators();
|
|
4347
|
+
(_10 = (_9 = template.buttons) === null || _9 === void 0 ? void 0 : _9.length, (_10 !== null && _10 !== void 0 ? _10 : 0)) > 0
|
|
4348
|
+
? (_11 = this.getControl('paramButton')) === null || _11 === void 0 ? void 0 : _11.setValidators(Validators$1.required) : (_12 = this.getControl('paramButton')) === null || _12 === void 0 ? void 0 : _12.clearValidators();
|
|
4311
4349
|
this.form.get('paramHeader').controls = [];
|
|
4312
4350
|
this.form.get('paramHeader').reset();
|
|
4313
|
-
this.
|
|
4351
|
+
(_13 = this.getControl('paramHeader')) === null || _13 === void 0 ? void 0 : _13.updateValueAndValidity();
|
|
4314
4352
|
this.form.get('paramBody').controls = [];
|
|
4315
4353
|
this.form.get('paramBody').reset();
|
|
4316
|
-
this.
|
|
4354
|
+
(_14 = this.getControl('paramBody')) === null || _14 === void 0 ? void 0 : _14.updateValueAndValidity();
|
|
4317
4355
|
this.form.get('paramButton').controls = [];
|
|
4318
4356
|
this.form.get('paramButton').reset();
|
|
4319
|
-
this.
|
|
4320
|
-
this.
|
|
4321
|
-
this.
|
|
4322
|
-
this.
|
|
4323
|
-
const formStorage = (
|
|
4357
|
+
(_15 = this.getControl('paramButton')) === null || _15 === void 0 ? void 0 : _15.updateValueAndValidity();
|
|
4358
|
+
(_16 = this.getControl('otpValue')) === null || _16 === void 0 ? void 0 : _16.setValue('');
|
|
4359
|
+
(_17 = this.getControl('otpValue')) === null || _17 === void 0 ? void 0 : _17.clearValidators();
|
|
4360
|
+
(_18 = this.getControl('otpValue')) === null || _18 === void 0 ? void 0 : _18.updateValueAndValidity();
|
|
4361
|
+
const formStorage = (_20 = (_19 = this.getCampaignStorage) === null || _19 === void 0 ? void 0 : _19.generalInformation) === null || _20 === void 0 ? void 0 : _20.form;
|
|
4324
4362
|
if (template.category === 'AUTHENTICATION') {
|
|
4325
|
-
this.
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
this.form.get('otpValue').setValidators(Validators$1.required);
|
|
4329
|
-
this.form.get('otpValue').updateValueAndValidity();
|
|
4363
|
+
(_21 = this.getControl('otpValue')) === null || _21 === void 0 ? void 0 : _21.setValue((_29 = (_23 = (_22 = formStorage) === null || _22 === void 0 ? void 0 : _22.otpValue, (_23 !== null && _23 !== void 0 ? _23 : (_28 = [...(_27 = (_26 = (_25 = (_24 = formStorage) === null || _24 === void 0 ? void 0 : _24.template) === null || _25 === void 0 ? void 0 : _25.body) === null || _26 === void 0 ? void 0 : _26.examples, (_27 !== null && _27 !== void 0 ? _27 : []))]) === null || _28 === void 0 ? void 0 : _28.pop())), (_29 !== null && _29 !== void 0 ? _29 : '')));
|
|
4364
|
+
(_30 = this.getControl('otpValue')) === null || _30 === void 0 ? void 0 : _30.setValidators(Validators$1.required);
|
|
4365
|
+
(_31 = this.getControl('otpValue')) === null || _31 === void 0 ? void 0 : _31.updateValueAndValidity();
|
|
4330
4366
|
}
|
|
4331
|
-
(
|
|
4367
|
+
(_32 = template.header.examples) === null || _32 === void 0 ? void 0 : _32.forEach((each, index) => {
|
|
4332
4368
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
4333
4369
|
this.addParamHeader((_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramHeader) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramHeader) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : '')));
|
|
4334
4370
|
});
|
|
4335
|
-
(
|
|
4371
|
+
(_33 = template.body.examples) === null || _33 === void 0 ? void 0 : _33.forEach((each, index) => {
|
|
4336
4372
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
4337
4373
|
let paramValue = (_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramBody) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramBody) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : ''));
|
|
4338
4374
|
if (['$UnsubscribeAccount'].includes(each))
|
|
4339
4375
|
paramValue = each;
|
|
4340
4376
|
this.addParamBody(paramValue);
|
|
4341
4377
|
});
|
|
4342
|
-
(
|
|
4343
|
-
var _a;
|
|
4378
|
+
(_34 = template.buttons) === null || _34 === void 0 ? void 0 : _34.forEach((each, index) => {
|
|
4379
|
+
var _a, _b, _c, _d;
|
|
4344
4380
|
this.addParamButton();
|
|
4345
4381
|
const button = this.getButton;
|
|
4346
4382
|
if (((_a = each.examples) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
@@ -4358,8 +4394,9 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4358
4394
|
});
|
|
4359
4395
|
}
|
|
4360
4396
|
else {
|
|
4361
|
-
button[button.length - 1].get('name')
|
|
4362
|
-
|
|
4397
|
+
const lastControl = (_b = button[button.length - 1]) === null || _b === void 0 ? void 0 : _b.get('name');
|
|
4398
|
+
(_c = lastControl) === null || _c === void 0 ? void 0 : _c.clearValidators();
|
|
4399
|
+
(_d = lastControl) === null || _d === void 0 ? void 0 : _d.updateValueAndValidity();
|
|
4363
4400
|
}
|
|
4364
4401
|
});
|
|
4365
4402
|
}
|
|
@@ -4393,13 +4430,14 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4393
4430
|
const autocomplete = new google.maps.places.Autocomplete(this.mapSearchRef.nativeElement);
|
|
4394
4431
|
autocomplete.addListener('place_changed', () => {
|
|
4395
4432
|
this.ngZone.run(() => {
|
|
4433
|
+
var _a, _b;
|
|
4396
4434
|
const place = autocomplete.getPlace();
|
|
4397
4435
|
if (!place.geometry)
|
|
4398
4436
|
return;
|
|
4399
4437
|
this.maps.latitude = place.geometry.location.lat();
|
|
4400
4438
|
this.maps.longitude = place.geometry.location.lng();
|
|
4401
|
-
this.
|
|
4402
|
-
this.
|
|
4439
|
+
(_a = this.getControl('latitude')) === null || _a === void 0 ? void 0 : _a.setValue(this.maps.latitude);
|
|
4440
|
+
(_b = this.getControl('longitude')) === null || _b === void 0 ? void 0 : _b.setValue(this.maps.longitude);
|
|
4403
4441
|
});
|
|
4404
4442
|
});
|
|
4405
4443
|
});
|
|
@@ -4407,69 +4445,135 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
4407
4445
|
setCurrentLocation() {
|
|
4408
4446
|
if ('geolocation' in navigator) {
|
|
4409
4447
|
navigator.geolocation.getCurrentPosition((position) => {
|
|
4410
|
-
|
|
4448
|
+
var _a, _b, _c, _d;
|
|
4449
|
+
if (!((_a = this.getControl('longitude')) === null || _a === void 0 ? void 0 : _a.value) && !((_b = this.getControl('latitude')) === null || _b === void 0 ? void 0 : _b.value)) {
|
|
4411
4450
|
this.maps.latitude = position.coords.latitude;
|
|
4412
4451
|
this.maps.longitude = position.coords.longitude;
|
|
4413
|
-
this.
|
|
4414
|
-
this.
|
|
4452
|
+
(_c = this.getControl('latitude')) === null || _c === void 0 ? void 0 : _c.setValue(this.maps.latitude);
|
|
4453
|
+
(_d = this.getControl('longitude')) === null || _d === void 0 ? void 0 : _d.setValue(this.maps.longitude);
|
|
4415
4454
|
}
|
|
4416
4455
|
});
|
|
4417
4456
|
}
|
|
4418
4457
|
}
|
|
4419
4458
|
markerDragEnd(event) {
|
|
4459
|
+
var _a, _b;
|
|
4420
4460
|
if (event.latLng) {
|
|
4421
4461
|
this.maps.latitude = event.latLng.lat();
|
|
4422
4462
|
this.maps.longitude = event.latLng.lng();
|
|
4423
|
-
this.
|
|
4424
|
-
this.
|
|
4463
|
+
(_a = this.getControl('latitude')) === null || _a === void 0 ? void 0 : _a.setValue(this.maps.latitude);
|
|
4464
|
+
(_b = this.getControl('longitude')) === null || _b === void 0 ? void 0 : _b.setValue(this.maps.longitude);
|
|
4425
4465
|
}
|
|
4426
4466
|
}
|
|
4427
4467
|
updateDownloadCSV(isChecked) {
|
|
4428
|
-
|
|
4468
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
4469
|
+
(_a = this.getControl('isUpload')) === null || _a === void 0 ? void 0 : _a.setValue(isChecked);
|
|
4429
4470
|
if (isChecked) {
|
|
4430
|
-
this.
|
|
4431
|
-
this.
|
|
4432
|
-
this.
|
|
4433
|
-
this.
|
|
4434
|
-
this.
|
|
4435
|
-
this.
|
|
4436
|
-
this.
|
|
4437
|
-
this.
|
|
4438
|
-
this.
|
|
4439
|
-
this.
|
|
4440
|
-
this.
|
|
4441
|
-
this.
|
|
4442
|
-
this.
|
|
4443
|
-
this.
|
|
4444
|
-
this.
|
|
4471
|
+
this.getControl('paramHeader').controls = [];
|
|
4472
|
+
this.getControl('paramHeader').reset();
|
|
4473
|
+
this.getControl('paramBody').controls = [];
|
|
4474
|
+
this.getControl('paramBody').reset();
|
|
4475
|
+
this.getControl('paramButton').controls = [];
|
|
4476
|
+
this.getControl('paramButton').reset();
|
|
4477
|
+
(_b = this.getControl('paramHeader')) === null || _b === void 0 ? void 0 : _b.clearValidators();
|
|
4478
|
+
(_c = this.getControl('paramBody')) === null || _c === void 0 ? void 0 : _c.clearValidators();
|
|
4479
|
+
(_d = this.getControl('paramButton')) === null || _d === void 0 ? void 0 : _d.clearValidators();
|
|
4480
|
+
(_e = this.getControl('paramHeader')) === null || _e === void 0 ? void 0 : _e.updateValueAndValidity();
|
|
4481
|
+
(_f = this.getControl('paramBody')) === null || _f === void 0 ? void 0 : _f.updateValueAndValidity();
|
|
4482
|
+
(_g = this.getControl('paramButton')) === null || _g === void 0 ? void 0 : _g.updateValueAndValidity();
|
|
4483
|
+
(_h = this.getControl('otpValue')) === null || _h === void 0 ? void 0 : _h.reset();
|
|
4484
|
+
(_j = this.getControl('otpValue')) === null || _j === void 0 ? void 0 : _j.clearValidators();
|
|
4485
|
+
(_k = this.getControl('otpValue')) === null || _k === void 0 ? void 0 : _k.updateValueAndValidity();
|
|
4445
4486
|
return;
|
|
4446
4487
|
}
|
|
4447
|
-
this.updateTemplate(this.
|
|
4488
|
+
this.updateTemplate((_l = this.getControl('template')) === null || _l === void 0 ? void 0 : _l.value);
|
|
4448
4489
|
}
|
|
4449
4490
|
handleChangeTemplate(useExisting) {
|
|
4491
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
4492
|
+
(_a = this.getControl('isDownloadVariableXLS')) === null || _a === void 0 ? void 0 : _a.setValue(false);
|
|
4493
|
+
this.variables.clear();
|
|
4494
|
+
this.updateVariableDownloadXLS(false);
|
|
4450
4495
|
if (useExisting) {
|
|
4451
|
-
this.
|
|
4452
|
-
this.
|
|
4453
|
-
this.
|
|
4454
|
-
this.
|
|
4455
|
-
this.
|
|
4496
|
+
(_b = this.getControl('template')) === null || _b === void 0 ? void 0 : _b.setValidators(Validators$1.required);
|
|
4497
|
+
//this.getControl('text')?.reset();
|
|
4498
|
+
(_c = this.getControl('text')) === null || _c === void 0 ? void 0 : _c.clearValidators();
|
|
4499
|
+
(_d = this.getControl('text')) === null || _d === void 0 ? void 0 : _d.setValue('Halo {{1}}, ini adalah kode verifikasi kamu: {{2}}');
|
|
4500
|
+
(_e = this.getControl('text')) === null || _e === void 0 ? void 0 : _e.updateValueAndValidity();
|
|
4501
|
+
(_f = this.getControl('template')) === null || _f === void 0 ? void 0 : _f.updateValueAndValidity();
|
|
4502
|
+
this.variables.push(new FormGroup({
|
|
4503
|
+
paramName: new FormControl('', Validators$1.required),
|
|
4504
|
+
}));
|
|
4505
|
+
this.variables.push(new FormGroup({
|
|
4506
|
+
paramName: new FormControl('', Validators$1.required),
|
|
4507
|
+
}));
|
|
4456
4508
|
}
|
|
4457
4509
|
else {
|
|
4458
|
-
this.
|
|
4459
|
-
this.
|
|
4460
|
-
this.
|
|
4461
|
-
this.
|
|
4462
|
-
this.
|
|
4510
|
+
(_g = this.getControl('template')) === null || _g === void 0 ? void 0 : _g.reset();
|
|
4511
|
+
(_h = this.getControl('template')) === null || _h === void 0 ? void 0 : _h.clearValidators();
|
|
4512
|
+
(_j = this.getControl('text')) === null || _j === void 0 ? void 0 : _j.setValidators([Validators$1.required, Validators$1.max(1024)]);
|
|
4513
|
+
(_k = this.getControl('text')) === null || _k === void 0 ? void 0 : _k.updateValueAndValidity();
|
|
4514
|
+
(_l = this.getControl('template')) === null || _l === void 0 ? void 0 : _l.updateValueAndValidity();
|
|
4463
4515
|
}
|
|
4464
4516
|
}
|
|
4465
4517
|
handleChangeFrom(value) {
|
|
4466
4518
|
const { isUseExistingTemplate } = this.form.value;
|
|
4467
|
-
if (isUseExistingTemplate)
|
|
4468
|
-
|
|
4519
|
+
if (!isUseExistingTemplate)
|
|
4520
|
+
return;
|
|
4521
|
+
this.getTemplateOptionService(value);
|
|
4522
|
+
}
|
|
4523
|
+
get variables() {
|
|
4524
|
+
return this.getControl('variables');
|
|
4525
|
+
}
|
|
4526
|
+
addVariable() {
|
|
4527
|
+
const variableGroup = new FormGroup({
|
|
4528
|
+
paramName: new FormControl('', Validators$1.required),
|
|
4529
|
+
});
|
|
4530
|
+
this.variables.push(variableGroup);
|
|
4531
|
+
const textControl = this.getControl('text');
|
|
4532
|
+
if (textControl) {
|
|
4533
|
+
const currentBody = textControl.value || '';
|
|
4534
|
+
const newSequence = `{{${this.variables.controls.length}}}`;
|
|
4535
|
+
textControl.setValue(`${currentBody} ${newSequence}`.trim());
|
|
4536
|
+
}
|
|
4537
|
+
}
|
|
4538
|
+
removeVariable(index) {
|
|
4539
|
+
var _a;
|
|
4540
|
+
this.variables.removeAt(index);
|
|
4541
|
+
if (this.variables.controls.length === 0) {
|
|
4542
|
+
(_a = this.getControl('useXlsx')) === null || _a === void 0 ? void 0 : _a.setValue(false);
|
|
4543
|
+
}
|
|
4544
|
+
const textControl = this.getControl('text');
|
|
4545
|
+
if (textControl && textControl.value) {
|
|
4546
|
+
const targetSequence = index + 1;
|
|
4547
|
+
let currentBody = textControl.value;
|
|
4548
|
+
const removeRegex = new RegExp(`\\s*\\{\\{${targetSequence}\\}\\}`, 'g');
|
|
4549
|
+
currentBody = currentBody.replace(removeRegex, '');
|
|
4550
|
+
currentBody = currentBody.replace(/\{\{(\d+)\}\}/g, (match, numStr) => {
|
|
4551
|
+
const num = parseInt(numStr, 10);
|
|
4552
|
+
if (num > targetSequence) {
|
|
4553
|
+
return `{{${num - 1}}}`;
|
|
4554
|
+
}
|
|
4555
|
+
return match;
|
|
4556
|
+
});
|
|
4557
|
+
textControl.setValue(currentBody.trim());
|
|
4558
|
+
}
|
|
4559
|
+
}
|
|
4560
|
+
updateVariableDownloadXLS(isChecked) {
|
|
4561
|
+
const variablesArray = this.variables;
|
|
4562
|
+
if (isChecked) {
|
|
4563
|
+
variablesArray.controls.forEach((control) => {
|
|
4564
|
+
var _a, _b;
|
|
4565
|
+
(_a = control.get('paramName')) === null || _a === void 0 ? void 0 : _a.clearValidators();
|
|
4566
|
+
(_b = control.get('paramName')) === null || _b === void 0 ? void 0 : _b.updateValueAndValidity();
|
|
4567
|
+
});
|
|
4469
4568
|
}
|
|
4470
4569
|
else {
|
|
4471
|
-
|
|
4570
|
+
variablesArray.controls.forEach((control) => {
|
|
4571
|
+
var _a, _b;
|
|
4572
|
+
(_a = control.get('paramName')) === null || _a === void 0 ? void 0 : _a.setValidators(Validators$1.required);
|
|
4573
|
+
(_b = control.get('paramName')) === null || _b === void 0 ? void 0 : _b.updateValueAndValidity();
|
|
4574
|
+
});
|
|
4472
4575
|
}
|
|
4576
|
+
this.form.updateValueAndValidity();
|
|
4473
4577
|
}
|
|
4474
4578
|
ngOnDestroy() {
|
|
4475
4579
|
this.subscribers.forEach((each) => each.unsubscribe());
|
|
@@ -4497,8 +4601,8 @@ __decorate([
|
|
|
4497
4601
|
GeneralInformationWAComponent = __decorate([
|
|
4498
4602
|
Component({
|
|
4499
4603
|
selector: 'lib-general-information-wa',
|
|
4500
|
-
template: "<form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Message Type</mat-label>\r\n\r\n <mat-select placeholder=\"Select message type\" formControlName=\"channel\">\r\n <mat-option\r\n *ngFor=\"let option of msgTypeWAOption\"\r\n [value]=\"option.code\"\r\n (click)=\"formReset()\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.channel\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('channel')?.touched && form.get('channel')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n\r\n <div\r\n *ngIf=\"!getIsTemplate\"\r\n role=\"alert\"\r\n class=\"alert alert-warning d-flex align-items-center\"\r\n style=\"margin-top: 16px; border: 1px solid rgb(243, 124, 44)\"\r\n >\r\n <mat-icon style=\"margin-right: 10px !important\">error_outline</mat-icon>\r\n <div *ngIf=\"!getIsUtility\">\r\n If you select this channel, keep in mind that the message might not be delivered to\r\n all selected customers. This is because the customer must have had a conversation\r\n previously with BSP.\r\n </div>\r\n\r\n <div *ngIf=\"getIsUtility\">\r\n You can send directly a utility message. You can choose between existing utility\r\n templates or creating a new one. If you create a new template, the system may check\r\n whether the content already exists as a template.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getIsText\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from').touched && form.get('from').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label class=\"asterix--after\">Text</mat-label>\r\n\r\n <textarea\r\n matInput\r\n rows=\"6\"\r\n cols=\"50\"\r\n cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"2\"\r\n cdkAutosizeMaxRows=\"15\"\r\n formControlName=\"text\"\r\n placeholder=\"Enter text\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.text\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('text')?.touched && form.get('text')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsMedia\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Media Type</mat-label>\r\n\r\n <mat-select\r\n placeholder=\"Select media type\"\r\n formControlName=\"media\"\r\n (selectionChange)=\"updateMediaType($event.value)\"\r\n >\r\n <mat-option *ngFor=\"let option of mediaTypeOption\" [value]=\"option.code\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.media\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('media').touched && form.get('media').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from').touched && form.get('from').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"form.get('media').value?.toLowerCase() !== 'location'\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">File</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n (click)=\"filePicker.click()\"\r\n formControlName=\"fileName\"\r\n />\r\n\r\n <button\r\n mat-button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Choose File\"\r\n (click)=\"filePicker.click()\"\r\n >\r\n <mat-icon>attach_file</mat-icon>\r\n </button>\r\n\r\n <input\r\n #filePicker\r\n hidden\r\n type=\"file\"\r\n [accept]=\"extFileAccepted\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.fileName\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('fileName').touched &&\r\n form.get('fileName').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('media').value?.toLowerCase() === 'location'\">\r\n <div class=\"w-100\">\r\n <h4 class=\"asterix--after\">Location</h4>\r\n\r\n <div class=\"w-100\">\r\n <agm-map\r\n style=\"width: 100%; height: 400px\"\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [disableDoubleClickZoom]=\"maps.isDoubleClickZoom\"\r\n [zoom]=\"maps.zoom\"\r\n >\r\n <agm-marker\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [markerDraggable]=\"maps.isDraggable\"\r\n (dragEnd)=\"markerDragEnd($event)\"\r\n ></agm-marker>\r\n </agm-map>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Location</mat-label>\r\n\r\n <input\r\n #mapSearch\r\n matInput\r\n type=\"text\"\r\n maxlength=\"100\"\r\n placeholder=\"Enter location here\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsTemplate\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n (selectionChange)=\"getTemplateOptionService($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"template\"\r\n placeholder=\"Select template\"\r\n [complete]=\"isHaveNextTemplateOption === false\"\r\n [compareWith]=\"templateSelectedDisplay\"\r\n (infiniteScroll)=\"getNextTemplateBatch()\"\r\n (selectionChange)=\"updateTemplate($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('template').value?.name\"\r\n (searchRes)=\"updateSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of templateOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingTemplateOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.template\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('template')?.touched &&\r\n form.get('template')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div *ngIf=\"isHaveTemplateParam\" class=\"d-flex justify-content-end\">\r\n <mat-checkbox\r\n labelPosition=\"before\"\r\n formControlName=\"isUpload\"\r\n (change)=\"updateDownloadCSV($event.checked)\"\r\n >\r\n Using Download XLSX\r\n </mat-checkbox>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!form.get('isUpload')?.value\">\r\n <div\r\n *ngIf=\"form.get('template')?.value?.category === 'AUTHENTICATION'\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label> OTP Value </mat-label>\r\n\r\n <input matInput type=\"text\" formControlName=\"otpValue\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParamHeader?.length > 0\">\r\n <p class=\"font-16px font-PoppinsBold\">Header Parameter</p>\r\n\r\n <div\r\n *ngFor=\"let param of getParamHeader; let paramHeaderIndex = index\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramHeaderIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramHeaderIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getParamBody?.length > 0\">\r\n <p class=\"font-16px font-PoppinsBold mt-3\">Body Parameter</p>\r\n\r\n <div\r\n *ngFor=\"let param of getParamBody; let paramBodyIndex = index\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramBodyIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramBodyIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isShowParameter\">\r\n <p class=\"font-16px font-PoppinsBold mt-3\">Button Parameter</p>\r\n\r\n <ng-container *ngFor=\"let button of getButton; let buttonIndex = index\">\r\n <ng-container *ngIf=\"getParamButton(buttonIndex)?.length > 0\">\r\n <p class=\"font-14px font-PoppinsBold mt-3\">Button {{ buttonIndex + 1 }}</p>\r\n\r\n <div\r\n *ngFor=\"\r\n let param of getParamButton(buttonIndex);\r\n let paramIndex = index\r\n \"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n ['image', 'video', 'document'].includes(\r\n form.get('template')?.value?.header?.type?.toLowerCase()\r\n )\r\n \"\r\n >\r\n <p class=\"font-16px font-PoppinsBold mt-3\">File</p>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">File</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n (click)=\"filePicker.click()\"\r\n formControlName=\"fileName\"\r\n />\r\n\r\n <button\r\n mat-button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Choose File\"\r\n (click)=\"filePicker.click()\"\r\n >\r\n <mat-icon>attach_file</mat-icon>\r\n </button>\r\n\r\n <input\r\n #filePicker\r\n hidden\r\n type=\"file\"\r\n [accept]=\"extFileAccepted\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsCatalogue\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">Category</mat-label>\r\n\r\n <mat-select formControlName=\"category\" placeholder=\"Select category\">\r\n <mat-option *ngFor=\"let option of categoryOption\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.category\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('category')?.touched &&\r\n form.get('category')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">Catalog</mat-label>\r\n\r\n <mat-select formControlName=\"catalogue\" placeholder=\"Select catalog\">\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.catalogue\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('catalogue')?.touched &&\r\n form.get('catalogue')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"form.get('category')?.value === 'product'\"\r\n style=\"padding: 8px; border-radius: 8px; border: 1px solid #6177c4\"\r\n >\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Product</mat-label>\r\n\r\n <mat-select formControlName=\"product\" placeholder=\"Select product\">\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.product\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('product')?.touched &&\r\n form.get('product')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Body</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n maxlength=\"100\"\r\n formControlName=\"body\"\r\n placeholder=\"Enter body\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsUtility\">\r\n <div style=\"display: grid; gap: 0.5rem\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n <mat-radio-group\r\n style=\"display: flex; gap: 0.5rem; flex-wrap: wrap\"\r\n formControlName=\"isUseExistingTemplate\"\r\n (change)=\"handleChangeTemplate($event.value)\"\r\n >\r\n <mat-radio-button\r\n [value]=\"option.value\"\r\n *ngFor=\"let option of templates\"\r\n color=\"primary\"\r\n >\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n (selectionChange)=\"handleChangeFrom($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!form.get('isUseExistingTemplate')?.value; else existingTmpl\">\r\n <ng-container *ngTemplateOutlet=\"stageAlertTmpl\"></ng-container>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label class=\"asterix--after\">Body</mat-label>\r\n\r\n <textarea\r\n matInput\r\n rows=\"6\"\r\n cols=\"50\"\r\n cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"2\"\r\n cdkAutosizeMaxRows=\"15\"\r\n formControlName=\"text\"\r\n placeholder=\"Enter text\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.text\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('text').touched && form.get('text').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <app-input\r\n type=\"numeric\"\r\n formControlName=\"ttl\"\r\n label=\"TTL\"\r\n placeholder=\"Enter ttl\"\r\n [trimLeadingZeros]=\"true\"\r\n ></app-input>\r\n </div>\r\n\r\n <div *ngIf=\"!isReadOnlyMode\">\r\n <mat-checkbox formControlName=\"isNeedSave\">\r\n Save this message as future template\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div\r\n role=\"alert\"\r\n class=\"alert alert-warning d-flex align-items-center\"\r\n style=\"margin-top: 8px; border: 1px solid rgb(243, 124, 44)\"\r\n *ngIf=\"!isUtility\"\r\n >\r\n <mat-icon style=\"margin-right: 10px !important\">error_outline</mat-icon>\r\n <div>\r\n Copy mismatch. This copy is not Utility content. Please revise to proceed.\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #existingTmpl>\r\n <ng-container *ngTemplateOutlet=\"stageAlertTmpl\"></ng-container>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"template\"\r\n placeholder=\"Select template\"\r\n [complete]=\"isHaveNextTemplateOption === false\"\r\n [compareWith]=\"templateSelectedDisplay\"\r\n (infiniteScroll)=\"getNextTemplateBatch()\"\r\n (selectionChange)=\"updateTemplate($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('template').value?.name\"\r\n (searchRes)=\"updateSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of templateOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingTemplateOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.template\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('template')?.touched &&\r\n form.get('template')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <app-input\r\n type=\"numeric\"\r\n formControlName=\"ttl\"\r\n label=\"TTL\"\r\n placeholder=\"Enter ttl\"\r\n [trimLeadingZeros]=\"true\"\r\n ></app-input>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n</form>\r\n\r\n<ng-template #stageAlertTmpl>\r\n <div\r\n role=\"alert\"\r\n class=\"alert alert-warning d-flex align-items-center\"\r\n style=\"margin-top: 8px; border: 1px solid rgb(243, 124, 44)\"\r\n *ngIf=\"form.get('from')?.value && form.get('from')?.value?.directSendRestrictionStage > 0\"\r\n >\r\n <mat-icon style=\"margin-right: 10px !important\">error_outline</mat-icon>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 1\">\r\n Direct Send misuse detected. Please review your messaging practices.\r\n </div>\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 2\">\r\n Direct Send access restricted for 7 days due to continued misuse.\r\n </div>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 3\">\r\n Direct Send access restricted for 30 days due to continued misuse. Final warning before\r\n permanent revocation.\r\n </div>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 4\">\r\n Direct Send access has been permanently revoked.\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
|
|
4501
|
-
styles: [".asterix--after:after{content:\"*\";color:red}"]
|
|
4604
|
+
template: "<form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Message Type</mat-label>\r\n <mat-select placeholder=\"Select message type\" formControlName=\"channel\">\r\n <mat-option\r\n *ngFor=\"let option of msgTypeWAOption\"\r\n [value]=\"option.code\"\r\n (click)=\"formReset()\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.channel\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('channel')?.touched && form.get('channel')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n\r\n <div\r\n *ngIf=\"!getIsTemplate\"\r\n role=\"alert\"\r\n class=\"alert alert-warning d-flex align-items-center\"\r\n style=\"margin-top: 16px; border: 1px solid rgb(243, 124, 44)\"\r\n >\r\n <mat-icon style=\"margin-right: 10px !important\">error_outline</mat-icon>\r\n <div *ngIf=\"!getIsUtility\">\r\n If you select this channel, keep in mind that the message might not be delivered to\r\n all selected customers. This is because the customer must have had a conversation\r\n previously with BSP.\r\n </div>\r\n\r\n <div *ngIf=\"getIsUtility\">\r\n You can send directly a utility message. You can choose between existing utility\r\n templates or creating a new one. If you create a new template, the system may check\r\n whether the content already exists as a template.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getIsText\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from').touched && form.get('from').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label class=\"asterix--after\">Text</mat-label>\r\n\r\n <textarea\r\n matInput\r\n rows=\"6\"\r\n cols=\"50\"\r\n cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"2\"\r\n cdkAutosizeMaxRows=\"15\"\r\n formControlName=\"text\"\r\n placeholder=\"Enter text\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.text\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('text')?.touched && form.get('text')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsMedia\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Media Type</mat-label>\r\n\r\n <mat-select\r\n placeholder=\"Select media type\"\r\n formControlName=\"media\"\r\n (selectionChange)=\"updateMediaType($event.value)\"\r\n >\r\n <mat-option *ngFor=\"let option of mediaTypeOption\" [value]=\"option.code\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.media\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('media').touched && form.get('media').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from').touched && form.get('from').hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"form.get('media').value?.toLowerCase() !== 'location'\">\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">File</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n (click)=\"filePicker.click()\"\r\n formControlName=\"fileName\"\r\n />\r\n\r\n <button\r\n mat-button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Choose File\"\r\n (click)=\"filePicker.click()\"\r\n >\r\n <mat-icon>attach_file</mat-icon>\r\n </button>\r\n\r\n <input\r\n #filePicker\r\n hidden\r\n type=\"file\"\r\n [accept]=\"extFileAccepted\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.fileName\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('fileName').touched &&\r\n form.get('fileName').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('media').value?.toLowerCase() === 'location'\">\r\n <div class=\"w-100\">\r\n <h4 class=\"asterix--after\">Location</h4>\r\n\r\n <div class=\"w-100\">\r\n <agm-map\r\n style=\"width: 100%; height: 400px\"\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [disableDoubleClickZoom]=\"maps.isDoubleClickZoom\"\r\n [zoom]=\"maps.zoom\"\r\n >\r\n <agm-marker\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [markerDraggable]=\"maps.isDraggable\"\r\n (dragEnd)=\"markerDragEnd($event)\"\r\n ></agm-marker>\r\n </agm-map>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Location</mat-label>\r\n\r\n <input\r\n #mapSearch\r\n matInput\r\n type=\"text\"\r\n maxlength=\"100\"\r\n placeholder=\"Enter location here\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsTemplate\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n (selectionChange)=\"getTemplateOptionService($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"template\"\r\n placeholder=\"Select template\"\r\n [complete]=\"isHaveNextTemplateOption === false\"\r\n [compareWith]=\"templateSelectedDisplay\"\r\n (infiniteScroll)=\"getNextTemplateBatch()\"\r\n (selectionChange)=\"updateTemplate($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('template').value?.name\"\r\n (searchRes)=\"updateSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of templateOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingTemplateOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.template\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('template')?.touched &&\r\n form.get('template')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div\r\n class=\"button-parameter-section mt-4\"\r\n *ngIf=\"buttonParamsControls.length > 0 && !isUsingExcelBulk\"\r\n >\r\n <h5 class=\"mb-3 font-weight-bold\">Button Parameter</h5>\r\n\r\n <div formArrayName=\"buttonParams\">\r\n <div\r\n *ngFor=\"let btnControl of buttonParamsControls; let i = index\"\r\n [formGroupName]=\"i\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Button {{ i + 1 }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"payload\"\r\n [placeholder]=\"'Parameter ' + (i + 1)\"\r\n maxlength=\"256\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isHaveTemplateParam\" class=\"d-flex justify-content-end\">\r\n <mat-checkbox\r\n labelPosition=\"before\"\r\n formControlName=\"isUpload\"\r\n (change)=\"updateDownloadCSV($event.checked)\"\r\n >\r\n Using Download XLSX\r\n </mat-checkbox>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!form.get('isUpload')?.value\">\r\n <div\r\n *ngIf=\"form.get('template')?.value?.category === 'AUTHENTICATION'\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label> OTP Value </mat-label>\r\n\r\n <input matInput type=\"text\" formControlName=\"otpValue\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParamHeader?.length > 0\">\r\n <p class=\"font-16px font-PoppinsBold\">Header Parameter</p>\r\n\r\n <div\r\n *ngFor=\"let param of getParamHeader; let paramHeaderIndex = index\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramHeaderIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramHeaderIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getParamBody?.length > 0\">\r\n <p class=\"font-16px font-PoppinsBold mt-3\">Body Parameter</p>\r\n\r\n <div\r\n *ngFor=\"let param of getParamBody; let paramBodyIndex = index\"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramBodyIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramBodyIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isShowParameter\">\r\n <p class=\"font-16px font-PoppinsBold mt-3\">Button Parameter</p>\r\n\r\n <ng-container *ngFor=\"let button of getButton; let buttonIndex = index\">\r\n <ng-container *ngIf=\"getParamButton(buttonIndex)?.length > 0\">\r\n <p class=\"font-14px font-PoppinsBold mt-3\">Button {{ buttonIndex + 1 }}</p>\r\n\r\n <div\r\n *ngFor=\"\r\n let param of getParamButton(buttonIndex);\r\n let paramIndex = index\r\n \"\r\n class=\"form-group\"\r\n >\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Parameter {{ paramIndex + 1 }}</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'Parameter ' + (paramIndex + 1)\"\r\n [formControl]=\"param.get('name')\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n ['image', 'video', 'document'].includes(\r\n form.get('template')?.value?.header?.type?.toLowerCase()\r\n )\r\n \"\r\n >\r\n <p class=\"font-16px font-PoppinsBold mt-3\">File</p>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">File</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n (click)=\"filePicker.click()\"\r\n formControlName=\"fileName\"\r\n />\r\n\r\n <button\r\n mat-button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Choose File\"\r\n (click)=\"filePicker.click()\"\r\n >\r\n <mat-icon>attach_file</mat-icon>\r\n </button>\r\n\r\n <input\r\n #filePicker\r\n hidden\r\n type=\"file\"\r\n [accept]=\"extFileAccepted\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsCatalogue\">\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">Category</mat-label>\r\n\r\n <mat-select formControlName=\"category\" placeholder=\"Select category\">\r\n <mat-option *ngFor=\"let option of categoryOption\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.category\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('category')?.touched &&\r\n form.get('category')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">Catalog</mat-label>\r\n\r\n <mat-select formControlName=\"catalogue\" placeholder=\"Select catalog\">\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.catalogue\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('catalogue')?.touched &&\r\n form.get('catalogue')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"form.get('category')?.value === 'product'\"\r\n style=\"padding: 8px; border-radius: 8px; border: 1px solid #6177c4\"\r\n >\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Product</mat-label>\r\n\r\n <mat-select formControlName=\"product\" placeholder=\"Select product\">\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.product\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('product')?.touched &&\r\n form.get('product')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label>Body</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n maxlength=\"100\"\r\n formControlName=\"body\"\r\n placeholder=\"Enter body\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getIsUtility\">\r\n <div style=\"display: grid; gap: 0.5rem\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n <mat-radio-group\r\n style=\"display: flex; gap: 0.5rem; flex-wrap: wrap\"\r\n formControlName=\"isUseExistingTemplate\"\r\n (change)=\"handleChangeTemplate($event.value)\"\r\n >\r\n <mat-radio-button\r\n [value]=\"option.value\"\r\n *ngFor=\"let option of templates\"\r\n color=\"primary\"\r\n >\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100\"\r\n style=\"margin-bottom: 20\"\r\n >\r\n <mat-label class=\"asterix--after\">From</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"from\"\r\n placeholder=\"Select from\"\r\n [complete]=\"isHaveNextAccountOption === false\"\r\n [compareWith]=\"accountSelectedDisplay\"\r\n (infiniteScroll)=\"getNextAccountBatch()\"\r\n (selectionChange)=\"handleChangeFrom($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('from').value?.name\"\r\n (searchRes)=\"updateSearchAccount($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of accountOption\" [value]=\"option\">\r\n {{ option.name + ' (' + option.accountNo + ')' }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingAccountOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.from\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"form.get('from')?.touched && form.get('from')?.hasError(validation.type)\"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!form.get('isUseExistingTemplate')?.value; else existingTmpl\">\r\n <ng-container *ngTemplateOutlet=\"stageAlertTmpl\"></ng-container>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label class=\"asterix--after\">Body</mat-label>\r\n\r\n <textarea\r\n matInput\r\n rows=\"6\"\r\n cols=\"50\"\r\n cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"2\"\r\n cdkAutosizeMaxRows=\"15\"\r\n formControlName=\"text\"\r\n placeholder=\"Enter text\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.text\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('text').touched && form.get('text').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <app-input\r\n type=\"numeric\"\r\n formControlName=\"ttl\"\r\n label=\"TTL\"\r\n placeholder=\"Enter ttl\"\r\n [trimLeadingZeros]=\"true\"\r\n suffix=\"seconds\"\r\n hint=\"The default TTL is 30 days (2,592,000 seconds) if no value is provided.\"\r\n ></app-input>\r\n </div>\r\n\r\n <div *ngIf=\"!isReadOnlyMode\">\r\n <mat-checkbox formControlName=\"isNeedSave\">\r\n Save this message as future template\r\n </mat-checkbox>\r\n </div>\r\n <div class=\"template-container mt-5\" *ngIf=\"!form.get('isDownloadVariableXLS')?.value\">\r\n <div class=\"add-variable-wrapper\">\r\n <button mat-button class=\"btn-add-variable\" (click)=\"addVariable()\">\r\n <mat-icon class=\"icon-small\">add</mat-icon> Add Variable\r\n </button>\r\n </div>\r\n\r\n <div class=\"body-content-wrapper\">\r\n <h3 class=\"body-content-title\">Body Content</h3>\r\n <p class=\"body-content-subtitle\">\r\n Input the parameter to show during the preview. You can use predefined\r\n variable, drag and drop to text field below\r\n </p>\r\n <div class=\"predefined-variable-wrapper\">\r\n <span class=\"btn-predefined\">\r\n <mat-icon class=\"icon-small\">attach_money</mat-icon>\r\n Unsubscribe Account\r\n </span>\r\n </div>\r\n <div class=\"variables-list\" formArrayName=\"variables\">\r\n <div\r\n class=\"variable-row d-flex align-items-start mb-3\"\r\n *ngFor=\"let variable of variables.controls; let i = index\"\r\n [formGroupName]=\"i\"\r\n >\r\n <div class=\"variable-sequence mr-3\">\r\n {{ '{' + '{' + (i + 1) + '}' + '}' }}\r\n </div>\r\n <div class=\"variable-input-wrapper flex-grow-1\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n class=\"w-100 custom-variable-field\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"paramName\"\r\n placeholder=\"e.g. Name, Verification code\"\r\n />\r\n </mat-form-field>\r\n\r\n <ng-container\r\n *ngFor=\"let validation of validationMessages?.paramName\"\r\n >\r\n <div\r\n class=\"custom-error-text text-right\"\r\n *ngIf=\"\r\n variable.get('paramName')?.hasError(validation.type) &&\r\n (variable.get('paramName')?.touched ||\r\n variable.get('paramName')?.dirty)\r\n \"\r\n >\r\n <span class=\"font-12px m-0\">{{ validation.message }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"btn-delete ml-3\"\r\n (click)=\"removeVariable(i)\"\r\n >\r\n <mat-icon color=\"warn\">delete_outline</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <mat-checkbox\r\n labelPosition=\"before\"\r\n formControlName=\"isDownloadVariableXLS\"\r\n (change)=\"updateVariableDownloadXLS($event.checked)\"\r\n >\r\n Using Download XLSX\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #existingTmpl>\r\n <ng-container *ngTemplateOutlet=\"stageAlertTmpl\"></ng-container>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Template</mat-label>\r\n\r\n <mat-select\r\n matSelectInfiniteScroll\r\n formControlName=\"template\"\r\n placeholder=\"Select template\"\r\n [complete]=\"isHaveNextTemplateOption === false\"\r\n [compareWith]=\"templateSelectedDisplay\"\r\n (infiniteScroll)=\"getNextTemplateBatch()\"\r\n (selectionChange)=\"updateTemplate($event.value)\"\r\n >\r\n <div style=\"margin: 20px\">\r\n <lib-search\r\n [placeholder]=\"'Search'\"\r\n [currentValue]=\"form?.get('template').value?.name\"\r\n (searchRes)=\"updateSearch($event)\"\r\n ></lib-search>\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of templateOption\" [value]=\"option\">\r\n {{ option.name }}\r\n </mat-option>\r\n <mat-option *ngIf=\"isLoadingTemplateOption\">Loading...</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.template\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('template')?.touched &&\r\n form.get('template')?.hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <app-input\r\n type=\"numeric\"\r\n formControlName=\"ttl\"\r\n label=\"TTL\"\r\n placeholder=\"Enter ttl\"\r\n [trimLeadingZeros]=\"true\"\r\n suffix=\"Seconds\"\r\n hint=\"The default TTL is 30 days (2,592,000 seconds) if no value is provided.\"\r\n ></app-input>\r\n </div>\r\n <div\r\n class=\"template-container mt-5\"\r\n *ngIf=\"!form.get('isDownloadVariableXLS')?.value\"\r\n formArrayName=\"variables\"\r\n >\r\n <div class=\"font-bold mb-3\">Variables</div>\r\n\r\n <div class=\"form-group mb-3\" [formGroupName]=\"0\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100 custom-variable-field\"\r\n >\r\n <mat-label>{{ '{' + '{' + 1 + '}' + '}' }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"paramName\"\r\n placeholder=\"Name\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-group mb-3\" [formGroupName]=\"1\">\r\n <mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n class=\"w-100 custom-variable-field\"\r\n >\r\n <mat-label>{{ '{' + '{' + 2 + '}' + '}' }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"paramName\"\r\n placeholder=\"Verification code\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <mat-checkbox\r\n labelPosition=\"before\"\r\n formControlName=\"isDownloadVariableXLS\"\r\n (change)=\"updateVariableDownloadXLS($event.checked)\"\r\n >\r\n Using Download XLSX\r\n </mat-checkbox>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n</form>\r\n\r\n<ng-template #stageAlertTmpl>\r\n <div\r\n role=\"alert\"\r\n class=\"alert alert-warning d-flex align-items-center\"\r\n style=\"margin-top: 8px; border: 1px solid rgb(243, 124, 44)\"\r\n *ngIf=\"form.get('from')?.value && form.get('from')?.value?.directSendRestrictionStage > 0\"\r\n >\r\n <mat-icon style=\"margin-right: 10px !important\">error_outline</mat-icon>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 1\">\r\n Direct Send misuse detected. Please review your messaging practices.\r\n </div>\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 2\">\r\n Direct Send access restricted for 7 days due to continued misuse.\r\n </div>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 3\">\r\n Direct Send access restricted for 30 days due to continued misuse. Final warning before\r\n permanent revocation.\r\n </div>\r\n\r\n <div *ngIf=\"form.get('from')?.value?.directSendRestrictionStage === 4\">\r\n Direct Send access has been permanently revoked.\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
|
|
4605
|
+
styles: [".asterix--after:after{content:\"*\";color:red}.template-container{background-color:#fff;border-radius:.5rem;width:100%;max-width:56rem;box-sizing:border-box}.template-container .variable-wapper{margin-bottom:.5rem;display:flex;align-items:center}.template-container .add-variable-wrapper{display:flex;align-items:center;justify-content:flex-end;margin-bottom:.5rem}.template-container .add-variable-wrapper .btn-add-variable{color:#3b82f6!important}.template-container .body-content-wrapper{background-color:#d1e4fd;border-radius:.5rem;padding:1.5rem;margin-bottom:.5rem}.template-container .body-content-wrapper .body-content-title{color:#1e293b;font-size:1.125rem;font-weight:700;margin:0 0 .5rem}.template-container .body-content-wrapper .body-content-subtitle{color:#6b7280;font-size:.875rem;margin:0 0 1.25rem}.template-container .body-content-wrapper .predefined-variable-wrapper{margin-bottom:1.5rem}.template-container .body-content-wrapper .predefined-variable-wrapper .btn-predefined{display:inline-flex;align-items:center;background-color:#22c55e;color:#fff;font-size:.75rem;font-weight:600;padding:.375rem .75rem;border-radius:9999px;cursor:grab;transition:background-color .2s}.template-container .body-content-wrapper .predefined-variable-wrapper .btn-predefined:hover{background-color:#16a34a}.template-container .body-content-wrapper .predefined-variable-wrapper .btn-predefined .icon-small{font-size:16px;width:16px;height:16px;margin-right:.25rem;line-height:16px}.template-container .body-content-wrapper .custom-variable-field ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important;margin-bottom:0!important}.template-container .body-content-wrapper .custom-variable-field ::ng-deep .mat-form-field-outline{background-color:#fff!important;border-radius:5px}.template-container .body-content-wrapper .custom-variable-field ::ng-deep .mat-form-field-flex{background-color:transparent!important}.template-container .body-content-wrapper .custom-variable-field ::ng-deep input.mat-input-element{margin-top:-8px!important}.template-container .body-content-wrapper .custom-error-text{color:#f44336;margin-top:4px;padding-right:12px}.template-container .body-content-wrapper .variable-sequence{background-color:#fff;border:1px solid #e2e8f0;color:#4b5563;border-radius:5px;font-weight:500;min-width:3.5rem;text-align:center;height:51px;display:flex;align-items:center;justify-content:center;margin-top:4px}.template-container .body-content-wrapper .btn-delete{background:0 0;border:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;height:51px;margin-top:4px;transition:transform .2s}.template-container .body-content-wrapper .btn-delete:hover{transform:scale(1.1)}.template-container .checkbox-wrapper{display:flex;justify-content:flex-end;margin-top:.5rem}.template-container .checkbox-wrapper .checkbox-xlsx{font-size:.875rem;font-weight:500;color:#374151}"]
|
|
4502
4606
|
})
|
|
4503
4607
|
], GeneralInformationWAComponent);
|
|
4504
4608
|
|
|
@@ -4898,10 +5002,7 @@ let GeneralInformationComponent = class GeneralInformationComponent {
|
|
|
4898
5002
|
initForm() {
|
|
4899
5003
|
this.form = new FormGroup({
|
|
4900
5004
|
id: new FormControl(null),
|
|
4901
|
-
campaignName: new FormControl(null, [
|
|
4902
|
-
Validators$1.required,
|
|
4903
|
-
Validators$1.maxLength(100),
|
|
4904
|
-
]),
|
|
5005
|
+
campaignName: new FormControl(null, [Validators$1.required, Validators$1.maxLength(100)]),
|
|
4905
5006
|
medium: new FormControl(null, [Validators$1.required]),
|
|
4906
5007
|
});
|
|
4907
5008
|
this.form.valueChanges.subscribe(() => {
|
|
@@ -4925,12 +5026,8 @@ let GeneralInformationComponent = class GeneralInformationComponent {
|
|
|
4925
5026
|
if (Object.entries(campaign).length === 0)
|
|
4926
5027
|
return;
|
|
4927
5028
|
this.form.get('id').setValue((_b = (_a = campaign) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.id);
|
|
4928
|
-
this.form
|
|
4929
|
-
|
|
4930
|
-
.setValue((_d = (_c = campaign) === null || _c === void 0 ? void 0 : _c.generalInformation) === null || _d === void 0 ? void 0 : _d.form.campaignName);
|
|
4931
|
-
this.form
|
|
4932
|
-
.get('medium')
|
|
4933
|
-
.setValue((_f = (_e = campaign) === null || _e === void 0 ? void 0 : _e.generalInformation) === null || _f === void 0 ? void 0 : _f.form.medium);
|
|
5029
|
+
this.form.get('campaignName').setValue((_d = (_c = campaign) === null || _c === void 0 ? void 0 : _c.generalInformation) === null || _d === void 0 ? void 0 : _d.form.campaignName);
|
|
5030
|
+
this.form.get('medium').setValue((_f = (_e = campaign) === null || _e === void 0 ? void 0 : _e.generalInformation) === null || _f === void 0 ? void 0 : _f.form.medium);
|
|
4934
5031
|
}
|
|
4935
5032
|
initDisable() {
|
|
4936
5033
|
if (!this.isReadOnlyMode) {
|
|
@@ -4939,6 +5036,7 @@ let GeneralInformationComponent = class GeneralInformationComponent {
|
|
|
4939
5036
|
this.form.disable();
|
|
4940
5037
|
}
|
|
4941
5038
|
updateGeneralInformationForm(form) {
|
|
5039
|
+
console.log(form, 'form');
|
|
4942
5040
|
this.generalInformationForm = form;
|
|
4943
5041
|
this.isShowMore = false;
|
|
4944
5042
|
this.generalInformation.emit({
|
|
@@ -5022,7 +5120,7 @@ GeneralInformationComponent = __decorate([
|
|
|
5022
5120
|
Component({
|
|
5023
5121
|
selector: 'lib-new-campaign-general-information',
|
|
5024
5122
|
template: "<form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"campaign-info\">\r\n <div class=\"campaign-info-child\">\r\n <mat-card>\r\n <mat-card-content>\r\n <h3 class=\"font-22px font-PoppinsBold mb-4\">General Information</h3>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Broadcast Name</mat-label>\r\n\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"campaignName\"\r\n placeholder=\"Enter Broadcast name\"\r\n />\r\n </mat-form-field>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n <mat-hint align=\"start\">\r\n {{ form.get('campaignName').value?.length || 0 }}/100\r\n </mat-hint>\r\n\r\n <div>\r\n <mat-error\r\n align=\"end\"\r\n *ngFor=\"let validation of validationMessages.campaignName\"\r\n >\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('campaignName').touched &&\r\n form.get('campaignName').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\" class=\"w-100\">\r\n <mat-label class=\"asterix--after\">Channel</mat-label>\r\n\r\n <mat-select placeholder=\"Select channel\" formControlName=\"medium\">\r\n <mat-option\r\n *ngFor=\"let option of channelOption\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-error align=\"end\" *ngFor=\"let validation of validationMessages.medium\">\r\n <p\r\n class=\"font-12px mb-0\"\r\n *ngIf=\"\r\n form.get('medium').touched &&\r\n form.get('medium').hasError(validation.type)\r\n \"\r\n >\r\n {{ validation.message }}\r\n </p>\r\n </mat-error>\r\n </div>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'WA'\">\r\n <lib-general-information-wa\r\n [isTouchedForm]=\"isTouchedWAForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-wa>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'LINE'\">\r\n <lib-general-information-line\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-line>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'SMS'\">\r\n <lib-general-information-sms\r\n [isTouchedForm]=\"isTouchedSMSForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-sms>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"form.get('medium').value === 'EMAIL'\">\r\n <lib-general-information-email\r\n [isTouchedForm]=\"isTouchedEmailForm\"\r\n [isReadOnlyMode]=\"isReadOnlyMode\"\r\n (updateGeneralInformationForm)=\"updateGeneralInformationForm($event)\"\r\n ></lib-general-information-email>\r\n </ng-container>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <div class=\"campaign-info-child pl-20px\">\r\n <h3 class=\"font-22px font-PoppinsBold\">Broadcast Content</h3>\r\n\r\n <div\r\n [ngClass]=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n ? 'campaign-border-preview'\r\n : 'campaign-preview'\r\n \"\r\n >\r\n <section\r\n *ngIf=\"\r\n form.get('medium').value === 'SMS' || form.get('medium').value === 'EMAIL'\r\n \"\r\n >\r\n <p\r\n *ngIf=\"getBody\"\r\n class=\"body my-2\"\r\n style=\"max-width: 500px; word-wrap: break-word\"\r\n [innerHTML]=\"getBody\"\r\n ></p>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'WA'\" class=\"campaign-preview__wa\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <section *ngIf=\"getBody || getMedia || displayFile\">\r\n <div\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplate?.buttons?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"\r\n (getMedia === 'IMAGE' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'image') &&\r\n displayFile\r\n \"\r\n style=\"max-width: 100%\"\r\n alt=\"image\"\r\n [src]=\"displayFile\"\r\n />\r\n\r\n <video\r\n *ngIf=\"\r\n (getMedia === 'VIDEO' ||\r\n getTemplate?.header?.type?.toLowerCase() === 'video') &&\r\n displayFile\r\n \"\r\n id=\"video\"\r\n style=\"width: 100%\"\r\n [src]=\"displayFile\"\r\n controls\r\n ></video>\r\n\r\n <div *ngIf=\"getMedia === 'DOCUMENT'\" style=\"display: flex\">\r\n <img\r\n style=\"width: 13px; height: 18px\"\r\n alt=\"document\"\r\n src=\"../../../../../assets/images/icon-file.png\"\r\n />\r\n\r\n <span style=\"margin-left: 10px\">Document</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getMedia === 'LOCATION'\">\r\n <agm-map\r\n style=\"width: 100%; height: 200px\"\r\n [disableDefaultUI]=\"true\"\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [zoom]=\"maps.zoom\"\r\n >\r\n <agm-marker\r\n [latitude]=\"maps.latitude\"\r\n [longitude]=\"maps.longitude\"\r\n [markerDraggable]=\"false\"\r\n ></agm-marker>\r\n </agm-map>\r\n <a\r\n [href]=\"\r\n 'https://www.google.com/maps/search/?api=1&query=' +\r\n maps.latitude +\r\n ',' +\r\n maps.longitude\r\n \"\r\n >\r\n https://www.google.com/maps/search/?api=1&query={{\r\n maps.latitude\r\n }},{{ maps.longitude }}\r\n </a>\r\n </ng-container>\r\n\r\n <p *ngIf=\"getBody\" class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n\r\n <p\r\n *ngIf=\"getTemplate?.footer\"\r\n class=\"mb-2\"\r\n style=\"color: rgb(160, 160, 160)\"\r\n >\r\n {{ getTemplate.footer }}\r\n </p>\r\n </div>\r\n </section>\r\n <section *ngIf=\"getTemplate?.buttons?.length > 0\">\r\n <div\r\n *ngFor=\"let button of getTemplateButton\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text || button?.type }}\r\n </p>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"getTemplate?.buttons?.length > 3\"\r\n class=\"params-btn pb-0 pointer\"\r\n (click)=\"isShowMore = !isShowMore\"\r\n >\r\n <p class=\"mb-0\"><mat-icon>list</mat-icon> See all options</p>\r\n </div>\r\n </section>\r\n </div>\r\n </section>\r\n\r\n <section *ngIf=\"form.get('medium').value === 'LINE'\" class=\"campaign-preview__line\">\r\n <div class=\"header-preview\">\r\n <div class=\"heading\">\r\n {{ getHeader }}\r\n </div>\r\n </div>\r\n <div class=\"body-preview\">\r\n <!-- Template Line Text -->\r\n <section *ngIf=\"isText || !isJSON\" class=\"chat\">\r\n <p class=\"body my-2\" [innerHTML]=\"getBody\"></p>\r\n </section>\r\n\r\n <!-- Template Line Button | Confirmation -->\r\n <section\r\n *ngIf=\"['buttons', 'confirm'].includes(getTemplateLine?.type)\"\r\n class=\"chat\"\r\n [ngClass]=\"{ 'no-bottom-border': getTemplateLine?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"getTemplateLine?.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"getTemplateLine?.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"getTemplateLine?.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"getTemplateLine?.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"getTemplateLine?.text\"\r\n ></p>\r\n </section>\r\n\r\n <!-- Template Line Carousel -->\r\n <div\r\n *ngIf=\"['carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <section\r\n class=\"chat w-100\"\r\n [ngClass]=\"{ 'no-bottom-border': column?.actions?.length > 0 }\"\r\n >\r\n <img\r\n *ngIf=\"column.thumbnailImageUrl\"\r\n style=\"max-width: 100%\"\r\n class=\"mb-1\"\r\n [src]=\"column.thumbnailImageUrl\"\r\n />\r\n\r\n <p\r\n *ngIf=\"column.title\"\r\n class=\"font-PoppinsBold mb-1\"\r\n [innerHTML]=\"column.title\"\r\n ></p>\r\n\r\n <p\r\n *ngIf=\"column.text\"\r\n class=\"mb-0\"\r\n [innerHTML]=\"column.text\"\r\n ></p>\r\n </section>\r\n <section *ngIf=\"column?.actions?.length > 0\">\r\n <div\r\n *ngFor=\"let button of column?.actions\"\r\n class=\"params-btn mw-100 pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n\r\n <!-- Template Line Image Carousel -->\r\n <div\r\n *ngIf=\"['image_carousel'].includes(getTemplateLine?.type)\"\r\n class=\"d-flex gap-2 overflow-auto\"\r\n >\r\n <div *ngFor=\"let column of getTemplateLine?.columns\">\r\n <div class=\"image-container\">\r\n <img [src]=\"column.imageUrl\" alt=\"image\" />\r\n\r\n <div class=\"d-flex justify-content-center\">\r\n <p class=\"font-13px overlay-text\">\r\n {{ column.action.label }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Button Line -->\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type !== 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n <section\r\n *ngIf=\"\r\n getTemplateLine?.type === 'confirm' &&\r\n getTemplateLine?.actions?.length > 0\r\n \"\r\n class=\"d-flex justify-content-around mw-70 bg-white\"\r\n >\r\n <div\r\n *ngFor=\"let button of getTemplateLine?.actions\"\r\n class=\"params-btn flex pb-0 pointer\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ button?.text }}\r\n </p>\r\n </div>\r\n </section>\r\n <!-- ./ Button Line -->\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"d-flex\" style=\"flex-direction: column\">\r\n <span\r\n *ngIf=\"form.get('medium').value === 'SMS'\"\r\n style=\"text-align: right; width: 100%\"\r\n >\r\n {{ twilioResultCounter.fulltext }}\r\n </span>\r\n <span\r\n style=\"text-align: right; width: 100%; color: red\"\r\n *ngIf=\"twilioResultCounter.segments > 10 && form.get('medium').value === 'SMS'\"\r\n >\r\n Maximum Segment is 10\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ng-template #isSpinner>\r\n <div class=\"text-center my-auto\">\r\n <img src=\"../../../../../assets/images/spinner.svg\" />\r\n </div>\r\n</ng-template>\r\n",
|
|
5025
|
-
styles: [".campaign-info{display:flex}.campaign-info-child{flex:1}.campaign-info .asterix--after:after{content:\"*\";color:red}.campaign-info .pl-20px{padding-left:20px}.campaign-info .mw-70{max-width:70%}.campaign-info .campaign-preview{width:75%}.campaign-info .campaign-preview .header-preview{padding:15px;min-height:60px;border-radius:10px 10px 0 0}.campaign-info .campaign-preview .header-preview .heading{width:100%;color:#e0e0e0;margin-left:5px;font-size:20px}.campaign-info .campaign-preview .body-preview{padding:15px;min-height:470px}.campaign-info .campaign-preview .body-preview .chat{width:70%;padding:11px;font-size:14px;line-height:22px;color:#494949;border-radius:8px;background:#fff;overflow-wrap:break-word;white-space:pre-line;box-shadow:12px 12px 20px rgba(44,59,113,.04)}.campaign-info .campaign-preview .body-preview .chat .body{max-height:400px;overflow-y:auto;overscroll-behavior-y:contain}.campaign-info .campaign-preview .body-preview .chat.no-bottom-border{border-bottom-left-radius:0;border-bottom-right-radius:0}.campaign-info .campaign-preview__wa .header-preview{background:#065f54}.campaign-info .campaign-preview__wa .body-preview{border-bottom-left-radius:8px;border-bottom-right-radius:8px;background-image:url(
|
|
5123
|
+
styles: [".campaign-info{display:flex}.campaign-info-child{flex:1}.campaign-info .asterix--after:after{content:\"*\";color:red}.campaign-info .pl-20px{padding-left:20px}.campaign-info .mw-70{max-width:70%}.campaign-info .campaign-preview{width:75%}.campaign-info .campaign-preview .header-preview{padding:15px;min-height:60px;border-radius:10px 10px 0 0}.campaign-info .campaign-preview .header-preview .heading{width:100%;color:#e0e0e0;margin-left:5px;font-size:20px}.campaign-info .campaign-preview .body-preview{padding:15px;min-height:470px}.campaign-info .campaign-preview .body-preview .chat{width:70%;padding:11px;font-size:14px;line-height:22px;color:#494949;border-radius:8px;background:#fff;overflow-wrap:break-word;white-space:pre-line;box-shadow:12px 12px 20px rgba(44,59,113,.04)}.campaign-info .campaign-preview .body-preview .chat .body{max-height:400px;overflow-y:auto;overscroll-behavior-y:contain}.campaign-info .campaign-preview .body-preview .chat.no-bottom-border{border-bottom-left-radius:0;border-bottom-right-radius:0}.campaign-info .campaign-preview__wa .header-preview{background:#065f54}.campaign-info .campaign-preview__wa .body-preview{border-bottom-left-radius:8px;border-bottom-right-radius:8px;background-image:url(../../../../assets/svg/whatsapp-bg.svg);background-position:center;background-repeat:no-repeat;background-size:cover}.campaign-info .campaign-preview__wa .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__wa .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .header-preview{background:#273046}.campaign-info .campaign-preview__line .body-preview{background:#7692bf;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.campaign-info .campaign-preview__line .body-preview .params-btn{width:auto;max-width:70%;color:#34b7f1;background:#fff;box-shadow:12px 12px 20px rgba(44,59,113,.04);border-radius:0;font-size:16px;line-height:43px;padding:0;text-align:center;font-family:Poppins;overflow-wrap:break-word}.campaign-info .campaign-preview__line .body-preview .params-btn b{font-family:PoppinsBold}.campaign-info .campaign-preview__line .body-preview .image-container{position:relative;width:200px;height:200px}.campaign-info .campaign-preview__line .body-preview .image-container img{display:block;width:100%;height:100%}.campaign-info .campaign-preview__line .body-preview .image-container .overlay-text{top:170px;position:absolute;padding:2px 5px;color:#fff;background-color:rgba(49,57,60,.62);border-radius:10px}.campaign-info .campaign-border-preview{width:100%;min-height:100px;padding:32px;border:1px solid #e2e2e2;border-radius:8px}"]
|
|
5026
5124
|
})
|
|
5027
5125
|
], GeneralInformationComponent);
|
|
5028
5126
|
|
|
@@ -5063,20 +5161,12 @@ let NewNumberBasesComponent = class NewNumberBasesComponent {
|
|
|
5063
5161
|
this.table = new TableModel();
|
|
5064
5162
|
this.table.labels = [
|
|
5065
5163
|
'select',
|
|
5066
|
-
'Name',
|
|
5067
5164
|
'Category',
|
|
5068
5165
|
'No. Of Customer',
|
|
5069
5166
|
'Created Date',
|
|
5070
5167
|
'Updated Date',
|
|
5071
5168
|
];
|
|
5072
|
-
this.table.columns = [
|
|
5073
|
-
'select',
|
|
5074
|
-
'name',
|
|
5075
|
-
'category',
|
|
5076
|
-
'totalMembers',
|
|
5077
|
-
'createdDate',
|
|
5078
|
-
'updatedDate',
|
|
5079
|
-
];
|
|
5169
|
+
this.table.columns = ['select', 'name', 'totalMembers', 'createdDate', 'updatedDate'];
|
|
5080
5170
|
}
|
|
5081
5171
|
get getCampaignStorage() {
|
|
5082
5172
|
return localStorage.getItem('telin.campaign')
|
|
@@ -5084,15 +5174,16 @@ let NewNumberBasesComponent = class NewNumberBasesComponent {
|
|
|
5084
5174
|
: {};
|
|
5085
5175
|
}
|
|
5086
5176
|
initEdit() {
|
|
5087
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
5177
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
5088
5178
|
if (Object.entries(this.getCampaignStorage).length === 0)
|
|
5089
5179
|
return;
|
|
5090
|
-
|
|
5180
|
+
const genInfoForm = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
|
|
5181
|
+
this.isShowUploadCSV = ((_c = genInfoForm) === null || _c === void 0 ? void 0 : _c.isUpload) || ((_d = genInfoForm) === null || _d === void 0 ? void 0 : _d.isDownloadVariableXLS);
|
|
5091
5182
|
this.fileSelected = {
|
|
5092
|
-
name: (
|
|
5093
|
-
targetURL: (
|
|
5183
|
+
name: (_f = (_e = this.getCampaignStorage) === null || _e === void 0 ? void 0 : _e.targetAudienceFile) === null || _f === void 0 ? void 0 : _f.name,
|
|
5184
|
+
targetURL: (_h = (_g = this.getCampaignStorage) === null || _g === void 0 ? void 0 : _g.targetAudienceFile) === null || _h === void 0 ? void 0 : _h.targetURL,
|
|
5094
5185
|
};
|
|
5095
|
-
(
|
|
5186
|
+
(_j = this.table.dataSource.data) === null || _j === void 0 ? void 0 : _j.forEach((each) => {
|
|
5096
5187
|
var _a, _b;
|
|
5097
5188
|
if ((_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.targetAudience) === null || _b === void 0 ? void 0 : _b.includes(each.id))
|
|
5098
5189
|
this.onChecked(true, each);
|
|
@@ -5117,29 +5208,14 @@ let NewNumberBasesComponent = class NewNumberBasesComponent {
|
|
|
5117
5208
|
.executeApiRequest(parameterList, '/admin/category', 'GET')
|
|
5118
5209
|
.subscribe((resp) => {
|
|
5119
5210
|
var _a;
|
|
5120
|
-
const customerSegments = JSON.parse(localStorage.getItem('csegment') || '[]');
|
|
5121
|
-
const getDate = (item) => new Date(item.updatedDate || item.createdDate).getTime();
|
|
5122
|
-
const data = (((_a = resp) === null || _a === void 0 ? void 0 : _a.data) || []).map((item) => (Object.assign(Object.assign({}, item), { category: 'Customer Group' })));
|
|
5123
|
-
if (this.categoryParam.pageNo === 1) {
|
|
5124
|
-
customerSegments
|
|
5125
|
-
.sort((a, b) => getDate(b) - getDate(a))
|
|
5126
|
-
.forEach((segment) => {
|
|
5127
|
-
const index = data.findIndex((group) => getDate(group) < getDate(segment));
|
|
5128
|
-
if (index === -1) {
|
|
5129
|
-
return;
|
|
5130
|
-
}
|
|
5131
|
-
const groupId = data[index].id;
|
|
5132
|
-
data[index] = Object.assign(Object.assign({}, segment), { id: groupId, totalMembers: segment.customerCount, updatedDate: segment.updatedDate || segment.createdDate, category: 'Customer Segment' });
|
|
5133
|
-
});
|
|
5134
|
-
}
|
|
5135
5211
|
if (this.isReadOnlyMode) {
|
|
5136
|
-
this.table.dataSource.data = data.filter((each) => { var _a, _b; return (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.targetAudience) === null || _b === void 0 ? void 0 : _b.includes(each.id); });
|
|
5212
|
+
this.table.dataSource.data = (_a = resp.data) === null || _a === void 0 ? void 0 : _a.filter((each) => { var _a, _b; return (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.targetAudience) === null || _b === void 0 ? void 0 : _b.includes(each.id); });
|
|
5137
5213
|
this.categorySelected = this.table.dataSource.data;
|
|
5138
5214
|
this.isLoading = false;
|
|
5139
5215
|
this.initEdit();
|
|
5140
5216
|
return;
|
|
5141
5217
|
}
|
|
5142
|
-
this.table.dataSource.data = data;
|
|
5218
|
+
this.table.dataSource.data = resp.data;
|
|
5143
5219
|
this.table.setNextPage(resp.haveNext);
|
|
5144
5220
|
this.isLoading = false;
|
|
5145
5221
|
this.initEdit();
|
|
@@ -5255,13 +5331,31 @@ let NewNumberBasesComponent = class NewNumberBasesComponent {
|
|
|
5255
5331
|
return found ? true : false;
|
|
5256
5332
|
}
|
|
5257
5333
|
onDownloadSampleService() {
|
|
5258
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
5334
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
5335
|
+
const genInfoForm = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
|
|
5336
|
+
const isNeedSave = (_c = genInfoForm) === null || _c === void 0 ? void 0 : _c.isNeedSave;
|
|
5259
5337
|
const parameterList = [
|
|
5260
|
-
this.initParam('platform', (
|
|
5261
|
-
this.initParam('templateName', (_h = (_g = (_f = (_e = this.getCampaignStorage) === null || _e === void 0 ? void 0 : _e.generalInformation) === null || _f === void 0 ? void 0 : _f.form) === null || _g === void 0 ? void 0 : _g.template) === null || _h === void 0 ? void 0 : _h.name, 'string'),
|
|
5262
|
-
this.initParam('templateLang', (_m = (_l = (_k = (_j = this.getCampaignStorage) === null || _j === void 0 ? void 0 : _j.generalInformation) === null || _k === void 0 ? void 0 : _k.form) === null || _l === void 0 ? void 0 : _l.template) === null || _m === void 0 ? void 0 : _m.lang, 'string'),
|
|
5263
|
-
this.initParam('category', (_p = (_o = this.categorySelected) === null || _o === void 0 ? void 0 : _o.map((t) => t.id).join(), (_p !== null && _p !== void 0 ? _p : [])), 'string'),
|
|
5338
|
+
this.initParam('platform', ((_e = (_d = genInfoForm) === null || _d === void 0 ? void 0 : _d.template) === null || _e === void 0 ? void 0 : _e.platform) || 'WA', 'string'),
|
|
5264
5339
|
];
|
|
5340
|
+
if (isNeedSave) {
|
|
5341
|
+
// SKENARIO 1: USE EXISTING / TEMPLATE SUDAH DISAVE
|
|
5342
|
+
parameterList.push(this.initParam('templateName', (_g = (_f = genInfoForm) === null || _f === void 0 ? void 0 : _f.template) === null || _g === void 0 ? void 0 : _g.name, 'string'), this.initParam('templateLang', (_j = (_h = genInfoForm) === null || _h === void 0 ? void 0 : _h.template) === null || _j === void 0 ? void 0 : _j.lang, 'string'), this.initParam('category', (_l = (_k = this.categorySelected) === null || _k === void 0 ? void 0 : _k.map((t) => t.id).join(), (_l !== null && _l !== void 0 ? _l : '')), 'string'));
|
|
5343
|
+
}
|
|
5344
|
+
else {
|
|
5345
|
+
// SKENARIO 2: CREATE NEW (Belum disave, butuh text & examples)
|
|
5346
|
+
const safeBodyText = encodeURIComponent(((_m = genInfoForm) === null || _m === void 0 ? void 0 : _m.text) || '');
|
|
5347
|
+
parameterList.push(this.initParam('bodyText', safeBodyText, 'string'));
|
|
5348
|
+
const variables = (_o = genInfoForm) === null || _o === void 0 ? void 0 : _o.variables;
|
|
5349
|
+
if (variables && Array.isArray(variables) && variables.length > 0) {
|
|
5350
|
+
const bodyExamplesString = variables.map((v) => v.paramName).join(',');
|
|
5351
|
+
const safeBodyExamples = encodeURIComponent(bodyExamplesString);
|
|
5352
|
+
parameterList.push(this.initParam('bodyExamples', safeBodyExamples, 'string'));
|
|
5353
|
+
}
|
|
5354
|
+
if ((_r = (_q = (_p = genInfoForm) === null || _p === void 0 ? void 0 : _p.template) === null || _q === void 0 ? void 0 : _q.header) === null || _r === void 0 ? void 0 : _r.text) {
|
|
5355
|
+
const safeHeaderText = encodeURIComponent(genInfoForm.template.header.text);
|
|
5356
|
+
parameterList.push(this.initParam('headerText', safeHeaderText, 'string'));
|
|
5357
|
+
}
|
|
5358
|
+
}
|
|
5265
5359
|
const subs = this.apiAdapterService
|
|
5266
5360
|
.executeApiRequest(parameterList, '/message/bulkupload/template', 'GET', true)
|
|
5267
5361
|
.subscribe((resp) => {
|
|
@@ -5356,7 +5450,7 @@ __decorate([
|
|
|
5356
5450
|
NewNumberBasesComponent = __decorate([
|
|
5357
5451
|
Component({
|
|
5358
5452
|
selector: 'lib-new-number-bases',
|
|
5359
|
-
template: "<h3 class=\"font-20px font-PoppinsBold asterix--after mb-2\"
|
|
5453
|
+
template: "<h3 class=\"font-20px font-PoppinsBold asterix--after mb-2\"\r\n\t[ngClass]=\"{ 'mb-3': !isReadOnlyMode }\">\r\n\tTarget Audience\r\n</h3>\r\n<div *ngIf=\"!isReadOnlyMode\"\r\n\tclass=\"d-flex justify-content-between\">\r\n\t<p>Select your target audience (category)</p>\r\n\t<div *ngIf=\"isShowUploadCSV\">\r\n\t\t<button mat-stroked-button\r\n\t\t\tcolor=\"primary-telin\"\r\n\t\t\tclass=\"telin-font-color mr-2\"\r\n\t\t\t(click)=\"onDownloadSampleService()\">\r\n\t\t\tDownload Template\r\n\t\t</button>\r\n\r\n\t\t<button mat-flat-button\r\n\t\t\tcolor=\"primary-telin-blue2\"\r\n\t\t\t[disabled]=\"isUpload\"\r\n\t\t\t(click)=\"filePicker.click()\">\r\n\t\t\tUpload XLSX\r\n\t\t</button>\r\n\r\n\t\t<input #filePicker\r\n\t\t\thidden\r\n\t\t\ttype=\"file\"\r\n\t\t\t[accept]=\"extFileAccepted.join()\"\r\n\t\t\t(change)=\"onFileSelected($event)\" />\r\n\t</div>\r\n</div>\r\n\r\n<p *ngIf=\"!isReadOnlyMode && (getCampaignStorage?.targetAudienceFile?.name ||\r\ngetCampaignStorage?.targetAudienceFile?.targetURL)\"\r\n\tclass=\"text-right my-2\">\r\n\t<span class=\"fw-bold\">Filename:</span> {{ getCampaignStorage?.targetAudienceFile?.name ||\r\n\tgetCampaignStorage?.targetAudienceFile?.targetURL }}\r\n</p>\r\n\r\n<div *ngIf=\"!isReadOnlyMode || !fileSelected?.name\"\r\n\tclass=\"row align-items-center mb-3\">\r\n\t<div class=\"col-md-4 col-12\">\r\n\t\t<lib-search *ngIf=\"!isReadOnlyMode\"\r\n\t\t\t[placeholder]=\"'Search'\"\r\n\t\t\t(searchRes)=\"updateSearch($event)\"></lib-search>\r\n\t</div>\r\n\t<div class=\"col-md-8 col-12\">\r\n\t\t<p class=\"text-right mb-0\">\r\n\t\t\tCategory Selected:\r\n\t\t\t<span class=\"font-bold\">\r\n\t\t\t\t{{ categorySelected?.length || 0 }}\r\n\t\t\t</span>\r\n\t\t</p>\r\n\t</div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"!isReadOnlyMode || !fileSelected?.name; else isShowFile\">\r\n\t<table *ngIf=\"!isLoading; else isSpinner\"\r\n\t\tmat-table\r\n\t\tmatSort\r\n\t\tmatSortDisableClear\r\n\t\tclass=\"table w-100 mb-2\"\r\n\t\t[dataSource]=\"table.dataSource\"\r\n\t\t(matSortChange)=\"sort()\">\r\n\t\t<ng-container matColumnDef=\"select\">\r\n\t\t\t<th *matHeaderCellDef>\r\n\t\t\t\t<ng-container *ngIf=\"!isReadOnlyMode\">\r\n\t\t\t\t\t<mat-checkbox [aria-label]=\"checkboxLabel()\"\r\n\t\t\t\t\t\t[checked]=\"selection.hasValue() && isAllSelected()\"\r\n\t\t\t\t\t\t[indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n\t\t\t\t\t\t(change)=\"masterToggle($event.checked)\">\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</th>\r\n\t\t\t<td *matCellDef=\"let row\">\r\n\t\t\t\t<ng-container *ngIf=\"!isReadOnlyMode\">\r\n\t\t\t\t\t<mat-checkbox [aria-label]=\"checkboxLabel(row)\"\r\n\t\t\t\t\t\t[checked]=\"isChecked(row)\"\r\n\t\t\t\t\t\t(change)=\"onChecked($event.checked, row)\">\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container *ngFor=\"let index of [1, 2, 3, 4]\"\r\n\t\t\t[matColumnDef]=\"table.columns[index]\">\r\n\t\t\t<th *matHeaderCellDef\r\n\t\t\t\t[mat-sort-header]=\"table.columns[index]\">\r\n\t\t\t\t{{ table.labels[index] }}\r\n\t\t\t</th>\r\n\r\n\t\t\t<td *matCellDef=\"let row\">\r\n\t\t\t\t<ng-container *ngIf=\"[1, 2].includes(index)\">\r\n\t\t\t\t\t{{ row[table.columns[index]] }}\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<ng-container *ngIf=\"[3, 4].includes(index)\">\r\n\t\t\t\t\t{{ row[table.columns[index]] | date : ' d MMM y' }}\r\n\t\t\t\t</ng-container>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container matColumnDef=\"no-content\">\r\n\t\t\t<th class=\"text-center\"\r\n\t\t\t\t*matHeaderCellDef\r\n\t\t\t\t[colSpan]=\"table.columns.length\">\r\n\t\t\t\tData Not Available\r\n\t\t\t</th>\r\n\t\t</ng-container>\r\n\r\n\t\t<tr mat-header-row\r\n\t\t\t*matHeaderRowDef=\"table.columns\"></tr>\r\n\r\n\t\t<tr mat-header-row\r\n\t\t\tclass=\"no-content\"\r\n\t\t\t*matHeaderRowDef=\"['no-content']\"\r\n\t\t\t[style.display]=\"table.dataSource?.data?.length === 0 ? 'table-row' : 'none'\"></tr>\r\n\r\n\t\t<tr mat-row\r\n\t\t\t*matRowDef=\"let row; columns: table.columns\"></tr>\r\n\t</table>\r\n\r\n\t<mat-paginator *ngIf=\"!isReadOnlyMode\"\r\n\t\tclass=\"campaign-paginator\"\r\n\t\t[length]=\"table.totalData\"\r\n\t\t[pageSize]=\"table.pageSize\"\r\n\t\t[pageIndex]=\"table.getPageIndex()\"\r\n\t\t[pageSizeOptions]=\"[10, 25, 50, 100, 250]\"\r\n\t\t(page)=\"updatePage($event)\"></mat-paginator>\r\n\r\n\t<ng-template #isSpinner>\r\n\t\t<div class=\"text-center my-auto\">\r\n\t\t\t<img src=\"../../../../../assets/images/spinner.svg\" />\r\n\t\t</div>\r\n\t</ng-template>\r\n</ng-container>\r\n\r\n<ng-template #isShowFile>\r\n\t<p class=\"font-PoppinsBold font-14px\">\r\n\t\tFile: <a [href]=\"fileSelected?.targetURL\"\r\n\t\t\ttarget=\"_blank\">{{ fileSelected?.name }}</a>\r\n\t</p>\r\n</ng-template>\r\n",
|
|
5360
5454
|
styles: ["::ng-deep .mat-paginator.campaign-paginator .mat-paginator-container{align-items:normal}::ng-deep .mat-paginator.campaign-paginator .mat-tab-body{background-color:#fff}::ng-deep .mat-paginator.campaign-paginator .mat-form-field-underline{bottom:0}"]
|
|
5361
5455
|
})
|
|
5362
5456
|
], NewNumberBasesComponent);
|
|
@@ -5617,5 +5711,5 @@ ConfirmationModule = __decorate([
|
|
|
5617
5711
|
* Generated bundle index. Do not edit.
|
|
5618
5712
|
*/
|
|
5619
5713
|
|
|
5620
|
-
export { AdlCampaignManagementLibraryInternalComponent, AdlCampaignManagementLibraryInternalModule, CampaignIndexModule, CampaignManagementComponent, CampaignManagementModule, ConfirmationComponent, ConfirmationModule, DashboardModule, SearchModule, WizardComponent as ɵa, NewCampaignComponent as ɵb, GeneralInformationComponent as ɵc, SchedulerComponent as ɵd, SummaryComponent as ɵe, NewNumberBasesComponent as ɵf, GeneralInformationLineComponent as ɵg, GeneralInformationWAComponent as ɵh, GeneralInformationSMSComponent as ɵi, GeneralInformationEmailComponent as ɵj, PendingApprovalDialogViewComponent as ɵk, FailoverMechanismComponent as ɵl,
|
|
5714
|
+
export { AdlCampaignManagementLibraryInternalComponent, AdlCampaignManagementLibraryInternalModule, CampaignIndexComponent, CampaignIndexModule, CampaignManagementComponent, CampaignManagementModule, ConfirmationComponent, ConfirmationModule, DashboardComponent, DashboardModule, MatSelectInfiniteScrollDirective, SearchComponent, SearchModule, SummaryComponent, WizardComponent as ɵa, NewCampaignComponent as ɵb, GeneralInformationComponent as ɵc, SchedulerComponent as ɵd, SummaryComponent as ɵe, NewNumberBasesComponent as ɵf, GeneralInformationLineComponent as ɵg, GeneralInformationWAComponent as ɵh, GeneralInformationSMSComponent as ɵi, GeneralInformationEmailComponent as ɵj, PendingApprovalDialogViewComponent as ɵk, FailoverMechanismComponent as ɵl, ApiAdapterServiceService as ɵm, ViewingListOfCampaignTableComponent as ɵn, FilterInListOfCampaignComponent as ɵo, ApiAdapterServiceService as ɵp, MatSelectInfiniteScrollDirective as ɵq, InputNumericModule as ɵr, InputNumericComponent as ɵs, CustomPaginator as ɵt, ConfirmationComponent as ɵu, ConfirmationModel as ɵv, SharedServicesService as ɵw };
|
|
5621
5715
|
//# sourceMappingURL=adlfe-campaign-management-library.js.map
|