@posiwise/resource-module 0.0.183 → 0.0.185

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.
Files changed (105) hide show
  1. package/fesm2022/{posiwise-resource-module-base-top-banner.component-Dd-cEWOK.mjs → posiwise-resource-module-base-top-banner.component-BxV9TVG1.mjs} +15 -7
  2. package/fesm2022/posiwise-resource-module-base-top-banner.component-BxV9TVG1.mjs.map +1 -0
  3. package/fesm2022/posiwise-resource-module-posiwise-resource-module-DfgyQYhP.mjs +1870 -0
  4. package/fesm2022/posiwise-resource-module-posiwise-resource-module-DfgyQYhP.mjs.map +1 -0
  5. package/fesm2022/posiwise-resource-module-resource-blogs.module-DHqU4Ypf.mjs +68 -0
  6. package/fesm2022/posiwise-resource-module-resource-blogs.module-DHqU4Ypf.mjs.map +1 -0
  7. package/fesm2022/posiwise-resource-module-resource-case-studies.module-DghO167h.mjs +134 -0
  8. package/fesm2022/posiwise-resource-module-resource-case-studies.module-DghO167h.mjs.map +1 -0
  9. package/fesm2022/posiwise-resource-module-resource-events.module-DtZaPh7n.mjs +240 -0
  10. package/fesm2022/posiwise-resource-module-resource-events.module-DtZaPh7n.mjs.map +1 -0
  11. package/fesm2022/posiwise-resource-module-resource-hub.module-jxpqriFN.mjs +241 -0
  12. package/fesm2022/posiwise-resource-module-resource-hub.module-jxpqriFN.mjs.map +1 -0
  13. package/fesm2022/posiwise-resource-module-resource-integrations.module-xg0Ziiw8.mjs +294 -0
  14. package/fesm2022/posiwise-resource-module-resource-integrations.module-xg0Ziiw8.mjs.map +1 -0
  15. package/fesm2022/posiwise-resource-module-resource-post.module-DcudivrB.mjs +314 -0
  16. package/fesm2022/posiwise-resource-module-resource-post.module-DcudivrB.mjs.map +1 -0
  17. package/fesm2022/posiwise-resource-module-resource-release-notes.module-CuQLcCDR.mjs +109 -0
  18. package/fesm2022/posiwise-resource-module-resource-release-notes.module-CuQLcCDR.mjs.map +1 -0
  19. package/fesm2022/posiwise-resource-module-resource-root.module-gVu6s-NV.mjs +398 -0
  20. package/fesm2022/posiwise-resource-module-resource-root.module-gVu6s-NV.mjs.map +1 -0
  21. package/fesm2022/posiwise-resource-module-resource-videos.module-xt6vq-z-.mjs +68 -0
  22. package/fesm2022/posiwise-resource-module-resource-videos.module-xt6vq-z-.mjs.map +1 -0
  23. package/fesm2022/posiwise-resource-module-resource-white-papers.module-Bm2M2II6.mjs +69 -0
  24. package/fesm2022/posiwise-resource-module-resource-white-papers.module-Bm2M2II6.mjs.map +1 -0
  25. package/fesm2022/posiwise-resource-module.mjs +1 -1
  26. package/package.json +6 -6
  27. package/types/posiwise-resource-module.d.ts +521 -0
  28. package/fesm2022/posiwise-resource-module-base-top-banner.component-Dd-cEWOK.mjs.map +0 -1
  29. package/fesm2022/posiwise-resource-module-posiwise-resource-module-CWeJVSOI.mjs +0 -1802
  30. package/fesm2022/posiwise-resource-module-posiwise-resource-module-CWeJVSOI.mjs.map +0 -1
  31. package/fesm2022/posiwise-resource-module-resource-blogs.module-DF9jSJ0X.mjs +0 -69
  32. package/fesm2022/posiwise-resource-module-resource-blogs.module-DF9jSJ0X.mjs.map +0 -1
  33. package/fesm2022/posiwise-resource-module-resource-case-studies.module-BeMlmXY-.mjs +0 -133
  34. package/fesm2022/posiwise-resource-module-resource-case-studies.module-BeMlmXY-.mjs.map +0 -1
  35. package/fesm2022/posiwise-resource-module-resource-events.module-DsvJFj3K.mjs +0 -228
  36. package/fesm2022/posiwise-resource-module-resource-events.module-DsvJFj3K.mjs.map +0 -1
  37. package/fesm2022/posiwise-resource-module-resource-hub.module-FmZJs_UC.mjs +0 -233
  38. package/fesm2022/posiwise-resource-module-resource-hub.module-FmZJs_UC.mjs.map +0 -1
  39. package/fesm2022/posiwise-resource-module-resource-integrations.module-CGlY0hNK.mjs +0 -284
  40. package/fesm2022/posiwise-resource-module-resource-integrations.module-CGlY0hNK.mjs.map +0 -1
  41. package/fesm2022/posiwise-resource-module-resource-post.module-BYxES6zP.mjs +0 -294
  42. package/fesm2022/posiwise-resource-module-resource-post.module-BYxES6zP.mjs.map +0 -1
  43. package/fesm2022/posiwise-resource-module-resource-release-notes.module-D5r9nNZn.mjs +0 -104
  44. package/fesm2022/posiwise-resource-module-resource-release-notes.module-D5r9nNZn.mjs.map +0 -1
  45. package/fesm2022/posiwise-resource-module-resource-root.module-BP_9gdii.mjs +0 -392
  46. package/fesm2022/posiwise-resource-module-resource-root.module-BP_9gdii.mjs.map +0 -1
  47. package/fesm2022/posiwise-resource-module-resource-videos.module-BGOf2jrC.mjs +0 -69
  48. package/fesm2022/posiwise-resource-module-resource-videos.module-BGOf2jrC.mjs.map +0 -1
  49. package/fesm2022/posiwise-resource-module-resource-white-papers.module-WOMqD8QC.mjs +0 -70
  50. package/fesm2022/posiwise-resource-module-resource-white-papers.module-WOMqD8QC.mjs.map +0 -1
  51. package/index.d.ts +0 -19
  52. package/lib/public/components/base/base-resource.component.d.ts +0 -43
  53. package/lib/public/components/base/base-top-banner.component.d.ts +0 -38
  54. package/lib/public/components/reslease-note-card/release-note-card.component.d.ts +0 -57
  55. package/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.d.ts +0 -12
  56. package/lib/public/components/resource-blogs/resource-blog.component.d.ts +0 -11
  57. package/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.d.ts +0 -40
  58. package/lib/public/components/resource-case-studies/resource-case-studies.component.d.ts +0 -20
  59. package/lib/public/components/resource-company-card/resource-company-card.component.d.ts +0 -39
  60. package/lib/public/components/resource-contact-us/resource-contact-us.module.d.ts +0 -7
  61. package/lib/public/components/resource-edit-card/resource-edit-card.component.d.ts +0 -52
  62. package/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.d.ts +0 -19
  63. package/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.d.ts +0 -12
  64. package/lib/public/components/resource-integration/resource-integration.component.d.ts +0 -89
  65. package/lib/public/components/resource-post/related-resources/related-resources.component.d.ts +0 -46
  66. package/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.d.ts +0 -40
  67. package/lib/public/components/resource-post/resource-post-details/resource-post-details.component.d.ts +0 -71
  68. package/lib/public/components/resource-post/resource-post.component.d.ts +0 -17
  69. package/lib/public/components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component.d.ts +0 -12
  70. package/lib/public/components/resource-release-notes/resource-release-notes.component.d.ts +0 -23
  71. package/lib/public/components/resource-top-banner-edit/resource-top-banner-edit.component.d.ts +0 -37
  72. package/lib/public/components/resource-vault/resource-vault.component.d.ts +0 -23
  73. package/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.d.ts +0 -48
  74. package/lib/public/components/resource-videos/resource-videos-top-banner/resource-videos-top-banner.component.d.ts +0 -12
  75. package/lib/public/components/resource-videos/resource-videos.component.d.ts +0 -11
  76. package/lib/public/components/resource-webinars/replay-event-cards/replay-event-cards.component.d.ts +0 -33
  77. package/lib/public/components/resource-webinars/resource-webinars.component.d.ts +0 -36
  78. package/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.d.ts +0 -44
  79. package/lib/public/components/resources/resource-tags/resource-tags.component.d.ts +0 -31
  80. package/lib/public/components/resources/resources.component.d.ts +0 -24
  81. package/lib/public/components/resources/vault-section/vault-section.component.d.ts +0 -54
  82. package/lib/public/components/resources-hub/resources-hub.component.d.ts +0 -52
  83. package/lib/public/components/testimonial-card/testimonial-card.component.d.ts +0 -14
  84. package/lib/public/components/white-papers/white-papers-top-banner/white-papers-top-banner.component.d.ts +0 -12
  85. package/lib/public/components/white-papers/white-papers.component.d.ts +0 -11
  86. package/lib/public/modules/blogs/resource-blogs.module.d.ts +0 -10
  87. package/lib/public/modules/case-studies/resource-case-studies.module.d.ts +0 -10
  88. package/lib/public/modules/events/resource-events.module.d.ts +0 -10
  89. package/lib/public/modules/hub/resource-hub.module.d.ts +0 -9
  90. package/lib/public/modules/integrations/resource-integrations.module.d.ts +0 -10
  91. package/lib/public/modules/post/resource-post.module.d.ts +0 -11
  92. package/lib/public/modules/release-notes/resource-release-notes.module.d.ts +0 -10
  93. package/lib/public/modules/root/resource-root-shared.module.d.ts +0 -17
  94. package/lib/public/modules/root/resource-root.module.d.ts +0 -11
  95. package/lib/public/modules/videos/resource-videos.module.d.ts +0 -10
  96. package/lib/public/modules/white-papers/resource-white-papers.module.d.ts +0 -10
  97. package/lib/public/resource-public.module.d.ts +0 -7
  98. package/lib/public/resource-public.routing.module.d.ts +0 -7
  99. package/lib/public/shared/resource-cards.module.d.ts +0 -32
  100. package/lib/public/shared/resource-edit.module.d.ts +0 -22
  101. package/lib/public/shared/resource-shared.module.d.ts +0 -20
  102. package/lib/resource.module.d.ts +0 -7
  103. package/lib/resource.service.d.ts +0 -21
  104. package/lib/shared/models/resource.model.d.ts +0 -3
  105. package/lib/shared/resource-modal.interface.d.ts +0 -6
