@posiwise/resource-module 0.0.187 → 0.0.189
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{posiwise-resource-module-base-top-banner.component-CoEqc36P.mjs → posiwise-resource-module-base-top-banner.component-CJao3glW.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-base-top-banner.component-CoEqc36P.mjs.map → posiwise-resource-module-base-top-banner.component-CJao3glW.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-posiwise-resource-module-O2OM4obK.mjs → posiwise-resource-module-posiwise-resource-module-BZKgTjU4.mjs} +27 -13
- package/fesm2022/{posiwise-resource-module-posiwise-resource-module-O2OM4obK.mjs.map → posiwise-resource-module-posiwise-resource-module-BZKgTjU4.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-blogs.module-iCgWaJh2.mjs → posiwise-resource-module-resource-blogs.module-BgWNGP5s.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-blogs.module-iCgWaJh2.mjs.map → posiwise-resource-module-resource-blogs.module-BgWNGP5s.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-case-studies.module-VihegNvm.mjs → posiwise-resource-module-resource-case-studies.module-jZAM6Z2I.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-resource-case-studies.module-VihegNvm.mjs.map → posiwise-resource-module-resource-case-studies.module-jZAM6Z2I.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-events.module-v7m3uRJ8.mjs → posiwise-resource-module-resource-events.module-Bj5gs8IW.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-resource-events.module-v7m3uRJ8.mjs.map → posiwise-resource-module-resource-events.module-Bj5gs8IW.mjs.map} +1 -1
- package/fesm2022/posiwise-resource-module-resource-hub.module-C5BJoiD3.mjs +243 -0
- package/fesm2022/posiwise-resource-module-resource-hub.module-C5BJoiD3.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-integrations.module-CoUtfPcD.mjs → posiwise-resource-module-resource-integrations.module-CekT8vLc.mjs} +4 -3
- package/fesm2022/posiwise-resource-module-resource-integrations.module-CekT8vLc.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-post.module-CQFYEjS2.mjs → posiwise-resource-module-resource-post.module-BHN2bFTw.mjs} +9 -9
- package/fesm2022/posiwise-resource-module-resource-post.module-BHN2bFTw.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-release-notes.module-C82uCZcK.mjs → posiwise-resource-module-resource-release-notes.module-DG6LWSTy.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-release-notes.module-C82uCZcK.mjs.map → posiwise-resource-module-resource-release-notes.module-DG6LWSTy.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-root.module-AXb1UrQO.mjs → posiwise-resource-module-resource-root.module-BPaJB-g2.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-resource-root.module-AXb1UrQO.mjs.map → posiwise-resource-module-resource-root.module-BPaJB-g2.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-videos.module-D3B2pWmR.mjs → posiwise-resource-module-resource-videos.module-68ofrmCt.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-videos.module-D3B2pWmR.mjs.map → posiwise-resource-module-resource-videos.module-68ofrmCt.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-white-papers.module-R1JVmpHj.mjs → posiwise-resource-module-resource-white-papers.module-B9WGxaOx.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-white-papers.module-R1JVmpHj.mjs.map → posiwise-resource-module-resource-white-papers.module-B9WGxaOx.mjs.map} +1 -1
- package/fesm2022/posiwise-resource-module.mjs +1 -1
- package/package.json +1 -1
- package/types/posiwise-resource-module.d.ts +5 -3
- package/fesm2022/posiwise-resource-module-resource-hub.module-BadZNGBm.mjs +0 -241
- package/fesm2022/posiwise-resource-module-resource-hub.module-BadZNGBm.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-integrations.module-CoUtfPcD.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-post.module-CQFYEjS2.mjs.map +0 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { HostListener, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/router';
|
|
4
|
+
import { RouterModule } from '@angular/router';
|
|
5
|
+
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
6
|
+
import * as i2 from '@posiwise/common-services';
|
|
7
|
+
import { HelperService } from '@posiwise/helper-service';
|
|
8
|
+
import { forkJoin } from 'rxjs';
|
|
9
|
+
import { e as ResourceService, f as ResourceEditCardLazyComponent, g as ResourceSharedModule } from './posiwise-resource-module-posiwise-resource-module-BZKgTjU4.mjs';
|
|
10
|
+
import * as i3 from '@angular/common';
|
|
11
|
+
import * as i5 from '@angular/forms';
|
|
12
|
+
import * as i5$1 from '@posiwise/directives';
|
|
13
|
+
import * as i8 from '@posiwise/utils';
|
|
14
|
+
import * as i6 from '@posiwise/shared-components';
|
|
15
|
+
import * as i7 from 'primeng/progressspinner';
|
|
16
|
+
import * as i11 from 'primeng/inputtext';
|
|
17
|
+
import * as i12 from 'primeng/iconfield';
|
|
18
|
+
import * as i13 from 'primeng/inputicon';
|
|
19
|
+
import * as i14 from '@posiwise/pipes';
|
|
20
|
+
|
|
21
|
+
class ResourceHubComponent extends AppBaseComponent {
|
|
22
|
+
constructor(resourceService, authService, tagService, cdr, injector) {
|
|
23
|
+
super(injector);
|
|
24
|
+
this.resourceService = resourceService;
|
|
25
|
+
this.authService = authService;
|
|
26
|
+
this.tagService = tagService;
|
|
27
|
+
this.cdr = cdr;
|
|
28
|
+
this.delayTimeout = null;
|
|
29
|
+
this.data = [];
|
|
30
|
+
this.posts = [];
|
|
31
|
+
this.tags = [];
|
|
32
|
+
this.selectedTags = [];
|
|
33
|
+
this.currentPage = 1;
|
|
34
|
+
this.pageSize = 20;
|
|
35
|
+
this.objectCount = 0;
|
|
36
|
+
this.searchTextItems = '';
|
|
37
|
+
this.searchInput = false;
|
|
38
|
+
this.loading = true;
|
|
39
|
+
this.loaded = false;
|
|
40
|
+
this.scrollLocked = false;
|
|
41
|
+
this.iconClasses = [
|
|
42
|
+
'fa-lightbulb',
|
|
43
|
+
'fa-rocket',
|
|
44
|
+
'fa-file-alt',
|
|
45
|
+
'fa-users',
|
|
46
|
+
'fa-video',
|
|
47
|
+
'fa-pencil-alt',
|
|
48
|
+
'fa-book-open',
|
|
49
|
+
'fa-cogs'
|
|
50
|
+
];
|
|
51
|
+
this.canEditResourcesValue = false;
|
|
52
|
+
}
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
this.authService.getToken$().subscribe(res => {
|
|
55
|
+
this.userLoggedIn = !!res;
|
|
56
|
+
if (this.userLoggedIn) {
|
|
57
|
+
this.localStorage.getItem$('product').subscribe(res => {
|
|
58
|
+
const data = res ? JSON.parse(res) : null;
|
|
59
|
+
this.subscriptionId = data?.subscriptionId;
|
|
60
|
+
this.cdr.markForCheck();
|
|
61
|
+
});
|
|
62
|
+
this.userSub = this.userService.getUserInfo().subscribe(data => {
|
|
63
|
+
this.user = data;
|
|
64
|
+
this.updateCanEditResourcesValue();
|
|
65
|
+
this.getPostsAndTags();
|
|
66
|
+
this.cdr.markForCheck();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.getPostsAndTags();
|
|
71
|
+
}
|
|
72
|
+
this.cdr.markForCheck();
|
|
73
|
+
});
|
|
74
|
+
this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
|
|
75
|
+
this.readingTime = 0;
|
|
76
|
+
}
|
|
77
|
+
getPostsAndTags() {
|
|
78
|
+
this.loading = true;
|
|
79
|
+
this.loaded = false;
|
|
80
|
+
forkJoin({
|
|
81
|
+
resPosts: this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), this.currentPage, this.pageSize, this.searchTextItems),
|
|
82
|
+
resTags: this.tagService.getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
|
|
83
|
+
})
|
|
84
|
+
.subscribe(res => {
|
|
85
|
+
this.posts = res?.resPosts?.posts;
|
|
86
|
+
this.objectCount = res?.resPosts.object_count;
|
|
87
|
+
this.data = res?.resPosts?.posts;
|
|
88
|
+
this.data = res?.resPosts?.posts.map(post => ({
|
|
89
|
+
...post,
|
|
90
|
+
expandedTags: false
|
|
91
|
+
}));
|
|
92
|
+
this.totalRecords = this.posts?.length;
|
|
93
|
+
this.tags = res?.resTags?.tags?.filter(tag => tag.visible_in_resources);
|
|
94
|
+
this.tags = this.tags.map(tag => ({
|
|
95
|
+
...tag
|
|
96
|
+
}));
|
|
97
|
+
this.cdr.markForCheck();
|
|
98
|
+
})
|
|
99
|
+
.add(() => {
|
|
100
|
+
this.loading = false;
|
|
101
|
+
this.loaded = true;
|
|
102
|
+
this.cdr.markForCheck();
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
toggleDropdown(event, post) {
|
|
106
|
+
event.stopPropagation();
|
|
107
|
+
post.showDropdown = !post.showDropdown;
|
|
108
|
+
}
|
|
109
|
+
getPosts(page, pageSize, fetchAll = false, append = false) {
|
|
110
|
+
if (fetchAll)
|
|
111
|
+
this.selectedTags = [];
|
|
112
|
+
if (!append) {
|
|
113
|
+
this.loading = true;
|
|
114
|
+
this.loaded = false;
|
|
115
|
+
}
|
|
116
|
+
const tagCategoryParam = this.selectedTags.map(tag => tag.tag_category_id).join(',');
|
|
117
|
+
this.resourceService
|
|
118
|
+
.getPublicPosts(this.getEffectiveSubscriptionId(), page, append ? 10 : pageSize, this.searchTextItems, tagCategoryParam)
|
|
119
|
+
.subscribe(response => {
|
|
120
|
+
this.objectCount = response.object_count;
|
|
121
|
+
this.posts = append ? [...this.posts, ...response.posts] : response.posts;
|
|
122
|
+
this.data = [...this.posts];
|
|
123
|
+
this.totalRecords = this.posts?.length;
|
|
124
|
+
this.cdr.markForCheck();
|
|
125
|
+
})
|
|
126
|
+
.add(() => {
|
|
127
|
+
this.loading = false;
|
|
128
|
+
this.loaded = true;
|
|
129
|
+
this.cdr.markForCheck();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
onSearch(seconds) {
|
|
133
|
+
let delay = 0;
|
|
134
|
+
delay = seconds * 1000;
|
|
135
|
+
clearTimeout(this.delayTimeout);
|
|
136
|
+
const delayTimeout = setTimeout(() => {
|
|
137
|
+
this.currentPage = 1;
|
|
138
|
+
this.getPosts(1, this.pageSize);
|
|
139
|
+
}, delay);
|
|
140
|
+
this.delayTimeout = delayTimeout;
|
|
141
|
+
}
|
|
142
|
+
navigateToTagList() {
|
|
143
|
+
HelperService.navigateToTagList();
|
|
144
|
+
}
|
|
145
|
+
onWindowScroll() {
|
|
146
|
+
const scrollPosition = window.scrollY + window.innerHeight;
|
|
147
|
+
const pageHeight = document.documentElement.scrollHeight;
|
|
148
|
+
const nearBottom = scrollPosition >= pageHeight - 100;
|
|
149
|
+
if (nearBottom &&
|
|
150
|
+
this.posts.length < this.objectCount &&
|
|
151
|
+
!this.loading &&
|
|
152
|
+
!this.scrollLocked) {
|
|
153
|
+
this.scrollLocked = true;
|
|
154
|
+
this.currentPage += 1;
|
|
155
|
+
this.getPosts(this.currentPage, this.pageSize, false, true);
|
|
156
|
+
setTimeout(() => {
|
|
157
|
+
this.scrollLocked = false;
|
|
158
|
+
}, 500);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
isSelected(tagId) {
|
|
162
|
+
return this.selectedTags.map(tag => tag.id).includes(tagId);
|
|
163
|
+
}
|
|
164
|
+
tagPost(selectedTag) {
|
|
165
|
+
const index = this.selectedTags.findIndex(tag => tag.tag_category_id === selectedTag?.tag_category_id && tag.id === selectedTag.id);
|
|
166
|
+
if (index === -1) {
|
|
167
|
+
this.selectedTags.push({
|
|
168
|
+
tag_category_id: selectedTag?.tag_category_id,
|
|
169
|
+
id: selectedTag.id
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.selectedTags.splice(index, 1);
|
|
174
|
+
}
|
|
175
|
+
this.currentPage = 1;
|
|
176
|
+
this.getPosts(1, this.pageSize);
|
|
177
|
+
}
|
|
178
|
+
thisPostReadingTime(text) {
|
|
179
|
+
if (text) {
|
|
180
|
+
const wordsPerMinute = 200;
|
|
181
|
+
const noOfWords = text.split(/\s/g).length;
|
|
182
|
+
const minutes = noOfWords / wordsPerMinute;
|
|
183
|
+
const readTime = Math.ceil(minutes);
|
|
184
|
+
return `${readTime} minute read`;
|
|
185
|
+
}
|
|
186
|
+
return '';
|
|
187
|
+
}
|
|
188
|
+
ngOnDestroy() {
|
|
189
|
+
this.userSub?.unsubscribe();
|
|
190
|
+
super.ngOnDestroy();
|
|
191
|
+
}
|
|
192
|
+
/** Helper method to get effective subscription ID */
|
|
193
|
+
getEffectiveSubscriptionId() {
|
|
194
|
+
return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.appConfig.master_subscription.subscription_id);
|
|
195
|
+
}
|
|
196
|
+
updateCanEditResourcesValue() {
|
|
197
|
+
if (this.userLoggedIn && this.user) {
|
|
198
|
+
this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.canEditResourcesValue = false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
canEditResources() {
|
|
205
|
+
return this.canEditResourcesValue;
|
|
206
|
+
}
|
|
207
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubComponent, deps: [{ token: ResourceService }, { token: i2.AuthService }, { token: i2.TagService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
208
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: ResourceHubComponent, isStandalone: false, selector: "pw-posts-list", host: { listeners: { "window:scroll": "onWindowScroll()" } }, usesInheritance: true, ngImport: i0, template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n @if (userLoggedIn && user?.auth?.granted['Pages.Admin']) {\n <i\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n (keydown.enter)=\"navigateToTagList()\"\n (keydown.space)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n }\n <div class=\"search-wrapper position-relative\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"resources-hub-search\"\n name=\"resources-hub-search\"\n [(ngModel)]=\"searchTextItems\"\n pInputText\n placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </p-iconfield>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 col-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n @for (tag of tags; track tag) {\n <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n >\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n @if (tag?.icon_name) {\n <i class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n }\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n }\n </div>\n @if (loading && !loaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n }\n @if (posts?.length && !loading) {\n <div>\n <div class=\"blog-list\">\n @for (post of data; track post) {\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n >\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card-lazy>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Resource thumbnail\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n @if (post.author?.avatar) {\n <img\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n }\n @if (!post.author?.avatar) {\n <img\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n }\n </a>\n </div>\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author?.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n @if (post.showDropdown) {\n <div class=\"dropdown-menu show\"\n >\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n }\n </div>\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n @if (post?.tags?.length) {\n @for (tag of post?.tags?.slice(0, 4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n @if (post.expandedTags) {\n @for (tag of post?.tags?.slice(4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n }\n @if (post?.tags?.length > 4) {\n <span\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1 expand-tags\">...</span>\n }\n }\n </div>\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (!posts?.length && loaded) {\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n }\n </div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width<=1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width<=767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media(width>=768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}@media(width<=576px){.resource-card{padding:.3rem 1rem!important;height:100%;min-height:75px}.tag-section{padding-bottom:4.5rem!important}.resource-icon{font-size:2rem!important}.resource-text{font-size:1.2rem!important;line-height:1.6rem!important;word-break:break-word;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color, currentColor);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}.expand-tags{font-size:1.2rem}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media(width<=768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5$1.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i5$1.LazyImgDirective, selector: "img" }, { kind: "component", type: ResourceEditCardLazyComponent, selector: "pw-resource-edit-card-lazy", inputs: ["id", "resourceData", "canEdit"], outputs: ["updated"] }, { kind: "component", type: i8.ResourceHeaderComponent, selector: "pw-resource-header", inputs: ["user", "userLoggedIn"] }, { kind: "component", type: i6.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i12.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["hostName", "iconPosition", "styleClass"] }, { kind: "component", type: i13.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["hostName", "styleClass"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i14.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i14.TextTruncatePipe, name: "textTruncate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
209
|
+
}
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubComponent, decorators: [{
|
|
211
|
+
type: Component,
|
|
212
|
+
args: [{ selector: 'pw-posts-list', encapsulation: ViewEncapsulation.None, standalone: false, template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n @if (userLoggedIn && user?.auth?.granted['Pages.Admin']) {\n <i\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n (keydown.enter)=\"navigateToTagList()\"\n (keydown.space)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n }\n <div class=\"search-wrapper position-relative\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"resources-hub-search\"\n name=\"resources-hub-search\"\n [(ngModel)]=\"searchTextItems\"\n pInputText\n placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </p-iconfield>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 col-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n @for (tag of tags; track tag) {\n <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n >\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n @if (tag?.icon_name) {\n <i class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n }\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n }\n </div>\n @if (loading && !loaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n }\n @if (posts?.length && !loading) {\n <div>\n <div class=\"blog-list\">\n @for (post of data; track post) {\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n >\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card-lazy>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Resource thumbnail\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n @if (post.author?.avatar) {\n <img\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n }\n @if (!post.author?.avatar) {\n <img\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n }\n </a>\n </div>\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author?.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n @if (post.showDropdown) {\n <div class=\"dropdown-menu show\"\n >\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n }\n </div>\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n @if (post?.tags?.length) {\n @for (tag of post?.tags?.slice(0, 4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n @if (post.expandedTags) {\n @for (tag of post?.tags?.slice(4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n }\n @if (post?.tags?.length > 4) {\n <span\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1 expand-tags\">...</span>\n }\n }\n </div>\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (!posts?.length && loaded) {\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n }\n </div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width<=1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width<=767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media(width>=768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}@media(width<=576px){.resource-card{padding:.3rem 1rem!important;height:100%;min-height:75px}.tag-section{padding-bottom:4.5rem!important}.resource-icon{font-size:2rem!important}.resource-text{font-size:1.2rem!important;line-height:1.6rem!important;word-break:break-word;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color, currentColor);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}.expand-tags{font-size:1.2rem}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media(width<=768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"] }]
|
|
213
|
+
}], ctorParameters: () => [{ type: ResourceService }, { type: i2.AuthService }, { type: i2.TagService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }], propDecorators: { onWindowScroll: [{
|
|
214
|
+
type: HostListener,
|
|
215
|
+
args: ['window:scroll', []]
|
|
216
|
+
}] } });
|
|
217
|
+
|
|
218
|
+
const routes = [
|
|
219
|
+
{
|
|
220
|
+
path: '',
|
|
221
|
+
component: ResourceHubComponent,
|
|
222
|
+
data: {
|
|
223
|
+
title: 'Resources - Hub',
|
|
224
|
+
permission: 'Pages.Blog',
|
|
225
|
+
preload: false
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
];
|
|
229
|
+
class ResourceHubModule {
|
|
230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
231
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubModule, declarations: [ResourceHubComponent], imports: [ResourceSharedModule, i1.RouterModule] }); }
|
|
232
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubModule, imports: [ResourceSharedModule, RouterModule.forChild(routes)] }); }
|
|
233
|
+
}
|
|
234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: ResourceHubModule, decorators: [{
|
|
235
|
+
type: NgModule,
|
|
236
|
+
args: [{
|
|
237
|
+
declarations: [ResourceHubComponent],
|
|
238
|
+
imports: [ResourceSharedModule, RouterModule.forChild(routes)]
|
|
239
|
+
}]
|
|
240
|
+
}] });
|
|
241
|
+
|
|
242
|
+
export { ResourceHubModule };
|
|
243
|
+
//# sourceMappingURL=posiwise-resource-module-resource-hub.module-C5BJoiD3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posiwise-resource-module-resource-hub.module-C5BJoiD3.mjs","sources":["../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.ts","../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.html","../../../../libs/resource-module/src/lib/public/modules/hub/resource-hub.module.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n HostListener,\n Injector,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, Tag, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin, Subscription } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-posts-list',\n templateUrl: './resources-hub.component.html',\n styleUrls: [\n './resources-hub.component.scss',\n '../resource-company-card/resource-company-card.component.scss'\n ],\n encapsulation: ViewEncapsulation.None,\n\n standalone: false\n})\nexport class ResourceHubComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private delayTimeout: ReturnType<typeof setTimeout> | null = null;\n private userSub: Subscription;\n\n data = [];\n\n posts: Resource[] = [];\n tags: Tag[] = [];\n\n selectedTags = [];\n\n currentPage = 1;\n pageSize = 20;\n objectCount = 0;\n\n searchTextItems = '';\n searchInput = false;\n\n readingTime: number;\n\n totalRecords: number;\n\n loading = true;\n loaded = false;\n\n masterSubscriptionId: number;\n subscriptionId;\n userLoggedIn: boolean;\n isMasterSubscription;\n\n scrollLocked = false;\n\n iconClasses: string[] = [\n 'fa-lightbulb',\n 'fa-rocket',\n 'fa-file-alt',\n 'fa-users',\n 'fa-video',\n 'fa-pencil-alt',\n 'fa-book-open',\n 'fa-cogs'\n ];\n user: User;\n\n canEditResourcesValue = false;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly authService: AuthService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userSub = this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.updateCanEditResourcesValue();\n this.getPostsAndTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostsAndTags();\n }\n this.cdr.markForCheck();\n });\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.readingTime = 0;\n }\n\n getPostsAndTags() {\n this.loading = true;\n this.loaded = false;\n forkJoin({\n resPosts: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n this.currentPage,\n this.pageSize,\n this.searchTextItems\n ),\n resTags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(res => {\n this.posts = res?.resPosts?.posts;\n this.objectCount = res?.resPosts.object_count;\n this.data = res?.resPosts?.posts;\n this.data = res?.resPosts?.posts.map(post => ({\n ...post,\n expandedTags: false\n }));\n this.totalRecords = this.posts?.length;\n\n this.tags = res?.resTags?.tags?.filter(tag => tag.visible_in_resources);\n this.tags = this.tags.map(tag => ({\n ...tag\n }));\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleDropdown(event: Event, post): void {\n event.stopPropagation();\n post.showDropdown = !post.showDropdown;\n }\n\n getPosts(page: number, pageSize: number, fetchAll = false, append = false) {\n if (fetchAll) this.selectedTags = [];\n\n if (!append) {\n this.loading = true;\n this.loaded = false;\n }\n\n const tagCategoryParam = this.selectedTags.map(tag => tag.tag_category_id).join(',');\n\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n append ? 10 : pageSize,\n this.searchTextItems,\n tagCategoryParam\n )\n .subscribe(response => {\n this.objectCount = response.object_count;\n this.posts = append ? [...this.posts, ...response.posts] : response.posts;\n this.data = [...this.posts];\n this.totalRecords = this.posts?.length;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n onSearch(seconds: number) {\n let delay = 0;\n delay = seconds * 1000;\n clearTimeout(this.delayTimeout);\n const delayTimeout = setTimeout(() => {\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }, delay);\n\n this.delayTimeout = delayTimeout;\n }\n\n navigateToTagList(): void {\n HelperService.navigateToTagList();\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll(): void {\n const scrollPosition = window.scrollY + window.innerHeight;\n const pageHeight = document.documentElement.scrollHeight;\n\n const nearBottom = scrollPosition >= pageHeight - 100;\n\n if (\n nearBottom &&\n this.posts.length < this.objectCount &&\n !this.loading &&\n !this.scrollLocked\n ) {\n this.scrollLocked = true;\n this.currentPage += 1;\n\n this.getPosts(this.currentPage, this.pageSize, false, true);\n\n setTimeout(() => {\n this.scrollLocked = false;\n }, 500);\n }\n }\n\n isSelected(tagId: number): boolean {\n return this.selectedTags.map(tag => tag.id).includes(tagId);\n }\n\n tagPost(selectedTag) {\n const index = this.selectedTags.findIndex(\n tag => tag.tag_category_id === selectedTag?.tag_category_id && tag.id === selectedTag.id\n );\n\n if (index === -1) {\n this.selectedTags.push({\n tag_category_id: selectedTag?.tag_category_id,\n id: selectedTag.id\n });\n } else {\n this.selectedTags.splice(index, 1);\n }\n\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }\n\n thisPostReadingTime(text: string): string {\n if (text) {\n const wordsPerMinute = 200;\n const noOfWords = text.split(/\\s/g).length;\n const minutes = noOfWords / wordsPerMinute;\n const readTime = Math.ceil(minutes);\n\n return `${readTime} minute read`;\n }\n\n return '';\n }\n\n override ngOnDestroy() {\n this.userSub?.unsubscribe();\n super.ngOnDestroy();\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.appConfig.master_subscription.subscription_id\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n @if (userLoggedIn && user?.auth?.granted['Pages.Admin']) {\n <i\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n (keydown.enter)=\"navigateToTagList()\"\n (keydown.space)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n }\n <div class=\"search-wrapper position-relative\">\n <p-iconfield iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\"\n id=\"resources-hub-search\"\n name=\"resources-hub-search\"\n [(ngModel)]=\"searchTextItems\"\n pInputText\n placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </p-iconfield>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 col-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n @for (tag of tags; track tag) {\n <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n >\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n @if (tag?.icon_name) {\n <i class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n }\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n }\n </div>\n @if (loading && !loaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n }\n @if (posts?.length && !loading) {\n <div>\n <div class=\"blog-list\">\n @for (post of data; track post) {\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n >\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card-lazy>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Resource thumbnail\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n @if (post.author?.avatar) {\n <img\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n }\n @if (!post.author?.avatar) {\n <img\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n }\n </a>\n </div>\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author?.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"#\" (click)=\"$event.preventDefault()\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n @if (post.showDropdown) {\n <div class=\"dropdown-menu show\"\n >\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n }\n </div>\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n @if (post?.tags?.length) {\n @for (tag of post?.tags?.slice(0, 4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n @if (post.expandedTags) {\n @for (tag of post?.tags?.slice(4); track tag) {\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n }\n }\n @if (post?.tags?.length > 4) {\n <span\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1 expand-tags\">...</span>\n }\n }\n </div>\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (!posts?.length && loaded) {\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n }\n </div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceHubComponent } from '../../components/resources-hub/resources-hub.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceHubComponent,\n data: {\n title: 'Resources - Hub',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceHubComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceHubModule {}\n"],"names":["i1.ResourceService","i4","i5","i6","i7.ResourceEditCardLazyComponent","i9","i10"],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ import * as i1 from '@angular/router';
|
|
|
4
4
|
import { RouterModule } from '@angular/router';
|
|
5
5
|
import * as i3 from '@angular/platform-browser';
|
|
6
6
|
import * as i2 from '@posiwise/common-services';
|
|
7
|
-
import { e as ResourceService, h as ResourceTopBannerEditComponent, i as ResourceCompanyCardComponent, b as ResourceNoteCardComponent, g as ResourceSharedModule } from './posiwise-resource-module-posiwise-resource-module-
|
|
8
|
-
import { B as BaseTopBannerComponent } from './posiwise-resource-module-base-top-banner.component-
|
|
7
|
+
import { e as ResourceService, h as ResourceTopBannerEditComponent, i as ResourceCompanyCardComponent, b as ResourceNoteCardComponent, g as ResourceSharedModule } from './posiwise-resource-module-posiwise-resource-module-BZKgTjU4.mjs';
|
|
8
|
+
import { B as BaseTopBannerComponent } from './posiwise-resource-module-base-top-banner.component-CJao3glW.mjs';
|
|
9
9
|
import * as i5 from '@posiwise/directives';
|
|
10
10
|
import * as i14 from '@angular/cdk/drag-drop';
|
|
11
11
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
@@ -26,6 +26,7 @@ import * as i10 from '@jsverse/transloco';
|
|
|
26
26
|
class IntegrationTopBannerComponent extends BaseTopBannerComponent {
|
|
27
27
|
constructor(resourceService, tagService, authService, titleService, cdr, injector) {
|
|
28
28
|
super(resourceService, tagService, authService, titleService, cdr, injector);
|
|
29
|
+
this.contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;
|
|
29
30
|
}
|
|
30
31
|
getSearchTerm() {
|
|
31
32
|
return 'Integrations';
|
|
@@ -291,4 +292,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
|
|
|
291
292
|
}] });
|
|
292
293
|
|
|
293
294
|
export { ResourceIntegrationsModule };
|
|
294
|
-
//# sourceMappingURL=posiwise-resource-module-resource-integrations.module-
|
|
295
|
+
//# sourceMappingURL=posiwise-resource-module-resource-integrations.module-CekT8vLc.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posiwise-resource-module-resource-integrations.module-CekT8vLc.mjs","sources":["../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.html","../../../../libs/resource-module/src/lib/public/modules/integrations/resource-integrations.module.ts"],"sourcesContent":["import { ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\n\n@Component({\n selector: 'pw-integration-top-banner',\n templateUrl: './integration-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n\n standalone: false\n})\nexport class IntegrationTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n titleService: Title,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, titleService, cdr, injector);\n }\n\n protected getSearchTerm(): string {\n return 'Integrations';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <!-- Left Content -->\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Integrated vendors'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getPostTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n <span class=\"blue-text\"></span>\n </h1>\n </div>\n </div>\n <!-- Add directly below .text-content, still inside .container -->\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n Browse below the vendor integrations<br />\n we support.\n </p>\n }\n </div>\n <!-- Buttons always at bottom -->\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\"\n class=\"cta-btn filled\">Speak to sales ></a>\n </div>\n </div>\n </div>\n <!-- Right Content -->\n <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\" ></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/men.png'\"\n alt=\"Integrated vendors banner\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectorRef,\n Component,\n Injector,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { CompanyData, Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { forkJoin } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-integration',\n templateUrl: './resource-integration.component.html',\n styleUrls: [\n './resource-integration.component.scss',\n '../resources/resources-shared.component.scss'\n ],\n\n standalone: false\n})\nexport class ResourceIntegrationComponent extends AppBaseComponent implements OnInit {\n @ViewChild('editIntegrationsModal') editIntegrationsModal: TemplateRef<CustomUploaderComponent>;\n editingIntegrations;\n distributorsData = CompanyData?.distributorsData;\n vendorsData = CompanyData?.vendorsData;\n\n textColor = this.appConfig?.color_codes?.text;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n distributerPosts = [];\n userLoggedIn: boolean;\n blogPostTag;\n isLoaded = false;\n resourcePostTag;\n blogPostVendorTag;\n isMasterSubscription;\n\n integrations = this.appConfig?.pages_config?.integrations;\n\n releaseNotesLink = '/resources/product-release-notes';\n q1NotesLink = '/resources/product-release-q1-2025';\n q3NotesLink = '/resources/product-release-q3-2024';\n q4NotesLink = '/resources/product-release-q4-2024';\n companyName;\n\n videoWebinarLoaded = false;\n videoDemoLoaded = false;\n youtubeVideoId = 'R7Vk219zbhA';\n videoTitle = 'CloudOlive Overview';\n sanitizedMicrosoftVideoUrl: SafeResourceUrl;\n sanitizedKesyaVideoUrl: SafeResourceUrl;\n integrationCountDisplay: number;\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n tagCategory;\n totalPosts: number;\n\n guideData = this.appConfig?.pages_config?.guides;\n editingGuides = { items: [] };\n user: User;\n\n canEditResourcesValue = false;\n domainId = this.appConfig.domain_id;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly modalService: NgbModal,\n private readonly tagService: TagService,\n private readonly authService: AuthService,\n private readonly adminService: AdminService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.companyName = this.appConfig.company.name;\n\n document.documentElement.style.setProperty('--text-color', this.textColor);\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n\n this.getTags();\n this.updateCanEditResourcesValue();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Integrations' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n openEditIntegrationsModal(modalRef) {\n this.editingIntegrations = JSON.parse(JSON.stringify(this.integrations));\n this.modalService.open(modalRef, {\n size: 'lg',\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n showIntegrations(): boolean {\n if (this.userLoggedIn) {\n return true;\n }\n\n if (Array.isArray(this.guideData?.items) && this.guideData.items.length) {\n const item = this.guideData.items[0];\n return (\n !!item?.title ||\n !!item?.description ||\n !!item?.guide_url ||\n (!!item?.image_url && !item.image_url.includes('default-image.png'))\n );\n }\n\n return false;\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.resourcePostTag = response.tags.find(\n tag => tag.name === 'Product Release Notes'\n );\n this.blogPostTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Distributors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n this.blogPostVendorTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Vendors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n\n // use forkJoin to fetch both sets of posts in parallel\n forkJoin({\n vendorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostVendorTag?.id\n ),\n distributorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostTag?.id\n )\n }).subscribe(({ vendorResponse, distributorResponse }) => {\n const sortedVendors = vendorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n const sortedDistributors = distributorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n\n // Show only integrations that have an image; count still includes all\n this.posts = sortedVendors.filter(post => this.hasDisplayableImage(post));\n this.distributerPosts = sortedDistributors.filter(post =>\n this.hasDisplayableImage(post)\n );\n\n const vendorCount = vendorResponse?.object_count ?? 0;\n const distributorCount = distributorResponse?.object_count ?? 0;\n const total = vendorCount + distributorCount;\n\n this.integrationCountDisplay = total === 0 ? 0 : Math.ceil(total / 10) * 10;\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n this.cdr.markForCheck();\n });\n }\n\n loadMicrosoftVideo(videoUrl) {\n window.open(videoUrl, '_blank', 'noopener,noreferrer');\n }\n\n loadKeseyaVideo(): void {\n const baseUrl = `https://www.youtube.com/embed/${this.youtubeVideoId}?autoplay=1`;\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.sanitizedKesyaVideoUrl = this.sanitizer.bypassSecurityTrustResourceUrl(baseUrl); // NOSONAR\n this.videoWebinarLoaded = true;\n }\n\n addIntegrationItem() {\n this.editingIntegrations.items.push({\n title: '',\n description: '',\n blog_url: '',\n image_url: '',\n video_url: ''\n });\n }\n\n removeIntegrationItem(index: number) {\n this.editingIntegrations.items.splice(index, 1);\n }\n\n dropIntegrationItems(event) {\n moveItemInArray(this.editingIntegrations.items, event.previousIndex, event.currentIndex);\n }\n\n saveIntegrations(modalRef) {\n const updatedIntegrations = {\n ...this.editingIntegrations\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n integrations: updatedIntegrations,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.integrations = updatedIntegrations;\n this.toast.success('Integrations updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n saveGuides(modalRef) {\n const updatedGuides = {\n ...this.editingGuides\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n guides: updatedGuides,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.guideData = updatedGuides;\n this.toast.success('Guides updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n openGuidesModal(template) {\n this.editingGuides = JSON.parse(JSON.stringify(this.guideData ?? { items: [] }));\n this.modalService.open(template, { size: 'xl' });\n }\n\n addGuide() {\n this.editingGuides.items.push({\n title: '',\n button_text: '',\n image_url: '',\n guide_url: '',\n description: ''\n });\n }\n\n removeGuide(index: number) {\n this.editingGuides.items.splice(index, 1);\n }\n\n dropGuides(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.editingGuides.items, event.previousIndex, event.currentIndex);\n }\n\n private hasDisplayableImage(post: {\n companyImg?: string;\n rectangular_picture?: { url?: string };\n }): boolean {\n if (post?.companyImg) {\n return true;\n }\n const url = post?.rectangular_picture?.url;\n return !!url && !url.includes('default-photo');\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n @if (isLoaded && integrationCountDisplay > 0) {\n <div >\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations (& counting)</h1>\n <p class=\"int-text\"> Search the current list of {{companyName}} vendor and distributor integrations below. <br />\n </p>\n </div>\n }\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (isLoaded && integrationCountDisplay > 0) {\n <div class=\"text-center pt-3 mt-4\">\n <p class=\"see-span\"> Don’t see what you’re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n class=\"int-span team-span\">Speak with our team to request a connection >\n </a>\n </p>\n </div>\n }\n </div>\n\n</section>\n<section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n </div>\n\n</section>\n@if (integrations) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h1 class=\"it-works-title mb-0\">{{integrations?.title || 'How it works'}}</h1>\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n }\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n @if (integrations?.items?.length > 0) {\n @for (integration of integrations?.items; track integration) {\n @if (integration?.image_url || integration?.title || integration?.description) {\n <div\n class=\"col-md-6\"\n >\n @if (integration?.video_url && integration?.video_url.includes('https')) {\n <div class=\"d-flex justify-content-center cursor-pointer\">\n @if (integration?.video_url) {\n <img\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n }\n </div>\n } @else {\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n }\n <ng-template #noVideo>\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </ng-template>\n </div>\n }\n }\n } @else {\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n }\n <ng-template #noIntegrations>\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n}\n@if (showIntegrations()) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h1 class=\"guide-title mb-3\">{{guideData?.items?.[0]?.title || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'}}</h1>\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n (keydown.enter)=\"openGuidesModal(guidesEditModal)\"\n (keydown.space)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit Integrations Section\"></i>\n }\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items?.[0]?.description || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'\">\n </p>\n <a class=\"vault-btn\"\n [href]=\"guideData?.items?.[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{guideData?.items?.[0]?.button_text || 'View the guide'}}\n </a>\n </div>\n <div class=\"col-md-6 text-center\">\n @if (guideData?.items?.[0]?.image_url && !guideData?.items?.[0]?.image_url?.includes('default-photo.jpg')) {\n <img\n [src]=\"guideData?.items?.[0]?.image_url\"\n alt=\"Guide\"\n class=\"guide-img\" />\n } @else {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n }\n <ng-template #noDataTemplate>\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n}\n</div>\n\n@if (resourcePostTag?.tag_category_id) {\n <pw-resource-note-card [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n @for (integration of editingIntegrations.items; track integration; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <span class=\"pw-label-style form-label mb-0\" id=\"integration-item-label\">Integration Item</span>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" id=\"input_integration.title_7712\" name=\"input_integration.title_7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" id=\"input_integration.description_9056\" name=\"input_integration.description_9056\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" id=\"input_integration.blog_url_7856\" name=\"input_integration.blog_url_7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" id=\"input_integration.image_url_9056\" name=\"input_integration.image_url_9056\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" id=\"input_integration.video_url_9056\" name=\"input_integration.video_url_9056\" />\n </div>\n </div>\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</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)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</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\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n @for (guide of editingGuides.items; track guide; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" id=\"input_guide.title_7072\" name=\"input_guide.title_7072\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" id=\"input_guide.button_text_7712\" name=\"input_guide.button_text_7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" id=\"input_guide.image_url_7856\" name=\"input_guide.image_url_7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" id=\"input_guide.guide_url_6944\" name=\"input_guide.guide_url_6944\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" [name]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</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)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { IntegrationTopBannerComponent } from '../../components/resource-integration/integration-top-banner/integration-top-banner.component';\nimport { ResourceIntegrationComponent } from '../../components/resource-integration/resource-integration.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceIntegrationComponent,\n data: {\n title: 'Resources - Integrations',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceIntegrationComponent, IntegrationTopBannerComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceIntegrationsModule {}\n"],"names":["i1.ResourceService","i4.ResourceTopBannerEditComponent","i1","i2.ResourceService","i3","i4","i5","i6.ResourceCompanyCardComponent","i7.ResourceNoteCardComponent","i8","i9","i10","i11","i12","i13","i15","i16.IntegrationTopBannerComponent","i17"],"mappings":"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"}
|