@adlfe/campaign-management-library 2.15.2 → 2.15.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@adlfe/campaign-management-library/lib/core/enums/main-area.enum.ts","ng://@adlfe/campaign-management-library/lib/adl-campaign-management-library-internal.component.ts","ng://@adlfe/campaign-management-library/lib/global/search/search/search.component.ts","ng://@adlfe/campaign-management-library/lib/global/search/search.module.ts","ng://@adlfe/campaign-management-library/lib/core/enums/constant.enum.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/campaign-management.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/components/input-numeric/input-numeric.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/components/input-numeric/input-numeric.module.ts","ng://@adlfe/campaign-management-library/lib/core/directives/mat-select-infinite-scroll.ts","ng://@adlfe/campaign-management-library/lib/core/models/base-option.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/Package.ts","ng://@adlfe/campaign-management-library/lib/core/models/util/http-body-req/http-body-req-pagination.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/util/http-body-req/http-body-req-pagination-global-var.model.ts","ng://@adlfe/campaign-management-library/environments/environment.ts","ng://@adlfe/campaign-management-library/lib/core/models/billing-param-req.component.ts","ng://@adlfe/campaign-management-library/lib/core/models/country.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/create-package-param.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/http-body-resp.model.ts","ng://@adlfe/campaign-management-library/lib/core/services/api-adapter-service.service.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/campaign-table-config.const.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/table.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/campaigns-list.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/campaign-index.component.ts","ng://@adlfe/campaign-management-library/lib/core/const/constants.const.ts","ng://@adlfe/campaign-management-library/lib/core/const/failover.const.ts","ng://@adlfe/campaign-management-library/lib/core/const/validation-message.const.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/util/enums.ts","ng://@adlfe/campaign-management-library/lib/core/util/custom-paginator.ts","ng://@adlfe/campaign-management-library/lib/core/util/enum-to-option-generator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/component/filter-in-list-of-campaign/filter-in-list-of-campaign.component.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/shared/shared-services.service.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/shared/model/confirmation.model.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/confirmation/confirmation.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/dialog/pending-approval-dialog-view/pending-approval-dialog-view.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/component/viewing-list-of-campaign-table/viewing-list-of-campaign-table.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/campaign-index.module.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/dashboard/dashboard.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/dashboard/dashboard.module.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/failover-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/general-information-wa-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/scheduler-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/new-campaign.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-email/general-information-email.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-line/general-information-line.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-sms/general-information-sms.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/index.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/max.validator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/min.validator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/failover-mechanism/failover-mechanism.component.ts","ng://@adlfe/campaign-management-library/lib/core/const/form-validators.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/general-information/general-information.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.ts","ng://@adlfe/campaign-management-library/lib/core/util/download-blob-file.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/scheduler/scheduler.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/summary/summary.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/wizard/wizard.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/campaign-management.module.ts","ng://@adlfe/campaign-management-library/lib/adl-campaign-management-library-internal.module.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/confirmation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","ar","error","__spread","concat","MainArea","AdlCampaignManagementLibraryInternalComponent","Component","selector","template","SearchComponent","debounceSubject","Subject","searchRes","EventEmitter","ngOnInit","_this","form","FormControl","_a","currentValue","pipe","debounceTime","subscribe","emit","toLowerCase","searchResult","event","clearInput","setValue","Output","Input","SearchModule","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","MatButtonModule","MatIconModule","exports","PastTimeEnum","StatusCampaignEnum","ProductCategoryEnum","CampaignManagementComponent","currentView","CampaignIndex","currentViews","onChangeMainArea","area","InputNumericComponent","controlContainer","allowDecimal","handleInput","numeric","replace","parts","split","slice","join","disallowLeadingZero","startsWith","finalValue","trimLeadingZeros","includes","formControl","patchValue","emitEvent","setBaseStateInitialization","formControlName","formGroup","control","get","touched","_b","valid","invalid","errors","writeValue","_value","registerOnChange","fn","_onBaseChange","registerOnTouched","_onBaseTouched","setDisabledState","isDisabled","_isDisabled","ControlContainer","ContentChild","InputNumericComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","InputNumericModule","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","ngAfterViewInit","openedChange","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","ngOnDestroy","complete","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","options","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","MatSelect","NgZone","Directive","BaseOptionModel","PackageReqModel","clone","source","country","recomended","type","setupFeeRateCard","setupFee","ovrUsgConversationRateCard","costPerCustomer","costPerBusiness","ovrUsgNotficationRateCard","ovrUsgConversationCost","ovrUsgNotficationCost","customPackage","currency","name","monthlyRental","conversationMsg","businessMsg","contacts","isMultipleFlow","tps","multichatLiveAgent","multichatLiveSupervisor","numberOfFlow","waOfficialAccount","dashboardToSendMessage","reportAdminPanel","trainingSupport","isMultiple","checklistWa","checklistLine","checklistTele","specifyPackage","customDevelopment","oneUsageCostConversation","signupOrSetup","checklistAdm","checklistUser","checklistClient","checklistChatAgentAdmin","checklistChatAgentUser","HttpBodyReqPaginationModel","HttpBodyReqPaginationGlobalVarModel","pageSize","pageNo","convert","origin","_super","BillingParamReqModel","filter","platform","clientId","String","CountryModel","dto","category","code","values","param1","param2","ìcon","CreatePackageReqModel","channels","countryCode","maxAgent","maxContact","maxFlow","maxSupervisor","monthlyConversation","monthlyNotification","monthlyRentalRateCard","ovrUsgConversation","ovrUsgNotification","ovrUsgNotificationCost","ovrUsgNotificationRateCard","reports","roles","sendMsgDashboard","training","waOfficialAcc","HttpBodyRespModel","status","errorCode","message","data","totalRecord","location","environment","ApiAdapterServiceService","httpClient","queryCount","executeApiRequest","parameterList","path","httpVerb","isFile","bodyData","parameter","url","formData","FormData","rt","in","forEach","requestType","find","required","window","alert","setQuery","setFormData","undefined","appRequest","_c","withoutKeyData","headers","HttpHeaders","set","localStorage","getItem","request","responseType","catchError","err","ErrorEvent","of","title","detail","statusText","toString","meta","uploadFileToS3","s3Url","file","put","Content-Type","append","HttpClient","Injectable","providedIn","CampaignListTableLabelConst","CampaignListTableColumnConst","TableModel","CampaignsListModel","campaignID","businessName","campaignName","medium","numberCount","deilveredCount","seenCount","responseCount","estimatedCost","actualCost","startDate","endDate","id","columns","dataSource","MatTableDataSource","labels","page","totalData","getNumber","index","limit","getPageIndex","isEmpty","setPage","setPageSize","size","resetPage","setNextPage","isNext","diffData","CampaignIndexComponent","datePipe","apiAdapterService","subscribers","campaignParam","initTable","campaignCountService","getCampaignList","removeItem","table","subs","response","campaignTotal","searchValue","initParam","filterValue","templateName","_d","_e","_f","transform","_g","resp","haveNext","_name","_type","updatePage","updateFilter","_filter","updateSearch","addCampaign","changeCurrentView","NewCampaign","each","unsubscribe","DatePipe","PlatformOptionConst","icon","inputSvgIcon","image","MsgTypeWAOptionConst","MsgTypeEmailOptionConst","MsgTypeLineOptionConst","MediaTypeOptionConst","WidgetLiveCampaignConst","arrow","date","dateclass","CampaignPerformanceChartConfig","legend","orient","x","tooltip","dataset","xAxis","yAxis","series","color","ConversationInsightsChartConfig","trigger","smooth","itemStyle","normal","isLoadingOption","WA","SMS","LINE","EMAIL","VOICE","isHaveNextOption","pageNoOption","optionList","GeneralInformationMessageValidationConst","GeneralInformationWAMessageValidationConst","channel","from","text","media","fileName","catalogue","product","paramName","GeneralInformationEmailMessageValidationConst","GeneralInformationSMSMessageValidationConst","GeneralInformationLineMessageValidationConst","FailoverMechanismValidationConst","interval","accountId","subject","SchedulerMessageValidationConst","startTime","EnumData","CustomPaginator","itemsPerPageLabel","getRangeLabel","startIndex","Math","max","min","MatPaginatorIntl","generateEnumOption","enumObject","keys","reduce","isNaN","Number","inputOption","FilterInListOfCampaignComponent","channelOption","filteredChannelOption","businessNameOption","filteredBusinessNameOption","statusOption","filteredStatusOption","templateOption","isHaveNextTemplateOption","isLoadingTemplateOption","pageNoTemplateOption","closeDropdown","onChangeFilter","initForm","getBusinessNameOptionService","FormGroup","_h","_k","_j","_m","_l","_o","_p","res","getTemplateOptionService","isInfinite","getNextTemplateBatch","templateSelectedDisplay","attribute1","attribute2","templateSearch","businessNameSearch","option","channelSearch","statusSearch","clearDate","validateBackDate","Date","getTime","onReset","reset","getRawValue","onCancel","onApply","SharedServicesService","sendClickEvent","getEvent","asObservable","ConfirmationComponent","sharedService","paramIndex","decorator","deleteRowOn","ConfirmationModel","Inject","args","MAT_DIALOG_DATA","PendingApprovalDialogViewComponent","dialogRef","toastr","isLoading","isSubmit","isShowButton","getCampaignDetailService","getCampaignStorage","generalInformation","JSON","parse","convertUTCDateToLocalDate","getTimezoneOffset","isDirectSend","toUpperCase","isPrevTemplate","ttl","ttlSeconds","_q","_r","accountName","_s","_t","clientName","_u","accountNo","_v","wabaId","_x","_w","_z","_y","details","targetURL","_3","_2","_1","_0","_7","_6","_5","_4","document","_11","_10","_9","_8","video","_14","_13","_12","headerURL","paramHeader","_17","_16","_15","header","paramBody","_20","_19","_18","paramButton","_23","_22","_21","button","paramCarousel","_27","_26","_25","_24","carousel","map","card","bodyParams","val","buttonParams","btnGroup","payload","otpValue","_32","_31","_30","_29","_28","variables","_35","_34","_33","isUseExistingTemplate","_36","ID","_39","_38","_37","_42","_41","_40","lang","_45","_44","_43","_46","_49","_48","_47","examples","_52","_51","_50","_55","_54","_53","buttons","_58","_57","_56","ClientId","_59","ClientName","_60","isDownloadVariableXLS","_61","fileId","isUpload","_62","_63","setItem","stringify","_64","failover","_65","targetAudience","_66","targets","targetAudienceFile","_67","_68","scheduler","schedulerType","_69","scheduleType","_70","_72","_71","_74","_73","isRepeat","_75","delivery","_76","repeat","rejectCampaignService","success","onClose","approveCampaignService","close","MatDialogRef","ToastrService","ViewingListOfCampaignTableComponent","dialog","updateTable","sort","matSort","actionRow","row","action","campaignConfirmationDialog","content","method","confirmation","btnSubmit","btnCancel","open","autoFocus","backdropClass","afterClosed","campaignService","editCampaign","history","replaceState","openViewDialog","height","width","maxWidth","maxHeight","MatDialog","ViewChild","MatSort","static","CampaignIndexModule","MatDatepickerModule","MatTableModule","MatSortModule","MatPaginatorModule","MatDialogModule","MatTabsModule","MatCardModule","MatCheckboxModule","MatSelectModule","MatRadioModule","MatChipsModule","NgbPaginationModule","NgbDropdownModule","MatGridListModule","MatNativeDateModule","MatToolbarModule","MatTooltipModule","DashboardComponent","pastTime","performanceCategories","totalCmpn","deliveryRt","costDesc","convsData","widgetLiveCampaign","selectedPlatform","filterEvent","filterChart","timeUnit","Today","CurrentWeek","CurrentMonth","totalCampaignPercent","getStatictsWidgetString","totalCampaign","totalLive","totalPending","getPerformanceDetails","getConversationDetails","setPerformanceChartData","entries","categories","item","performanceChartData","setConversationChartData","j","conversationChartData","Yesterday","LastWeek","LastMonth","DashboardModule","MatAutocompleteModule","MatListModule","PickerModule","AngularEditorModule","MatButtonToggleModule","MatBadgeModule","NgxEchartsModule","FailoverReqModel","active","accounts","FailoverAccountReqModel","GeneralInformationWAReqModel","qrIndex_1","finalButtons","idx","qrParam","carouselPayload","mappedBody","mappedButtons","btn","headerUrl","mappedVariables","isNeedSave","SchedulerReqModel","tz","Intl","DateTimeFormat","resolvedOptions","timeZone","NewCampaignComponent","positionWizard","isGeneralInformationValid","isFailoverMechanismValid","isNumberBaseInformationValid","isSchedulerInformationValid","isLine","isUploadTargetAudience","onCheckTwilioCounterValid","valuesGeneral","generalInformationData","segments","segmentedMessage","SegmentedMessage","getBody","segmentsCount","encoding","encodingName","characters","numberOfUnicodeScalars","valueResult_1","entry","placeholder","pathname","initWizard","dataWizard","parent","child","failoverMechanism","failoverMechanismData","targetAudienceData","targetAudienceCount","schedulerData","onClickSaveAndNextButton","saveGeneralInformationService","saveNumberBasesService","saveFailoverMechanismService","saveSchedulerService","bodyReq","payloadValue","saveGeneralInformation","onPrevious","openConfirmationDialog","btnSubmitRed","onSubmitForApproval","GeneralInformationEmailComponent","msgTypeWAOption","accountOption","isHaveNextAccountOption","isLoadingAccountOption","isHaveTemplateParam","pageNoAccountOption","updateGeneralInformationForm","setTimeout","validationMessages","initDisable","initEdit","initValidation","getAccountOptionService","Validators","FormArray","valueChanges","isReadOnlyMode","disable","controls","clearValidators","updateValueAndValidity","setValidators","getIsTemplate","formReset","_isMediaType","updateDownloadCSV","updateTemplate","initParameter","disabled","addParamBody","getNextAccountBatch","accountSelectedDisplay","formStorage","paramValue","updateSearchAccount","isChecked","GeneralInformationLineComponent","isJSON","isText","bodyText","isJsonString","findBrackets","match","str","GeneralInformationSMSComponent","AngularValidators","compose","composeAsync","AC","actual","GeneralInformationWAComponent","mapsAPILoader","mediaTypeOption","isShowParameter","extFileAccepted","templates","isCheckUtility","categoryOption","maps","zoom","latitude","longitude","isDraggable","isDoubleClickZoom","campaignData","fileType","useXlsx","toggleExcelValidation","storageData","formValues","getControl","savedVariables","isArray","clear","getIsText","getIsMedia","getIsCatalogue","maxLength","getIsUtility","CustomValidators","controlName","currentOptions","newData","isButton","addParamHeader","getParamButton","addParamButton","getCarouselButtons","cardIndex","getCarouselBodyParams","getCarouselControls","getCarouselBtnParams","btnIndex","at","onFileSelected","files","accept","matchType","indexOf","uploadMediaService","buttonParamsArray","qrIndexLocal_1","existingPayload","fileTypeChange","isSavedTemplateMatches_1","exampleValue","savedVariable","carouselArray","isUsingUpload","dynamicValidator","savedUserInputs_1","cardIdx","cardGroup","bodyIdx","savedBodyVal","btnIdx","btnParamArray","paramIdx","savedBtnVal","savedPayloadVal","getButton","flow_id","lastControl","paramBodyArray","ctrl","updateMediaType","_mediaType","MEDIA_TYPE_LOCATION","initMaps","MEDIA_TYPE_VIDEO","MEDIA_TYPE_DOCUMENT","load","setCurrentLocation","geoCoder","google","Geocoder","autocomplete","places","Autocomplete","mapSearchRef","addListener","place","getPlace","geometry","lat","lng","navigator","geolocation","getCurrentPosition","position","coords","markerDragEnd","latLng","bCtrl","pBtnCtrl","handleChangeTemplate","updateVariableDownloadXLS","handleChangeFrom","addVariable","variableGroup","textControl","currentBody","newSequence","trim","removeVariable","removeAt","targetSequence_1","removeRegex","RegExp","numStr","num","parseInt","variablesArray","currentValidator","MapsAPILoader","FailoverMechanismComponent","setErrors","intervalTime","activeChange","validationAccount","initAccount","_channel","addAccount","getParamBody","account","deleteParamBody","_active","accounts_1","typeChange","number","accountControl","isChooseAccount","getAccount","drop","moveItemInArray","previousIndex","currentIndex","GeneralInformationComponent","sanitizer","isTouchedWAForm","isTouchedSMSForm","isTouchedEmailForm","isShowMore","twilioResultCounter","fulltext","onCheckTwilioCounter","generalInformationForm","getBodyString","setInterval","campaign","getMedia","getLocation","bypassSecurityTrustHtml","fixGeneratedHtml","getTemplate","splice","htmlString","replaceAll","DomSanitizer","NewNumberBasesComponent","isShowUploadCSV","categorySelected","selection","SelectionModel","fileSelected","categoryParam","getCategoryList","genInfoForm","onChecked","pageIndex","checkboxLabel","isSelected","isAllSelected","numSelected","selected","numRows","this_1","masterToggle","select","sum","totalMembers","deselect","onDownloadSampleService","safeBodyText","encodeURIComponent","safeHeaderText","blob","blobUrl","URL","createObjectURL","link","createElement","href","download","appendChild","dispatchEvent","MouseEvent","bubbles","cancelable","view","removeChild","downloadBlobFile","getPresignedUrlService","uploadToS3Service","fileNameS3","finalizeTargetFileService","console","campaignId","info","SchedulerComponent","minDate","isEdit","capitalizeFirstLetter","charAt","updateSchedulerType","updateTime","updateRepeat","SummaryComponent","WizardComponent","CampaignManagementModule","AgmCoreModule","forRoot","apiKey","libraries","echarts","MatDividerModule","MatProgressSpinnerModule","MatSlideToggleModule","DragDropModule","entryComponents","AdlCampaignManagementLibraryInternalModule","HttpClientModule","ToastrModule","useClass","ConfirmationModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum MainArea {\r\n 'Dashboard' = 1,\r\n 'CampaignIndex' = 2,\r\n 'CreateCampaign' = 3,\r\n 'NewCampaign' = 4,\r\n 'UpdateNumberBases' = 5,\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-adl-campaign-management-library-internal',\r\n\ttemplate: `\r\n\t\t<p>\r\n\t\t\t<lib-campaign-management></lib-campaign-management>\r\n\t\t</p>\r\n\t`,\r\n})\r\nexport class AdlCampaignManagementLibraryInternalComponent {}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tselector: 'lib-search',\r\n\ttemplateUrl: './search.component.html',\r\n\tstyleUrls: ['./search.component.scss'],\r\n})\r\nexport class SearchComponent implements OnInit {\r\n\t@Output()\r\n\tpublic searchRes: EventEmitter<string>;\r\n\r\n\tpublic form: FormControl;\r\n\r\n\tprivate debounceSubject = new Subject();\r\n\r\n\t@Input()\r\n\tpublic placeholder: string;\r\n\r\n\t@Input()\r\n\tpublic currentValue: string;\r\n\r\n\tconstructor() {\r\n\t\tthis.searchRes = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = new FormControl(this.currentValue ?? '');\r\n\r\n\t\tthis.debounceSubject.pipe(debounceTime(500)).subscribe((value: any) => {\r\n\t\t\tthis.searchRes.emit(value.toLowerCase());\r\n\t\t});\r\n\t}\r\n\r\n\tpublic searchResult(event: any) {\r\n\t\tthis.debounceSubject.next(event.target.value);\r\n\t}\r\n\r\n\tpublic clearInput(): void {\r\n\t\tthis.form.setValue('');\r\n\t\tthis.searchRes.emit(this.form.value);\r\n\t}\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SearchComponent } from './search/search.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n\r\n@NgModule({\r\n declarations: [SearchComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n ],\r\n exports: [\r\n SearchComponent\r\n ]\r\n})\r\nexport class SearchModule { }\r\n","export enum PastTimeEnum {\r\n\tToday = 'today',\r\n\tYesterday = 'yesterday',\r\n\tCurrentWeek = 'currentWeek',\r\n\tLastWeek = 'last week',\r\n\tCurrentMonth = 'currentMonth',\r\n\tLastMonth = 'last month',\r\n}\r\n\r\nexport enum StatusCampaignEnum {\r\n\tDraft = 'DRAFT',\r\n\tWaitingApproval = 'APPROVAL',\r\n\tRejected = 'REJECTED',\r\n\tScheduled = 'SCHEDULED',\r\n\tStopped = 'STOPPED',\r\n\tDeleted = 'DELETED',\r\n\tCompleted = 'COMPLETED',\r\n\tFailed = 'FAILED',\r\n\tPaused = 'PAUSED',\r\n\tProcessing = 'PROCESS',\r\n}\r\n\r\nexport enum ProductCategoryEnum {\r\n\tSingleProduct = 'product',\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MainArea } from '../core/enums/main-area.enum';\r\n\r\n@Component({\r\n\tselector: 'lib-campaign-management',\r\n\ttemplateUrl: './campaign-management.component.html',\r\n\tstyleUrls: [],\r\n})\r\nexport class CampaignManagementComponent {\r\n\tpublic currentView: MainArea = MainArea.CampaignIndex;\r\n\tpublic currentViews = MainArea;\r\n\r\n\tconstructor() {\r\n\t\t/* Init Localstorage (Local Only) */\r\n\t\t/* const data = {\r\n\t\t\t'telin.accessToken':\r\n\t\t\t\t'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRJZCI6IlBST1ZJREVSIiwiZXhwIjoxNzA4MDAyNzI4LCJpYXQiOjE3MDc5Nzg3MjgsIm5iZiI6MTcwNzk3ODcyOCwic2Vzc2lvbklkIjoiMDFIUE5RRTk5N0E3SkZLNjk1QTgyWEtTWkEiLCJ1c2VySWQiOiJhZG1pbiJ9.JWn1gRtlU6SYHa3KkP2FLhje9tvhxsD005dtxmTT5z4-lc65ekiClS5r7Wg8vamUappN_9uQINTJeZCjEU1IwYf6InUddxX6XsDWtCwixuePNq4JZMPrCUl_N4DBewPwL30RRrodoo0dxUstHLbTg9BUZ3qPq1QK6pLyd1HhKtN_jkRJ11VP2hEl6ef364ofmZvByDTKO56ah0GYzpxZ1uxvNV9PsyiuQk_drxE6x7PI7n-yH_H00zauMF6FYhTgv0SbqIRGQr-O8MKl1mbmk3efSdEr3gx6Q-bztG8p_jgOPWjVf4ol_6gfqtMOrlxTe2UJeR23fhWXCbp0ld20HpjgeIlkawoqpj8_TsjsnsPYk5epC2h5YVXrCuozWw5GnxYg7LDSx0CGQhe2JNRSy92b3hSvSahTQ0rKbmVDyvCIcRVhk2RO4Ilc-ddx4HhB8fcvbSVTAPBnI0A9NkPKSYKXA5SwiIlcPqex15BBG4zBbEX7D4JWr4925t2--WXkUIjsKvteOx0u9OhcBTbajahVepTNByNyqdKrJzdShWTBXw4mRNprL57ZZ3qFdCA6-11FcmeRkpDRqUX7kAXloFKBtcOECNjUpLNkf4FmT687-gt1R0xGIJsTatLSsc2K4Xr1TpTiuC7D3xledvsGTC07UuDgVQBb7AkN1Kch3Mg',\r\n\t\t\t'telin.clientId': 'PROVIDER',\r\n\t\t\t'telin.clientName': 'Provider',\r\n\t\t\t'telin.email': 'admin@bsp.com',\r\n\t\t\t'telin.id': 'admin',\r\n\t\t\t'telin.name': 'admin',\r\n\t\t\t'telin.roleCode': 'admin',\r\n\t\t\t'telin.roleId': 'admin',\r\n\t\t\t'telin.roleName': 'Administrator',\r\n\t\t\t'telin.roles':\r\n\t\t\t\t'[{\"isClientRole\":false,\"name\":\"Administrator\",\"code\":\"admin\",\"id\":\"admin\"}]',\r\n\t\t};\r\n\r\n\t\tObject.keys(data).forEach(function (k) {\r\n\t\t\tlocalStorage.setItem(k, data[k]);\r\n\t\t}); */\r\n\t\t/* Init Localstorage (Local Only) */\r\n\t}\r\n\r\n\tonChangeMainArea(area: MainArea): void {\r\n\t\tthis.currentView = area;\r\n\t}\r\n}\r\n","import { Component, ContentChild, forwardRef, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormControl,\r\n FormGroup,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input[type=numeric]',\r\n templateUrl: './input-numeric.component.html',\r\n styleUrls: ['./input-numeric.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputNumericComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputNumericComponent implements ControlValueAccessor, OnInit {\r\n @Input() formControlName: string;\r\n @Input() formControl: FormControl;\r\n @Input() trimLeadingZeros: boolean;\r\n @Input() disallowLeadingZero: boolean;\r\n @Input() allowDecimal: boolean = true;\r\n @Input() identifier: string;\r\n @Input() placeholder: string;\r\n @Input() label: string;\r\n @Input() maxLength: number;\r\n @Input() suffix: string;\r\n @Input() hint: string;\r\n\r\n @ContentChild('suffix') suffixTmpl: TemplateRef<any>;\r\n\r\n private _value: any;\r\n private _isDisabled: boolean;\r\n private _onBaseChange: () => void;\r\n private _onBaseTouched: () => void;\r\n\r\n constructor(private controlContainer: ControlContainer) {}\r\n\r\n public handleInput(event: Event): void {\r\n const inputElement = event.target as HTMLInputElement;\r\n const value = inputElement.value || '';\r\n\r\n let numeric = this.allowDecimal ? value.replace(/[^0-9.]/g, '') : value.replace(/\\D/g, '');\r\n\r\n if (this.allowDecimal) {\r\n const parts = numeric.split('.');\r\n if (parts.length > 2) {\r\n numeric = parts[0] + '.' + parts.slice(1).join('');\r\n }\r\n }\r\n\r\n if (\r\n this.disallowLeadingZero &&\r\n numeric.startsWith('0') &&\r\n numeric.length > 1 &&\r\n numeric[1] !== '.'\r\n ) {\r\n numeric = numeric.replace(/^0+/, '');\r\n }\r\n\r\n let finalValue: string | number = numeric;\r\n if (this.trimLeadingZeros && numeric !== '' && !numeric.includes('.')) {\r\n finalValue = +numeric;\r\n }\r\n\r\n this.formControl.patchValue(finalValue, { emitEvent: false });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setBaseStateInitialization();\r\n }\r\n\r\n private setBaseStateInitialization(): void {\r\n if (!this.formControlName) return;\r\n const formGroup = this.controlContainer.control as FormGroup;\r\n this.formControl = formGroup.get(this.formControlName) as FormControl;\r\n }\r\n\r\n public get isValid(): boolean {\r\n return !!(this.formControl?.touched && this.formControl?.valid);\r\n }\r\n\r\n public get isInvalid(): boolean {\r\n return !!(this.formControl?.touched && this.formControl?.invalid);\r\n }\r\n\r\n public get errors(): ValidationErrors | null {\r\n return this.formControl.errors;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this._value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onBaseChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onBaseTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled = isDisabled;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { InputNumericComponent } from './input-numeric.component';\r\n\r\n@NgModule({\r\n imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, CommonModule],\r\n declarations: [InputNumericComponent],\r\n exports: [InputNumericComponent],\r\n})\r\nexport class InputNumericModule {}\r\n","import {\r\n\tAfterViewInit,\r\n\tDirective,\r\n\tEventEmitter,\r\n\tInput,\r\n\tNgZone,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\r\n\r\n@Directive({\r\n\tselector: '[matSelectInfiniteScroll]',\r\n})\r\nexport class MatSelectInfiniteScrollDirective\r\n\timplements OnInit, OnDestroy, AfterViewInit\r\n{\r\n\t@Input() threshold = '15%';\r\n\t@Input() debounceTime = 150;\r\n\t@Input() complete: boolean;\r\n\t@Output() infiniteScroll = new EventEmitter<void>();\r\n\r\n\tprivate panel: Element;\r\n\tprivate thrPx = 0;\r\n\tprivate thrPc = 0;\r\n\tprivate singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\r\n\tprivate destroyed$ = new Subject<boolean>();\r\n\r\n\tconstructor(private matSelect: MatSelect, private ngZone: NgZone) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis.evaluateThreshold();\r\n\t}\r\n\r\n\tngAfterViewInit() {\r\n\t\tthis.matSelect.openedChange\r\n\t\t\t.pipe(takeUntil(this.destroyed$))\r\n\t\t\t.subscribe(opened => {\r\n\t\t\t\tif (opened) {\r\n\t\t\t\t\tthis.panel = this.matSelect.panel.nativeElement;\r\n\t\t\t\t\tthis.singleOptionHeight = this.getSelectItemHeightPx();\r\n\t\t\t\t\tthis.registerScrollListener();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis.destroyed$.next(true);\r\n\t\tthis.destroyed$.complete();\r\n\t}\r\n\r\n\tevaluateThreshold() {\r\n\t\tif (this.threshold.lastIndexOf('%') > -1) {\r\n\t\t\tthis.thrPx = 0;\r\n\t\t\tthis.thrPc = parseFloat(this.threshold) / 100;\r\n\t\t} else {\r\n\t\t\tthis.thrPx = parseFloat(this.threshold);\r\n\t\t\tthis.thrPc = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterScrollListener() {\r\n\t\tfromEvent(this.panel, 'scroll')\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(this.destroyed$),\r\n\t\t\t\tdebounceTime(this.debounceTime),\r\n\t\t\t\ttap(event => {\r\n\t\t\t\t\tthis.handleScrollEvent(event);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\thandleScrollEvent(event) {\r\n\t\tthis.ngZone.runOutsideAngular(() => {\r\n\t\t\tif (this.complete) return;\r\n\r\n\t\t\tconst countOfRenderedOptions = this.matSelect.options.length;\r\n\t\t\tconst infiniteScrollDistance =\r\n\t\t\t\tthis.singleOptionHeight * countOfRenderedOptions;\r\n\t\t\tconst threshold =\r\n\t\t\t\tthis.thrPc !== 0\r\n\t\t\t\t\t? infiniteScrollDistance * this.thrPc\r\n\t\t\t\t\t: this.thrPx;\r\n\t\t\tconst scrolledDistance =\r\n\t\t\t\tthis.panel.clientHeight + event.target.scrollTop;\r\n\r\n\t\t\tif (scrolledDistance + threshold >= infiniteScrollDistance)\r\n\t\t\t\tthis.ngZone.run(() => this.infiniteScroll.emit());\r\n\t\t});\r\n\t}\r\n\r\n\tgetSelectItemHeightPx(): number {\r\n\t\treturn (\r\n\t\t\tparseFloat(getComputedStyle(this.panel).fontSize) *\r\n\t\t\tSELECT_ITEM_HEIGHT_EM\r\n\t\t);\r\n\t}\r\n}\r\n","export class BaseOptionModel {\r\n\tpublic label: string;\r\n\tpublic value: string | number;\r\n}\r\n","export class PackageReqModel {\r\n\tpublic name: string;\r\n\tpublic monthlyRental: number;\r\n\tpublic conversationMsg: string;\r\n\tpublic businessMsg: string;\r\n\tpublic contacts: string;\r\n\tpublic isMultipleFlow: boolean;\r\n\tpublic tps: number;\r\n\tpublic multichatLiveAgent: string;\r\n\tpublic multichatLiveSupervisor: string;\r\n\tpublic numberOfFlow: string;\r\n\tpublic waOfficialAccount: string;\r\n\tpublic dashboardToSendMessage: string;\r\n\tpublic reportAdminPanel: string;\r\n\tpublic trainingSupport: string;\r\n\tpublic isMultiple: string;\r\n\tpublic checklistWa:\tboolean;\r\n\tpublic checklistTele:\tboolean;\r\n\tpublic checklistLine:\tboolean;\r\n\tpublic specifyPackage: string;\r\n\tpublic customDevelopment: string;\r\n\tpublic oneUsageCostConversation: string;\r\n\tpublic ovrUsgConversationRateCard: boolean;\r\n\tpublic ovrUsgNotficationRateCard: boolean | string;\r\n\tpublic ovrUsgConversationCost: string;\r\n\tpublic ovrUsgNotficationCost: string;\r\n\tpublic signupOrSetup: string;\r\n\tpublic checklistAdm: boolean;\r\n\tpublic checklistUser: boolean;\r\n\tpublic checklistClient: boolean;\r\n\tpublic checklistChatAgentAdmin: boolean;\r\n\tpublic checklistChatAgentUser: boolean;\r\n\tpublic country: string;\r\n\tpublic currency: string;\r\n\tpublic customPackage: boolean;\r\n\tpublic costPerCustomer: string;\r\n\tpublic costPerBusiness: string;\r\n\tpublic setupFeeRateCard: boolean | string;\r\n\tpublic setupFee: string;\r\n\tpublic type: string;\r\n\tpublic recomended: string;\r\n\r\n\t\r\n\r\n\tpublic clone(source: any): PackageReqModel {\r\n\t\tif (source.country) {\r\n\t\t\tthis.country = source.country;\r\n\t\t}\r\n\t\tif (source.recomended) {\r\n\t\t\tthis.recomended = source.recomended;\r\n\t\t}\r\n\t\tif (source.type) {\r\n\t\t\tthis.type = source.type;\r\n\t\t}\r\n\t\tif (source.setupFeeRateCard) {\r\n\t\t\tthis.setupFeeRateCard = source.setupFeeRateCard;\r\n\t\t}\r\n\t\tif (source.setupFee) {\r\n\t\t\tif(source.setupFeeRateCard === 'true') {\r\n\t\t\t\tthis.setupFee = null;\r\n\t\t\t}else {\r\n\t\t\t\tthis.setupFee = source.setupFee;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationRateCard) {\r\n\t\t\tthis.ovrUsgConversationRateCard = source.ovrUsgConversationRateCard;\r\n\t\t}\r\n\t\tif (source.costPerCustomer) {\r\n\t\t\tthis.costPerCustomer = source.costPerCustomer;\r\n\t\t}\r\n\t\tif (source.costPerBusiness) {\r\n\t\t\tthis.costPerBusiness = source.costPerBusiness;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotficationRateCard) {\r\n\t\t\t\tthis.ovrUsgNotficationRateCard = source.ovrUsgNotficationRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationCost) {\r\n\t\t\tthis.ovrUsgConversationCost = source.ovrUsgConversationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotficationCost) {\r\n\t\t\tif(source.ovrUsgNotficationRateCard === 'true') {\r\n\t\t\t\tthis.ovrUsgNotficationCost = null;\r\n\t\t\t}else {\r\n\t\t\t\tthis.ovrUsgNotficationCost = source.ovrUsgNotficationCost;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\tif (source.customPackage) {\r\n\t\t\tthis.customPackage = source.customPackage;\r\n\t\t}\r\n\t\tif (source.currency) {\r\n\t\t\tthis.currency = source.currency;\r\n\t\t}\r\n\t\tif (source.name) {\r\n\t\t\tthis.name = source.name;\r\n\t\t}\r\n\t\tif (source.monthlyRental) {\r\n\t\t\tthis.monthlyRental = source.monthlyRental;\r\n\t\t}\r\n\t\tif (source.conversationMsg) {\r\n\t\t\tthis.conversationMsg = source.conversationMsg;\r\n\t\t}\r\n\t\tif (source.businessMsg) {\r\n\t\t\tthis.businessMsg = source.businessMsg;\r\n\t\t}\r\n\t\tif (source.contacts) {\r\n\t\t\tthis.contacts = source.contacts;\r\n\t\t}\r\n\t\tif (source.isMultipleFlow) {\r\n\t\t\tthis.isMultipleFlow = source.isMultipleFlow;\r\n\t\t}\r\n\t\tif (source.tps) {\r\n\t\t\tthis.tps = source.tps;\r\n\t\t}\r\n\t\tif (source.multichatLiveAgent) {\r\n\t\t\tthis.multichatLiveAgent = source.multichatLiveAgent;\r\n\t\t}\r\n\t\tif (source.multichatLiveSupervisor) {\r\n\t\t\tthis.multichatLiveSupervisor = source.multichatLiveSupervisor;\r\n\t\t}\r\n\t\tif (source.numberOfFlow) {\r\n\t\t\tthis.numberOfFlow = source.numberOfFlow;\r\n\t\t}\r\n\t\tif (source.waOfficialAccount) {\r\n\t\t\tthis.waOfficialAccount = source.waOfficialAccount;\r\n\t\t}\r\n\t\tif (source.dashboardToSendMessage) {\r\n\t\t\tthis.dashboardToSendMessage = source.dashboardToSendMessage;\r\n\t\t}\r\n\t\tif (source.reportAdminPanel) {\r\n\t\t\tthis.reportAdminPanel = source.reportAdminPanel;\r\n\t\t}\r\n\t\tif (source.trainingSupport) {\r\n\t\t\tthis.trainingSupport = source.trainingSupport;\r\n\t\t}\r\n\t\tif (source.isMultiple) {\r\n\t\t\tthis.isMultiple = source.isMultiple;\r\n\t\t}\r\n\t\tif (source.checklistWa) {\r\n\t\t\tthis.checklistWa = source.checklistWa;\r\n\t\t}\r\n\t\tif (source.checklistLine) {\r\n\t\t\tthis.checklistLine = source.checklistLine;\r\n\t\t}\r\n\t\tif (source.checklistTele) {\r\n\t\t\tthis.checklistTele = source.checklistTele;\r\n\t\t}\r\n\t\tif (source.specifyPackage) {\r\n\t\t\tthis.specifyPackage = source.specifyPackage;\r\n\t\t}\r\n\t\tif (source.customDevelopment) {\r\n\t\t\tthis.customDevelopment = source.customDevelopment;\r\n\t\t}\r\n\t\tif (source.oneUsageCostConversation) {\r\n\t\t\tthis.oneUsageCostConversation = source.oneUsageCostConversation;\r\n\t\t}\r\n\t\t// if (source.oneUsageCostNotification) {\r\n\t\t// \tthis.oneUsageCostNotification = source.oneUsageCostNotification;\r\n\t\t// }\r\n\t\tif (source.signupOrSetup) {\r\n\t\t\tthis.signupOrSetup = source.signupOrSetup;\r\n\t\t}\r\n\t\tif (source.checklistAdm) {\r\n\t\t\tthis.checklistAdm = source.checklistAdm;\r\n\t\t}\r\n\t\tif (source.checklistUser) {\r\n\t\t\tthis.checklistUser = source.checklistUser;\r\n\t\t}\r\n\t\tif (source.checklistClient) {\r\n\t\t\tthis.checklistClient = source.checklistClient;\r\n\t\t}\r\n\t\tif (source.checklistChatAgentAdmin) {\r\n\t\t\tthis.checklistChatAgentAdmin = source.checklistChatAgentAdmin;\r\n\t\t}\r\n\t\tif (source.checklistChatAgentUser) {\r\n\t\t\tthis.checklistChatAgentUser = source.checklistChatAgentUser;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n}","export class HttpBodyReqPaginationModel {\r\n\tpublic pageSize: number;\r\n\tpublic pageNo: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.pageSize = 10;\r\n\t\tthis.pageNo = 1;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tpageSize: this.pageSize,\r\n\t\t\tpageNo: this.pageNo,\r\n\t\t};\r\n\t}\r\n}\r\n","export class HttpBodyReqPaginationGlobalVarModel {\r\n\tpublic pageSize: number;\r\n\tpublic pageNo: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.pageSize = 3;\r\n\t\tthis.pageNo = 1;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tpageSize: this.pageSize,\r\n\t\t\tpageNo: this.pageNo,\r\n\t\t};\r\n\t}\r\n}\r\n","// let API_CONST = '';\r\n\r\n// if (location.origin.includes('dashboard.neuapix'))\r\n// \tAPI_CONST = 'https://api.neuapix.com';\r\n// else if (location.origin.includes('dashboard-staging.neuapix'))\r\n// \tAPI_CONST = 'https://api-staging.neuapix.com';\r\n// else if (location.origin.includes('dashboard-qa.adlsandbox'))\r\n// \tAPI_CONST = 'https://apibsp-qa.adlsandbox.net';\r\n// else if (location.origin.includes('demo-dev.adlsandbox.net'))\r\n// \tAPI_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n// else API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n\r\n// export const environment = {\r\n// \tproduction: false,\r\n// \tapi: API_CONST,\r\n// };\r\nlet API_CONST = '';\r\nconst origin = location.origin;\r\n\r\n// 1. Cek Production\r\nif (origin.includes('dashboard.neuapix.com')) {\r\n API_CONST = 'https://api.neuapix.com';\r\n}\r\n// 2. Cek Staging\r\nelse if (origin.includes('dashboard-staging')) {\r\n API_CONST = 'https://api-staging.neuapix.com';\r\n}\r\n// 3. Cek QA\r\nelse if (origin.includes('dashboard-qa')) {\r\n API_CONST = 'https://apibsp-qa.adlsandbox.net';\r\n}\r\n// 4. Cek Demo Dev secara spesifik\r\nelse if (origin.includes('demo-dev')) {\r\n API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n}\r\n// 5. Default (Localhost atau lainnya)\r\nelse {\r\n API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n}\r\n\r\nexport const environment = {\r\n production: false,\r\n api: API_CONST,\r\n};\r\n","import { HttpBodyReqPaginationModel } from \"./util\";\r\n\r\nexport class BillingParamReqModel extends HttpBodyReqPaginationModel {\r\n\tpublic filter: string;\r\n\tpublic platform: string;\r\n\tpublic clientId: string;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tfilter: this.filter,\r\n\t\t\tplatform: this.platform,\r\n\t\t\tclientId: this.clientId,\r\n\t\t\tpageNo: String(this.pageNo),\r\n\t\t\tpageSize: String(this.pageSize),\r\n\t\t};\r\n\t}\r\n}\r\n","export class CountryModel {\r\n\tpublic category: string;\r\n\tpublic code: string;\r\n\tpublic values: string;\r\n\tpublic param1: string;\r\n\tpublic param2: boolean;\r\n\tpublic ìcon: boolean;\r\n\r\n\tpublic convert(dto: any): CountryModel {\r\n\r\n\t\tif (dto.category) {\r\n\t\t\tthis.category = dto.category;\r\n\t\t}\r\n\t\tif (dto.code) {\r\n\t\t\tthis.code = dto.code;\r\n\t\t}\r\n\t\tif (dto.values) {\r\n\t\t\tthis.values = dto.values;\r\n\t\t}\r\n\t\tif (dto.param1) {\r\n\t\t\tthis.param1 = dto.param1;\r\n\t\t}\r\n\t\tif (dto.param2) {\r\n\t\t\tthis.param2 = dto.param2;\r\n\t\t}\r\n\t\tif (dto.ìcon) {\r\n\t\t\tthis.ìcon = dto.ìcon;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n}\r\n","export class CreatePackageReqModel {\r\n\tpublic name : string;\r\n\tpublic channels : string[] = [];\r\n\tpublic customDevelopment : boolean;\r\n\tpublic maxAgent : string;\r\n\tpublic maxContact : string;\r\n\tpublic maxFlow : string;\r\n\tpublic maxSupervisor : string;\r\n\tpublic monthlyConversation : string;\r\n\tpublic monthlyNotification : string;\r\n\tpublic monthlyRental : number;\r\n\tpublic monthlyRentalRateCard : string;\r\n\tpublic ovrUsgConversation : string;\r\n\tpublic ovrUsgConversationCost : string;\r\n\tpublic ovrUsgConversationRateCard : boolean;\r\n\tpublic ovrUsgNotification : string;\r\n\tpublic ovrUsgNotificationCost : string;\r\n\tpublic ovrUsgNotificationRateCard : boolean;\r\n\tpublic reports : boolean;\r\n\tpublic roles : string;\r\n\tpublic sendMsgDashboard : boolean;\r\n\tpublic setupFee : string;\r\n\tpublic tps : number;\r\n\tpublic training : boolean;\r\n\tpublic waOfficialAcc : boolean;\r\n\tpublic customPackage: boolean;\r\n\tpublic countryCode: string;\r\n\tpublic costPerCustomer: string;\r\n\tpublic costPerBusiness: string;\r\n\tpublic setupFeeRateCard: boolean;\r\n\tpublic type: string;\r\n\tpublic recomended: string;\r\n\r\n\tpublic clone(source:any): CreatePackageReqModel {\r\n\t\tif (source.name) {\r\n\t\t\tthis.name = source.name;\r\n\t\t}\r\n\t\tif (source.type) {\r\n\t\t\tthis.type = source.type;\r\n\t\t}\r\n\t\tif (source.recomended) {\r\n\t\t\tthis.recomended = source.recomended;\r\n\t\t}\r\n\t\tif (source.setupFeeRateCard) {\r\n\t\t\tthis.setupFeeRateCard = source.setupFeeRateCard;\r\n\t\t}\r\n\t\tif (source.countryCode) {\r\n\t\t\tthis.countryCode = source.countryCode;\r\n\t\t}\r\n\t\tif (source.costPerCustomer) {\r\n\t\t\tthis.costPerCustomer = source.costPerCustomer;\r\n\t\t}\r\n\t\tif (source.costPerBusiness) {\r\n\t\t\tthis.costPerBusiness = source.costPerBusiness;\r\n\t\t}\r\n\t\tif (source.customPackage) {\r\n\t\t\tthis.customPackage = source.customPackage;\r\n\t\t}\r\n\t\tif (source.channels) {\r\n\t\t\tthis.channels = [source.channels];\r\n\t\t}\r\n\t\tif (source.customDevelopment) {\r\n\t\t\tthis.customDevelopment = source.customDevelopment;\r\n\t\t}\r\n\t\tif (source.maxAgent) {\r\n\t\t\tthis.maxAgent = source.maxAgent;\r\n\t\t}\r\n\t\tif (source.maxContact) {\r\n\t\t\tthis.maxContact = source.maxContact;\r\n\t\t}\r\n\t\tif (source.maxFlow) {\r\n\t\t\tthis.maxFlow = source.maxFlow;\r\n\t\t}\r\n\t\tif (source.maxSupervisor) {\r\n\t\t\tthis.maxSupervisor = source.maxSupervisor;\r\n\t\t}\r\n\t\tif (source.monthlyConversation) {\r\n\t\t\tthis.monthlyConversation = source.monthlyConversation;\r\n\t\t}\r\n\t\tif (source.monthlyNotification) {\r\n\t\t\tthis.monthlyNotification = source.monthlyNotification;\r\n\t\t}\r\n\t\tif (source.monthlyRental) {\r\n\t\t\tthis.monthlyRental = source.monthlyRental;\r\n\t\t}\r\n\t\tif (source.monthlyRentalRateCard) {\r\n\t\t\tthis.monthlyRentalRateCard = source.monthlyRentalRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversation) {\r\n\t\t\tthis.ovrUsgConversation = source.ovrUsgConversation;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationCost) {\r\n\t\t\tthis.ovrUsgConversationCost = source.ovrUsgConversationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationRateCard) {\r\n\t\t\tthis.ovrUsgConversationRateCard = source.ovrUsgConversationRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotification) {\r\n\t\t\tthis.ovrUsgNotification = source.ovrUsgNotification;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotificationCost) {\r\n\t\t\tthis.ovrUsgNotificationCost = source.ovrUsgNotificationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotificationRateCard) {\r\n\t\t\tthis.ovrUsgNotificationRateCard = source.ovrUsgNotificationRateCard;\r\n\t\t}\r\n\t\tif (source.reports) {\r\n\t\t\tthis.reports = source.reports;\r\n\t\t}\r\n\t\tif (source.roles) {\r\n\t\t\tthis.roles = source.roles;\r\n\t\t}\r\n\t\tif (source.sendMsgDashboard) {\r\n\t\t\tthis.sendMsgDashboard = source.sendMsgDashboard;\r\n\t\t}\r\n\t\tif (source.setupFee) {\r\n\t\t\tthis.setupFee = source.setupFee;\r\n\t\t}\r\n\t\tif (source.tps) {\r\n\t\t\tthis.tps = source.tps;\r\n\t\t}\r\n\t\tif (source.training) {\r\n\t\t\tthis.training = source.training;\r\n\t\t}\r\n\t\tif (source.waOfficialAcc) {\r\n\t\t\tthis.waOfficialAcc = source.waOfficialAcc;\r\n\t\t}\r\n\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\r\n\tconvert(): any {\r\n\t\treturn {\r\n\t\t\tname: this.name,\r\n\t\t\tchannels : this.channels ,\r\n\t\t\tcustomDevelopment : this.customDevelopment ,\r\n\t\t\tmaxAgent : +this.maxAgent ,\r\n\t\t\tmaxContact :+this.maxContact ,\r\n\t\t\tmaxFlow : +this.maxFlow ,\r\n\t\t\tmaxSupervisor : +this.maxSupervisor ,\r\n\t\t\tmonthlyConversation : +this.monthlyConversation ,\r\n\t\t\tmonthlyNotification : +this.monthlyNotification ,\r\n\t\t\tmonthlyRental : +this.monthlyRental ,\r\n\t\t\tmonthlyRentalRateCard : this.monthlyRentalRateCard ,\r\n\t\t\tovrUsgConversation : this.ovrUsgConversation ,\r\n\t\t\tovrUsgConversationCost : +this.ovrUsgConversationCost ,\r\n\t\t\tovrUsgConversationRateCard : this.ovrUsgConversationRateCard ,\r\n\t\t\tovrUsgNotification : this.ovrUsgNotification ,\r\n\t\t\tovrUsgNotificationCost : +this.ovrUsgNotificationCost ,\r\n\t\t\tovrUsgNotificationRateCard : this.ovrUsgNotificationRateCard ,\r\n\t\t\treports : this.reports ,\r\n\t\t\troles : this.roles ,\r\n\t\t\tsendMsgDashboard : this.sendMsgDashboard ,\r\n\t\t\tsetupFee : +this.setupFee ,\r\n\t\t\ttps : +this.tps ,\r\n\t\t\ttraining : this.training ,\r\n\t\t\twaOfficialAcc : this.waOfficialAcc,\r\n\t\t\tcustomPackage: this.customPackage,\r\n\t\t\tcountryCode: this.countryCode,\r\n\t\t\tcostPerBusiness: this.costPerBusiness,\r\n\t\t\tcostPerCustomer: this.costPerCustomer,\r\n\t\t\tsetupFeeRateCard: this.setupFeeRateCard,\r\n\t\t\ttype: this.type,\r\n\t\t\trecomended: this.recomended\r\n\t\t};\r\n\t}\r\n}","export class HttpBodyRespModel {\r\n\tpublic status: number;\r\n\tpublic errorCode: number;\r\n\tpublic message: string;\r\n\tpublic data: any;\r\n\tpublic totalRecord: number;\r\n\r\n\tpublic convert(dto: any): HttpBodyRespModel {\r\n\t\tif (dto.status) {\r\n\t\t\tthis.status = dto.status;\r\n\t\t}\r\n\t\tif (dto.errorCode) {\r\n\t\t\tthis.errorCode = dto.errorCode;\r\n\t\t}\r\n\t\tif (dto.message) {\r\n\t\t\tthis.message = dto.message;\r\n\t\t}\r\n\t\tif (dto.data) {\r\n\t\t\tthis.data = dto.data;\r\n\t\t}\r\n\t\tif (dto.totalRecord >= 0) {\r\n\t\t\tthis.totalRecord = dto.totalRecord;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError } from 'rxjs/internal/operators/catchError';\r\nimport { environment } from '../../../environments/environment';\r\nimport { Parameter, ServerInBuiltError } from '../models/util/api-adapter-service-models';\r\nimport { AppRequest } from '../models/util/api-dto/request-models/app-request';\r\nimport { AppResponse } from '../models/util/api-dto/response-models/app-response';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ApiAdapterServiceService {\r\n private queryCount = 0;\r\n\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n public executeApiRequest<T>(\r\n parameterList: Array<Parameter>,\r\n path: string,\r\n httpVerb: string,\r\n isFile: boolean = false\r\n ): Observable<any> {\r\n let url = path;\r\n let bodyData: {};\r\n let parameter: Parameter;\r\n let formData = new FormData();\r\n\r\n parameterList\r\n ?.filter((rt) => rt.in !== 'header')\r\n .forEach((requestType) => {\r\n parameter = parameterList.find(\r\n (parameter) => parameter.name === requestType.name\r\n ) as Parameter;\r\n\r\n if (!parameter && requestType.required && requestType.in !== 'header') {\r\n window.alert(\r\n `Parameter \"${requestType.name}\" is required!, Try again with \"${requestType.name}\"`\r\n );\r\n } else if (!parameter && !requestType.required) {\r\n // continue;\r\n } else {\r\n switch (requestType.in) {\r\n case 'body': {\r\n bodyData = parameter.value;\r\n break;\r\n }\r\n case 'path': {\r\n url = url.replace(`{${parameter.name}}`, parameter.value);\r\n break;\r\n }\r\n case 'query': {\r\n url = this.setQuery(parameter.name, parameter.value, url);\r\n break;\r\n }\r\n case 'formData': {\r\n formData = this.setFormData(parameter, formData);\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n parameter = undefined;\r\n });\r\n\r\n this.queryCount = 0;\r\n\r\n url = `${environment.api}${url}`;\r\n const appRequest: AppRequest<any> = {\r\n ...(parameterList?.[0]?.withoutKeyData ? bodyData : { data: bodyData }),\r\n };\r\n\r\n const headers = new HttpHeaders()\r\n .set('Authorization', 'Bearer ' + localStorage.getItem('telin.accessToken'))\r\n .set('Access-Control-Allow-Origin', '*');\r\n\r\n return this.httpClient\r\n .request<AppResponse<T>>(httpVerb, url, {\r\n body: !bodyData ? formData : appRequest,\r\n responseType: isFile ? ('blob' as 'json') : ('json' as 'json'),\r\n headers,\r\n })\r\n .pipe(\r\n catchError((err: HttpErrorResponse) => {\r\n if (err.error instanceof ErrorEvent) {\r\n return of<AppResponse<any>>({\r\n error: {\r\n title: 'Network error!',\r\n detail: err.message,\r\n source: err.statusText,\r\n status: err.status.toString(),\r\n },\r\n meta: {\r\n code: err.status,\r\n message: err.message,\r\n },\r\n });\r\n }\r\n\r\n return of<ServerInBuiltError>(err.error);\r\n })\r\n );\r\n }\r\n\r\n public uploadFileToS3(s3Url: string, file: File): Observable<any> {\r\n // Kita kirim raw binary/file dengan header Content-Type yang sesuai\r\n return this.httpClient.put(s3Url, file, {\r\n headers: { 'Content-Type': file.type },\r\n });\r\n }\r\n\r\n private setQuery(name: string, value: any, url: string): string {\r\n url = this.queryCount === 0 ? `${url}?${name}=${value}` : `${url}&${name}=${value}`;\r\n this.queryCount++;\r\n return url;\r\n }\r\n\r\n private setFormData(parameter: Parameter, formData: FormData): FormData {\r\n if (parameter.type === 'array') {\r\n for (let i = 0; parameter.value.length > i; i++) {\r\n formData.append(parameter.name, parameter.value[i], parameter.value[i].name);\r\n }\r\n } else {\r\n formData.append(parameter.name, parameter.value ? parameter.value : null);\r\n }\r\n return formData;\r\n }\r\n}\r\n","export const CampaignListTableLabelConst = [\r\n\t'Broadcast ID',\r\n\t'Business Name',\r\n\t'Broadcast Name',\r\n\t'Template Name',\r\n\t'Channel',\r\n\t'Status',\r\n\t'Number Count',\r\n\t'On Progress',\r\n\t'Sent',\r\n\t'Delivered',\r\n\t'Read',\r\n\t'Failed',\r\n\t'Repeat Count',\r\n\t'Start Date',\r\n\t'End Date',\r\n\t'Action',\r\n];\r\n\r\nexport const CampaignListTableColumnConst = [\r\n\t'id',\r\n\t'clientName',\r\n\t'name',\r\n\t'templateName',\r\n\t'platform',\r\n\t'statusName',\r\n\t'numberCount',\r\n\t'queuedCount',\r\n\t'sentCount',\r\n\t'delivCount',\r\n\t'readCount',\r\n\t'failedCount',\r\n\t'repeatCount',\r\n\t'startTime',\r\n\t'endTime',\r\n\t'action',\r\n];\r\n","import { MatTableDataSource } from '@angular/material/table';\r\n\r\nexport class TableModel {\r\n\tpublic columns: any[];\r\n\tpublic dataSource: MatTableDataSource<any>;\r\n\tpublic labels: string[];\r\n\tpublic page: number;\r\n\tpublic pageSize: number;\r\n\tpublic totalData: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.columns = [];\r\n\t\tthis.dataSource = new MatTableDataSource();\r\n\t\tthis.labels = [];\r\n\t\tthis.page = 1;\r\n\t\tthis.pageSize = 10;\r\n\t\tthis.totalData = 0;\r\n\t}\r\n\r\n\tpublic getNumber(index: number, limit: number): number {\r\n\t\treturn (this.page - 1) * limit + index;\r\n\t}\r\n\r\n\tpublic getPageIndex(): number {\r\n\t\treturn this.page - 1;\r\n\t}\r\n\r\n\tpublic isEmpty(): boolean {\r\n\t\treturn this.totalData === 0;\r\n\t}\r\n\r\n\tpublic setPage(page: number): void {\r\n\t\tthis.page = page;\r\n\t}\r\n\r\n\tpublic setPageSize(size: number): void {\r\n\t\tthis.pageSize = size;\r\n\t}\r\n\r\n\tpublic resetPage(): void {\r\n\t\tthis.page = 1;\r\n\t}\r\n\r\n\tpublic setNextPage(isNext: boolean): void {\r\n\t\tif (!isNext && this.page === 1) {\r\n\t\t\tthis.totalData = this.dataSource.data?.length ?? 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.totalData =\r\n\t\t\tthis.page === 1\r\n\t\t\t\t? this.pageSize * 2\r\n\t\t\t\t: this.pageSize * (this.page + 1);\r\n\r\n\t\tconst diffData = this.pageSize - this.dataSource.data?.length;\r\n\r\n\t\t/* totalData substracted by diffData if data < pageSize */\r\n\t\tif (diffData !== 0) this.totalData -= diffData;\r\n\r\n\t\t/* totalData substracted by pageSize if isNext false */\r\n\t\tif (!isNext) this.totalData -= this.pageSize;\r\n\t}\r\n}\r\n","export class CampaignsListModel {\r\n\tpublic campaignID: string;\r\n\tpublic businessName: string;\r\n\tpublic campaignName: string;\r\n\tpublic medium: string;\r\n\tpublic status: string;\r\n\tpublic numberCount: number;\r\n\tpublic deilveredCount: number;\r\n\tpublic seenCount: number;\r\n\tpublic responseCount: number;\r\n\tpublic estimatedCost: number;\r\n\tpublic actualCost: number;\r\n\tpublic startDate: string;\r\n\tpublic endDate: string;\r\n\tpublic id: string;\r\n\r\n\tpublic convert(dto: any): CampaignsListModel {\r\n\t\tif (dto.campaignID) {\r\n\t\t\tthis.campaignID = dto.campaignID;\r\n\t\t}\r\n\t\tif (dto.businessName) {\r\n\t\t\tthis.businessName = dto.businessName;\r\n\t\t}\r\n\t\tif (dto.campaignName) {\r\n\t\t\tthis.campaignName = dto.campaignName;\r\n\t\t}\r\n\t\tif (dto.medium) {\r\n\t\t\tthis.medium = dto.medium;\r\n\t\t}\r\n\t\tif (dto.status) {\r\n\t\t\tthis.status = dto.status;\r\n\t\t}\r\n\t\tif (dto.numberCount) {\r\n\t\t\tthis.numberCount = dto.numberCount;\r\n\t\t}\r\n\t\tif (dto.deilveredCount) {\r\n\t\t\tthis.deilveredCount = dto.deilveredCount;\r\n\t\t}\r\n\t\tif (dto.seenCount) {\r\n\t\t\tthis.seenCount = dto.seenCount;\r\n\t\t}\r\n\t\tif (dto.responseCount) {\r\n\t\t\tthis.responseCount = dto.responseCount;\r\n\t\t}\r\n\t\tif (dto.estimatedCost) {\r\n\t\t\tthis.estimatedCost = dto.estimatedCost;\r\n\t\t}\r\n\t\tif (dto.actualCost) {\r\n\t\t\tthis.actualCost = dto.actualCost;\r\n\t\t}\r\n\t\tif (dto.startDate) {\r\n\t\t\tthis.startDate = dto.startDate;\r\n\t\t}\r\n\t\tif (dto.endDate) {\r\n\t\t\tthis.endDate = dto.endDate;\r\n\t\t}\r\n\t\tif (dto.id) {\r\n\t\t\tthis.id = dto.id;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { MainArea } from '../../../core/enums/main-area.enum';\r\nimport { HttpBodyReqPaginationModel } from '../../../core/models';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models/app-response';\r\nimport { ApiAdapterServiceService } from '../../../core/services/api-adapter-service.service';\r\nimport { CampaignTotalDto } from '../../models/campaign-count-final-response-dto.model';\r\nimport {\r\n\tCampaignListTableColumnConst,\r\n\tCampaignListTableLabelConst,\r\n\tTableModel,\r\n} from './models';\r\nimport { CampaignResponseDtoApi } from './models/campaign-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-campaign-index',\r\n\ttemplateUrl: './campaign-index.component.html',\r\n\tstyleUrls: ['./campaign-index.component.scss'],\r\n})\r\nexport class CampaignIndexComponent implements OnInit, OnDestroy {\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\tpublic table: TableModel;\r\n\tpublic filterValue: any;\r\n\tpublic currentViews = MainArea;\r\n\tpublic campaignTotal: CampaignTotalDto;\r\n\r\n\tprivate campaignParam: HttpBodyReqPaginationModel;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\tconstructor(\r\n\t\tprivate datePipe: DatePipe,\r\n\t\tprivate apiAdapterService: ApiAdapterServiceService\r\n\t) {}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.campaignParam = new HttpBodyReqPaginationModel();\r\n\r\n\t\tthis.initTable();\r\n\t\tthis.campaignCountService();\r\n\t\tthis.getCampaignList();\r\n\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t}\r\n\r\n\tprivate initTable(): void {\r\n\t\tthis.table = new TableModel();\r\n\t\tthis.table.labels = CampaignListTableLabelConst;\r\n\t\tthis.table.columns = CampaignListTableColumnConst;\r\n\t}\r\n\r\n\tprivate campaignCountService() {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], '/campaign/totals', 'GET')\r\n\t\t\t.subscribe((response: AppResponse<CampaignTotalDto>) => {\r\n\t\t\t\tthis.campaignTotal = response?.data;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getCampaignList(searchValue: string = ''): void {\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.campaignParam.pageNo, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', this.campaignParam.pageSize, 'number'),\r\n\t\t\tthis.initParam('filter', searchValue, 'string'),\r\n\t\t];\r\n\r\n\t\tif (this.filterValue?.businessName)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'clientId',\r\n\t\t\t\t\tthis.filterValue.businessName,\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.medium)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam('channel', this.filterValue.medium, 'string')\r\n\t\t\t);\r\n\t\tif (this.filterValue?.templateName)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'templateName',\r\n\t\t\t\t\tthis.filterValue.templateName?.name,\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.status)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam('status', this.filterValue.status, 'string')\r\n\t\t\t);\r\n\t\tif (this.filterValue?.startDate)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'startDate',\r\n\t\t\t\t\tthis.datePipe.transform(\r\n\t\t\t\t\t\tthis.filterValue.startDate,\r\n\t\t\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t\t\t),\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.endDate)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'endDate',\r\n\t\t\t\t\tthis.datePipe.transform(\r\n\t\t\t\t\t\tthis.filterValue.endDate,\r\n\t\t\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t\t\t),\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/campaign', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<CampaignResponseDtoApi[]>) => {\r\n\t\t\t\tthis.table.dataSource.data = resp.data;\r\n\t\t\t\tthis.table.setNextPage(resp.haveNext);\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic updatePage(event: any): void {\r\n\t\tif (event.pageSize) {\r\n\t\t\tthis.table.totalData = event.pageSize;\r\n\t\t\tthis.table.setPageSize(event.pageSize);\r\n\t\t\tthis.table.resetPage();\r\n\t\t} else {\r\n\t\t\tthis.table.setPage(event);\r\n\t\t}\r\n\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.campaignParam.pageSize = this.table.pageSize;\r\n\t\tthis.getCampaignList();\r\n\t}\r\n\r\n\tpublic updateFilter(_filter: any) {\r\n\t\tthis.table.resetPage();\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.campaignParam.pageSize = this.table.pageSize;\r\n\t\tthis.filterValue = _filter;\r\n\r\n\t\tthis.getCampaignList();\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string) {\r\n\t\tthis.table.resetPage();\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.getCampaignList(searchValue);\r\n\t}\r\n\r\n\tpublic addCampaign(): void {\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t\tthis.changeCurrentView(this.currentViews.NewCampaign);\r\n\t}\r\n\r\n\tpublic changeCurrentView(area: MainArea) {\r\n\t\tthis.currentView.emit(area);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","export const PlatformOptionConst = [\r\n {\r\n icon: 'icon_wa',\r\n inputSvgIcon: 'icon-wa-gray',\r\n image: 'whatsapp.png',\r\n label: 'WhatsApp',\r\n value: 'WA',\r\n },\r\n {\r\n icon: 'menu_sms',\r\n inputSvgIcon: 'icon-sms-gray',\r\n image: 'sms.png',\r\n label: 'SMS',\r\n value: 'SMS',\r\n },\r\n {\r\n icon: 'icon_email',\r\n inputSvgIcon: 'icon-email-gray',\r\n image: 'email-contact.png',\r\n label: 'Email',\r\n value: 'EMAIL',\r\n },\r\n {\r\n icon: 'icon_line',\r\n inputSvgIcon: 'icon-line-gray',\r\n image: 'line.png',\r\n label: 'Line',\r\n value: 'LINE',\r\n },\r\n];\r\n\r\nexport const MsgTypeWAOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'TEXT',\r\n },\r\n {\r\n name: 'Media',\r\n code: 'MEDIA',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n {\r\n name: 'Text - Utility',\r\n code: 'utility',\r\n },\r\n /* {\r\n\t\tname: 'Catalogue',\r\n\t\tcode: 'CATALOGUE',\r\n\t}, */\r\n];\r\n\r\nexport const MsgTypeEmailOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'HTML',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n];\r\n\r\nexport const MsgTypeLineOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'TEXT',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n /* {\r\n\t\tname: 'Button',\r\n\t\tcode: 'BUTTON',\r\n\t},\r\n\t{\r\n\t\tname: 'Confirmation',\r\n\t\tcode: 'CONFIRMATION',\r\n\t},\r\n\t{\r\n\t\tname: 'Carousel',\r\n\t\tcode: 'CAROUSEL',\r\n\t},\r\n\t{\r\n\t\tname: 'Image Carousel',\r\n\t\tcode: 'IMAGE_CAROUSEL',\r\n\t},\r\n\t{\r\n\t\tname: 'Flex Bubble',\r\n\t\tcode: 'FLEX_BUBBLE',\r\n\t},\r\n\t{\r\n\t\tname: 'Flex Carousel',\r\n\t\tcode: 'FLEX_CAROUSEL',\r\n\t}, */\r\n];\r\n\r\nexport const MediaTypeOptionConst = [\r\n {\r\n name: 'Image',\r\n code: 'IMAGE',\r\n },\r\n {\r\n name: 'Video',\r\n code: 'VIDEO',\r\n },\r\n {\r\n name: 'Document',\r\n code: 'DOCUMENT',\r\n },\r\n /* {\r\n\t\tname: 'Location',\r\n\t\tcode: 'LOCATION',\r\n\t}, */\r\n];\r\n\r\nexport const WidgetLiveCampaignConst: {\r\n title: string;\r\n arrow: string;\r\n value: number;\r\n date: string;\r\n icon: string;\r\n dateclass: string;\r\n}[] = [\r\n {\r\n title: 'Total Campaigns',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-total-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n {\r\n title: 'Live Campaigns',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-use-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n {\r\n title: 'Pending Approval',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-pending-approval-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n];\r\n\r\nexport const CampaignPerformanceChartConfig = {\r\n legend: {\r\n icon: 'circle',\r\n orient: 'horizontal',\r\n x: 'center',\r\n y: 'bottom',\r\n },\r\n tooltip: {},\r\n dataset: {\r\n source: [['', 'WA Text', 'WA Template', 'WA Media', 'Product Catalog']],\r\n },\r\n xAxis: { type: 'category' },\r\n yAxis: {},\r\n series: [\r\n { type: 'bar', color: '#E666DA' },\r\n { type: 'bar', color: '#EB7215' },\r\n { type: 'bar', color: '#F3B435' },\r\n { type: 'bar', color: '#35CDF3' },\r\n ],\r\n};\r\n\r\nexport const ConversationInsightsChartConfig = {\r\n tooltip: {\r\n trigger: 'axis',\r\n },\r\n legend: {\r\n icon: 'circle',\r\n data: ['Delivery Rate of Campaigns', 'Total Number of Campaigns', 'Cost Distribution'],\r\n x: 'center',\r\n y: 'bottom',\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: [],\r\n },\r\n yAxis: {\r\n type: 'value',\r\n },\r\n series: [\r\n {\r\n name: 'Delivery Rate of Campaigns',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: 'blue' } },\r\n },\r\n {\r\n name: 'Total Number of Campaigns',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: 'green' } },\r\n },\r\n {\r\n name: 'Cost Distribution',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: '#E666DA' } },\r\n },\r\n ],\r\n};\r\n","import { WhatsAppAccountDto } from '../../campaign-management/models';\r\n\r\nexport let isLoadingOption: {\r\n\tWA: boolean;\r\n\tSMS: boolean;\r\n\tLINE: boolean;\r\n\tEMAIL: boolean;\r\n\tVOICE: boolean;\r\n} = {\r\n\tWA: false,\r\n\tSMS: false,\r\n\tLINE: false,\r\n\tEMAIL: false,\r\n\tVOICE: false,\r\n};\r\n\r\nexport let isHaveNextOption: {\r\n\tWA: boolean;\r\n\tSMS: boolean;\r\n\tLINE: boolean;\r\n\tEMAIL: boolean;\r\n\tVOICE: boolean;\r\n} = {\r\n\tWA: true,\r\n\tSMS: true,\r\n\tLINE: true,\r\n\tEMAIL: true,\r\n\tVOICE: true,\r\n};\r\n\r\nexport let pageNoOption: {\r\n\tWA: number;\r\n\tSMS: number;\r\n\tLINE: number;\r\n\tEMAIL: number;\r\n\tVOICE: number;\r\n} = {\r\n\tWA: 1,\r\n\tSMS: 1,\r\n\tLINE: 1,\r\n\tEMAIL: 1,\r\n\tVOICE: 1,\r\n};\r\n\r\nexport let optionList: {\r\n\tWA: WhatsAppAccountDto[];\r\n\tSMS: WhatsAppAccountDto[];\r\n\tLINE: WhatsAppAccountDto[];\r\n\tEMAIL: WhatsAppAccountDto[];\r\n\tVOICE: WhatsAppAccountDto[];\r\n} = {\r\n\tWA: [],\r\n\tSMS: [],\r\n\tLINE: [],\r\n\tEMAIL: [],\r\n\tVOICE: [],\r\n};\r\n","export const GeneralInformationMessageValidationConst = {\r\n campaignName: [\r\n { type: 'required', message: 'General Information is required' },\r\n { type: 'maxlength', message: 'Maximum character 100' },\r\n ],\r\n medium: [{ type: 'required', message: 'Channel is required' }],\r\n};\r\n\r\nexport const GeneralInformationWAMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [\r\n { type: 'required', message: 'Text is required' },\r\n { type: 'maxlength', message: 'Maximum character 1024' },\r\n ],\r\n media: [{ type: 'required', message: 'Media Type is required' }],\r\n fileName: [{ type: 'required', message: 'File is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n category: [{ type: 'required', message: 'Category is required' }],\r\n catalogue: [{ type: 'required', message: 'Catalog is required' }],\r\n product: [{ type: 'required', message: 'Product is required' }],\r\n body: [{ type: 'maxlength', message: 'Maximum character 100' }],\r\n paramName: [{ type: 'required', message: 'Variable Name is required' }],\r\n};\r\n\r\nexport const GeneralInformationEmailMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const GeneralInformationSMSMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const GeneralInformationLineMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const FailoverMechanismValidationConst = {\r\n interval: [\r\n { type: 'required', message: 'Interval Time is required' },\r\n {\r\n type: 'intervalTime',\r\n message: 'Must be greater than 0 and without decimal',\r\n },\r\n ],\r\n type: [{ type: 'required', message: 'Main Rules is required' }],\r\n accountId: [{ type: 'required', message: 'Account is required' }],\r\n subject: [{ type: 'required', message: 'Subject is required' }],\r\n message: [{ type: 'required', message: 'Message is required' }],\r\n templateName: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const SchedulerMessageValidationConst = {\r\n startDate: [{ type: 'required', message: 'Select Date is required' }],\r\n startTime: [{ type: 'required', message: 'Select Time is required' }],\r\n};\r\n","export enum EnumData {\r\n\tGOOGLE_MAP_API_KEY = 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n\r\n\t// MEDIUM TYPES\r\n\tMEDIUM_TYPE_WHATSAPP = 'WHATSAPP',\r\n\r\n\t// MEDIA TYPE\r\n\tMEDIA_TYPE_IMAGE = 'IMAGE',\r\n\tMEDIA_TYPE_VIDEO = 'VIDEO',\r\n\tMEDIA_TYPE_DOCUMENT = 'DOCUMENT',\r\n\tMEDIA_TYPE_LOCATION = 'LOCATION',\r\n\r\n\t// SCHEDULER TYPES\r\n\tSCHEDULER_TYPE_NOW = 'NOW',\r\n\tSCHEDULER_TYPE_SINGLE = 'SINGLE',\r\n\tSCHEDULER_TYPE_MULTIPLE = 'MULTIPLE',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\n\r\n@Injectable()\r\nexport class CustomPaginator extends MatPaginatorIntl {\r\n\titemsPerPageLabel = 'Listing per Page';\r\n\r\n\tgetRangeLabel = function (page, pageSize, length) {\r\n\t\tif (length === 0 || pageSize === 0) {\r\n\t\t\treturn 'Show 0';\r\n\t\t}\r\n\r\n\t\tlength = Math.max(length, 0);\r\n\r\n\t\tconst startIndex = page * pageSize;\r\n\t\tconst endIndex =\r\n\t\t\tstartIndex < length\r\n\t\t\t\t? Math.min(startIndex + pageSize, length)\r\n\t\t\t\t: startIndex + pageSize;\r\n\t\tconst sumStartIndex = startIndex + 1;\r\n\r\n\t\treturn 'Show ' + sumStartIndex + ' - ' + endIndex;\r\n\t};\r\n}\r\n","import { BaseOptionModel } from '../models';\r\n\r\nexport const generateEnumOption = (enumObject: Object): BaseOptionModel[] => {\r\n\tif (!enumObject) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn Object.keys(enumObject).reduce((result, each) => {\r\n\t\tif (isNaN(Number(each))) {\r\n\t\t\tconst inputOption = new BaseOptionModel();\r\n\t\t\tconst label = each\r\n\t\t\t\t.replace(/([A-Z])/g, ' $1')\r\n\t\t\t\t.replace(/([0-9])/g, ' $1');\r\n\r\n\t\t\tinputOption.label = label;\r\n\r\n\t\t\tif (isNaN(Number(enumObject[each]))) {\r\n\t\t\t\tinputOption.value = enumObject[each];\r\n\t\t\t} else {\r\n\t\t\t\tinputOption.value = Number(enumObject[each]);\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(inputOption);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n};\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInjectable,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { PlatformOptionConst } from '../../../../../core/const';\r\nimport { StatusCampaignEnum } from '../../../../../core/enums';\r\nimport { BaseOptionModel } from '../../../../../core/models';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { generateEnumOption } from '../../../../../core/util';\r\nimport { TemplateWAModel } from '../../../../models';\r\nimport { ClientDto } from '../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-filter-in-list-of-campaign',\r\n\ttemplateUrl: './filter-in-list-of-campaign.component.html',\r\n\tstyleUrls: ['./filter-in-list-of-campaign.component.scss'],\r\n})\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class FilterInListOfCampaignComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic onChangeFilter: EventEmitter<string>;\r\n\r\n\t@Output()\r\n\tpublic closeDropdown: EventEmitter<void>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic channelOption: any[] = PlatformOptionConst;\r\n\tpublic filteredChannelOption: any[] = [];\r\n\tpublic businessNameOption: ClientDto[] = [];\r\n\tpublic filteredBusinessNameOption: ClientDto[] = [];\r\n\tpublic statusOption: BaseOptionModel[] = [];\r\n\tpublic filteredStatusOption: BaseOptionModel[] = [];\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input()\r\n\tpublic filterValue: any;\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.closeDropdown = new EventEmitter();\r\n\t\tthis.onChangeFilter = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.statusOption = generateEnumOption(StatusCampaignEnum);\r\n\t\tthis.filteredStatusOption = [...this.statusOption];\r\n\t\tthis.filteredChannelOption = [...this.channelOption];\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.getBusinessNameOptionService();\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tbusinessName: new FormControl(this.filterValue?.businessName ?? ''),\r\n\t\t\tmedium: new FormControl(this.filterValue?.medium ?? ''),\r\n\t\t\ttemplateName: new FormControl(this.filterValue?.templateName ?? ''),\r\n\t\t\tstatus: new FormControl(this.filterValue?.status ?? ''),\r\n\t\t\tstartDate: new FormControl(this.filterValue?.startDate ?? ''),\r\n\t\t\tendDate: new FormControl(this.filterValue?.endDate ?? ''),\r\n\t\t});\r\n\r\n\t\tif (this.filterValue?.templateName)\r\n\t\t\tthis.templateOption = [\r\n\t\t\t\t...this.templateOption,\r\n\t\t\t\tthis.filterValue?.templateName,\r\n\t\t\t];\r\n\t}\r\n\r\n\tpublic getBusinessNameOptionService(): void {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\t[],\r\n\t\t\t\t'/admin/client/all-with-child?pageNo=1&rowPerPage=1000',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponse<ClientDto[]>) => {\r\n\t\t\t\tthis.businessNameOption = res.data;\r\n\t\t\t\tthis.filteredBusinessNameOption = [...this.businessNameOption];\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', this.form.get('medium').value, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService('', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic templateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic businessNameSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredBusinessNameOption = this.businessNameOption.filter(option =>\r\n\t\t\toption.name.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic channelSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredChannelOption = this.channelOption.filter(option =>\r\n\t\t\toption.label.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic statusSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredStatusOption = this.statusOption.filter(option =>\r\n\t\t\toption.label.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic clearDate(): void {\r\n\t\tthis.form.get('startDate').setValue(null);\r\n\t\tthis.form.get('endDate').setValue(null);\r\n\t}\r\n\r\n\tpublic validateBackDate(): void {\r\n\t\tif (new Date(this.form.get('startDate').value).getTime() > new Date(this.form.get('endDate').value).getTime())\r\n\t\t\tthis.form.get('endDate').setValue('');\r\n\t}\r\n\r\n\tpublic onReset(): void {\r\n\t\tthis.form.reset();\r\n\t\tthis.onChangeFilter.emit(this.form.getRawValue());\r\n\t}\r\n\r\n\tpublic onCancel(): void {\r\n\t\tthis.closeDropdown.emit();\r\n\t}\r\n\r\n\tpublic onApply(): void {\r\n\t\tthis.onChangeFilter.emit(this.form.getRawValue());\r\n\t\tthis.closeDropdown.emit();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharedServicesService {\r\n\r\n private subject = new Subject<any>();\r\n\r\n sendClickEvent(){\r\n this.subject.next();\r\n }\r\n\r\n getEvent(): Observable<any>{\r\n return this.subject.asObservable();\r\n }\r\n\r\n constructor() { }\r\n}\r\n","export class ConfirmationModel {\r\n public title: string;\r\n public content: string;\r\n public btnSubmit: string;\r\n public btnSubmitRed: string;\r\n public btnCancel: string;\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { SharedServicesService } from '../../../global/confirmation/shared/shared-services.service';\r\nimport { ConfirmationModel } from '../shared/model';\r\n\r\n@Component({\r\n\tselector: 'app-confirmation',\r\n\ttemplateUrl: './confirmation.component.html',\r\n\tstyleUrls: ['./confirmation.component.scss'],\r\n})\r\nexport class ConfirmationComponent {\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA)\r\n\t\tpublic data: ConfirmationModel,\r\n\t\tprivate sharedService: SharedServicesService\r\n\t) {}\r\n\r\n\tdeleteRowOn() {\r\n\t\tthis.sharedService.sendClickEvent();\r\n\t}\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\n\r\n@Component({\r\n selector: 'lib-pending-approval-dialog-view',\r\n templateUrl: './pending-approval-dialog-view.component.html',\r\n styleUrls: ['./pending-approval-dialog-view.component.scss'],\r\n})\r\nexport class PendingApprovalDialogViewComponent implements OnInit, OnDestroy {\r\n public isLoading: boolean = false;\r\n public isSubmit: boolean = false;\r\n public isShowButton: boolean = false;\r\n\r\n private subscribers: Subscription[] = [];\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<PendingApprovalDialogViewComponent>,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.getCampaignDetailService();\r\n\r\n this.isShowButton = this.getCampaignStorage?.generalInformation?.isShowButton ?? false;\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n private convertUTCDateToLocalDate(date: Date) {\r\n const newDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n return newDate;\r\n }\r\n\r\n private getCampaignDetailService(): void {\r\n if (!this.getCampaignStorage?.generalInformation?.id) return;\r\n\r\n this.isLoading = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}`,\r\n 'GET'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n const generalInformation = {\r\n campaignName: resp.data?.name,\r\n medium: resp.data?.platform,\r\n channel: ['image', 'video', 'document'].includes(resp.data?.type)\r\n ? 'MEDIA'\r\n : resp.data?.isDirectSend\r\n ? 'utility'\r\n : resp.data?.type?.toUpperCase(),\r\n media: resp.data?.type?.toUpperCase(),\r\n isPrevTemplate: resp?.data?.isPrevTemplate,\r\n templateName: resp?.data?.templateName,\r\n ttl: resp?.data?.ttlSeconds,\r\n from: {\r\n id: resp.data?.accountId,\r\n name: resp.data?.accountName,\r\n platform: resp.data?.platform,\r\n clientId: resp.data?.clientId,\r\n clientName: resp.data?.clientName,\r\n accountNo: resp.data?.accountNo,\r\n wabaId: resp.data?.wabaId ?? '',\r\n },\r\n text: resp.data?.details?.text,\r\n targetURL:\r\n resp.data?.details?.image?.url ??\r\n resp.data?.details?.document?.url ??\r\n resp.data?.details?.video?.url ??\r\n resp.data?.details?.template?.headerURL,\r\n paramHeader: resp.data?.details?.template?.header,\r\n paramBody: resp.data?.details?.template?.data,\r\n paramButton: resp.data?.details?.template?.button,\r\n paramCarousel:\r\n resp.data?.details?.template?.carousel?.map((card: any) => {\r\n return {\r\n headerURL: card.headerURL || '',\r\n bodyParams: (card.body || []).map((val: string) => ({\r\n paramName: val,\r\n })),\r\n buttonParams: (card.button || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((val: string) => ({\r\n paramName: val,\r\n payload: val,\r\n }));\r\n }),\r\n };\r\n }) || [],\r\n otpValue: [...(resp.data?.details?.template?.data ?? [])]?.pop(),\r\n variables: (resp.data?.details?.template?.data || []).map(\r\n (val: string) => ({\r\n paramName: val,\r\n })\r\n ),\r\n isUseExistingTemplate: !!resp.data?.templateName,\r\n template: {\r\n ID: resp.data?.details?.template?.id,\r\n name: resp.data?.details?.template?.name,\r\n lang: resp.data?.details?.template?.lang,\r\n platform: resp.data?.platform,\r\n headerURL: resp.data?.details?.template?.headerURL,\r\n header: {\r\n examples: resp.data?.details?.template?.header,\r\n },\r\n body: {\r\n examples: resp.data?.details?.template?.data,\r\n },\r\n buttons: resp.data?.details?.template?.button,\r\n ClientId: resp.data?.clientId,\r\n ClientName: resp.data?.clientName,\r\n },\r\n isDownloadVariableXLS: resp.data?.fileId !== '',\r\n isUpload: resp.data?.fileId !== '',\r\n fileId: resp.data?.fileId,\r\n };\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data?.id,\r\n form: generalInformation,\r\n },\r\n failover: resp.data?.failover,\r\n targetAudience: resp.data?.targets,\r\n targetAudienceFile: {\r\n name: resp.data?.fileName,\r\n targetURL: resp.data?.targetURL,\r\n },\r\n scheduler: {\r\n schedulerType:\r\n resp.data?.scheduleType === 'MULTI'\r\n ? 'ONE_TIME'\r\n : resp.data?.scheduleType,\r\n startDate: resp.data?.startTime?.split(' ')[0],\r\n startTime: resp.data?.startTime?.split(' ')[1],\r\n isRepeat: resp.data?.scheduleType === 'MULTI',\r\n delivery: resp.data?.repeat,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isLoading = false;\r\n },\r\n () => {\r\n this.isLoading = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public rejectCampaignService(): void {\r\n this.isSubmit = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/reject`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n this.isSubmit = false;\r\n\r\n if (!resp || !resp?.data) return this.toastr.error('Error Rejecting Campaign!');\r\n\r\n this.toastr.success('Campaign Rejected Successfully!');\r\n this.onClose();\r\n },\r\n () => {\r\n this.toastr.error('Error Rejecting Campaign!');\r\n this.isSubmit = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public approveCampaignService(): void {\r\n this.isSubmit = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/approve`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n this.isSubmit = false;\r\n\r\n if (!resp || !resp?.data) return this.toastr.error('Error Approving Campaign!');\r\n\r\n this.toastr.success('Campaign Approved Successfully!');\r\n this.onClose();\r\n },\r\n () => {\r\n this.toastr.error('Error Approving Campaign!');\r\n this.isSubmit = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onClose(): void {\r\n localStorage.removeItem('telin.campaign');\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n\tViewChild,\r\n} from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { MainArea } from '../../../../../core/enums';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { ConfirmationComponent } from '../../../../../global/confirmation/confirmation';\r\nimport { ConfirmationModel } from '../../../../../global/confirmation/shared/model';\r\nimport { PendingApprovalDialogViewComponent } from '../../dialog/pending-approval-dialog-view';\r\nimport { CampaignsListModel, TableModel } from '../../models';\r\nimport { CampaignResponseDtoApi } from '../../models/campaign-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-viewing-list-of-campaign-table',\r\n\ttemplateUrl: './viewing-list-of-campaign-table.component.html',\r\n\tstyleUrls: ['./viewing-list-of-campaign-table.component.scss'],\r\n})\r\nexport class ViewingListOfCampaignTableComponent implements OnInit, OnDestroy {\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\t@Output() updateTable = new EventEmitter<void>();\r\n\r\n\tprivate currentViews = MainArea;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public table: TableModel;\r\n\r\n\t@ViewChild(MatSort, { static: false }) public matSort: MatSort;\r\n\r\n\tconstructor(\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate apiAdapterService: ApiAdapterServiceService,\r\n\t\tprivate toastr: ToastrService\r\n\t) {}\r\n\r\n\tngOnInit(): void {}\r\n\r\n\tpublic sort(): void {\r\n\t\tthis.table.dataSource.sort = this.matSort;\r\n\t}\r\n\r\n\tpublic actionRow(row: CampaignsListModel, action: string): void {\r\n\t\tswitch (action) {\r\n\t\t\tcase 'pause':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Pause Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Pause this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/pause`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully paused',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'stop':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Stop Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Stop this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/stop`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully stop',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'delete':\r\n\t\t\t\tif (row.status !== 'COMPLETED') {\r\n\t\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\t\ttitle: 'Delete Campaign',\r\n\t\t\t\t\t\tcontent:\r\n\t\t\t\t\t\t\t'Are you sure you want to Delete this Campaign?',\r\n\t\t\t\t\t\turl: `/campaign/${row.id}/delete`,\r\n\t\t\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\t\t\tmessage: 'Selected campaign is successfully deleted',\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'live':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Resume Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Resume this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/resume`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully resume',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate campaignConfirmationDialog(\r\n\t\tid: string,\r\n\t\tdata: {\r\n\t\t\ttitle: string;\r\n\t\t\tcontent: string;\r\n\t\t\turl: string;\r\n\t\t\tmethod: string;\r\n\t\t\tmessage: string;\r\n\t\t}\r\n\t): void {\r\n\t\tconst confirmation = new ConfirmationModel();\r\n\t\tconfirmation.title = data.title;\r\n\t\tconfirmation.content = data.content;\r\n\t\tconfirmation.btnSubmit = 'Yes';\r\n\t\tconfirmation.btnCancel = 'No';\r\n\r\n\t\tconst subs = this.dialog\r\n\t\t\t.open(ConfirmationComponent, {\r\n\t\t\t\tautoFocus: false,\r\n\t\t\t\tbackdropClass: 'overlay-backdrop-dialog',\r\n\t\t\t\tdata: confirmation,\r\n\t\t\t})\r\n\t\t\t.afterClosed()\r\n\t\t\t.subscribe(resp => {\r\n\t\t\t\tif (!resp) return;\r\n\r\n\t\t\t\tthis.campaignService(data);\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate campaignService(data: {\r\n\t\turl: string;\r\n\t\tmethod: string;\r\n\t\tmessage: string;\r\n\t}): void {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], data.url, data.method)\r\n\t\t\t.subscribe(() => {\r\n\t\t\t\tthis.toastr.error(data.message);\r\n\t\t\t\tthis.updateTable.emit();\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\teditCampaign(row: CampaignsListModel): void {\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t\twindow.history.replaceState({}, '', `/secure/campaign/${row.id}`);\r\n\t\tthis.currentView.emit(this.currentViews.NewCampaign);\r\n\t}\r\n\r\n\tpublic openViewDialog(\r\n\t\trow: CampaignResponseDtoApi,\r\n\t\tisShowButton: boolean = false\r\n\t): void {\r\n\t\tlocalStorage.setItem(\r\n\t\t\t'telin.campaign',\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tgeneralInformation: {\r\n\t\t\t\t\tid: row?.id,\r\n\t\t\t\t\tisShowButton: isShowButton,\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tconst subs = this.dialog\r\n\t\t\t.open(PendingApprovalDialogViewComponent, {\r\n\t\t\t\tautoFocus: false,\r\n\t\t\t\theight: 'calc(100% - 30px)',\r\n\t\t\t\twidth: 'calc(100% - 30px)',\r\n\t\t\t\tmaxWidth: '100%',\r\n\t\t\t\tmaxHeight: '100%',\r\n\t\t\t\tbackdropClass: 'overlay-backdrop-dialog',\r\n\t\t\t})\r\n\t\t\t.afterClosed()\r\n\t\t\t.subscribe(() => {\r\n\t\t\t\tthis.updateTable.emit();\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate convertUTCDateToLocalDate(date: Date) {\r\n\t\tconst newDate = new Date(\r\n\t\t\tdate.getTime() - date.getTimezoneOffset() * 60 * 1000\r\n\t\t);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n\tNgbDropdownModule,\r\n\tNgbPaginationModule,\r\n} from '@ng-bootstrap/ng-bootstrap';\r\nimport { MatSelectInfiniteScrollDirective } from '../../../core/directives';\r\nimport { SearchModule } from '../../../global/search/search.module';\r\nimport { CampaignIndexComponent } from './campaign-index.component';\r\nimport { FilterInListOfCampaignComponent } from './component/filter-in-list-of-campaign';\r\nimport { ViewingListOfCampaignTableComponent } from './component/viewing-list-of-campaign-table';\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tViewingListOfCampaignTableComponent,\r\n\t\tFilterInListOfCampaignComponent,\r\n\t\tCampaignIndexComponent,\r\n\t\tMatSelectInfiniteScrollDirective,\r\n\t],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatDatepickerModule,\r\n\t\tMatTableModule,\r\n\t\tMatSortModule,\r\n\t\tMatPaginatorModule,\r\n\t\tMatDialogModule,\r\n\t\tMatTabsModule,\r\n\t\tMatCardModule,\r\n\t\tMatCheckboxModule,\r\n\t\tMatSelectModule,\r\n\t\tMatRadioModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n\t\tMatChipsModule,\r\n\t\tNgbPaginationModule,\r\n\t\tNgbDropdownModule,\r\n\t\tMatChipsModule,\r\n\t\tMatGridListModule,\r\n\t\tMatNativeDateModule,\r\n\t\tSearchModule,\r\n\t\tMatToolbarModule,\r\n\t\tMatTooltipModule,\r\n\t],\r\n\texports: [CampaignIndexComponent, MatSelectInfiniteScrollDirective],\r\n})\r\nexport class CampaignIndexModule {}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { EChartsOption } from 'echarts';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tCampaignPerformanceChartConfig,\r\n\tConversationInsightsChartConfig,\r\n\tPlatformOptionConst,\r\n\tWidgetLiveCampaignConst,\r\n} from '../../../core/const';\r\nimport { PastTimeEnum } from '../../../core/enums';\r\nimport { MainArea } from '../../../core/enums/main-area.enum';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models/app-response';\r\nimport { AppResponseAdl } from '../../../core/models/util/api-dto/response-models/app-response-adl';\r\nimport { ApiAdapterServiceService } from '../../../core/services';\r\nimport { CampaignCountFinalResponseDtoExternal } from '../../models/campaign-count-final-response-dto.model';\r\nimport { ConversationChartResponseDto } from '../campaign-index/models/conversation-chart-response-dto.model';\r\nimport { PerformanceChartResponseDto } from '../campaign-index/models/performance-chart-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-dashboard',\r\n\ttemplateUrl: './dashboard.component.html',\r\n\tstyleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit, OnDestroy {\r\n\tpublic currentViews = MainArea;\r\n\tpublic pastTime = PastTimeEnum;\r\n\r\n\tpublic channelOption: any[] = PlatformOptionConst;\r\n\tpublic performanceCategories: string[] = [];\r\n\tpublic totalCmpn: number[] = [];\r\n\tpublic deliveryRt: number[] = [];\r\n\tpublic costDesc: number[] = [];\r\n\tpublic convsData: any[][] = [];\r\n\r\n\tpublic widgetLiveCampaign = WidgetLiveCampaignConst;\r\n\tpublic conversationChartData: EChartsOption;\r\n\tpublic performanceChartData: EChartsOption;\r\n\tpublic selectedPlatform: any = '';\r\n\tpublic filterEvent: any = 'currentWeek';\r\n\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {}\r\n\r\n\tngOnInit(): void {}\r\n\r\n\tpublic changeCurrentView(area: MainArea) {\r\n\t\tthis.currentView.emit(area);\r\n\t}\r\n\r\n\tpublic filterChart(event: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst timeUnit =\r\n\t\t\tevent == PastTimeEnum.Today\r\n\t\t\t\t? 'daily'\r\n\t\t\t\t: event == PastTimeEnum.CurrentWeek\r\n\t\t\t\t? 'weekly'\r\n\t\t\t\t: event == PastTimeEnum.CurrentMonth\r\n\t\t\t\t? 'monthly'\r\n\t\t\t\t: '';\r\n\r\n\t\t/* const parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t]; */\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], '/campaign/count', 'GET')\r\n\t\t\t.subscribe(\r\n\t\t\t\t(res: AppResponse<CampaignCountFinalResponseDtoExternal>) => {\r\n\t\t\t\t\tconst date =\r\n\t\t\t\t\t\t(res?.data?.totalCampaignPercent ?? 0) +\r\n\t\t\t\t\t\t'% Since ' +\r\n\t\t\t\t\t\tthis.getStatictsWidgetString(event);\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].value =\r\n\t\t\t\t\t\tres?.data?.totalCampaign ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].value =\r\n\t\t\t\t\t\tres?.data?.totalLive ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].value =\r\n\t\t\t\t\t\tres?.data?.totalPending ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\r\n\t\tthis.getPerformanceDetails(timeUnit);\r\n\t\tthis.getConversationDetails(timeUnit);\r\n\t}\r\n\r\n\tprivate getPerformanceDetails(timeUnit: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setPerformanceChartData();\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue:\r\n\t\t\t\t\tthis.selectedPlatform === 'WHATSAPP'\r\n\t\t\t\t\t\t? 'WA'\r\n\t\t\t\t\t\t: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\tparameterList,\r\n\t\t\t\t'/report/campaign/performance',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponseAdl<PerformanceChartResponseDto>) => {\r\n\t\t\t\tthis.performanceCategories = [];\r\n\t\t\t\tthis.totalCmpn = [];\r\n\t\t\t\tthis.deliveryRt = [];\r\n\t\t\t\tthis.costDesc = [];\r\n\r\n\t\t\t\tif (res?.data && Object.entries(res.data).length !== 0) {\r\n\t\t\t\t\tfor (let item of res.data.categories) {\r\n\t\t\t\t\t\tthis.performanceCategories.push(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (let series of res.data.series) {\r\n\t\t\t\t\t\tif (series.name === 'Total Campaign') {\r\n\t\t\t\t\t\t\tthis.totalCmpn = series.data?.map(value => value);\r\n\t\t\t\t\t\t} else if (series.name === 'Delivery Rate') {\r\n\t\t\t\t\t\t\tthis.deliveryRt = series.data?.map(value => value);\r\n\t\t\t\t\t\t} else if (series.name === 'Cost Distribution') {\r\n\t\t\t\t\t\t\tthis.costDesc = series.data?.map(value => value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setPerformanceChartData();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate setPerformanceChartData() {\r\n\t\tthis.performanceChartData = ConversationInsightsChartConfig;\r\n\t\tthis.performanceChartData.xAxis.data = this.performanceCategories;\r\n\t\tthis.performanceChartData.series[0].data = this.deliveryRt;\r\n\t\tthis.performanceChartData.series[1].data = this.totalCmpn;\r\n\t\tthis.performanceChartData.series[2].data = this.costDesc;\r\n\t}\r\n\r\n\tprivate getConversationDetails(timeUnit: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setConversationChartData();\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue:\r\n\t\t\t\t\tthis.selectedPlatform === 'WHATSAPP'\r\n\t\t\t\t\t\t? 'WA'\r\n\t\t\t\t\t\t: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\tparameterList,\r\n\t\t\t\t'/report/campaign/conversation',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponseAdl<ConversationChartResponseDto>) => {\r\n\t\t\t\tthis.convsData = [];\r\n\r\n\t\t\t\tif (res?.data) {\r\n\t\t\t\t\tfor (let i = 0; i < res.data.categories?.length; i++) {\r\n\t\t\t\t\t\tthis.convsData[i] = new Array();\r\n\t\t\t\t\t\tthis.convsData[i].push(res.data.categories[i]);\r\n\r\n\t\t\t\t\t\tfor (let j = 1; j <= res.data.series?.length; j++) {\r\n\t\t\t\t\t\t\tthis.convsData[i].push(\r\n\t\t\t\t\t\t\t\tres.data.series[j - 1].data[i]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setConversationChartData();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate setConversationChartData() {\r\n\t\tthis.conversationChartData = CampaignPerformanceChartConfig;\r\n\t\tthis.convsData.forEach(data => {\r\n\t\t\tif (data) {\r\n\t\t\t\tthis.conversationChartData.dataset.source.push(data);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getStatictsWidgetString(event: string): string {\r\n\t\treturn event == PastTimeEnum.Today\r\n\t\t\t? PastTimeEnum.Yesterday\r\n\t\t\t: event == PastTimeEnum.CurrentWeek\r\n\t\t\t? PastTimeEnum.LastWeek\r\n\t\t\t: event == PastTimeEnum.CurrentMonth\r\n\t\t\t? PastTimeEnum.LastMonth\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { PickerModule } from '@ctrl/ngx-emoji-mart';\r\nimport { AngularEditorModule } from '@kolkov/angular-editor';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { DashboardComponent } from './dashboard.component';\r\n\r\n@NgModule({\r\n\tdeclarations: [DashboardComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatAutocompleteModule,\r\n\t\tFormsModule,\r\n\t\tMatGridListModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatSelectModule,\r\n\t\tMatRadioModule,\r\n\t\tMatListModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n\t\tPickerModule,\r\n\t\tAngularEditorModule,\r\n\t\tMatButtonToggleModule,\r\n\t\tMatDialogModule,\r\n\t\tMatTabsModule,\r\n\t\tMatBadgeModule,\r\n\t\tNgbDropdownModule,\r\n\t\tNgxEchartsModule,\r\n\t],\r\n\texports: [DashboardComponent],\r\n})\r\nexport class DashboardModule {}\r\n","export class FailoverReqModel {\r\n\tpublic active: boolean;\r\n\tpublic type: string;\r\n\tpublic interval: number;\r\n\tpublic accounts: FailoverAccountReqModel[];\r\n\r\n\tconstructor() {}\r\n\r\n\tpublic clone(source: any): FailoverReqModel {\r\n\t\tthis.active = source.active;\r\n\t\tthis.interval = source.interval ?? 0;\r\n\t\tthis.type = source.type ?? '';\r\n\r\n\t\tif (source.accounts) {\r\n\t\t\tthis.accounts = source.accounts.reduce((result, each) => {\r\n\t\t\t\tresult.push(new FailoverAccountReqModel().clone(each));\r\n\t\t\t\treturn result;\r\n\t\t\t}, []);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tfailover: this,\r\n\t\t};\r\n\t}\r\n}\r\n\r\nclass FailoverAccountReqModel {\r\n\tpublic accountId: string;\r\n\tpublic accountName: string;\r\n\tpublic subject: string;\r\n\tpublic platform: string;\r\n\tpublic template: {\r\n\t\tid: string;\r\n\t\tname: string;\r\n\t\tlang: string;\r\n\t\tdata: string[];\r\n\t};\r\n\r\n\tconstructor() {}\r\n\r\n\tpublic clone(source: any): FailoverAccountReqModel {\r\n\t\tthis.accountId = source.accountId?.id ?? '';\r\n\t\tthis.accountName = source.accountName ?? '';\r\n\t\tthis.subject = source.subject ?? '';\r\n\t\tthis.platform = source.platform ?? '';\r\n\t\tthis.template = {\r\n\t\t\tid: source.template?.ID ?? '',\r\n\t\t\tname: source.template?.name ?? source.template ?? '',\r\n\t\t\tlang: source.template?.lang ?? '',\r\n\t\t\tdata: source.paramBody?.map((t: any) => t.name) ?? [],\r\n\t\t};\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn this;\r\n\t}\r\n}\r\n","export class GeneralInformationWAReqModel {\r\n public name: string;\r\n public accountId: string;\r\n public type: string;\r\n public text: string;\r\n public subject: string;\r\n public image: {\r\n url: string;\r\n };\r\n public video: {\r\n url: string;\r\n };\r\n public document: {\r\n url: string;\r\n fileName: string;\r\n };\r\n public template: {\r\n id?: string;\r\n name: string;\r\n lang: string;\r\n headerUrl?: string;\r\n header: any;\r\n data: any[];\r\n button: any;\r\n buttonParams: any[];\r\n carousel?: any[];\r\n };\r\n public list: {\r\n button: string;\r\n sections: {\r\n title: string;\r\n items: {\r\n id: string;\r\n title: string;\r\n description: string;\r\n }[];\r\n }[];\r\n };\r\n public buttons: {\r\n type: string;\r\n id: string;\r\n title: string;\r\n }[];\r\n\r\n public category: string;\r\n public isNeedSave: boolean;\r\n public ttlSeconds: number;\r\n\r\n public clone(source: any): GeneralInformationWAReqModel {\r\n if (\r\n source?.media === 'IMAGE' ||\r\n source?.media === 'VIDEO' ||\r\n source?.media === 'DOCUMENT'\r\n ) {\r\n source.channel = source.media;\r\n }\r\n\r\n if (source.campaignName) {\r\n this.name = source.campaignName;\r\n }\r\n if (source.medium === 'EMAIL') {\r\n this.subject = source.campaignName;\r\n }\r\n if (source.from?.id) {\r\n this.accountId = source.from.id;\r\n }\r\n if (source.channel) {\r\n this.type = source.channel?.toLowerCase();\r\n }\r\n if (source.text) {\r\n this.text = source.text;\r\n }\r\n if (this.type === 'image' && source.fileName) {\r\n this.image = {\r\n url: source.targetURL,\r\n };\r\n }\r\n if (this.type === 'video' && source.fileName) {\r\n this.video = {\r\n url: source.targetURL,\r\n };\r\n }\r\n if (this.type === 'document' && source.fileName) {\r\n this.document = {\r\n url: source.targetURL,\r\n fileName: source.fileName,\r\n };\r\n }\r\n\r\n if (source.template) {\r\n let qrIndex = 0;\r\n const finalButtons =\r\n source.paramButton?.reduce((result: any[], each: any, idx: number) => {\r\n const btnDef = source.template?.buttons?.[idx];\r\n\r\n if (btnDef?.type === 'QUICK_REPLY') {\r\n const qrParam =\r\n source.buttonParams && source.buttonParams[qrIndex]\r\n ? source.buttonParams[qrIndex]\r\n : null;\r\n qrIndex++;\r\n result.push(\r\n qrParam ? [qrParam.payload ? qrParam.payload : qrParam.label] : []\r\n );\r\n } else {\r\n result.push(each.name?.map((t: any) => t.name) ?? []);\r\n }\r\n\r\n return result;\r\n }, []) ?? [];\r\n\r\n // CAROUSEL\r\n let carouselPayload = undefined;\r\n if (source.paramCarousel && source.paramCarousel.length > 0) {\r\n carouselPayload = source.paramCarousel.map((card: any) => {\r\n const mappedBody = (card.bodyParams || []).map((b: any) => b.paramName || '');\r\n const mappedButtons = (card.buttonParams || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((btn: any) => {\r\n if (btn.payload !== undefined && btn.payload !== null) {\r\n return btn.payload;\r\n }\r\n return btn.paramName || '';\r\n });\r\n });\r\n\r\n return {\r\n headerURL: card.headerURL || '',\r\n body: mappedBody,\r\n button: mappedButtons,\r\n };\r\n });\r\n }\r\n\r\n this.template = {\r\n id: source.template.ID,\r\n name: source.template.name,\r\n lang: source.template.lang,\r\n headerUrl: source.targetURL,\r\n header: source.paramHeader?.map((t: any) => t.name) ?? [],\r\n data:\r\n source.isUseExistingTemplate && source.variables?.length\r\n ? source.variables.map((v: any) => v.paramName)\r\n : (source.paramBody?.map((t: any) => t.name) ?? []),\r\n\r\n button: finalButtons,\r\n buttonParams: source.buttonParams\r\n ? source.buttonParams.map((btn: any) => {\r\n return {\r\n label: btn.label,\r\n payload: btn.payload ? btn.payload : btn.label,\r\n };\r\n })\r\n : [],\r\n ...(carouselPayload && carouselPayload.length > 0\r\n ? { carousel: carouselPayload }\r\n : {}),\r\n };\r\n\r\n if (source.template.category === 'AUTHENTICATION')\r\n this.template = {\r\n name: source.template.name,\r\n lang: source.template.lang,\r\n header: null,\r\n data: [source.otpValue],\r\n button: [[source.otpValue]],\r\n buttonParams: [],\r\n };\r\n\r\n if (source.template.ID) this.template.id = source.template.ID;\r\n }\r\n\r\n if (this.type === 'utility') {\r\n this.type = 'template';\r\n this.category = 'utility';\r\n\r\n const mappedVariables = source?.variables?.length\r\n ? source.variables.map((v: any) => v.paramName)\r\n : [];\r\n\r\n if (source?.isUseExistingTemplate) {\r\n this.template = {\r\n ...source.template,\r\n data: mappedVariables.length > 0 ? mappedVariables : source.template.data || [],\r\n };\r\n } else {\r\n this.template = {\r\n name: '',\r\n lang: 'id',\r\n header: null,\r\n button: null,\r\n data: mappedVariables,\r\n buttonParams: [],\r\n };\r\n }\r\n\r\n this.isNeedSave = source.isNeedSave;\r\n this.ttlSeconds = source.ttl;\r\n\r\n if (source?.isUseExistingTemplate) {\r\n this.text = source?.text || source?.template?.body?.text;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public convert(): any {\r\n return this;\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\n\r\nexport class SchedulerReqModel {\r\n\tpublic type: string;\r\n\tpublic startTime: string;\r\n\tpublic repeat: boolean;\r\n\tpublic tz: string;\r\n\tprivate datePipe: DatePipe;\r\n\r\n\tconstructor() {\r\n\t\tthis.datePipe = new DatePipe('en-US');\r\n\t}\r\n\r\n\tpublic clone(source: any): SchedulerReqModel {\r\n\t\tif (source.schedulerType) {\r\n\t\t\tthis.type = source.delivery ? 'MULTI' : source.schedulerType;\r\n\t\t}\r\n\t\tif (source.startDate) {\r\n\t\t\tthis.startTime = `${this.datePipe.transform(\r\n\t\t\t\tsource.startDate,\r\n\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t)} ${source.startTime}`;\r\n\t\t}\r\n\t\tif (source.delivery) {\r\n\t\t\tthis.repeat = source.delivery.toUpperCase();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\ttype: this.type,\r\n\t\t\tstartTime: this.startTime,\r\n\t\t\trepeat: this.repeat,\r\n\t\t\ttz: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n\t\t};\r\n\t}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormArray, FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { SegmentedMessage } from 'sms-segments-calculator';\r\nimport { MainArea } from '../../../core/enums';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../core/services';\r\nimport { ConfirmationComponent } from '../../../global/confirmation/confirmation';\r\nimport { ConfirmationModel } from '../../../global/confirmation/shared/model';\r\nimport { FailoverReqModel, GeneralInformationWAReqModel, SchedulerReqModel } from '../../models';\r\n\r\n@Component({\r\n selector: 'lib-new-campaign',\r\n templateUrl: './new-campaign.component.html',\r\n styleUrls: ['./new-campaign.component.scss'],\r\n})\r\nexport class NewCampaignComponent implements OnInit, OnDestroy {\r\n @Output() currentView = new EventEmitter<MainArea>();\r\n\r\n public campaignID: string;\r\n public currentViews = MainArea;\r\n public positionWizard: number = 1;\r\n public dataWizard: string[];\r\n public isLoading: boolean = false;\r\n public isSubmit: boolean = false;\r\n public isGeneralInformationValid: boolean = false;\r\n public isFailoverMechanismValid: boolean = false;\r\n public isNumberBaseInformationValid: boolean = false;\r\n public isSchedulerInformationValid: boolean = false;\r\n public isLine: boolean = false;\r\n public generalInformationData: any;\r\n public failoverMechanismData: any;\r\n public targetAudienceData: string[];\r\n public targetAudienceCount: number;\r\n public targetAudienceFile: any;\r\n public schedulerData: any;\r\n\r\n private isUploadTargetAudience: boolean = false;\r\n private subscribers: Subscription[] = [];\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService,\r\n private httpClient: HttpClient\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.campaignID = window.location.pathname?.split('/')?.pop();\r\n this.initWizard();\r\n this.getCampaignDetailService();\r\n }\r\n\r\n private initWizard(): void {\r\n if (!this.isLine) {\r\n this.dataWizard = [\r\n 'General Information',\r\n 'Failover Mechanism',\r\n 'Target Audience',\r\n 'Scheduler',\r\n 'Summary',\r\n ];\r\n return;\r\n }\r\n\r\n this.dataWizard = ['General Information', 'Target Audience', 'Scheduler', 'Summary'];\r\n }\r\n\r\n private getCampaignDetailService(): void {\r\n if (this.campaignID?.length < 10) return;\r\n\r\n this.isLoading = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest([], `/campaign/${this.campaignID}`, 'GET')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n const generalInformation = {\r\n campaignName: resp.data?.name,\r\n medium: resp.data?.platform,\r\n channel: ['image', 'video', 'document'].includes(resp.data?.type)\r\n ? 'MEDIA'\r\n : resp.data?.isDirectSend\r\n ? 'utility'\r\n : resp.data?.type?.toUpperCase(),\r\n media: resp.data?.type?.toUpperCase(),\r\n isPrevTemplate: resp?.data?.isPrevTemplate,\r\n templateName: resp?.data?.templateName,\r\n ttl: resp?.data?.ttlSeconds,\r\n from: {\r\n id: resp.data?.accountId,\r\n name: resp.data?.accountName,\r\n platform: resp.data?.platform,\r\n clientId: resp.data?.clientId,\r\n clientName: resp.data?.clientName,\r\n accountNo: resp.data?.accountNo,\r\n wabaId: resp.data?.wabaId ?? '',\r\n },\r\n text: resp.data?.details?.text,\r\n targetURL:\r\n resp.data?.details?.image?.url ??\r\n resp.data?.details?.document?.url ??\r\n resp.data?.details?.video?.url ??\r\n resp.data?.details?.template?.headerURL,\r\n paramHeader: resp.data?.details?.template?.header,\r\n paramBody: resp.data?.details?.template?.data,\r\n paramButton: resp.data?.details?.template?.button,\r\n paramCarousel:\r\n resp.data?.details?.template?.carousel?.map((card: any) => {\r\n return {\r\n headerURL: card.headerURL || '',\r\n bodyParams: (card.body || []).map((val: string) => ({\r\n paramName: val,\r\n })),\r\n buttonParams: (card.button || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((val: string) => ({\r\n paramName: val,\r\n payload: val,\r\n }));\r\n }),\r\n };\r\n }) || [],\r\n otpValue: [...(resp.data?.details?.template?.data ?? [])]?.pop(),\r\n variables: (resp.data?.details?.template?.data || []).map(\r\n (val: string) => ({\r\n paramName: val,\r\n })\r\n ),\r\n isUseExistingTemplate: !!resp.data?.templateName,\r\n template: {\r\n ID: resp.data?.details?.template?.id,\r\n name: resp.data?.details?.template?.name,\r\n lang: resp.data?.details?.template?.lang,\r\n platform: resp.data?.platform,\r\n headerURL: resp.data?.details?.template?.headerURL,\r\n header: {\r\n examples: resp.data?.details?.template?.header,\r\n },\r\n body: {\r\n examples: resp.data?.details?.template?.data,\r\n },\r\n buttons: resp.data?.details?.template?.button,\r\n ClientId: resp.data?.clientId,\r\n ClientName: resp.data?.clientName,\r\n },\r\n isUpload: resp.data?.fileId !== '',\r\n fileId: resp.data?.fileId,\r\n };\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data?.id,\r\n form: generalInformation,\r\n },\r\n failover: resp.data?.failover,\r\n targetAudience: resp.data?.targets,\r\n targetAudienceFile: {\r\n name: resp.data?.fileName,\r\n targetURL: resp.data?.targetURL,\r\n },\r\n scheduler: {\r\n schedulerType:\r\n resp.data?.scheduleType === 'MULTI'\r\n ? 'ONE_TIME'\r\n : resp.data?.scheduleType,\r\n startDate: resp.data?.startTime?.split(' ')[0],\r\n startTime: resp.data?.startTime?.split(' ')[1],\r\n isRepeat: resp.data?.scheduleType === 'MULTI',\r\n delivery: resp.data?.repeat,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isLine = resp.data?.platform === 'LINE';\r\n this.isLoading = false;\r\n\r\n this.initWizard();\r\n },\r\n () => {\r\n this.isLoading = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public generalInformation(form: { parent: FormGroup; child: FormGroup }): void {\r\n this.isGeneralInformationValid = form.parent.valid && form.child && form.child?.valid;\r\n this.isLine = form.parent?.getRawValue()?.medium === 'LINE';\r\n\r\n this.initWizard();\r\n\r\n if (form.parent && form.child)\r\n this.generalInformationData = {\r\n ...form.parent.getRawValue(),\r\n ...form.child.getRawValue(),\r\n };\r\n }\r\n\r\n public failoverMechanism(form: FormGroup): void {\r\n this.isFailoverMechanismValid = form.valid;\r\n this.failoverMechanismData = form.getRawValue();\r\n }\r\n\r\n public targetAudience(target: {\r\n targetAudience: string[];\r\n numberCount: number;\r\n isUpload: boolean;\r\n file: any;\r\n }): void {\r\n this.targetAudienceFile = target.file;\r\n this.targetAudienceData = target.targetAudience;\r\n this.targetAudienceCount = target.numberCount;\r\n this.isUploadTargetAudience = target.isUpload;\r\n this.isNumberBaseInformationValid =\r\n (target.isUpload && target.file?.name) ||\r\n (!target.isUpload && target.targetAudience.length > 0) ||\r\n this.getCampaignStorage?.generalInformation?.form?.fileId;\r\n }\r\n\r\n public scheduler(form: FormGroup): void {\r\n this.schedulerData = form.getRawValue();\r\n this.isSchedulerInformationValid = form.valid;\r\n }\r\n\r\n public onClickSaveAndNextButton(): void {\r\n this.isSubmit = true;\r\n\r\n switch (this.positionWizard) {\r\n case 1:\r\n this.saveGeneralInformationService();\r\n break;\r\n case 2:\r\n !this.isLine ? this.saveFailoverMechanismService() : this.saveNumberBasesService();\r\n break;\r\n case 3:\r\n !this.isLine ? this.saveNumberBasesService() : this.saveSchedulerService();\r\n break;\r\n case 4:\r\n if (!this.isLine) this.saveSchedulerService();\r\n break;\r\n default:\r\n this.isSubmit = false;\r\n break;\r\n }\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n get getBody(): string {\r\n const body =\r\n this.generalInformationData?.text ||\r\n this.generalInformationData?.template?.body?.text ||\r\n this.generalInformationData?.body?.text;\r\n\r\n return (\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n );\r\n }\r\n\r\n public onCheckTwilioCounterValid = (): boolean => {\r\n const valuesGeneral = this.generalInformationData;\r\n\r\n if (valuesGeneral?.medium !== 'SMS') {\r\n return true;\r\n }\r\n\r\n if (valuesGeneral?.channel === 'TEXT') {\r\n const segmentedMessage = new SegmentedMessage(this.getBody);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n if (result.segments > 10) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n let valueResult = this.getBody;\r\n Array.from(valuesGeneral.template?.body?.examples || []).map((entry, index) => {\r\n if (valuesGeneral.paramBody.length > 0) {\r\n const placeholder = `{{${entry}}}`;\r\n const value = valuesGeneral.paramBody[index].name;\r\n valueResult = valueResult.split(placeholder).join(value);\r\n }\r\n });\r\n\r\n const segmentedMessage = new SegmentedMessage(valueResult);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n if (result.segments > 10) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n };\r\n\r\n private async saveGeneralInformationService(): Promise<void> {\r\n if (!this.onCheckTwilioCounterValid()) {\r\n this.toastr.error('Segment cannot more than 10');\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n const bodyReq = new GeneralInformationWAReqModel().clone({\r\n ...this.generalInformationData,\r\n });\r\n\r\n const payloadValue = bodyReq.convert();\r\n\r\n this.saveGeneralInformation(payloadValue);\r\n }\r\n\r\n private saveGeneralInformation(payloadValue: any): void {\r\n if (payloadValue.template && this.generalInformationData.template) {\r\n payloadValue.template.type =\r\n payloadValue.template.type || this.generalInformationData.template.category;\r\n }\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: payloadValue,\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n if (payloadValue.template && payloadValue.template.buttonParams) {\r\n delete payloadValue.template.buttonParams;\r\n }\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n this.generalInformationData.id\r\n ? `/campaign/${this.generalInformationData.id}`\r\n : '/campaign',\r\n this.generalInformationData.id ? 'PUT' : 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data.id,\r\n form: this.generalInformationData,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveFailoverMechanismService(): void {\r\n const bodyReq = new FailoverReqModel().clone({\r\n ...this.failoverMechanismData,\r\n });\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: bodyReq.convert(),\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/failover`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n failover: this.failoverMechanismData,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveNumberBasesService(): void {\r\n if (this.targetAudienceData.length === 0 || this.isUploadTargetAudience) {\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n targetAudience: this.targetAudienceData,\r\n targetAudienceCount: this.targetAudienceCount,\r\n targetAudienceFile: this.targetAudienceFile,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n return;\r\n }\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: {\r\n targets: this.targetAudienceData,\r\n numberCount: this.targetAudienceCount,\r\n },\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/targetcategory`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n targetAudience: this.targetAudienceData,\r\n targetAudienceCount: this.targetAudienceCount,\r\n targetAudienceFile: this.targetAudienceFile,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveSchedulerService(): void {\r\n const bodyReq = new SchedulerReqModel().clone({\r\n ...this.schedulerData,\r\n });\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: bodyReq.convert(),\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/schedule`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n scheduler: this.schedulerData,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onPrevious(): void {\r\n this.positionWizard -= 1;\r\n }\r\n\r\n public changeCurrentView(area: MainArea) {\r\n this.openConfirmationDialog(area);\r\n }\r\n\r\n private openConfirmationDialog(area: MainArea): void {\r\n const confirmation = new ConfirmationModel();\r\n\r\n confirmation.title = 'Cancel Add Broadcast';\r\n confirmation.content = `Are you sure you want to cancel<br/> Add Broadcast?`;\r\n confirmation.btnSubmitRed = 'Yes';\r\n confirmation.btnCancel = 'No';\r\n\r\n const subs = this.dialog\r\n .open(ConfirmationComponent, {\r\n autoFocus: false,\r\n backdropClass: 'overlay-backdrop-dialog',\r\n data: confirmation,\r\n })\r\n .afterClosed()\r\n .subscribe((resp) => {\r\n if (resp) {\r\n window.history.replaceState(\r\n {},\r\n `/${this.getCampaignStorage?.generalInformation?.id}`,\r\n '/secure/campaign'\r\n );\r\n\r\n this.currentView.emit(area);\r\n }\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onSubmitForApproval(): void {\r\n const parameterList: Array<Parameter> = [];\r\n this.isSubmit = true;\r\n\r\n if (this.getCampaignStorage?.targetAudienceFile?.name)\r\n parameterList.push({\r\n name: 'isFile',\r\n value: true,\r\n in: 'query',\r\n type: 'string',\r\n });\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/submit`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n window.history.replaceState(\r\n {},\r\n `/${this.getCampaignStorage?.generalInformation?.id}`,\r\n '/secure/campaign'\r\n );\r\n\r\n this.toastr.success('Campaign submitted for approval!');\r\n this.isSubmit = false;\r\n this.currentView.emit(this.currentViews.CampaignIndex);\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationEmailMessageValidationConst,\r\n\tMsgTypeEmailOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-general-information-email',\r\n\ttemplateUrl: './general-information-email.component.html',\r\n\tstyleUrls: ['./general-information-email.component.scss'],\r\n})\r\nexport class GeneralInformationEmailComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic validationMessages: any;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\tpublic isHaveTemplateParam: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = GeneralInformationEmailMessageValidationConst;\r\n\t\tthis.msgTypeWAOption = MsgTypeEmailOptionConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium ===\r\n\t\t\t\t'EMAIL'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null, Validators.required),\r\n\t\t\ttemplate: new FormControl(null, Validators.required),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t\tisUpload: new FormControl(false),\r\n\t\t\tfileId: new FormControl(''),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !==\r\n\t\t\t\t'EMAIL'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('isUpload')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.isUpload\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('fileId')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.fileId);\r\n\r\n\t\tthis.isHaveTemplateParam = this.form.get('isUpload').value;\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tget getIsTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.getIsTemplate) {\r\n\t\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t} else {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic formReset(_isMediaType: boolean = false): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'EMAIL', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'EMAIL', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'wabaId',\r\n\t\t\t\tthis.form.get('from').value?.wabaId ?? '',\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\r\n\t\t\t\t\tif (this.form.get('isUpload').value)\r\n\t\t\t\t\t\treturn this.updateDownloadCSV(\r\n\t\t\t\t\t\t\tthis.form.get('isUpload').value\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue: value,\r\n\t\t\t\t\tdisabled:\r\n\t\t\t\t\t\tthis.isReadOnlyMode ||\r\n\t\t\t\t\t\t['UnsubscribeAccount'].includes(value),\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tthis.isHaveTemplateParam = template.body.examples?.length > 0;\r\n\r\n\t\ttemplate.body.examples?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\ttemplate.body.examples?.forEach((each, index) => {\r\n\t\t\tlet paramValue =\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t'';\r\n\r\n\t\t\tif (['UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n\t\t\tthis.addParamBody(paramValue);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateDownloadCSV(isChecked: boolean): void {\r\n\t\tthis.form.get('isUpload').setValue(isChecked);\r\n\r\n\t\tif (isChecked) {\r\n\t\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\t\tthis.form.get('paramBody').clearValidators();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationLineMessageValidationConst,\r\n\tMsgTypeLineOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n@Component({\r\n\tselector: 'lib-general-information-line',\r\n\ttemplateUrl: './general-information-line.component.html',\r\n\tstyleUrls: ['./general-information-line.component.scss'],\r\n})\r\nexport class GeneralInformationLineComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic validationMessages: any;\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.msgTypeWAOption = MsgTypeLineOptionConst;\r\n\t\tthis.validationMessages = GeneralInformationLineMessageValidationConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium === 'LINE'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null),\r\n\t\t\ttemplate: new FormControl(null),\r\n\t\t\tisJSON: new FormControl(false),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !== 'LINE'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.isText) {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t}\r\n\r\n\tpublic formReset(): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'LINE', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'LINE', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{ value: value, disabled: this.isReadOnlyMode },\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tget isText(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'text'\r\n\t\t);\r\n\t}\r\n\r\n\tget isTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tlet bodyText = template.body.text;\r\n\r\n\t\tif (this.isJsonString(template.body.text)) {\r\n\t\t\tbodyText = JSON.parse(template.body.text).text;\r\n\t\t}\r\n\r\n\t\tthis.form.get('isJSON').setValue(this.isJsonString(template.body.text));\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tconst findBrackets = bodyText?.match(/{{/g);\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\tfindBrackets?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\tfindBrackets?.forEach((_, index) => {\r\n\t\t\tthis.addParamBody(\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t\t''\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t}\r\n\r\n\tprivate isJsonString(str: string): boolean {\r\n\t\ttry {\r\n\t\t\tJSON.parse(str);\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(null, searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationSMSMessageValidationConst,\r\n\tMsgTypeWAOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-general-information-sms',\r\n\ttemplateUrl: './general-information-sms.component.html',\r\n\tstyleUrls: ['./general-information-sms.component.scss'],\r\n})\r\nexport class GeneralInformationSMSComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic validationMessages: any;\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\tpublic isHaveTemplateParam: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.msgTypeWAOption = MsgTypeWAOptionConst.filter(\r\n\t\t\tt => t.code === 'TEXT' || t.code === 'TEMPLATE'\r\n\t\t);\r\n\t\tthis.validationMessages = GeneralInformationSMSMessageValidationConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium === 'SMS'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null, Validators.required),\r\n\t\t\ttemplate: new FormControl(null, Validators.required),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t\tisUpload: new FormControl(false),\r\n\t\t\tfileId: new FormControl(''),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !== 'SMS'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('isUpload')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.isUpload\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('fileId')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.fileId);\r\n\r\n\t\tthis.isHaveTemplateParam = this.form.get('isUpload').value;\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tget getIsTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.getIsTemplate) {\r\n\t\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t} else {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic formReset(_isMediaType: boolean = false): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'SMS', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'SMS', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'wabaId',\r\n\t\t\t\tthis.form.get('from').value?.wabaId ?? '',\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\r\n\t\t\t\t\tif (this.form.get('isUpload').value)\r\n\t\t\t\t\t\treturn this.updateDownloadCSV(\r\n\t\t\t\t\t\t\tthis.form.get('isUpload').value\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue: value,\r\n\t\t\t\t\tdisabled:\r\n\t\t\t\t\t\tthis.isReadOnlyMode ||\r\n\t\t\t\t\t\t['UnsubscribeAccount'].includes(value),\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tthis.isHaveTemplateParam = template.body.examples?.length > 0;\r\n\r\n\t\ttemplate.body.examples?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\ttemplate.body.examples?.forEach((each, index) => {\r\n\t\t\tlet paramValue =\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t'';\r\n\r\n\t\t\tif (['UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n\t\t\tthis.addParamBody(paramValue);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService('', searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateDownloadCSV(isChecked: boolean): void {\r\n\t\tthis.form.get('isUpload').setValue(isChecked);\r\n\r\n\t\tif (isChecked) {\r\n\t\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\t\tthis.form.get('paramBody').clearValidators();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { Validators as AngularValidators } from '@angular/forms';\r\nimport { maxValidator } from './max.validator';\r\nimport { minValidator } from './min.validator';\r\nimport { requiredValidator } from './required.validator';\r\n\r\nexport const Validators = {\r\n compose: AngularValidators.compose,\r\n composeAync: AngularValidators.composeAsync,\r\n max: maxValidator,\r\n min: minValidator,\r\n required: requiredValidator,\r\n};\r\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\r\nexport const maxValidator = (max: number, message: string) => {\r\n\treturn (AC: AbstractControl): ValidationErrors | null => {\r\n\t\tconst isError = Validators.max(max)(AC);\r\n\t\tif (isError)\r\n\t\t\treturn {\r\n\t\t\t\tmax: max,\r\n\t\t\t\tactual: AC.value,\r\n\t\t\t\tmessage: message || `Max Value equals to ${max}`,\r\n\t\t\t};\r\n\t\treturn null;\r\n\t};\r\n};\r\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\r\nexport const minValidator = (min: number, message: string) => {\r\n\treturn (AC: AbstractControl): ValidationErrors | null => {\r\n\t\tconst isError = Validators.min(min)(AC);\r\n\t\tif (isError)\r\n\t\t\treturn {\r\n\t\t\t\tmin: min,\r\n\t\t\t\tactual: AC.value,\r\n\t\t\t\tmessage: message || `Min Value equals to ${min}`,\r\n\t\t\t};\r\n\t\treturn null;\r\n\t};\r\n};\r\n","import { MapsAPILoader } from '@agm/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n GeneralInformationWAMessageValidationConst,\r\n MediaTypeOptionConst,\r\n MsgTypeWAOptionConst,\r\n} from '../../../../../core/const';\r\nimport { ProductCategoryEnum } from '../../../../../core/enums';\r\nimport { BaseOptionModel } from '../../../../../core/models';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { generateEnumOption } from '../../../../../core/util';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\nimport { EnumData } from '../../../../util/enums';\r\nimport { Validators as CustomValidators } from '../../../../validators';\r\n\r\ninterface IMaps {\r\n zoom: number;\r\n latitude: number | null;\r\n longitude: number | null;\r\n isDraggable: boolean;\r\n isDoubleClickZoom: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-general-information-wa',\r\n templateUrl: './general-information-wa.component.html',\r\n styleUrls: ['./general-information-wa.component.scss'],\r\n})\r\nexport class GeneralInformationWAComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n public form!: FormGroup;\r\n public msgTypeWAOption: any[] = [];\r\n public mediaTypeOption: any[] = [];\r\n public categoryOption!: BaseOptionModel[];\r\n public accountOption: WhatsAppAccountDto[] = [];\r\n public isHaveNextAccountOption: boolean = true;\r\n public isLoadingAccountOption: boolean = false;\r\n public templateOption: TemplateWAModel[] = [];\r\n public isHaveNextTemplateOption: boolean = true;\r\n public isLoadingTemplateOption: boolean = false;\r\n public isHaveTemplateParam: boolean = false;\r\n public isShowParameter: boolean = false;\r\n public validationMessages: any;\r\n public extFileAccepted: string = 'image/*';\r\n public maps!: IMaps;\r\n\r\n private pageNoAccountOption: number = 1;\r\n private pageNoTemplateOption: number = 1;\r\n private subscribers: Subscription[] = [];\r\n private geoCoder: any;\r\n\r\n public templates = [\r\n { label: 'Create New', value: false },\r\n { label: 'Use existing template', value: true },\r\n ];\r\n\r\n @Input() public isReadOnlyMode!: boolean;\r\n\r\n @Input()\r\n set isTouchedForm(status: boolean) {\r\n if (!this.updateGeneralInformationForm) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.updateGeneralInformationForm.emit(this.form);\r\n });\r\n }\r\n\r\n @ViewChild('mapSearch') mapSearchRef!: ElementRef;\r\n\r\n public isCheckUtility: boolean = false;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private mapsAPILoader: MapsAPILoader,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService,\r\n private httpClient: HttpClient\r\n ) {\r\n this.updateGeneralInformationForm = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.msgTypeWAOption = MsgTypeWAOptionConst;\r\n this.mediaTypeOption = MediaTypeOptionConst;\r\n this.categoryOption = generateEnumOption(ProductCategoryEnum);\r\n this.validationMessages = GeneralInformationWAMessageValidationConst;\r\n this.maps = {\r\n zoom: 15,\r\n latitude: null,\r\n longitude: null,\r\n isDraggable: true,\r\n isDoubleClickZoom: true,\r\n };\r\n\r\n this.initForm();\r\n this.initDisable();\r\n this.initEdit();\r\n this.initValidation();\r\n this.getAccountOptionService(\r\n this.getCampaignStorage?.generalInformation?.form?.medium === 'WA'\r\n ? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n : ''\r\n );\r\n /* this.setCurrentLocation(); */\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n const campaignData = localStorage.getItem('telin.campaign');\r\n return campaignData ? JSON.parse(campaignData) : {};\r\n }\r\n\r\n private initForm(): void {\r\n this.form = new FormGroup({\r\n channel: new FormControl(null, Validators.required),\r\n media: new FormControl(null),\r\n from: new FormControl(null),\r\n text: new FormControl(null),\r\n fileName: new FormControl(null),\r\n targetURL: new FormControl(null),\r\n fileType: new FormControl(null),\r\n file: new FormControl(null),\r\n latitude: new FormControl(null),\r\n longitude: new FormControl(null),\r\n template: new FormControl(null),\r\n paramHeader: new FormArray([], Validators.required),\r\n paramBody: new FormArray([], Validators.required),\r\n paramButton: new FormArray([], Validators.required),\r\n otpValue: new FormControl(''),\r\n isUpload: new FormControl(false),\r\n fileId: new FormControl(''),\r\n category: new FormControl(null),\r\n product: new FormControl(null),\r\n catalogue: new FormControl(null),\r\n body: new FormControl(null),\r\n isUseExistingTemplate: new FormControl(false),\r\n isNeedSave: new FormControl(false),\r\n ttl: new FormControl(null),\r\n isDownloadVariableXLS: new FormControl(false),\r\n variables: new FormArray([]),\r\n useXlsx: new FormControl(false),\r\n buttonParams: new FormArray([]),\r\n paramCarousel: new FormArray([]),\r\n });\r\n\r\n this.form.valueChanges.subscribe(() => {\r\n setTimeout(() => {\r\n this.updateGeneralInformationForm.emit(this.form);\r\n });\r\n });\r\n this.form.get('isUpload')?.valueChanges.subscribe((val) => {\r\n this.toggleExcelValidation(val);\r\n });\r\n }\r\n\r\n private initDisable(): void {\r\n if (!this.isReadOnlyMode) {\r\n return;\r\n }\r\n\r\n this.form.disable();\r\n }\r\n\r\n private initEdit(): void {\r\n const storageData = this.getCampaignStorage;\r\n const formValues = storageData?.generalInformation?.form;\r\n if (\r\n !storageData ||\r\n Object.entries(storageData).length === 0 ||\r\n formValues?.medium !== 'WA'\r\n ) {\r\n return;\r\n }\r\n this.getControl('channel')?.setValue(formValues?.channel);\r\n this.getControl('media')?.setValue(formValues?.media);\r\n this.getControl('from')?.setValue(formValues?.from);\r\n this.getControl('text')?.setValue(formValues?.text);\r\n this.getControl('targetURL')?.setValue(formValues?.targetURL);\r\n this.getControl('fileName')?.setValue(\r\n formValues?.fileName ?? this.getControl('targetURL')?.value\r\n );\r\n this.getControl('template')?.setValue(formValues?.template);\r\n this.getControl('isUpload')?.setValue(formValues?.isUpload);\r\n this.getControl('fileId')?.setValue(formValues?.fileId);\r\n this.getControl('otpValue')?.setValue(formValues?.otpValue);\r\n this.getControl('isUseExistingTemplate')?.setValue(\r\n formValues?.isUseExistingTemplate !== undefined\r\n ? formValues.isUseExistingTemplate\r\n : !!formValues?.template?.name\r\n );\r\n this.getControl('isNeedSave')?.setValue(!!formValues?.isNeedSave);\r\n this.getControl('isDownloadVariableXLS')?.setValue(formValues?.isDownloadVariableXLS);\r\n this.getControl('ttl')?.setValue(formValues?.ttl);\r\n\r\n const savedVariables = formValues?.variables;\r\n if (savedVariables && Array.isArray(savedVariables) && savedVariables.length > 0) {\r\n this.variables.clear();\r\n\r\n savedVariables.forEach((item: any) => {\r\n this.variables.push(\r\n new FormGroup({\r\n paramName: new FormControl({\r\n value: item.paramName || '',\r\n disabled: this.isReadOnlyMode,\r\n }),\r\n })\r\n );\r\n });\r\n }\r\n\r\n this.isHaveTemplateParam = this.getControl('isUpload')?.value;\r\n this.getTemplateOptionService(null, this.getControl('template')?.value?.name);\r\n }\r\n\r\n private initValidation(): void {\r\n if (!this.form) return;\r\n\r\n for (const key in this.form.controls) {\r\n if (this.form.controls[key]) {\r\n this.form.controls[key].clearValidators();\r\n this.form.controls[key].updateValueAndValidity();\r\n }\r\n }\r\n\r\n this.getControl('channel')?.setValidators(Validators.required);\r\n\r\n if (this.getIsText) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n } else if (this.getIsMedia) {\r\n this.getControl('media')?.setValidators(Validators.required);\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('fileName')?.setValidators(Validators.required);\r\n this.getControl('media')?.updateValueAndValidity();\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('fileName')?.updateValueAndValidity();\r\n } else if (this.getIsTemplate) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('template')?.setValidators(Validators.required);\r\n this.getControl('paramHeader')?.setValidators(Validators.required);\r\n this.getControl('paramBody')?.setValidators(Validators.required);\r\n this.getControl('paramButton')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n } else if (this.getIsCatalogue) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('category')?.setValidators(Validators.required);\r\n this.getControl('catalogue')?.setValidators(Validators.required);\r\n this.getControl('product')?.setValidators(Validators.required);\r\n this.getControl('body')?.setValidators(Validators.maxLength(100));\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('category')?.updateValueAndValidity();\r\n this.getControl('catalogue')?.updateValueAndValidity();\r\n this.getControl('product')?.updateValueAndValidity();\r\n this.getControl('body')?.updateValueAndValidity();\r\n } else if (this.getIsUtility) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators([\r\n Validators.required,\r\n Validators.maxLength(1024),\r\n ]);\r\n this.getControl('ttl')?.setValidators([\r\n CustomValidators.min(30, 'Minimum TTL 30'),\r\n CustomValidators.max(43200, 'Maximum TTL 43200'),\r\n ]);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('ttl')?.updateValueAndValidity();\r\n this.getControl('variables')?.updateValueAndValidity();\r\n } else {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public formReset(_isMediaType: boolean = false): void {\r\n if (!_isMediaType) {\r\n this.getControl('media')?.reset();\r\n this.getControl('from')?.reset();\r\n }\r\n\r\n this.getControl('text')?.reset();\r\n this.getControl('fileName')?.reset();\r\n this.getControl('targetURL')?.reset();\r\n this.getControl('fileType')?.reset();\r\n this.getControl('file')?.reset();\r\n this.getControl('latitude')?.reset();\r\n this.getControl('longitude')?.reset();\r\n this.getControl('template')?.reset();\r\n this.getControl('category')?.reset();\r\n this.getControl('product')?.reset();\r\n this.getControl('catalogue')?.reset();\r\n this.getControl('body')?.reset();\r\n this.getControl('otpValue')?.reset();\r\n this.getControl('variables')?.reset();\r\n\r\n const paramHeader = this.getControl('paramHeader') as FormArray | null;\r\n if (paramHeader) {\r\n paramHeader.clear();\r\n paramHeader.reset();\r\n }\r\n\r\n const paramBody = this.getControl('paramBody') as FormArray | null;\r\n if (paramBody) {\r\n paramBody.clear();\r\n paramBody.reset();\r\n }\r\n\r\n const paramButton = this.getControl('paramButton') as FormArray | null;\r\n if (paramButton) {\r\n paramButton.clear();\r\n paramButton.reset();\r\n }\r\n\r\n this.initValidation();\r\n }\r\n\r\n private getControl(controlName: string): AbstractControl | null {\r\n return this.form ? this.form.get(controlName) : null;\r\n }\r\n\r\n private initParam(_name: string, _value: any, _type: string): Parameter {\r\n return {\r\n name: _name,\r\n value: _value,\r\n in: 'query',\r\n type: _type,\r\n };\r\n }\r\n\r\n private getAccountOptionService(filter: string = '', isInfinite: boolean = false): void {\r\n this.isLoadingAccountOption = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n this.initParam('rowPerPage', 20, 'number'),\r\n this.initParam('platform', 'WA', 'string'),\r\n this.initParam('status', 'APPROVED', 'string'),\r\n this.initParam('filter', filter, 'string'),\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/admin/account', 'GET')\r\n .subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n if (!resp.data) return;\r\n\r\n this.accountOption = isInfinite ? [...this.accountOption, ...resp.data] : resp.data;\r\n this.isHaveNextAccountOption = resp.haveNext ?? true;\r\n this.isLoadingAccountOption = false;\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public getTemplateOptionService(\r\n event: string = null,\r\n filter: string = '',\r\n isInfinite: boolean = false\r\n ): void {\r\n this.isLoadingTemplateOption = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n this.initParam('rowPerPage', 20, 'number'),\r\n this.initParam('platform', 'WA', 'string'),\r\n this.initParam('templateType', 'all', 'string'),\r\n this.initParam('filter', filter, 'string'),\r\n this.initParam('status', 'APPROVED', 'string'),\r\n this.initParam('clientId', this.getControl('from')?.value?.clientId ?? '', 'string'),\r\n this.initParam('wabaId', this.getControl('from')?.value?.wabaId ?? '', 'string'),\r\n ];\r\n\r\n if (this.isReadOnlyMode) parameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n const messageType = this.form.value?.channel;\r\n\r\n if (messageType === 'utility') {\r\n parameterList.push(this.initParam('isDirectSend', true, 'string'));\r\n }\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/template', 'GET')\r\n .subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n const currentOptions = this.templateOption || [];\r\n const newData = resp.data || [];\r\n this.templateOption = isInfinite ? [...currentOptions, ...newData] : newData;\r\n\r\n this.isHaveNextTemplateOption = resp.haveNext ?? true;\r\n this.isLoadingTemplateOption = false;\r\n\r\n const template = this.templateOption?.find(\r\n (t) => t.ID === this.getControl('template')?.value?.ID\r\n );\r\n\r\n if (template) {\r\n this.getControl('template')?.patchValue(template);\r\n\r\n if (this.getControl('isUpload')?.value)\r\n return this.updateDownloadCSV(this.getControl('isUpload')?.value);\r\n }\r\n this.updateTemplate(this.getControl('template')?.value);\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private initParameter(isButton: boolean = false, value: string = ''): FormGroup {\r\n const form = isButton\r\n ? new FormGroup({\r\n name: new FormArray([], Validators.required),\r\n })\r\n : new FormGroup({\r\n name: new FormControl(\r\n {\r\n value: value,\r\n disabled: this.isReadOnlyMode || ['$UnsubscribeAccount'].includes(value),\r\n },\r\n Validators.required\r\n ),\r\n });\r\n\r\n return form;\r\n }\r\n\r\n get getParamHeader(): FormGroup[] {\r\n return (this.form.get('paramHeader') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamHeader(value: string = ''): void {\r\n const form = this.initParameter(false, value);\r\n (this.form.get('paramHeader') as FormArray).push(form);\r\n }\r\n\r\n get getParamBody(): FormGroup[] {\r\n return (this.form.get('paramBody') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamBody(value: string = ''): void {\r\n const form = this.initParameter(false, value);\r\n (this.form.get('paramBody') as FormArray).push(form);\r\n }\r\n\r\n get getButton(): FormGroup[] {\r\n return (this.form.get('paramButton') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public getParamButton(index: number): FormGroup[] {\r\n const form = (this.form.get('paramButton') as FormArray).controls as FormGroup[];\r\n return (form[index].get('name') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamButton(): void {\r\n const form = this.initParameter(true);\r\n (this.form.get('paramButton') as FormArray).push(form);\r\n }\r\n\r\n get getIsText(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'text'\r\n );\r\n }\r\n\r\n get getIsMedia(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'media'\r\n );\r\n }\r\n\r\n get getIsTemplate(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'template'\r\n );\r\n }\r\n\r\n get getIsCatalogue(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'catalogue'\r\n );\r\n }\r\n\r\n get getIsUtility(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'utility'\r\n );\r\n }\r\n\r\n get getCarouselControls() {\r\n return (this.form.get('paramCarousel') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n getCarouselButtons(cardIndex: number): any[] {\r\n const templateValue = this.form.get('template')?.value;\r\n return templateValue?.carousel?.[cardIndex]?.buttons || [];\r\n }\r\n\r\n getCarouselBodyParams(cardIndex: number): FormArray {\r\n return this.getCarouselControls[cardIndex].get('bodyParams') as FormArray;\r\n }\r\n\r\n getCarouselBtnParams(cardIndex: number, btnIndex: number): FormArray {\r\n const btnParamsArray = this.getCarouselControls[cardIndex].get('buttonParams') as FormArray;\r\n return btnParamsArray.at(btnIndex) as FormArray;\r\n }\r\n\r\n public getNextAccountBatch() {\r\n if (!this.isHaveNextAccountOption) return;\r\n\r\n this.pageNoAccountOption += 1;\r\n this.getAccountOptionService('', true);\r\n }\r\n\r\n public accountSelectedDisplay(\r\n attribute1: WhatsAppAccountDto,\r\n attribute2: WhatsAppAccountDto\r\n ): string {\r\n return attribute1 && attribute2 && attribute1.id == attribute2.id\r\n ? `${attribute1.name} (${attribute1.accountNo})`\r\n : '';\r\n }\r\n\r\n public getNextTemplateBatch() {\r\n if (!this.isHaveNextTemplateOption) return;\r\n\r\n this.pageNoTemplateOption += 1;\r\n this.getTemplateOptionService(null, '', true);\r\n }\r\n\r\n public templateSelectedDisplay(\r\n attribute1: TemplateWAModel,\r\n attribute2: TemplateWAModel\r\n ): string {\r\n return attribute1 && attribute2 && attribute1.name == attribute2.name\r\n ? `${attribute1.name}`\r\n : '';\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const file: FileList = (event.target as HTMLInputElement).files;\r\n const accept = this.extFileAccepted.split('/');\r\n let matchType = accept[0];\r\n\r\n if (file.length === 0) return;\r\n\r\n if (this.extFileAccepted === 'application/pdf') matchType = accept[1];\r\n\r\n if (!file[0].type.includes(matchType)) {\r\n this.toastr.error('Sorry, the file you are uploading is not allowed');\r\n return;\r\n }\r\n\r\n if (file[0].size > 10000000) {\r\n this.toastr.error('Upload media failed, max size 10mb');\r\n return;\r\n }\r\n\r\n this.getControl('file')?.setValue(file[0]);\r\n this.getControl('fileType')?.setValue('image');\r\n this.getControl('fileName')?.setValue(file[0].name);\r\n this.getControl('targetURL')?.setValidators(Validators.required);\r\n this.getControl('targetURL')?.updateValueAndValidity();\r\n\r\n if (file[0].type.indexOf('video') > -1) this.getControl('fileType')?.setValue('video');\r\n\r\n this.uploadMediaService();\r\n }\r\n\r\n private uploadMediaService(): void {\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'file',\r\n value: this.getControl('file')?.value,\r\n in: 'formData',\r\n type: 'object',\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/media', 'POST')\r\n .subscribe((resp: AppResponse<any>) => {\r\n this.getControl('targetURL')?.clearValidators();\r\n this.getControl('targetURL')?.updateValueAndValidity();\r\n this.getControl('targetURL')?.setValue(resp.data.targetURL);\r\n this.getControl('file')?.reset();\r\n\r\n this.toastr.success('Upload media success');\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n get buttonParamsControls() {\r\n const control = this.form.get('buttonParams') as FormArray;\r\n return control ? control.controls : [];\r\n }\r\n\r\n get isUsingExcelBulk(): boolean {\r\n return this.getControl('isUpload')?.value || false;\r\n }\r\n\r\n public updateTemplate(template: TemplateWAModel): void {\r\n this.isShowParameter = false;\r\n\r\n if (!template) return;\r\n\r\n const formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n const buttonParamsArray = this.form.get('buttonParams') as FormArray;\r\n buttonParamsArray.clear();\r\n\r\n if (template && template.buttons && template.buttons.length > 0) {\r\n let qrIndexLocal = 0;\r\n\r\n template.buttons.forEach((btn: any, index: number) => {\r\n if (btn.type === 'QUICK_REPLY') {\r\n let existingPayload = '';\r\n\r\n // SKENARIO 1: Data dari Local State\r\n if (formStorage?.buttonParams && formStorage.buttonParams.length > 0) {\r\n existingPayload = formStorage.buttonParams[qrIndexLocal]?.payload || '';\r\n qrIndexLocal++;\r\n }\r\n // SKENARIO 2: Data dari BE\r\n else if (\r\n formStorage?.paramButton &&\r\n Array.isArray(formStorage.paramButton[index])\r\n ) {\r\n existingPayload = formStorage.paramButton[index][0] || '';\r\n }\r\n\r\n buttonParamsArray.push(\r\n new FormGroup({\r\n label: new FormControl(btn.text),\r\n payload: new FormControl(\r\n {\r\n value: existingPayload,\r\n disabled: this.isReadOnlyMode,\r\n },\r\n [Validators.maxLength(256)]\r\n ),\r\n })\r\n );\r\n }\r\n });\r\n }\r\n\r\n this.isHaveTemplateParam =\r\n (template.header?.examples?.length ?? 0) > 0 ||\r\n (template.body?.examples?.length ?? 0) > 0 ||\r\n (template.buttons?.length ?? 0) > 0 ||\r\n (template.carousel?.length ?? 0) > 0;\r\n\r\n if (['image', 'video', 'document'].includes(template?.header?.type?.toLowerCase())) {\r\n this.getControl('fileName')?.setValue(\r\n this.getCampaignStorage?.generalInformation?.form.fileName ??\r\n this.getCampaignStorage?.generalInformation?.form.targetURL ??\r\n template.header.url\r\n );\r\n this.getControl('targetURL')?.setValue(\r\n this.getCampaignStorage?.generalInformation?.form.targetURL ?? template.header.url\r\n );\r\n\r\n this.fileTypeChange(template?.header?.type?.toLowerCase());\r\n }\r\n\r\n (template.header.examples?.length ?? 0) > 0\r\n ? this.getControl('paramHeader')?.setValidators(Validators.required)\r\n : this.getControl('paramHeader')?.clearValidators();\r\n\r\n (template.body.examples?.length ?? 0) > 0\r\n ? this.getControl('paramBody')?.setValidators(Validators.required)\r\n : this.getControl('paramBody')?.clearValidators();\r\n\r\n (template.buttons?.length ?? 0) > 0\r\n ? this.getControl('paramButton')?.setValidators(Validators.required)\r\n : this.getControl('paramButton')?.clearValidators();\r\n\r\n (this.form.get('paramHeader') as FormArray).controls = [];\r\n (this.form.get('paramHeader') as FormArray).reset();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n (this.form.get('paramBody') as FormArray).controls = [];\r\n (this.form.get('paramBody') as FormArray).reset();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n (this.form.get('paramButton') as FormArray).controls = [];\r\n (this.form.get('paramButton') as FormArray).reset();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n this.getControl('otpValue')?.setValue('');\r\n this.getControl('otpValue')?.clearValidators();\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n\r\n if (template.category === 'AUTHENTICATION') {\r\n this.getControl('otpValue')?.setValue(\r\n formStorage?.otpValue ??\r\n [...(formStorage?.template?.body?.examples ?? [])]?.pop() ??\r\n ''\r\n );\r\n\r\n this.getControl('otpValue')?.setValidators(Validators.required);\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n }\r\n\r\n template.header.examples?.forEach((each, index) => {\r\n this.addParamHeader(\r\n formStorage?.paramHeader?.[index]?.name ?? formStorage?.paramHeader?.[index] ?? ''\r\n );\r\n });\r\n\r\n template.body.examples?.forEach((each, index) => {\r\n let paramValue =\r\n formStorage?.paramBody?.[index]?.name ?? formStorage?.paramBody?.[index] ?? '';\r\n\r\n if (['$UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n this.addParamBody(paramValue);\r\n });\r\n\r\n // ==========================================================\r\n // TAMBAHAN: Generate Variable Dinamis dari template.body.examples\r\n // ==========================================================\r\n this.variables.clear();\r\n if (template.body?.examples && template.body.examples.length > 0) {\r\n const isSavedTemplateMatches = formStorage?.template?.name === template.name;\r\n\r\n template.body.examples.forEach((exampleValue: string, index: number) => {\r\n let savedVariable = '';\r\n if (isSavedTemplateMatches) {\r\n savedVariable =\r\n formStorage?.variables?.[index]?.paramName ??\r\n formStorage?.template?.data?.[index];\r\n }\r\n\r\n const finalValue = savedVariable ? savedVariable : '';\r\n\r\n this.variables.push(\r\n new FormGroup({\r\n paramName: new FormControl({\r\n value: finalValue,\r\n disabled: this.isReadOnlyMode,\r\n }),\r\n })\r\n );\r\n });\r\n }\r\n\r\n if (template.body?.text) {\r\n this.getControl('text')?.setValue(template.body.text);\r\n this.getControl('text')?.updateValueAndValidity();\r\n }\r\n // ==========================================================\r\n\r\n // ==========================================================\r\n // TAMBAHAN: Generate Form Carousel Dinamis\r\n // ==========================================================\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n carouselArray.clear();\r\n\r\n const isUsingUpload = this.getControl('isUpload')?.value;\r\n const dynamicValidator = isUsingUpload ? null : Validators.required;\r\n\r\n if (template.carousel && template.carousel.length > 0) {\r\n const isSavedTemplateMatches = formStorage?.template?.name === template.name;\r\n\r\n // BUKAN formStorage?.template?.carousel, TAPI formStorage?.paramCarousel (tempat lu ngetik)\r\n const savedUserInputs = isSavedTemplateMatches ? formStorage?.paramCarousel : null;\r\n\r\n template.carousel.forEach((card: any, cardIdx: number) => {\r\n const cardGroup = new FormGroup({\r\n headerURL: new FormControl(card.header?.url ?? ''),\r\n bodyParams: new FormArray([]),\r\n buttonParams: new FormArray([]),\r\n });\r\n\r\n // 1. Setup Body Params\r\n if (card.body?.examples?.length > 0) {\r\n card.body.examples.forEach((_: any, bodyIdx: number) => {\r\n // AMBIL VALUE DARI INPUTAN SEBELUMNYA\r\n const savedBodyVal =\r\n savedUserInputs?.[cardIdx]?.bodyParams?.[bodyIdx]?.paramName ?? '';\r\n (cardGroup.get('bodyParams') as FormArray).push(\r\n new FormGroup({\r\n paramName: new FormControl(\r\n { value: savedBodyVal, disabled: this.isReadOnlyMode },\r\n dynamicValidator\r\n ),\r\n })\r\n );\r\n });\r\n }\r\n\r\n if (card.buttons?.length > 0) {\r\n card.buttons.forEach((btn: any, btnIdx: number) => {\r\n const btnParamArray = new FormArray([]);\r\n\r\n // SKENARIO 1: Button dengan variabel (contoh URL / Phone dengan {{1}})\r\n if (btn.examples?.length > 0) {\r\n btn.examples.forEach((_: any, paramIdx: number) => {\r\n const savedBtnVal =\r\n savedUserInputs?.[cardIdx]?.buttonParams?.[btnIdx]?.[paramIdx]\r\n ?.paramName ?? '';\r\n btnParamArray.push(\r\n new FormGroup({\r\n paramName: new FormControl(\r\n { value: savedBtnVal, disabled: this.isReadOnlyMode },\r\n dynamicValidator\r\n ),\r\n })\r\n );\r\n });\r\n }\r\n // SKENARIO 2: Button bertipe QUICK_REPLY (Butuh input Payload statis)\r\n else if (btn.type === 'QUICK_REPLY') {\r\n const savedPayloadVal =\r\n savedUserInputs?.[cardIdx]?.buttonParams?.[btnIdx]?.[0]?.payload ??\r\n '';\r\n\r\n btnParamArray.push(\r\n new FormGroup({\r\n payload: new FormControl(\r\n { value: savedPayloadVal, disabled: this.isReadOnlyMode },\r\n [\r\n Validators.maxLength(256),\r\n ...(isUsingUpload ? [] : [Validators.required]),\r\n ]\r\n ),\r\n })\r\n );\r\n }\r\n\r\n (cardGroup.get('buttonParams') as FormArray).push(btnParamArray);\r\n });\r\n }\r\n\r\n carouselArray.push(cardGroup);\r\n });\r\n }\r\n\r\n template.buttons?.forEach((each, index) => {\r\n this.addParamButton();\r\n const button = this.getButton;\r\n\r\n if (each.examples?.length > 0) {\r\n each.examples.forEach((_, paramIndex) => {\r\n let form = null;\r\n\r\n if (each.type === 'FLOW') {\r\n form = this.initParameter(false, each.flow_id);\r\n } else {\r\n this.isShowParameter = true;\r\n form = this.initParameter(\r\n false,\r\n formStorage?.paramButton?.[index]?.name?.[paramIndex]?.name ??\r\n formStorage?.paramButton?.[index]?.name?.[paramIndex] ??\r\n formStorage?.paramButton?.[index]?.[paramIndex] ??\r\n ''\r\n );\r\n }\r\n\r\n (button[button.length - 1].get('name') as FormArray).push(form);\r\n });\r\n } else {\r\n const lastControl = button[button.length - 1]?.get('name');\r\n lastControl?.clearValidators();\r\n lastControl?.updateValueAndValidity();\r\n }\r\n });\r\n\r\n const paramBodyArray = this.form.get('paramBody') as FormArray;\r\n\r\n paramBodyArray.clearValidators();\r\n paramBodyArray.controls.forEach((ctrl) => {\r\n ctrl.get('name')?.clearValidators();\r\n ctrl.get('name')?.updateValueAndValidity();\r\n });\r\n\r\n paramBodyArray.updateValueAndValidity();\r\n this.toggleExcelValidation(this.form.get('isUpload')?.value);\r\n }\r\n\r\n public updateMediaType(_mediaType: string): void {\r\n if (_mediaType === EnumData.MEDIA_TYPE_LOCATION) this.initMaps;\r\n\r\n this.formReset(true);\r\n this.fileTypeChange(_mediaType.toLowerCase());\r\n }\r\n\r\n private fileTypeChange(type: string): void {\r\n this.extFileAccepted = 'image/*';\r\n\r\n if (type === EnumData.MEDIA_TYPE_VIDEO.toLowerCase()) {\r\n this.extFileAccepted = 'video/*';\r\n } else if (type === EnumData.MEDIA_TYPE_DOCUMENT.toLowerCase()) {\r\n this.extFileAccepted = 'application/pdf';\r\n }\r\n }\r\n\r\n public updateSearch(searchValue: string): void {\r\n this.pageNoTemplateOption = 1;\r\n this.getTemplateOptionService(null, searchValue);\r\n }\r\n\r\n public updateSearchAccount(searchValue: string): void {\r\n this.pageNoAccountOption = 1;\r\n this.getAccountOptionService(searchValue);\r\n }\r\n\r\n private initMaps(): void {\r\n this.mapsAPILoader.load().then(() => {\r\n this.setCurrentLocation();\r\n\r\n this.geoCoder = new google.maps.Geocoder();\r\n const autocomplete = new google.maps.places.Autocomplete(\r\n this.mapSearchRef.nativeElement\r\n );\r\n autocomplete.addListener('place_changed', () => {\r\n this.ngZone.run(() => {\r\n const place: google.maps.places.PlaceResult = autocomplete.getPlace();\r\n\r\n if (!place.geometry) return;\r\n\r\n this.maps.latitude = place.geometry.location.lat();\r\n this.maps.longitude = place.geometry.location.lng();\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private setCurrentLocation() {\r\n if ('geolocation' in navigator) {\r\n navigator.geolocation.getCurrentPosition((position) => {\r\n if (!this.getControl('longitude')?.value && !this.getControl('latitude')?.value) {\r\n this.maps.latitude = position.coords.latitude;\r\n this.maps.longitude = position.coords.longitude;\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public markerDragEnd(event: google.maps.MouseEvent) {\r\n if (event.latLng) {\r\n this.maps.latitude = event.latLng.lat();\r\n this.maps.longitude = event.latLng.lng();\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n }\r\n }\r\n\r\n public updateDownloadCSV(isChecked: boolean): void {\r\n this.getControl('isUpload')?.setValue(isChecked);\r\n\r\n if (isChecked) {\r\n (this.getControl('paramHeader') as FormArray).controls = [];\r\n (this.getControl('paramHeader') as FormArray).reset();\r\n (this.getControl('paramBody') as FormArray).controls = [];\r\n (this.getControl('paramBody') as FormArray).reset();\r\n (this.getControl('paramButton') as FormArray).controls = [];\r\n (this.getControl('paramButton') as FormArray).reset();\r\n this.getControl('paramHeader')?.clearValidators();\r\n this.getControl('paramBody')?.clearValidators();\r\n this.getControl('paramButton')?.clearValidators();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n this.getControl('otpValue')?.reset();\r\n this.getControl('otpValue')?.clearValidators();\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n this.variables.controls.forEach((ctrl) => {\r\n ctrl.get('paramName')?.clearValidators();\r\n ctrl.get('paramName')?.updateValueAndValidity();\r\n });\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n if (carouselArray) {\r\n carouselArray.controls.forEach((card: any) => {\r\n const bodyParams = card.get('bodyParams') as FormArray;\r\n bodyParams?.controls.forEach((bCtrl) => {\r\n bCtrl.get('paramName')?.clearValidators();\r\n bCtrl.get('paramName')?.updateValueAndValidity();\r\n });\r\n\r\n const btnParams = card.get('buttonParams') as FormArray;\r\n btnParams?.controls.forEach((btnGroup: any) => {\r\n (btnGroup as FormArray).controls.forEach((pBtnCtrl) => {\r\n pBtnCtrl.get('paramName')?.clearValidators();\r\n pBtnCtrl.get('paramName')?.updateValueAndValidity();\r\n });\r\n });\r\n });\r\n }\r\n return;\r\n }\r\n this.updateTemplate(this.getControl('template')?.value);\r\n }\r\n\r\n public handleChangeTemplate(useExisting: boolean): void {\r\n this.getControl('isDownloadVariableXLS')?.setValue(false);\r\n this.variables.clear();\r\n this.updateVariableDownloadXLS(false);\r\n this.getControl('text')?.setValue('');\r\n if (useExisting) {\r\n this.getControl('template')?.setValidators(Validators.required);\r\n this.getControl('text')?.clearValidators();\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n } else {\r\n this.getControl('template')?.reset();\r\n this.getControl('template')?.clearValidators();\r\n this.getControl('text')?.setValidators([Validators.required, Validators.max(1024)]);\r\n\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public handleChangeFrom(value: any): void {\r\n const { isUseExistingTemplate } = this.form.value;\r\n if (!isUseExistingTemplate) return;\r\n this.getTemplateOptionService(value);\r\n }\r\n\r\n get variables(): FormArray {\r\n return this.getControl('variables') as FormArray;\r\n }\r\n\r\n addVariable(): void {\r\n const variableGroup = new FormGroup({\r\n paramName: new FormControl('', Validators.required),\r\n });\r\n\r\n this.variables.push(variableGroup);\r\n\r\n const textControl = this.getControl('text');\r\n\r\n if (textControl) {\r\n const currentBody = textControl.value || '';\r\n const newSequence = `{{${this.variables.controls.length}}}`;\r\n textControl.setValue(`${currentBody} ${newSequence}`.trim());\r\n }\r\n }\r\n\r\n removeVariable(index: number): void {\r\n this.variables.removeAt(index);\r\n\r\n if (this.variables.controls.length === 0) {\r\n this.getControl('useXlsx')?.setValue(false);\r\n }\r\n\r\n const textControl = this.getControl('text');\r\n\r\n if (textControl && textControl.value) {\r\n const targetSequence = index + 1;\r\n let currentBody = textControl.value;\r\n\r\n const removeRegex = new RegExp(`\\\\s*\\\\{\\\\{${targetSequence}\\\\}\\\\}`, 'g');\r\n currentBody = currentBody.replace(removeRegex, '');\r\n\r\n currentBody = currentBody.replace(/\\{\\{(\\d+)\\}\\}/g, (match: number, numStr: string) => {\r\n const num = parseInt(numStr, 10);\r\n if (num > targetSequence) {\r\n return `{{${num - 1}}}`;\r\n }\r\n return match;\r\n });\r\n\r\n textControl.setValue(currentBody.trim());\r\n }\r\n }\r\n\r\n updateVariableDownloadXLS(isChecked: boolean): void {\r\n const variablesArray = this.variables;\r\n if (isChecked) {\r\n variablesArray.controls.forEach((control) => {\r\n control.get('paramName')?.clearValidators();\r\n control.get('paramName')?.setValue('');\r\n control.get('paramName')?.updateValueAndValidity();\r\n });\r\n } else {\r\n variablesArray.controls.forEach((control) => {\r\n control.get('paramName')?.setValidators(Validators.required);\r\n control.get('paramName')?.updateValueAndValidity();\r\n });\r\n }\r\n\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n public toggleExcelValidation(isUpload: boolean): void {\r\n const currentValidator = isUpload ? null : Validators.required;\r\n\r\n // ====================================================\r\n // 2. UPDATE VALIDASI CAROUSEL VARIABLES\r\n // ====================================================\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n if (carouselArray) {\r\n carouselArray.controls.forEach((card: any) => {\r\n const bodyParams = card.get('bodyParams') as FormArray;\r\n bodyParams?.controls.forEach((bCtrl: any) => {\r\n bCtrl.get('paramName')?.setValidators(currentValidator);\r\n bCtrl.get('paramName')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n const btnParams = card.get('buttonParams') as FormArray;\r\n btnParams?.controls.forEach((btnGroup: any) => {\r\n (btnGroup as FormArray).controls.forEach((pBtnCtrl: any) => {\r\n pBtnCtrl.get('paramName')?.setValidators(currentValidator);\r\n pBtnCtrl.get('paramName')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n });\r\n });\r\n\r\n carouselArray.updateValueAndValidity({ emitEvent: false });\r\n }\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tFailoverMechanismValidationConst,\r\n\tPlatformOptionConst,\r\n\tisHaveNextOption,\r\n\tisLoadingOption,\r\n\toptionList,\r\n\tpageNoOption,\r\n} from '../../../../core/const';\r\nimport { intervalTimeValidator } from '../../../../core/const/form-validators';\r\nimport { Parameter } from '../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-failover-mechanism',\r\n\ttemplateUrl: './failover-mechanism.component.html',\r\n\tstyleUrls: ['./failover-mechanism.component.scss'],\r\n})\r\nexport class FailoverMechanismComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic failover: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic channelOption: any;\r\n\tpublic validationMessages: any;\r\n\tpublic isHaveNextTemplateOption = { ...isHaveNextOption };\r\n\tpublic isLoadingTemplateOption = { ...isLoadingOption };\r\n\tpublic templateOption = { ...optionList };\r\n\tpublic isLoadingAccountOption = { ...isLoadingOption };\r\n\tpublic isHaveNextAccountOption = { ...isHaveNextOption };\r\n\tpublic accountOption = { ...optionList };\r\n\r\n\tprivate subscribers: Subscription[] = [];\r\n\tprivate pageNoTemplateOption = { ...pageNoOption };\r\n\tprivate pageNoAccountOption = { ...pageNoOption };\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.failover = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = FailoverMechanismValidationConst;\r\n\t\tthis.channelOption = [\r\n\t\t\t...PlatformOptionConst,\r\n\t\t\t/* {\r\n icon: '',\r\n inputSvgIcon: 'icon-voice-gray',\r\n image: 'line.png',\r\n label: 'Voice',\r\n value: 'VOICE',\r\n }, */\r\n\t\t].filter(\r\n\t\t\tt =>\r\n\t\t\t\t![\r\n\t\t\t\t\t'LINE',\r\n\t\t\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium,\r\n\t\t\t\t].includes(t.value)\r\n\t\t);\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.failover.emit(this.form);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tget interval() {\r\n\t\treturn this.form.get('interval');\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tactive: new FormControl(false, Validators.required),\r\n\t\t\ttype: new FormControl(''),\r\n\t\t\tinterval: new FormControl(null),\r\n\t\t\taccounts: new FormArray([]),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tif (this.interval.touched && this.interval.value === 0) {\r\n\t\t\t\tthis.form.get('interval').setErrors({ intervalTime: true });\r\n\t\t\t}\r\n\t\t\tthis.failover.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\t!this.getCampaignStorage?.failover\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('active')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.active);\r\n\t\tthis.form\r\n\t\t\t.get('type')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.type ?? '');\r\n\t\tthis.form\r\n\t\t\t.get('interval')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.interval ?? null);\r\n\r\n\t\tthis.activeChange(this.getCampaignStorage?.failover?.active);\r\n\t\tthis.validationAccount();\r\n\t}\r\n\r\n\tprivate initAccount(data: any = null, _channel: any = null): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tchannel: new FormControl(_channel),\r\n\t\t\tplatform: new FormControl(_channel?.value),\r\n\t\t\taccountId: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue:\r\n\t\t\t\t\t\tdata?.accountId && typeof data?.accountId === 'string'\r\n\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\tid: data?.accountId,\r\n\t\t\t\t\t\t\t\t\tname: data?.accountName,\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t: data?.accountId ?? '',\r\n\t\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t\taccountName: new FormControl(data?.accountName ?? ''),\r\n\t\t\tsubject: new FormControl({\r\n\t\t\t\tvalue: data?.subject ?? '',\r\n\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t}),\r\n\t\t\ttemplate: new FormControl({\r\n\t\t\t\tvalue: data?.template ?? '',\r\n\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t}),\r\n\t\t\tparamBody: new FormArray([]),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getAccount(): FormGroup[] {\r\n\t\treturn (this.form.get('accounts') as FormArray).controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addAccount(data: any = null, channel: any = null): void {\r\n\t\tconst form = this.initAccount(data, channel);\r\n\t\t(this.form.get('accounts') as FormArray).push(form);\r\n\r\n\t\tthis.getAccountOptionService(channel?.value, data?.accountName ?? '');\r\n\t\tthis.getTemplateOptionService(channel?.value, {}, data?.template?.name);\r\n\t}\r\n\r\n\tprivate initParameter(): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl('', Validators.required),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tpublic getParamBody(account: FormGroup): FormGroup[] {\r\n\t\treturn (account.get('paramBody') as FormArray).controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(account: FormGroup): void {\r\n\t\tconst form = this.initParameter();\r\n\t\t(account.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic deleteParamBody(account: FormGroup, index: number): void {\r\n\t\t(account.get('paramBody') as FormArray).removeAt(index);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tplatform: string,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption[platform] = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'pageNo',\r\n\t\t\t\tthis.pageNoAccountOption[platform],\r\n\t\t\t\t'number'\r\n\t\t\t),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('platform', platform, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption[platform] = isInfinite\r\n\t\t\t\t\t? [...this.accountOption[platform], ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\r\n\t\t\t\tthis.isHaveNextAccountOption[platform] = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption[platform] = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tplatform: string,\r\n\t\taccount: any,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption[platform] = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'pageNo',\r\n\t\t\t\tthis.pageNoTemplateOption[platform],\r\n\t\t\t\t'number'\r\n\t\t\t),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', platform, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam('clientId', account?.clientId ?? '', 'string'),\r\n\t\t\tthis.initParam('wabaId', account?.wabaId ?? '', 'string'),\r\n\t\t];\r\n\r\n\t\tif (platform === 'WA')\r\n\t\t\tparameterList.push(this.initParam('status', 'APPROVED', 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption[platform] = isInfinite\r\n\t\t\t\t\t? [...this.templateOption[platform], ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\r\n\t\t\t\tthis.isHaveNextTemplateOption[platform] = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption[platform] = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch(platform: string) {\r\n\t\tif (!this.isHaveNextAccountOption[platform]) return;\r\n\r\n\t\tthis.pageNoAccountOption[platform] += 1;\r\n\t\tthis.getAccountOptionService(platform, '', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch(platform: string, account: any) {\r\n\t\tif (!this.isHaveNextTemplateOption[platform]) return;\r\n\r\n\t\tthis.pageNoTemplateOption[platform] += 1;\r\n\t\tthis.getTemplateOptionService(platform, account, '', true);\r\n\t}\r\n\r\n\tpublic updateSearch(\r\n\t\tsearchValue: string,\r\n\t\tplatform: string,\r\n\t\taccount: any\r\n\t): void {\r\n\t\tthis.pageNoTemplateOption[platform] = 1;\r\n\t\tthis.getTemplateOptionService(platform, account, searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string, platform: string): void {\r\n\t\tthis.pageNoAccountOption[platform] = 1;\r\n\t\tthis.getAccountOptionService(platform, searchValue);\r\n\t}\r\n\r\n\tpublic activeChange(_active: boolean): void {\r\n\t\tthis.form\r\n\t\t\t.get('type')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.type ?? '');\r\n\t\tthis.form.get('type').setValidators(Validators.required);\r\n\t\tthis.form.get('type').updateValueAndValidity();\r\n\r\n\t\tif (_active) {\r\n\t\t\tconst accounts =\r\n\t\t\t\tthis.getCampaignStorage?.failover?.accounts?.filter(\r\n\t\t\t\t\t(t: any) =>\r\n\t\t\t\t\t\tt.platform !==\r\n\t\t\t\t\t\tthis.getCampaignStorage?.generalInformation?.form\r\n\t\t\t\t\t\t\t?.medium\r\n\t\t\t\t);\r\n\r\n\t\t\tif (accounts) {\r\n\t\t\t\taccounts.map(account =>\r\n\t\t\t\t\tthis.addAccount(\r\n\t\t\t\t\t\taccount,\r\n\t\t\t\t\t\tthis.channelOption.find(\r\n\t\t\t\t\t\t\t(t: any) => t.value === account.platform\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.channelOption\r\n\t\t\t\t\t.filter((t: any) => {\r\n\t\t\t\t\t\treturn !accounts.find((account: any) => {\r\n\t\t\t\t\t\t\treturn account.platform === t.value;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.map(channel => this.addAccount({}, channel));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.channelOption.map(channel => this.addAccount({}, channel));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('type').clearValidators();\r\n\t\tthis.form.get('type').updateValueAndValidity();\r\n\t\t(this.form.get('accounts') as FormArray).controls = [];\r\n\t\t(this.form.get('accounts') as FormArray).reset();\r\n\t\tthis.form.get('accounts').updateValueAndValidity();\r\n\r\n\t\tthis.typeChange('Status');\r\n\t}\r\n\r\n\tpublic typeChange(_type: string): void {\r\n\t\tif (_type === 'Time') {\r\n\t\t\tthis.form\r\n\t\t\t\t.get('interval')\r\n\t\t\t\t.setValue(this.getCampaignStorage?.failover?.interval ?? null);\r\n\t\t\tthis.form\r\n\t\t\t\t.get('interval')\r\n\t\t\t\t.setValidators([Validators.required, intervalTimeValidator()]);\r\n\t\t\tthis.form.get('interval').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('interval').clearValidators();\r\n\t\tthis.form.get('interval').updateValueAndValidity();\r\n\t}\r\n\r\n\tpublic validationAccount(\r\n\t\taccount: WhatsAppAccountDto = null,\r\n\t\taccountControl: FormGroup = null\r\n\t): void {\r\n\t\taccountControl\r\n\t\t\t?.get('accountName')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.accountOption[accountControl.get('platform').value].find(\r\n\t\t\t\t\tt => t.id === account?.id\r\n\t\t\t\t)?.name ?? ''\r\n\t\t\t);\r\n\r\n\t\tconst isChooseAccount = this.getAccount.filter(\r\n\t\t\tcontrol => control.get('accountId').value\r\n\t\t);\r\n\r\n\t\tthis.getAccount.forEach(control => {\r\n\t\t\tcontrol.get('accountId').setValidators(Validators.required);\r\n\t\t\tcontrol.get('subject').setValidators(Validators.required);\r\n\t\t\tcontrol.get('template').setValidators(Validators.required);\r\n\r\n\t\t\tif (\r\n\t\t\t\t!control.get('accountId').value &&\r\n\t\t\t\tisChooseAccount?.length > 0\r\n\t\t\t) {\r\n\t\t\t\tcontrol.get('accountId').clearValidators();\r\n\t\t\t\tcontrol.get('subject').setValue('');\r\n\t\t\t\tcontrol.get('subject').clearValidators();\r\n\t\t\t\tcontrol.get('template').setValue('');\r\n\t\t\t\tcontrol.get('template').clearValidators();\r\n\t\t\t} else if (\r\n\t\t\t\t['WA', 'SMS', 'VOICE'].includes(control.get('platform').value)\r\n\t\t\t) {\r\n\t\t\t\tcontrol.get('subject').clearValidators();\r\n\t\t\t}\r\n\r\n\t\t\tcontrol.get('accountId').updateValueAndValidity();\r\n\t\t\tcontrol.get('subject').updateValueAndValidity();\r\n\t\t\tcontrol.get('template').updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tif (accountControl)\r\n\t\t\tthis.getTemplateOptionService(\r\n\t\t\t\taccountControl.get('platform').value,\r\n\t\t\t\taccountControl.get('accountId').value\r\n\t\t\t);\r\n\t}\r\n\r\n\tpublic drop(event: CdkDragDrop<any[]>) {\r\n\t\tmoveItemInArray(\r\n\t\t\tthis.getAccount,\r\n\t\t\tevent.previousIndex,\r\n\t\t\tevent.currentIndex\r\n\t\t);\r\n\r\n\t\tthis.failover.emit(this.form);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport function duplicateValidator(\r\n compareArray: any[],\r\n compareProperty: string,\r\n originalValue?: any\r\n): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const inputValue = control.value ? String(control.value).trim() : '';\r\n\r\n if (!inputValue || (!!originalValue && String(originalValue) === inputValue)) {\r\n return null;\r\n }\r\n\r\n const isDuplicate = compareArray.some(\r\n (data) => inputValue === String(data[compareProperty]).trim()\r\n );\r\n\r\n return isDuplicate ? { duplicateValue: true } : null;\r\n };\r\n}\r\n\r\nexport function intervalTimeValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n const number = Number(control.value);\r\n\r\n if (Number.isNaN(number) || number % 1 !== 0 || number < 1) {\r\n return { intervalTime: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { SegmentedMessage } from 'sms-segments-calculator';\r\nimport {\r\n GeneralInformationMessageValidationConst,\r\n PlatformOptionConst,\r\n} from '../../../../core/const';\r\n\r\ninterface IMaps {\r\n zoom: number;\r\n latitude: number;\r\n longitude: number;\r\n isDraggable: boolean;\r\n isDoubleClickZoom: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-new-campaign-general-information',\r\n templateUrl: './general-information.component.html',\r\n styleUrls: ['./general-information.component.scss'],\r\n})\r\nexport class GeneralInformationComponent implements OnInit {\r\n @Output()\r\n public generalInformation: EventEmitter<{\r\n parent: FormGroup;\r\n child: FormGroup;\r\n }>;\r\n\r\n public form: FormGroup;\r\n public channelOption: any[];\r\n public generalInformationForm: FormGroup;\r\n public isTouchedWAForm: boolean = false;\r\n public isTouchedSMSForm: boolean = false;\r\n public isTouchedEmailForm: boolean = false;\r\n public isShowMore: boolean = false;\r\n public validationMessages: any;\r\n public maps: IMaps;\r\n public twilioResultCounter = {\r\n segments: 0,\r\n characters: 0,\r\n encoding: '',\r\n fulltext: `Encode - / Chars 0 / Segment 1`,\r\n };\r\n\r\n @Input() public isReadOnlyMode: boolean;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.generalInformation = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.channelOption = PlatformOptionConst;\r\n this.validationMessages = GeneralInformationMessageValidationConst;\r\n this.maps = {\r\n zoom: 15,\r\n latitude: null,\r\n longitude: null,\r\n isDraggable: true,\r\n isDoubleClickZoom: true,\r\n };\r\n\r\n this.initForm();\r\n this.initEdit();\r\n this.initDisable();\r\n }\r\n\r\n private initForm(): void {\r\n this.form = new FormGroup({\r\n id: new FormControl(null),\r\n campaignName: new FormControl(null, [Validators.required, Validators.maxLength(100)]),\r\n medium: new FormControl(null, [Validators.required]),\r\n });\r\n\r\n this.form.valueChanges.subscribe(() => {\r\n this.isTouchedWAForm = !this.isTouchedWAForm;\r\n this.isTouchedSMSForm = !this.isTouchedSMSForm;\r\n this.isTouchedEmailForm = !this.isTouchedEmailForm;\r\n\r\n this.generalInformation.emit({\r\n parent: this.form,\r\n child: this.generalInformationForm,\r\n });\r\n });\r\n setInterval(() => {\r\n this.onCheckTwilioCounter();\r\n }, 400);\r\n }\r\n\r\n private initEdit(): void {\r\n const campaign = localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n\r\n if (Object.entries(campaign).length === 0) return;\r\n\r\n this.form.get('id').setValue(campaign?.generalInformation?.id);\r\n this.form.get('campaignName').setValue(campaign?.generalInformation?.form.campaignName);\r\n this.form.get('medium').setValue(campaign?.generalInformation?.form.medium);\r\n }\r\n\r\n private initDisable(): void {\r\n if (!this.isReadOnlyMode) {\r\n return;\r\n }\r\n\r\n this.form.disable();\r\n }\r\n\r\n public updateGeneralInformationForm(form: FormGroup): void {\r\n this.generalInformationForm = form;\r\n this.isShowMore = false;\r\n\r\n this.generalInformation.emit({\r\n parent: this.form,\r\n child: this.generalInformationForm,\r\n });\r\n\r\n if (this.getMedia === 'LOCATION') this.getLocation();\r\n }\r\n\r\n get getHeader(): string {\r\n return this.generalInformationForm?.getRawValue()?.from?.name || '';\r\n }\r\n\r\n get getBodyString(): string {\r\n const body =\r\n this.generalInformationForm?.getRawValue()?.text ||\r\n this.generalInformationForm?.getRawValue()?.template?.body?.text ||\r\n this.generalInformationForm?.getRawValue()?.body?.text;\r\n\r\n return (\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n );\r\n }\r\n\r\n get getBody(): any {\r\n const body =\r\n this.generalInformationForm?.getRawValue()?.text ||\r\n this.generalInformationForm?.getRawValue()?.template?.body?.text ||\r\n this.generalInformationForm?.getRawValue()?.body?.text;\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.fixGeneratedHtml(\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n )\r\n );\r\n }\r\n\r\n get getMedia(): string {\r\n return this.generalInformationForm?.getRawValue()?.media || '';\r\n }\r\n\r\n get getTemplate(): any {\r\n return this.generalInformationForm?.getRawValue()?.template || {};\r\n }\r\n\r\n get getTemplateButton(): any {\r\n const limit =\r\n !this.isShowMore && this.getTemplate?.buttons?.length > 3\r\n ? 2\r\n : this.getTemplate?.buttons?.length;\r\n\r\n return [...this.getTemplate?.buttons].splice(0, limit) || [];\r\n }\r\n\r\n get displayFile(): string {\r\n return (\r\n (\r\n this.generalInformationForm?.getRawValue()?.targetURL ||\r\n this.generalInformationForm?.getRawValue()?.template?.header?.url\r\n )?.replace('adlsandbox.com', 'adlsandbox.net') ?? ''\r\n );\r\n }\r\n\r\n /* LINE */\r\n get isText(): boolean {\r\n return this.generalInformationForm?.getRawValue()?.channel === 'TEXT';\r\n }\r\n\r\n get isJSON(): boolean {\r\n return this.generalInformationForm?.getRawValue()?.isJSON;\r\n }\r\n\r\n get getTemplateLine(): any {\r\n return this.isJSON\r\n ? JSON.parse(this.generalInformationForm?.getRawValue()?.template?.body?.text)\r\n : this.generalInformationForm?.getRawValue()?.template?.body?.text;\r\n }\r\n /* ./ LINE */\r\n\r\n private getLocation(): void {\r\n this.maps.latitude = this.generalInformationForm?.getRawValue()?.latitude;\r\n this.maps.longitude = this.generalInformationForm?.getRawValue()?.longitude;\r\n }\r\n\r\n private fixGeneratedHtml(htmlString) {\r\n return htmlString\r\n .replaceAll(/div src=\"http/g, 'img src=\"http')\r\n .replaceAll(/div src=\"data:image/g, 'img src=\"data:image')\r\n .replaceAll(/Drag and drop your image here/g, '');\r\n }\r\n\r\n public onCheckTwilioCounter = (): void => {\r\n const valuesGeneral = this.generalInformationForm?.getRawValue();\r\n if (valuesGeneral?.channel === 'TEXT') {\r\n const segmentedMessage = new SegmentedMessage(this.getBodyString);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n this.twilioResultCounter = {\r\n ...result,\r\n fulltext: `Encode ${result.encoding} / Chars ${result.characters} / Segment ${result.segments}`,\r\n };\r\n } else {\r\n let valueResult = this.getBodyString;\r\n Array.from(valuesGeneral?.template?.body?.examples || []).map((entry, index) => {\r\n const placeholder = `{{${entry}}}`;\r\n const value = valuesGeneral.paramBody[index]?.name;\r\n valueResult = valueResult.split(placeholder).join(value);\r\n });\r\n\r\n const segmentedMessage = new SegmentedMessage(valueResult);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n this.twilioResultCounter = {\r\n ...result,\r\n fulltext: `Encode ${result.encoding} / Chars ${result.characters} / Segment ${result.segments}`,\r\n };\r\n }\r\n };\r\n}\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { HttpBodyReqPaginationModel } from '../../../../core/models';\r\nimport { Parameter } from '../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../core/services';\r\nimport { downloadBlobFile } from '../../../../core/util';\r\nimport { ContactCategoryModel } from '../../../models';\r\nimport { TableModel } from '../../campaign-index/models';\r\n\r\n@Component({\r\n selector: 'lib-new-number-bases',\r\n templateUrl: './new-number-bases.component.html',\r\n styleUrls: ['./new-number-bases.component.scss'],\r\n})\r\nexport class NewNumberBasesComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public targetAudience: EventEmitter<{\r\n targetAudience: string[];\r\n numberCount: number;\r\n isUpload: boolean;\r\n file: any;\r\n }>;\r\n\r\n public table: TableModel;\r\n public isUpload: boolean = false;\r\n public isLoading: boolean = false;\r\n public isShowUploadCSV: boolean = false;\r\n public categorySelected: ContactCategoryModel[] = [];\r\n public selection = new SelectionModel<ContactCategoryModel>(true, []);\r\n public extFileAccepted: string[] = [\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n '.csv',\r\n ];\r\n public fileSelected: {\r\n name: string;\r\n targetURL: string;\r\n } = null;\r\n\r\n private categoryParam: HttpBodyReqPaginationModel;\r\n private subscribers: Subscription[] = [];\r\n\r\n @Input() public isReadOnlyMode: boolean;\r\n\r\n @ViewChild(MatSort) matSort: MatSort;\r\n\r\n constructor(\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService\r\n ) {\r\n this.targetAudience = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.categoryParam = new HttpBodyReqPaginationModel();\r\n\r\n this.initTable();\r\n this.getCategoryList();\r\n\r\n this.targetAudience.emit({\r\n targetAudience: [],\r\n numberCount: 0,\r\n isUpload: this.getCampaignStorage?.generalInformation?.form?.isUpload,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n private initTable(): void {\r\n this.table = new TableModel();\r\n this.table.labels = [\r\n 'select',\r\n 'Category',\r\n 'No. Of Customer',\r\n 'Created Date',\r\n 'Updated Date',\r\n ];\r\n this.table.columns = ['select', 'name', 'totalMembers', 'createdDate', 'updatedDate'];\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n private initEdit(): void {\r\n if (Object.entries(this.getCampaignStorage).length === 0) return;\r\n\r\n const genInfoForm = this.getCampaignStorage?.generalInformation?.form;\r\n this.isShowUploadCSV = genInfoForm?.isUpload || genInfoForm?.isDownloadVariableXLS;\r\n\r\n this.fileSelected = {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n };\r\n\r\n this.table.dataSource.data?.forEach((each) => {\r\n if (this.getCampaignStorage?.targetAudience?.includes(each.id))\r\n this.onChecked(true, each);\r\n });\r\n }\r\n\r\n private getCategoryList(filter: string = ''): void {\r\n this.isLoading = true;\r\n\r\n if (this.isReadOnlyMode) this.categoryParam.pageSize = 1000;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.categoryParam.pageNo, 'number'),\r\n this.initParam('rowPerPage', this.categoryParam.pageSize, 'number'),\r\n this.initParam('filter', filter, 'string'),\r\n this.initParam(\r\n 'platform',\r\n this.getCampaignStorage?.generalInformation?.form?.medium,\r\n 'string'\r\n ),\r\n ];\r\n\r\n if (this.getCampaignStorage?.generalInformation?.form?.medium === 'LINE')\r\n parameterList.push(\r\n this.initParam(\r\n 'accountId',\r\n this.getCampaignStorage?.generalInformation?.form?.from?.id,\r\n 'string'\r\n )\r\n );\r\n\r\n if (this.isReadOnlyMode) parameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/admin/category', 'GET')\r\n .subscribe((resp: AppResponse<ContactCategoryModel[]>) => {\r\n if (this.isReadOnlyMode) {\r\n this.table.dataSource.data = resp.data?.filter((each) =>\r\n this.getCampaignStorage?.targetAudience?.includes(each.id)\r\n );\r\n\r\n this.categorySelected = this.table.dataSource.data;\r\n this.isLoading = false;\r\n this.initEdit();\r\n return;\r\n }\r\n\r\n this.table.dataSource.data = resp.data;\r\n this.table.setNextPage(resp.haveNext);\r\n this.isLoading = false;\r\n this.initEdit();\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private initParam(_name: string, _value: any, _type: string): Parameter {\r\n return {\r\n name: _name,\r\n value: _value,\r\n in: 'query',\r\n type: _type,\r\n };\r\n }\r\n\r\n public updateSearch(searchValue: string): void {\r\n this.table.resetPage();\r\n this.categoryParam.pageNo = this.table.page;\r\n this.getCategoryList(searchValue);\r\n }\r\n\r\n public updatePage(event: any): void {\r\n if (this.table.pageSize !== event?.pageSize) this.table.resetPage();\r\n\r\n this.table.page =\r\n this.table.pageSize !== event?.pageSize ? this.table.page : event?.pageIndex + 1;\r\n this.table.pageSize = event?.pageSize;\r\n this.categoryParam.pageNo = this.table.page;\r\n this.categoryParam.pageSize = this.table.pageSize;\r\n\r\n this.getCategoryList();\r\n }\r\n\r\n public sort(): void {\r\n this.table.dataSource.sort = this.matSort;\r\n }\r\n\r\n public checkboxLabel(row?: ContactCategoryModel): string {\r\n if (!row) return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\r\n\r\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.name + 1}`;\r\n }\r\n\r\n public isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.table.dataSource.data?.length ?? 0;\r\n\r\n if (\r\n this.table.dataSource.data &&\r\n this.table.dataSource.data.length > 0 &&\r\n this.selection.selected &&\r\n this.selection.selected.length > 0\r\n ) {\r\n for (const data of this.table.dataSource.data) {\r\n if (this.selection.selected.filter((t) => t.id === data.id).length > 0) continue;\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return numSelected === numRows;\r\n }\r\n\r\n public masterToggle(isChecked: boolean) {\r\n if (!isChecked) {\r\n this.selection.clear();\r\n this.categorySelected = [];\r\n\r\n this.targetAudience.emit({\r\n targetAudience: [],\r\n numberCount: 0,\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.selection.select(...this.table.dataSource.data);\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n public onChecked(isChecked: boolean, row: ContactCategoryModel) {\r\n if (!isChecked) {\r\n this.selection.deselect(...this.selection.selected.filter((x) => x.id === row.id));\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.selection.select(row);\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n public isChecked(row: ContactCategoryModel) {\r\n const found = this.selection.selected.find((x) => x.id === row.id);\r\n return found ? true : false;\r\n }\r\n\r\n public onDownloadSampleService(): void {\r\n const genInfoForm = this.getCampaignStorage?.generalInformation?.form;\r\n const isNeedSave = genInfoForm?.isNeedSave;\r\n\r\n // 1. Parameter Wajib (Selalu dikirim di semua skenario)\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('platform', genInfoForm?.template?.platform || 'WA', 'string'),\r\n this.initParam(\r\n 'category',\r\n this.categorySelected?.map((t) => t.id).join() ?? '', // <-- Category selalu dikirim\r\n 'string'\r\n ),\r\n ];\r\n\r\n if (isNeedSave) {\r\n // SKENARIO 1: USE EXISTING / TEMPLATE SUDAH DISAVE\r\n parameterList.push(\r\n this.initParam('templateName', genInfoForm?.template?.name, 'string'),\r\n this.initParam('templateLang', genInfoForm?.template?.lang, 'string')\r\n );\r\n } else {\r\n // SKENARIO 2: CREATE NEW / DIRECT SEND (Belum di-save)\r\n\r\n // Cek aman: Kirim templateName & Lang HANYA kalau ada (biar nggak undefined)\r\n if (genInfoForm?.template?.name) {\r\n parameterList.push(\r\n this.initParam('templateName', genInfoForm?.template?.name, 'string')\r\n );\r\n }\r\n if (genInfoForm?.template?.lang) {\r\n parameterList.push(\r\n this.initParam('templateLang', genInfoForm?.template?.lang, 'string')\r\n );\r\n }\r\n\r\n // Variabel khusus Direct Send\r\n const safeBodyText = encodeURIComponent(genInfoForm?.text || '');\r\n parameterList.push(this.initParam('bodyText', safeBodyText, 'string'));\r\n\r\n if (genInfoForm?.template?.header?.text) {\r\n const safeHeaderText = encodeURIComponent(genInfoForm.template.header.text);\r\n parameterList.push(this.initParam('headerText', safeHeaderText, 'string'));\r\n }\r\n }\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/bulkupload/template', 'GET', true)\r\n .subscribe((resp: AppResponse<any>) => {\r\n downloadBlobFile(resp, 'Sample-UploadParameter.xlsx');\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const file: FileList = (event.target as HTMLInputElement).files;\r\n const MAXIMUM_SIZE = 30 * 1024 * 1024;\r\n\r\n if (file.length === 0) return;\r\n\r\n if (file[0].size > MAXIMUM_SIZE) {\r\n this.toastr.error('Upload media failed, max size 30mb');\r\n return;\r\n }\r\n\r\n this.getPresignedUrlService(file[0]);\r\n }\r\n\r\n private getPresignedUrlService(file: File): void {\r\n this.isUpload = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n { name: 'fileName', value: file.name, in: 'query', type: 'string' },\r\n { name: 'fileType', value: file.type, in: 'query', type: 'string' },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/campaign/upload/pre-signed-url', 'GET')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (resp && resp.data) {\r\n this.uploadToS3Service(file, resp.data.url, resp.data.fileName);\r\n }\r\n },\r\n () => (this.isUpload = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private uploadToS3Service(file: File, s3Url: string, fileNameS3: string): void {\r\n this.apiAdapterService.uploadFileToS3(s3Url, file).subscribe(\r\n () => {\r\n this.finalizeTargetFileService(fileNameS3);\r\n },\r\n (err) => {\r\n this.toastr.error('Failed uploading to S3 storage');\r\n this.isUpload = false;\r\n console.error('S3 Upload Error:', err);\r\n }\r\n );\r\n }\r\n\r\n private finalizeTargetFileService(fileNameS3: string): void {\r\n const campaignId = this.getCampaignStorage?.generalInformation?.id;\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'body',\r\n value: { fileName: fileNameS3 },\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, `/campaign/${campaignId}/targetfile`, 'POST')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n this.toastr.info('Upload XLSX has been uploaded successfully');\r\n this.isUpload = false;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce(\r\n (sum, x) => sum + x.totalMembers,\r\n 0\r\n ),\r\n isUpload: true,\r\n file: {\r\n name: fileNameS3,\r\n targetURL: resp.data?.targetURL || '',\r\n },\r\n });\r\n },\r\n () => (this.isUpload = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","export const downloadBlobFile = (blob: any, name: string = 'file.csv'): any => {\r\n\tconst blobUrl = URL.createObjectURL(blob);\r\n\r\n\tconst link = document.createElement('a');\r\n\r\n\tlink.href = blobUrl;\r\n\tlink.download = name;\r\n\r\n\tdocument.body.appendChild(link);\r\n\r\n\tlink.dispatchEvent(\r\n\t\tnew MouseEvent('click', {\r\n\t\t\tbubbles: true,\r\n\t\t\tcancelable: true,\r\n\t\t\tview: window,\r\n\t\t})\r\n\t);\r\n\r\n\tdocument.body.removeChild(link);\r\n};\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { SchedulerMessageValidationConst } from '../../../../core/const';\r\n\r\n@Component({\r\n\tselector: 'lib-new-campaign-scheduler',\r\n\ttemplateUrl: './scheduler.component.html',\r\n\tstyleUrls: ['./scheduler.component.scss'],\r\n})\r\nexport class SchedulerComponent implements OnInit {\r\n\t@Output()\r\n\tpublic scheduler: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic minDate: Date;\r\n\tpublic validationMessages: any;\r\n\r\n\tprivate datePipe: DatePipe;\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\tconstructor(private toastr: ToastrService) {\r\n\t\tthis.datePipe = new DatePipe('en-US');\r\n\t\tthis.scheduler = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = SchedulerMessageValidationConst;\r\n\t\tthis.minDate = new Date();\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initEdit();\r\n\t\tthis.initDisable();\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tschedulerType: new FormControl(null, Validators.required),\r\n\t\t\tstartDate: new FormControl(null),\r\n\t\t\tstartTime: new FormControl(null),\r\n\t\t\tisRepeat: new FormControl(false),\r\n\t\t\tdelivery: new FormControl(null),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tthis.scheduler.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(isEdit: boolean = true): void {\r\n\t\tconst campaign = localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\r\n\t\tif (Object.entries(campaign).length === 0) return;\r\n\r\n\t\tif (isEdit)\r\n\t\t\tthis.form\r\n\t\t\t\t.get('schedulerType')\r\n\t\t\t\t.setValue(campaign?.scheduler?.schedulerType);\r\n\r\n\t\tthis.form.get('startDate').setValue(campaign?.scheduler?.startDate);\r\n\t\tthis.form.get('startTime').setValue(campaign?.scheduler?.startTime);\r\n\t\tthis.form.get('isRepeat').setValue(campaign?.scheduler?.isRepeat);\r\n\t\tthis.form\r\n\t\t\t.get('delivery')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.capitalizeFirstLetter(campaign?.scheduler?.delivery)\r\n\t\t\t);\r\n\t}\r\n\r\n\tprivate capitalizeFirstLetter(value: string): string {\r\n\t\tif (!value) return '';\r\n\r\n\t\treturn (\r\n\t\t\tvalue?.charAt(0).toUpperCase() + value?.slice(1).toLowerCase() ?? ''\r\n\t\t);\r\n\t}\r\n\r\n\tpublic updateSchedulerType(type: string): void {\r\n\t\tthis.form.get('schedulerType').setValue(type);\r\n\r\n\t\tif (this.form.get('schedulerType').value === 'NOW') {\r\n\t\t\tthis.form.get('startDate').setValue(null);\r\n\t\t\tthis.form.get('startDate').clearValidators();\r\n\t\t\tthis.form.get('startDate').updateValueAndValidity();\r\n\t\t\tthis.form.get('startTime').setValue(null);\r\n\t\t\tthis.form.get('startTime').clearValidators();\r\n\t\t\tthis.form.get('startTime').updateValueAndValidity();\r\n\t\t\tthis.form.get('delivery').setValue(null);\r\n\t\t\tthis.form.get('delivery').clearValidators();\r\n\t\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t\t\tthis.form.get('isRepeat').setValue(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('startDate').setValidators(Validators.required);\r\n\t\tthis.form.get('startDate').updateValueAndValidity();\r\n\t\tthis.form.get('startTime').setValidators(Validators.required);\r\n\t\tthis.form.get('startTime').updateValueAndValidity();\r\n\t\tthis.initEdit(false);\r\n\t}\r\n\r\n\tpublic updateTime(): void {\r\n\t\tif (!this.form.get('startDate').value) return;\r\n\r\n\t\tconst dateNow = new Date().getTime();\r\n\t\tconst startDate = new Date(\r\n\t\t\t`${this.datePipe.transform(\r\n\t\t\t\tthis.form.get('startDate').value,\r\n\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t)} ${this.form.get('startTime').value}`\r\n\t\t).getTime();\r\n\r\n\t\tif (dateNow > startDate) {\r\n\t\t\tthis.form.get('startTime').setValue(null);\r\n\t\t\tthis.toastr.error('Selected time has been surpassed');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic updateRepeat(isChecked: boolean): void {\r\n\t\tif (isChecked) {\r\n\t\t\tthis.form.get('delivery').setValidators(Validators.required);\r\n\t\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('isRepeat').setValue(null);\r\n\t\tthis.form.get('delivery').setValue(null);\r\n\t\tthis.form.get('delivery').clearValidators();\r\n\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t}\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-new-campaign-summary',\r\n\ttemplateUrl: './summary.component.html',\r\n\tstyleUrls: ['./summary.component.scss'],\r\n})\r\nexport class SummaryComponent {\r\n\t@Input() public isShowLabel: boolean;\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-wizard',\r\n\ttemplateUrl: './wizard.component.html',\r\n\tstyleUrls: ['./wizard.component.scss'],\r\n})\r\nexport class WizardComponent implements OnInit {\r\n\t@Input() positionWizard: number = 1;\r\n\t@Input() dataWizard: string[] = [];\r\n\r\n\tconstructor() {}\r\n\r\n\tngOnInit(): void {}\r\n}\r\n","import { AgmCoreModule } from '@agm/core';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { PickerModule } from '@ctrl/ngx-emoji-mart';\r\nimport { AngularEditorModule } from '@kolkov/angular-editor';\r\nimport { NgbDropdownModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport * as echarts from 'echarts';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { SearchModule } from '../global/search/search.module';\r\nimport { CampaignManagementComponent } from './campaign-management.component';\r\nimport { InputNumericModule } from './components/input-numeric/input-numeric.module';\r\nimport { CampaignIndexModule } from './modules/campaign-index/campaign-index.module';\r\nimport { PendingApprovalDialogViewComponent } from './modules/campaign-index/dialog/pending-approval-dialog-view';\r\nimport { DashboardModule } from './modules/dashboard/dashboard.module';\r\nimport { NewCampaignComponent } from './modules/new-campaign';\r\nimport { GeneralInformationEmailComponent } from './modules/new-campaign/components/general-information-email';\r\nimport { GeneralInformationLineComponent } from './modules/new-campaign/components/general-information-line';\r\nimport { GeneralInformationSMSComponent } from './modules/new-campaign/components/general-information-sms';\r\nimport { GeneralInformationWAComponent } from './modules/new-campaign/components/general-information-wa';\r\nimport { FailoverMechanismComponent } from './modules/new-campaign/failover-mechanism';\r\nimport { GeneralInformationComponent } from './modules/new-campaign/general-information';\r\nimport { NewNumberBasesComponent } from './modules/new-campaign/new-number-bases';\r\nimport { SchedulerComponent } from './modules/new-campaign/scheduler';\r\nimport { SummaryComponent } from './modules/new-campaign/summary';\r\nimport { WizardComponent } from './modules/wizard';\r\n\r\n@NgModule({\r\n declarations: [\r\n CampaignManagementComponent,\r\n WizardComponent,\r\n NewCampaignComponent,\r\n GeneralInformationComponent,\r\n SchedulerComponent,\r\n SummaryComponent,\r\n NewNumberBasesComponent,\r\n GeneralInformationLineComponent,\r\n GeneralInformationWAComponent,\r\n GeneralInformationSMSComponent,\r\n GeneralInformationEmailComponent,\r\n PendingApprovalDialogViewComponent,\r\n FailoverMechanismComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n AgmCoreModule.forRoot({\r\n apiKey: 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n libraries: ['places'],\r\n }),\r\n DashboardModule,\r\n MatAutocompleteModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatRadioModule,\r\n MatListModule,\r\n MatButtonModule,\r\n NgxEchartsModule.forRoot({\r\n echarts,\r\n }),\r\n MatIconModule,\r\n PickerModule,\r\n AngularEditorModule,\r\n MatDialogModule,\r\n MatTabsModule,\r\n MatBadgeModule,\r\n NgbDropdownModule,\r\n NgbPaginationModule,\r\n MatCardModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatPaginatorModule,\r\n MatGridListModule,\r\n MatDatepickerModule,\r\n MatSortModule,\r\n SearchModule,\r\n MatDividerModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule,\r\n DragDropModule,\r\n CampaignIndexModule,\r\n InputNumericModule,\r\n ],\r\n exports: [CampaignManagementComponent, SummaryComponent],\r\n entryComponents: [PendingApprovalDialogViewComponent],\r\n providers: [DatePipe],\r\n})\r\nexport class CampaignManagementModule {}\r\n","import { AgmCoreModule } from '@agm/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { AdlCampaignManagementLibraryInternalComponent } from './adl-campaign-management-library-internal.component';\r\nimport { CampaignManagementModule } from './campaign-management/campaign-management.module';\r\nimport { CustomPaginator } from './core/util';\r\n\r\n@NgModule({\r\n\tdeclarations: [AdlCampaignManagementLibraryInternalComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tAgmCoreModule.forRoot({\r\n\t\t\tapiKey: 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n\t\t\tlibraries: ['places'],\r\n\t\t}),\r\n\t\tCampaignManagementModule,\r\n\t\tNgxEchartsModule,\r\n\t\tMatCardModule,\r\n\t\tHttpClientModule,\r\n\t\tToastrModule.forRoot(),\r\n\t],\r\n\texports: [AdlCampaignManagementLibraryInternalComponent],\r\n\tproviders: [{ provide: MatPaginatorIntl, useClass: CustomPaginator }],\r\n})\r\nexport class AdlCampaignManagementLibraryInternalModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ConfirmationComponent } from './confirmation';\r\n\r\n@NgModule({\r\n\tdeclarations: [ConfirmationComponent],\r\n\timports: [CommonModule, MatDialogModule, MatButtonModule],\r\n\texports: [ConfirmationComponent]\r\n})\r\nexport class ConfirmationModule {}\r\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@adlfe/campaign-management-library/lib/core/enums/main-area.enum.ts","ng://@adlfe/campaign-management-library/lib/adl-campaign-management-library-internal.component.ts","ng://@adlfe/campaign-management-library/lib/global/search/search/search.component.ts","ng://@adlfe/campaign-management-library/lib/global/search/search.module.ts","ng://@adlfe/campaign-management-library/lib/core/enums/constant.enum.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/campaign-management.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/components/input-numeric/input-numeric.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/components/input-numeric/input-numeric.module.ts","ng://@adlfe/campaign-management-library/lib/core/directives/mat-select-infinite-scroll.ts","ng://@adlfe/campaign-management-library/lib/core/models/base-option.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/Package.ts","ng://@adlfe/campaign-management-library/lib/core/models/util/http-body-req/http-body-req-pagination.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/util/http-body-req/http-body-req-pagination-global-var.model.ts","ng://@adlfe/campaign-management-library/environments/environment.ts","ng://@adlfe/campaign-management-library/lib/core/models/billing-param-req.component.ts","ng://@adlfe/campaign-management-library/lib/core/models/country.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/create-package-param.model.ts","ng://@adlfe/campaign-management-library/lib/core/models/http-body-resp.model.ts","ng://@adlfe/campaign-management-library/lib/core/services/api-adapter-service.service.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/campaign-table-config.const.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/table.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/models/campaigns-list.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/campaign-index.component.ts","ng://@adlfe/campaign-management-library/lib/core/const/constants.const.ts","ng://@adlfe/campaign-management-library/lib/core/const/failover.const.ts","ng://@adlfe/campaign-management-library/lib/core/const/validation-message.const.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/util/enums.ts","ng://@adlfe/campaign-management-library/lib/core/util/custom-paginator.ts","ng://@adlfe/campaign-management-library/lib/core/util/enum-to-option-generator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/component/filter-in-list-of-campaign/filter-in-list-of-campaign.component.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/shared/shared-services.service.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/shared/model/confirmation.model.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/confirmation/confirmation.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/dialog/pending-approval-dialog-view/pending-approval-dialog-view.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/component/viewing-list-of-campaign-table/viewing-list-of-campaign-table.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/campaign-index/campaign-index.module.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/dashboard/dashboard.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/dashboard/dashboard.module.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/failover-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/general-information-wa-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/models/scheduler-req.model.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/new-campaign.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-email/general-information-email.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-line/general-information-line.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-sms/general-information-sms.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/index.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/max.validator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/validators/min.validator.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/failover-mechanism/failover-mechanism.component.ts","ng://@adlfe/campaign-management-library/lib/core/const/form-validators.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/general-information/general-information.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.ts","ng://@adlfe/campaign-management-library/lib/core/util/download-blob-file.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/scheduler/scheduler.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/new-campaign/summary/summary.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/modules/wizard/wizard.component.ts","ng://@adlfe/campaign-management-library/lib/campaign-management/campaign-management.module.ts","ng://@adlfe/campaign-management-library/lib/adl-campaign-management-library-internal.module.ts","ng://@adlfe/campaign-management-library/lib/global/confirmation/confirmation.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","ar","error","__spread","concat","MainArea","AdlCampaignManagementLibraryInternalComponent","Component","selector","template","SearchComponent","debounceSubject","Subject","searchRes","EventEmitter","ngOnInit","_this","form","FormControl","_a","currentValue","pipe","debounceTime","subscribe","emit","toLowerCase","searchResult","event","clearInput","setValue","Output","Input","SearchModule","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","MatButtonModule","MatIconModule","exports","PastTimeEnum","StatusCampaignEnum","ProductCategoryEnum","CampaignManagementComponent","currentView","CampaignIndex","currentViews","onChangeMainArea","area","InputNumericComponent","controlContainer","allowDecimal","handleInput","numeric","replace","parts","split","slice","join","disallowLeadingZero","startsWith","finalValue","trimLeadingZeros","includes","formControl","patchValue","emitEvent","setBaseStateInitialization","formControlName","formGroup","control","get","touched","_b","valid","invalid","errors","writeValue","_value","registerOnChange","fn","_onBaseChange","registerOnTouched","_onBaseTouched","setDisabledState","isDisabled","_isDisabled","ControlContainer","ContentChild","InputNumericComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","InputNumericModule","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","ngAfterViewInit","openedChange","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","ngOnDestroy","complete","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","options","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","MatSelect","NgZone","Directive","BaseOptionModel","PackageReqModel","clone","source","country","recomended","type","setupFeeRateCard","setupFee","ovrUsgConversationRateCard","costPerCustomer","costPerBusiness","ovrUsgNotficationRateCard","ovrUsgConversationCost","ovrUsgNotficationCost","customPackage","currency","name","monthlyRental","conversationMsg","businessMsg","contacts","isMultipleFlow","tps","multichatLiveAgent","multichatLiveSupervisor","numberOfFlow","waOfficialAccount","dashboardToSendMessage","reportAdminPanel","trainingSupport","isMultiple","checklistWa","checklistLine","checklistTele","specifyPackage","customDevelopment","oneUsageCostConversation","signupOrSetup","checklistAdm","checklistUser","checklistClient","checklistChatAgentAdmin","checklistChatAgentUser","HttpBodyReqPaginationModel","HttpBodyReqPaginationGlobalVarModel","pageSize","pageNo","convert","origin","_super","BillingParamReqModel","filter","platform","clientId","String","CountryModel","dto","category","code","values","param1","param2","ìcon","CreatePackageReqModel","channels","countryCode","maxAgent","maxContact","maxFlow","maxSupervisor","monthlyConversation","monthlyNotification","monthlyRentalRateCard","ovrUsgConversation","ovrUsgNotification","ovrUsgNotificationCost","ovrUsgNotificationRateCard","reports","roles","sendMsgDashboard","training","waOfficialAcc","HttpBodyRespModel","status","errorCode","message","data","totalRecord","location","environment","ApiAdapterServiceService","httpClient","queryCount","executeApiRequest","parameterList","path","httpVerb","isFile","bodyData","parameter","url","formData","FormData","rt","in","forEach","requestType","find","required","window","alert","setQuery","setFormData","undefined","appRequest","_c","withoutKeyData","headers","HttpHeaders","set","localStorage","getItem","request","responseType","catchError","err","ErrorEvent","of","title","detail","statusText","toString","meta","uploadFileToS3","s3Url","file","put","Content-Type","append","HttpClient","Injectable","providedIn","CampaignListTableLabelConst","CampaignListTableColumnConst","TableModel","CampaignsListModel","campaignID","businessName","campaignName","medium","numberCount","deilveredCount","seenCount","responseCount","estimatedCost","actualCost","startDate","endDate","id","columns","dataSource","MatTableDataSource","labels","page","totalData","getNumber","index","limit","getPageIndex","isEmpty","setPage","setPageSize","size","resetPage","setNextPage","isNext","diffData","CampaignIndexComponent","datePipe","apiAdapterService","subscribers","campaignParam","initTable","campaignCountService","getCampaignList","removeItem","table","subs","response","campaignTotal","searchValue","initParam","filterValue","templateName","_d","_e","_f","transform","_g","resp","haveNext","_name","_type","updatePage","updateFilter","_filter","updateSearch","addCampaign","changeCurrentView","NewCampaign","each","unsubscribe","DatePipe","PlatformOptionConst","icon","inputSvgIcon","image","MsgTypeWAOptionConst","MsgTypeEmailOptionConst","MsgTypeLineOptionConst","MediaTypeOptionConst","WidgetLiveCampaignConst","arrow","date","dateclass","CampaignPerformanceChartConfig","legend","orient","x","tooltip","dataset","xAxis","yAxis","series","color","ConversationInsightsChartConfig","trigger","smooth","itemStyle","normal","isLoadingOption","WA","SMS","LINE","EMAIL","VOICE","isHaveNextOption","pageNoOption","optionList","GeneralInformationMessageValidationConst","GeneralInformationWAMessageValidationConst","channel","from","text","media","fileName","catalogue","product","paramName","GeneralInformationEmailMessageValidationConst","GeneralInformationSMSMessageValidationConst","GeneralInformationLineMessageValidationConst","FailoverMechanismValidationConst","interval","accountId","subject","SchedulerMessageValidationConst","startTime","EnumData","CustomPaginator","itemsPerPageLabel","getRangeLabel","startIndex","Math","max","min","MatPaginatorIntl","generateEnumOption","enumObject","keys","reduce","isNaN","Number","inputOption","FilterInListOfCampaignComponent","channelOption","filteredChannelOption","businessNameOption","filteredBusinessNameOption","statusOption","filteredStatusOption","templateOption","isHaveNextTemplateOption","isLoadingTemplateOption","pageNoTemplateOption","closeDropdown","onChangeFilter","initForm","getBusinessNameOptionService","FormGroup","_h","_k","_j","_m","_l","_o","_p","res","getTemplateOptionService","isInfinite","getNextTemplateBatch","templateSelectedDisplay","attribute1","attribute2","templateSearch","businessNameSearch","option","channelSearch","statusSearch","clearDate","validateBackDate","Date","getTime","onReset","reset","getRawValue","onCancel","onApply","SharedServicesService","sendClickEvent","getEvent","asObservable","ConfirmationComponent","sharedService","paramIndex","decorator","deleteRowOn","ConfirmationModel","Inject","args","MAT_DIALOG_DATA","PendingApprovalDialogViewComponent","dialogRef","toastr","isLoading","isSubmit","isShowButton","getCampaignDetailService","getCampaignStorage","generalInformation","JSON","parse","convertUTCDateToLocalDate","getTimezoneOffset","isDirectSend","toUpperCase","isPrevTemplate","ttl","ttlSeconds","_q","_r","accountName","_s","_t","clientName","_u","accountNo","_v","wabaId","_x","_w","_z","_y","details","targetURL","_3","_2","_1","_0","_7","_6","_5","_4","document","_11","_10","_9","_8","video","_14","_13","_12","headerURL","paramHeader","_17","_16","_15","header","paramBody","_20","_19","_18","paramButton","_23","_22","_21","button","paramCarousel","_27","_26","_25","_24","carousel","map","card","bodyParams","val","buttonParams","btnGroup","payload","otpValue","_32","_31","_30","_29","_28","variables","_35","_34","_33","isUseExistingTemplate","_36","ID","_39","_38","_37","_42","_41","_40","lang","_45","_44","_43","_46","_49","_48","_47","examples","_52","_51","_50","_55","_54","_53","buttons","_58","_57","_56","ClientId","_59","ClientName","_60","isDownloadVariableXLS","_61","fileId","isUpload","_62","_63","setItem","stringify","_64","failover","_65","targetAudience","_66","targets","targetAudienceFile","_67","_68","scheduler","schedulerType","_69","scheduleType","_70","_72","_71","_74","_73","isRepeat","_75","delivery","_76","repeat","rejectCampaignService","success","onClose","approveCampaignService","close","MatDialogRef","ToastrService","ViewingListOfCampaignTableComponent","dialog","updateTable","sort","matSort","actionRow","row","action","campaignConfirmationDialog","content","method","confirmation","btnSubmit","btnCancel","open","autoFocus","backdropClass","afterClosed","campaignService","editCampaign","history","replaceState","openViewDialog","height","width","maxWidth","maxHeight","MatDialog","ViewChild","MatSort","static","CampaignIndexModule","MatDatepickerModule","MatTableModule","MatSortModule","MatPaginatorModule","MatDialogModule","MatTabsModule","MatCardModule","MatCheckboxModule","MatSelectModule","MatRadioModule","MatChipsModule","NgbPaginationModule","NgbDropdownModule","MatGridListModule","MatNativeDateModule","MatToolbarModule","MatTooltipModule","DashboardComponent","pastTime","performanceCategories","totalCmpn","deliveryRt","costDesc","convsData","widgetLiveCampaign","selectedPlatform","filterEvent","filterChart","timeUnit","Today","CurrentWeek","CurrentMonth","totalCampaignPercent","getStatictsWidgetString","totalCampaign","totalLive","totalPending","getPerformanceDetails","getConversationDetails","setPerformanceChartData","entries","categories","item","performanceChartData","setConversationChartData","j","conversationChartData","Yesterday","LastWeek","LastMonth","DashboardModule","MatAutocompleteModule","MatListModule","PickerModule","AngularEditorModule","MatButtonToggleModule","MatBadgeModule","NgxEchartsModule","FailoverReqModel","active","accounts","FailoverAccountReqModel","GeneralInformationWAReqModel","qrIndex_1","finalButtons","idx","qrParam","carouselPayload","mappedBody","mappedButtons","btn","headerUrl","mappedVariables","isNeedSave","SchedulerReqModel","tz","Intl","DateTimeFormat","resolvedOptions","timeZone","NewCampaignComponent","positionWizard","isGeneralInformationValid","isFailoverMechanismValid","isNumberBaseInformationValid","isSchedulerInformationValid","isLine","isUploadTargetAudience","onCheckTwilioCounterValid","valuesGeneral","generalInformationData","segments","segmentedMessage","SegmentedMessage","getBody","segmentsCount","encoding","encodingName","characters","numberOfUnicodeScalars","valueResult_1","entry","placeholder","pathname","initWizard","dataWizard","parent","child","failoverMechanism","failoverMechanismData","targetAudienceData","targetAudienceCount","schedulerData","onClickSaveAndNextButton","saveGeneralInformationService","saveNumberBasesService","saveFailoverMechanismService","saveSchedulerService","bodyReq","payloadValue","saveGeneralInformation","onPrevious","openConfirmationDialog","btnSubmitRed","onSubmitForApproval","GeneralInformationEmailComponent","msgTypeWAOption","accountOption","isHaveNextAccountOption","isLoadingAccountOption","isHaveTemplateParam","pageNoAccountOption","updateGeneralInformationForm","setTimeout","validationMessages","initDisable","initEdit","initValidation","getAccountOptionService","Validators","FormArray","valueChanges","isReadOnlyMode","disable","controls","clearValidators","updateValueAndValidity","setValidators","getIsTemplate","formReset","_isMediaType","updateDownloadCSV","updateTemplate","initParameter","disabled","addParamBody","getNextAccountBatch","accountSelectedDisplay","formStorage","paramValue","updateSearchAccount","isChecked","GeneralInformationLineComponent","isJSON","isText","bodyText","isJsonString","findBrackets","match","str","GeneralInformationSMSComponent","AngularValidators","compose","composeAsync","AC","actual","GeneralInformationWAComponent","mapsAPILoader","mediaTypeOption","isShowParameter","extFileAccepted","templates","isCheckUtility","categoryOption","maps","zoom","latitude","longitude","isDraggable","isDoubleClickZoom","campaignData","fileType","useXlsx","toggleExcelValidation","storageData","formValues","getControl","savedVariables","isArray","clear","getIsText","getIsMedia","getIsCatalogue","maxLength","getIsUtility","CustomValidators","controlName","currentOptions","newData","isButton","addParamHeader","getParamButton","addParamButton","getCarouselButtons","cardIndex","getCarouselBodyParams","getCarouselControls","getCarouselBtnParams","btnIndex","at","onFileSelected","files","accept","matchType","indexOf","uploadMediaService","buttonParamsArray","qrIndexLocal_1","existingPayload","fileTypeChange","isSavedTemplateMatches_1","exampleValue","savedVariable","carouselArray","isUsingUpload","dynamicValidator","savedUserInputs_1","cardIdx","cardGroup","bodyIdx","savedBodyVal","btnIdx","btnParamArray","paramIdx","savedBtnVal","savedPayloadVal","getButton","flow_id","lastControl","paramBodyArray","ctrl","updateMediaType","_mediaType","MEDIA_TYPE_LOCATION","initMaps","MEDIA_TYPE_VIDEO","MEDIA_TYPE_DOCUMENT","load","setCurrentLocation","geoCoder","google","Geocoder","autocomplete","places","Autocomplete","mapSearchRef","addListener","place","getPlace","geometry","lat","lng","navigator","geolocation","getCurrentPosition","position","coords","markerDragEnd","latLng","bCtrl","pBtnCtrl","handleChangeTemplate","updateVariableDownloadXLS","handleChangeFrom","addVariable","variableGroup","textControl","currentBody","newSequence","trim","removeVariable","removeAt","targetSequence_1","removeRegex","RegExp","numStr","num","parseInt","variablesArray","currentValidator","MapsAPILoader","FailoverMechanismComponent","setErrors","intervalTime","activeChange","validationAccount","initAccount","_channel","addAccount","getParamBody","account","deleteParamBody","_active","accounts_1","typeChange","number","accountControl","isChooseAccount","getAccount","drop","moveItemInArray","previousIndex","currentIndex","GeneralInformationComponent","sanitizer","isTouchedWAForm","isTouchedSMSForm","isTouchedEmailForm","isShowMore","twilioResultCounter","fulltext","onCheckTwilioCounter","generalInformationForm","getBodyString","setInterval","campaign","getMedia","getLocation","bypassSecurityTrustHtml","fixGeneratedHtml","getTemplate","splice","htmlString","replaceAll","DomSanitizer","NewNumberBasesComponent","isShowUploadCSV","categorySelected","selection","SelectionModel","fileSelected","categoryParam","getCategoryList","genInfoForm","onChecked","pageIndex","checkboxLabel","isSelected","isAllSelected","numSelected","selected","numRows","this_1","masterToggle","select","sum","totalMembers","deselect","onDownloadSampleService","safeBodyText","encodeURIComponent","safeHeaderText","blob","blobUrl","URL","createObjectURL","link","createElement","href","download","appendChild","dispatchEvent","MouseEvent","bubbles","cancelable","view","removeChild","downloadBlobFile","getPresignedUrlService","uploadToS3Service","fileNameS3","finalizeTargetFileService","console","campaignId","info","SchedulerComponent","minDate","isEdit","capitalizeFirstLetter","charAt","updateSchedulerType","updateTime","updateRepeat","SummaryComponent","WizardComponent","CampaignManagementModule","AgmCoreModule","forRoot","apiKey","libraries","echarts","MatDividerModule","MatProgressSpinnerModule","MatSlideToggleModule","DragDropModule","entryComponents","AdlCampaignManagementLibraryInternalModule","HttpClientModule","ToastrModule","useClass","ConfirmationModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum MainArea {\r\n 'Dashboard' = 1,\r\n 'CampaignIndex' = 2,\r\n 'CreateCampaign' = 3,\r\n 'NewCampaign' = 4,\r\n 'UpdateNumberBases' = 5,\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-adl-campaign-management-library-internal',\r\n\ttemplate: `\r\n\t\t<p>\r\n\t\t\t<lib-campaign-management></lib-campaign-management>\r\n\t\t</p>\r\n\t`,\r\n})\r\nexport class AdlCampaignManagementLibraryInternalComponent {}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tselector: 'lib-search',\r\n\ttemplateUrl: './search.component.html',\r\n\tstyleUrls: ['./search.component.scss'],\r\n})\r\nexport class SearchComponent implements OnInit {\r\n\t@Output()\r\n\tpublic searchRes: EventEmitter<string>;\r\n\r\n\tpublic form: FormControl;\r\n\r\n\tprivate debounceSubject = new Subject();\r\n\r\n\t@Input()\r\n\tpublic placeholder: string;\r\n\r\n\t@Input()\r\n\tpublic currentValue: string;\r\n\r\n\tconstructor() {\r\n\t\tthis.searchRes = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = new FormControl(this.currentValue ?? '');\r\n\r\n\t\tthis.debounceSubject.pipe(debounceTime(500)).subscribe((value: any) => {\r\n\t\t\tthis.searchRes.emit(value.toLowerCase());\r\n\t\t});\r\n\t}\r\n\r\n\tpublic searchResult(event: any) {\r\n\t\tthis.debounceSubject.next(event.target.value);\r\n\t}\r\n\r\n\tpublic clearInput(): void {\r\n\t\tthis.form.setValue('');\r\n\t\tthis.searchRes.emit(this.form.value);\r\n\t}\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SearchComponent } from './search/search.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n\r\n@NgModule({\r\n declarations: [SearchComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n ],\r\n exports: [\r\n SearchComponent\r\n ]\r\n})\r\nexport class SearchModule { }\r\n","export enum PastTimeEnum {\r\n\tToday = 'today',\r\n\tYesterday = 'yesterday',\r\n\tCurrentWeek = 'currentWeek',\r\n\tLastWeek = 'last week',\r\n\tCurrentMonth = 'currentMonth',\r\n\tLastMonth = 'last month',\r\n}\r\n\r\nexport enum StatusCampaignEnum {\r\n\tDraft = 'DRAFT',\r\n\tWaitingApproval = 'APPROVAL',\r\n\tRejected = 'REJECTED',\r\n\tScheduled = 'SCHEDULED',\r\n\tStopped = 'STOPPED',\r\n\tDeleted = 'DELETED',\r\n\tCompleted = 'COMPLETED',\r\n\tFailed = 'FAILED',\r\n\tPaused = 'PAUSED',\r\n\tProcessing = 'PROCESS',\r\n}\r\n\r\nexport enum ProductCategoryEnum {\r\n\tSingleProduct = 'product',\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MainArea } from '../core/enums/main-area.enum';\r\n\r\n@Component({\r\n\tselector: 'lib-campaign-management',\r\n\ttemplateUrl: './campaign-management.component.html',\r\n\tstyleUrls: [],\r\n})\r\nexport class CampaignManagementComponent {\r\n\tpublic currentView: MainArea = MainArea.CampaignIndex;\r\n\tpublic currentViews = MainArea;\r\n\r\n\tconstructor() {\r\n\t\t/* Init Localstorage (Local Only) */\r\n\t\t/* const data = {\r\n\t\t\t'telin.accessToken':\r\n\t\t\t\t'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRJZCI6IlBST1ZJREVSIiwiZXhwIjoxNzA4MDAyNzI4LCJpYXQiOjE3MDc5Nzg3MjgsIm5iZiI6MTcwNzk3ODcyOCwic2Vzc2lvbklkIjoiMDFIUE5RRTk5N0E3SkZLNjk1QTgyWEtTWkEiLCJ1c2VySWQiOiJhZG1pbiJ9.JWn1gRtlU6SYHa3KkP2FLhje9tvhxsD005dtxmTT5z4-lc65ekiClS5r7Wg8vamUappN_9uQINTJeZCjEU1IwYf6InUddxX6XsDWtCwixuePNq4JZMPrCUl_N4DBewPwL30RRrodoo0dxUstHLbTg9BUZ3qPq1QK6pLyd1HhKtN_jkRJ11VP2hEl6ef364ofmZvByDTKO56ah0GYzpxZ1uxvNV9PsyiuQk_drxE6x7PI7n-yH_H00zauMF6FYhTgv0SbqIRGQr-O8MKl1mbmk3efSdEr3gx6Q-bztG8p_jgOPWjVf4ol_6gfqtMOrlxTe2UJeR23fhWXCbp0ld20HpjgeIlkawoqpj8_TsjsnsPYk5epC2h5YVXrCuozWw5GnxYg7LDSx0CGQhe2JNRSy92b3hSvSahTQ0rKbmVDyvCIcRVhk2RO4Ilc-ddx4HhB8fcvbSVTAPBnI0A9NkPKSYKXA5SwiIlcPqex15BBG4zBbEX7D4JWr4925t2--WXkUIjsKvteOx0u9OhcBTbajahVepTNByNyqdKrJzdShWTBXw4mRNprL57ZZ3qFdCA6-11FcmeRkpDRqUX7kAXloFKBtcOECNjUpLNkf4FmT687-gt1R0xGIJsTatLSsc2K4Xr1TpTiuC7D3xledvsGTC07UuDgVQBb7AkN1Kch3Mg',\r\n\t\t\t'telin.clientId': 'PROVIDER',\r\n\t\t\t'telin.clientName': 'Provider',\r\n\t\t\t'telin.email': 'admin@bsp.com',\r\n\t\t\t'telin.id': 'admin',\r\n\t\t\t'telin.name': 'admin',\r\n\t\t\t'telin.roleCode': 'admin',\r\n\t\t\t'telin.roleId': 'admin',\r\n\t\t\t'telin.roleName': 'Administrator',\r\n\t\t\t'telin.roles':\r\n\t\t\t\t'[{\"isClientRole\":false,\"name\":\"Administrator\",\"code\":\"admin\",\"id\":\"admin\"}]',\r\n\t\t};\r\n\r\n\t\tObject.keys(data).forEach(function (k) {\r\n\t\t\tlocalStorage.setItem(k, data[k]);\r\n\t\t}); */\r\n\t\t/* Init Localstorage (Local Only) */\r\n\t}\r\n\r\n\tonChangeMainArea(area: MainArea): void {\r\n\t\tthis.currentView = area;\r\n\t}\r\n}\r\n","import { Component, ContentChild, forwardRef, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormControl,\r\n FormGroup,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input[type=numeric]',\r\n templateUrl: './input-numeric.component.html',\r\n styleUrls: ['./input-numeric.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputNumericComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputNumericComponent implements ControlValueAccessor, OnInit {\r\n @Input() formControlName: string;\r\n @Input() formControl: FormControl;\r\n @Input() trimLeadingZeros: boolean;\r\n @Input() disallowLeadingZero: boolean;\r\n @Input() allowDecimal: boolean = true;\r\n @Input() identifier: string;\r\n @Input() placeholder: string;\r\n @Input() label: string;\r\n @Input() maxLength: number;\r\n @Input() suffix: string;\r\n @Input() hint: string;\r\n\r\n @ContentChild('suffix') suffixTmpl: TemplateRef<any>;\r\n\r\n private _value: any;\r\n private _isDisabled: boolean;\r\n private _onBaseChange: () => void;\r\n private _onBaseTouched: () => void;\r\n\r\n constructor(private controlContainer: ControlContainer) {}\r\n\r\n public handleInput(event: Event): void {\r\n const inputElement = event.target as HTMLInputElement;\r\n const value = inputElement.value || '';\r\n\r\n let numeric = this.allowDecimal ? value.replace(/[^0-9.]/g, '') : value.replace(/\\D/g, '');\r\n\r\n if (this.allowDecimal) {\r\n const parts = numeric.split('.');\r\n if (parts.length > 2) {\r\n numeric = parts[0] + '.' + parts.slice(1).join('');\r\n }\r\n }\r\n\r\n if (\r\n this.disallowLeadingZero &&\r\n numeric.startsWith('0') &&\r\n numeric.length > 1 &&\r\n numeric[1] !== '.'\r\n ) {\r\n numeric = numeric.replace(/^0+/, '');\r\n }\r\n\r\n let finalValue: string | number = numeric;\r\n if (this.trimLeadingZeros && numeric !== '' && !numeric.includes('.')) {\r\n finalValue = +numeric;\r\n }\r\n\r\n this.formControl.patchValue(finalValue, { emitEvent: false });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setBaseStateInitialization();\r\n }\r\n\r\n private setBaseStateInitialization(): void {\r\n if (!this.formControlName) return;\r\n const formGroup = this.controlContainer.control as FormGroup;\r\n this.formControl = formGroup.get(this.formControlName) as FormControl;\r\n }\r\n\r\n public get isValid(): boolean {\r\n return !!(this.formControl?.touched && this.formControl?.valid);\r\n }\r\n\r\n public get isInvalid(): boolean {\r\n return !!(this.formControl?.touched && this.formControl?.invalid);\r\n }\r\n\r\n public get errors(): ValidationErrors | null {\r\n return this.formControl.errors;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this._value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onBaseChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onBaseTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled = isDisabled;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { InputNumericComponent } from './input-numeric.component';\r\n\r\n@NgModule({\r\n imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, CommonModule],\r\n declarations: [InputNumericComponent],\r\n exports: [InputNumericComponent],\r\n})\r\nexport class InputNumericModule {}\r\n","import {\r\n\tAfterViewInit,\r\n\tDirective,\r\n\tEventEmitter,\r\n\tInput,\r\n\tNgZone,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\r\n\r\n@Directive({\r\n\tselector: '[matSelectInfiniteScroll]',\r\n})\r\nexport class MatSelectInfiniteScrollDirective\r\n\timplements OnInit, OnDestroy, AfterViewInit\r\n{\r\n\t@Input() threshold = '15%';\r\n\t@Input() debounceTime = 150;\r\n\t@Input() complete: boolean;\r\n\t@Output() infiniteScroll = new EventEmitter<void>();\r\n\r\n\tprivate panel: Element;\r\n\tprivate thrPx = 0;\r\n\tprivate thrPc = 0;\r\n\tprivate singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\r\n\tprivate destroyed$ = new Subject<boolean>();\r\n\r\n\tconstructor(private matSelect: MatSelect, private ngZone: NgZone) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis.evaluateThreshold();\r\n\t}\r\n\r\n\tngAfterViewInit() {\r\n\t\tthis.matSelect.openedChange\r\n\t\t\t.pipe(takeUntil(this.destroyed$))\r\n\t\t\t.subscribe(opened => {\r\n\t\t\t\tif (opened) {\r\n\t\t\t\t\tthis.panel = this.matSelect.panel.nativeElement;\r\n\t\t\t\t\tthis.singleOptionHeight = this.getSelectItemHeightPx();\r\n\t\t\t\t\tthis.registerScrollListener();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis.destroyed$.next(true);\r\n\t\tthis.destroyed$.complete();\r\n\t}\r\n\r\n\tevaluateThreshold() {\r\n\t\tif (this.threshold.lastIndexOf('%') > -1) {\r\n\t\t\tthis.thrPx = 0;\r\n\t\t\tthis.thrPc = parseFloat(this.threshold) / 100;\r\n\t\t} else {\r\n\t\t\tthis.thrPx = parseFloat(this.threshold);\r\n\t\t\tthis.thrPc = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterScrollListener() {\r\n\t\tfromEvent(this.panel, 'scroll')\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(this.destroyed$),\r\n\t\t\t\tdebounceTime(this.debounceTime),\r\n\t\t\t\ttap(event => {\r\n\t\t\t\t\tthis.handleScrollEvent(event);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\thandleScrollEvent(event) {\r\n\t\tthis.ngZone.runOutsideAngular(() => {\r\n\t\t\tif (this.complete) return;\r\n\r\n\t\t\tconst countOfRenderedOptions = this.matSelect.options.length;\r\n\t\t\tconst infiniteScrollDistance =\r\n\t\t\t\tthis.singleOptionHeight * countOfRenderedOptions;\r\n\t\t\tconst threshold =\r\n\t\t\t\tthis.thrPc !== 0\r\n\t\t\t\t\t? infiniteScrollDistance * this.thrPc\r\n\t\t\t\t\t: this.thrPx;\r\n\t\t\tconst scrolledDistance =\r\n\t\t\t\tthis.panel.clientHeight + event.target.scrollTop;\r\n\r\n\t\t\tif (scrolledDistance + threshold >= infiniteScrollDistance)\r\n\t\t\t\tthis.ngZone.run(() => this.infiniteScroll.emit());\r\n\t\t});\r\n\t}\r\n\r\n\tgetSelectItemHeightPx(): number {\r\n\t\treturn (\r\n\t\t\tparseFloat(getComputedStyle(this.panel).fontSize) *\r\n\t\t\tSELECT_ITEM_HEIGHT_EM\r\n\t\t);\r\n\t}\r\n}\r\n","export class BaseOptionModel {\r\n\tpublic label: string;\r\n\tpublic value: string | number;\r\n}\r\n","export class PackageReqModel {\r\n\tpublic name: string;\r\n\tpublic monthlyRental: number;\r\n\tpublic conversationMsg: string;\r\n\tpublic businessMsg: string;\r\n\tpublic contacts: string;\r\n\tpublic isMultipleFlow: boolean;\r\n\tpublic tps: number;\r\n\tpublic multichatLiveAgent: string;\r\n\tpublic multichatLiveSupervisor: string;\r\n\tpublic numberOfFlow: string;\r\n\tpublic waOfficialAccount: string;\r\n\tpublic dashboardToSendMessage: string;\r\n\tpublic reportAdminPanel: string;\r\n\tpublic trainingSupport: string;\r\n\tpublic isMultiple: string;\r\n\tpublic checklistWa:\tboolean;\r\n\tpublic checklistTele:\tboolean;\r\n\tpublic checklistLine:\tboolean;\r\n\tpublic specifyPackage: string;\r\n\tpublic customDevelopment: string;\r\n\tpublic oneUsageCostConversation: string;\r\n\tpublic ovrUsgConversationRateCard: boolean;\r\n\tpublic ovrUsgNotficationRateCard: boolean | string;\r\n\tpublic ovrUsgConversationCost: string;\r\n\tpublic ovrUsgNotficationCost: string;\r\n\tpublic signupOrSetup: string;\r\n\tpublic checklistAdm: boolean;\r\n\tpublic checklistUser: boolean;\r\n\tpublic checklistClient: boolean;\r\n\tpublic checklistChatAgentAdmin: boolean;\r\n\tpublic checklistChatAgentUser: boolean;\r\n\tpublic country: string;\r\n\tpublic currency: string;\r\n\tpublic customPackage: boolean;\r\n\tpublic costPerCustomer: string;\r\n\tpublic costPerBusiness: string;\r\n\tpublic setupFeeRateCard: boolean | string;\r\n\tpublic setupFee: string;\r\n\tpublic type: string;\r\n\tpublic recomended: string;\r\n\r\n\t\r\n\r\n\tpublic clone(source: any): PackageReqModel {\r\n\t\tif (source.country) {\r\n\t\t\tthis.country = source.country;\r\n\t\t}\r\n\t\tif (source.recomended) {\r\n\t\t\tthis.recomended = source.recomended;\r\n\t\t}\r\n\t\tif (source.type) {\r\n\t\t\tthis.type = source.type;\r\n\t\t}\r\n\t\tif (source.setupFeeRateCard) {\r\n\t\t\tthis.setupFeeRateCard = source.setupFeeRateCard;\r\n\t\t}\r\n\t\tif (source.setupFee) {\r\n\t\t\tif(source.setupFeeRateCard === 'true') {\r\n\t\t\t\tthis.setupFee = null;\r\n\t\t\t}else {\r\n\t\t\t\tthis.setupFee = source.setupFee;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationRateCard) {\r\n\t\t\tthis.ovrUsgConversationRateCard = source.ovrUsgConversationRateCard;\r\n\t\t}\r\n\t\tif (source.costPerCustomer) {\r\n\t\t\tthis.costPerCustomer = source.costPerCustomer;\r\n\t\t}\r\n\t\tif (source.costPerBusiness) {\r\n\t\t\tthis.costPerBusiness = source.costPerBusiness;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotficationRateCard) {\r\n\t\t\t\tthis.ovrUsgNotficationRateCard = source.ovrUsgNotficationRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationCost) {\r\n\t\t\tthis.ovrUsgConversationCost = source.ovrUsgConversationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotficationCost) {\r\n\t\t\tif(source.ovrUsgNotficationRateCard === 'true') {\r\n\t\t\t\tthis.ovrUsgNotficationCost = null;\r\n\t\t\t}else {\r\n\t\t\t\tthis.ovrUsgNotficationCost = source.ovrUsgNotficationCost;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\tif (source.customPackage) {\r\n\t\t\tthis.customPackage = source.customPackage;\r\n\t\t}\r\n\t\tif (source.currency) {\r\n\t\t\tthis.currency = source.currency;\r\n\t\t}\r\n\t\tif (source.name) {\r\n\t\t\tthis.name = source.name;\r\n\t\t}\r\n\t\tif (source.monthlyRental) {\r\n\t\t\tthis.monthlyRental = source.monthlyRental;\r\n\t\t}\r\n\t\tif (source.conversationMsg) {\r\n\t\t\tthis.conversationMsg = source.conversationMsg;\r\n\t\t}\r\n\t\tif (source.businessMsg) {\r\n\t\t\tthis.businessMsg = source.businessMsg;\r\n\t\t}\r\n\t\tif (source.contacts) {\r\n\t\t\tthis.contacts = source.contacts;\r\n\t\t}\r\n\t\tif (source.isMultipleFlow) {\r\n\t\t\tthis.isMultipleFlow = source.isMultipleFlow;\r\n\t\t}\r\n\t\tif (source.tps) {\r\n\t\t\tthis.tps = source.tps;\r\n\t\t}\r\n\t\tif (source.multichatLiveAgent) {\r\n\t\t\tthis.multichatLiveAgent = source.multichatLiveAgent;\r\n\t\t}\r\n\t\tif (source.multichatLiveSupervisor) {\r\n\t\t\tthis.multichatLiveSupervisor = source.multichatLiveSupervisor;\r\n\t\t}\r\n\t\tif (source.numberOfFlow) {\r\n\t\t\tthis.numberOfFlow = source.numberOfFlow;\r\n\t\t}\r\n\t\tif (source.waOfficialAccount) {\r\n\t\t\tthis.waOfficialAccount = source.waOfficialAccount;\r\n\t\t}\r\n\t\tif (source.dashboardToSendMessage) {\r\n\t\t\tthis.dashboardToSendMessage = source.dashboardToSendMessage;\r\n\t\t}\r\n\t\tif (source.reportAdminPanel) {\r\n\t\t\tthis.reportAdminPanel = source.reportAdminPanel;\r\n\t\t}\r\n\t\tif (source.trainingSupport) {\r\n\t\t\tthis.trainingSupport = source.trainingSupport;\r\n\t\t}\r\n\t\tif (source.isMultiple) {\r\n\t\t\tthis.isMultiple = source.isMultiple;\r\n\t\t}\r\n\t\tif (source.checklistWa) {\r\n\t\t\tthis.checklistWa = source.checklistWa;\r\n\t\t}\r\n\t\tif (source.checklistLine) {\r\n\t\t\tthis.checklistLine = source.checklistLine;\r\n\t\t}\r\n\t\tif (source.checklistTele) {\r\n\t\t\tthis.checklistTele = source.checklistTele;\r\n\t\t}\r\n\t\tif (source.specifyPackage) {\r\n\t\t\tthis.specifyPackage = source.specifyPackage;\r\n\t\t}\r\n\t\tif (source.customDevelopment) {\r\n\t\t\tthis.customDevelopment = source.customDevelopment;\r\n\t\t}\r\n\t\tif (source.oneUsageCostConversation) {\r\n\t\t\tthis.oneUsageCostConversation = source.oneUsageCostConversation;\r\n\t\t}\r\n\t\t// if (source.oneUsageCostNotification) {\r\n\t\t// \tthis.oneUsageCostNotification = source.oneUsageCostNotification;\r\n\t\t// }\r\n\t\tif (source.signupOrSetup) {\r\n\t\t\tthis.signupOrSetup = source.signupOrSetup;\r\n\t\t}\r\n\t\tif (source.checklistAdm) {\r\n\t\t\tthis.checklistAdm = source.checklistAdm;\r\n\t\t}\r\n\t\tif (source.checklistUser) {\r\n\t\t\tthis.checklistUser = source.checklistUser;\r\n\t\t}\r\n\t\tif (source.checklistClient) {\r\n\t\t\tthis.checklistClient = source.checklistClient;\r\n\t\t}\r\n\t\tif (source.checklistChatAgentAdmin) {\r\n\t\t\tthis.checklistChatAgentAdmin = source.checklistChatAgentAdmin;\r\n\t\t}\r\n\t\tif (source.checklistChatAgentUser) {\r\n\t\t\tthis.checklistChatAgentUser = source.checklistChatAgentUser;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n}","export class HttpBodyReqPaginationModel {\r\n\tpublic pageSize: number;\r\n\tpublic pageNo: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.pageSize = 10;\r\n\t\tthis.pageNo = 1;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tpageSize: this.pageSize,\r\n\t\t\tpageNo: this.pageNo,\r\n\t\t};\r\n\t}\r\n}\r\n","export class HttpBodyReqPaginationGlobalVarModel {\r\n\tpublic pageSize: number;\r\n\tpublic pageNo: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.pageSize = 3;\r\n\t\tthis.pageNo = 1;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tpageSize: this.pageSize,\r\n\t\t\tpageNo: this.pageNo,\r\n\t\t};\r\n\t}\r\n}\r\n","// let API_CONST = '';\r\n\r\n// if (location.origin.includes('dashboard.neuapix'))\r\n// \tAPI_CONST = 'https://api.neuapix.com';\r\n// else if (location.origin.includes('dashboard-staging.neuapix'))\r\n// \tAPI_CONST = 'https://api-staging.neuapix.com';\r\n// else if (location.origin.includes('dashboard-qa.adlsandbox'))\r\n// \tAPI_CONST = 'https://apibsp-qa.adlsandbox.net';\r\n// else if (location.origin.includes('demo-dev.adlsandbox.net'))\r\n// \tAPI_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n// else API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n\r\n// export const environment = {\r\n// \tproduction: false,\r\n// \tapi: API_CONST,\r\n// };\r\nlet API_CONST = '';\r\nconst origin = location.origin;\r\n\r\n// 1. Cek Production\r\nif (origin.includes('dashboard.neuapix.com')) {\r\n API_CONST = 'https://api.neuapix.com';\r\n}\r\n// 2. Cek Staging\r\nelse if (origin.includes('dashboard-staging')) {\r\n API_CONST = 'https://api-staging.neuapix.com';\r\n}\r\n// 3. Cek QA\r\nelse if (origin.includes('dashboard-qa')) {\r\n API_CONST = 'https://apibsp-qa.adlsandbox.net';\r\n}\r\n// 4. Cek Demo Dev secara spesifik\r\nelse if (origin.includes('demo-dev')) {\r\n API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n}\r\n// 5. Default (Localhost atau lainnya)\r\nelse {\r\n API_CONST = 'https://apibsp-dev.adlsandbox.net';\r\n}\r\n\r\nexport const environment = {\r\n production: false,\r\n api: API_CONST,\r\n};\r\n","import { HttpBodyReqPaginationModel } from \"./util\";\r\n\r\nexport class BillingParamReqModel extends HttpBodyReqPaginationModel {\r\n\tpublic filter: string;\r\n\tpublic platform: string;\r\n\tpublic clientId: string;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tfilter: this.filter,\r\n\t\t\tplatform: this.platform,\r\n\t\t\tclientId: this.clientId,\r\n\t\t\tpageNo: String(this.pageNo),\r\n\t\t\tpageSize: String(this.pageSize),\r\n\t\t};\r\n\t}\r\n}\r\n","export class CountryModel {\r\n\tpublic category: string;\r\n\tpublic code: string;\r\n\tpublic values: string;\r\n\tpublic param1: string;\r\n\tpublic param2: boolean;\r\n\tpublic ìcon: boolean;\r\n\r\n\tpublic convert(dto: any): CountryModel {\r\n\r\n\t\tif (dto.category) {\r\n\t\t\tthis.category = dto.category;\r\n\t\t}\r\n\t\tif (dto.code) {\r\n\t\t\tthis.code = dto.code;\r\n\t\t}\r\n\t\tif (dto.values) {\r\n\t\t\tthis.values = dto.values;\r\n\t\t}\r\n\t\tif (dto.param1) {\r\n\t\t\tthis.param1 = dto.param1;\r\n\t\t}\r\n\t\tif (dto.param2) {\r\n\t\t\tthis.param2 = dto.param2;\r\n\t\t}\r\n\t\tif (dto.ìcon) {\r\n\t\t\tthis.ìcon = dto.ìcon;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n}\r\n","export class CreatePackageReqModel {\r\n\tpublic name : string;\r\n\tpublic channels : string[] = [];\r\n\tpublic customDevelopment : boolean;\r\n\tpublic maxAgent : string;\r\n\tpublic maxContact : string;\r\n\tpublic maxFlow : string;\r\n\tpublic maxSupervisor : string;\r\n\tpublic monthlyConversation : string;\r\n\tpublic monthlyNotification : string;\r\n\tpublic monthlyRental : number;\r\n\tpublic monthlyRentalRateCard : string;\r\n\tpublic ovrUsgConversation : string;\r\n\tpublic ovrUsgConversationCost : string;\r\n\tpublic ovrUsgConversationRateCard : boolean;\r\n\tpublic ovrUsgNotification : string;\r\n\tpublic ovrUsgNotificationCost : string;\r\n\tpublic ovrUsgNotificationRateCard : boolean;\r\n\tpublic reports : boolean;\r\n\tpublic roles : string;\r\n\tpublic sendMsgDashboard : boolean;\r\n\tpublic setupFee : string;\r\n\tpublic tps : number;\r\n\tpublic training : boolean;\r\n\tpublic waOfficialAcc : boolean;\r\n\tpublic customPackage: boolean;\r\n\tpublic countryCode: string;\r\n\tpublic costPerCustomer: string;\r\n\tpublic costPerBusiness: string;\r\n\tpublic setupFeeRateCard: boolean;\r\n\tpublic type: string;\r\n\tpublic recomended: string;\r\n\r\n\tpublic clone(source:any): CreatePackageReqModel {\r\n\t\tif (source.name) {\r\n\t\t\tthis.name = source.name;\r\n\t\t}\r\n\t\tif (source.type) {\r\n\t\t\tthis.type = source.type;\r\n\t\t}\r\n\t\tif (source.recomended) {\r\n\t\t\tthis.recomended = source.recomended;\r\n\t\t}\r\n\t\tif (source.setupFeeRateCard) {\r\n\t\t\tthis.setupFeeRateCard = source.setupFeeRateCard;\r\n\t\t}\r\n\t\tif (source.countryCode) {\r\n\t\t\tthis.countryCode = source.countryCode;\r\n\t\t}\r\n\t\tif (source.costPerCustomer) {\r\n\t\t\tthis.costPerCustomer = source.costPerCustomer;\r\n\t\t}\r\n\t\tif (source.costPerBusiness) {\r\n\t\t\tthis.costPerBusiness = source.costPerBusiness;\r\n\t\t}\r\n\t\tif (source.customPackage) {\r\n\t\t\tthis.customPackage = source.customPackage;\r\n\t\t}\r\n\t\tif (source.channels) {\r\n\t\t\tthis.channels = [source.channels];\r\n\t\t}\r\n\t\tif (source.customDevelopment) {\r\n\t\t\tthis.customDevelopment = source.customDevelopment;\r\n\t\t}\r\n\t\tif (source.maxAgent) {\r\n\t\t\tthis.maxAgent = source.maxAgent;\r\n\t\t}\r\n\t\tif (source.maxContact) {\r\n\t\t\tthis.maxContact = source.maxContact;\r\n\t\t}\r\n\t\tif (source.maxFlow) {\r\n\t\t\tthis.maxFlow = source.maxFlow;\r\n\t\t}\r\n\t\tif (source.maxSupervisor) {\r\n\t\t\tthis.maxSupervisor = source.maxSupervisor;\r\n\t\t}\r\n\t\tif (source.monthlyConversation) {\r\n\t\t\tthis.monthlyConversation = source.monthlyConversation;\r\n\t\t}\r\n\t\tif (source.monthlyNotification) {\r\n\t\t\tthis.monthlyNotification = source.monthlyNotification;\r\n\t\t}\r\n\t\tif (source.monthlyRental) {\r\n\t\t\tthis.monthlyRental = source.monthlyRental;\r\n\t\t}\r\n\t\tif (source.monthlyRentalRateCard) {\r\n\t\t\tthis.monthlyRentalRateCard = source.monthlyRentalRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversation) {\r\n\t\t\tthis.ovrUsgConversation = source.ovrUsgConversation;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationCost) {\r\n\t\t\tthis.ovrUsgConversationCost = source.ovrUsgConversationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgConversationRateCard) {\r\n\t\t\tthis.ovrUsgConversationRateCard = source.ovrUsgConversationRateCard;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotification) {\r\n\t\t\tthis.ovrUsgNotification = source.ovrUsgNotification;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotificationCost) {\r\n\t\t\tthis.ovrUsgNotificationCost = source.ovrUsgNotificationCost;\r\n\t\t}\r\n\t\tif (source.ovrUsgNotificationRateCard) {\r\n\t\t\tthis.ovrUsgNotificationRateCard = source.ovrUsgNotificationRateCard;\r\n\t\t}\r\n\t\tif (source.reports) {\r\n\t\t\tthis.reports = source.reports;\r\n\t\t}\r\n\t\tif (source.roles) {\r\n\t\t\tthis.roles = source.roles;\r\n\t\t}\r\n\t\tif (source.sendMsgDashboard) {\r\n\t\t\tthis.sendMsgDashboard = source.sendMsgDashboard;\r\n\t\t}\r\n\t\tif (source.setupFee) {\r\n\t\t\tthis.setupFee = source.setupFee;\r\n\t\t}\r\n\t\tif (source.tps) {\r\n\t\t\tthis.tps = source.tps;\r\n\t\t}\r\n\t\tif (source.training) {\r\n\t\t\tthis.training = source.training;\r\n\t\t}\r\n\t\tif (source.waOfficialAcc) {\r\n\t\t\tthis.waOfficialAcc = source.waOfficialAcc;\r\n\t\t}\r\n\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\r\n\tconvert(): any {\r\n\t\treturn {\r\n\t\t\tname: this.name,\r\n\t\t\tchannels : this.channels ,\r\n\t\t\tcustomDevelopment : this.customDevelopment ,\r\n\t\t\tmaxAgent : +this.maxAgent ,\r\n\t\t\tmaxContact :+this.maxContact ,\r\n\t\t\tmaxFlow : +this.maxFlow ,\r\n\t\t\tmaxSupervisor : +this.maxSupervisor ,\r\n\t\t\tmonthlyConversation : +this.monthlyConversation ,\r\n\t\t\tmonthlyNotification : +this.monthlyNotification ,\r\n\t\t\tmonthlyRental : +this.monthlyRental ,\r\n\t\t\tmonthlyRentalRateCard : this.monthlyRentalRateCard ,\r\n\t\t\tovrUsgConversation : this.ovrUsgConversation ,\r\n\t\t\tovrUsgConversationCost : +this.ovrUsgConversationCost ,\r\n\t\t\tovrUsgConversationRateCard : this.ovrUsgConversationRateCard ,\r\n\t\t\tovrUsgNotification : this.ovrUsgNotification ,\r\n\t\t\tovrUsgNotificationCost : +this.ovrUsgNotificationCost ,\r\n\t\t\tovrUsgNotificationRateCard : this.ovrUsgNotificationRateCard ,\r\n\t\t\treports : this.reports ,\r\n\t\t\troles : this.roles ,\r\n\t\t\tsendMsgDashboard : this.sendMsgDashboard ,\r\n\t\t\tsetupFee : +this.setupFee ,\r\n\t\t\ttps : +this.tps ,\r\n\t\t\ttraining : this.training ,\r\n\t\t\twaOfficialAcc : this.waOfficialAcc,\r\n\t\t\tcustomPackage: this.customPackage,\r\n\t\t\tcountryCode: this.countryCode,\r\n\t\t\tcostPerBusiness: this.costPerBusiness,\r\n\t\t\tcostPerCustomer: this.costPerCustomer,\r\n\t\t\tsetupFeeRateCard: this.setupFeeRateCard,\r\n\t\t\ttype: this.type,\r\n\t\t\trecomended: this.recomended\r\n\t\t};\r\n\t}\r\n}","export class HttpBodyRespModel {\r\n\tpublic status: number;\r\n\tpublic errorCode: number;\r\n\tpublic message: string;\r\n\tpublic data: any;\r\n\tpublic totalRecord: number;\r\n\r\n\tpublic convert(dto: any): HttpBodyRespModel {\r\n\t\tif (dto.status) {\r\n\t\t\tthis.status = dto.status;\r\n\t\t}\r\n\t\tif (dto.errorCode) {\r\n\t\t\tthis.errorCode = dto.errorCode;\r\n\t\t}\r\n\t\tif (dto.message) {\r\n\t\t\tthis.message = dto.message;\r\n\t\t}\r\n\t\tif (dto.data) {\r\n\t\t\tthis.data = dto.data;\r\n\t\t}\r\n\t\tif (dto.totalRecord >= 0) {\r\n\t\t\tthis.totalRecord = dto.totalRecord;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError } from 'rxjs/internal/operators/catchError';\r\nimport { environment } from '../../../environments/environment';\r\nimport { Parameter, ServerInBuiltError } from '../models/util/api-adapter-service-models';\r\nimport { AppRequest } from '../models/util/api-dto/request-models/app-request';\r\nimport { AppResponse } from '../models/util/api-dto/response-models/app-response';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ApiAdapterServiceService {\r\n private queryCount = 0;\r\n\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n public executeApiRequest<T>(\r\n parameterList: Array<Parameter>,\r\n path: string,\r\n httpVerb: string,\r\n isFile: boolean = false\r\n ): Observable<any> {\r\n let url = path;\r\n let bodyData: {};\r\n let parameter: Parameter;\r\n let formData = new FormData();\r\n\r\n parameterList\r\n ?.filter((rt) => rt.in !== 'header')\r\n .forEach((requestType) => {\r\n parameter = parameterList.find(\r\n (parameter) => parameter.name === requestType.name\r\n ) as Parameter;\r\n\r\n if (!parameter && requestType.required && requestType.in !== 'header') {\r\n window.alert(\r\n `Parameter \"${requestType.name}\" is required!, Try again with \"${requestType.name}\"`\r\n );\r\n } else if (!parameter && !requestType.required) {\r\n // continue;\r\n } else {\r\n switch (requestType.in) {\r\n case 'body': {\r\n bodyData = parameter.value;\r\n break;\r\n }\r\n case 'path': {\r\n url = url.replace(`{${parameter.name}}`, parameter.value);\r\n break;\r\n }\r\n case 'query': {\r\n url = this.setQuery(parameter.name, parameter.value, url);\r\n break;\r\n }\r\n case 'formData': {\r\n formData = this.setFormData(parameter, formData);\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n parameter = undefined;\r\n });\r\n\r\n this.queryCount = 0;\r\n\r\n url = `${environment.api}${url}`;\r\n const appRequest: AppRequest<any> = {\r\n ...(parameterList?.[0]?.withoutKeyData ? bodyData : { data: bodyData }),\r\n };\r\n\r\n const headers = new HttpHeaders()\r\n .set('Authorization', 'Bearer ' + localStorage.getItem('telin.accessToken'))\r\n .set('Access-Control-Allow-Origin', '*');\r\n\r\n return this.httpClient\r\n .request<AppResponse<T>>(httpVerb, url, {\r\n body: !bodyData ? formData : appRequest,\r\n responseType: isFile ? ('blob' as 'json') : ('json' as 'json'),\r\n headers,\r\n })\r\n .pipe(\r\n catchError((err: HttpErrorResponse) => {\r\n if (err.error instanceof ErrorEvent) {\r\n return of<AppResponse<any>>({\r\n error: {\r\n title: 'Network error!',\r\n detail: err.message,\r\n source: err.statusText,\r\n status: err.status.toString(),\r\n },\r\n meta: {\r\n code: err.status,\r\n message: err.message,\r\n },\r\n });\r\n }\r\n\r\n return of<ServerInBuiltError>(err.error);\r\n })\r\n );\r\n }\r\n\r\n public uploadFileToS3(s3Url: string, file: File): Observable<any> {\r\n // Kita kirim raw binary/file dengan header Content-Type yang sesuai\r\n return this.httpClient.put(s3Url, file, {\r\n headers: { 'Content-Type': file.type },\r\n });\r\n }\r\n\r\n private setQuery(name: string, value: any, url: string): string {\r\n url = this.queryCount === 0 ? `${url}?${name}=${value}` : `${url}&${name}=${value}`;\r\n this.queryCount++;\r\n return url;\r\n }\r\n\r\n private setFormData(parameter: Parameter, formData: FormData): FormData {\r\n if (parameter.type === 'array') {\r\n for (let i = 0; parameter.value.length > i; i++) {\r\n formData.append(parameter.name, parameter.value[i], parameter.value[i].name);\r\n }\r\n } else {\r\n formData.append(parameter.name, parameter.value ? parameter.value : null);\r\n }\r\n return formData;\r\n }\r\n}\r\n","export const CampaignListTableLabelConst = [\r\n\t'Broadcast ID',\r\n\t'Business Name',\r\n\t'Broadcast Name',\r\n\t'Template Name',\r\n\t'Channel',\r\n\t'Status',\r\n\t'Number Count',\r\n\t'On Progress',\r\n\t'Sent',\r\n\t'Delivered',\r\n\t'Read',\r\n\t'Failed',\r\n\t'Repeat Count',\r\n\t'Start Date',\r\n\t'End Date',\r\n\t'Action',\r\n];\r\n\r\nexport const CampaignListTableColumnConst = [\r\n\t'id',\r\n\t'clientName',\r\n\t'name',\r\n\t'templateName',\r\n\t'platform',\r\n\t'statusName',\r\n\t'numberCount',\r\n\t'queuedCount',\r\n\t'sentCount',\r\n\t'delivCount',\r\n\t'readCount',\r\n\t'failedCount',\r\n\t'repeatCount',\r\n\t'startTime',\r\n\t'endTime',\r\n\t'action',\r\n];\r\n","import { MatTableDataSource } from '@angular/material/table';\r\n\r\nexport class TableModel {\r\n\tpublic columns: any[];\r\n\tpublic dataSource: MatTableDataSource<any>;\r\n\tpublic labels: string[];\r\n\tpublic page: number;\r\n\tpublic pageSize: number;\r\n\tpublic totalData: number;\r\n\r\n\tconstructor() {\r\n\t\tthis.columns = [];\r\n\t\tthis.dataSource = new MatTableDataSource();\r\n\t\tthis.labels = [];\r\n\t\tthis.page = 1;\r\n\t\tthis.pageSize = 10;\r\n\t\tthis.totalData = 0;\r\n\t}\r\n\r\n\tpublic getNumber(index: number, limit: number): number {\r\n\t\treturn (this.page - 1) * limit + index;\r\n\t}\r\n\r\n\tpublic getPageIndex(): number {\r\n\t\treturn this.page - 1;\r\n\t}\r\n\r\n\tpublic isEmpty(): boolean {\r\n\t\treturn this.totalData === 0;\r\n\t}\r\n\r\n\tpublic setPage(page: number): void {\r\n\t\tthis.page = page;\r\n\t}\r\n\r\n\tpublic setPageSize(size: number): void {\r\n\t\tthis.pageSize = size;\r\n\t}\r\n\r\n\tpublic resetPage(): void {\r\n\t\tthis.page = 1;\r\n\t}\r\n\r\n\tpublic setNextPage(isNext: boolean): void {\r\n\t\tif (!isNext && this.page === 1) {\r\n\t\t\tthis.totalData = this.dataSource.data?.length ?? 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.totalData =\r\n\t\t\tthis.page === 1\r\n\t\t\t\t? this.pageSize * 2\r\n\t\t\t\t: this.pageSize * (this.page + 1);\r\n\r\n\t\tconst diffData = this.pageSize - this.dataSource.data?.length;\r\n\r\n\t\t/* totalData substracted by diffData if data < pageSize */\r\n\t\tif (diffData !== 0) this.totalData -= diffData;\r\n\r\n\t\t/* totalData substracted by pageSize if isNext false */\r\n\t\tif (!isNext) this.totalData -= this.pageSize;\r\n\t}\r\n}\r\n","export class CampaignsListModel {\r\n\tpublic campaignID: string;\r\n\tpublic businessName: string;\r\n\tpublic campaignName: string;\r\n\tpublic medium: string;\r\n\tpublic status: string;\r\n\tpublic numberCount: number;\r\n\tpublic deilveredCount: number;\r\n\tpublic seenCount: number;\r\n\tpublic responseCount: number;\r\n\tpublic estimatedCost: number;\r\n\tpublic actualCost: number;\r\n\tpublic startDate: string;\r\n\tpublic endDate: string;\r\n\tpublic id: string;\r\n\r\n\tpublic convert(dto: any): CampaignsListModel {\r\n\t\tif (dto.campaignID) {\r\n\t\t\tthis.campaignID = dto.campaignID;\r\n\t\t}\r\n\t\tif (dto.businessName) {\r\n\t\t\tthis.businessName = dto.businessName;\r\n\t\t}\r\n\t\tif (dto.campaignName) {\r\n\t\t\tthis.campaignName = dto.campaignName;\r\n\t\t}\r\n\t\tif (dto.medium) {\r\n\t\t\tthis.medium = dto.medium;\r\n\t\t}\r\n\t\tif (dto.status) {\r\n\t\t\tthis.status = dto.status;\r\n\t\t}\r\n\t\tif (dto.numberCount) {\r\n\t\t\tthis.numberCount = dto.numberCount;\r\n\t\t}\r\n\t\tif (dto.deilveredCount) {\r\n\t\t\tthis.deilveredCount = dto.deilveredCount;\r\n\t\t}\r\n\t\tif (dto.seenCount) {\r\n\t\t\tthis.seenCount = dto.seenCount;\r\n\t\t}\r\n\t\tif (dto.responseCount) {\r\n\t\t\tthis.responseCount = dto.responseCount;\r\n\t\t}\r\n\t\tif (dto.estimatedCost) {\r\n\t\t\tthis.estimatedCost = dto.estimatedCost;\r\n\t\t}\r\n\t\tif (dto.actualCost) {\r\n\t\t\tthis.actualCost = dto.actualCost;\r\n\t\t}\r\n\t\tif (dto.startDate) {\r\n\t\t\tthis.startDate = dto.startDate;\r\n\t\t}\r\n\t\tif (dto.endDate) {\r\n\t\t\tthis.endDate = dto.endDate;\r\n\t\t}\r\n\t\tif (dto.id) {\r\n\t\t\tthis.id = dto.id;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { MainArea } from '../../../core/enums/main-area.enum';\r\nimport { HttpBodyReqPaginationModel } from '../../../core/models';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models/app-response';\r\nimport { ApiAdapterServiceService } from '../../../core/services/api-adapter-service.service';\r\nimport { CampaignTotalDto } from '../../models/campaign-count-final-response-dto.model';\r\nimport {\r\n\tCampaignListTableColumnConst,\r\n\tCampaignListTableLabelConst,\r\n\tTableModel,\r\n} from './models';\r\nimport { CampaignResponseDtoApi } from './models/campaign-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-campaign-index',\r\n\ttemplateUrl: './campaign-index.component.html',\r\n\tstyleUrls: ['./campaign-index.component.scss'],\r\n})\r\nexport class CampaignIndexComponent implements OnInit, OnDestroy {\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\tpublic table: TableModel;\r\n\tpublic filterValue: any;\r\n\tpublic currentViews = MainArea;\r\n\tpublic campaignTotal: CampaignTotalDto;\r\n\r\n\tprivate campaignParam: HttpBodyReqPaginationModel;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\tconstructor(\r\n\t\tprivate datePipe: DatePipe,\r\n\t\tprivate apiAdapterService: ApiAdapterServiceService\r\n\t) {}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.campaignParam = new HttpBodyReqPaginationModel();\r\n\r\n\t\tthis.initTable();\r\n\t\tthis.campaignCountService();\r\n\t\tthis.getCampaignList();\r\n\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t}\r\n\r\n\tprivate initTable(): void {\r\n\t\tthis.table = new TableModel();\r\n\t\tthis.table.labels = CampaignListTableLabelConst;\r\n\t\tthis.table.columns = CampaignListTableColumnConst;\r\n\t}\r\n\r\n\tprivate campaignCountService() {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], '/campaign/totals', 'GET')\r\n\t\t\t.subscribe((response: AppResponse<CampaignTotalDto>) => {\r\n\t\t\t\tthis.campaignTotal = response?.data;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getCampaignList(searchValue: string = ''): void {\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.campaignParam.pageNo, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', this.campaignParam.pageSize, 'number'),\r\n\t\t\tthis.initParam('filter', searchValue, 'string'),\r\n\t\t];\r\n\r\n\t\tif (this.filterValue?.businessName)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'clientId',\r\n\t\t\t\t\tthis.filterValue.businessName,\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.medium)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam('channel', this.filterValue.medium, 'string')\r\n\t\t\t);\r\n\t\tif (this.filterValue?.templateName)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'templateName',\r\n\t\t\t\t\tthis.filterValue.templateName?.name,\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.status)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam('status', this.filterValue.status, 'string')\r\n\t\t\t);\r\n\t\tif (this.filterValue?.startDate)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'startDate',\r\n\t\t\t\t\tthis.datePipe.transform(\r\n\t\t\t\t\t\tthis.filterValue.startDate,\r\n\t\t\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t\t\t),\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\tif (this.filterValue?.endDate)\r\n\t\t\tparameterList.push(\r\n\t\t\t\tthis.initParam(\r\n\t\t\t\t\t'endDate',\r\n\t\t\t\t\tthis.datePipe.transform(\r\n\t\t\t\t\t\tthis.filterValue.endDate,\r\n\t\t\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t\t\t),\r\n\t\t\t\t\t'string'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/campaign', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<CampaignResponseDtoApi[]>) => {\r\n\t\t\t\tthis.table.dataSource.data = resp.data;\r\n\t\t\t\tthis.table.setNextPage(resp.haveNext);\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic updatePage(event: any): void {\r\n\t\tif (event.pageSize) {\r\n\t\t\tthis.table.totalData = event.pageSize;\r\n\t\t\tthis.table.setPageSize(event.pageSize);\r\n\t\t\tthis.table.resetPage();\r\n\t\t} else {\r\n\t\t\tthis.table.setPage(event);\r\n\t\t}\r\n\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.campaignParam.pageSize = this.table.pageSize;\r\n\t\tthis.getCampaignList();\r\n\t}\r\n\r\n\tpublic updateFilter(_filter: any) {\r\n\t\tthis.table.resetPage();\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.campaignParam.pageSize = this.table.pageSize;\r\n\t\tthis.filterValue = _filter;\r\n\r\n\t\tthis.getCampaignList();\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string) {\r\n\t\tthis.table.resetPage();\r\n\t\tthis.campaignParam.pageNo = this.table.page;\r\n\t\tthis.getCampaignList(searchValue);\r\n\t}\r\n\r\n\tpublic addCampaign(): void {\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t\tthis.changeCurrentView(this.currentViews.NewCampaign);\r\n\t}\r\n\r\n\tpublic changeCurrentView(area: MainArea) {\r\n\t\tthis.currentView.emit(area);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","export const PlatformOptionConst = [\r\n {\r\n icon: 'icon_wa',\r\n inputSvgIcon: 'icon-wa-gray',\r\n image: 'whatsapp.png',\r\n label: 'WhatsApp',\r\n value: 'WA',\r\n },\r\n {\r\n icon: 'menu_sms',\r\n inputSvgIcon: 'icon-sms-gray',\r\n image: 'sms.png',\r\n label: 'SMS',\r\n value: 'SMS',\r\n },\r\n {\r\n icon: 'icon_email',\r\n inputSvgIcon: 'icon-email-gray',\r\n image: 'email-contact.png',\r\n label: 'Email',\r\n value: 'EMAIL',\r\n },\r\n {\r\n icon: 'icon_line',\r\n inputSvgIcon: 'icon-line-gray',\r\n image: 'line.png',\r\n label: 'Line',\r\n value: 'LINE',\r\n },\r\n];\r\n\r\nexport const MsgTypeWAOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'TEXT',\r\n },\r\n {\r\n name: 'Media',\r\n code: 'MEDIA',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n {\r\n name: 'Text - Utility',\r\n code: 'utility',\r\n },\r\n /* {\r\n\t\tname: 'Catalogue',\r\n\t\tcode: 'CATALOGUE',\r\n\t}, */\r\n];\r\n\r\nexport const MsgTypeEmailOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'HTML',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n];\r\n\r\nexport const MsgTypeLineOptionConst = [\r\n {\r\n name: 'Text',\r\n code: 'TEXT',\r\n },\r\n {\r\n name: 'Template',\r\n code: 'TEMPLATE',\r\n },\r\n /* {\r\n\t\tname: 'Button',\r\n\t\tcode: 'BUTTON',\r\n\t},\r\n\t{\r\n\t\tname: 'Confirmation',\r\n\t\tcode: 'CONFIRMATION',\r\n\t},\r\n\t{\r\n\t\tname: 'Carousel',\r\n\t\tcode: 'CAROUSEL',\r\n\t},\r\n\t{\r\n\t\tname: 'Image Carousel',\r\n\t\tcode: 'IMAGE_CAROUSEL',\r\n\t},\r\n\t{\r\n\t\tname: 'Flex Bubble',\r\n\t\tcode: 'FLEX_BUBBLE',\r\n\t},\r\n\t{\r\n\t\tname: 'Flex Carousel',\r\n\t\tcode: 'FLEX_CAROUSEL',\r\n\t}, */\r\n];\r\n\r\nexport const MediaTypeOptionConst = [\r\n {\r\n name: 'Image',\r\n code: 'IMAGE',\r\n },\r\n {\r\n name: 'Video',\r\n code: 'VIDEO',\r\n },\r\n {\r\n name: 'Document',\r\n code: 'DOCUMENT',\r\n },\r\n /* {\r\n\t\tname: 'Location',\r\n\t\tcode: 'LOCATION',\r\n\t}, */\r\n];\r\n\r\nexport const WidgetLiveCampaignConst: {\r\n title: string;\r\n arrow: string;\r\n value: number;\r\n date: string;\r\n icon: string;\r\n dateclass: string;\r\n}[] = [\r\n {\r\n title: 'Total Campaigns',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-total-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n {\r\n title: 'Live Campaigns',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-use-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n {\r\n title: 'Pending Approval',\r\n arrow: '../../../../assets/svg/icon-down-arrow.svg',\r\n value: 0,\r\n date: '',\r\n icon: '../../../../assets/svg/icon-pending-approval-campaign.svg',\r\n dateclass: 'redpercent',\r\n },\r\n];\r\n\r\nexport const CampaignPerformanceChartConfig = {\r\n legend: {\r\n icon: 'circle',\r\n orient: 'horizontal',\r\n x: 'center',\r\n y: 'bottom',\r\n },\r\n tooltip: {},\r\n dataset: {\r\n source: [['', 'WA Text', 'WA Template', 'WA Media', 'Product Catalog']],\r\n },\r\n xAxis: { type: 'category' },\r\n yAxis: {},\r\n series: [\r\n { type: 'bar', color: '#E666DA' },\r\n { type: 'bar', color: '#EB7215' },\r\n { type: 'bar', color: '#F3B435' },\r\n { type: 'bar', color: '#35CDF3' },\r\n ],\r\n};\r\n\r\nexport const ConversationInsightsChartConfig = {\r\n tooltip: {\r\n trigger: 'axis',\r\n },\r\n legend: {\r\n icon: 'circle',\r\n data: ['Delivery Rate of Campaigns', 'Total Number of Campaigns', 'Cost Distribution'],\r\n x: 'center',\r\n y: 'bottom',\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: [],\r\n },\r\n yAxis: {\r\n type: 'value',\r\n },\r\n series: [\r\n {\r\n name: 'Delivery Rate of Campaigns',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: 'blue' } },\r\n },\r\n {\r\n name: 'Total Number of Campaigns',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: 'green' } },\r\n },\r\n {\r\n name: 'Cost Distribution',\r\n data: [],\r\n type: 'line',\r\n smooth: true,\r\n itemStyle: { normal: { color: '#E666DA' } },\r\n },\r\n ],\r\n};\r\n","import { WhatsAppAccountDto } from '../../campaign-management/models';\r\n\r\nexport let isLoadingOption: {\r\n\tWA: boolean;\r\n\tSMS: boolean;\r\n\tLINE: boolean;\r\n\tEMAIL: boolean;\r\n\tVOICE: boolean;\r\n} = {\r\n\tWA: false,\r\n\tSMS: false,\r\n\tLINE: false,\r\n\tEMAIL: false,\r\n\tVOICE: false,\r\n};\r\n\r\nexport let isHaveNextOption: {\r\n\tWA: boolean;\r\n\tSMS: boolean;\r\n\tLINE: boolean;\r\n\tEMAIL: boolean;\r\n\tVOICE: boolean;\r\n} = {\r\n\tWA: true,\r\n\tSMS: true,\r\n\tLINE: true,\r\n\tEMAIL: true,\r\n\tVOICE: true,\r\n};\r\n\r\nexport let pageNoOption: {\r\n\tWA: number;\r\n\tSMS: number;\r\n\tLINE: number;\r\n\tEMAIL: number;\r\n\tVOICE: number;\r\n} = {\r\n\tWA: 1,\r\n\tSMS: 1,\r\n\tLINE: 1,\r\n\tEMAIL: 1,\r\n\tVOICE: 1,\r\n};\r\n\r\nexport let optionList: {\r\n\tWA: WhatsAppAccountDto[];\r\n\tSMS: WhatsAppAccountDto[];\r\n\tLINE: WhatsAppAccountDto[];\r\n\tEMAIL: WhatsAppAccountDto[];\r\n\tVOICE: WhatsAppAccountDto[];\r\n} = {\r\n\tWA: [],\r\n\tSMS: [],\r\n\tLINE: [],\r\n\tEMAIL: [],\r\n\tVOICE: [],\r\n};\r\n","export const GeneralInformationMessageValidationConst = {\r\n campaignName: [\r\n { type: 'required', message: 'General Information is required' },\r\n { type: 'maxlength', message: 'Maximum character 100' },\r\n ],\r\n medium: [{ type: 'required', message: 'Channel is required' }],\r\n};\r\n\r\nexport const GeneralInformationWAMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [\r\n { type: 'required', message: 'Text is required' },\r\n { type: 'maxlength', message: 'Maximum character 1024' },\r\n ],\r\n media: [{ type: 'required', message: 'Media Type is required' }],\r\n fileName: [{ type: 'required', message: 'File is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n category: [{ type: 'required', message: 'Category is required' }],\r\n catalogue: [{ type: 'required', message: 'Catalog is required' }],\r\n product: [{ type: 'required', message: 'Product is required' }],\r\n body: [{ type: 'maxlength', message: 'Maximum character 100' }],\r\n paramName: [{ type: 'required', message: 'Variable Name is required' }],\r\n};\r\n\r\nexport const GeneralInformationEmailMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const GeneralInformationSMSMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const GeneralInformationLineMessageValidationConst = {\r\n channel: [{ type: 'required', message: 'Message Type is required' }],\r\n from: [{ type: 'required', message: 'From is required' }],\r\n text: [{ type: 'required', message: 'Text is required' }],\r\n template: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const FailoverMechanismValidationConst = {\r\n interval: [\r\n { type: 'required', message: 'Interval Time is required' },\r\n {\r\n type: 'intervalTime',\r\n message: 'Must be greater than 0 and without decimal',\r\n },\r\n ],\r\n type: [{ type: 'required', message: 'Main Rules is required' }],\r\n accountId: [{ type: 'required', message: 'Account is required' }],\r\n subject: [{ type: 'required', message: 'Subject is required' }],\r\n message: [{ type: 'required', message: 'Message is required' }],\r\n templateName: [{ type: 'required', message: 'Template is required' }],\r\n};\r\n\r\nexport const SchedulerMessageValidationConst = {\r\n startDate: [{ type: 'required', message: 'Select Date is required' }],\r\n startTime: [{ type: 'required', message: 'Select Time is required' }],\r\n};\r\n","export enum EnumData {\r\n\tGOOGLE_MAP_API_KEY = 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n\r\n\t// MEDIUM TYPES\r\n\tMEDIUM_TYPE_WHATSAPP = 'WHATSAPP',\r\n\r\n\t// MEDIA TYPE\r\n\tMEDIA_TYPE_IMAGE = 'IMAGE',\r\n\tMEDIA_TYPE_VIDEO = 'VIDEO',\r\n\tMEDIA_TYPE_DOCUMENT = 'DOCUMENT',\r\n\tMEDIA_TYPE_LOCATION = 'LOCATION',\r\n\r\n\t// SCHEDULER TYPES\r\n\tSCHEDULER_TYPE_NOW = 'NOW',\r\n\tSCHEDULER_TYPE_SINGLE = 'SINGLE',\r\n\tSCHEDULER_TYPE_MULTIPLE = 'MULTIPLE',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\n\r\n@Injectable()\r\nexport class CustomPaginator extends MatPaginatorIntl {\r\n\titemsPerPageLabel = 'Listing per Page';\r\n\r\n\tgetRangeLabel = function (page, pageSize, length) {\r\n\t\tif (length === 0 || pageSize === 0) {\r\n\t\t\treturn 'Show 0';\r\n\t\t}\r\n\r\n\t\tlength = Math.max(length, 0);\r\n\r\n\t\tconst startIndex = page * pageSize;\r\n\t\tconst endIndex =\r\n\t\t\tstartIndex < length\r\n\t\t\t\t? Math.min(startIndex + pageSize, length)\r\n\t\t\t\t: startIndex + pageSize;\r\n\t\tconst sumStartIndex = startIndex + 1;\r\n\r\n\t\treturn 'Show ' + sumStartIndex + ' - ' + endIndex;\r\n\t};\r\n}\r\n","import { BaseOptionModel } from '../models';\r\n\r\nexport const generateEnumOption = (enumObject: Object): BaseOptionModel[] => {\r\n\tif (!enumObject) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn Object.keys(enumObject).reduce((result, each) => {\r\n\t\tif (isNaN(Number(each))) {\r\n\t\t\tconst inputOption = new BaseOptionModel();\r\n\t\t\tconst label = each\r\n\t\t\t\t.replace(/([A-Z])/g, ' $1')\r\n\t\t\t\t.replace(/([0-9])/g, ' $1');\r\n\r\n\t\t\tinputOption.label = label;\r\n\r\n\t\t\tif (isNaN(Number(enumObject[each]))) {\r\n\t\t\t\tinputOption.value = enumObject[each];\r\n\t\t\t} else {\r\n\t\t\t\tinputOption.value = Number(enumObject[each]);\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(inputOption);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n};\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInjectable,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { PlatformOptionConst } from '../../../../../core/const';\r\nimport { StatusCampaignEnum } from '../../../../../core/enums';\r\nimport { BaseOptionModel } from '../../../../../core/models';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { generateEnumOption } from '../../../../../core/util';\r\nimport { TemplateWAModel } from '../../../../models';\r\nimport { ClientDto } from '../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-filter-in-list-of-campaign',\r\n\ttemplateUrl: './filter-in-list-of-campaign.component.html',\r\n\tstyleUrls: ['./filter-in-list-of-campaign.component.scss'],\r\n})\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class FilterInListOfCampaignComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic onChangeFilter: EventEmitter<string>;\r\n\r\n\t@Output()\r\n\tpublic closeDropdown: EventEmitter<void>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic channelOption: any[] = PlatformOptionConst;\r\n\tpublic filteredChannelOption: any[] = [];\r\n\tpublic businessNameOption: ClientDto[] = [];\r\n\tpublic filteredBusinessNameOption: ClientDto[] = [];\r\n\tpublic statusOption: BaseOptionModel[] = [];\r\n\tpublic filteredStatusOption: BaseOptionModel[] = [];\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input()\r\n\tpublic filterValue: any;\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.closeDropdown = new EventEmitter();\r\n\t\tthis.onChangeFilter = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.statusOption = generateEnumOption(StatusCampaignEnum);\r\n\t\tthis.filteredStatusOption = [...this.statusOption];\r\n\t\tthis.filteredChannelOption = [...this.channelOption];\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.getBusinessNameOptionService();\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tbusinessName: new FormControl(this.filterValue?.businessName ?? ''),\r\n\t\t\tmedium: new FormControl(this.filterValue?.medium ?? ''),\r\n\t\t\ttemplateName: new FormControl(this.filterValue?.templateName ?? ''),\r\n\t\t\tstatus: new FormControl(this.filterValue?.status ?? ''),\r\n\t\t\tstartDate: new FormControl(this.filterValue?.startDate ?? ''),\r\n\t\t\tendDate: new FormControl(this.filterValue?.endDate ?? ''),\r\n\t\t});\r\n\r\n\t\tif (this.filterValue?.templateName)\r\n\t\t\tthis.templateOption = [\r\n\t\t\t\t...this.templateOption,\r\n\t\t\t\tthis.filterValue?.templateName,\r\n\t\t\t];\r\n\t}\r\n\r\n\tpublic getBusinessNameOptionService(): void {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\t[],\r\n\t\t\t\t'/admin/client/all-with-child?pageNo=1&rowPerPage=1000',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponse<ClientDto[]>) => {\r\n\t\t\t\tthis.businessNameOption = res.data;\r\n\t\t\t\tthis.filteredBusinessNameOption = [...this.businessNameOption];\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', this.form.get('medium').value, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService('', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic templateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic businessNameSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredBusinessNameOption = this.businessNameOption.filter(option =>\r\n\t\t\toption.name.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic channelSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredChannelOption = this.channelOption.filter(option =>\r\n\t\t\toption.label.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic statusSearch(searchValue: string): void {\r\n\t\tconst value = searchValue.toLowerCase();\r\n\t\tthis.filteredStatusOption = this.statusOption.filter(option =>\r\n\t\t\toption.label.toLowerCase().includes(value)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic clearDate(): void {\r\n\t\tthis.form.get('startDate').setValue(null);\r\n\t\tthis.form.get('endDate').setValue(null);\r\n\t}\r\n\r\n\tpublic validateBackDate(): void {\r\n\t\tif (new Date(this.form.get('startDate').value).getTime() > new Date(this.form.get('endDate').value).getTime())\r\n\t\t\tthis.form.get('endDate').setValue('');\r\n\t}\r\n\r\n\tpublic onReset(): void {\r\n\t\tthis.form.reset();\r\n\t\tthis.onChangeFilter.emit(this.form.getRawValue());\r\n\t}\r\n\r\n\tpublic onCancel(): void {\r\n\t\tthis.closeDropdown.emit();\r\n\t}\r\n\r\n\tpublic onApply(): void {\r\n\t\tthis.onChangeFilter.emit(this.form.getRawValue());\r\n\t\tthis.closeDropdown.emit();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharedServicesService {\r\n\r\n private subject = new Subject<any>();\r\n\r\n sendClickEvent(){\r\n this.subject.next();\r\n }\r\n\r\n getEvent(): Observable<any>{\r\n return this.subject.asObservable();\r\n }\r\n\r\n constructor() { }\r\n}\r\n","export class ConfirmationModel {\r\n public title: string;\r\n public content: string;\r\n public btnSubmit: string;\r\n public btnSubmitRed: string;\r\n public btnCancel: string;\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { SharedServicesService } from '../../../global/confirmation/shared/shared-services.service';\r\nimport { ConfirmationModel } from '../shared/model';\r\n\r\n@Component({\r\n\tselector: 'app-confirmation',\r\n\ttemplateUrl: './confirmation.component.html',\r\n\tstyleUrls: ['./confirmation.component.scss'],\r\n})\r\nexport class ConfirmationComponent {\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA)\r\n\t\tpublic data: ConfirmationModel,\r\n\t\tprivate sharedService: SharedServicesService\r\n\t) {}\r\n\r\n\tdeleteRowOn() {\r\n\t\tthis.sharedService.sendClickEvent();\r\n\t}\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\n\r\n@Component({\r\n selector: 'lib-pending-approval-dialog-view',\r\n templateUrl: './pending-approval-dialog-view.component.html',\r\n styleUrls: ['./pending-approval-dialog-view.component.scss'],\r\n})\r\nexport class PendingApprovalDialogViewComponent implements OnInit, OnDestroy {\r\n public isLoading: boolean = false;\r\n public isSubmit: boolean = false;\r\n public isShowButton: boolean = false;\r\n\r\n private subscribers: Subscription[] = [];\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<PendingApprovalDialogViewComponent>,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.getCampaignDetailService();\r\n\r\n this.isShowButton = this.getCampaignStorage?.generalInformation?.isShowButton ?? false;\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n private convertUTCDateToLocalDate(date: Date) {\r\n const newDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n return newDate;\r\n }\r\n\r\n private getCampaignDetailService(): void {\r\n if (!this.getCampaignStorage?.generalInformation?.id) return;\r\n\r\n this.isLoading = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}`,\r\n 'GET'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n const generalInformation = {\r\n campaignName: resp.data?.name,\r\n medium: resp.data?.platform,\r\n channel: ['image', 'video', 'document'].includes(resp.data?.type)\r\n ? 'MEDIA'\r\n : resp.data?.isDirectSend\r\n ? 'utility'\r\n : resp.data?.type?.toUpperCase(),\r\n media: resp.data?.type?.toUpperCase(),\r\n isPrevTemplate: resp?.data?.isPrevTemplate,\r\n templateName: resp?.data?.templateName,\r\n ttl: resp?.data?.ttlSeconds,\r\n from: {\r\n id: resp.data?.accountId,\r\n name: resp.data?.accountName,\r\n platform: resp.data?.platform,\r\n clientId: resp.data?.clientId,\r\n clientName: resp.data?.clientName,\r\n accountNo: resp.data?.accountNo,\r\n wabaId: resp.data?.wabaId ?? '',\r\n },\r\n text: resp.data?.details?.text,\r\n targetURL:\r\n resp.data?.details?.image?.url ??\r\n resp.data?.details?.document?.url ??\r\n resp.data?.details?.video?.url ??\r\n resp.data?.details?.template?.headerURL,\r\n paramHeader: resp.data?.details?.template?.header,\r\n paramBody: resp.data?.details?.template?.data,\r\n paramButton: resp.data?.details?.template?.button,\r\n paramCarousel:\r\n resp.data?.details?.template?.carousel?.map((card: any) => {\r\n return {\r\n headerURL: card.headerURL || '',\r\n bodyParams: (card.body || []).map((val: string) => ({\r\n paramName: val,\r\n })),\r\n buttonParams: (card.button || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((val: string) => ({\r\n paramName: val,\r\n payload: val,\r\n }));\r\n }),\r\n };\r\n }) || [],\r\n otpValue: [...(resp.data?.details?.template?.data ?? [])]?.pop(),\r\n variables: (resp.data?.details?.template?.data || []).map(\r\n (val: string) => ({\r\n paramName: val,\r\n })\r\n ),\r\n isUseExistingTemplate: !!resp.data?.templateName,\r\n template: {\r\n ID: resp.data?.details?.template?.id,\r\n name: resp.data?.details?.template?.name,\r\n lang: resp.data?.details?.template?.lang,\r\n platform: resp.data?.platform,\r\n headerURL: resp.data?.details?.template?.headerURL,\r\n header: {\r\n examples: resp.data?.details?.template?.header,\r\n },\r\n body: {\r\n examples: resp.data?.details?.template?.data,\r\n },\r\n buttons: resp.data?.details?.template?.button,\r\n ClientId: resp.data?.clientId,\r\n ClientName: resp.data?.clientName,\r\n },\r\n isDownloadVariableXLS: resp.data?.fileId !== '',\r\n isUpload: resp.data?.fileId !== '',\r\n fileId: resp.data?.fileId,\r\n };\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data?.id,\r\n form: generalInformation,\r\n },\r\n failover: resp.data?.failover,\r\n targetAudience: resp.data?.targets,\r\n targetAudienceFile: {\r\n name: resp.data?.fileName,\r\n targetURL: resp.data?.targetURL,\r\n },\r\n scheduler: {\r\n schedulerType:\r\n resp.data?.scheduleType === 'MULTI'\r\n ? 'ONE_TIME'\r\n : resp.data?.scheduleType,\r\n startDate: resp.data?.startTime?.split(' ')[0],\r\n startTime: resp.data?.startTime?.split(' ')[1],\r\n isRepeat: resp.data?.scheduleType === 'MULTI',\r\n delivery: resp.data?.repeat,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isLoading = false;\r\n },\r\n () => {\r\n this.isLoading = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public rejectCampaignService(): void {\r\n this.isSubmit = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/reject`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n this.isSubmit = false;\r\n\r\n if (!resp || !resp?.data) return this.toastr.error('Error Rejecting Campaign!');\r\n\r\n this.toastr.success('Campaign Rejected Successfully!');\r\n this.onClose();\r\n },\r\n () => {\r\n this.toastr.error('Error Rejecting Campaign!');\r\n this.isSubmit = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public approveCampaignService(): void {\r\n this.isSubmit = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n [],\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/approve`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n this.isSubmit = false;\r\n\r\n if (!resp || !resp?.data) return this.toastr.error('Error Approving Campaign!');\r\n\r\n this.toastr.success('Campaign Approved Successfully!');\r\n this.onClose();\r\n },\r\n () => {\r\n this.toastr.error('Error Approving Campaign!');\r\n this.isSubmit = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onClose(): void {\r\n localStorage.removeItem('telin.campaign');\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n\tViewChild,\r\n} from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { MainArea } from '../../../../../core/enums';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { ConfirmationComponent } from '../../../../../global/confirmation/confirmation';\r\nimport { ConfirmationModel } from '../../../../../global/confirmation/shared/model';\r\nimport { PendingApprovalDialogViewComponent } from '../../dialog/pending-approval-dialog-view';\r\nimport { CampaignsListModel, TableModel } from '../../models';\r\nimport { CampaignResponseDtoApi } from '../../models/campaign-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-viewing-list-of-campaign-table',\r\n\ttemplateUrl: './viewing-list-of-campaign-table.component.html',\r\n\tstyleUrls: ['./viewing-list-of-campaign-table.component.scss'],\r\n})\r\nexport class ViewingListOfCampaignTableComponent implements OnInit, OnDestroy {\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\t@Output() updateTable = new EventEmitter<void>();\r\n\r\n\tprivate currentViews = MainArea;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public table: TableModel;\r\n\r\n\t@ViewChild(MatSort, { static: false }) public matSort: MatSort;\r\n\r\n\tconstructor(\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate apiAdapterService: ApiAdapterServiceService,\r\n\t\tprivate toastr: ToastrService\r\n\t) {}\r\n\r\n\tngOnInit(): void {}\r\n\r\n\tpublic sort(): void {\r\n\t\tthis.table.dataSource.sort = this.matSort;\r\n\t}\r\n\r\n\tpublic actionRow(row: CampaignsListModel, action: string): void {\r\n\t\tswitch (action) {\r\n\t\t\tcase 'pause':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Pause Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Pause this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/pause`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully paused',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'stop':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Stop Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Stop this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/stop`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully stop',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'delete':\r\n\t\t\t\tif (row.status !== 'COMPLETED') {\r\n\t\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\t\ttitle: 'Delete Campaign',\r\n\t\t\t\t\t\tcontent:\r\n\t\t\t\t\t\t\t'Are you sure you want to Delete this Campaign?',\r\n\t\t\t\t\t\turl: `/campaign/${row.id}/delete`,\r\n\t\t\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\t\t\tmessage: 'Selected campaign is successfully deleted',\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'live':\r\n\t\t\t\tthis.campaignConfirmationDialog(row.id, {\r\n\t\t\t\t\ttitle: 'Resume Campaign',\r\n\t\t\t\t\tcontent: 'Are you sure you want to Resume this Campaign?',\r\n\t\t\t\t\turl: `/campaign/${row.id}/resume`,\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tmessage: 'Selected campaign is successfully resume',\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate campaignConfirmationDialog(\r\n\t\tid: string,\r\n\t\tdata: {\r\n\t\t\ttitle: string;\r\n\t\t\tcontent: string;\r\n\t\t\turl: string;\r\n\t\t\tmethod: string;\r\n\t\t\tmessage: string;\r\n\t\t}\r\n\t): void {\r\n\t\tconst confirmation = new ConfirmationModel();\r\n\t\tconfirmation.title = data.title;\r\n\t\tconfirmation.content = data.content;\r\n\t\tconfirmation.btnSubmit = 'Yes';\r\n\t\tconfirmation.btnCancel = 'No';\r\n\r\n\t\tconst subs = this.dialog\r\n\t\t\t.open(ConfirmationComponent, {\r\n\t\t\t\tautoFocus: false,\r\n\t\t\t\tbackdropClass: 'overlay-backdrop-dialog',\r\n\t\t\t\tdata: confirmation,\r\n\t\t\t})\r\n\t\t\t.afterClosed()\r\n\t\t\t.subscribe(resp => {\r\n\t\t\t\tif (!resp) return;\r\n\r\n\t\t\t\tthis.campaignService(data);\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate campaignService(data: {\r\n\t\turl: string;\r\n\t\tmethod: string;\r\n\t\tmessage: string;\r\n\t}): void {\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], data.url, data.method)\r\n\t\t\t.subscribe(() => {\r\n\t\t\t\tthis.toastr.error(data.message);\r\n\t\t\t\tthis.updateTable.emit();\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\teditCampaign(row: CampaignsListModel): void {\r\n\t\tlocalStorage.removeItem('telin.campaign');\r\n\t\twindow.history.replaceState({}, '', `/secure/campaign/${row.id}`);\r\n\t\tthis.currentView.emit(this.currentViews.NewCampaign);\r\n\t}\r\n\r\n\tpublic openViewDialog(\r\n\t\trow: CampaignResponseDtoApi,\r\n\t\tisShowButton: boolean = false\r\n\t): void {\r\n\t\tlocalStorage.setItem(\r\n\t\t\t'telin.campaign',\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tgeneralInformation: {\r\n\t\t\t\t\tid: row?.id,\r\n\t\t\t\t\tisShowButton: isShowButton,\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tconst subs = this.dialog\r\n\t\t\t.open(PendingApprovalDialogViewComponent, {\r\n\t\t\t\tautoFocus: false,\r\n\t\t\t\theight: 'calc(100% - 30px)',\r\n\t\t\t\twidth: 'calc(100% - 30px)',\r\n\t\t\t\tmaxWidth: '100%',\r\n\t\t\t\tmaxHeight: '100%',\r\n\t\t\t\tbackdropClass: 'overlay-backdrop-dialog',\r\n\t\t\t})\r\n\t\t\t.afterClosed()\r\n\t\t\t.subscribe(() => {\r\n\t\t\t\tthis.updateTable.emit();\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate convertUTCDateToLocalDate(date: Date) {\r\n\t\tconst newDate = new Date(\r\n\t\t\tdate.getTime() - date.getTimezoneOffset() * 60 * 1000\r\n\t\t);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n\tNgbDropdownModule,\r\n\tNgbPaginationModule,\r\n} from '@ng-bootstrap/ng-bootstrap';\r\nimport { MatSelectInfiniteScrollDirective } from '../../../core/directives';\r\nimport { SearchModule } from '../../../global/search/search.module';\r\nimport { CampaignIndexComponent } from './campaign-index.component';\r\nimport { FilterInListOfCampaignComponent } from './component/filter-in-list-of-campaign';\r\nimport { ViewingListOfCampaignTableComponent } from './component/viewing-list-of-campaign-table';\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tViewingListOfCampaignTableComponent,\r\n\t\tFilterInListOfCampaignComponent,\r\n\t\tCampaignIndexComponent,\r\n\t\tMatSelectInfiniteScrollDirective,\r\n\t],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatDatepickerModule,\r\n\t\tMatTableModule,\r\n\t\tMatSortModule,\r\n\t\tMatPaginatorModule,\r\n\t\tMatDialogModule,\r\n\t\tMatTabsModule,\r\n\t\tMatCardModule,\r\n\t\tMatCheckboxModule,\r\n\t\tMatSelectModule,\r\n\t\tMatRadioModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n\t\tMatChipsModule,\r\n\t\tNgbPaginationModule,\r\n\t\tNgbDropdownModule,\r\n\t\tMatChipsModule,\r\n\t\tMatGridListModule,\r\n\t\tMatNativeDateModule,\r\n\t\tSearchModule,\r\n\t\tMatToolbarModule,\r\n\t\tMatTooltipModule,\r\n\t],\r\n\texports: [CampaignIndexComponent, MatSelectInfiniteScrollDirective],\r\n})\r\nexport class CampaignIndexModule {}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { EChartsOption } from 'echarts';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tCampaignPerformanceChartConfig,\r\n\tConversationInsightsChartConfig,\r\n\tPlatformOptionConst,\r\n\tWidgetLiveCampaignConst,\r\n} from '../../../core/const';\r\nimport { PastTimeEnum } from '../../../core/enums';\r\nimport { MainArea } from '../../../core/enums/main-area.enum';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models/app-response';\r\nimport { AppResponseAdl } from '../../../core/models/util/api-dto/response-models/app-response-adl';\r\nimport { ApiAdapterServiceService } from '../../../core/services';\r\nimport { CampaignCountFinalResponseDtoExternal } from '../../models/campaign-count-final-response-dto.model';\r\nimport { ConversationChartResponseDto } from '../campaign-index/models/conversation-chart-response-dto.model';\r\nimport { PerformanceChartResponseDto } from '../campaign-index/models/performance-chart-response-dto.model';\r\n\r\n@Component({\r\n\tselector: 'lib-dashboard',\r\n\ttemplateUrl: './dashboard.component.html',\r\n\tstyleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit, OnDestroy {\r\n\tpublic currentViews = MainArea;\r\n\tpublic pastTime = PastTimeEnum;\r\n\r\n\tpublic channelOption: any[] = PlatformOptionConst;\r\n\tpublic performanceCategories: string[] = [];\r\n\tpublic totalCmpn: number[] = [];\r\n\tpublic deliveryRt: number[] = [];\r\n\tpublic costDesc: number[] = [];\r\n\tpublic convsData: any[][] = [];\r\n\r\n\tpublic widgetLiveCampaign = WidgetLiveCampaignConst;\r\n\tpublic conversationChartData: EChartsOption;\r\n\tpublic performanceChartData: EChartsOption;\r\n\tpublic selectedPlatform: any = '';\r\n\tpublic filterEvent: any = 'currentWeek';\r\n\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Output() currentView = new EventEmitter<MainArea>();\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {}\r\n\r\n\tngOnInit(): void {}\r\n\r\n\tpublic changeCurrentView(area: MainArea) {\r\n\t\tthis.currentView.emit(area);\r\n\t}\r\n\r\n\tpublic filterChart(event: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst timeUnit =\r\n\t\t\tevent == PastTimeEnum.Today\r\n\t\t\t\t? 'daily'\r\n\t\t\t\t: event == PastTimeEnum.CurrentWeek\r\n\t\t\t\t? 'weekly'\r\n\t\t\t\t: event == PastTimeEnum.CurrentMonth\r\n\t\t\t\t? 'monthly'\r\n\t\t\t\t: '';\r\n\r\n\t\t/* const parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t]; */\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest([], '/campaign/count', 'GET')\r\n\t\t\t.subscribe(\r\n\t\t\t\t(res: AppResponse<CampaignCountFinalResponseDtoExternal>) => {\r\n\t\t\t\t\tconst date =\r\n\t\t\t\t\t\t(res?.data?.totalCampaignPercent ?? 0) +\r\n\t\t\t\t\t\t'% Since ' +\r\n\t\t\t\t\t\tthis.getStatictsWidgetString(event);\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].value =\r\n\t\t\t\t\t\tres?.data?.totalCampaign ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[0].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].value =\r\n\t\t\t\t\t\tres?.data?.totalLive ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[1].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].arrow =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? '../../../../assets/svg/icon-up-arrow.svg'\r\n\t\t\t\t\t\t\t: '../../../../assets/svg/icon-down-arrow.svg';\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].value =\r\n\t\t\t\t\t\tres?.data?.totalPending ?? 0;\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].date = date;\r\n\t\t\t\t\tthis.widgetLiveCampaign[2].dateclass =\r\n\t\t\t\t\t\tres?.data?.totalCampaignPercent > 0\r\n\t\t\t\t\t\t\t? 'greenpercent'\r\n\t\t\t\t\t\t\t: 'redpercent';\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\r\n\t\tthis.getPerformanceDetails(timeUnit);\r\n\t\tthis.getConversationDetails(timeUnit);\r\n\t}\r\n\r\n\tprivate getPerformanceDetails(timeUnit: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setPerformanceChartData();\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue:\r\n\t\t\t\t\tthis.selectedPlatform === 'WHATSAPP'\r\n\t\t\t\t\t\t? 'WA'\r\n\t\t\t\t\t\t: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\tparameterList,\r\n\t\t\t\t'/report/campaign/performance',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponseAdl<PerformanceChartResponseDto>) => {\r\n\t\t\t\tthis.performanceCategories = [];\r\n\t\t\t\tthis.totalCmpn = [];\r\n\t\t\t\tthis.deliveryRt = [];\r\n\t\t\t\tthis.costDesc = [];\r\n\r\n\t\t\t\tif (res?.data && Object.entries(res.data).length !== 0) {\r\n\t\t\t\t\tfor (let item of res.data.categories) {\r\n\t\t\t\t\t\tthis.performanceCategories.push(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (let series of res.data.series) {\r\n\t\t\t\t\t\tif (series.name === 'Total Campaign') {\r\n\t\t\t\t\t\t\tthis.totalCmpn = series.data?.map(value => value);\r\n\t\t\t\t\t\t} else if (series.name === 'Delivery Rate') {\r\n\t\t\t\t\t\t\tthis.deliveryRt = series.data?.map(value => value);\r\n\t\t\t\t\t\t} else if (series.name === 'Cost Distribution') {\r\n\t\t\t\t\t\t\tthis.costDesc = series.data?.map(value => value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setPerformanceChartData();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate setPerformanceChartData() {\r\n\t\tthis.performanceChartData = ConversationInsightsChartConfig;\r\n\t\tthis.performanceChartData.xAxis.data = this.performanceCategories;\r\n\t\tthis.performanceChartData.series[0].data = this.deliveryRt;\r\n\t\tthis.performanceChartData.series[1].data = this.totalCmpn;\r\n\t\tthis.performanceChartData.series[2].data = this.costDesc;\r\n\t}\r\n\r\n\tprivate getConversationDetails(timeUnit: string) {\r\n\t\tif (!this.selectedPlatform) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setConversationChartData();\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\t{\r\n\t\t\t\tname: 'timeUnit',\r\n\t\t\t\tvalue: timeUnit,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'clientId',\r\n\t\t\t\tvalue: localStorage.getItem('telin.clientId'),\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'platform',\r\n\t\t\t\tvalue:\r\n\t\t\t\t\tthis.selectedPlatform === 'WHATSAPP'\r\n\t\t\t\t\t\t? 'WA'\r\n\t\t\t\t\t\t: this.selectedPlatform,\r\n\t\t\t\tin: 'query',\r\n\t\t\t\ttype: 'String',\r\n\t\t\t},\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(\r\n\t\t\t\tparameterList,\r\n\t\t\t\t'/report/campaign/conversation',\r\n\t\t\t\t'GET'\r\n\t\t\t)\r\n\t\t\t.subscribe((res: AppResponseAdl<ConversationChartResponseDto>) => {\r\n\t\t\t\tthis.convsData = [];\r\n\r\n\t\t\t\tif (res?.data) {\r\n\t\t\t\t\tfor (let i = 0; i < res.data.categories?.length; i++) {\r\n\t\t\t\t\t\tthis.convsData[i] = new Array();\r\n\t\t\t\t\t\tthis.convsData[i].push(res.data.categories[i]);\r\n\r\n\t\t\t\t\t\tfor (let j = 1; j <= res.data.series?.length; j++) {\r\n\t\t\t\t\t\t\tthis.convsData[i].push(\r\n\t\t\t\t\t\t\t\tres.data.series[j - 1].data[i]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setConversationChartData();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate setConversationChartData() {\r\n\t\tthis.conversationChartData = CampaignPerformanceChartConfig;\r\n\t\tthis.convsData.forEach(data => {\r\n\t\t\tif (data) {\r\n\t\t\t\tthis.conversationChartData.dataset.source.push(data);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getStatictsWidgetString(event: string): string {\r\n\t\treturn event == PastTimeEnum.Today\r\n\t\t\t? PastTimeEnum.Yesterday\r\n\t\t\t: event == PastTimeEnum.CurrentWeek\r\n\t\t\t? PastTimeEnum.LastWeek\r\n\t\t\t: event == PastTimeEnum.CurrentMonth\r\n\t\t\t? PastTimeEnum.LastMonth\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { PickerModule } from '@ctrl/ngx-emoji-mart';\r\nimport { AngularEditorModule } from '@kolkov/angular-editor';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { DashboardComponent } from './dashboard.component';\r\n\r\n@NgModule({\r\n\tdeclarations: [DashboardComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatAutocompleteModule,\r\n\t\tFormsModule,\r\n\t\tMatGridListModule,\r\n\t\tReactiveFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatSelectModule,\r\n\t\tMatRadioModule,\r\n\t\tMatListModule,\r\n\t\tMatButtonModule,\r\n\t\tMatIconModule,\r\n\t\tPickerModule,\r\n\t\tAngularEditorModule,\r\n\t\tMatButtonToggleModule,\r\n\t\tMatDialogModule,\r\n\t\tMatTabsModule,\r\n\t\tMatBadgeModule,\r\n\t\tNgbDropdownModule,\r\n\t\tNgxEchartsModule,\r\n\t],\r\n\texports: [DashboardComponent],\r\n})\r\nexport class DashboardModule {}\r\n","export class FailoverReqModel {\r\n\tpublic active: boolean;\r\n\tpublic type: string;\r\n\tpublic interval: number;\r\n\tpublic accounts: FailoverAccountReqModel[];\r\n\r\n\tconstructor() {}\r\n\r\n\tpublic clone(source: any): FailoverReqModel {\r\n\t\tthis.active = source.active;\r\n\t\tthis.interval = source.interval ?? 0;\r\n\t\tthis.type = source.type ?? '';\r\n\r\n\t\tif (source.accounts) {\r\n\t\t\tthis.accounts = source.accounts.reduce((result, each) => {\r\n\t\t\t\tresult.push(new FailoverAccountReqModel().clone(each));\r\n\t\t\t\treturn result;\r\n\t\t\t}, []);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\tfailover: this,\r\n\t\t};\r\n\t}\r\n}\r\n\r\nclass FailoverAccountReqModel {\r\n\tpublic accountId: string;\r\n\tpublic accountName: string;\r\n\tpublic subject: string;\r\n\tpublic platform: string;\r\n\tpublic template: {\r\n\t\tid: string;\r\n\t\tname: string;\r\n\t\tlang: string;\r\n\t\tdata: string[];\r\n\t};\r\n\r\n\tconstructor() {}\r\n\r\n\tpublic clone(source: any): FailoverAccountReqModel {\r\n\t\tthis.accountId = source.accountId?.id ?? '';\r\n\t\tthis.accountName = source.accountName ?? '';\r\n\t\tthis.subject = source.subject ?? '';\r\n\t\tthis.platform = source.platform ?? '';\r\n\t\tthis.template = {\r\n\t\t\tid: source.template?.ID ?? '',\r\n\t\t\tname: source.template?.name ?? source.template ?? '',\r\n\t\t\tlang: source.template?.lang ?? '',\r\n\t\t\tdata: source.paramBody?.map((t: any) => t.name) ?? [],\r\n\t\t};\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn this;\r\n\t}\r\n}\r\n","export class GeneralInformationWAReqModel {\r\n public name: string;\r\n public accountId: string;\r\n public type: string;\r\n public text: string;\r\n public subject: string;\r\n public image: {\r\n url: string;\r\n };\r\n public video: {\r\n url: string;\r\n };\r\n public document: {\r\n url: string;\r\n fileName: string;\r\n };\r\n public template: {\r\n id?: string;\r\n name: string;\r\n lang: string;\r\n headerUrl?: string;\r\n header: any;\r\n data: any[];\r\n button: any;\r\n buttonParams: any[];\r\n carousel?: any[];\r\n };\r\n public list: {\r\n button: string;\r\n sections: {\r\n title: string;\r\n items: {\r\n id: string;\r\n title: string;\r\n description: string;\r\n }[];\r\n }[];\r\n };\r\n public buttons: {\r\n type: string;\r\n id: string;\r\n title: string;\r\n }[];\r\n\r\n public category: string;\r\n public isNeedSave: boolean;\r\n public ttlSeconds: number;\r\n\r\n public clone(source: any): GeneralInformationWAReqModel {\r\n if (\r\n source?.media === 'IMAGE' ||\r\n source?.media === 'VIDEO' ||\r\n source?.media === 'DOCUMENT'\r\n ) {\r\n source.channel = source.media;\r\n }\r\n\r\n if (source.campaignName) {\r\n this.name = source.campaignName;\r\n }\r\n if (source.medium === 'EMAIL') {\r\n this.subject = source.campaignName;\r\n }\r\n if (source.from?.id) {\r\n this.accountId = source.from.id;\r\n }\r\n if (source.channel) {\r\n this.type = source.channel?.toLowerCase();\r\n }\r\n if (source.text) {\r\n this.text = source.text;\r\n }\r\n if (this.type === 'image' && source.fileName) {\r\n this.image = {\r\n url: source.targetURL,\r\n };\r\n }\r\n if (this.type === 'video' && source.fileName) {\r\n this.video = {\r\n url: source.targetURL,\r\n };\r\n }\r\n if (this.type === 'document' && source.fileName) {\r\n this.document = {\r\n url: source.targetURL,\r\n fileName: source.fileName,\r\n };\r\n }\r\n\r\n if (source.template) {\r\n let qrIndex = 0;\r\n const finalButtons =\r\n source.paramButton?.reduce((result: any[], each: any, idx: number) => {\r\n const btnDef = source.template?.buttons?.[idx];\r\n\r\n if (btnDef?.type === 'QUICK_REPLY') {\r\n const qrParam =\r\n source.buttonParams && source.buttonParams[qrIndex]\r\n ? source.buttonParams[qrIndex]\r\n : null;\r\n qrIndex++;\r\n result.push(\r\n qrParam ? [qrParam.payload ? qrParam.payload : qrParam.label] : []\r\n );\r\n } else {\r\n result.push(each.name?.map((t: any) => t.name) ?? []);\r\n }\r\n\r\n return result;\r\n }, []) ?? [];\r\n\r\n // CAROUSEL\r\n let carouselPayload = undefined;\r\n if (source.paramCarousel && source.paramCarousel.length > 0) {\r\n carouselPayload = source.paramCarousel.map((card: any) => {\r\n const mappedBody = (card.bodyParams || []).map((b: any) => b.paramName || '');\r\n const mappedButtons = (card.buttonParams || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((btn: any) => {\r\n if (btn.payload !== undefined && btn.payload !== null) {\r\n return btn.payload;\r\n }\r\n return btn.paramName || '';\r\n });\r\n });\r\n\r\n return {\r\n headerURL: card.headerURL || '',\r\n body: mappedBody,\r\n button: mappedButtons,\r\n };\r\n });\r\n }\r\n\r\n this.template = {\r\n id: source.template.ID,\r\n name: source.template.name,\r\n lang: source.template.lang,\r\n headerUrl: source.targetURL,\r\n header: source.paramHeader?.map((t: any) => t.name) ?? [],\r\n data:\r\n source.isUseExistingTemplate && source.variables?.length\r\n ? source.variables.map((v: any) => v.paramName)\r\n : (source.paramBody?.map((t: any) => t.name) ?? []),\r\n\r\n button: finalButtons,\r\n buttonParams: source.buttonParams\r\n ? source.buttonParams.map((btn: any) => {\r\n return {\r\n label: btn.label,\r\n payload: btn.payload ? btn.payload : btn.label,\r\n };\r\n })\r\n : [],\r\n ...(carouselPayload && carouselPayload.length > 0\r\n ? { carousel: carouselPayload }\r\n : {}),\r\n };\r\n\r\n if (source.template.category === 'AUTHENTICATION')\r\n this.template = {\r\n name: source.template.name,\r\n lang: source.template.lang,\r\n header: null,\r\n data: [source.otpValue],\r\n button: [[source.otpValue]],\r\n buttonParams: [],\r\n };\r\n\r\n if (source.template.ID) this.template.id = source.template.ID;\r\n }\r\n\r\n if (this.type === 'utility') {\r\n this.type = 'template';\r\n this.category = 'utility';\r\n\r\n const mappedVariables = source?.variables?.length\r\n ? source.variables.map((v: any) => v.paramName)\r\n : [];\r\n\r\n if (source?.isUseExistingTemplate) {\r\n this.template = {\r\n ...source.template,\r\n data: mappedVariables.length > 0 ? mappedVariables : source.template.data || [],\r\n };\r\n } else {\r\n this.template = {\r\n name: '',\r\n lang: 'id',\r\n header: null,\r\n button: null,\r\n data: mappedVariables,\r\n buttonParams: [],\r\n };\r\n }\r\n\r\n this.isNeedSave = source.isNeedSave;\r\n this.ttlSeconds = source.ttl;\r\n\r\n if (source?.isUseExistingTemplate) {\r\n this.text = source?.text || source?.template?.body?.text;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public convert(): any {\r\n return this;\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\n\r\nexport class SchedulerReqModel {\r\n\tpublic type: string;\r\n\tpublic startTime: string;\r\n\tpublic repeat: boolean;\r\n\tpublic tz: string;\r\n\tprivate datePipe: DatePipe;\r\n\r\n\tconstructor() {\r\n\t\tthis.datePipe = new DatePipe('en-US');\r\n\t}\r\n\r\n\tpublic clone(source: any): SchedulerReqModel {\r\n\t\tif (source.schedulerType) {\r\n\t\t\tthis.type = source.delivery ? 'MULTI' : source.schedulerType;\r\n\t\t}\r\n\t\tif (source.startDate) {\r\n\t\t\tthis.startTime = `${this.datePipe.transform(\r\n\t\t\t\tsource.startDate,\r\n\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t)} ${source.startTime}`;\r\n\t\t}\r\n\t\tif (source.delivery) {\r\n\t\t\tthis.repeat = source.delivery.toUpperCase();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic convert(): any {\r\n\t\treturn {\r\n\t\t\ttype: this.type,\r\n\t\t\tstartTime: this.startTime,\r\n\t\t\trepeat: this.repeat,\r\n\t\t\ttz: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n\t\t};\r\n\t}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormArray, FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { SegmentedMessage } from 'sms-segments-calculator';\r\nimport { MainArea } from '../../../core/enums';\r\nimport { Parameter } from '../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../core/services';\r\nimport { ConfirmationComponent } from '../../../global/confirmation/confirmation';\r\nimport { ConfirmationModel } from '../../../global/confirmation/shared/model';\r\nimport { FailoverReqModel, GeneralInformationWAReqModel, SchedulerReqModel } from '../../models';\r\n\r\n@Component({\r\n selector: 'lib-new-campaign',\r\n templateUrl: './new-campaign.component.html',\r\n styleUrls: ['./new-campaign.component.scss'],\r\n})\r\nexport class NewCampaignComponent implements OnInit, OnDestroy {\r\n @Output() currentView = new EventEmitter<MainArea>();\r\n\r\n public campaignID: string;\r\n public currentViews = MainArea;\r\n public positionWizard: number = 1;\r\n public dataWizard: string[];\r\n public isLoading: boolean = false;\r\n public isSubmit: boolean = false;\r\n public isGeneralInformationValid: boolean = false;\r\n public isFailoverMechanismValid: boolean = false;\r\n public isNumberBaseInformationValid: boolean = false;\r\n public isSchedulerInformationValid: boolean = false;\r\n public isLine: boolean = false;\r\n public generalInformationData: any;\r\n public failoverMechanismData: any;\r\n public targetAudienceData: string[];\r\n public targetAudienceCount: number;\r\n public targetAudienceFile: any;\r\n public schedulerData: any;\r\n\r\n private isUploadTargetAudience: boolean = false;\r\n private subscribers: Subscription[] = [];\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService,\r\n private httpClient: HttpClient\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.campaignID = window.location.pathname?.split('/')?.pop();\r\n this.initWizard();\r\n this.getCampaignDetailService();\r\n }\r\n\r\n private initWizard(): void {\r\n if (!this.isLine) {\r\n this.dataWizard = [\r\n 'General Information',\r\n 'Failover Mechanism',\r\n 'Target Audience',\r\n 'Scheduler',\r\n 'Summary',\r\n ];\r\n return;\r\n }\r\n\r\n this.dataWizard = ['General Information', 'Target Audience', 'Scheduler', 'Summary'];\r\n }\r\n\r\n private getCampaignDetailService(): void {\r\n if (this.campaignID?.length < 10) return;\r\n\r\n this.isLoading = true;\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest([], `/campaign/${this.campaignID}`, 'GET')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n const generalInformation = {\r\n campaignName: resp.data?.name,\r\n medium: resp.data?.platform,\r\n channel: ['image', 'video', 'document'].includes(resp.data?.type)\r\n ? 'MEDIA'\r\n : resp.data?.isDirectSend\r\n ? 'utility'\r\n : resp.data?.type?.toUpperCase(),\r\n media: resp.data?.type?.toUpperCase(),\r\n isPrevTemplate: resp?.data?.isPrevTemplate,\r\n templateName: resp?.data?.templateName,\r\n ttl: resp?.data?.ttlSeconds,\r\n from: {\r\n id: resp.data?.accountId,\r\n name: resp.data?.accountName,\r\n platform: resp.data?.platform,\r\n clientId: resp.data?.clientId,\r\n clientName: resp.data?.clientName,\r\n accountNo: resp.data?.accountNo,\r\n wabaId: resp.data?.wabaId ?? '',\r\n },\r\n text: resp.data?.details?.text,\r\n targetURL:\r\n resp.data?.details?.image?.url ??\r\n resp.data?.details?.document?.url ??\r\n resp.data?.details?.video?.url ??\r\n resp.data?.details?.template?.headerURL,\r\n paramHeader: resp.data?.details?.template?.header,\r\n paramBody: resp.data?.details?.template?.data,\r\n paramButton: resp.data?.details?.template?.button,\r\n paramCarousel:\r\n resp.data?.details?.template?.carousel?.map((card: any) => {\r\n return {\r\n headerURL: card.headerURL || '',\r\n bodyParams: (card.body || []).map((val: string) => ({\r\n paramName: val,\r\n })),\r\n buttonParams: (card.button || []).map((btnGroup: any[]) => {\r\n return (btnGroup || []).map((val: string) => ({\r\n paramName: val,\r\n payload: val,\r\n }));\r\n }),\r\n };\r\n }) || [],\r\n otpValue: [...(resp.data?.details?.template?.data ?? [])]?.pop(),\r\n variables: (resp.data?.details?.template?.data || []).map(\r\n (val: string) => ({\r\n paramName: val,\r\n })\r\n ),\r\n isUseExistingTemplate: !!resp.data?.templateName,\r\n template: {\r\n ID: resp.data?.details?.template?.id,\r\n name: resp.data?.details?.template?.name,\r\n lang: resp.data?.details?.template?.lang,\r\n platform: resp.data?.platform,\r\n headerURL: resp.data?.details?.template?.headerURL,\r\n header: {\r\n examples: resp.data?.details?.template?.header,\r\n },\r\n body: {\r\n examples: resp.data?.details?.template?.data,\r\n },\r\n buttons: resp.data?.details?.template?.button,\r\n ClientId: resp.data?.clientId,\r\n ClientName: resp.data?.clientName,\r\n },\r\n isUpload: resp.data?.fileId !== '',\r\n fileId: resp.data?.fileId,\r\n };\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data?.id,\r\n form: generalInformation,\r\n },\r\n failover: resp.data?.failover,\r\n targetAudience: resp.data?.targets,\r\n targetAudienceFile: {\r\n name: resp.data?.fileName,\r\n targetURL: resp.data?.targetURL,\r\n },\r\n scheduler: {\r\n schedulerType:\r\n resp.data?.scheduleType === 'MULTI'\r\n ? 'ONE_TIME'\r\n : resp.data?.scheduleType,\r\n startDate: resp.data?.startTime?.split(' ')[0],\r\n startTime: resp.data?.startTime?.split(' ')[1],\r\n isRepeat: resp.data?.scheduleType === 'MULTI',\r\n delivery: resp.data?.repeat,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isLine = resp.data?.platform === 'LINE';\r\n this.isLoading = false;\r\n\r\n this.initWizard();\r\n },\r\n () => {\r\n this.isLoading = false;\r\n }\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public generalInformation(form: { parent: FormGroup; child: FormGroup }): void {\r\n this.isGeneralInformationValid = form.parent.valid && form.child && form.child?.valid;\r\n this.isLine = form.parent?.getRawValue()?.medium === 'LINE';\r\n\r\n this.initWizard();\r\n\r\n if (form.parent && form.child)\r\n this.generalInformationData = {\r\n ...form.parent.getRawValue(),\r\n ...form.child.getRawValue(),\r\n };\r\n }\r\n\r\n public failoverMechanism(form: FormGroup): void {\r\n this.isFailoverMechanismValid = form.valid;\r\n this.failoverMechanismData = form.getRawValue();\r\n }\r\n\r\n public targetAudience(target: {\r\n targetAudience: string[];\r\n numberCount: number;\r\n isUpload: boolean;\r\n file: any;\r\n }): void {\r\n this.targetAudienceFile = target.file;\r\n this.targetAudienceData = target.targetAudience;\r\n this.targetAudienceCount = target.numberCount;\r\n this.isUploadTargetAudience = target.isUpload;\r\n this.isNumberBaseInformationValid =\r\n (target.isUpload && target.file?.name) ||\r\n (!target.isUpload && target.targetAudience.length > 0) ||\r\n this.getCampaignStorage?.generalInformation?.form?.fileId;\r\n }\r\n\r\n public scheduler(form: FormGroup): void {\r\n this.schedulerData = form.getRawValue();\r\n this.isSchedulerInformationValid = form.valid;\r\n }\r\n\r\n public onClickSaveAndNextButton(): void {\r\n this.isSubmit = true;\r\n\r\n switch (this.positionWizard) {\r\n case 1:\r\n this.saveGeneralInformationService();\r\n break;\r\n case 2:\r\n !this.isLine ? this.saveFailoverMechanismService() : this.saveNumberBasesService();\r\n break;\r\n case 3:\r\n !this.isLine ? this.saveNumberBasesService() : this.saveSchedulerService();\r\n break;\r\n case 4:\r\n if (!this.isLine) this.saveSchedulerService();\r\n break;\r\n default:\r\n this.isSubmit = false;\r\n break;\r\n }\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n get getBody(): string {\r\n const body =\r\n this.generalInformationData?.text ||\r\n this.generalInformationData?.template?.body?.text ||\r\n this.generalInformationData?.body?.text;\r\n\r\n return (\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n );\r\n }\r\n\r\n public onCheckTwilioCounterValid = (): boolean => {\r\n const valuesGeneral = this.generalInformationData;\r\n\r\n if (valuesGeneral?.medium !== 'SMS') {\r\n return true;\r\n }\r\n\r\n if (valuesGeneral?.channel === 'TEXT') {\r\n const segmentedMessage = new SegmentedMessage(this.getBody);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n if (result.segments > 10) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n let valueResult = this.getBody;\r\n Array.from(valuesGeneral.template?.body?.examples || []).map((entry, index) => {\r\n if (valuesGeneral.paramBody.length > 0) {\r\n const placeholder = `{{${entry}}}`;\r\n const value = valuesGeneral.paramBody[index].name;\r\n valueResult = valueResult.split(placeholder).join(value);\r\n }\r\n });\r\n\r\n const segmentedMessage = new SegmentedMessage(valueResult);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n if (result.segments > 10) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n };\r\n\r\n private async saveGeneralInformationService(): Promise<void> {\r\n if (!this.onCheckTwilioCounterValid()) {\r\n this.toastr.error('Segment cannot more than 10');\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n const bodyReq = new GeneralInformationWAReqModel().clone({\r\n ...this.generalInformationData,\r\n });\r\n\r\n const payloadValue = bodyReq.convert();\r\n\r\n this.saveGeneralInformation(payloadValue);\r\n }\r\n\r\n private saveGeneralInformation(payloadValue: any): void {\r\n if (payloadValue.template && this.generalInformationData.template) {\r\n payloadValue.template.type =\r\n payloadValue.template.type || this.generalInformationData.template.category;\r\n }\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: payloadValue,\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n if (payloadValue.template && payloadValue.template.buttonParams) {\r\n delete payloadValue.template.buttonParams;\r\n }\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n this.generalInformationData.id\r\n ? `/campaign/${this.generalInformationData.id}`\r\n : '/campaign',\r\n this.generalInformationData.id ? 'PUT' : 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n generalInformation: {\r\n id: resp.data.id,\r\n form: this.generalInformationData,\r\n },\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveFailoverMechanismService(): void {\r\n const bodyReq = new FailoverReqModel().clone({\r\n ...this.failoverMechanismData,\r\n });\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: bodyReq.convert(),\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/failover`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n failover: this.failoverMechanismData,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveNumberBasesService(): void {\r\n if (this.targetAudienceData.length === 0 || this.isUploadTargetAudience) {\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n targetAudience: this.targetAudienceData,\r\n targetAudienceCount: this.targetAudienceCount,\r\n targetAudienceFile: this.targetAudienceFile,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n return;\r\n }\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: {\r\n targets: this.targetAudienceData,\r\n numberCount: this.targetAudienceCount,\r\n },\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/targetcategory`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n targetAudience: this.targetAudienceData,\r\n targetAudienceCount: this.targetAudienceCount,\r\n targetAudienceFile: this.targetAudienceFile,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private saveSchedulerService(): void {\r\n const bodyReq = new SchedulerReqModel().clone({\r\n ...this.schedulerData,\r\n });\r\n\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'data',\r\n value: bodyReq.convert(),\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/schedule`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n localStorage.setItem(\r\n 'telin.campaign',\r\n JSON.stringify({\r\n ...this.getCampaignStorage,\r\n ...{\r\n scheduler: this.schedulerData,\r\n },\r\n })\r\n );\r\n\r\n this.isSubmit = false;\r\n this.positionWizard += 1;\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onPrevious(): void {\r\n this.positionWizard -= 1;\r\n }\r\n\r\n public changeCurrentView(area: MainArea) {\r\n this.openConfirmationDialog(area);\r\n }\r\n\r\n private openConfirmationDialog(area: MainArea): void {\r\n const confirmation = new ConfirmationModel();\r\n\r\n confirmation.title = 'Cancel Add Broadcast';\r\n confirmation.content = `Are you sure you want to cancel<br/> Add Broadcast?`;\r\n confirmation.btnSubmitRed = 'Yes';\r\n confirmation.btnCancel = 'No';\r\n\r\n const subs = this.dialog\r\n .open(ConfirmationComponent, {\r\n autoFocus: false,\r\n backdropClass: 'overlay-backdrop-dialog',\r\n data: confirmation,\r\n })\r\n .afterClosed()\r\n .subscribe((resp) => {\r\n if (resp) {\r\n window.history.replaceState(\r\n {},\r\n `/${this.getCampaignStorage?.generalInformation?.id}`,\r\n '/secure/campaign'\r\n );\r\n\r\n this.currentView.emit(area);\r\n }\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onSubmitForApproval(): void {\r\n const parameterList: Array<Parameter> = [];\r\n this.isSubmit = true;\r\n\r\n if (this.getCampaignStorage?.targetAudienceFile?.name)\r\n parameterList.push({\r\n name: 'isFile',\r\n value: true,\r\n in: 'query',\r\n type: 'string',\r\n });\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(\r\n parameterList,\r\n `/campaign/${this.getCampaignStorage?.generalInformation?.id}/submit`,\r\n 'POST'\r\n )\r\n .subscribe(\r\n (resp) => {\r\n if (resp?.message?.toLowerCase() !== 'success') {\r\n this.isSubmit = false;\r\n return;\r\n }\r\n\r\n window.history.replaceState(\r\n {},\r\n `/${this.getCampaignStorage?.generalInformation?.id}`,\r\n '/secure/campaign'\r\n );\r\n\r\n this.toastr.success('Campaign submitted for approval!');\r\n this.isSubmit = false;\r\n this.currentView.emit(this.currentViews.CampaignIndex);\r\n },\r\n () => (this.isSubmit = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationEmailMessageValidationConst,\r\n\tMsgTypeEmailOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-general-information-email',\r\n\ttemplateUrl: './general-information-email.component.html',\r\n\tstyleUrls: ['./general-information-email.component.scss'],\r\n})\r\nexport class GeneralInformationEmailComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic validationMessages: any;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\tpublic isHaveTemplateParam: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = GeneralInformationEmailMessageValidationConst;\r\n\t\tthis.msgTypeWAOption = MsgTypeEmailOptionConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium ===\r\n\t\t\t\t'EMAIL'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null, Validators.required),\r\n\t\t\ttemplate: new FormControl(null, Validators.required),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t\tisUpload: new FormControl(false),\r\n\t\t\tfileId: new FormControl(''),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !==\r\n\t\t\t\t'EMAIL'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('isUpload')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.isUpload\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('fileId')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.fileId);\r\n\r\n\t\tthis.isHaveTemplateParam = this.form.get('isUpload').value;\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tget getIsTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.getIsTemplate) {\r\n\t\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t} else {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic formReset(_isMediaType: boolean = false): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'EMAIL', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'EMAIL', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'wabaId',\r\n\t\t\t\tthis.form.get('from').value?.wabaId ?? '',\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\r\n\t\t\t\t\tif (this.form.get('isUpload').value)\r\n\t\t\t\t\t\treturn this.updateDownloadCSV(\r\n\t\t\t\t\t\t\tthis.form.get('isUpload').value\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue: value,\r\n\t\t\t\t\tdisabled:\r\n\t\t\t\t\t\tthis.isReadOnlyMode ||\r\n\t\t\t\t\t\t['UnsubscribeAccount'].includes(value),\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tthis.isHaveTemplateParam = template.body.examples?.length > 0;\r\n\r\n\t\ttemplate.body.examples?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\ttemplate.body.examples?.forEach((each, index) => {\r\n\t\t\tlet paramValue =\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t'';\r\n\r\n\t\t\tif (['UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n\t\t\tthis.addParamBody(paramValue);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateDownloadCSV(isChecked: boolean): void {\r\n\t\tthis.form.get('isUpload').setValue(isChecked);\r\n\r\n\t\tif (isChecked) {\r\n\t\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\t\tthis.form.get('paramBody').clearValidators();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationLineMessageValidationConst,\r\n\tMsgTypeLineOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n@Component({\r\n\tselector: 'lib-general-information-line',\r\n\ttemplateUrl: './general-information-line.component.html',\r\n\tstyleUrls: ['./general-information-line.component.scss'],\r\n})\r\nexport class GeneralInformationLineComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic validationMessages: any;\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.msgTypeWAOption = MsgTypeLineOptionConst;\r\n\t\tthis.validationMessages = GeneralInformationLineMessageValidationConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium === 'LINE'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null),\r\n\t\t\ttemplate: new FormControl(null),\r\n\t\t\tisJSON: new FormControl(false),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !== 'LINE'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.isText) {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t}\r\n\r\n\tpublic formReset(): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'LINE', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'LINE', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{ value: value, disabled: this.isReadOnlyMode },\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tget isText(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'text'\r\n\t\t);\r\n\t}\r\n\r\n\tget isTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tlet bodyText = template.body.text;\r\n\r\n\t\tif (this.isJsonString(template.body.text)) {\r\n\t\t\tbodyText = JSON.parse(template.body.text).text;\r\n\t\t}\r\n\r\n\t\tthis.form.get('isJSON').setValue(this.isJsonString(template.body.text));\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tconst findBrackets = bodyText?.match(/{{/g);\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\tfindBrackets?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\tfindBrackets?.forEach((_, index) => {\r\n\t\t\tthis.addParamBody(\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t\t''\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t}\r\n\r\n\tprivate isJsonString(str: string): boolean {\r\n\t\ttry {\r\n\t\t\tJSON.parse(str);\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService(null, searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tGeneralInformationSMSMessageValidationConst,\r\n\tMsgTypeWAOptionConst,\r\n} from '../../../../../core/const';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-general-information-sms',\r\n\ttemplateUrl: './general-information-sms.component.html',\r\n\tstyleUrls: ['./general-information-sms.component.scss'],\r\n})\r\nexport class GeneralInformationSMSComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic msgTypeWAOption: any[] = [];\r\n\tpublic validationMessages: any;\r\n\tpublic accountOption: WhatsAppAccountDto[] = [];\r\n\tpublic isHaveNextAccountOption: boolean = true;\r\n\tpublic isLoadingAccountOption: boolean = false;\r\n\tpublic templateOption: TemplateWAModel[] = [];\r\n\tpublic isHaveNextTemplateOption: boolean = true;\r\n\tpublic isLoadingTemplateOption: boolean = false;\r\n\tpublic isHaveTemplateParam: boolean = false;\r\n\r\n\tprivate pageNoAccountOption: number = 1;\r\n\tprivate pageNoTemplateOption: number = 1;\r\n\tprivate subscribers: Subscription[] = [];\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\t@Input()\r\n\tset isTouchedForm(status: boolean) {\r\n\t\tif (!this.updateGeneralInformationForm) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.updateGeneralInformationForm = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.msgTypeWAOption = MsgTypeWAOptionConst.filter(\r\n\t\t\tt => t.code === 'TEXT' || t.code === 'TEMPLATE'\r\n\t\t);\r\n\t\tthis.validationMessages = GeneralInformationSMSMessageValidationConst;\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.initValidation();\r\n\t\tthis.getAccountOptionService(\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium === 'SMS'\r\n\t\t\t\t? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n\t\t\t\t: ''\r\n\t\t);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tchannel: new FormControl(null, Validators.required),\r\n\t\t\tfrom: new FormControl(null, Validators.required),\r\n\t\t\ttext: new FormControl(null, Validators.required),\r\n\t\t\ttemplate: new FormControl(null, Validators.required),\r\n\t\t\tparamBody: new FormArray([], Validators.required),\r\n\t\t\tisUpload: new FormControl(false),\r\n\t\t\tfileId: new FormControl(''),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.updateGeneralInformationForm.emit(this.form);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium !== 'SMS'\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('channel')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.channel\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('from')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.from);\r\n\t\tthis.form\r\n\t\t\t.get('text')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.text);\r\n\t\tthis.form\r\n\t\t\t.get('template')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.template\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('isUpload')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.getCampaignStorage?.generalInformation?.form.isUpload\r\n\t\t\t);\r\n\t\tthis.form\r\n\t\t\t.get('fileId')\r\n\t\t\t.setValue(this.getCampaignStorage?.generalInformation?.form.fileId);\r\n\r\n\t\tthis.isHaveTemplateParam = this.form.get('isUpload').value;\r\n\t\tthis.getTemplateOptionService(\r\n\t\t\tnull,\r\n\t\t\tthis.form.get('template').value?.name\r\n\t\t);\r\n\t}\r\n\r\n\tget getIsTemplate(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.form.get('channel').value &&\r\n\t\t\tthis.form.get('channel').value?.toLowerCase() === 'template'\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initValidation(): void {\r\n\t\tfor (const key in this.form.controls) {\r\n\t\t\tthis.form.controls[key].clearValidators();\r\n\t\t\tthis.form.controls[key].updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\tthis.form.get('channel').setValidators(Validators.required);\r\n\t\tthis.form.get('from').setValidators(Validators.required);\r\n\r\n\t\tif (this.getIsTemplate) {\r\n\t\t\tthis.form.get('template').setValidators(Validators.required);\r\n\t\t\tthis.form.get('paramBody').setValidators(Validators.required);\r\n\t\t\tthis.form.get('template').updateValueAndValidity();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t} else {\r\n\t\t\tthis.form.get('text').setValidators(Validators.required);\r\n\t\t\tthis.form.get('text').updateValueAndValidity();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic formReset(_isMediaType: boolean = false): void {\r\n\t\tthis.form.get('text').reset();\r\n\t\tthis.form.get('template').reset();\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\r\n\t\tthis.initValidation();\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'SMS', 'string'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption = isInfinite\r\n\t\t\t\t\t? [...this.accountOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextAccountOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tevent: string = null,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', 'SMS', 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'clientId',\r\n\t\t\t\tthis.form.get('from').value?.clientId,\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'wabaId',\r\n\t\t\t\tthis.form.get('from').value?.wabaId ?? '',\r\n\t\t\t\t'string'\r\n\t\t\t),\r\n\t\t];\r\n\r\n\t\tif (this.isReadOnlyMode)\r\n\t\t\tparameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption = isInfinite\r\n\t\t\t\t\t? [...this.templateOption, ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\t\t\t\tthis.isHaveNextTemplateOption = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption = false;\r\n\r\n\t\t\t\tconst template = this.templateOption?.find(\r\n\t\t\t\t\tt => t.ID === this.form.get('template').value?.ID\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tthis.form.get('template').setValue(template);\r\n\r\n\t\t\t\t\tif (this.form.get('isUpload').value)\r\n\t\t\t\t\t\treturn this.updateDownloadCSV(\r\n\t\t\t\t\t\t\tthis.form.get('isUpload').value\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tprivate initParameter(value: string = ''): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue: value,\r\n\t\t\t\t\tdisabled:\r\n\t\t\t\t\t\tthis.isReadOnlyMode ||\r\n\t\t\t\t\t\t['UnsubscribeAccount'].includes(value),\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getParamBody(): FormGroup[] {\r\n\t\treturn (this.form.get('paramBody') as FormArray)\r\n\t\t\t.controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(value: string = ''): void {\r\n\t\tconst form = this.initParameter(value);\r\n\t\t(this.form.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch() {\r\n\t\tif (!this.isHaveNextAccountOption) return;\r\n\r\n\t\tthis.pageNoAccountOption += 1;\r\n\t\tthis.getAccountOptionService('', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch() {\r\n\t\tif (!this.isHaveNextTemplateOption) return;\r\n\r\n\t\tthis.pageNoTemplateOption += 1;\r\n\t\tthis.getTemplateOptionService(null, '', true);\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic updateTemplate(template: TemplateWAModel): void {\r\n\t\tif (!template) return;\r\n\r\n\t\tthis.isHaveTemplateParam = template.body.examples?.length > 0;\r\n\r\n\t\ttemplate.body.examples?.length > 0\r\n\t\t\t? this.form.get('paramBody').setValidators(Validators.required)\r\n\t\t\t: this.form.get('paramBody').clearValidators();\r\n\r\n\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\r\n\t\tconst formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n\t\ttemplate.body.examples?.forEach((each, index) => {\r\n\t\t\tlet paramValue =\r\n\t\t\t\tformStorage?.paramBody?.[index]?.name ??\r\n\t\t\t\tformStorage?.paramBody?.[index] ??\r\n\t\t\t\t'';\r\n\r\n\t\t\tif (['UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n\t\t\tthis.addParamBody(paramValue);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateSearch(searchValue: string): void {\r\n\t\tthis.pageNoTemplateOption = 1;\r\n\t\tthis.getTemplateOptionService('', searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string): void {\r\n\t\tthis.pageNoAccountOption = 1;\r\n\t\tthis.getAccountOptionService(searchValue);\r\n\t}\r\n\r\n\tpublic updateDownloadCSV(isChecked: boolean): void {\r\n\t\tthis.form.get('isUpload').setValue(isChecked);\r\n\r\n\t\tif (isChecked) {\r\n\t\t\t(this.form.get('paramBody') as FormArray).controls = [];\r\n\t\t\t(this.form.get('paramBody') as FormArray).reset();\r\n\t\t\tthis.form.get('paramBody').clearValidators();\r\n\t\t\tthis.form.get('paramBody').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateTemplate(this.form.get('template').value);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { Validators as AngularValidators } from '@angular/forms';\r\nimport { maxValidator } from './max.validator';\r\nimport { minValidator } from './min.validator';\r\nimport { requiredValidator } from './required.validator';\r\n\r\nexport const Validators = {\r\n compose: AngularValidators.compose,\r\n composeAync: AngularValidators.composeAsync,\r\n max: maxValidator,\r\n min: minValidator,\r\n required: requiredValidator,\r\n};\r\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\r\nexport const maxValidator = (max: number, message: string) => {\r\n\treturn (AC: AbstractControl): ValidationErrors | null => {\r\n\t\tconst isError = Validators.max(max)(AC);\r\n\t\tif (isError)\r\n\t\t\treturn {\r\n\t\t\t\tmax: max,\r\n\t\t\t\tactual: AC.value,\r\n\t\t\t\tmessage: message || `Max Value equals to ${max}`,\r\n\t\t\t};\r\n\t\treturn null;\r\n\t};\r\n};\r\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\r\nexport const minValidator = (min: number, message: string) => {\r\n\treturn (AC: AbstractControl): ValidationErrors | null => {\r\n\t\tconst isError = Validators.min(min)(AC);\r\n\t\tif (isError)\r\n\t\t\treturn {\r\n\t\t\t\tmin: min,\r\n\t\t\t\tactual: AC.value,\r\n\t\t\t\tmessage: message || `Min Value equals to ${min}`,\r\n\t\t\t};\r\n\t\treturn null;\r\n\t};\r\n};\r\n","import { MapsAPILoader } from '@agm/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n GeneralInformationWAMessageValidationConst,\r\n MediaTypeOptionConst,\r\n MsgTypeWAOptionConst,\r\n} from '../../../../../core/const';\r\nimport { ProductCategoryEnum } from '../../../../../core/enums';\r\nimport { BaseOptionModel } from '../../../../../core/models';\r\nimport { Parameter } from '../../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../../core/services';\r\nimport { generateEnumOption } from '../../../../../core/util';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../../models';\r\nimport { EnumData } from '../../../../util/enums';\r\nimport { Validators as CustomValidators } from '../../../../validators';\r\n\r\ninterface IMaps {\r\n zoom: number;\r\n latitude: number | null;\r\n longitude: number | null;\r\n isDraggable: boolean;\r\n isDoubleClickZoom: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-general-information-wa',\r\n templateUrl: './general-information-wa.component.html',\r\n styleUrls: ['./general-information-wa.component.scss'],\r\n})\r\nexport class GeneralInformationWAComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public updateGeneralInformationForm: EventEmitter<FormGroup>;\r\n\r\n public form!: FormGroup;\r\n public msgTypeWAOption: any[] = [];\r\n public mediaTypeOption: any[] = [];\r\n public categoryOption!: BaseOptionModel[];\r\n public accountOption: WhatsAppAccountDto[] = [];\r\n public isHaveNextAccountOption: boolean = true;\r\n public isLoadingAccountOption: boolean = false;\r\n public templateOption: TemplateWAModel[] = [];\r\n public isHaveNextTemplateOption: boolean = true;\r\n public isLoadingTemplateOption: boolean = false;\r\n public isHaveTemplateParam: boolean = false;\r\n public isShowParameter: boolean = false;\r\n public validationMessages: any;\r\n public extFileAccepted: string = 'image/*';\r\n public maps!: IMaps;\r\n\r\n private pageNoAccountOption: number = 1;\r\n private pageNoTemplateOption: number = 1;\r\n private subscribers: Subscription[] = [];\r\n private geoCoder: any;\r\n\r\n public templates = [\r\n { label: 'Create New', value: false },\r\n { label: 'Use existing template', value: true },\r\n ];\r\n\r\n @Input() public isReadOnlyMode!: boolean;\r\n\r\n @Input()\r\n set isTouchedForm(status: boolean) {\r\n if (!this.updateGeneralInformationForm) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.updateGeneralInformationForm.emit(this.form);\r\n });\r\n }\r\n\r\n @ViewChild('mapSearch') mapSearchRef!: ElementRef;\r\n\r\n public isCheckUtility: boolean = false;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private mapsAPILoader: MapsAPILoader,\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService,\r\n private httpClient: HttpClient\r\n ) {\r\n this.updateGeneralInformationForm = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.msgTypeWAOption = MsgTypeWAOptionConst;\r\n this.mediaTypeOption = MediaTypeOptionConst;\r\n this.categoryOption = generateEnumOption(ProductCategoryEnum);\r\n this.validationMessages = GeneralInformationWAMessageValidationConst;\r\n this.maps = {\r\n zoom: 15,\r\n latitude: null,\r\n longitude: null,\r\n isDraggable: true,\r\n isDoubleClickZoom: true,\r\n };\r\n\r\n this.initForm();\r\n this.initDisable();\r\n this.initEdit();\r\n this.initValidation();\r\n this.getAccountOptionService(\r\n this.getCampaignStorage?.generalInformation?.form?.medium === 'WA'\r\n ? this.getCampaignStorage?.generalInformation?.form?.from?.name\r\n : ''\r\n );\r\n /* this.setCurrentLocation(); */\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n const campaignData = localStorage.getItem('telin.campaign');\r\n return campaignData ? JSON.parse(campaignData) : {};\r\n }\r\n\r\n private initForm(): void {\r\n this.form = new FormGroup({\r\n channel: new FormControl(null, Validators.required),\r\n media: new FormControl(null),\r\n from: new FormControl(null),\r\n text: new FormControl(null),\r\n fileName: new FormControl(null),\r\n targetURL: new FormControl(null),\r\n fileType: new FormControl(null),\r\n file: new FormControl(null),\r\n latitude: new FormControl(null),\r\n longitude: new FormControl(null),\r\n template: new FormControl(null),\r\n paramHeader: new FormArray([], Validators.required),\r\n paramBody: new FormArray([], Validators.required),\r\n paramButton: new FormArray([], Validators.required),\r\n otpValue: new FormControl(''),\r\n isUpload: new FormControl(false),\r\n fileId: new FormControl(''),\r\n category: new FormControl(null),\r\n product: new FormControl(null),\r\n catalogue: new FormControl(null),\r\n body: new FormControl(null),\r\n isUseExistingTemplate: new FormControl(false),\r\n isNeedSave: new FormControl(false),\r\n ttl: new FormControl(null),\r\n isDownloadVariableXLS: new FormControl(false),\r\n variables: new FormArray([]),\r\n useXlsx: new FormControl(false),\r\n buttonParams: new FormArray([]),\r\n paramCarousel: new FormArray([]),\r\n });\r\n\r\n this.form.valueChanges.subscribe(() => {\r\n setTimeout(() => {\r\n this.updateGeneralInformationForm.emit(this.form);\r\n });\r\n });\r\n this.form.get('isUpload')?.valueChanges.subscribe((val) => {\r\n this.toggleExcelValidation(val);\r\n });\r\n }\r\n\r\n private initDisable(): void {\r\n if (!this.isReadOnlyMode) {\r\n return;\r\n }\r\n\r\n this.form.disable();\r\n }\r\n\r\n private initEdit(): void {\r\n const storageData = this.getCampaignStorage;\r\n const formValues = storageData?.generalInformation?.form;\r\n if (\r\n !storageData ||\r\n Object.entries(storageData).length === 0 ||\r\n formValues?.medium !== 'WA'\r\n ) {\r\n return;\r\n }\r\n this.getControl('channel')?.setValue(formValues?.channel);\r\n this.getControl('media')?.setValue(formValues?.media);\r\n this.getControl('from')?.setValue(formValues?.from);\r\n this.getControl('text')?.setValue(formValues?.text);\r\n this.getControl('targetURL')?.setValue(formValues?.targetURL);\r\n this.getControl('fileName')?.setValue(\r\n formValues?.fileName ?? this.getControl('targetURL')?.value\r\n );\r\n this.getControl('template')?.setValue(formValues?.template);\r\n this.getControl('isUpload')?.setValue(formValues?.isUpload);\r\n this.getControl('fileId')?.setValue(formValues?.fileId);\r\n this.getControl('otpValue')?.setValue(formValues?.otpValue);\r\n this.getControl('isUseExistingTemplate')?.setValue(\r\n formValues?.isUseExistingTemplate !== undefined\r\n ? formValues.isUseExistingTemplate\r\n : !!formValues?.template?.name\r\n );\r\n this.getControl('isNeedSave')?.setValue(!!formValues?.isNeedSave);\r\n this.getControl('isDownloadVariableXLS')?.setValue(formValues?.isDownloadVariableXLS);\r\n this.getControl('ttl')?.setValue(formValues?.ttl);\r\n\r\n const savedVariables = formValues?.variables;\r\n if (savedVariables && Array.isArray(savedVariables) && savedVariables.length > 0) {\r\n this.variables.clear();\r\n\r\n savedVariables.forEach((item: any) => {\r\n this.variables.push(\r\n new FormGroup({\r\n paramName: new FormControl({\r\n value: item.paramName || '',\r\n disabled: this.isReadOnlyMode,\r\n }),\r\n })\r\n );\r\n });\r\n }\r\n\r\n this.isHaveTemplateParam = this.getControl('isUpload')?.value;\r\n this.getTemplateOptionService(null, this.getControl('template')?.value?.name);\r\n }\r\n\r\n private initValidation(): void {\r\n if (!this.form) return;\r\n\r\n for (const key in this.form.controls) {\r\n if (this.form.controls[key]) {\r\n this.form.controls[key].clearValidators();\r\n this.form.controls[key].updateValueAndValidity();\r\n }\r\n }\r\n\r\n this.getControl('channel')?.setValidators(Validators.required);\r\n\r\n if (this.getIsText) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n } else if (this.getIsMedia) {\r\n this.getControl('media')?.setValidators(Validators.required);\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('fileName')?.setValidators(Validators.required);\r\n this.getControl('media')?.updateValueAndValidity();\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('fileName')?.updateValueAndValidity();\r\n } else if (this.getIsTemplate) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('template')?.setValidators(Validators.required);\r\n this.getControl('paramHeader')?.setValidators(Validators.required);\r\n this.getControl('paramBody')?.setValidators(Validators.required);\r\n this.getControl('paramButton')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n } else if (this.getIsCatalogue) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('category')?.setValidators(Validators.required);\r\n this.getControl('catalogue')?.setValidators(Validators.required);\r\n this.getControl('product')?.setValidators(Validators.required);\r\n this.getControl('body')?.setValidators(Validators.maxLength(100));\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('category')?.updateValueAndValidity();\r\n this.getControl('catalogue')?.updateValueAndValidity();\r\n this.getControl('product')?.updateValueAndValidity();\r\n this.getControl('body')?.updateValueAndValidity();\r\n } else if (this.getIsUtility) {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators([\r\n Validators.required,\r\n Validators.maxLength(1024),\r\n ]);\r\n this.getControl('ttl')?.setValidators([\r\n CustomValidators.min(30, 'Minimum TTL 30'),\r\n CustomValidators.max(43200, 'Maximum TTL 43200'),\r\n ]);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('ttl')?.updateValueAndValidity();\r\n this.getControl('variables')?.updateValueAndValidity();\r\n } else {\r\n this.getControl('from')?.setValidators(Validators.required);\r\n this.getControl('text')?.setValidators(Validators.required);\r\n this.getControl('from')?.updateValueAndValidity();\r\n this.getControl('text')?.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public formReset(_isMediaType: boolean = false): void {\r\n if (!_isMediaType) {\r\n this.getControl('media')?.reset();\r\n this.getControl('from')?.reset();\r\n }\r\n\r\n this.getControl('text')?.reset();\r\n this.getControl('fileName')?.reset();\r\n this.getControl('targetURL')?.reset();\r\n this.getControl('fileType')?.reset();\r\n this.getControl('file')?.reset();\r\n this.getControl('latitude')?.reset();\r\n this.getControl('longitude')?.reset();\r\n this.getControl('template')?.reset();\r\n this.getControl('category')?.reset();\r\n this.getControl('product')?.reset();\r\n this.getControl('catalogue')?.reset();\r\n this.getControl('body')?.reset();\r\n this.getControl('otpValue')?.reset();\r\n this.getControl('variables')?.reset();\r\n\r\n const paramHeader = this.getControl('paramHeader') as FormArray | null;\r\n if (paramHeader) {\r\n paramHeader.clear();\r\n paramHeader.reset();\r\n }\r\n\r\n const paramBody = this.getControl('paramBody') as FormArray | null;\r\n if (paramBody) {\r\n paramBody.clear();\r\n paramBody.reset();\r\n }\r\n\r\n const paramButton = this.getControl('paramButton') as FormArray | null;\r\n if (paramButton) {\r\n paramButton.clear();\r\n paramButton.reset();\r\n }\r\n\r\n this.initValidation();\r\n }\r\n\r\n private getControl(controlName: string): AbstractControl | null {\r\n return this.form ? this.form.get(controlName) : null;\r\n }\r\n\r\n private initParam(_name: string, _value: any, _type: string): Parameter {\r\n return {\r\n name: _name,\r\n value: _value,\r\n in: 'query',\r\n type: _type,\r\n };\r\n }\r\n\r\n private getAccountOptionService(filter: string = '', isInfinite: boolean = false): void {\r\n this.isLoadingAccountOption = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.pageNoAccountOption, 'number'),\r\n this.initParam('rowPerPage', 20, 'number'),\r\n this.initParam('platform', 'WA', 'string'),\r\n this.initParam('status', 'APPROVED', 'string'),\r\n this.initParam('filter', filter, 'string'),\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/admin/account', 'GET')\r\n .subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n if (!resp.data) return;\r\n\r\n this.accountOption = isInfinite ? [...this.accountOption, ...resp.data] : resp.data;\r\n this.isHaveNextAccountOption = resp.haveNext ?? true;\r\n this.isLoadingAccountOption = false;\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public getTemplateOptionService(\r\n event: string = null,\r\n filter: string = '',\r\n isInfinite: boolean = false\r\n ): void {\r\n this.isLoadingTemplateOption = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.pageNoTemplateOption, 'number'),\r\n this.initParam('rowPerPage', 20, 'number'),\r\n this.initParam('platform', 'WA', 'string'),\r\n this.initParam('templateType', 'all', 'string'),\r\n this.initParam('filter', filter, 'string'),\r\n this.initParam('status', 'APPROVED', 'string'),\r\n this.initParam('clientId', this.getControl('from')?.value?.clientId ?? '', 'string'),\r\n this.initParam('wabaId', this.getControl('from')?.value?.wabaId ?? '', 'string'),\r\n ];\r\n\r\n if (this.isReadOnlyMode) parameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n const messageType = this.form.value?.channel;\r\n\r\n if (messageType === 'utility') {\r\n parameterList.push(this.initParam('isDirectSend', true, 'string'));\r\n }\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/template', 'GET')\r\n .subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n const currentOptions = this.templateOption || [];\r\n const newData = resp.data || [];\r\n this.templateOption = isInfinite ? [...currentOptions, ...newData] : newData;\r\n\r\n this.isHaveNextTemplateOption = resp.haveNext ?? true;\r\n this.isLoadingTemplateOption = false;\r\n\r\n const template = this.templateOption?.find(\r\n (t) => t.ID === this.getControl('template')?.value?.ID\r\n );\r\n\r\n if (template) {\r\n this.getControl('template')?.patchValue(template);\r\n\r\n if (this.getControl('isUpload')?.value)\r\n return this.updateDownloadCSV(this.getControl('isUpload')?.value);\r\n }\r\n this.updateTemplate(this.getControl('template')?.value);\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private initParameter(isButton: boolean = false, value: string = ''): FormGroup {\r\n const form = isButton\r\n ? new FormGroup({\r\n name: new FormArray([], Validators.required),\r\n })\r\n : new FormGroup({\r\n name: new FormControl(\r\n {\r\n value: value,\r\n disabled: this.isReadOnlyMode || ['$UnsubscribeAccount'].includes(value),\r\n },\r\n Validators.required\r\n ),\r\n });\r\n\r\n return form;\r\n }\r\n\r\n get getParamHeader(): FormGroup[] {\r\n return (this.form.get('paramHeader') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamHeader(value: string = ''): void {\r\n const form = this.initParameter(false, value);\r\n (this.form.get('paramHeader') as FormArray).push(form);\r\n }\r\n\r\n get getParamBody(): FormGroup[] {\r\n return (this.form.get('paramBody') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamBody(value: string = ''): void {\r\n const form = this.initParameter(false, value);\r\n (this.form.get('paramBody') as FormArray).push(form);\r\n }\r\n\r\n get getButton(): FormGroup[] {\r\n return (this.form.get('paramButton') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public getParamButton(index: number): FormGroup[] {\r\n const form = (this.form.get('paramButton') as FormArray).controls as FormGroup[];\r\n return (form[index].get('name') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n public addParamButton(): void {\r\n const form = this.initParameter(true);\r\n (this.form.get('paramButton') as FormArray).push(form);\r\n }\r\n\r\n get getIsText(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'text'\r\n );\r\n }\r\n\r\n get getIsMedia(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'media'\r\n );\r\n }\r\n\r\n get getIsTemplate(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'template'\r\n );\r\n }\r\n\r\n get getIsCatalogue(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'catalogue'\r\n );\r\n }\r\n\r\n get getIsUtility(): boolean {\r\n return (\r\n this.getControl('channel')?.value &&\r\n this.getControl('channel')?.value?.toLowerCase() === 'utility'\r\n );\r\n }\r\n\r\n get getCarouselControls() {\r\n return (this.form.get('paramCarousel') as FormArray).controls as FormGroup[];\r\n }\r\n\r\n getCarouselButtons(cardIndex: number): any[] {\r\n const templateValue = this.form.get('template')?.value;\r\n return templateValue?.carousel?.[cardIndex]?.buttons || [];\r\n }\r\n\r\n getCarouselBodyParams(cardIndex: number): FormArray {\r\n return this.getCarouselControls[cardIndex].get('bodyParams') as FormArray;\r\n }\r\n\r\n getCarouselBtnParams(cardIndex: number, btnIndex: number): FormArray {\r\n const btnParamsArray = this.getCarouselControls[cardIndex].get('buttonParams') as FormArray;\r\n return btnParamsArray.at(btnIndex) as FormArray;\r\n }\r\n\r\n public getNextAccountBatch() {\r\n if (!this.isHaveNextAccountOption) return;\r\n\r\n this.pageNoAccountOption += 1;\r\n this.getAccountOptionService('', true);\r\n }\r\n\r\n public accountSelectedDisplay(\r\n attribute1: WhatsAppAccountDto,\r\n attribute2: WhatsAppAccountDto\r\n ): string {\r\n return attribute1 && attribute2 && attribute1.id == attribute2.id\r\n ? `${attribute1.name} (${attribute1.accountNo})`\r\n : '';\r\n }\r\n\r\n public getNextTemplateBatch() {\r\n if (!this.isHaveNextTemplateOption) return;\r\n\r\n this.pageNoTemplateOption += 1;\r\n this.getTemplateOptionService(null, '', true);\r\n }\r\n\r\n public templateSelectedDisplay(\r\n attribute1: TemplateWAModel,\r\n attribute2: TemplateWAModel\r\n ): string {\r\n return attribute1 && attribute2 && attribute1.name == attribute2.name\r\n ? `${attribute1.name}`\r\n : '';\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const file: FileList = (event.target as HTMLInputElement).files;\r\n const accept = this.extFileAccepted.split('/');\r\n let matchType = accept[0];\r\n\r\n if (file.length === 0) return;\r\n\r\n if (this.extFileAccepted === 'application/pdf') matchType = accept[1];\r\n\r\n if (!file[0].type.includes(matchType)) {\r\n this.toastr.error('Sorry, the file you are uploading is not allowed');\r\n return;\r\n }\r\n\r\n if (file[0].size > 10000000) {\r\n this.toastr.error('Upload media failed, max size 10mb');\r\n return;\r\n }\r\n\r\n this.getControl('file')?.setValue(file[0]);\r\n this.getControl('fileType')?.setValue('image');\r\n this.getControl('fileName')?.setValue(file[0].name);\r\n this.getControl('targetURL')?.setValidators(Validators.required);\r\n this.getControl('targetURL')?.updateValueAndValidity();\r\n\r\n if (file[0].type.indexOf('video') > -1) this.getControl('fileType')?.setValue('video');\r\n\r\n this.uploadMediaService();\r\n }\r\n\r\n private uploadMediaService(): void {\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'file',\r\n value: this.getControl('file')?.value,\r\n in: 'formData',\r\n type: 'object',\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/media', 'POST')\r\n .subscribe((resp: AppResponse<any>) => {\r\n this.getControl('targetURL')?.clearValidators();\r\n this.getControl('targetURL')?.updateValueAndValidity();\r\n this.getControl('targetURL')?.setValue(resp.data.targetURL);\r\n this.getControl('file')?.reset();\r\n\r\n this.toastr.success('Upload media success');\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n get buttonParamsControls() {\r\n const control = this.form.get('buttonParams') as FormArray;\r\n return control ? control.controls : [];\r\n }\r\n\r\n get isUsingExcelBulk(): boolean {\r\n return this.getControl('isUpload')?.value || false;\r\n }\r\n\r\n public updateTemplate(template: TemplateWAModel): void {\r\n this.isShowParameter = false;\r\n\r\n if (!template) return;\r\n\r\n const formStorage = this.getCampaignStorage?.generalInformation?.form;\r\n\r\n const buttonParamsArray = this.form.get('buttonParams') as FormArray;\r\n buttonParamsArray.clear();\r\n\r\n if (template && template.buttons && template.buttons.length > 0) {\r\n let qrIndexLocal = 0;\r\n\r\n template.buttons.forEach((btn: any, index: number) => {\r\n if (btn.type === 'QUICK_REPLY') {\r\n let existingPayload = '';\r\n\r\n // SKENARIO 1: Data dari Local State\r\n if (formStorage?.buttonParams && formStorage.buttonParams.length > 0) {\r\n existingPayload = formStorage.buttonParams[qrIndexLocal]?.payload || '';\r\n qrIndexLocal++;\r\n }\r\n // SKENARIO 2: Data dari BE\r\n else if (\r\n formStorage?.paramButton &&\r\n Array.isArray(formStorage.paramButton[index])\r\n ) {\r\n existingPayload = formStorage.paramButton[index][0] || '';\r\n }\r\n\r\n buttonParamsArray.push(\r\n new FormGroup({\r\n label: new FormControl(btn.text),\r\n payload: new FormControl(\r\n {\r\n value: existingPayload,\r\n disabled: this.isReadOnlyMode,\r\n },\r\n [Validators.maxLength(256)]\r\n ),\r\n })\r\n );\r\n }\r\n });\r\n }\r\n\r\n this.isHaveTemplateParam =\r\n (template.header?.examples?.length ?? 0) > 0 ||\r\n (template.body?.examples?.length ?? 0) > 0 ||\r\n (template.buttons?.length ?? 0) > 0 ||\r\n (template.carousel?.length ?? 0) > 0;\r\n\r\n if (['image', 'video', 'document'].includes(template?.header?.type?.toLowerCase())) {\r\n this.getControl('fileName')?.setValue(\r\n this.getCampaignStorage?.generalInformation?.form.fileName ??\r\n this.getCampaignStorage?.generalInformation?.form.targetURL ??\r\n template.header.url\r\n );\r\n this.getControl('targetURL')?.setValue(\r\n this.getCampaignStorage?.generalInformation?.form.targetURL ?? template.header.url\r\n );\r\n\r\n this.fileTypeChange(template?.header?.type?.toLowerCase());\r\n }\r\n\r\n (template.header.examples?.length ?? 0) > 0\r\n ? this.getControl('paramHeader')?.setValidators(Validators.required)\r\n : this.getControl('paramHeader')?.clearValidators();\r\n\r\n (template.body.examples?.length ?? 0) > 0\r\n ? this.getControl('paramBody')?.setValidators(Validators.required)\r\n : this.getControl('paramBody')?.clearValidators();\r\n\r\n (template.buttons?.length ?? 0) > 0\r\n ? this.getControl('paramButton')?.setValidators(Validators.required)\r\n : this.getControl('paramButton')?.clearValidators();\r\n\r\n (this.form.get('paramHeader') as FormArray).controls = [];\r\n (this.form.get('paramHeader') as FormArray).reset();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n (this.form.get('paramBody') as FormArray).controls = [];\r\n (this.form.get('paramBody') as FormArray).reset();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n (this.form.get('paramButton') as FormArray).controls = [];\r\n (this.form.get('paramButton') as FormArray).reset();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n this.getControl('otpValue')?.setValue('');\r\n this.getControl('otpValue')?.clearValidators();\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n\r\n if (template.category === 'AUTHENTICATION') {\r\n this.getControl('otpValue')?.setValue(\r\n formStorage?.otpValue ??\r\n [...(formStorage?.template?.body?.examples ?? [])]?.pop() ??\r\n ''\r\n );\r\n\r\n this.getControl('otpValue')?.setValidators(Validators.required);\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n }\r\n\r\n template.header.examples?.forEach((each, index) => {\r\n this.addParamHeader(\r\n formStorage?.paramHeader?.[index]?.name ?? formStorage?.paramHeader?.[index] ?? ''\r\n );\r\n });\r\n\r\n template.body.examples?.forEach((each, index) => {\r\n let paramValue =\r\n formStorage?.paramBody?.[index]?.name ?? formStorage?.paramBody?.[index] ?? '';\r\n\r\n if (['$UnsubscribeAccount'].includes(each)) paramValue = each;\r\n\r\n this.addParamBody(paramValue);\r\n });\r\n\r\n // ==========================================================\r\n // TAMBAHAN: Generate Variable Dinamis dari template.body.examples\r\n // ==========================================================\r\n this.variables.clear();\r\n if (template.body?.examples && template.body.examples.length > 0) {\r\n const isSavedTemplateMatches = formStorage?.template?.name === template.name;\r\n\r\n template.body.examples.forEach((exampleValue: string, index: number) => {\r\n let savedVariable = '';\r\n if (isSavedTemplateMatches) {\r\n savedVariable =\r\n formStorage?.variables?.[index]?.paramName ??\r\n formStorage?.template?.data?.[index];\r\n }\r\n\r\n const finalValue = savedVariable ? savedVariable : '';\r\n\r\n this.variables.push(\r\n new FormGroup({\r\n paramName: new FormControl({\r\n value: finalValue,\r\n disabled: this.isReadOnlyMode,\r\n }),\r\n })\r\n );\r\n });\r\n }\r\n\r\n if (template.body?.text) {\r\n this.getControl('text')?.setValue(template.body.text);\r\n this.getControl('text')?.updateValueAndValidity();\r\n }\r\n // ==========================================================\r\n\r\n // ==========================================================\r\n // TAMBAHAN: Generate Form Carousel Dinamis\r\n // ==========================================================\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n carouselArray.clear();\r\n\r\n const isUsingUpload = this.getControl('isUpload')?.value;\r\n const dynamicValidator = isUsingUpload ? null : Validators.required;\r\n\r\n if (template.carousel && template.carousel.length > 0) {\r\n const isSavedTemplateMatches = formStorage?.template?.name === template.name;\r\n\r\n // BUKAN formStorage?.template?.carousel, TAPI formStorage?.paramCarousel (tempat lu ngetik)\r\n const savedUserInputs = isSavedTemplateMatches ? formStorage?.paramCarousel : null;\r\n\r\n template.carousel.forEach((card: any, cardIdx: number) => {\r\n const cardGroup = new FormGroup({\r\n headerURL: new FormControl(card.header?.url ?? ''),\r\n bodyParams: new FormArray([]),\r\n buttonParams: new FormArray([]),\r\n });\r\n\r\n // 1. Setup Body Params\r\n if (card.body?.examples?.length > 0) {\r\n card.body.examples.forEach((_: any, bodyIdx: number) => {\r\n // AMBIL VALUE DARI INPUTAN SEBELUMNYA\r\n const savedBodyVal =\r\n savedUserInputs?.[cardIdx]?.bodyParams?.[bodyIdx]?.paramName ?? '';\r\n (cardGroup.get('bodyParams') as FormArray).push(\r\n new FormGroup({\r\n paramName: new FormControl(\r\n { value: savedBodyVal, disabled: this.isReadOnlyMode },\r\n dynamicValidator\r\n ),\r\n })\r\n );\r\n });\r\n }\r\n\r\n if (card.buttons?.length > 0) {\r\n card.buttons.forEach((btn: any, btnIdx: number) => {\r\n const btnParamArray = new FormArray([]);\r\n\r\n // SKENARIO 1: Button dengan variabel (contoh URL / Phone dengan {{1}})\r\n if (btn.examples?.length > 0) {\r\n btn.examples.forEach((_: any, paramIdx: number) => {\r\n const savedBtnVal =\r\n savedUserInputs?.[cardIdx]?.buttonParams?.[btnIdx]?.[paramIdx]\r\n ?.paramName ?? '';\r\n btnParamArray.push(\r\n new FormGroup({\r\n paramName: new FormControl(\r\n { value: savedBtnVal, disabled: this.isReadOnlyMode },\r\n dynamicValidator\r\n ),\r\n })\r\n );\r\n });\r\n }\r\n // SKENARIO 2: Button bertipe QUICK_REPLY (Butuh input Payload statis)\r\n else if (btn.type === 'QUICK_REPLY') {\r\n const savedPayloadVal =\r\n savedUserInputs?.[cardIdx]?.buttonParams?.[btnIdx]?.[0]?.payload ??\r\n '';\r\n\r\n btnParamArray.push(\r\n new FormGroup({\r\n payload: new FormControl(\r\n { value: savedPayloadVal, disabled: this.isReadOnlyMode },\r\n [\r\n Validators.maxLength(256),\r\n ...(isUsingUpload ? [] : [Validators.required]),\r\n ]\r\n ),\r\n })\r\n );\r\n }\r\n\r\n (cardGroup.get('buttonParams') as FormArray).push(btnParamArray);\r\n });\r\n }\r\n\r\n carouselArray.push(cardGroup);\r\n });\r\n }\r\n\r\n template.buttons?.forEach((each, index) => {\r\n this.addParamButton();\r\n const button = this.getButton;\r\n\r\n if (each.examples?.length > 0) {\r\n each.examples.forEach((_, paramIndex) => {\r\n let form = null;\r\n\r\n if (each.type === 'FLOW') {\r\n form = this.initParameter(false, each.flow_id);\r\n } else {\r\n this.isShowParameter = true;\r\n form = this.initParameter(\r\n false,\r\n formStorage?.paramButton?.[index]?.name?.[paramIndex]?.name ??\r\n formStorage?.paramButton?.[index]?.name?.[paramIndex] ??\r\n formStorage?.paramButton?.[index]?.[paramIndex] ??\r\n ''\r\n );\r\n }\r\n\r\n (button[button.length - 1].get('name') as FormArray).push(form);\r\n });\r\n } else {\r\n const lastControl = button[button.length - 1]?.get('name');\r\n lastControl?.clearValidators();\r\n lastControl?.updateValueAndValidity();\r\n }\r\n });\r\n\r\n const paramBodyArray = this.form.get('paramBody') as FormArray;\r\n\r\n paramBodyArray.clearValidators();\r\n paramBodyArray.controls.forEach((ctrl) => {\r\n ctrl.get('name')?.clearValidators();\r\n ctrl.get('name')?.updateValueAndValidity();\r\n });\r\n\r\n paramBodyArray.updateValueAndValidity();\r\n this.toggleExcelValidation(this.form.get('isUpload')?.value);\r\n }\r\n\r\n public updateMediaType(_mediaType: string): void {\r\n if (_mediaType === EnumData.MEDIA_TYPE_LOCATION) this.initMaps;\r\n\r\n this.formReset(true);\r\n this.fileTypeChange(_mediaType.toLowerCase());\r\n }\r\n\r\n private fileTypeChange(type: string): void {\r\n this.extFileAccepted = 'image/*';\r\n\r\n if (type === EnumData.MEDIA_TYPE_VIDEO.toLowerCase()) {\r\n this.extFileAccepted = 'video/*';\r\n } else if (type === EnumData.MEDIA_TYPE_DOCUMENT.toLowerCase()) {\r\n this.extFileAccepted = 'application/pdf';\r\n }\r\n }\r\n\r\n public updateSearch(searchValue: string): void {\r\n this.pageNoTemplateOption = 1;\r\n this.getTemplateOptionService(null, searchValue);\r\n }\r\n\r\n public updateSearchAccount(searchValue: string): void {\r\n this.pageNoAccountOption = 1;\r\n this.getAccountOptionService(searchValue);\r\n }\r\n\r\n private initMaps(): void {\r\n this.mapsAPILoader.load().then(() => {\r\n this.setCurrentLocation();\r\n\r\n this.geoCoder = new google.maps.Geocoder();\r\n const autocomplete = new google.maps.places.Autocomplete(\r\n this.mapSearchRef.nativeElement\r\n );\r\n autocomplete.addListener('place_changed', () => {\r\n this.ngZone.run(() => {\r\n const place: google.maps.places.PlaceResult = autocomplete.getPlace();\r\n\r\n if (!place.geometry) return;\r\n\r\n this.maps.latitude = place.geometry.location.lat();\r\n this.maps.longitude = place.geometry.location.lng();\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private setCurrentLocation() {\r\n if ('geolocation' in navigator) {\r\n navigator.geolocation.getCurrentPosition((position) => {\r\n if (!this.getControl('longitude')?.value && !this.getControl('latitude')?.value) {\r\n this.maps.latitude = position.coords.latitude;\r\n this.maps.longitude = position.coords.longitude;\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public markerDragEnd(event: google.maps.MouseEvent) {\r\n if (event.latLng) {\r\n this.maps.latitude = event.latLng.lat();\r\n this.maps.longitude = event.latLng.lng();\r\n this.getControl('latitude')?.setValue(this.maps.latitude);\r\n this.getControl('longitude')?.setValue(this.maps.longitude);\r\n }\r\n }\r\n\r\n public updateDownloadCSV(isChecked: boolean): void {\r\n this.getControl('isUpload')?.setValue(isChecked);\r\n\r\n if (isChecked) {\r\n (this.getControl('paramHeader') as FormArray).controls = [];\r\n (this.getControl('paramHeader') as FormArray).reset();\r\n (this.getControl('paramBody') as FormArray).controls = [];\r\n (this.getControl('paramBody') as FormArray).reset();\r\n (this.getControl('paramButton') as FormArray).controls = [];\r\n (this.getControl('paramButton') as FormArray).reset();\r\n this.getControl('paramHeader')?.clearValidators();\r\n this.getControl('paramBody')?.clearValidators();\r\n this.getControl('paramButton')?.clearValidators();\r\n this.getControl('paramHeader')?.updateValueAndValidity();\r\n this.getControl('paramBody')?.updateValueAndValidity();\r\n this.getControl('paramButton')?.updateValueAndValidity();\r\n this.getControl('otpValue')?.reset();\r\n this.getControl('otpValue')?.clearValidators();\r\n this.getControl('otpValue')?.updateValueAndValidity();\r\n this.variables.controls.forEach((ctrl) => {\r\n ctrl.get('paramName')?.clearValidators();\r\n ctrl.get('paramName')?.updateValueAndValidity();\r\n });\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n if (carouselArray) {\r\n carouselArray.controls.forEach((card: any) => {\r\n const bodyParams = card.get('bodyParams') as FormArray;\r\n bodyParams?.controls.forEach((bCtrl) => {\r\n bCtrl.get('paramName')?.clearValidators();\r\n bCtrl.get('paramName')?.updateValueAndValidity();\r\n });\r\n\r\n const btnParams = card.get('buttonParams') as FormArray;\r\n btnParams?.controls.forEach((btnGroup: any) => {\r\n (btnGroup as FormArray).controls.forEach((pBtnCtrl) => {\r\n pBtnCtrl.get('paramName')?.clearValidators();\r\n pBtnCtrl.get('paramName')?.updateValueAndValidity();\r\n pBtnCtrl.get('payload')?.clearValidators();\r\n pBtnCtrl.get('payload')?.updateValueAndValidity();\r\n });\r\n });\r\n });\r\n }\r\n return;\r\n }\r\n this.updateTemplate(this.getControl('template')?.value);\r\n }\r\n\r\n public handleChangeTemplate(useExisting: boolean): void {\r\n this.getControl('isDownloadVariableXLS')?.setValue(false);\r\n this.variables.clear();\r\n this.updateVariableDownloadXLS(false);\r\n this.getControl('text')?.setValue('');\r\n if (useExisting) {\r\n this.getControl('template')?.setValidators(Validators.required);\r\n this.getControl('text')?.clearValidators();\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n } else {\r\n this.getControl('template')?.reset();\r\n this.getControl('template')?.clearValidators();\r\n this.getControl('text')?.setValidators([Validators.required, Validators.max(1024)]);\r\n\r\n this.getControl('text')?.updateValueAndValidity();\r\n this.getControl('template')?.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public handleChangeFrom(value: any): void {\r\n const { isUseExistingTemplate } = this.form.value;\r\n if (!isUseExistingTemplate) return;\r\n this.getTemplateOptionService(value);\r\n }\r\n\r\n get variables(): FormArray {\r\n return this.getControl('variables') as FormArray;\r\n }\r\n\r\n addVariable(): void {\r\n const variableGroup = new FormGroup({\r\n paramName: new FormControl('', Validators.required),\r\n });\r\n\r\n this.variables.push(variableGroup);\r\n\r\n const textControl = this.getControl('text');\r\n\r\n if (textControl) {\r\n const currentBody = textControl.value || '';\r\n const newSequence = `{{${this.variables.controls.length}}}`;\r\n textControl.setValue(`${currentBody} ${newSequence}`.trim());\r\n }\r\n }\r\n\r\n removeVariable(index: number): void {\r\n this.variables.removeAt(index);\r\n\r\n if (this.variables.controls.length === 0) {\r\n this.getControl('useXlsx')?.setValue(false);\r\n }\r\n\r\n const textControl = this.getControl('text');\r\n\r\n if (textControl && textControl.value) {\r\n const targetSequence = index + 1;\r\n let currentBody = textControl.value;\r\n\r\n const removeRegex = new RegExp(`\\\\s*\\\\{\\\\{${targetSequence}\\\\}\\\\}`, 'g');\r\n currentBody = currentBody.replace(removeRegex, '');\r\n\r\n currentBody = currentBody.replace(/\\{\\{(\\d+)\\}\\}/g, (match: number, numStr: string) => {\r\n const num = parseInt(numStr, 10);\r\n if (num > targetSequence) {\r\n return `{{${num - 1}}}`;\r\n }\r\n return match;\r\n });\r\n\r\n textControl.setValue(currentBody.trim());\r\n }\r\n }\r\n\r\n updateVariableDownloadXLS(isChecked: boolean): void {\r\n const variablesArray = this.variables;\r\n if (isChecked) {\r\n variablesArray.controls.forEach((control) => {\r\n control.get('paramName')?.clearValidators();\r\n control.get('paramName')?.setValue('');\r\n control.get('paramName')?.updateValueAndValidity();\r\n });\r\n } else {\r\n variablesArray.controls.forEach((control) => {\r\n control.get('paramName')?.setValidators(Validators.required);\r\n control.get('paramName')?.updateValueAndValidity();\r\n });\r\n }\r\n\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n public toggleExcelValidation(isUpload: boolean): void {\r\n const currentValidator = isUpload ? null : Validators.required;\r\n\r\n // ====================================================\r\n // 2. UPDATE VALIDASI CAROUSEL VARIABLES\r\n // ====================================================\r\n const carouselArray = this.form.get('paramCarousel') as FormArray;\r\n if (carouselArray) {\r\n carouselArray.controls.forEach((card: any) => {\r\n const bodyParams = card.get('bodyParams') as FormArray;\r\n bodyParams?.controls.forEach((bCtrl: any) => {\r\n bCtrl.get('paramName')?.setValidators(currentValidator);\r\n bCtrl.get('paramName')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n const btnParams = card.get('buttonParams') as FormArray;\r\n btnParams?.controls.forEach((btnGroup: any) => {\r\n (btnGroup as FormArray).controls.forEach((pBtnCtrl: any) => {\r\n pBtnCtrl.get('paramName')?.setValidators(currentValidator);\r\n pBtnCtrl.get('paramName')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n });\r\n });\r\n\r\n carouselArray.updateValueAndValidity({ emitEvent: false });\r\n }\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n\tComponent,\r\n\tEventEmitter,\r\n\tInput,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOutput,\r\n} from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n\tFailoverMechanismValidationConst,\r\n\tPlatformOptionConst,\r\n\tisHaveNextOption,\r\n\tisLoadingOption,\r\n\toptionList,\r\n\tpageNoOption,\r\n} from '../../../../core/const';\r\nimport { intervalTimeValidator } from '../../../../core/const/form-validators';\r\nimport { Parameter } from '../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../core/services';\r\nimport { TemplateWAModel, WhatsAppAccountDto } from '../../../models';\r\n\r\n@Component({\r\n\tselector: 'lib-failover-mechanism',\r\n\ttemplateUrl: './failover-mechanism.component.html',\r\n\tstyleUrls: ['./failover-mechanism.component.scss'],\r\n})\r\nexport class FailoverMechanismComponent implements OnInit, OnDestroy {\r\n\t@Output()\r\n\tpublic failover: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic channelOption: any;\r\n\tpublic validationMessages: any;\r\n\tpublic isHaveNextTemplateOption = { ...isHaveNextOption };\r\n\tpublic isLoadingTemplateOption = { ...isLoadingOption };\r\n\tpublic templateOption = { ...optionList };\r\n\tpublic isLoadingAccountOption = { ...isLoadingOption };\r\n\tpublic isHaveNextAccountOption = { ...isHaveNextOption };\r\n\tpublic accountOption = { ...optionList };\r\n\r\n\tprivate subscribers: Subscription[] = [];\r\n\tprivate pageNoTemplateOption = { ...pageNoOption };\r\n\tprivate pageNoAccountOption = { ...pageNoOption };\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\tconstructor(private apiAdapterService: ApiAdapterServiceService) {\r\n\t\tthis.failover = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = FailoverMechanismValidationConst;\r\n\t\tthis.channelOption = [\r\n\t\t\t...PlatformOptionConst,\r\n\t\t\t/* {\r\n icon: '',\r\n inputSvgIcon: 'icon-voice-gray',\r\n image: 'line.png',\r\n label: 'Voice',\r\n value: 'VOICE',\r\n }, */\r\n\t\t].filter(\r\n\t\t\tt =>\r\n\t\t\t\t![\r\n\t\t\t\t\t'LINE',\r\n\t\t\t\t\tthis.getCampaignStorage?.generalInformation?.form?.medium,\r\n\t\t\t\t].includes(t.value)\r\n\t\t);\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initDisable();\r\n\t\tthis.initEdit();\r\n\t\tthis.failover.emit(this.form);\r\n\t}\r\n\r\n\tget getCampaignStorage(): any {\r\n\t\treturn localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\t}\r\n\r\n\tget interval() {\r\n\t\treturn this.form.get('interval');\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tactive: new FormControl(false, Validators.required),\r\n\t\t\ttype: new FormControl(''),\r\n\t\t\tinterval: new FormControl(null),\r\n\t\t\taccounts: new FormArray([]),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tif (this.interval.touched && this.interval.value === 0) {\r\n\t\t\t\tthis.form.get('interval').setErrors({ intervalTime: true });\r\n\t\t\t}\r\n\t\t\tthis.failover.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(): void {\r\n\t\tif (\r\n\t\t\tObject.entries(this.getCampaignStorage).length === 0 ||\r\n\t\t\t!this.getCampaignStorage?.failover\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tthis.form\r\n\t\t\t.get('active')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.active);\r\n\t\tthis.form\r\n\t\t\t.get('type')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.type ?? '');\r\n\t\tthis.form\r\n\t\t\t.get('interval')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.interval ?? null);\r\n\r\n\t\tthis.activeChange(this.getCampaignStorage?.failover?.active);\r\n\t\tthis.validationAccount();\r\n\t}\r\n\r\n\tprivate initAccount(data: any = null, _channel: any = null): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tchannel: new FormControl(_channel),\r\n\t\t\tplatform: new FormControl(_channel?.value),\r\n\t\t\taccountId: new FormControl(\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue:\r\n\t\t\t\t\t\tdata?.accountId && typeof data?.accountId === 'string'\r\n\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\tid: data?.accountId,\r\n\t\t\t\t\t\t\t\t\tname: data?.accountName,\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t: data?.accountId ?? '',\r\n\t\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t\t},\r\n\t\t\t\tValidators.required\r\n\t\t\t),\r\n\t\t\taccountName: new FormControl(data?.accountName ?? ''),\r\n\t\t\tsubject: new FormControl({\r\n\t\t\t\tvalue: data?.subject ?? '',\r\n\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t}),\r\n\t\t\ttemplate: new FormControl({\r\n\t\t\t\tvalue: data?.template ?? '',\r\n\t\t\t\tdisabled: this.isReadOnlyMode,\r\n\t\t\t}),\r\n\t\t\tparamBody: new FormArray([]),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tget getAccount(): FormGroup[] {\r\n\t\treturn (this.form.get('accounts') as FormArray).controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addAccount(data: any = null, channel: any = null): void {\r\n\t\tconst form = this.initAccount(data, channel);\r\n\t\t(this.form.get('accounts') as FormArray).push(form);\r\n\r\n\t\tthis.getAccountOptionService(channel?.value, data?.accountName ?? '');\r\n\t\tthis.getTemplateOptionService(channel?.value, {}, data?.template?.name);\r\n\t}\r\n\r\n\tprivate initParameter(): FormGroup {\r\n\t\tconst form = new FormGroup({\r\n\t\t\tname: new FormControl('', Validators.required),\r\n\t\t});\r\n\r\n\t\treturn form;\r\n\t}\r\n\r\n\tpublic getParamBody(account: FormGroup): FormGroup[] {\r\n\t\treturn (account.get('paramBody') as FormArray).controls as FormGroup[];\r\n\t}\r\n\r\n\tpublic addParamBody(account: FormGroup): void {\r\n\t\tconst form = this.initParameter();\r\n\t\t(account.get('paramBody') as FormArray).push(form);\r\n\t}\r\n\r\n\tpublic deleteParamBody(account: FormGroup, index: number): void {\r\n\t\t(account.get('paramBody') as FormArray).removeAt(index);\r\n\t}\r\n\r\n\tprivate initParam(_name: string, _value: any, _type: string): Parameter {\r\n\t\treturn {\r\n\t\t\tname: _name,\r\n\t\t\tvalue: _value,\r\n\t\t\tin: 'query',\r\n\t\t\ttype: _type,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate getAccountOptionService(\r\n\t\tplatform: string,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingAccountOption[platform] = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'pageNo',\r\n\t\t\t\tthis.pageNoAccountOption[platform],\r\n\t\t\t\t'number'\r\n\t\t\t),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('status', 'APPROVED', 'string'),\r\n\t\t\tthis.initParam('platform', platform, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t];\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/admin/account', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<WhatsAppAccountDto[]>) => {\r\n\t\t\t\tif (!resp.data) return;\r\n\r\n\t\t\t\tthis.accountOption[platform] = isInfinite\r\n\t\t\t\t\t? [...this.accountOption[platform], ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\r\n\t\t\t\tthis.isHaveNextAccountOption[platform] = resp.haveNext;\r\n\t\t\t\tthis.isLoadingAccountOption[platform] = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getTemplateOptionService(\r\n\t\tplatform: string,\r\n\t\taccount: any,\r\n\t\tfilter: string = '',\r\n\t\tisInfinite: boolean = false\r\n\t): void {\r\n\t\tthis.isLoadingTemplateOption[platform] = true;\r\n\r\n\t\tconst parameterList: Array<Parameter> = [\r\n\t\t\tthis.initParam(\r\n\t\t\t\t'pageNo',\r\n\t\t\t\tthis.pageNoTemplateOption[platform],\r\n\t\t\t\t'number'\r\n\t\t\t),\r\n\t\t\tthis.initParam('rowPerPage', 20, 'number'),\r\n\t\t\tthis.initParam('platform', platform, 'string'),\r\n\t\t\tthis.initParam('filter', filter, 'string'),\r\n\t\t\tthis.initParam('clientId', account?.clientId ?? '', 'string'),\r\n\t\t\tthis.initParam('wabaId', account?.wabaId ?? '', 'string'),\r\n\t\t];\r\n\r\n\t\tif (platform === 'WA')\r\n\t\t\tparameterList.push(this.initParam('status', 'APPROVED', 'string'));\r\n\r\n\t\tconst subs = this.apiAdapterService\r\n\t\t\t.executeApiRequest(parameterList, '/message/template', 'GET')\r\n\t\t\t.subscribe((resp: AppResponse<TemplateWAModel[]>) => {\r\n\t\t\t\tthis.templateOption[platform] = isInfinite\r\n\t\t\t\t\t? [...this.templateOption[platform], ...resp.data]\r\n\t\t\t\t\t: resp.data;\r\n\r\n\t\t\t\tthis.isHaveNextTemplateOption[platform] = resp.haveNext;\r\n\t\t\t\tthis.isLoadingTemplateOption[platform] = false;\r\n\t\t\t});\r\n\r\n\t\tthis.subscribers.push(subs);\r\n\t}\r\n\r\n\tpublic getNextAccountBatch(platform: string) {\r\n\t\tif (!this.isHaveNextAccountOption[platform]) return;\r\n\r\n\t\tthis.pageNoAccountOption[platform] += 1;\r\n\t\tthis.getAccountOptionService(platform, '', true);\r\n\t}\r\n\r\n\tpublic accountSelectedDisplay(\r\n\t\tattribute1: WhatsAppAccountDto,\r\n\t\tattribute2: WhatsAppAccountDto\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.id == attribute2.id\r\n\t\t\t? `${attribute1.name} (${attribute1.accountNo})`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic templateSelectedDisplay(\r\n\t\tattribute1: TemplateWAModel,\r\n\t\tattribute2: TemplateWAModel\r\n\t): string {\r\n\t\treturn attribute1 && attribute2 && attribute1.name == attribute2.name\r\n\t\t\t? `${attribute1.name}`\r\n\t\t\t: '';\r\n\t}\r\n\r\n\tpublic getNextTemplateBatch(platform: string, account: any) {\r\n\t\tif (!this.isHaveNextTemplateOption[platform]) return;\r\n\r\n\t\tthis.pageNoTemplateOption[platform] += 1;\r\n\t\tthis.getTemplateOptionService(platform, account, '', true);\r\n\t}\r\n\r\n\tpublic updateSearch(\r\n\t\tsearchValue: string,\r\n\t\tplatform: string,\r\n\t\taccount: any\r\n\t): void {\r\n\t\tthis.pageNoTemplateOption[platform] = 1;\r\n\t\tthis.getTemplateOptionService(platform, account, searchValue);\r\n\t}\r\n\r\n\tpublic updateSearchAccount(searchValue: string, platform: string): void {\r\n\t\tthis.pageNoAccountOption[platform] = 1;\r\n\t\tthis.getAccountOptionService(platform, searchValue);\r\n\t}\r\n\r\n\tpublic activeChange(_active: boolean): void {\r\n\t\tthis.form\r\n\t\t\t.get('type')\r\n\t\t\t.setValue(this.getCampaignStorage?.failover?.type ?? '');\r\n\t\tthis.form.get('type').setValidators(Validators.required);\r\n\t\tthis.form.get('type').updateValueAndValidity();\r\n\r\n\t\tif (_active) {\r\n\t\t\tconst accounts =\r\n\t\t\t\tthis.getCampaignStorage?.failover?.accounts?.filter(\r\n\t\t\t\t\t(t: any) =>\r\n\t\t\t\t\t\tt.platform !==\r\n\t\t\t\t\t\tthis.getCampaignStorage?.generalInformation?.form\r\n\t\t\t\t\t\t\t?.medium\r\n\t\t\t\t);\r\n\r\n\t\t\tif (accounts) {\r\n\t\t\t\taccounts.map(account =>\r\n\t\t\t\t\tthis.addAccount(\r\n\t\t\t\t\t\taccount,\r\n\t\t\t\t\t\tthis.channelOption.find(\r\n\t\t\t\t\t\t\t(t: any) => t.value === account.platform\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.channelOption\r\n\t\t\t\t\t.filter((t: any) => {\r\n\t\t\t\t\t\treturn !accounts.find((account: any) => {\r\n\t\t\t\t\t\t\treturn account.platform === t.value;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.map(channel => this.addAccount({}, channel));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.channelOption.map(channel => this.addAccount({}, channel));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('type').clearValidators();\r\n\t\tthis.form.get('type').updateValueAndValidity();\r\n\t\t(this.form.get('accounts') as FormArray).controls = [];\r\n\t\t(this.form.get('accounts') as FormArray).reset();\r\n\t\tthis.form.get('accounts').updateValueAndValidity();\r\n\r\n\t\tthis.typeChange('Status');\r\n\t}\r\n\r\n\tpublic typeChange(_type: string): void {\r\n\t\tif (_type === 'Time') {\r\n\t\t\tthis.form\r\n\t\t\t\t.get('interval')\r\n\t\t\t\t.setValue(this.getCampaignStorage?.failover?.interval ?? null);\r\n\t\t\tthis.form\r\n\t\t\t\t.get('interval')\r\n\t\t\t\t.setValidators([Validators.required, intervalTimeValidator()]);\r\n\t\t\tthis.form.get('interval').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('interval').clearValidators();\r\n\t\tthis.form.get('interval').updateValueAndValidity();\r\n\t}\r\n\r\n\tpublic validationAccount(\r\n\t\taccount: WhatsAppAccountDto = null,\r\n\t\taccountControl: FormGroup = null\r\n\t): void {\r\n\t\taccountControl\r\n\t\t\t?.get('accountName')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.accountOption[accountControl.get('platform').value].find(\r\n\t\t\t\t\tt => t.id === account?.id\r\n\t\t\t\t)?.name ?? ''\r\n\t\t\t);\r\n\r\n\t\tconst isChooseAccount = this.getAccount.filter(\r\n\t\t\tcontrol => control.get('accountId').value\r\n\t\t);\r\n\r\n\t\tthis.getAccount.forEach(control => {\r\n\t\t\tcontrol.get('accountId').setValidators(Validators.required);\r\n\t\t\tcontrol.get('subject').setValidators(Validators.required);\r\n\t\t\tcontrol.get('template').setValidators(Validators.required);\r\n\r\n\t\t\tif (\r\n\t\t\t\t!control.get('accountId').value &&\r\n\t\t\t\tisChooseAccount?.length > 0\r\n\t\t\t) {\r\n\t\t\t\tcontrol.get('accountId').clearValidators();\r\n\t\t\t\tcontrol.get('subject').setValue('');\r\n\t\t\t\tcontrol.get('subject').clearValidators();\r\n\t\t\t\tcontrol.get('template').setValue('');\r\n\t\t\t\tcontrol.get('template').clearValidators();\r\n\t\t\t} else if (\r\n\t\t\t\t['WA', 'SMS', 'VOICE'].includes(control.get('platform').value)\r\n\t\t\t) {\r\n\t\t\t\tcontrol.get('subject').clearValidators();\r\n\t\t\t}\r\n\r\n\t\t\tcontrol.get('accountId').updateValueAndValidity();\r\n\t\t\tcontrol.get('subject').updateValueAndValidity();\r\n\t\t\tcontrol.get('template').updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tif (accountControl)\r\n\t\t\tthis.getTemplateOptionService(\r\n\t\t\t\taccountControl.get('platform').value,\r\n\t\t\t\taccountControl.get('accountId').value\r\n\t\t\t);\r\n\t}\r\n\r\n\tpublic drop(event: CdkDragDrop<any[]>) {\r\n\t\tmoveItemInArray(\r\n\t\t\tthis.getAccount,\r\n\t\t\tevent.previousIndex,\r\n\t\t\tevent.currentIndex\r\n\t\t);\r\n\r\n\t\tthis.failover.emit(this.form);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscribers.forEach(each => each.unsubscribe());\r\n\t}\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport function duplicateValidator(\r\n compareArray: any[],\r\n compareProperty: string,\r\n originalValue?: any\r\n): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const inputValue = control.value ? String(control.value).trim() : '';\r\n\r\n if (!inputValue || (!!originalValue && String(originalValue) === inputValue)) {\r\n return null;\r\n }\r\n\r\n const isDuplicate = compareArray.some(\r\n (data) => inputValue === String(data[compareProperty]).trim()\r\n );\r\n\r\n return isDuplicate ? { duplicateValue: true } : null;\r\n };\r\n}\r\n\r\nexport function intervalTimeValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n const number = Number(control.value);\r\n\r\n if (Number.isNaN(number) || number % 1 !== 0 || number < 1) {\r\n return { intervalTime: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { SegmentedMessage } from 'sms-segments-calculator';\r\nimport {\r\n GeneralInformationMessageValidationConst,\r\n PlatformOptionConst,\r\n} from '../../../../core/const';\r\n\r\ninterface IMaps {\r\n zoom: number;\r\n latitude: number;\r\n longitude: number;\r\n isDraggable: boolean;\r\n isDoubleClickZoom: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-new-campaign-general-information',\r\n templateUrl: './general-information.component.html',\r\n styleUrls: ['./general-information.component.scss'],\r\n})\r\nexport class GeneralInformationComponent implements OnInit {\r\n @Output()\r\n public generalInformation: EventEmitter<{\r\n parent: FormGroup;\r\n child: FormGroup;\r\n }>;\r\n\r\n public form: FormGroup;\r\n public channelOption: any[];\r\n public generalInformationForm: FormGroup;\r\n public isTouchedWAForm: boolean = false;\r\n public isTouchedSMSForm: boolean = false;\r\n public isTouchedEmailForm: boolean = false;\r\n public isShowMore: boolean = false;\r\n public validationMessages: any;\r\n public maps: IMaps;\r\n public twilioResultCounter = {\r\n segments: 0,\r\n characters: 0,\r\n encoding: '',\r\n fulltext: `Encode - / Chars 0 / Segment 1`,\r\n };\r\n\r\n @Input() public isReadOnlyMode: boolean;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.generalInformation = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.channelOption = PlatformOptionConst;\r\n this.validationMessages = GeneralInformationMessageValidationConst;\r\n this.maps = {\r\n zoom: 15,\r\n latitude: null,\r\n longitude: null,\r\n isDraggable: true,\r\n isDoubleClickZoom: true,\r\n };\r\n\r\n this.initForm();\r\n this.initEdit();\r\n this.initDisable();\r\n }\r\n\r\n private initForm(): void {\r\n this.form = new FormGroup({\r\n id: new FormControl(null),\r\n campaignName: new FormControl(null, [Validators.required, Validators.maxLength(100)]),\r\n medium: new FormControl(null, [Validators.required]),\r\n });\r\n\r\n this.form.valueChanges.subscribe(() => {\r\n this.isTouchedWAForm = !this.isTouchedWAForm;\r\n this.isTouchedSMSForm = !this.isTouchedSMSForm;\r\n this.isTouchedEmailForm = !this.isTouchedEmailForm;\r\n\r\n this.generalInformation.emit({\r\n parent: this.form,\r\n child: this.generalInformationForm,\r\n });\r\n });\r\n setInterval(() => {\r\n this.onCheckTwilioCounter();\r\n }, 400);\r\n }\r\n\r\n private initEdit(): void {\r\n const campaign = localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n\r\n if (Object.entries(campaign).length === 0) return;\r\n\r\n this.form.get('id').setValue(campaign?.generalInformation?.id);\r\n this.form.get('campaignName').setValue(campaign?.generalInformation?.form.campaignName);\r\n this.form.get('medium').setValue(campaign?.generalInformation?.form.medium);\r\n }\r\n\r\n private initDisable(): void {\r\n if (!this.isReadOnlyMode) {\r\n return;\r\n }\r\n\r\n this.form.disable();\r\n }\r\n\r\n public updateGeneralInformationForm(form: FormGroup): void {\r\n this.generalInformationForm = form;\r\n this.isShowMore = false;\r\n\r\n this.generalInformation.emit({\r\n parent: this.form,\r\n child: this.generalInformationForm,\r\n });\r\n\r\n if (this.getMedia === 'LOCATION') this.getLocation();\r\n }\r\n\r\n get getHeader(): string {\r\n return this.generalInformationForm?.getRawValue()?.from?.name || '';\r\n }\r\n\r\n get getBodyString(): string {\r\n const body =\r\n this.generalInformationForm?.getRawValue()?.text ||\r\n this.generalInformationForm?.getRawValue()?.template?.body?.text ||\r\n this.generalInformationForm?.getRawValue()?.body?.text;\r\n\r\n return (\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n );\r\n }\r\n\r\n get getBody(): any {\r\n const body =\r\n this.generalInformationForm?.getRawValue()?.text ||\r\n this.generalInformationForm?.getRawValue()?.template?.body?.text ||\r\n this.generalInformationForm?.getRawValue()?.body?.text;\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.fixGeneratedHtml(\r\n body\r\n ?.split(/\\\\n|\\n/)\r\n .join('<br />')\r\n .split(/\\\\t|\\t/)\r\n .join(' ') ?? ''\r\n )\r\n );\r\n }\r\n\r\n get getMedia(): string {\r\n return this.generalInformationForm?.getRawValue()?.media || '';\r\n }\r\n\r\n get getTemplate(): any {\r\n return this.generalInformationForm?.getRawValue()?.template || {};\r\n }\r\n\r\n get getTemplateButton(): any {\r\n const limit =\r\n !this.isShowMore && this.getTemplate?.buttons?.length > 3\r\n ? 2\r\n : this.getTemplate?.buttons?.length;\r\n\r\n return [...this.getTemplate?.buttons].splice(0, limit) || [];\r\n }\r\n\r\n get displayFile(): string {\r\n return (\r\n (\r\n this.generalInformationForm?.getRawValue()?.targetURL ||\r\n this.generalInformationForm?.getRawValue()?.template?.header?.url\r\n )?.replace('adlsandbox.com', 'adlsandbox.net') ?? ''\r\n );\r\n }\r\n\r\n /* LINE */\r\n get isText(): boolean {\r\n return this.generalInformationForm?.getRawValue()?.channel === 'TEXT';\r\n }\r\n\r\n get isJSON(): boolean {\r\n return this.generalInformationForm?.getRawValue()?.isJSON;\r\n }\r\n\r\n get getTemplateLine(): any {\r\n return this.isJSON\r\n ? JSON.parse(this.generalInformationForm?.getRawValue()?.template?.body?.text)\r\n : this.generalInformationForm?.getRawValue()?.template?.body?.text;\r\n }\r\n /* ./ LINE */\r\n\r\n private getLocation(): void {\r\n this.maps.latitude = this.generalInformationForm?.getRawValue()?.latitude;\r\n this.maps.longitude = this.generalInformationForm?.getRawValue()?.longitude;\r\n }\r\n\r\n private fixGeneratedHtml(htmlString) {\r\n return htmlString\r\n .replaceAll(/div src=\"http/g, 'img src=\"http')\r\n .replaceAll(/div src=\"data:image/g, 'img src=\"data:image')\r\n .replaceAll(/Drag and drop your image here/g, '');\r\n }\r\n\r\n public onCheckTwilioCounter = (): void => {\r\n const valuesGeneral = this.generalInformationForm?.getRawValue();\r\n if (valuesGeneral?.channel === 'TEXT') {\r\n const segmentedMessage = new SegmentedMessage(this.getBodyString);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n this.twilioResultCounter = {\r\n ...result,\r\n fulltext: `Encode ${result.encoding} / Chars ${result.characters} / Segment ${result.segments}`,\r\n };\r\n } else {\r\n let valueResult = this.getBodyString;\r\n Array.from(valuesGeneral?.template?.body?.examples || []).map((entry, index) => {\r\n const placeholder = `{{${entry}}}`;\r\n const value = valuesGeneral.paramBody[index]?.name;\r\n valueResult = valueResult.split(placeholder).join(value);\r\n });\r\n\r\n const segmentedMessage = new SegmentedMessage(valueResult);\r\n const result = {\r\n segments: segmentedMessage.segmentsCount,\r\n encoding: segmentedMessage.encodingName,\r\n characters: segmentedMessage.numberOfUnicodeScalars,\r\n };\r\n\r\n this.twilioResultCounter = {\r\n ...result,\r\n fulltext: `Encode ${result.encoding} / Chars ${result.characters} / Segment ${result.segments}`,\r\n };\r\n }\r\n };\r\n}\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscription } from 'rxjs';\r\nimport { HttpBodyReqPaginationModel } from '../../../../core/models';\r\nimport { Parameter } from '../../../../core/models/util/api-adapter-service-models';\r\nimport { AppResponse } from '../../../../core/models/util/api-dto/response-models';\r\nimport { ApiAdapterServiceService } from '../../../../core/services';\r\nimport { downloadBlobFile } from '../../../../core/util';\r\nimport { ContactCategoryModel } from '../../../models';\r\nimport { TableModel } from '../../campaign-index/models';\r\n\r\n@Component({\r\n selector: 'lib-new-number-bases',\r\n templateUrl: './new-number-bases.component.html',\r\n styleUrls: ['./new-number-bases.component.scss'],\r\n})\r\nexport class NewNumberBasesComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public targetAudience: EventEmitter<{\r\n targetAudience: string[];\r\n numberCount: number;\r\n isUpload: boolean;\r\n file: any;\r\n }>;\r\n\r\n public table: TableModel;\r\n public isUpload: boolean = false;\r\n public isLoading: boolean = false;\r\n public isShowUploadCSV: boolean = false;\r\n public categorySelected: ContactCategoryModel[] = [];\r\n public selection = new SelectionModel<ContactCategoryModel>(true, []);\r\n public extFileAccepted: string[] = [\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n '.csv',\r\n ];\r\n public fileSelected: {\r\n name: string;\r\n targetURL: string;\r\n } = null;\r\n\r\n private categoryParam: HttpBodyReqPaginationModel;\r\n private subscribers: Subscription[] = [];\r\n\r\n @Input() public isReadOnlyMode: boolean;\r\n\r\n @ViewChild(MatSort) matSort: MatSort;\r\n\r\n constructor(\r\n private apiAdapterService: ApiAdapterServiceService,\r\n private toastr: ToastrService\r\n ) {\r\n this.targetAudience = new EventEmitter();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.categoryParam = new HttpBodyReqPaginationModel();\r\n\r\n this.initTable();\r\n this.getCategoryList();\r\n\r\n this.targetAudience.emit({\r\n targetAudience: [],\r\n numberCount: 0,\r\n isUpload: this.getCampaignStorage?.generalInformation?.form?.isUpload,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n private initTable(): void {\r\n this.table = new TableModel();\r\n this.table.labels = [\r\n 'select',\r\n 'Category',\r\n 'No. Of Customer',\r\n 'Created Date',\r\n 'Updated Date',\r\n ];\r\n this.table.columns = ['select', 'name', 'totalMembers', 'createdDate', 'updatedDate'];\r\n }\r\n\r\n get getCampaignStorage(): any {\r\n return localStorage.getItem('telin.campaign')\r\n ? JSON.parse(localStorage.getItem('telin.campaign'))\r\n : {};\r\n }\r\n\r\n private initEdit(): void {\r\n if (Object.entries(this.getCampaignStorage).length === 0) return;\r\n\r\n const genInfoForm = this.getCampaignStorage?.generalInformation?.form;\r\n this.isShowUploadCSV = genInfoForm?.isUpload || genInfoForm?.isDownloadVariableXLS;\r\n\r\n this.fileSelected = {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n };\r\n\r\n this.table.dataSource.data?.forEach((each) => {\r\n if (this.getCampaignStorage?.targetAudience?.includes(each.id))\r\n this.onChecked(true, each);\r\n });\r\n }\r\n\r\n private getCategoryList(filter: string = ''): void {\r\n this.isLoading = true;\r\n\r\n if (this.isReadOnlyMode) this.categoryParam.pageSize = 1000;\r\n\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('pageNo', this.categoryParam.pageNo, 'number'),\r\n this.initParam('rowPerPage', this.categoryParam.pageSize, 'number'),\r\n this.initParam('filter', filter, 'string'),\r\n this.initParam(\r\n 'platform',\r\n this.getCampaignStorage?.generalInformation?.form?.medium,\r\n 'string'\r\n ),\r\n ];\r\n\r\n if (this.getCampaignStorage?.generalInformation?.form?.medium === 'LINE')\r\n parameterList.push(\r\n this.initParam(\r\n 'accountId',\r\n this.getCampaignStorage?.generalInformation?.form?.from?.id,\r\n 'string'\r\n )\r\n );\r\n\r\n if (this.isReadOnlyMode) parameterList.push(this.initParam('summary', true, 'string'));\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/admin/category', 'GET')\r\n .subscribe((resp: AppResponse<ContactCategoryModel[]>) => {\r\n if (this.isReadOnlyMode) {\r\n this.table.dataSource.data = resp.data?.filter((each) =>\r\n this.getCampaignStorage?.targetAudience?.includes(each.id)\r\n );\r\n\r\n this.categorySelected = this.table.dataSource.data;\r\n this.isLoading = false;\r\n this.initEdit();\r\n return;\r\n }\r\n\r\n this.table.dataSource.data = resp.data;\r\n this.table.setNextPage(resp.haveNext);\r\n this.isLoading = false;\r\n this.initEdit();\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private initParam(_name: string, _value: any, _type: string): Parameter {\r\n return {\r\n name: _name,\r\n value: _value,\r\n in: 'query',\r\n type: _type,\r\n };\r\n }\r\n\r\n public updateSearch(searchValue: string): void {\r\n this.table.resetPage();\r\n this.categoryParam.pageNo = this.table.page;\r\n this.getCategoryList(searchValue);\r\n }\r\n\r\n public updatePage(event: any): void {\r\n if (this.table.pageSize !== event?.pageSize) this.table.resetPage();\r\n\r\n this.table.page =\r\n this.table.pageSize !== event?.pageSize ? this.table.page : event?.pageIndex + 1;\r\n this.table.pageSize = event?.pageSize;\r\n this.categoryParam.pageNo = this.table.page;\r\n this.categoryParam.pageSize = this.table.pageSize;\r\n\r\n this.getCategoryList();\r\n }\r\n\r\n public sort(): void {\r\n this.table.dataSource.sort = this.matSort;\r\n }\r\n\r\n public checkboxLabel(row?: ContactCategoryModel): string {\r\n if (!row) return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\r\n\r\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.name + 1}`;\r\n }\r\n\r\n public isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.table.dataSource.data?.length ?? 0;\r\n\r\n if (\r\n this.table.dataSource.data &&\r\n this.table.dataSource.data.length > 0 &&\r\n this.selection.selected &&\r\n this.selection.selected.length > 0\r\n ) {\r\n for (const data of this.table.dataSource.data) {\r\n if (this.selection.selected.filter((t) => t.id === data.id).length > 0) continue;\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return numSelected === numRows;\r\n }\r\n\r\n public masterToggle(isChecked: boolean) {\r\n if (!isChecked) {\r\n this.selection.clear();\r\n this.categorySelected = [];\r\n\r\n this.targetAudience.emit({\r\n targetAudience: [],\r\n numberCount: 0,\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.selection.select(...this.table.dataSource.data);\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n public onChecked(isChecked: boolean, row: ContactCategoryModel) {\r\n if (!isChecked) {\r\n this.selection.deselect(...this.selection.selected.filter((x) => x.id === row.id));\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.selection.select(row);\r\n this.categorySelected = this.selection.selected;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce((sum, x) => sum + x.totalMembers, 0),\r\n isUpload: this.isShowUploadCSV,\r\n file: {\r\n name: this.getCampaignStorage?.targetAudienceFile?.name,\r\n targetURL: this.getCampaignStorage?.targetAudienceFile?.targetURL,\r\n },\r\n });\r\n }\r\n\r\n public isChecked(row: ContactCategoryModel) {\r\n const found = this.selection.selected.find((x) => x.id === row.id);\r\n return found ? true : false;\r\n }\r\n\r\n public onDownloadSampleService(): void {\r\n const genInfoForm = this.getCampaignStorage?.generalInformation?.form;\r\n const isNeedSave = genInfoForm?.isNeedSave;\r\n\r\n // 1. Parameter Wajib (Selalu dikirim di semua skenario)\r\n const parameterList: Array<Parameter> = [\r\n this.initParam('platform', genInfoForm?.template?.platform || 'WA', 'string'),\r\n this.initParam(\r\n 'category',\r\n this.categorySelected?.map((t) => t.id).join() ?? '', // <-- Category selalu dikirim\r\n 'string'\r\n ),\r\n ];\r\n\r\n if (isNeedSave) {\r\n // SKENARIO 1: USE EXISTING / TEMPLATE SUDAH DISAVE\r\n parameterList.push(\r\n this.initParam('templateName', genInfoForm?.template?.name, 'string'),\r\n this.initParam('templateLang', genInfoForm?.template?.lang, 'string')\r\n );\r\n } else {\r\n // SKENARIO 2: CREATE NEW / DIRECT SEND (Belum di-save)\r\n\r\n // Cek aman: Kirim templateName & Lang HANYA kalau ada (biar nggak undefined)\r\n if (genInfoForm?.template?.name) {\r\n parameterList.push(\r\n this.initParam('templateName', genInfoForm?.template?.name, 'string')\r\n );\r\n }\r\n if (genInfoForm?.template?.lang) {\r\n parameterList.push(\r\n this.initParam('templateLang', genInfoForm?.template?.lang, 'string')\r\n );\r\n }\r\n\r\n // Variabel khusus Direct Send\r\n const safeBodyText = encodeURIComponent(genInfoForm?.text || '');\r\n parameterList.push(this.initParam('bodyText', safeBodyText, 'string'));\r\n\r\n if (genInfoForm?.template?.header?.text) {\r\n const safeHeaderText = encodeURIComponent(genInfoForm.template.header.text);\r\n parameterList.push(this.initParam('headerText', safeHeaderText, 'string'));\r\n }\r\n }\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/message/bulkupload/template', 'GET', true)\r\n .subscribe((resp: AppResponse<any>) => {\r\n downloadBlobFile(resp, 'Sample-UploadParameter.xlsx');\r\n });\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const file: FileList = (event.target as HTMLInputElement).files;\r\n const MAXIMUM_SIZE = 30 * 1024 * 1024;\r\n\r\n if (file.length === 0) return;\r\n\r\n if (file[0].size > MAXIMUM_SIZE) {\r\n this.toastr.error('Upload media failed, max size 30mb');\r\n return;\r\n }\r\n\r\n this.getPresignedUrlService(file[0]);\r\n }\r\n\r\n private getPresignedUrlService(file: File): void {\r\n this.isUpload = true;\r\n\r\n const parameterList: Array<Parameter> = [\r\n { name: 'fileName', value: file.name, in: 'query', type: 'string' },\r\n { name: 'fileType', value: file.type, in: 'query', type: 'string' },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, '/campaign/upload/pre-signed-url', 'GET')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (resp && resp.data) {\r\n this.uploadToS3Service(file, resp.data.url, resp.data.fileName);\r\n }\r\n },\r\n () => (this.isUpload = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n private uploadToS3Service(file: File, s3Url: string, fileNameS3: string): void {\r\n this.apiAdapterService.uploadFileToS3(s3Url, file).subscribe(\r\n () => {\r\n this.finalizeTargetFileService(fileNameS3);\r\n },\r\n (err) => {\r\n this.toastr.error('Failed uploading to S3 storage');\r\n this.isUpload = false;\r\n console.error('S3 Upload Error:', err);\r\n }\r\n );\r\n }\r\n\r\n private finalizeTargetFileService(fileNameS3: string): void {\r\n const campaignId = this.getCampaignStorage?.generalInformation?.id;\r\n const parameterList: Array<Parameter> = [\r\n {\r\n name: 'body',\r\n value: { fileName: fileNameS3 },\r\n in: 'body',\r\n type: 'object',\r\n withoutKeyData: true,\r\n },\r\n ];\r\n\r\n const subs = this.apiAdapterService\r\n .executeApiRequest(parameterList, `/campaign/${campaignId}/targetfile`, 'POST')\r\n .subscribe(\r\n (resp: AppResponse<any>) => {\r\n if (!resp) return;\r\n\r\n this.toastr.info('Upload XLSX has been uploaded successfully');\r\n this.isUpload = false;\r\n\r\n this.targetAudience.emit({\r\n targetAudience: this.categorySelected.map((t) => t.id),\r\n numberCount: this.categorySelected.reduce(\r\n (sum, x) => sum + x.totalMembers,\r\n 0\r\n ),\r\n isUpload: true,\r\n file: {\r\n name: fileNameS3,\r\n targetURL: resp.data?.targetURL || '',\r\n },\r\n });\r\n },\r\n () => (this.isUpload = false)\r\n );\r\n\r\n this.subscribers.push(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscribers.forEach((each) => each.unsubscribe());\r\n }\r\n}\r\n","export const downloadBlobFile = (blob: any, name: string = 'file.csv'): any => {\r\n\tconst blobUrl = URL.createObjectURL(blob);\r\n\r\n\tconst link = document.createElement('a');\r\n\r\n\tlink.href = blobUrl;\r\n\tlink.download = name;\r\n\r\n\tdocument.body.appendChild(link);\r\n\r\n\tlink.dispatchEvent(\r\n\t\tnew MouseEvent('click', {\r\n\t\t\tbubbles: true,\r\n\t\t\tcancelable: true,\r\n\t\t\tview: window,\r\n\t\t})\r\n\t);\r\n\r\n\tdocument.body.removeChild(link);\r\n};\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { SchedulerMessageValidationConst } from '../../../../core/const';\r\n\r\n@Component({\r\n\tselector: 'lib-new-campaign-scheduler',\r\n\ttemplateUrl: './scheduler.component.html',\r\n\tstyleUrls: ['./scheduler.component.scss'],\r\n})\r\nexport class SchedulerComponent implements OnInit {\r\n\t@Output()\r\n\tpublic scheduler: EventEmitter<FormGroup>;\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic minDate: Date;\r\n\tpublic validationMessages: any;\r\n\r\n\tprivate datePipe: DatePipe;\r\n\r\n\t@Input() public isReadOnlyMode: boolean;\r\n\r\n\tconstructor(private toastr: ToastrService) {\r\n\t\tthis.datePipe = new DatePipe('en-US');\r\n\t\tthis.scheduler = new EventEmitter();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.validationMessages = SchedulerMessageValidationConst;\r\n\t\tthis.minDate = new Date();\r\n\r\n\t\tthis.initForm();\r\n\t\tthis.initEdit();\r\n\t\tthis.initDisable();\r\n\t}\r\n\r\n\tprivate initForm(): void {\r\n\t\tthis.form = new FormGroup({\r\n\t\t\tschedulerType: new FormControl(null, Validators.required),\r\n\t\t\tstartDate: new FormControl(null),\r\n\t\t\tstartTime: new FormControl(null),\r\n\t\t\tisRepeat: new FormControl(false),\r\n\t\t\tdelivery: new FormControl(null),\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.subscribe(() => {\r\n\t\t\tthis.scheduler.emit(this.form);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate initDisable(): void {\r\n\t\tif (!this.isReadOnlyMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.disable();\r\n\t}\r\n\r\n\tprivate initEdit(isEdit: boolean = true): void {\r\n\t\tconst campaign = localStorage.getItem('telin.campaign')\r\n\t\t\t? JSON.parse(localStorage.getItem('telin.campaign'))\r\n\t\t\t: {};\r\n\r\n\t\tif (Object.entries(campaign).length === 0) return;\r\n\r\n\t\tif (isEdit)\r\n\t\t\tthis.form\r\n\t\t\t\t.get('schedulerType')\r\n\t\t\t\t.setValue(campaign?.scheduler?.schedulerType);\r\n\r\n\t\tthis.form.get('startDate').setValue(campaign?.scheduler?.startDate);\r\n\t\tthis.form.get('startTime').setValue(campaign?.scheduler?.startTime);\r\n\t\tthis.form.get('isRepeat').setValue(campaign?.scheduler?.isRepeat);\r\n\t\tthis.form\r\n\t\t\t.get('delivery')\r\n\t\t\t.setValue(\r\n\t\t\t\tthis.capitalizeFirstLetter(campaign?.scheduler?.delivery)\r\n\t\t\t);\r\n\t}\r\n\r\n\tprivate capitalizeFirstLetter(value: string): string {\r\n\t\tif (!value) return '';\r\n\r\n\t\treturn (\r\n\t\t\tvalue?.charAt(0).toUpperCase() + value?.slice(1).toLowerCase() ?? ''\r\n\t\t);\r\n\t}\r\n\r\n\tpublic updateSchedulerType(type: string): void {\r\n\t\tthis.form.get('schedulerType').setValue(type);\r\n\r\n\t\tif (this.form.get('schedulerType').value === 'NOW') {\r\n\t\t\tthis.form.get('startDate').setValue(null);\r\n\t\t\tthis.form.get('startDate').clearValidators();\r\n\t\t\tthis.form.get('startDate').updateValueAndValidity();\r\n\t\t\tthis.form.get('startTime').setValue(null);\r\n\t\t\tthis.form.get('startTime').clearValidators();\r\n\t\t\tthis.form.get('startTime').updateValueAndValidity();\r\n\t\t\tthis.form.get('delivery').setValue(null);\r\n\t\t\tthis.form.get('delivery').clearValidators();\r\n\t\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t\t\tthis.form.get('isRepeat').setValue(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('startDate').setValidators(Validators.required);\r\n\t\tthis.form.get('startDate').updateValueAndValidity();\r\n\t\tthis.form.get('startTime').setValidators(Validators.required);\r\n\t\tthis.form.get('startTime').updateValueAndValidity();\r\n\t\tthis.initEdit(false);\r\n\t}\r\n\r\n\tpublic updateTime(): void {\r\n\t\tif (!this.form.get('startDate').value) return;\r\n\r\n\t\tconst dateNow = new Date().getTime();\r\n\t\tconst startDate = new Date(\r\n\t\t\t`${this.datePipe.transform(\r\n\t\t\t\tthis.form.get('startDate').value,\r\n\t\t\t\t'yyyy-MM-dd'\r\n\t\t\t)} ${this.form.get('startTime').value}`\r\n\t\t).getTime();\r\n\r\n\t\tif (dateNow > startDate) {\r\n\t\t\tthis.form.get('startTime').setValue(null);\r\n\t\t\tthis.toastr.error('Selected time has been surpassed');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic updateRepeat(isChecked: boolean): void {\r\n\t\tif (isChecked) {\r\n\t\t\tthis.form.get('delivery').setValidators(Validators.required);\r\n\t\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.get('isRepeat').setValue(null);\r\n\t\tthis.form.get('delivery').setValue(null);\r\n\t\tthis.form.get('delivery').clearValidators();\r\n\t\tthis.form.get('delivery').updateValueAndValidity();\r\n\t}\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-new-campaign-summary',\r\n\ttemplateUrl: './summary.component.html',\r\n\tstyleUrls: ['./summary.component.scss'],\r\n})\r\nexport class SummaryComponent {\r\n\t@Input() public isShowLabel: boolean;\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'lib-wizard',\r\n\ttemplateUrl: './wizard.component.html',\r\n\tstyleUrls: ['./wizard.component.scss'],\r\n})\r\nexport class WizardComponent implements OnInit {\r\n\t@Input() positionWizard: number = 1;\r\n\t@Input() dataWizard: string[] = [];\r\n\r\n\tconstructor() {}\r\n\r\n\tngOnInit(): void {}\r\n}\r\n","import { AgmCoreModule } from '@agm/core';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { PickerModule } from '@ctrl/ngx-emoji-mart';\r\nimport { AngularEditorModule } from '@kolkov/angular-editor';\r\nimport { NgbDropdownModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport * as echarts from 'echarts';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { SearchModule } from '../global/search/search.module';\r\nimport { CampaignManagementComponent } from './campaign-management.component';\r\nimport { InputNumericModule } from './components/input-numeric/input-numeric.module';\r\nimport { CampaignIndexModule } from './modules/campaign-index/campaign-index.module';\r\nimport { PendingApprovalDialogViewComponent } from './modules/campaign-index/dialog/pending-approval-dialog-view';\r\nimport { DashboardModule } from './modules/dashboard/dashboard.module';\r\nimport { NewCampaignComponent } from './modules/new-campaign';\r\nimport { GeneralInformationEmailComponent } from './modules/new-campaign/components/general-information-email';\r\nimport { GeneralInformationLineComponent } from './modules/new-campaign/components/general-information-line';\r\nimport { GeneralInformationSMSComponent } from './modules/new-campaign/components/general-information-sms';\r\nimport { GeneralInformationWAComponent } from './modules/new-campaign/components/general-information-wa';\r\nimport { FailoverMechanismComponent } from './modules/new-campaign/failover-mechanism';\r\nimport { GeneralInformationComponent } from './modules/new-campaign/general-information';\r\nimport { NewNumberBasesComponent } from './modules/new-campaign/new-number-bases';\r\nimport { SchedulerComponent } from './modules/new-campaign/scheduler';\r\nimport { SummaryComponent } from './modules/new-campaign/summary';\r\nimport { WizardComponent } from './modules/wizard';\r\n\r\n@NgModule({\r\n declarations: [\r\n CampaignManagementComponent,\r\n WizardComponent,\r\n NewCampaignComponent,\r\n GeneralInformationComponent,\r\n SchedulerComponent,\r\n SummaryComponent,\r\n NewNumberBasesComponent,\r\n GeneralInformationLineComponent,\r\n GeneralInformationWAComponent,\r\n GeneralInformationSMSComponent,\r\n GeneralInformationEmailComponent,\r\n PendingApprovalDialogViewComponent,\r\n FailoverMechanismComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n AgmCoreModule.forRoot({\r\n apiKey: 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n libraries: ['places'],\r\n }),\r\n DashboardModule,\r\n MatAutocompleteModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatRadioModule,\r\n MatListModule,\r\n MatButtonModule,\r\n NgxEchartsModule.forRoot({\r\n echarts,\r\n }),\r\n MatIconModule,\r\n PickerModule,\r\n AngularEditorModule,\r\n MatDialogModule,\r\n MatTabsModule,\r\n MatBadgeModule,\r\n NgbDropdownModule,\r\n NgbPaginationModule,\r\n MatCardModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatPaginatorModule,\r\n MatGridListModule,\r\n MatDatepickerModule,\r\n MatSortModule,\r\n SearchModule,\r\n MatDividerModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule,\r\n DragDropModule,\r\n CampaignIndexModule,\r\n InputNumericModule,\r\n ],\r\n exports: [CampaignManagementComponent, SummaryComponent],\r\n entryComponents: [PendingApprovalDialogViewComponent],\r\n providers: [DatePipe],\r\n})\r\nexport class CampaignManagementModule {}\r\n","import { AgmCoreModule } from '@agm/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { AdlCampaignManagementLibraryInternalComponent } from './adl-campaign-management-library-internal.component';\r\nimport { CampaignManagementModule } from './campaign-management/campaign-management.module';\r\nimport { CustomPaginator } from './core/util';\r\n\r\n@NgModule({\r\n\tdeclarations: [AdlCampaignManagementLibraryInternalComponent],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tAgmCoreModule.forRoot({\r\n\t\t\tapiKey: 'AIzaSyCHReBe_RpzAgLTrUC5QIDyeKttQ817wRY',\r\n\t\t\tlibraries: ['places'],\r\n\t\t}),\r\n\t\tCampaignManagementModule,\r\n\t\tNgxEchartsModule,\r\n\t\tMatCardModule,\r\n\t\tHttpClientModule,\r\n\t\tToastrModule.forRoot(),\r\n\t],\r\n\texports: [AdlCampaignManagementLibraryInternalComponent],\r\n\tproviders: [{ provide: MatPaginatorIntl, useClass: CustomPaginator }],\r\n})\r\nexport class AdlCampaignManagementLibraryInternalModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ConfirmationComponent } from './confirmation';\r\n\r\n@NgModule({\r\n\tdeclarations: [ConfirmationComponent],\r\n\timports: [CommonModule, MatDialogModule, MatButtonModule],\r\n\texports: [ConfirmationComponent]\r\n})\r\nexport class ConfirmationModule {}\r\n"]}