@@ -1,233 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { HostListener, ViewEncapsulation, Component, NgModule } from '@angular/core';
3
- import * as i1$1 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-CWeJVSOI.mjs';
10
- import * as i3 from '@angular/common';
11
- import * as i1 from '@angular/forms';
12
- import * as i8 from '@posiwise/directives';
13
- import * as i6 from '@posiwise/utils';
14
- import * as i6$1 from '@posiwise/shared-components';
15
- import * as i7 from 'primeng/progressspinner';
16
- import * as i11 from 'primeng/inputtext';
17
- import * as i12 from '@posiwise/pipes';
18
-
19
- class ResourceHubComponent extends AppBaseComponent {
20
- constructor(resourceService, authService, tagService, injector) {
21
- super(injector);
22
- this.resourceService = resourceService;
23
- this.authService = authService;
24
- this.tagService = tagService;
25
- this.delayTimeout = null;
26
- this.data = [];
27
- this.posts = [];
28
- this.tags = [];
29
- this.selectedTags = [];
30
- this.currentPage = 1;
31
- this.pageSize = 20;
32
- this.objectCount = 0;
33
- this.searchTextItems = '';
34
- this.searchInput = false;
35
- this.loading = true;
36
- this.loaded = false;
37
- this.scrollLocked = false;
38
- this.iconClasses = [
39
- 'fa-lightbulb',
40
- 'fa-rocket',
41
- 'fa-file-alt',
42
- 'fa-users',
43
- 'fa-video',
44
- 'fa-pencil-alt',
45
- 'fa-book-open',
46
- 'fa-cogs'
47
- ];
48
- this.canEditResourcesValue = false;
49
- }
50
- ngOnInit() {
51
- this.authService.getToken$().subscribe(res => {
52
- this.userLoggedIn = !!res;
53
- if (this.userLoggedIn) {
54
- this.localStorage.getItem$('product').subscribe(res => {
55
- const data = res ? JSON.parse(res) : null;
56
- this.subscriptionId = data?.subscriptionId;
57
- });
58
- this.userSub = this.userService.getUserInfo().subscribe(data => {
59
- this.user = data;
60
- this.updateCanEditResourcesValue();
61
- this.getPostsAndTags();
62
- });
63
- }
64
- else {
65
- this.getPostsAndTags();
66
- }
67
- });
68
- this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
69
- this.readingTime = 0;
70
- }
71
- getPostsAndTags() {
72
- this.loading = true;
73
- this.loaded = false;
74
- forkJoin({
75
- resPosts: this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), this.currentPage, this.pageSize, this.searchTextItems),
76
- resTags: this.tagService.getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
77
- })
78
- .subscribe(res => {
79
- this.posts = res?.resPosts?.posts;
80
- this.objectCount = res?.resPosts.object_count;
81
- this.data = res?.resPosts?.posts;
82
- this.data = res?.resPosts?.posts.map(post => ({
83
- ...post,
84
- expandedTags: false
85
- }));
86
- this.totalRecords = this.posts?.length;
87
- this.tags = res?.resTags?.tags?.filter(tag => tag.visible_in_resources);
88
- this.tags = this.tags.map(tag => ({
89
- ...tag
90
- }));
91
- })
92
- .add(() => {
93
- this.loading = false;
94
- this.loaded = true;
95
- });
96
- }
97
- toggleDropdown(event, post) {
98
- event.stopPropagation();
99
- post.showDropdown = !post.showDropdown;
100
- }
101
- getPosts(page, pageSize, fetchAll = false, append = false) {
102
- if (fetchAll)
103
- this.selectedTags = [];
104
- if (!append) {
105
- this.loading = true;
106
- this.loaded = false;
107
- }
108
- const tagCategoryParam = this.selectedTags.map(tag => tag.tag_category_id).join(',');
109
- this.resourceService
110
- .getPublicPosts(this.getEffectiveSubscriptionId(), page, append ? 10 : pageSize, this.searchTextItems, tagCategoryParam)
111
- .subscribe(response => {
112
- this.objectCount = response.object_count;
113
- this.posts = append ? [...this.posts, ...response.posts] : response.posts;
114
- this.data = [...this.posts];
115
- this.totalRecords = this.posts?.length;
116
- })
117
- .add(() => {
118
- this.loading = false;
119
- this.loaded = true;
120
- });
121
- }
122
- onSearch(seconds) {
123
- let delay = 0;
124
- delay = seconds * 1000;
125
- clearTimeout(this.delayTimeout);
126
- const delayTimeout = setTimeout(() => {
127
- this.currentPage = 1;
128
- this.getPosts(1, this.pageSize);
129
- }, delay);
130
- this.delayTimeout = delayTimeout;
131
- }
132
- navigateToTagList() {
133
- HelperService.navigateToTagList();
134
- }
135
- onWindowScroll() {
136
- const scrollPosition = window.scrollY + window.innerHeight;
137
- const pageHeight = document.documentElement.scrollHeight;
138
- const nearBottom = scrollPosition >= pageHeight - 100;
139
- if (nearBottom &&
140
- this.posts.length < this.objectCount &&
141
- !this.loading &&
142
- !this.scrollLocked) {
143
- this.scrollLocked = true;
144
- this.currentPage += 1;
145
- this.getPosts(this.currentPage, this.pageSize, false, true);
146
- setTimeout(() => {
147
- this.scrollLocked = false;
148
- }, 500);
149
- }
150
- }
151
- isSelected(tagId) {
152
- return this.selectedTags.map(tag => tag.id).includes(tagId);
153
- }
154
- tagPost(selectedTag) {
155
- const index = this.selectedTags.findIndex(tag => tag.tag_category_id === selectedTag?.tag_category_id && tag.id === selectedTag.id);
156
- if (index === -1) {
157
- this.selectedTags.push({
158
- tag_category_id: selectedTag?.tag_category_id,
159
- id: selectedTag.id
160
- });
161
- }
162
- else {
163
- this.selectedTags.splice(index, 1);
164
- }
165
- this.currentPage = 1;
166
- this.getPosts(1, this.pageSize);
167
- }
168
- thisPostReadingTime(text) {
169
- if (text) {
170
- const wordsPerMinute = 200;
171
- const noOfWords = text.split(/\s/g).length;
172
- const minutes = noOfWords / wordsPerMinute;
173
- const readTime = Math.ceil(minutes);
174
- return `${readTime} minute read`;
175
- }
176
- return '';
177
- }
178
- ngOnDestroy() {
179
- this.userSub?.unsubscribe();
180
- super.ngOnDestroy();
181
- }
182
- /** Helper method to get effective subscription ID */
183
- getEffectiveSubscriptionId() {
184
- return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.appConfig.master_subscription.subscription_id);
185
- }
186
- updateCanEditResourcesValue() {
187
- if (this.userLoggedIn && this.user) {
188
- this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
189
- }
190
- else {
191
- this.canEditResourcesValue = false;
192
- }
193
- }
194
- canEditResources() {
195
- return this.canEditResourcesValue;
196
- }
197
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubComponent, deps: [{ token: ResourceService }, { token: i2.AuthService }, { token: i2.TagService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", 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 <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\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 <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <label for=\"resources-hub-search\" class=\"visually-hidden\">Search resources</label>\n <input type=\"text\" id=\"resources-hub-search\" name=\"resources-hub-search\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\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 <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n *ngFor=\"let tag of tags\">\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 <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\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 <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n </a>\n </div>\n\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\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\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 </div>\n\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 <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\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 </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\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 </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\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 </ng-container>\n </div>\n\n\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 </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\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;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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { kind: "component", type: ResourceEditCardLazyComponent, selector: "pw-resource-edit-card-lazy", inputs: ["id", "resourceData", "canEdit"], outputs: ["updated"] }, { kind: "component", type: i6.ResourceHeaderComponent, selector: "pw-resource-header", inputs: ["user", "userLoggedIn"] }, { kind: "component", type: i6$1.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i12.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i12.TextTruncatePipe, name: "textTruncate" }], encapsulation: i0.ViewEncapsulation.None }); }
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubComponent, decorators: [{
201
- type: Component,
202
- 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 <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\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 <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <label for=\"resources-hub-search\" class=\"visually-hidden\">Search resources</label>\n <input type=\"text\" id=\"resources-hub-search\" name=\"resources-hub-search\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\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 <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n *ngFor=\"let tag of tags\">\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 <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\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 <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n </a>\n </div>\n\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\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\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 </div>\n\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 <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\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 </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\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 </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\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 </ng-container>\n </div>\n\n\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 </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\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;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"] }]
203
- }], ctorParameters: () => [{ type: ResourceService }, { type: i2.AuthService }, { type: i2.TagService }, { type: i0.Injector }], propDecorators: { onWindowScroll: [{
204
- type: HostListener,
205
- args: ['window:scroll', []]
206
- }] } });
207
-
208
- const routes = [
209
- {
210
- path: '',
211
- component: ResourceHubComponent,
212
- data: {
213
- title: 'Resources - Hub',
214
- permission: 'Pages.Blog',
215
- preload: false
216
- }
217
- }
218
- ];
219
- class ResourceHubModule {
220
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
221
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubModule, declarations: [ResourceHubComponent], imports: [ResourceSharedModule, i1$1.RouterModule] }); }
222
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubModule, imports: [ResourceSharedModule, RouterModule.forChild(routes)] }); }
223
- }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ResourceHubModule, decorators: [{
225
- type: NgModule,
226
- args: [{
227
- declarations: [ResourceHubComponent],
228
- imports: [ResourceSharedModule, RouterModule.forChild(routes)]
229
- }]
230
- }] });
231
-
232
- export { ResourceHubModule };
233
- //# sourceMappingURL=posiwise-resource-module-resource-hub.module-FmZJs_UC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-hub.module-FmZJs_UC.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 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 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 });\n this.userSub = this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.updateCanEditResourcesValue();\n this.getPostsAndTags();\n });\n } else {\n this.getPostsAndTags();\n }\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 })\n .add(() => {\n this.loading = false;\n this.loaded = true;\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 })\n .add(() => {\n this.loading = false;\n this.loaded = true;\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 <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\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 <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <label for=\"resources-hub-search\" class=\"visually-hidden\">Search resources</label>\n <input type=\"text\" id=\"resources-hub-search\" name=\"resources-hub-search\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\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 <div class=\"col-md-3 col-sm-6 mb-4 col-6\"\n *ngFor=\"let tag of tags\">\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 <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\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 <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author profile\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Default author profile\"\n class=\"default-user-image\" />\n </a>\n </div>\n\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\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\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 </div>\n\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 <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\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 </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\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 </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\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 </ng-container>\n </div>\n\n\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 </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\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","i8","i9","i10","i1"],"mappings":"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"}