@posiwise/resource-contact-us 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/esm2022/index.mjs +4 -0
- package/esm2022/lib/shared/resource-modal.interface.mjs +2 -0
- package/esm2022/posiwise-resource-contact-us.mjs +5 -0
- package/esm2022/resource-contact-us/resource-contact-us.component.mjs +512 -0
- package/esm2022/resource-contact-us/resource-contact-us.module.mjs +77 -0
- package/fesm2022/posiwise-resource-contact-us.mjs +585 -0
- package/fesm2022/posiwise-resource-contact-us.mjs.map +1 -0
- package/index.d.ts +3 -0
- package/lib/shared/resource-modal.interface.d.ts +6 -0
- package/package.json +25 -0
- package/resource-contact-us/resource-contact-us.component.d.ts +126 -0
- package/resource-contact-us/resource-contact-us.module.d.ts +23 -0
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import * as i9 from '@angular/cdk/drag-drop';
|
|
2
|
+
import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
|
|
3
|
+
import * as i7 from '@angular/common';
|
|
4
|
+
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
5
|
+
import * as i0 from '@angular/core';
|
|
6
|
+
import { Component, ChangeDetectionStrategy, Inject, ViewChild, Input, NgModule } from '@angular/core';
|
|
7
|
+
import * as i1 from '@angular/forms';
|
|
8
|
+
import { Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
9
|
+
import * as i4 from '@angular/platform-browser';
|
|
10
|
+
import * as i5 from '@posiwise/admin-module-utils';
|
|
11
|
+
import { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';
|
|
12
|
+
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
13
|
+
import * as i2 from '@posiwise/common-services';
|
|
14
|
+
import { ValidationService } from '@posiwise/common-services';
|
|
15
|
+
import { HelperService } from '@posiwise/helper-service';
|
|
16
|
+
import * as i13 from '@posiwise/utils';
|
|
17
|
+
import { FieldErrorDisplayModule, ProfileImageCropperModule } from '@posiwise/utils';
|
|
18
|
+
import * as i3 from '@posiwise/smart-crm-shared';
|
|
19
|
+
import { StatusCodes } from 'http-status-codes';
|
|
20
|
+
import Swal from 'sweetalert2';
|
|
21
|
+
import * as i6 from '@ng-bootstrap/ng-bootstrap';
|
|
22
|
+
import { NgbModalModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
|
|
23
|
+
import * as i8 from '@angular/router';
|
|
24
|
+
import { RouterModule } from '@angular/router';
|
|
25
|
+
import * as i10 from '@posiwise/directives';
|
|
26
|
+
import { DirectivesModule } from '@posiwise/directives';
|
|
27
|
+
import * as i11 from 'ngx-captcha';
|
|
28
|
+
import { NgxCaptchaModule } from 'ngx-captcha';
|
|
29
|
+
import * as i12 from 'primeng/dropdown';
|
|
30
|
+
import { DropdownModule } from 'primeng/dropdown';
|
|
31
|
+
import * as i14 from '@jsverse/transloco';
|
|
32
|
+
import { CoreTranslocoModule } from '@posiwise/core-transloco';
|
|
33
|
+
import { PipesModule } from '@posiwise/pipes';
|
|
34
|
+
|
|
35
|
+
class Trial4ContactUsComponent extends AppBaseComponent {
|
|
36
|
+
openQuestionsEditModal() {
|
|
37
|
+
this.editingQuestions = JSON.parse(JSON.stringify(this.editingQuestions ?? []));
|
|
38
|
+
this.modalService.open(this.questionsEditModal, { centered: true, size: 'lg' });
|
|
39
|
+
}
|
|
40
|
+
constructor(fb, authService, crmService, sanitizer, adminService, injector, abTestService, modalService, cdr, document) {
|
|
41
|
+
super(injector);
|
|
42
|
+
this.fb = fb;
|
|
43
|
+
this.authService = authService;
|
|
44
|
+
this.crmService = crmService;
|
|
45
|
+
this.sanitizer = sanitizer;
|
|
46
|
+
this.adminService = adminService;
|
|
47
|
+
this.abTestService = abTestService;
|
|
48
|
+
this.modalService = modalService;
|
|
49
|
+
this.cdr = cdr;
|
|
50
|
+
this.document = document;
|
|
51
|
+
this.editingQuestions = [];
|
|
52
|
+
this.isFooterVisible = false;
|
|
53
|
+
this.recaptcha = null;
|
|
54
|
+
this.subscriptionId = this.appConfig.crm.subscription_id;
|
|
55
|
+
this.sourceId = this.appConfig.crm.source_id;
|
|
56
|
+
this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
|
|
57
|
+
this.canEditResourcesValue = false;
|
|
58
|
+
this.logo = this.appConfig?.company?.logos?.main_contrast?.url;
|
|
59
|
+
this.trialBgImage2 = this.appConfig?.signup_config.trial?.image_bg2?.url;
|
|
60
|
+
this.tosId = this.appConfig?.main_tos_id;
|
|
61
|
+
this.description = this.appConfig.company.description;
|
|
62
|
+
this.email = this.appConfig.company.email;
|
|
63
|
+
this.companyName = this.appConfig.company.name;
|
|
64
|
+
this.street = this.appConfig.company.street;
|
|
65
|
+
this.questions = this.appConfig?.pages_config?.contact_us?.questions;
|
|
66
|
+
this.hubspot = this.appConfig?.pages_config?.contact_us?.hubspot;
|
|
67
|
+
this.footerLinks = this.appConfig?.pages_config?.footer_links?.items;
|
|
68
|
+
this.footerLinksData = this.appConfig?.pages_config?.footer_links;
|
|
69
|
+
this.youtubeUrl = this.appConfig.social?.youtube_url;
|
|
70
|
+
this.linkedInUrl = this.appConfig.social?.linkedin_url;
|
|
71
|
+
this.domainId = this.appConfig.domain_id;
|
|
72
|
+
this.editingEmail = this.email;
|
|
73
|
+
this.isEditingEmail = false;
|
|
74
|
+
this.submitted = false;
|
|
75
|
+
this.isCaptchaVerified = false;
|
|
76
|
+
this.isEmailValid = true;
|
|
77
|
+
this.isEditingStreet = false;
|
|
78
|
+
this.editingFooterLinks = {
|
|
79
|
+
items: []
|
|
80
|
+
};
|
|
81
|
+
this.captchaKeyV2 = this.appConfig.integrations.captcha_key_V2;
|
|
82
|
+
this.contactUsForm();
|
|
83
|
+
}
|
|
84
|
+
ngOnInit() {
|
|
85
|
+
setTimeout(() => (this.isHubspotReady = true), 2000);
|
|
86
|
+
if (this.userLoggedIn) {
|
|
87
|
+
this.localStorage.getItem$('product').subscribe(res => {
|
|
88
|
+
const data = res ? JSON.parse(res) : null;
|
|
89
|
+
this.id = data?.subscriptionId;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
this.previewData = {
|
|
93
|
+
url: this.logo,
|
|
94
|
+
name: 'logo_main_contrast.png'
|
|
95
|
+
};
|
|
96
|
+
this.editingStreet = this.street;
|
|
97
|
+
if (Array.isArray(this.appConfig.pages_config?.ab_tests)) {
|
|
98
|
+
this.abTests = this.appConfig.pages_config.ab_tests.find(test => test.description === 'contact-us');
|
|
99
|
+
this.microserviceName = this.abTests?.microservice_name;
|
|
100
|
+
this.experimentName = this.abTests?.experiment_name;
|
|
101
|
+
this.shardName = this.abTests?.db_shard;
|
|
102
|
+
}
|
|
103
|
+
const footerItem = this.getFooterHubspotForm();
|
|
104
|
+
if (footerItem?.div) {
|
|
105
|
+
// NOSONAR: Trusted HTML content is handled safely here
|
|
106
|
+
this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(footerItem.div); // NOSONAR
|
|
107
|
+
}
|
|
108
|
+
this.editingQuestions = this.questions;
|
|
109
|
+
this.question = this.questions?.[0]?.question;
|
|
110
|
+
this.psaOptions = [
|
|
111
|
+
{ label: 'Select PSA', value: '' },
|
|
112
|
+
...(this.questions?.[0]?.options ?? [])
|
|
113
|
+
.filter(q => q.option?.trim())
|
|
114
|
+
.map(q => ({
|
|
115
|
+
label: q.option,
|
|
116
|
+
value: q.option
|
|
117
|
+
}))
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
ngOnChanges(changes) {
|
|
121
|
+
if (changes['user'] || changes['userLoggedIn']) {
|
|
122
|
+
if (this.userLoggedIn && this.user) {
|
|
123
|
+
this.updateCanEditResourcesValue();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
openLogoEditModal() {
|
|
128
|
+
this.modalService.open(this.logoModal, {
|
|
129
|
+
centered: true,
|
|
130
|
+
size: 'md'
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
onSaveFile(event) {
|
|
134
|
+
const formData = new FormData();
|
|
135
|
+
const data = { subscription_id: this.subscriptionId };
|
|
136
|
+
if (event.file instanceof File) {
|
|
137
|
+
data[event.name] = event.file;
|
|
138
|
+
}
|
|
139
|
+
else if (event.file === null) {
|
|
140
|
+
data[`remove_${event.name}`] = true;
|
|
141
|
+
}
|
|
142
|
+
for (const key in data) {
|
|
143
|
+
formData.append(key, data[key]);
|
|
144
|
+
}
|
|
145
|
+
this.adminService.updateDomainConfig(this.domainId, formData).subscribe(() => {
|
|
146
|
+
if (event.file) {
|
|
147
|
+
this.logo = URL.createObjectURL(event.file);
|
|
148
|
+
this.modalService.dismissAll();
|
|
149
|
+
}
|
|
150
|
+
this.toast.success(event.file ? 'Logo updated' : 'Logo removed');
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
saveQuestions(modal) {
|
|
154
|
+
const updateData = {
|
|
155
|
+
contact_us: {
|
|
156
|
+
...this.appConfig.pages_config?.contact_us,
|
|
157
|
+
questions: this.editingQuestions
|
|
158
|
+
},
|
|
159
|
+
subscription_id: this.id
|
|
160
|
+
};
|
|
161
|
+
this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {
|
|
162
|
+
this.questions = this.editingQuestions;
|
|
163
|
+
this.toast.success('Questions updated');
|
|
164
|
+
this.question = this.editingQuestions?.[0]?.question;
|
|
165
|
+
if (this.editingQuestions?.[0]?.options?.length > 0) {
|
|
166
|
+
this.psaOptions = [
|
|
167
|
+
{ label: 'Select PSA', value: '' },
|
|
168
|
+
...(this.questions?.[0]?.options ?? [])
|
|
169
|
+
.filter(q => q.option?.trim())
|
|
170
|
+
.map(q => ({
|
|
171
|
+
label: q.option,
|
|
172
|
+
value: q.option
|
|
173
|
+
}))
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.psaOptions = [];
|
|
178
|
+
}
|
|
179
|
+
modal.close();
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
addNewQuestion() {
|
|
183
|
+
this.editingQuestions.push({ question: '', options: [] });
|
|
184
|
+
}
|
|
185
|
+
addQuestionOption(qIndex) {
|
|
186
|
+
this.editingQuestions[qIndex].options.push({ option: '' });
|
|
187
|
+
}
|
|
188
|
+
removeQuestionOption(qIndex, optIndex) {
|
|
189
|
+
this.editingQuestions[qIndex].options.splice(optIndex, 1);
|
|
190
|
+
}
|
|
191
|
+
dropQuestions(event) {
|
|
192
|
+
moveItemInArray(this.editingQuestions, event.previousIndex, event.currentIndex);
|
|
193
|
+
}
|
|
194
|
+
dropQuestionOptions(qIndex, event) {
|
|
195
|
+
moveItemInArray(this.editingQuestions[qIndex].options, event.previousIndex, event.currentIndex);
|
|
196
|
+
}
|
|
197
|
+
openSocialEditModal() {
|
|
198
|
+
this.editingYoutubeUrl = this.youtubeUrl;
|
|
199
|
+
this.editingLinkedInUrl = this.linkedInUrl;
|
|
200
|
+
this.editingCompanyName = this.companyName;
|
|
201
|
+
this.modalService.open(this.socialEditModal, { centered: true, size: 'lg' });
|
|
202
|
+
}
|
|
203
|
+
saveSocialLinks(modal) {
|
|
204
|
+
const updateData = {
|
|
205
|
+
youtube_url: this.editingYoutubeUrl,
|
|
206
|
+
linkedin_url: this.editingLinkedInUrl,
|
|
207
|
+
company_name: this.editingCompanyName,
|
|
208
|
+
subscription_id: this.id
|
|
209
|
+
};
|
|
210
|
+
this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {
|
|
211
|
+
this.youtubeUrl = this.editingYoutubeUrl;
|
|
212
|
+
this.linkedInUrl = this.editingLinkedInUrl;
|
|
213
|
+
this.companyName = this.editingCompanyName;
|
|
214
|
+
this.toast.success('Social links and company name updated');
|
|
215
|
+
modal.close();
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
hasValidOptions() {
|
|
219
|
+
return this.questions?.[0]?.options?.some(opt => opt.option?.trim());
|
|
220
|
+
}
|
|
221
|
+
ngAfterViewInit() {
|
|
222
|
+
this.watchIframeHeightChange();
|
|
223
|
+
this.observer = new IntersectionObserver(([entry]) => {
|
|
224
|
+
if (entry.isIntersecting) {
|
|
225
|
+
this.isFooterVisible = true;
|
|
226
|
+
this.cdr.detectChanges();
|
|
227
|
+
this.observer?.disconnect();
|
|
228
|
+
}
|
|
229
|
+
}, { threshold: 0.1 });
|
|
230
|
+
this.observer.observe(this.footerSection.nativeElement);
|
|
231
|
+
}
|
|
232
|
+
openEditFooterLinksModal(content) {
|
|
233
|
+
this.footerLinksData = this.footerLinksData ?? {};
|
|
234
|
+
this.footerLinksData.items = this.footerLinksData.items ?? [];
|
|
235
|
+
this.editingFooterLinks = JSON.parse(JSON.stringify(this.footerLinksData));
|
|
236
|
+
this.modalService.open(content, {
|
|
237
|
+
size: 'lg',
|
|
238
|
+
centered: true,
|
|
239
|
+
windowClass: 'modal-holder'
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
watchIframeHeightChange() {
|
|
243
|
+
const iframe = this.document.querySelector('.hubspot-container');
|
|
244
|
+
if (!iframe)
|
|
245
|
+
return;
|
|
246
|
+
const interval = setInterval(() => {
|
|
247
|
+
const newHeight = iframe['offsetHeight'];
|
|
248
|
+
if (newHeight === 250) {
|
|
249
|
+
clearInterval(interval);
|
|
250
|
+
this.callAbTestFinish();
|
|
251
|
+
}
|
|
252
|
+
}, 300);
|
|
253
|
+
}
|
|
254
|
+
// New method to handle Hubspot content loading
|
|
255
|
+
onHubspotLoad(event) {
|
|
256
|
+
const container = event.target;
|
|
257
|
+
container.classList.add('content-loaded');
|
|
258
|
+
// Optional: Trigger layout recalculation
|
|
259
|
+
setTimeout(() => {
|
|
260
|
+
window.dispatchEvent(new Event('resize'));
|
|
261
|
+
}, 100);
|
|
262
|
+
}
|
|
263
|
+
callAbTestFinish() {
|
|
264
|
+
if (this.experimentName && this.microserviceName) {
|
|
265
|
+
this.abTestService
|
|
266
|
+
.finishABExperiment(this.experimentName, this.microserviceName)
|
|
267
|
+
.subscribe(() => {
|
|
268
|
+
this.modalService.open(this.content, {
|
|
269
|
+
centered: true,
|
|
270
|
+
windowClass: 'modal-holder'
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
contactUsForm() {
|
|
276
|
+
this.form = this.fb.group({
|
|
277
|
+
first_name: ['', Validators.required],
|
|
278
|
+
last_name: [''],
|
|
279
|
+
company: [''],
|
|
280
|
+
psa: [''],
|
|
281
|
+
enquiry: ['', Validators.required],
|
|
282
|
+
email: ['', Validators.required]
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
onSubmit() {
|
|
286
|
+
this.submitted = true;
|
|
287
|
+
if (this.form.valid) {
|
|
288
|
+
this.isCaptchaVerified = true;
|
|
289
|
+
this.submitted = false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
handleSuccess(token) {
|
|
293
|
+
if (token) {
|
|
294
|
+
this.authService.validateReCaptcha(token).subscribe((isSuccess) => {
|
|
295
|
+
if (isSuccess && this.form.valid) {
|
|
296
|
+
const data = { ...this.form.getRawValue() };
|
|
297
|
+
const formattedEnquiry = `${data.enquiry}; Question: ${this.question}; Answer: ${data.psa}`;
|
|
298
|
+
const postData = {
|
|
299
|
+
first_name: `${data.first_name}`,
|
|
300
|
+
last_name: `${data.first_name}`,
|
|
301
|
+
company: `${data.first_name}`,
|
|
302
|
+
email: `${data.email}`,
|
|
303
|
+
enquiry: this.psaOptions.length ? formattedEnquiry : `${data.enquiry}`,
|
|
304
|
+
psa: data.psa,
|
|
305
|
+
subscription_id: this.subscriptionId,
|
|
306
|
+
crm_source_id: this.sourceId,
|
|
307
|
+
master_subscription_id: this.masterSubscriptionId,
|
|
308
|
+
notify_user: false,
|
|
309
|
+
is_manual: false
|
|
310
|
+
};
|
|
311
|
+
this.crmService.postCrmLead(this.subscriptionId, postData).subscribe(resp => {
|
|
312
|
+
// example of snippet to close the experiment and track in GA
|
|
313
|
+
if (resp?.status === StatusCodes.OK) {
|
|
314
|
+
this.googleAnalyticsService.sendEvent('new-lead-registration', // category, eg: videos
|
|
315
|
+
'subscribe-success', // action, eg: Play
|
|
316
|
+
'coming-soon-three', // label, eg: Chappy
|
|
317
|
+
1 // value, eg: 10
|
|
318
|
+
);
|
|
319
|
+
if (this.experimentName && this.microserviceName) {
|
|
320
|
+
this.abTestService
|
|
321
|
+
.finishABExperiment(this.experimentName, this.microserviceName)
|
|
322
|
+
.subscribe(() => {
|
|
323
|
+
this.modalService.open(this.content, {
|
|
324
|
+
centered: true,
|
|
325
|
+
windowClass: 'modal-holder'
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
Swal.fire(resp.message);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
this.form.reset();
|
|
334
|
+
this.isCaptchaVerified = false;
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
scrollToTop() {
|
|
341
|
+
this.document.documentElement.scrollTop = 0;
|
|
342
|
+
}
|
|
343
|
+
getFooterHubspotForm() {
|
|
344
|
+
if (!this.hubspot?.length) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
return this.hubspot.find(item => item.position === 'footer') ?? null;
|
|
348
|
+
}
|
|
349
|
+
navigateToBookMeeting() {
|
|
350
|
+
const bookDemoUrl = this.appConfig?.signup_config?.trial?.book_demo_url ??
|
|
351
|
+
'https://calendly.com/cloudolive';
|
|
352
|
+
window.open(bookDemoUrl, '_blank', 'noreferrer noopener');
|
|
353
|
+
}
|
|
354
|
+
validateEmail() {
|
|
355
|
+
const email = this.form.get('email').value;
|
|
356
|
+
if (email) {
|
|
357
|
+
this.isEmailValid = ValidationService.email(email);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
this.isEmailValid = true;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
addFooterLink() {
|
|
364
|
+
this.editingFooterLinks.items.push({
|
|
365
|
+
title: '',
|
|
366
|
+
path: '',
|
|
367
|
+
subtitles: []
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
removeFooterLink(index) {
|
|
371
|
+
this.editingFooterLinks.items.splice(index, 1);
|
|
372
|
+
}
|
|
373
|
+
addSubtitle(footerIndex) {
|
|
374
|
+
this.editingFooterLinks.items[footerIndex].subtitles.push({
|
|
375
|
+
title: '',
|
|
376
|
+
path: ''
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
removeSubtitle(footerIndex, subtitleIndex) {
|
|
380
|
+
this.editingFooterLinks.items[footerIndex].subtitles.splice(subtitleIndex, 1);
|
|
381
|
+
}
|
|
382
|
+
dropFooterLinks(event) {
|
|
383
|
+
moveItemInArray(this.editingFooterLinks.items, event.previousIndex, event.currentIndex);
|
|
384
|
+
}
|
|
385
|
+
dropSubtitles(footerIndex, event) {
|
|
386
|
+
moveItemInArray(this.editingFooterLinks.items[footerIndex].subtitles, event.previousIndex, event.currentIndex);
|
|
387
|
+
}
|
|
388
|
+
saveFooterLinks(modal) {
|
|
389
|
+
const updatedConfig = {
|
|
390
|
+
footer_links: this.editingFooterLinks,
|
|
391
|
+
subscription_id: this.id
|
|
392
|
+
};
|
|
393
|
+
this.adminService
|
|
394
|
+
.updateDomainConfig(this.appConfig?.domain_id, updatedConfig)
|
|
395
|
+
.subscribe(() => {
|
|
396
|
+
this.toast.success('Footer links updated');
|
|
397
|
+
this.footerLinks = [...this.editingFooterLinks.items];
|
|
398
|
+
this.footerLinksData = { ...this.editingFooterLinks };
|
|
399
|
+
modal.close();
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
saveEmail() {
|
|
403
|
+
this.email = this.editingEmail;
|
|
404
|
+
this.adminService
|
|
405
|
+
.updateDomainConfig(this.appConfig?.domain_id, {
|
|
406
|
+
company_email: this.editingEmail,
|
|
407
|
+
subscription_id: this.id
|
|
408
|
+
})
|
|
409
|
+
.subscribe(() => {
|
|
410
|
+
this.toast.success('Email updated');
|
|
411
|
+
this.isEditingEmail = false;
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
saveStreet() {
|
|
415
|
+
this.adminService
|
|
416
|
+
.updateDomainConfig(this.appConfig?.domain_id, {
|
|
417
|
+
company_address: this.editingStreet,
|
|
418
|
+
subscription_id: this.id
|
|
419
|
+
})
|
|
420
|
+
.subscribe(() => {
|
|
421
|
+
this.toast.success('Street updated');
|
|
422
|
+
this.street = this.editingStreet;
|
|
423
|
+
this.isEditingStreet = false;
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
cancelStreet() {
|
|
427
|
+
this.editingStreet = this.street;
|
|
428
|
+
this.isEditingStreet = false;
|
|
429
|
+
}
|
|
430
|
+
openHubspotEditModal(footerItem) {
|
|
431
|
+
this.editingHubspotHtml = footerItem.div;
|
|
432
|
+
this.editingHubspotId = footerItem.id;
|
|
433
|
+
this.modalService.open(this.hubspotEditModal, { centered: true, size: 'lg' });
|
|
434
|
+
}
|
|
435
|
+
saveHubspotHtml(modal) {
|
|
436
|
+
const updatedConfig = {
|
|
437
|
+
contact_us: {
|
|
438
|
+
...this.appConfig?.pages_config?.contact_us,
|
|
439
|
+
hubspot: [
|
|
440
|
+
{
|
|
441
|
+
id: '7423639',
|
|
442
|
+
position: 'footer',
|
|
443
|
+
div: this.editingHubspotHtml
|
|
444
|
+
}
|
|
445
|
+
]
|
|
446
|
+
},
|
|
447
|
+
subscription_id: this.id
|
|
448
|
+
};
|
|
449
|
+
this.adminService
|
|
450
|
+
.updateDomainConfig(this.appConfig?.domain_id, updatedConfig)
|
|
451
|
+
.subscribe(() => {
|
|
452
|
+
// NOSONAR: Trusted HTML content is handled safely here
|
|
453
|
+
this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(this.editingHubspotHtml); // NOSONAR
|
|
454
|
+
this.toast.success('Hubspot Embed updated');
|
|
455
|
+
modal.close();
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
updateCanEditResourcesValue() {
|
|
459
|
+
this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
|
|
460
|
+
}
|
|
461
|
+
canEditResources() {
|
|
462
|
+
return this.canEditResourcesValue;
|
|
463
|
+
}
|
|
464
|
+
ngOnDestroy() {
|
|
465
|
+
this.observer?.disconnect();
|
|
466
|
+
}
|
|
467
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.AuthService }, { token: i3.CrmService }, { token: i4.DomSanitizer }, { token: i5.AdminService }, { token: i0.Injector }, { token: i2.AbTestService }, { token: i6.NgbModal }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
468
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: Trial4ContactUsComponent, selector: "pw-trial-4-contact-us", inputs: { subscriptionId: "subscriptionId", sourceId: "sourceId", masterSubscriptionId: "masterSubscriptionId", experimentName: "experimentName", microserviceName: "microserviceName", shardName: "shardName", user: "user", userLoggedIn: "userLoggedIn" }, viewQueries: [{ propertyName: "footerSection", first: true, predicate: ["footerSection"], descendants: true, static: true }, { propertyName: "content", first: true, predicate: ["bookMeeting"], descendants: true, static: true }, { propertyName: "editFooterLinksModal", first: true, predicate: ["editFooterLinksModal"], descendants: true }, { propertyName: "logoModal", first: true, predicate: ["logoModal"], descendants: true }, { propertyName: "logoUploader", first: true, predicate: ["logoUploader"], descendants: true }, { propertyName: "hubspotEditModal", first: true, predicate: ["hubspotEditModal"], descendants: true }, { propertyName: "socialEditModal", first: true, predicate: ["socialEditModal"], descendants: true }, { propertyName: "questionsEditModal", first: true, predicate: ["questionsEditModal"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section #footerSection class=\"bg-black text-white py-5 footer-section\">\n <div class=\"container\" *ngIf=\"isFooterVisible\">\n <div class=\"row\">\n\n <!-- LEFT COLUMN -->\n <div class=\"col-md-6 mb-4 d-flex flex-column justify-content-between\" [ngClass]=\"{ 'site-column': getFooterHubspotForm() }\">\n <div>\n <h3 class=\"mb-4 d-flex align-items-center\">\n <span class=\"me-2 text-white\">Site Map:</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon cursor-pointer text-white ms-3\" (click)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.enter)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.space)=\"openEditFooterLinksModal(editFooterLinksModal)\" ngbTooltip=\"Edit Footer Links\"></i>\n </h3>\n <ul class=\"mt-4\">\n <li routerLink=\"/\"\n class=\"cursor-pointer user-info-label link-label\"> Home </li>\n <li *ngFor=\"let link of footerLinks\" [routerLink]=\"link?.path\"\n class=\"cursor-pointer user-info-label link-label mt-4\"><span *ngIf=\"link?.title\">{{link?.title}}</span> </li>\n <li routerLink=\"/login\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Log in </li>\n <li [routerLink]=\"'/privacy-and-tos/' + tosId\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Privacy statement </li>\n </ul>\n <p class=\"address-section email-section mb-4\">\n <span class=\"user-info-label\">Email: </span>\n <ng-container *ngIf=\"!isEditingEmail; else editEmail\">\n <span class=\"user-info\">{{ email }}</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\" (click)=\"isEditingEmail = true\" (keydown.enter)=\"isEditingEmail = true\" (keydown.space)=\"isEditingEmail = true\"></i>\n </ng-container>\n\n <ng-template #editEmail>\n <input\n class=\"form-control d-inline w-auto\"\n [(ngModel)]=\"editingEmail\"\n />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveEmail()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"isEditingEmail = false\">Cancel</button>\n </ng-template>\n </p>\n <span class=\"email-section mt-3 address-text\">\n <span class=\"user-info-label\">\n Address:\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer ms-2 text-white\"\n title=\"Edit Address\"\n (click)=\"isEditingStreet = true\"\n (keydown.enter)=\"isEditingStreet = true\"\n (keydown.space)=\"isEditingStreet = true\"></i>\n </span><br/>\n\n <ng-container *ngIf=\"!isEditingStreet; else editStreetBlock\">\n <span class=\"address-text user-info\">{{ street }}</span>\n </ng-container>\n\n <ng-template #editStreetBlock>\n <div class=\"d-flex align-items-center mt-3\">\n <input class=\"form-control form-control-sm\" [(ngModel)]=\"editingStreet\" />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveStreet()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"cancelStreet()\">Cancel</button>\n </div>\n </ng-template>\n\n </span>\n\n </div>\n <div class=\"d-flex\">\n <img [src]=\"logo\"\n alt=\"Company logo\"\n class=\"img-fluid mt-4 logo-image cursor-pointer\"\n width=\"160\"\n height=\"35\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n (keydown.space)=\"scrollToTop()\"\n title=\"Click to go to top of page\" />\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon fa-sm ms-3 cursor-pointer text-white align-self-center mt-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n </div>\n </div>\n\n <!-- RIGHT COLUMN -->\n <div class=\"col-md-6\" *ngIf=\"isFooterVisible\">\n <ng-container *ngIf=\"getFooterHubspotForm() as footerItem; else defaultForm\">\n <div class=\"d-flex\">\n <div\n *ngIf=\"isHubspotReady\"\n class=\"hubspot-container w-100 content-loaded\"\n [innerHTML]=\"hubspotHtml\"\n (load)=\"onHubspotLoad($event)\">\n </div>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer\"\n (click)=\"openHubspotEditModal(footerItem)\"\n (keydown.enter)=\"openHubspotEditModal(footerItem)\"\n (keydown.space)=\"openHubspotEditModal(footerItem)\"\n title=\"Edit Hubspot Embed\"></i>\n </div>\n </ng-container>\n\n <ng-template #defaultForm>\n <div class=\"d-flex\">\n <h3 class=\"text-white mb-4\"> <span class=\"text-white\">Get in touch:</span></h3>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3 mt-2\"\n (click)=\"openQuestionsEditModal()\"\n (keydown.enter)=\"openQuestionsEditModal()\"\n (keydown.space)=\"openQuestionsEditModal()\"\n title=\"Edit Questions\"></i>\n </div>\n <div class=\"contact-form\">\n <form [formGroup]=\"form\">\n <div class=\"mb-3\">\n <div class=\"email\">\n <div class=\"form-field\">\n <label for=\"email\">Email:</label>\n <div class=\"w-100\">\n <input type=\"text\"\n class=\"mb-1\"\n id=\"email\"\n formControlName=\"email\" />\n <pw-field-error-display [displayError]=\"\n !form.get('email').valid && (form.get('email').touched || submitted)\n \"\n errorMsg=\"Email is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"first_name\">First name:</label>\n <div class=\"w-100\">\n <input input type=\"text\"\n id=\"first_name\"\n formControlName=\"first_name\" />\n <pw-field-error-display [displayError]=\"\n !form.get('first_name').valid && (form.get('first_name').touched || submitted)\n \"\n errorMsg=\"First name is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"last_name\">Last name:</label>\n <input type=\"text\"\n id=\"last_name\"\n formControlName=\"last_name\" />\n </div>\n <div class=\"form-field\">\n <label for=\"company\">Company:</label>\n <input type=\"text\"\n id=\"company\"\n formControlName=\"company\" />\n </div>\n <div class=\"form-field\" *ngIf=\"hasValidOptions()\">\n <label for=\"psa\" class=\"select-label\">{{question}}</label>\n <p-dropdown\n formControlName=\"psa\"\n [options]=\"psaOptions\"\n [placeholder]=\"'Select PSA'\"\n styleClass=\"input-select\">\n </p-dropdown>\n </div>\n <div class=\"form-field\">\n <label for=\"enquiry\" class=\"select-label\">How can we help you?</label>\n <div class=\"enquiry-field\">\n <textarea id=\"enquiry\" formControlName=\"enquiry\" class=\"\">\n </textarea>\n <pw-field-error-display [displayError]=\"\n !form.get('enquiry').valid && (form.get('enquiry').touched || submitted)\n \"\n errorMsg=\"Enquiry is required\">\n </pw-field-error-display>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <div class=\"captcha-wrapper-container\"\n *ngIf=\"isCaptchaVerified\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"captchaKeyV2\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n <button type=\"submit\"\n (click)=\"onSubmit()\"\n *ngIf=\"!isCaptchaVerified\"\n class=\"sign-btn sign-header-btn mt-3\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n\n <div class=\"d-flex align-items-center mt-4\">\n <div class=\"icons d-flex align-items-center\">\n <a [eventTracker]=\"{\n category: 'youtube',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"youtubeUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"/assets/img/icons/youtube.png\"\n class=\"img-fluid youtube-icon\"\n width=\"54\"\n height=\"54\"\n alt=\"\" />\n </a>\n <a [eventTracker]=\"{\n category: 'linkedin',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"linkedInUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"ms-3\">\n <img src=\"/assets/img/icons/social/linkedin.svg\"\n class=\"img-fluid linkedin-icon\"\n width=\"48\"\n height=\"48\"\n alt=\"\" />\n </a>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\"\n (click)=\"openSocialEditModal()\"\n (keydown.enter)=\"openSocialEditModal()\"\n (keydown.space)=\"openSocialEditModal()\"\n title=\"Edit Social Links & Company Name\"></i>\n </div>\n <div class=\"copyright text-white\">\n 2025 {{companyName}}.\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n\n\n<ng-template #bookMeeting\n let-modal>\n <div class=\"modal-header\">\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <h3 class=\"text-center modal-basic-title\">\n Thanks for getting in touch! Our team will be in contact shortly, or we\n can compare calendars now & schedule a time\n </h3>\n <button type=\"button\"\n [eventTracker]=\"{\n category: 'request-demo',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n (click)=\"navigateToBookMeeting()\"\n class=\"sign-btn sign-header-btn mx-auto d-block mb-3\">\n Let's do it\n </button>\n </div>\n</ng-template>\n\n\n<ng-template #editFooterLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Footer Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Footer Links Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropFooterLinks($event)\">\n <div *ngFor=\"let footer of editingFooterLinks.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"footerTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"footerPath{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeFooterLink(i)\" (keydown.enter)=\"removeFooterLink(i)\" (keydown.space)=\"removeFooterLink(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Subtitles -->\n <div cdkDropList (cdkDropListDropped)=\"dropSubtitles(i, $event)\">\n <div *ngFor=\"let sub of footer.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"subtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"subtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"subtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"subtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeSubtitle(i, j)\" (keydown.enter)=\"removeSubtitle(i, j)\" (keydown.space)=\"removeSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addFooterLink()\">\n + Add Footer Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveFooterLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n\n\n<ng-template #logoModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [aspectRatio]=\"'fullLogo'\"\n [title]=\"'Main Contrast Logo'\"\n [controlName]=\"'logo_main_contrast'\"\n [previewData]=\"previewData\"\n (saveEvent)=\"onSaveFile($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>\n\n\n\n<ng-template #hubspotEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Hubspot Embed</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"hubspotId\" class=\"form-label\">Hubspot ID</label>\n <input id=\"hubspotId\" [(ngModel)]=\"editingHubspotId\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"hubspotEmbedDiv\" class=\"form-label\">Embed DIV</label>\n <textarea id=\"hubspotEmbedDiv\" [(ngModel)]=\"editingHubspotHtml\" rows=\"8\" class=\"form-control\"></textarea>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveHubspotHtml(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n<ng-template #socialEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Social Links & Company Name</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"youtubeUrl\" class=\"form-label\">YouTube URL</label>\n <input id=\"youtubeUrl\" [(ngModel)]=\"editingYoutubeUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"linkedinUrl\" class=\"form-label\">LinkedIn URL</label>\n <input id=\"linkedinUrl\" [(ngModel)]=\"editingLinkedInUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"companyName\" class=\"form-label\">Company Name</label>\n <input id=\"companyName\" [(ngModel)]=\"editingCompanyName\" class=\"form-control\" />\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveSocialLinks(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #questionsEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Questions</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Questions Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropQuestions($event)\">\n <div *ngFor=\"let q of editingQuestions; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-11 mb-2\">\n <label for=\"questionText{{i}}\" class=\"form-label\">Question</label>\n <input id=\"questionText{{i}}\" class=\"form-control\" [(ngModel)]=\"q.question\" placeholder=\"Enter question\" />\n </div>\n <div class=\"col-md-1 d-flex justify-content-end align-items-start mt-4\">\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Options Section -->\n <div cdkDropList (cdkDropListDropped)=\"dropQuestionOptions(i, $event)\">\n <div *ngFor=\"let opt of q.options; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-7 mb-2\">\n <label for=\"questionOption{{i}}{{j}}\" class=\"form-label\">Option</label>\n <input id=\"questionOption{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"opt.option\" placeholder=\"Enter option\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addQuestionOption(i)\">+ Add Option</button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNewQuestion()\">+ Add Question</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveQuestions(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n", styles: [".product-explainer-section{background-color:#000}.footer-section input.form-control,.footer-section select.form-control,.footer-section textarea.form-control{background-color:#fff;border:none;color:#000;font-size:14px}.btn-primary{background-color:#007bff;border:none}.site-column{margin-top:2.9rem}.email-section{color:#fff;font-size:2rem}.address-section{margin-top:5rem}.address-text{line-height:2.2rem}.user-info{font-size:1.5rem}.user-info-label{font-size:1.7rem;font-weight:700}.contact-form form .form-field{display:flex;align-items:center;margin-bottom:1.2rem}.contact-form form .form-field label{width:130px;min-width:130px;margin:0;font-size:14px;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:1px}.contact-form form .form-field p-dropdown{width:100%}.contact-form form .form-field input,.contact-form form .form-field select,.contact-form form .form-field textarea,.contact-form form .form-field ::ng-deep p-dropdown .p-inputwrapper{flex:1;border:none;border-radius:30px;padding:12px 20px;font-size:14px;width:100%!important;max-width:100%;color:#000}.contact-form form .form-field textarea{resize:vertical}.contact-form form .submit-button{background-color:#3b82f6;border:none;border-radius:30px;font-size:16px;font-weight:500;padding:10px 24px;margin-top:1.2rem}.input-select{height:43px}.select-label{width:210px!important}.copyright{margin-top:2rem;margin-left:4rem;font-size:19px;font-weight:700}.d-flex img{margin-right:0!important}.youtube-icon{height:38px}.enquiry-field{margin-left:.5rem;width:63%}::ng-deep .text-danger{margin-top:.25rem!important;margin-left:.5rem!important}@media (min-width: 768px){.hubspot-container{margin-top:-3rem}}@media (min-width: 768px) and (max-width: 1200px){.container{padding:0rem 6rem!important}}.link-label{cursor:pointer;transition:color .3s}.link-label:hover{color:var(--first)}.icons img{transition:transform .3s ease,filter .3s ease;cursor:pointer}.icons img:hover{transform:scale(1.1);filter:brightness(1.2)}.logo-image{max-width:160px;width:160px;height:35px;object-fit:contain;aspect-ratio:160/35}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i10.EventTrackerDirective, selector: "[eventTracker]", inputs: ["eventTracker"] }, { kind: "directive", type: i10.LazyImgDirective, selector: "img" }, { kind: "component", type: i11.ReCaptcha2Component, selector: "ngx-recaptcha2", inputs: ["theme", "size"] }, { kind: "component", type: i12.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i13.FieldErrorDisplayComponent, selector: "pw-field-error-display", inputs: ["errorMsg", "displayError"] }, { kind: "component", type: i13.CustomUploaderComponent, selector: "pw-custom-uploader", inputs: ["controlName", "previewData", "aspectRatio", "title"], outputs: ["saveEvent"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
469
|
+
}
|
|
470
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsComponent, decorators: [{
|
|
471
|
+
type: Component,
|
|
472
|
+
args: [{ selector: 'pw-trial-4-contact-us', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section #footerSection class=\"bg-black text-white py-5 footer-section\">\n <div class=\"container\" *ngIf=\"isFooterVisible\">\n <div class=\"row\">\n\n <!-- LEFT COLUMN -->\n <div class=\"col-md-6 mb-4 d-flex flex-column justify-content-between\" [ngClass]=\"{ 'site-column': getFooterHubspotForm() }\">\n <div>\n <h3 class=\"mb-4 d-flex align-items-center\">\n <span class=\"me-2 text-white\">Site Map:</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon cursor-pointer text-white ms-3\" (click)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.enter)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.space)=\"openEditFooterLinksModal(editFooterLinksModal)\" ngbTooltip=\"Edit Footer Links\"></i>\n </h3>\n <ul class=\"mt-4\">\n <li routerLink=\"/\"\n class=\"cursor-pointer user-info-label link-label\"> Home </li>\n <li *ngFor=\"let link of footerLinks\" [routerLink]=\"link?.path\"\n class=\"cursor-pointer user-info-label link-label mt-4\"><span *ngIf=\"link?.title\">{{link?.title}}</span> </li>\n <li routerLink=\"/login\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Log in </li>\n <li [routerLink]=\"'/privacy-and-tos/' + tosId\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Privacy statement </li>\n </ul>\n <p class=\"address-section email-section mb-4\">\n <span class=\"user-info-label\">Email: </span>\n <ng-container *ngIf=\"!isEditingEmail; else editEmail\">\n <span class=\"user-info\">{{ email }}</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\" (click)=\"isEditingEmail = true\" (keydown.enter)=\"isEditingEmail = true\" (keydown.space)=\"isEditingEmail = true\"></i>\n </ng-container>\n\n <ng-template #editEmail>\n <input\n class=\"form-control d-inline w-auto\"\n [(ngModel)]=\"editingEmail\"\n />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveEmail()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"isEditingEmail = false\">Cancel</button>\n </ng-template>\n </p>\n <span class=\"email-section mt-3 address-text\">\n <span class=\"user-info-label\">\n Address:\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer ms-2 text-white\"\n title=\"Edit Address\"\n (click)=\"isEditingStreet = true\"\n (keydown.enter)=\"isEditingStreet = true\"\n (keydown.space)=\"isEditingStreet = true\"></i>\n </span><br/>\n\n <ng-container *ngIf=\"!isEditingStreet; else editStreetBlock\">\n <span class=\"address-text user-info\">{{ street }}</span>\n </ng-container>\n\n <ng-template #editStreetBlock>\n <div class=\"d-flex align-items-center mt-3\">\n <input class=\"form-control form-control-sm\" [(ngModel)]=\"editingStreet\" />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveStreet()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"cancelStreet()\">Cancel</button>\n </div>\n </ng-template>\n\n </span>\n\n </div>\n <div class=\"d-flex\">\n <img [src]=\"logo\"\n alt=\"Company logo\"\n class=\"img-fluid mt-4 logo-image cursor-pointer\"\n width=\"160\"\n height=\"35\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n (keydown.space)=\"scrollToTop()\"\n title=\"Click to go to top of page\" />\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon fa-sm ms-3 cursor-pointer text-white align-self-center mt-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n </div>\n </div>\n\n <!-- RIGHT COLUMN -->\n <div class=\"col-md-6\" *ngIf=\"isFooterVisible\">\n <ng-container *ngIf=\"getFooterHubspotForm() as footerItem; else defaultForm\">\n <div class=\"d-flex\">\n <div\n *ngIf=\"isHubspotReady\"\n class=\"hubspot-container w-100 content-loaded\"\n [innerHTML]=\"hubspotHtml\"\n (load)=\"onHubspotLoad($event)\">\n </div>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer\"\n (click)=\"openHubspotEditModal(footerItem)\"\n (keydown.enter)=\"openHubspotEditModal(footerItem)\"\n (keydown.space)=\"openHubspotEditModal(footerItem)\"\n title=\"Edit Hubspot Embed\"></i>\n </div>\n </ng-container>\n\n <ng-template #defaultForm>\n <div class=\"d-flex\">\n <h3 class=\"text-white mb-4\"> <span class=\"text-white\">Get in touch:</span></h3>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3 mt-2\"\n (click)=\"openQuestionsEditModal()\"\n (keydown.enter)=\"openQuestionsEditModal()\"\n (keydown.space)=\"openQuestionsEditModal()\"\n title=\"Edit Questions\"></i>\n </div>\n <div class=\"contact-form\">\n <form [formGroup]=\"form\">\n <div class=\"mb-3\">\n <div class=\"email\">\n <div class=\"form-field\">\n <label for=\"email\">Email:</label>\n <div class=\"w-100\">\n <input type=\"text\"\n class=\"mb-1\"\n id=\"email\"\n formControlName=\"email\" />\n <pw-field-error-display [displayError]=\"\n !form.get('email').valid && (form.get('email').touched || submitted)\n \"\n errorMsg=\"Email is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"first_name\">First name:</label>\n <div class=\"w-100\">\n <input input type=\"text\"\n id=\"first_name\"\n formControlName=\"first_name\" />\n <pw-field-error-display [displayError]=\"\n !form.get('first_name').valid && (form.get('first_name').touched || submitted)\n \"\n errorMsg=\"First name is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"last_name\">Last name:</label>\n <input type=\"text\"\n id=\"last_name\"\n formControlName=\"last_name\" />\n </div>\n <div class=\"form-field\">\n <label for=\"company\">Company:</label>\n <input type=\"text\"\n id=\"company\"\n formControlName=\"company\" />\n </div>\n <div class=\"form-field\" *ngIf=\"hasValidOptions()\">\n <label for=\"psa\" class=\"select-label\">{{question}}</label>\n <p-dropdown\n formControlName=\"psa\"\n [options]=\"psaOptions\"\n [placeholder]=\"'Select PSA'\"\n styleClass=\"input-select\">\n </p-dropdown>\n </div>\n <div class=\"form-field\">\n <label for=\"enquiry\" class=\"select-label\">How can we help you?</label>\n <div class=\"enquiry-field\">\n <textarea id=\"enquiry\" formControlName=\"enquiry\" class=\"\">\n </textarea>\n <pw-field-error-display [displayError]=\"\n !form.get('enquiry').valid && (form.get('enquiry').touched || submitted)\n \"\n errorMsg=\"Enquiry is required\">\n </pw-field-error-display>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <div class=\"captcha-wrapper-container\"\n *ngIf=\"isCaptchaVerified\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"captchaKeyV2\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n <button type=\"submit\"\n (click)=\"onSubmit()\"\n *ngIf=\"!isCaptchaVerified\"\n class=\"sign-btn sign-header-btn mt-3\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n\n <div class=\"d-flex align-items-center mt-4\">\n <div class=\"icons d-flex align-items-center\">\n <a [eventTracker]=\"{\n category: 'youtube',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"youtubeUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"/assets/img/icons/youtube.png\"\n class=\"img-fluid youtube-icon\"\n width=\"54\"\n height=\"54\"\n alt=\"\" />\n </a>\n <a [eventTracker]=\"{\n category: 'linkedin',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"linkedInUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"ms-3\">\n <img src=\"/assets/img/icons/social/linkedin.svg\"\n class=\"img-fluid linkedin-icon\"\n width=\"48\"\n height=\"48\"\n alt=\"\" />\n </a>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\"\n (click)=\"openSocialEditModal()\"\n (keydown.enter)=\"openSocialEditModal()\"\n (keydown.space)=\"openSocialEditModal()\"\n title=\"Edit Social Links & Company Name\"></i>\n </div>\n <div class=\"copyright text-white\">\n 2025 {{companyName}}.\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n\n\n<ng-template #bookMeeting\n let-modal>\n <div class=\"modal-header\">\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <h3 class=\"text-center modal-basic-title\">\n Thanks for getting in touch! Our team will be in contact shortly, or we\n can compare calendars now & schedule a time\n </h3>\n <button type=\"button\"\n [eventTracker]=\"{\n category: 'request-demo',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n (click)=\"navigateToBookMeeting()\"\n class=\"sign-btn sign-header-btn mx-auto d-block mb-3\">\n Let's do it\n </button>\n </div>\n</ng-template>\n\n\n<ng-template #editFooterLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Footer Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Footer Links Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropFooterLinks($event)\">\n <div *ngFor=\"let footer of editingFooterLinks.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"footerTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"footerPath{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeFooterLink(i)\" (keydown.enter)=\"removeFooterLink(i)\" (keydown.space)=\"removeFooterLink(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Subtitles -->\n <div cdkDropList (cdkDropListDropped)=\"dropSubtitles(i, $event)\">\n <div *ngFor=\"let sub of footer.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"subtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"subtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"subtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"subtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeSubtitle(i, j)\" (keydown.enter)=\"removeSubtitle(i, j)\" (keydown.space)=\"removeSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addFooterLink()\">\n + Add Footer Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveFooterLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n\n\n<ng-template #logoModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [aspectRatio]=\"'fullLogo'\"\n [title]=\"'Main Contrast Logo'\"\n [controlName]=\"'logo_main_contrast'\"\n [previewData]=\"previewData\"\n (saveEvent)=\"onSaveFile($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>\n\n\n\n<ng-template #hubspotEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Hubspot Embed</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"hubspotId\" class=\"form-label\">Hubspot ID</label>\n <input id=\"hubspotId\" [(ngModel)]=\"editingHubspotId\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"hubspotEmbedDiv\" class=\"form-label\">Embed DIV</label>\n <textarea id=\"hubspotEmbedDiv\" [(ngModel)]=\"editingHubspotHtml\" rows=\"8\" class=\"form-control\"></textarea>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveHubspotHtml(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n<ng-template #socialEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Social Links & Company Name</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"youtubeUrl\" class=\"form-label\">YouTube URL</label>\n <input id=\"youtubeUrl\" [(ngModel)]=\"editingYoutubeUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"linkedinUrl\" class=\"form-label\">LinkedIn URL</label>\n <input id=\"linkedinUrl\" [(ngModel)]=\"editingLinkedInUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"companyName\" class=\"form-label\">Company Name</label>\n <input id=\"companyName\" [(ngModel)]=\"editingCompanyName\" class=\"form-control\" />\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveSocialLinks(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #questionsEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Questions</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Questions Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropQuestions($event)\">\n <div *ngFor=\"let q of editingQuestions; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-11 mb-2\">\n <label for=\"questionText{{i}}\" class=\"form-label\">Question</label>\n <input id=\"questionText{{i}}\" class=\"form-control\" [(ngModel)]=\"q.question\" placeholder=\"Enter question\" />\n </div>\n <div class=\"col-md-1 d-flex justify-content-end align-items-start mt-4\">\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Options Section -->\n <div cdkDropList (cdkDropListDropped)=\"dropQuestionOptions(i, $event)\">\n <div *ngFor=\"let opt of q.options; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-7 mb-2\">\n <label for=\"questionOption{{i}}{{j}}\" class=\"form-label\">Option</label>\n <input id=\"questionOption{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"opt.option\" placeholder=\"Enter option\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addQuestionOption(i)\">+ Add Option</button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNewQuestion()\">+ Add Question</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveQuestions(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n", styles: [".product-explainer-section{background-color:#000}.footer-section input.form-control,.footer-section select.form-control,.footer-section textarea.form-control{background-color:#fff;border:none;color:#000;font-size:14px}.btn-primary{background-color:#007bff;border:none}.site-column{margin-top:2.9rem}.email-section{color:#fff;font-size:2rem}.address-section{margin-top:5rem}.address-text{line-height:2.2rem}.user-info{font-size:1.5rem}.user-info-label{font-size:1.7rem;font-weight:700}.contact-form form .form-field{display:flex;align-items:center;margin-bottom:1.2rem}.contact-form form .form-field label{width:130px;min-width:130px;margin:0;font-size:14px;color:#fff;font-weight:600;text-transform:uppercase;letter-spacing:1px}.contact-form form .form-field p-dropdown{width:100%}.contact-form form .form-field input,.contact-form form .form-field select,.contact-form form .form-field textarea,.contact-form form .form-field ::ng-deep p-dropdown .p-inputwrapper{flex:1;border:none;border-radius:30px;padding:12px 20px;font-size:14px;width:100%!important;max-width:100%;color:#000}.contact-form form .form-field textarea{resize:vertical}.contact-form form .submit-button{background-color:#3b82f6;border:none;border-radius:30px;font-size:16px;font-weight:500;padding:10px 24px;margin-top:1.2rem}.input-select{height:43px}.select-label{width:210px!important}.copyright{margin-top:2rem;margin-left:4rem;font-size:19px;font-weight:700}.d-flex img{margin-right:0!important}.youtube-icon{height:38px}.enquiry-field{margin-left:.5rem;width:63%}::ng-deep .text-danger{margin-top:.25rem!important;margin-left:.5rem!important}@media (min-width: 768px){.hubspot-container{margin-top:-3rem}}@media (min-width: 768px) and (max-width: 1200px){.container{padding:0rem 6rem!important}}.link-label{cursor:pointer;transition:color .3s}.link-label:hover{color:var(--first)}.icons img{transition:transform .3s ease,filter .3s ease;cursor:pointer}.icons img:hover{transform:scale(1.1);filter:brightness(1.2)}.logo-image{max-width:160px;width:160px;height:35px;object-fit:contain;aspect-ratio:160/35}\n"] }]
|
|
473
|
+
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.AuthService }, { type: i3.CrmService }, { type: i4.DomSanitizer }, { type: i5.AdminService }, { type: i0.Injector }, { type: i2.AbTestService }, { type: i6.NgbModal }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
474
|
+
type: Inject,
|
|
475
|
+
args: [DOCUMENT]
|
|
476
|
+
}] }], propDecorators: { footerSection: [{
|
|
477
|
+
type: ViewChild,
|
|
478
|
+
args: ['footerSection', { static: true }]
|
|
479
|
+
}], content: [{
|
|
480
|
+
type: ViewChild,
|
|
481
|
+
args: ['bookMeeting', { static: true }]
|
|
482
|
+
}], editFooterLinksModal: [{
|
|
483
|
+
type: ViewChild,
|
|
484
|
+
args: ['editFooterLinksModal']
|
|
485
|
+
}], logoModal: [{
|
|
486
|
+
type: ViewChild,
|
|
487
|
+
args: ['logoModal']
|
|
488
|
+
}], logoUploader: [{
|
|
489
|
+
type: ViewChild,
|
|
490
|
+
args: ['logoUploader']
|
|
491
|
+
}], hubspotEditModal: [{
|
|
492
|
+
type: ViewChild,
|
|
493
|
+
args: ['hubspotEditModal']
|
|
494
|
+
}], socialEditModal: [{
|
|
495
|
+
type: ViewChild,
|
|
496
|
+
args: ['socialEditModal']
|
|
497
|
+
}], questionsEditModal: [{
|
|
498
|
+
type: ViewChild,
|
|
499
|
+
args: ['questionsEditModal']
|
|
500
|
+
}], subscriptionId: [{
|
|
501
|
+
type: Input
|
|
502
|
+
}], sourceId: [{
|
|
503
|
+
type: Input
|
|
504
|
+
}], masterSubscriptionId: [{
|
|
505
|
+
type: Input
|
|
506
|
+
}], experimentName: [{
|
|
507
|
+
type: Input
|
|
508
|
+
}], microserviceName: [{
|
|
509
|
+
type: Input
|
|
510
|
+
}], shardName: [{
|
|
511
|
+
type: Input
|
|
512
|
+
}], user: [{
|
|
513
|
+
type: Input
|
|
514
|
+
}], userLoggedIn: [{
|
|
515
|
+
type: Input
|
|
516
|
+
}] } });
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Standalone module for Trial4ContactUsComponent (pw-trial-4-contact-us)
|
|
520
|
+
* Lightweight alternative to importing entire ResourceSharedModule
|
|
521
|
+
*/
|
|
522
|
+
class Trial4ContactUsModule {
|
|
523
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
524
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsModule, declarations: [Trial4ContactUsComponent], imports: [CommonModule,
|
|
525
|
+
FormsModule,
|
|
526
|
+
ReactiveFormsModule,
|
|
527
|
+
RouterModule,
|
|
528
|
+
DragDropModule,
|
|
529
|
+
NgbModalModule,
|
|
530
|
+
NgbTooltipModule,
|
|
531
|
+
DirectivesModule,
|
|
532
|
+
PipesModule,
|
|
533
|
+
CoreTranslocoModule,
|
|
534
|
+
NgxCaptchaModule,
|
|
535
|
+
DropdownModule,
|
|
536
|
+
FieldErrorDisplayModule, // For pw-field-error-display
|
|
537
|
+
ProfileImageCropperModule, // For pw-custom-uploader + pw-image-cropper
|
|
538
|
+
AdminModuleUtilsModule], exports: [Trial4ContactUsComponent] }); }
|
|
539
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsModule, imports: [CommonModule,
|
|
540
|
+
FormsModule,
|
|
541
|
+
ReactiveFormsModule,
|
|
542
|
+
RouterModule,
|
|
543
|
+
DragDropModule,
|
|
544
|
+
NgbModalModule,
|
|
545
|
+
NgbTooltipModule,
|
|
546
|
+
DirectivesModule,
|
|
547
|
+
PipesModule,
|
|
548
|
+
CoreTranslocoModule,
|
|
549
|
+
NgxCaptchaModule,
|
|
550
|
+
DropdownModule,
|
|
551
|
+
FieldErrorDisplayModule, // For pw-field-error-display
|
|
552
|
+
ProfileImageCropperModule, // For pw-custom-uploader + pw-image-cropper
|
|
553
|
+
AdminModuleUtilsModule] }); }
|
|
554
|
+
}
|
|
555
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Trial4ContactUsModule, decorators: [{
|
|
556
|
+
type: NgModule,
|
|
557
|
+
args: [{
|
|
558
|
+
declarations: [Trial4ContactUsComponent],
|
|
559
|
+
imports: [
|
|
560
|
+
CommonModule,
|
|
561
|
+
FormsModule,
|
|
562
|
+
ReactiveFormsModule,
|
|
563
|
+
RouterModule,
|
|
564
|
+
DragDropModule,
|
|
565
|
+
NgbModalModule,
|
|
566
|
+
NgbTooltipModule,
|
|
567
|
+
DirectivesModule,
|
|
568
|
+
PipesModule,
|
|
569
|
+
CoreTranslocoModule,
|
|
570
|
+
NgxCaptchaModule,
|
|
571
|
+
DropdownModule,
|
|
572
|
+
FieldErrorDisplayModule, // For pw-field-error-display
|
|
573
|
+
ProfileImageCropperModule, // For pw-custom-uploader + pw-image-cropper
|
|
574
|
+
AdminModuleUtilsModule
|
|
575
|
+
],
|
|
576
|
+
exports: [Trial4ContactUsComponent]
|
|
577
|
+
}]
|
|
578
|
+
}] });
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Generated bundle index. Do not edit.
|
|
582
|
+
*/
|
|
583
|
+
|
|
584
|
+
export { Trial4ContactUsComponent, Trial4ContactUsModule };
|
|
585
|
+
//# sourceMappingURL=posiwise-resource-contact-us.mjs.map
|