@posiwise/resource-module 0.0.206 → 0.0.207

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 (43) hide show
  1. package/fesm2022/{posiwise-resource-module-base-top-banner.component-BwujN_up.mjs → posiwise-resource-module-base-top-banner.component-DvZKkqPA.mjs} +4 -4
  2. package/fesm2022/posiwise-resource-module-base-top-banner.component-DvZKkqPA.mjs.map +1 -0
  3. package/fesm2022/{posiwise-resource-module-resource-blogs.module-DEXimOOY.mjs → posiwise-resource-module-resource-blogs.module-LKr-SjAo.mjs} +3 -3
  4. package/fesm2022/{posiwise-resource-module-resource-blogs.module-DEXimOOY.mjs.map → posiwise-resource-module-resource-blogs.module-LKr-SjAo.mjs.map} +1 -1
  5. package/fesm2022/{posiwise-resource-module-resource-cards.module-DWV2LWdy.mjs → posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs} +15 -15
  6. package/fesm2022/posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs.map +1 -0
  7. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-CQHAhbsv.mjs → posiwise-resource-module-resource-case-studies.module-CzB9wtnf.mjs} +4 -4
  8. package/fesm2022/posiwise-resource-module-resource-case-studies.module-CzB9wtnf.mjs.map +1 -0
  9. package/fesm2022/{posiwise-resource-module-resource-edit-card.component-2VvTki2u.mjs → posiwise-resource-module-resource-edit-card.component-d9cDJUJf.mjs} +3 -3
  10. package/fesm2022/posiwise-resource-module-resource-edit-card.component-d9cDJUJf.mjs.map +1 -0
  11. package/fesm2022/{posiwise-resource-module-resource-events.module-D8mxidoP.mjs → posiwise-resource-module-resource-events.module-BO9CcIFp.mjs} +5 -5
  12. package/fesm2022/posiwise-resource-module-resource-events.module-BO9CcIFp.mjs.map +1 -0
  13. package/fesm2022/{posiwise-resource-module-resource-hub.module-DklN3KeA.mjs → posiwise-resource-module-resource-hub.module-B3EZao2L.mjs} +10 -10
  14. package/fesm2022/posiwise-resource-module-resource-hub.module-B3EZao2L.mjs.map +1 -0
  15. package/fesm2022/{posiwise-resource-module-resource-integrations.module-iTlhrAYt.mjs → posiwise-resource-module-resource-integrations.module-Djkoz9EF.mjs} +11 -11
  16. package/fesm2022/posiwise-resource-module-resource-integrations.module-Djkoz9EF.mjs.map +1 -0
  17. package/fesm2022/{posiwise-resource-module-resource-jobs.module-DpTqKqS9.mjs → posiwise-resource-module-resource-jobs.module-Dw-7KbET.mjs} +4 -4
  18. package/fesm2022/{posiwise-resource-module-resource-jobs.module-DpTqKqS9.mjs.map → posiwise-resource-module-resource-jobs.module-Dw-7KbET.mjs.map} +1 -1
  19. package/fesm2022/{posiwise-resource-module-resource-post.module-PU-KBg_G.mjs → posiwise-resource-module-resource-post.module-C343zv-t.mjs} +13 -13
  20. package/fesm2022/posiwise-resource-module-resource-post.module-C343zv-t.mjs.map +1 -0
  21. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-WESwTVu8.mjs → posiwise-resource-module-resource-release-notes.module-CE21Yiss.mjs} +4 -4
  22. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-WESwTVu8.mjs.map → posiwise-resource-module-resource-release-notes.module-CE21Yiss.mjs.map} +1 -1
  23. package/fesm2022/{posiwise-resource-module-resource-root.module-TMvR1c1H.mjs → posiwise-resource-module-resource-root.module-BzvAo30C.mjs} +3 -3
  24. package/fesm2022/posiwise-resource-module-resource-root.module-BzvAo30C.mjs.map +1 -0
  25. package/fesm2022/{posiwise-resource-module-resource-videos.module-BCDet6S9.mjs → posiwise-resource-module-resource-videos.module-OJpXslFg.mjs} +3 -3
  26. package/fesm2022/{posiwise-resource-module-resource-videos.module-BCDet6S9.mjs.map → posiwise-resource-module-resource-videos.module-OJpXslFg.mjs.map} +1 -1
  27. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-DtxUgC_Z.mjs → posiwise-resource-module-resource-white-papers.module-rr8wWULi.mjs} +3 -3
  28. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-DtxUgC_Z.mjs.map → posiwise-resource-module-resource-white-papers.module-rr8wWULi.mjs.map} +1 -1
  29. package/fesm2022/{posiwise-resource-module-resource.service-DAXsq-WG.mjs → posiwise-resource-module-resource.service-BBvcVvWN.mjs} +10 -10
  30. package/fesm2022/posiwise-resource-module-resource.service-BBvcVvWN.mjs.map +1 -0
  31. package/fesm2022/posiwise-resource-module.mjs +13 -13
  32. package/package.json +1 -1
  33. package/types/posiwise-resource-module.d.ts +17 -16
  34. package/fesm2022/posiwise-resource-module-base-top-banner.component-BwujN_up.mjs.map +0 -1
  35. package/fesm2022/posiwise-resource-module-resource-cards.module-DWV2LWdy.mjs.map +0 -1
  36. package/fesm2022/posiwise-resource-module-resource-case-studies.module-CQHAhbsv.mjs.map +0 -1
  37. package/fesm2022/posiwise-resource-module-resource-edit-card.component-2VvTki2u.mjs.map +0 -1
  38. package/fesm2022/posiwise-resource-module-resource-events.module-D8mxidoP.mjs.map +0 -1
  39. package/fesm2022/posiwise-resource-module-resource-hub.module-DklN3KeA.mjs.map +0 -1
  40. package/fesm2022/posiwise-resource-module-resource-integrations.module-iTlhrAYt.mjs.map +0 -1
  41. package/fesm2022/posiwise-resource-module-resource-post.module-PU-KBg_G.mjs.map +0 -1
  42. package/fesm2022/posiwise-resource-module-resource-root.module-TMvR1c1H.mjs.map +0 -1
  43. package/fesm2022/posiwise-resource-module-resource.service-DAXsq-WG.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-DAXsq-WG.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-BBvcVvWN.mjs";
2
2
  import * as i0 from "@angular/core";
3
3
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from "@angular/core";
4
4
  import { AuthService, TagService } from "@posiwise/common-services";
@@ -49,8 +49,8 @@ var BaseTopBannerComponent = class BaseTopBannerComponent extends AppBaseCompone
49
49
  categories: this.tagService.getAllTagCategories({ search: this.getSearchTerm() }, this.getEffectiveSubscriptionId()),
50
50
  tags: this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId())
51
51
  }).subscribe(({ categories, tags }) => {
52
- this.tagCategory = categories?.tag_categories?.[0];
53
- this.blogPostTag = tags.tags.find((tag) => tag.tag_category_id === this.tagCategory?.id);
52
+ this.tagCategory = categories?.result?.[0];
53
+ this.blogPostTag = tags.result.find((tag) => tag.tag_category_id === this.tagCategory?.id);
54
54
  this.updateSEOMetadata();
55
55
  this.cdr.markForCheck();
56
56
  }).add(() => {
@@ -123,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({
123
123
  });
124
124
  export { BaseTopBannerComponent as t };
125
125
 
126
- //# sourceMappingURL=posiwise-resource-module-base-top-banner.component-BwujN_up.mjs.map
126
+ //# sourceMappingURL=posiwise-resource-module-base-top-banner.component-DvZKkqPA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posiwise-resource-module-base-top-banner.component-DvZKkqPA.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/base/base-top-banner.component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n template: '',\n\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class BaseTopBannerComponent extends AppBaseComponent implements OnInit {\n protected readonly resourceService = inject(ResourceService);\n protected readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n private readonly titleService = inject(Title);\n protected readonly cdr = inject(ChangeDetectorRef);\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n testimonialsPosts = [];\n userLoggedIn: boolean;\n blogPostTag;\n tagCategory;\n blogTestimonialsPostTag;\n isLoaded = false;\n user: User;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n ngOnInit() {\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 this.updateCanEditResourcesValue();\n this.getTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n protected getTags() {\n this.isLoaded = false;\n forkJoin({\n categories: this.tagService.getAllTagCategories(\n { search: this.getSearchTerm() },\n this.getEffectiveSubscriptionId()\n ),\n tags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(({ categories, tags }) => {\n this.tagCategory = categories?.result?.[0];\n this.blogPostTag = tags.result.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n this.updateSEOMetadata();\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n protected getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n protected updateSEOMetadata() {\n if (this.blogPostTag) {\n // Update page title if meta_title is available\n if (this.blogPostTag.meta_title) {\n this.titleService.setTitle(this.blogPostTag.meta_title);\n }\n\n // Update meta description if meta_description is available\n if (this.blogPostTag.meta_description) {\n this.updateMetaDescription(this.blogPostTag.meta_description);\n }\n }\n }\n\n private updateMetaDescription(description: string) {\n let metaDescription = document.querySelector('meta[name=\"description\"]');\n if (!metaDescription) {\n metaDescription = document.createElement('meta');\n metaDescription.setAttribute('name', 'description');\n document.head.appendChild(metaDescription);\n }\n metaDescription.setAttribute('content', description);\n }\n\n // Abstract method that each component must implement\n protected abstract getSearchTerm(): string;\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"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { a as ResourceCardComponent, i as BaseResourceComponent } from "./posiwise-resource-module-resource-cards.module-DWV2LWdy.mjs";
1
+ import { a as ResourceCardComponent, i as BaseResourceComponent } from "./posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs";
2
2
  import { ResourceSharedModule, ResourceTopBannerEditComponent } from "./posiwise-resource-module.mjs";
3
- import { t as BaseTopBannerComponent } from "./posiwise-resource-module-base-top-banner.component-BwujN_up.mjs";
3
+ import { t as BaseTopBannerComponent } from "./posiwise-resource-module-base-top-banner.component-DvZKkqPA.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { ChangeDetectionStrategy, Component, NgModule } from "@angular/core";
6
6
  import * as i1 from "@angular/router";
@@ -243,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({
243
243
  });
244
244
  export { ResourceBlogsModule };
245
245
 
246
- //# sourceMappingURL=posiwise-resource-module-resource-blogs.module-DEXimOOY.mjs.map
246
+ //# sourceMappingURL=posiwise-resource-module-resource-blogs.module-LKr-SjAo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-blogs.module-DEXimOOY.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog.component.html","../../../../libs/resource-module/src/lib/public/modules/blogs/resource-blogs.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { LazyImgDirective } from '@posiwise/directives';\n\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\nimport { ResourceTopBannerEditComponent } from '../../resource-top-banner-edit/resource-top-banner-edit.component';\n\n@Component({\n selector: 'pw-resource-blog-top-banner',\n templateUrl: './resource-blog-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n './resource-blog-top-banner.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ResourceTopBannerEditComponent, LazyImgDirective]\n})\nexport class ResourceBlogTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n protected getSearchTerm(): string {\n return 'Blog Posts';\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 || 'Blogs'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </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 Here, we share our insights, learnings &amp; the occasional meme.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></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/service-provider-man.png'\"\n alt=\"Blogs banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { BaseResourceComponent } from '../base/base-resource.component';\nimport { ResourceCardComponent } from '../resource-post/related-resources/resource-cards/resource-cards.component';\n\nimport { ResourceBlogTopBannerComponent } from './resource-blog-top-banner/resource-blog-top-banner.component';\n\n@Component({\n selector: 'pw-resource-blog',\n templateUrl: './resource-blog.component.html',\n styleUrls: [\n '../resources/resources-shared.component.scss',\n '../resource-post/related-resources/related-resources.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourceBlogTopBannerComponent,\n ResourceCardComponent,\n Trial4ContactUsComponent\n ]\n})\nexport class ResourceBlogComponent extends BaseResourceComponent {\n protected getResourceType(): string {\n return 'Blog Posts';\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n\n<pw-resource-blog-top-banner />\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-cards [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [isHeaderVisible]=\"false\" resourceLink=\"/resources/blogs\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-cards>\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceBlogComponent } from '../../components/resource-blogs/resource-blog.component';\nimport { ResourceBlogTopBannerComponent } from '../../components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceBlogComponent,\n data: {\n title: 'Resources - Blogs',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [\n ResourceSharedModule,\n RouterModule.forChild(routes),\n ResourceBlogComponent,\n ResourceBlogTopBannerComponent\n ]\n})\nexport class ResourceBlogsModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-blogs.module-LKr-SjAo.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-blogs/resource-blog.component.html","../../../../libs/resource-module/src/lib/public/modules/blogs/resource-blogs.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { LazyImgDirective } from '@posiwise/directives';\n\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\nimport { ResourceTopBannerEditComponent } from '../../resource-top-banner-edit/resource-top-banner-edit.component';\n\n@Component({\n selector: 'pw-resource-blog-top-banner',\n templateUrl: './resource-blog-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n './resource-blog-top-banner.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ResourceTopBannerEditComponent, LazyImgDirective]\n})\nexport class ResourceBlogTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n protected getSearchTerm(): string {\n return 'Blog Posts';\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 || 'Blogs'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </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 Here, we share our insights, learnings &amp; the occasional meme.\n </p>\n }\n </div>\n <div class=\"d-flex gap-3 flex-wrap mt-3\">\n <a [href]=\"contactUsUrl\" target=\"_blank\" rel=\"noopener noreferrer\"\n class=\"cta-btn filled\">Talk to us <i class=\"fa fa-chevron-right cta-btn__icon\" aria-hidden=\"true\"></i></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/service-provider-man.png'\"\n alt=\"Blogs banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { Trial4ContactUsComponent } from '@posiwise/resource-contact-us';\nimport { ResourceHeaderComponent } from '@posiwise/utils';\n\nimport { BaseResourceComponent } from '../base/base-resource.component';\nimport { ResourceCardComponent } from '../resource-post/related-resources/resource-cards/resource-cards.component';\n\nimport { ResourceBlogTopBannerComponent } from './resource-blog-top-banner/resource-blog-top-banner.component';\n\n@Component({\n selector: 'pw-resource-blog',\n templateUrl: './resource-blog.component.html',\n styleUrls: [\n '../resources/resources-shared.component.scss',\n '../resource-post/related-resources/related-resources.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ResourceHeaderComponent,\n ResourceBlogTopBannerComponent,\n ResourceCardComponent,\n Trial4ContactUsComponent\n ]\n})\nexport class ResourceBlogComponent extends BaseResourceComponent {\n protected getResourceType(): string {\n return 'Blog Posts';\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<main>\n\n<pw-resource-blog-top-banner />\n\n@if (blogPostTag?.tag_category_id) {\n <pw-resource-cards [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [isHeaderVisible]=\"false\" resourceLink=\"/resources/blogs\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-cards>\n}\n\n</main>\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceBlogComponent } from '../../components/resource-blogs/resource-blog.component';\nimport { ResourceBlogTopBannerComponent } from '../../components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceBlogComponent,\n data: {\n title: 'Resources - Blogs',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n imports: [\n ResourceSharedModule,\n RouterModule.forChild(routes),\n ResourceBlogComponent,\n ResourceBlogTopBannerComponent\n ]\n})\nexport class ResourceBlogsModule {}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-DAXsq-WG.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-BBvcVvWN.mjs";
2
2
  import * as i0 from "@angular/core";
3
3
  import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostListener, Input, NgModule, Output, ViewChild, ViewContainerRef, inject } from "@angular/core";
4
4
  import { AuthService, TagService } from "@posiwise/common-services";
@@ -88,7 +88,7 @@ var ResourceEditCardLazyComponent = class ResourceEditCardLazyComponent {
88
88
  if (this.componentRef || this.loading) return;
89
89
  this.loading = true;
90
90
  try {
91
- const ResourceEditCardComponent = (await import("./posiwise-resource-module-resource-edit-card.component-2VvTki2u.mjs")).ResourceEditCardComponent;
91
+ const ResourceEditCardComponent = (await import("./posiwise-resource-module-resource-edit-card.component-d9cDJUJf.mjs")).ResourceEditCardComponent;
92
92
  if (!this.container) return;
93
93
  this.container.clear();
94
94
  this.componentRef = this.container.createComponent(ResourceEditCardComponent);
@@ -234,9 +234,9 @@ var ResourcePager = class ResourcePager {
234
234
  next: (response) => {
235
235
  if (generation !== this.generation) return;
236
236
  this.hasError = false;
237
- const posts = response?.posts ?? [];
237
+ const posts = response?.result ?? [];
238
238
  this.fetched += posts.length;
239
- this.total = posts.length ? response.object_count ?? this.fetched : this.fetched;
239
+ this.total = posts.length ? response.page_info?.total_count ?? this.fetched : this.fetched;
240
240
  const kept = posts.filter(this.keep);
241
241
  this.items = [...this.items, ...kept];
242
242
  const addedNow = added + kept.length;
@@ -296,7 +296,7 @@ var ResourceNoteCardComponent = class ResourceNoteCardComponent extends AppBaseC
296
296
  getTags() {
297
297
  this.isLoaded = false;
298
298
  this.tagService.getAllTagCategories({ search: "Release Notes" }, this.getEffectiveSubscriptionId()).subscribe((response) => {
299
- this.tagCategory = response?.tag_categories?.[0];
299
+ this.tagCategory = response?.result?.[0];
300
300
  this.getPostTags();
301
301
  this.cdr.markForCheck();
302
302
  });
@@ -304,7 +304,7 @@ var ResourceNoteCardComponent = class ResourceNoteCardComponent extends AppBaseC
304
304
  getPostTags() {
305
305
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
306
306
  for (const [type, name] of Object.entries(RELEASE_TAG_NAMES)) {
307
- this.postTags[type] = this.findTag(response.tags, name, this.tagCategory?.id);
307
+ this.postTags[type] = this.findTag(response.result, name, this.tagCategory?.id);
308
308
  if (this.postTags[type]?.id) this.loadReleases(type);
309
309
  else {
310
310
  this.isLoaded = true;
@@ -1347,8 +1347,8 @@ var BaseResourceComponent = class BaseResourceComponent extends AppBaseComponent
1347
1347
  categories: this.tagService.getAllTagCategories({ search: this.getSearchTerm() }, this.getEffectiveSubscriptionId()),
1348
1348
  tags: this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId())
1349
1349
  }).subscribe(({ categories, tags }) => {
1350
- this.tagCategory = categories?.tag_categories?.[0];
1351
- this.blogPostTag = tags.tags.find((tag) => tag.tag_category_id === this.tagCategory?.id);
1350
+ this.tagCategory = categories?.result?.[0];
1351
+ this.blogPostTag = tags.result.find((tag) => tag.tag_category_id === this.tagCategory?.id);
1352
1352
  this.getPosts(1, 100);
1353
1353
  this.cdr.markForCheck();
1354
1354
  }).add(() => {
@@ -1358,7 +1358,7 @@ var BaseResourceComponent = class BaseResourceComponent extends AppBaseComponent
1358
1358
  }
1359
1359
  getPostTags() {
1360
1360
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1361
- this.blogPostTag = response.tags.find((tag) => tag.name === this.getResourceType());
1361
+ this.blogPostTag = response.result.find((tag) => tag.name === this.getResourceType());
1362
1362
  this.getPosts(1, 100);
1363
1363
  this.cdr.markForCheck();
1364
1364
  }).add(() => {
@@ -1368,7 +1368,7 @@ var BaseResourceComponent = class BaseResourceComponent extends AppBaseComponent
1368
1368
  }
1369
1369
  getTestimonialTags() {
1370
1370
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1371
- this.blogTestimonialsPostTag = response.tags.find((tag) => tag.name === "Testimonials");
1371
+ this.blogTestimonialsPostTag = response.result.find((tag) => tag.name === "Testimonials");
1372
1372
  this.getTestimonialsPosts(1, 100);
1373
1373
  this.cdr.markForCheck();
1374
1374
  });
@@ -1381,7 +1381,7 @@ var BaseResourceComponent = class BaseResourceComponent extends AppBaseComponent
1381
1381
  }
1382
1382
  fetchPosts(page, pageSize, tagCategoryId, targetProperty) {
1383
1383
  this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", tagCategoryId).subscribe((response) => {
1384
- const filteredPosts = response.posts.filter((post) => post.tags?.some((tag) => tag.tag_category_id === tagCategoryId)).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime()).slice(0, 12);
1384
+ const filteredPosts = response.result.filter((post) => post.tags?.some((tag) => tag.tag_category_id === tagCategoryId)).sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime()).slice(0, 12);
1385
1385
  if (targetProperty === "posts") this.posts = filteredPosts;
1386
1386
  else this.testimonialsPosts = filteredPosts;
1387
1387
  this.cdr.markForCheck();
@@ -1694,7 +1694,7 @@ var ReplayEventCardComponent = class ReplayEventCardComponent extends AppBaseCom
1694
1694
  }
1695
1695
  getPostTags() {
1696
1696
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1697
- this.blogPostTag = response.tags.find((tag) => tag.name === "Events");
1697
+ this.blogPostTag = response.result.find((tag) => tag.name === "Events");
1698
1698
  if (this.blogPostTag?.tag_category_id) this.loadReplays();
1699
1699
  else this.isLoaded = true;
1700
1700
  this.cdr.markForCheck();
@@ -1883,7 +1883,7 @@ var UpcomingEventCardComponent = class UpcomingEventCardComponent extends AppBas
1883
1883
  }
1884
1884
  getPostTags() {
1885
1885
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
1886
- this.blogPostTag = response.tags.find((tag) => tag.name === "Events");
1886
+ this.blogPostTag = response.result.find((tag) => tag.name === "Events");
1887
1887
  if (this.blogPostTag?.tag_category_id) this.refresh();
1888
1888
  else this.isLoaded = true;
1889
1889
  this.cdr.markForCheck();
@@ -1912,7 +1912,7 @@ var UpcomingEventCardComponent = class UpcomingEventCardComponent extends AppBas
1912
1912
  getAllPosts(page, pageSize) {
1913
1913
  this.isLoaded = false;
1914
1914
  this.resourceService.getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, "", this.categoryId ?? this.blogPostTag?.tag_category_id).subscribe((response) => {
1915
- const sortedPosts = (response.posts ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());
1915
+ const sortedPosts = (response.result ?? []).filter((post) => post.showcase === true).sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());
1916
1916
  this.posts = [...sortedPosts].slice(0, 3).reverse();
1917
1917
  this.cdr.markForCheck();
1918
1918
  }).add(() => {
@@ -2263,4 +2263,4 @@ i0.ɵɵngDeclareClassMetadata({
2263
2263
  });
2264
2264
  export { ResourceCardComponent as a, ResourceNoteCardComponent as c, Trial4ContactUsModule as d, BaseResourceComponent as i, ResourcePager as l, UpcomingEventCardComponent as n, CaseStudyCardComponent as o, ResourceVaultComponent as r, ResourceVideoCardComponent as s, ResourceCardsModule as t, ResourceEditCardLazyComponent as u };
2265
2265
 
2266
- //# sourceMappingURL=posiwise-resource-module-resource-cards.module-DWV2LWdy.mjs.map
2266
+ //# sourceMappingURL=posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs","names":[],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-module/src/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.ts","../../../../libs/resource-module/src/lib/public/shared/resource-pager.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.html","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.html","../../../../libs/resource-module/src/lib/public/components/base/base-resource.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.html","../../../../libs/resource-module/src/lib/public/components/resource-webinars/replay-event-cards/replay-event-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/replay-event-cards/replay-event-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.html","../../../../libs/resource-module/src/lib/public/shared/resource-cards.module.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { Trial4SharedContactUsModule } from '@posiwise/resource-contact-us';\n\n@NgModule({\n imports: [Trial4SharedContactUsModule],\n exports: [Trial4SharedContactUsModule]\n})\nexport class Trial4ContactUsModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n type SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n/**\n * Lazy-loading wrapper for ResourceEditCard\n */\n@Component({\n selector: 'pw-resource-edit-card-lazy',\n template: `<ng-container #editCardContainer></ng-container>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceEditCardLazyComponent implements OnChanges, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @ViewChild('editCardContainer', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n @Input() id!: number;\n @Input() resourceData;\n @Input() canEdit = false;\n @Output() updated = new EventEmitter<void>();\n\n private componentRef = null;\n private loading = false;\n\n async ngOnChanges(changes: SimpleChanges) {\n if (this.canEdit && !this.componentRef && !this.loading) {\n await this.loadEditCard();\n } else if (!this.canEdit && this.componentRef) {\n this.container.clear();\n this.componentRef = null;\n } else if (this.componentRef && (changes['id'] || changes['resourceData'])) {\n // Update existing component inputs\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n }\n }\n\n private async loadEditCard() {\n if (this.componentRef || this.loading) return; // Prevent double loading\n\n this.loading = true; // Set BEFORE async operation\n\n try {\n // Dynamically import ResourceEditCard component (145 KB)\n const module = await import('../resource-edit-card/resource-edit-card.component');\n const ResourceEditCardComponent = module.ResourceEditCardComponent;\n\n // Ensure container exists and is clear\n if (!this.container) return;\n this.container.clear();\n\n // Create component dynamically (only once)\n this.componentRef = this.container.createComponent(ResourceEditCardComponent);\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n this.componentRef.instance.updated.subscribe(() => {\n this.updated.emit();\n this.cdr.markForCheck();\n });\n this.loading = false;\n } catch (error) {\n console.error('Failed to load ResourceEditCard:', error);\n this.loading = false;\n }\n }\n\n ngOnDestroy() {\n this.componentRef?.destroy();\n }\n}\n","import { ListResponse } from '@posiwise/common-services';\nimport { Resource } from '@posiwise/common-utilities';\n\nimport { Observable } from 'rxjs';\n\nimport type { ResourceService } from '../../resource.service';\n\n/** Sort sent to `/posts/get_all` so that pages line up with the order the cards are shown. */\nexport const NEWEST_PUBLISHED_FIRST = { order_by: 'published_at', order_direction: 'desc' };\n\n/** A post as `/posts/get_all` returns it: the shared `Resource` plus the listing fields. */\nexport type PublicPost = Resource & {\n showcase?: boolean;\n when?: string;\n published_at?: string;\n rectangular_picture?: { url?: string };\n};\n\n/** What to list: the subscription plus a tag category or specific tags. */\nexport interface PublicPostsQuery {\n subscriptionId: number;\n tagCategoryIds?: string;\n tagIds?: string;\n}\n\n/** Posts fetched per request on every resources page. */\nexport const RESOURCE_PAGE_SIZE = 15;\n\n/** Distance from the page bottom (px) at which the next page is requested on scroll. */\nconst SCROLL_THRESHOLD = 300;\n\n/**\n * Pages through a resources list. Each load keeps fetching until it has added\n * `pageSize` posts that pass `keep` (or the server runs out), so a filter that\n * hides most of a page — showcase only, upcoming events only — never stalls it.\n */\nexport class ResourcePager<T> {\n items: T[] = [];\n isLoaded = false;\n isLoadingMore = false;\n /** The last request failed; cleared by the next load that succeeds. */\n hasError = false;\n\n private page = 0;\n private fetched = 0;\n private total = 0;\n // Bumped on reset, so a reply to a superseded request is ignored.\n private generation = 0;\n\n constructor(\n private readonly fetchPage: (page: number, pageSize: number) => Observable<ListResponse<T>>,\n private readonly onChange: () => void,\n private readonly keep: (post: T) => boolean = () => true,\n readonly pageSize = RESOURCE_PAGE_SIZE\n ) {}\n\n /** A pager over the public `/posts` list, newest-published first. */\n static forPublicPosts(\n service: ResourceService,\n query: () => PublicPostsQuery,\n onChange: () => void,\n keep: (post: PublicPost) => boolean,\n pageSize = RESOURCE_PAGE_SIZE\n ): ResourcePager<PublicPost> {\n const fetchPage = (page: number, size: number) => {\n const q = query();\n return service.getPublicPosts(\n q.subscriptionId,\n page,\n size,\n '',\n q.tagCategoryIds,\n q.tagIds,\n NEWEST_PUBLISHED_FIRST\n );\n };\n return new ResourcePager<PublicPost>(fetchPage, onChange, keep, pageSize);\n }\n\n get hasMore(): boolean {\n return this.fetched < this.total;\n }\n\n /** Posts the server matched, including those not loaded yet. */\n get totalCount(): number {\n return this.total;\n }\n\n /** Clears the list and loads the first posts. */\n reset(): void {\n this.generation += 1;\n this.items = [];\n this.page = 0;\n this.fetched = 0;\n this.total = 0;\n this.isLoaded = false;\n this.isLoadingMore = false;\n this.hasError = false;\n this.fetchNext(this.generation, 0);\n }\n\n /** Appends the next posts; ignored while a load is in flight or nothing is left. */\n loadMore(): void {\n if (!this.isLoaded || this.isLoadingMore || !this.hasMore) return;\n this.isLoadingMore = true;\n this.onChange();\n this.fetchNext(this.generation, 0);\n }\n\n /** Calls `loadMore` when the viewport is near the bottom of the page (browser only). */\n loadMoreIfNearBottom(): void {\n if (typeof window === 'undefined' || !this.isLoaded || !this.hasMore) return;\n const viewportBottom = window.scrollY + window.innerHeight;\n if (viewportBottom >= document.documentElement.scrollHeight - SCROLL_THRESHOLD) {\n this.loadMore();\n }\n }\n\n private fetchNext(generation: number, added: number): void {\n this.page += 1;\n this.fetchPage(this.page, this.pageSize).subscribe({\n next: response => {\n if (generation !== this.generation) return;\n this.hasError = false;\n const posts = response?.result ?? [];\n this.fetched += posts.length;\n // An empty page ends paging even if the count disagrees, so this can't loop.\n this.total = posts.length\n ? (response.page_info?.total_count ?? this.fetched)\n : this.fetched;\n const kept = posts.filter(this.keep);\n this.items = [...this.items, ...kept];\n const addedNow = added + kept.length;\n if (addedNow < this.pageSize && this.hasMore) {\n this.fetchNext(generation, addedNow);\n return;\n }\n this.finish();\n },\n error: () => {\n if (generation !== this.generation) return;\n this.page -= 1; // retry the same page on the next load\n this.hasError = true;\n this.finish();\n }\n });\n }\n\n private finish(): void {\n this.isLoaded = true;\n this.isLoadingMore = false;\n this.onChange();\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../resource.service';\nimport { PublicPost, RESOURCE_PAGE_SIZE, ResourcePager } from '../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../resource-edit-card-lazy/resource-edit-card-lazy.component';\n\nconst RELEASE_TAG_NAMES: Record<string, string> = {\n product: 'Product Release Notes',\n press: 'Press Release Notes'\n};\n\n@Component({\n selector: 'pw-resource-note-card',\n templateUrl: './release-note-card.component.html',\n styleUrls: [\n '../resources/resources-shared.component.scss',\n '../../shared/resource-load-more.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n RouterLink,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceNoteCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() releaseHeader = false;\n @Input() categoryId!: string;\n @Input() isReleasePress = false;\n @Input() isResource = false;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() tag;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n postTags: { [key: string]: { id: string; title: string } } = {};\n releasePosts: { [key: string]: Resource[] } = {};\n pagers: { [key: string]: ResourcePager<PublicPost> } = {};\n isLoadingMore: { [key: string]: boolean } = {};\n\n tagCategory;\n isEditingTitle: boolean;\n isPressEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n ngOnInit(): void {\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 }\n this.getTags();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if ((changes['user'] || changes['userLoggedIn']) && this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Release Notes' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.result?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n for (const [type, name] of Object.entries(RELEASE_TAG_NAMES)) {\n this.postTags[type] = this.findTag(response.result, name, this.tagCategory?.id);\n if (this.postTags[type]?.id) {\n this.loadReleases(type);\n } else {\n this.isLoaded = true;\n this.releasePosts[type] = [];\n }\n }\n this.cdr.markForCheck();\n });\n }\n\n private findTag(tags, name: string, categoryId: number) {\n return tags.find(tag => tag.name === name && tag.tag_category_id === categoryId);\n }\n\n hasReleases(type: string): boolean {\n return this.releasePosts[type]?.length !== 0 && this.isLoaded;\n }\n\n /** Full page: newest first, 15 at a time (\"Load more\"). Landing: the 3 newest. */\n loadReleases(type: string): void {\n this.isLoaded = false;\n this.pagers[type] = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagIds: this.postTags[type]?.id\n }),\n () => this.syncFromPager(type),\n post => post.showcase === true,\n this.postSlice ? RESOURCE_PAGE_SIZE : 3\n );\n this.pagers[type].reset();\n }\n\n private syncFromPager(type: string): void {\n const pager = this.pagers[type];\n // Landing: 3 newest, oldest first. Full page: newest first, so \"Load more\" adds below.\n this.releasePosts[type] = this.postSlice ? pager.items : pager.items.slice(0, 3).reverse();\n this.isLoadingMore[type] = pager.isLoadingMore;\n this.isLoaded = Object.values(this.pagers).every(p => p.isLoaded);\n this.cdr.markForCheck();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.postTags['product'].title;\n }\n\n toggleEditPressTitle() {\n this.isPressEditingTitle = true;\n this.editedTitle = this.postTags['press'].title;\n }\n\n saveEditedTitle(type) {\n HelperService.updateTagTitle(\n this.postTags[type],\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.postTags[type].title = this.editedTitle;\n if (type === 'product') {\n this.isEditingTitle = false;\n } else {\n this.isPressEditingTitle = false;\n }\n this.cdr.markForCheck();\n });\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","@if (hasReleases('product')) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (postTags['product']?.title) {\n <span [innerHTML]=\"postTags['product']?.title\"></span>\n } @else {\n Product Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['product']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasReleases('product')) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['product']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadReleases('product')\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url?.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n @if (postSlice && pagers['product']?.hasMore) {\n <button type=\"button\" class=\"resource-load-more\" [disabled]=\"isLoadingMore['product']\" (click)=\"pagers['product'].loadMore()\">\n {{ 'Resource.LoadMore' | transloco }}\n </button>\n }\n }\n </div>\n</section>\n}\n@if (isReleasePress && hasReleases('press')) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n @if (!isPressEditingTitle) {\n @if (postTags['press']?.title) {\n <span [innerHTML]=\"postTags['press']?.title\"></span>\n } @else {\n Press Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" id=\"input_editedTitle_1600\" name=\"input_editedTitle_1600\"\n aria-label=\"Input Edited Title 1600\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['press']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasReleases('press')) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['press']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadReleases('press')\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n @if (postSlice && pagers['press']?.hasMore) {\n <button type=\"button\" class=\"resource-load-more\" [disabled]=\"isLoadingMore['press']\" (click)=\"pagers['press'].loadMore()\">\n {{ 'Resource.LoadMore' | transloco }}\n </button>\n }\n }\n </div>\n</section>\n}\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, RESOURCE_PAGE_SIZE, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\n\n@Component({\n selector: 'pw-resource-video-card',\n templateUrl: './resource-video-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n RouterLink,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceVideoCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() showVideoSection = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */\n pager: ResourcePager<PublicPost>;\n\n get posts(): Resource[] {\n return this.pager?.items ?? [];\n }\n\n get isLoaded(): boolean {\n return this.pager?.isLoaded ?? false;\n }\n\n get isLoadingMore(): boolean {\n return this.pager?.isLoadingMore ?? false;\n }\n\n videoStates: { [slug: string]: { loaded: boolean; url: SafeResourceUrl } } = {};\n\n isEditingTitle = false;\n editedTitle: string;\n isMasterSubscription;\n\n ngOnInit(): void {\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 }\n this.loadPosts();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n loadVideo(post): void {\n if (!post.external_url) return;\n\n const slug = post.slug;\n let externalUrl = post.external_url;\n\n // Append autoplay only when clicked\n externalUrl += externalUrl.includes('?') ? '&autoplay=1' : '?autoplay=1';\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.videoStates[slug].url = this.sanitizer.bypassSecurityTrustResourceUrl(externalUrl); //NOSONAR\n }\n\n loadPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.categoryId\n }),\n () => {\n this.syncVideoStates();\n this.cdr.markForCheck();\n },\n post => post.showcase === true,\n this.postSlice ? RESOURCE_PAGE_SIZE : 3\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.postSlice) this.pager?.loadMoreIfNearBottom();\n }\n\n /** Gives every loaded video post an embed URL, keeping any it already has. */\n private syncVideoStates(): void {\n this.posts.forEach(post => {\n if (post.external_url && !this.videoStates[post.slug]) {\n this.videoStates[post.slug] = {\n loaded: true,\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n url: this.sanitizer.bypassSecurityTrustResourceUrl(post.external_url) //NOSONAR\n };\n }\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVideoSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n On-Demand Videos\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/videos\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"resource-blog-card\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\">\n </pw-resource-edit-card-lazy>\n <p [innerHTML]=\"post.title\" class=\"mb-5\"></p>\n <a [href]=\" post.external_url\" target=\"_blank\">\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid mb-3\"\n [alt]=\"post.title\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n </a>\n <a class=\"resource-btn mt-3\" [href]=\" post.external_url\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Watch now' }}</span>\n <span class=\"arrow\">→</span>\n </a>\n </div>\n }\n </div>\n }\n @if (isLoadingMore) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n </div>\n\n</section>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, RESOURCE_PAGE_SIZE, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceVideoCardComponent } from '../../resource-videos/resource-video-cards/resource-video-cards.component';\n\n@Component({\n selector: 'pw-case-studies-card',\n templateUrl: './case-studies-cards.component.html',\n styleUrls: ['./case-studies-cards.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n RouterLink,\n NgClass,\n FormsModule,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n ResourceVideoCardComponent,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class CaseStudyCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() showCaseStudyHeader = false;\n @Input() categoryId!: string;\n @Input() postSlice = false;\n @Input() tag;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */\n pager: ResourcePager<PublicPost>;\n\n get posts(): Resource[] {\n return this.pager?.items ?? [];\n }\n\n get isLoaded(): boolean {\n return this.pager?.isLoaded ?? false;\n }\n\n get isLoadingMore(): boolean {\n return this.pager?.isLoadingMore ?? false;\n }\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n companyName = this.appConfig.company.name;\n\n isMasterSubscription;\n\n isEditingTitle = false;\n editedTitle: string;\n\n ngOnInit(): void {\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 }\n this.loadPosts();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n loadPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.categoryId\n }),\n () => this.cdr.markForCheck(),\n post => post.showcase === true,\n this.postSlice ? RESOURCE_PAGE_SIZE : 3\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.postSlice) this.pager?.loadMoreIfNearBottom();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\" id=\"case-studies\">\n <div class=\"container\">\n @if (showCaseStudyHeader) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n <a class=\"view-all\" routerLink=\"/resources/case-studies\">VIEW ALL ></a>\n </div>\n } @else {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n </div>\n }\n\n\n <ng-template #caseStudyHeaderTemplate>\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span>\n <span [innerHTML]=\"resourceTitle\"></span>\n </span>\n } @else {\n Case Studies\n }\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\"\n (click)=\"toggleEditTitle()\"\n (keydown.enter)=\"toggleEditTitle()\"\n (keydown.space)=\"toggleEditTitle()\"\n title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n\n </h2>\n </ng-template>\n\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"testimonial-box\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\">\n </pw-resource-edit-card-lazy>\n <div>\n @if (!post.rectangular_picture.url.includes('default-photo.jpg') ) {\n <img [src]=\"post.rectangular_picture.url\"\n alt=\"IT Partners Logo\"\n class=\"company-logo mb-3\"\n width=\"320\"\n height=\"180\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n <p class=\"mb-4 mt-3 testimonial-section\">\n <span [innerHTML]=\"post.title\"></span>\n </p>\n </div>\n <!-- BOTTOM AVATAR -->\n <div class=\"avatar-container mt-5\">\n @if (post.picture.url && !post.picture.url.includes('default-photo.jpg')) {\n <img [src]=\"post.picture.url\"\n alt=\"User Avatar\"\n class=\"testimonial-avatar\"\n width=\"96\"\n height=\"96\"\n loading=\"lazy\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"read-more-btn-overlay\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"read-more-btn-overlay\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n </div>\n }\n </div>\n }\n @if (isLoadingMore) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n </div>\n</section>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../../resource.service';\nimport { PublicPost, RESOURCE_PAGE_SIZE, ResourcePager } from '../../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../../resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceVideoCardComponent } from '../../../resource-videos/resource-video-cards/resource-video-cards.component';\n\n@Component({\n selector: 'pw-resource-cards',\n templateUrl: './resource-cards.component.html',\n styleUrls: ['../../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n RouterLink,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n ResourceVideoCardComponent,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() categoryId!: string;\n @Input() isHeaderVisible = true;\n @Input() isRelated = false;\n @Input() resourceTitle!: string;\n @Input() postSlice = false;\n @Input() header;\n @Input() tag;\n @Input() resourceLink;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n /** Full list (`postSlice`) pages on scroll; the related strip shows 3. */\n pager: ResourcePager<PublicPost>;\n\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n isEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n ngOnInit(): void {\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 }\n this.loadPosts();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n get posts(): Resource[] {\n return this.pager?.items ?? [];\n }\n\n get isLoaded(): boolean {\n return this.pager?.isLoaded ?? false;\n }\n\n get isLoadingMore(): boolean {\n return this.pager?.isLoadingMore ?? false;\n }\n\n get hasMorePosts(): boolean {\n return this.postSlice && !!this.pager?.hasMore;\n }\n\n loadPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.categoryId\n }),\n () => this.cdr.markForCheck(),\n post => post.showcase === true,\n this.postSlice ? RESOURCE_PAGE_SIZE : 3\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.postSlice) this.pager?.loadMoreIfNearBottom();\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n @if (isHeaderVisible) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Our team's articles\n }\n @if (!isRelated && canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9056\" name=\"input_editedTitle_9056\"\n aria-label=\"Input Edited Title 9056\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" [routerLink]=\"resourceLink\">VIEW ALL ></a>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded && !hasMorePosts && !isLoadingMore) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title \"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\"\n /></a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [href]=\"post.external_url\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n @if (isLoadingMore) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n }\n </div>\n</section>","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n template: '',\n\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class BaseResourceComponent extends AppBaseComponent implements OnInit {\n protected readonly resourceService = inject(ResourceService);\n protected readonly tagService = inject(TagService);\n private readonly authService = inject(AuthService);\n protected readonly cdr = inject(ChangeDetectorRef);\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n testimonialsPosts: Resource[] = [];\n userLoggedIn: boolean;\n blogPostTag;\n tagCategory;\n blogTestimonialsPostTag;\n isLoaded = false;\n user: User;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n ngOnInit() {\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 this.updateCanEditResourcesValue();\n this.initializeComponent();\n this.cdr.markForCheck();\n });\n } else {\n this.initializeComponent();\n }\n this.cdr.markForCheck();\n });\n }\n\n protected initializeComponent() {\n if (this.shouldUseTagCategories()) {\n this.getTags();\n } else {\n this.getPostTags();\n }\n\n if (this.shouldLoadTestimonials()) {\n this.getTestimonialTags();\n }\n }\n\n protected getTags() {\n this.isLoaded = false;\n forkJoin({\n categories: this.tagService.getAllTagCategories(\n { search: this.getSearchTerm() },\n this.getEffectiveSubscriptionId()\n ),\n tags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(({ categories, tags }) => {\n this.tagCategory = categories?.result?.[0];\n this.blogPostTag = tags.result.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.result.find(tag => tag.name === this.getResourceType());\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getTestimonialTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogTestimonialsPostTag = response.result.find(\n tag => tag.name === 'Testimonials'\n );\n this.getTestimonialsPosts(1, 100);\n this.cdr.markForCheck();\n });\n }\n\n protected getPosts(page: number, pageSize: number) {\n this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, 'posts');\n }\n\n getTestimonialsPosts(page: number, pageSize: number) {\n this.fetchPosts(\n page,\n pageSize,\n this.blogTestimonialsPostTag?.tag_category_id,\n 'testimonialsPosts'\n );\n }\n\n /** Shared method to fetch posts with common filtering, sorting, and slicing logic */\n private fetchPosts(\n page: number,\n pageSize: number,\n tagCategoryId,\n targetProperty: 'posts' | 'testimonialsPosts'\n ) {\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', tagCategoryId)\n .subscribe(response => {\n const filteredPosts = response.result\n .filter(post => post.tags?.some(tag => tag.tag_category_id === tagCategoryId))\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n )\n .slice(0, 12);\n\n if (targetProperty === 'posts') {\n this.posts = filteredPosts;\n } else {\n this.testimonialsPosts = filteredPosts;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n protected getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n // Abstract methods that each component must implement\n protected abstract getResourceType(): string;\n\n // Optional methods that can be overridden\n protected getSearchTerm(): string {\n return this.getResourceType();\n }\n\n protected shouldUseTagCategories(): boolean {\n return false;\n }\n\n protected shouldLoadTestimonials(): boolean {\n return false;\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","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\n\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { PublicPost, RESOURCE_PAGE_SIZE, ResourcePager } from '../../shared/resource-pager';\nimport { BaseResourceComponent } from '../base/base-resource.component';\nimport { ResourceEditCardLazyComponent } from '../resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceVideoCardComponent } from '../resource-videos/resource-video-cards/resource-video-cards.component';\n\n@Component({\n selector: 'pw-resource--vault',\n templateUrl: './resource-vault.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n RouterLink,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n ResourceVideoCardComponent,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceVaultComponent extends BaseResourceComponent implements OnInit {\n @Input() showVaultSection = false;\n @Input() postSlice = false;\n @Input() categoryId;\n @Input() resourceTitle;\n @Input() tag;\n @Output() isLoadedChange = new EventEmitter<boolean>();\n\n /** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */\n pager: ResourcePager<PublicPost>;\n isLoadingMore = false;\n private announcedPager: ResourcePager<PublicPost>;\n\n isEditingTitle = false;\n editedTitle: string;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.getPosts();\n }\n\n protected getResourceType(): string {\n return 'Vault';\n }\n\n // Also called by BaseResourceComponent once tags load; the view reads only the newest pager.\n protected override getPosts(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.categoryId\n }),\n () => this.syncFromPager(),\n post => post.showcase === true,\n this.postSlice ? RESOURCE_PAGE_SIZE : 3\n );\n this.pager.reset();\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.postSlice) this.pager?.loadMoreIfNearBottom();\n }\n\n private syncFromPager(): void {\n this.posts = this.pager.items;\n this.isLoaded = this.pager.isLoaded;\n this.isLoadingMore = this.pager.isLoadingMore;\n // Once per pager: the base class also sets isLoaded, so a false→true check can miss it.\n if (this.isLoaded && this.announcedPager !== this.pager) {\n this.announcedPager = this.pager;\n this.isLoadedChange.emit(true);\n }\n this.cdr.markForCheck();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVaultSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap mb-5\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Whitepapers &amp; Tools\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/white-papers\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"d-flex mt-2 flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post) {\n <div class=\"resource-blog-card text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadPosts()\">\n </pw-resource-edit-card-lazy>\n <p class=\"mb-4\" [innerHTML]=\"post.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n @if (isLoadingMore) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\n\n@Component({\n selector: 'pw-replay-event-card',\n templateUrl: './replay-event-cards.component.html',\n styleUrls: [\n '../../resources/resources-shared.component.scss',\n '../../../shared/resource-load-more.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n RouterLink,\n TranslocoPipe\n ]\n})\nexport class ReplayEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() showEventContent = false;\n @Input() categoryId!: string;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n subscriptionId;\n\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n isLoadingMore = false;\n pager: ResourcePager<PublicPost>;\n blogPostTag;\n\n isMasterSubscription;\n\n ngOnInit(): void {\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.getPostTags();\n } else {\n this.getPostTags();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.result.find(tag => tag.name === 'Events');\n if (this.blogPostTag?.tag_category_id) {\n this.loadReplays();\n } else {\n this.isLoaded = true;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Pages through this list 15 visible posts at a time (\"Load more\"). */\n loadReplays(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.blogPostTag?.tag_category_id\n }),\n () => this.syncFromPager(),\n post => post.showcase === true && new Date(post?.when).getTime() < Date.now()\n );\n this.pager.reset();\n }\n\n private syncFromPager(): void {\n this.posts = this.pager.items;\n this.isLoaded = this.pager.isLoaded;\n this.isLoadingMore = this.pager.isLoadingMore;\n this.cdr.markForCheck();\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <div class=\"vault-header\">\n @if (resourceTitle) {\n <h2 class=\"vault-heading\">{{resourceTitle}} Replays</h2>\n } @else {\n <h2 class=\"vault-heading\">Events &amp; Webinars Replays</h2>\n }\n </div>\n </div>\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post) {\n <div class=\"resource-blog-card vault-card text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"loadReplays()\">\n </pw-resource-edit-card-lazy>\n <h5 class=\"badge-title fw-bold\">REPLAY:</h5>\n <p class=\"event-title mb-4\" [innerHtml]=\"post?.title\"></p>\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\" />\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [href]=\"post.external_url\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n @if (pager?.hasMore) {\n <button type=\"button\" class=\"resource-load-more\" [disabled]=\"isLoadingMore\" (click)=\"pager.loadMore()\">\n {{ 'Resource.LoadMore' | transloco }}\n </button>\n }\n }\n </div>\n</section>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { LazyImgDirective } from '@posiwise/directives';\nimport { HelperService } from '@posiwise/helper-service';\nimport { NoDataComponent } from '@posiwise/shared-components';\n\nimport { Bind } from 'primeng/bind';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { PublicPost, ResourcePager } from '../../../shared/resource-pager';\nimport { ResourceEditCardLazyComponent } from '../../resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ReplayEventCardComponent } from '../replay-event-cards/replay-event-cards.component';\n\n@Component({\n selector: 'pw-upcoming-event-card',\n templateUrl: './upcoming-event-cards.component.html',\n styleUrls: [\n '../../resources/resources-shared.component.scss',\n '../../../shared/resource-load-more.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n RouterLink,\n Bind,\n ProgressSpinner,\n NoDataComponent,\n ResourceEditCardLazyComponent,\n LazyImgDirective,\n ReplayEventCardComponent,\n TranslocoPipe\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class UpcomingEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n private readonly resourceService = inject(ResourceService);\n private readonly tagService = inject(TagService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() showEventContent = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n canEditResourcesValue = false;\n\n now = Date.now();\n subscriptionId;\n\n isEditingTitle = false;\n editedTitle: string;\n\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n isLoadingMore = false;\n pager: ResourcePager<PublicPost>;\n blogPostTag;\n isMasterSubscription;\n\n ngOnInit(): void {\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 }\n this.getPostTags();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.result.find(tag => tag.name === 'Events');\n if (this.blogPostTag?.tag_category_id) {\n this.refresh();\n } else {\n this.isLoaded = true;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Reloads in the current mode: paged full list, or the 3-card landing preview. */\n refresh(): void {\n if (this.postSlice) {\n this.loadUpcoming();\n } else {\n this.getAllPosts(1, 100);\n }\n }\n\n loadUpcoming(): void {\n this.pager = ResourcePager.forPublicPosts(\n this.resourceService,\n () => ({\n subscriptionId: this.getEffectiveSubscriptionId(),\n tagCategoryIds: this.categoryId ?? this.blogPostTag?.tag_category_id\n }),\n () => this.syncFromPager(),\n post => post.showcase === true && this.isUpcoming(post)\n );\n this.pager.reset();\n }\n\n private syncFromPager(): void {\n this.posts = this.pager.items;\n this.isLoaded = this.pager.isLoaded;\n this.isLoadingMore = this.pager.isLoadingMore;\n this.cdr.markForCheck();\n }\n\n isUpcoming(post): boolean {\n return new Date(post?.when).getTime() > this.now;\n }\n\n getAllPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.result ?? [])\n .filter(post => post.showcase === true)\n .sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());\n\n this.posts = [...sortedPosts].slice(0, 3).reverse();\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\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 private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showEventContent) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Events &amp; Webinars\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/events\">VIEW ALL ></a>\n </div>\n }\n @if (!showEventContent) {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Upcoming Events\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post)) {\n <div class=\"resource-blog-card d text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"refresh()\">\n </pw-resource-edit-card-lazy>\n @if (postSlice) {\n <h5 class=\"badge-title fw-bold\">UPCOMING:</h5>\n } @else {\n <h5 class=\"badge-title fw-bold\">\n {{ isUpcoming(post) ? 'UPCOMING:' : 'REPLAY:' }}\n </h5>\n }\n\n <p class=\"event-title mb-4\" [innerHtml]=\"post?.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n @if (postSlice && pager?.hasMore) {\n <button type=\"button\" class=\"resource-load-more\" [disabled]=\"isLoadingMore\" (click)=\"pager.loadMore()\">\n {{ 'Resource.LoadMore' | transloco }}\n </button>\n }\n }\n </div>\n</section>\n\n\n@if (!showEventContent) {\n<section class=\"bg-white\">\n <pw-replay-event-card [resourceTitle]=\"resourceTitle\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-replay-event-card>\n</section>\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { ResourceSharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SelectModule } from 'primeng/select';\n\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { ResourceNoteCardComponent } from '../components/reslease-note-card/release-note-card.component';\nimport { CaseStudyCardComponent } from '../components/resource-case-studies/case-studies-cards/case-studies-cards.component';\nimport { Trial4ContactUsModule } from '../components/resource-contact-us/resource-contact-us.module';\nimport { ResourceEditCardLazyComponent } from '../components/resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceCardComponent } from '../components/resource-post/related-resources/resource-cards/resource-cards.component';\nimport { ResourceVaultComponent } from '../components/resource-vault/resource-vault.component';\nimport { ResourceVideoCardComponent } from '../components/resource-videos/resource-video-cards/resource-video-cards.component';\nimport { ReplayEventCardComponent } from '../components/resource-webinars/replay-event-cards/replay-event-cards.component';\nimport { UpcomingEventCardComponent } from '../components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component';\n\n/**\n * Module containing resource card components (lightweight version)\n * ResourceEditCard is lazy-loaded on demand to save 145 KB\n * Trial4ContactUs moved to separate module for better tree-shaking\n * Used by both ResourceRootModule and ResourceSharedModule\n */\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PipesModule,\n PaginatorModule,\n SelectModule,\n ResourceSharedComponentsModule,\n CoreTranslocoModule,\n TranslocoModule,\n DirectivesModule,\n DragDropModule,\n NgxCaptchaModule,\n Trial4ContactUsModule, // ✅ Import standalone module\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n // Rendered inside UpcomingEventCardComponent's template, so it must be declared alongside it.\n ReplayEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n ResourceEditCardLazyComponent\n ],\n exports: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n Trial4ContactUsModule, // ✅ Re-export for backward compatibility\n ResourceEditCardLazyComponent,\n PaginatorModule // Export PaginatorModule so ResourceCompanyCardComponent can use p-paginator\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceCardsModule {}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { i as BaseResourceComponent, o as CaseStudyCardComponent } from "./posiwise-resource-module-resource-cards.module-DWV2LWdy.mjs";
1
+ import { i as BaseResourceComponent, o as CaseStudyCardComponent } from "./posiwise-resource-module-resource-cards.module-DOpH-f0N.mjs";
2
2
  import { ResourceSharedModule, ResourceTopBannerEditComponent, TestimonialCardListComponent } from "./posiwise-resource-module.mjs";
3
3
  import * as i0 from "@angular/core";
4
4
  import { ChangeDetectionStrategy, Component, NgModule, inject } from "@angular/core";
@@ -28,8 +28,8 @@ var ResourceCaseStudiesComponent = class ResourceCaseStudiesComponent extends Ba
28
28
  }
29
29
  getPostTags() {
30
30
  this.tagService.getTagsByType("post_categories", {}, this.getEffectiveSubscriptionId()).subscribe((response) => {
31
- if (this.shouldUseTagCategories()) this.blogPostTag = response.tags.find((tag) => tag.tag_category_id === this.tagCategory?.id);
32
- else this.blogPostTag = response.tags.find((tag) => tag.name === this.getResourceType());
31
+ if (this.shouldUseTagCategories()) this.blogPostTag = response.result.find((tag) => tag.tag_category_id === this.tagCategory?.id);
32
+ else this.blogPostTag = response.result.find((tag) => tag.name === this.getResourceType());
33
33
  this.updateSEOMetadata();
34
34
  this.getPosts(1, 100);
35
35
  this.cdr.markForCheck();
@@ -244,4 +244,4 @@ i0.ɵɵngDeclareClassMetadata({
244
244
  });
245
245
  export { ResourceCaseStudiesModule };
246
246
 
247
- //# sourceMappingURL=posiwise-resource-module-resource-case-studies.module-CQHAhbsv.mjs.map
247
+ //# sourceMappingURL=posiwise-resource-module-resource-case-studies.module-CzB9wtnf.mjs.map